/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "fuoltext.hxx" #include #include #include #include #include #include #include #include #include "app.hrc" #include "OutlineView.hxx" #ifndef SD_WINDOW_SHELL_HXX #include "Window.hxx" #endif #include "DrawDocShell.hxx" #include "ViewShell.hxx" #include "OutlineViewShell.hxx" #include // Fuer SlotFilter-Listing namespace sd { static sal_uInt16 SidArray[] = { SID_STYLE_FAMILY2, SID_STYLE_FAMILY3, SID_STYLE_FAMILY5, SID_STYLE_UPDATE_BY_EXAMPLE, SID_CUT, SID_COPY, SID_PASTE, SID_SELECTALL, SID_ATTR_CHAR_FONT, SID_ATTR_CHAR_POSTURE, SID_ATTR_CHAR_WEIGHT, SID_ATTR_CHAR_SHADOWED, SID_ATTR_CHAR_STRIKEOUT, SID_ATTR_CHAR_UNDERLINE, SID_ATTR_CHAR_FONTHEIGHT, SID_ATTR_CHAR_COLOR, SID_ATTR_CHAR_KERNING, SID_OUTLINE_UP, SID_OUTLINE_DOWN, SID_OUTLINE_LEFT, SID_OUTLINE_RIGHT, //SID_OUTLINE_FORMAT, SID_OUTLINE_COLLAPSE_ALL, //SID_OUTLINE_BULLET, SID_OUTLINE_COLLAPSE, SID_OUTLINE_EXPAND_ALL, SID_OUTLINE_EXPAND, SID_SET_SUPER_SCRIPT, SID_SET_SUB_SCRIPT, SID_HYPERLINK_GETLINK, SID_PRESENTATION_TEMPLATES, SID_STATUS_PAGE, SID_STATUS_LAYOUT, SID_EXPAND_PAGE, SID_SUMMARY_PAGE, SID_PARASPACE_INCREASE, SID_PARASPACE_DECREASE, 0 }; TYPEINIT1( FuOutlineText, FuOutline ); /************************************************************************* |* |* Konstruktor |* \************************************************************************/ FuOutlineText::FuOutlineText(ViewShell* pViewShell, ::sd::Window* pWindow, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq) : FuOutline(pViewShell, pWindow, pView, pDoc, rReq) { } FunctionReference FuOutlineText::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) { FunctionReference xFunc( new FuOutlineText( pViewSh, pWin, pView, pDoc, rReq ) ); xFunc->DoExecute( rReq ); return xFunc; } /************************************************************************* |* |* MouseButtonDown-event |* \************************************************************************/ sal_Bool FuOutlineText::MouseButtonDown(const MouseEvent& rMEvt) { sal_Bool bReturn = sal_False; mpWindow->GrabFocus(); bReturn = pOutlineView->GetViewByWindow(mpWindow)->MouseButtonDown(rMEvt); if (bReturn) { // Attributierung der akt. Textstelle kann jetzt anders sein mpViewShell->GetViewFrame()->GetBindings().Invalidate( SidArray ); } else { bReturn = FuOutline::MouseButtonDown(rMEvt); } return (bReturn); } /************************************************************************* |* |* MouseMove-event |* \************************************************************************/ sal_Bool FuOutlineText::MouseMove(const MouseEvent& rMEvt) { sal_Bool bReturn = sal_False; bReturn = pOutlineView->GetViewByWindow(mpWindow)->MouseMove(rMEvt); if (!bReturn) { bReturn = FuOutline::MouseMove(rMEvt); } // MT 07/2002: Done in OutlinerView::MouseMove /* const SvxFieldItem* pFieldItem = pOutlineView->GetViewByWindow( mpWindow )-> GetFieldUnderMousePointer(); const SvxFieldData* pField = NULL; if( pFieldItem ) pField = pFieldItem->GetField(); if( pField && pField->ISA( SvxURLField ) ) { mpWindow->SetPointer( Pointer( POINTER_REFHAND ) ); } else mpWindow->SetPointer( Pointer( POINTER_TEXT ) ); */ return (bReturn); } /************************************************************************* |* |* MouseButtonUp-event |* \************************************************************************/ sal_Bool FuOutlineText::MouseButtonUp(const MouseEvent& rMEvt) { sal_Bool bReturn = sal_False; bReturn = pOutlineView->GetViewByWindow(mpWindow)->MouseButtonUp(rMEvt); if (bReturn) { // Attributierung der akt. Textstelle kann jetzt anders sein mpViewShell->GetViewFrame()->GetBindings().Invalidate( SidArray ); } else { const SvxFieldItem* pFieldItem = pOutlineView->GetViewByWindow( mpWindow )->GetFieldUnderMousePointer(); if( pFieldItem ) { const SvxFieldData* pField = pFieldItem->GetField(); if( pField && pField->ISA( SvxURLField ) ) { bReturn = sal_True; mpWindow->ReleaseMouse(); SfxStringItem aStrItem( SID_FILE_NAME, ( (SvxURLField*) pField)->GetURL() ); SfxStringItem aReferer( SID_REFERER, mpDocSh->GetMedium()->GetName() ); SfxBoolItem aBrowseItem( SID_BROWSE, sal_True ); SfxViewFrame* pFrame = mpViewShell->GetViewFrame(); if ( rMEvt.IsMod1() ) { // Im neuen Frame oeffnen pFrame->GetDispatcher()->Execute(SID_OPENDOC, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aStrItem, &aBrowseItem, &aReferer, 0L); } else { // Im aktuellen Frame oeffnen SfxFrameItem aFrameItem( SID_DOCFRAME, pFrame ); pFrame->GetDispatcher()->Execute(SID_OPENDOC, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aStrItem, &aFrameItem, &aBrowseItem, &aReferer, 0L); } } } } if( !bReturn ) bReturn = FuOutline::MouseButtonUp(rMEvt); return (bReturn); } /************************************************************************* |* |* Tastaturereignisse bearbeiten |* |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls |* sal_False. |* \************************************************************************/ sal_Bool FuOutlineText::KeyInput(const KeyEvent& rKEvt) { sal_Bool bReturn = sal_False; sal_uInt16 nKeyGroup = rKEvt.GetKeyCode().GetGroup(); if( !mpDocSh->IsReadOnly() || nKeyGroup == KEYGROUP_CURSOR ) { mpWindow->GrabFocus(); std::auto_ptr< OutlineViewModelChangeGuard > aGuard; if( (nKeyGroup != KEYGROUP_CURSOR) && (nKeyGroup != KEYGROUP_FKEYS) ) aGuard.reset( new OutlineViewModelChangeGuard( *pOutlineView ) ); bReturn = pOutlineView->GetViewByWindow(mpWindow)->PostKeyEvent(rKEvt); if (bReturn) { UpdateForKeyPress (rKEvt); } else { bReturn = FuOutline::KeyInput(rKEvt); } } return (bReturn); } void FuOutlineText::UpdateForKeyPress (const KeyEvent& rEvent) { // Attributes at the current text position may have changed. mpViewShell->GetViewFrame()->GetBindings().Invalidate(SidArray); bool bUpdatePreview = true; switch (rEvent.GetKeyCode().GetCode()) { // When just the cursor has been moved the preview only changes when // it moved to entries of another page. To prevent unnecessary // updates we check this here. This is an early rejection test, so // missing a key is not a problem. case KEY_UP: case KEY_DOWN: case KEY_LEFT: case KEY_RIGHT: case KEY_HOME: case KEY_END: case KEY_PAGEUP: case KEY_PAGEDOWN: { SdPage* pCurrentPage = pOutlineViewShell->GetActualPage(); bUpdatePreview = (pCurrentPage != pOutlineViewShell->GetActualPage()); } break; } if (bUpdatePreview) pOutlineViewShell->UpdatePreview (pOutlineViewShell->GetActualPage()); } /************************************************************************* |* |* Function aktivieren |* \************************************************************************/ void FuOutlineText::Activate() { FuOutline::Activate(); } /************************************************************************* |* |* Function deaktivieren |* \************************************************************************/ void FuOutlineText::Deactivate() { FuOutline::Deactivate(); } /************************************************************************* |* |* Cut object to clipboard |* \************************************************************************/ void FuOutlineText::DoCut() { pOutlineView->GetViewByWindow(mpWindow)->Cut(); } /************************************************************************* |* |* Copy object to clipboard |* \************************************************************************/ void FuOutlineText::DoCopy() { pOutlineView->GetViewByWindow(mpWindow)->Copy(); } /************************************************************************* |* |* Paste object from clipboard |* \************************************************************************/ void FuOutlineText::DoPaste() { pOutlineView->GetViewByWindow(mpWindow)->PasteSpecial(); } } // end of namespace sd