diff options
Diffstat (limited to 'sd/source/ui/view/drviewse.cxx')
-rwxr-xr-x | sd/source/ui/view/drviewse.cxx | 1684 |
1 files changed, 1684 insertions, 0 deletions
diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx new file mode 100755 index 000000000000..6f6f49fdc93c --- /dev/null +++ b/sd/source/ui/view/drviewse.cxx @@ -0,0 +1,1684 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" + +#include <com/sun/star/presentation/XPresentation2.hpp> +#include <com/sun/star/form/FormButtonType.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/i18n/TransliterationModules.hpp> +#include <com/sun/star/i18n/TransliterationModulesExtra.hpp> + +#include <comphelper/processfactory.hxx> + +#include "undo/undomanager.hxx" +#include <vcl/waitobj.hxx> +#include <svl/aeitem.hxx> +#include <editeng/editstat.hxx> +#include <vcl/msgbox.hxx> +#include <svl/urlbmk.hxx> +#include <svx/svdpagv.hxx> +#include <svx/fmshell.hxx> +#include <vcl/scrbar.hxx> +#include <svx/svdopath.hxx> +#include <svx/svdundo.hxx> +#include <svx/svdorect.hxx> +#include <svx/svdograf.hxx> +#include <svl/eitem.hxx> +#include <editeng/eeitem.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/request.hxx> +#include <svx/svxids.hrc> +#include <editeng/flditem.hxx> +#include <svx/ruler.hxx> +#include <svx/obj3d.hxx> +#include <svx/fmglob.hxx> +#include <svx/svdouno.hxx> +#include <svx/dataaccessdescriptor.hxx> +#include <tools/urlobj.hxx> +#include <svl/slstitm.hxx> +#include <sfx2/ipclient.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <avmedia/mediawindow.hxx> +#include <svl/urihelper.hxx> +#include <sfx2/docfile.hxx> + +#include "DrawViewShell.hxx" +#include "slideshow.hxx" +#include "ViewShellImplementation.hxx" +#include "ViewShellHint.hxx" +#include "framework/FrameworkHelper.hxx" +#include "app.hrc" +#include "glob.hrc" +#include "strings.hrc" +#include "res_bmp.hrc" +#include "drawdoc.hxx" +#include "fusel.hxx" +#include "futext.hxx" +#include "fuconrec.hxx" +#include "fuconcs.hxx" +#include "fuconuno.hxx" +#include "fuconbez.hxx" +#include "fuediglu.hxx" +#include "fuconarc.hxx" +#include "fucon3d.hxx" +#include "sdresid.hxx" +#include "slideshow.hxx" +#include "Outliner.hxx" +#include "PresentationViewShell.hxx" +#include "sdpage.hxx" +#include "FrameView.hxx" +#include "zoomlist.hxx" +#include "drawview.hxx" +#include "DrawDocShell.hxx" +#include "sdattr.hxx" +#include "ViewShellBase.hxx" +#include "ToolBarManager.hxx" +#include "anminfo.hxx" +#include "optsitem.hxx" +#include "Window.hxx" +#include "fuformatpaintbrush.hxx" + +using ::rtl::OUString; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::presentation; + +namespace sd { + +#ifdef _MSC_VER +#pragma optimize ( "", off ) +#endif + +/************************************************************************* +|* +|* Permanente Funktionen +|* +\************************************************************************/ + +void ImpAddPrintableCharactersToTextEdit(SfxRequest& rReq, ::sd::View* pView) +{ + // #98198# evtl. feed characters to activated textedit + const SfxItemSet* pSet = rReq.GetArgs(); + + if(pSet) + { + String aInputString; + + if(SFX_ITEM_SET == pSet->GetItemState(SID_ATTR_CHAR)) + aInputString = ((SfxStringItem&)pSet->Get(SID_ATTR_CHAR)).GetValue(); + + if(aInputString.Len()) + { + OutlinerView* pOLV = pView->GetTextEditOutlinerView(); + + if(pOLV) + { + for(sal_uInt16 a(0); a < aInputString.Len(); a++) + { + sal_Char aChar = (sal_Char)aInputString.GetChar(a); + KeyCode aKeyCode; + KeyEvent aKeyEvent(aChar, aKeyCode); + + // add actual character + pOLV->PostKeyEvent(aKeyEvent); + } + } + } + } +} + +void DrawViewShell::FuPermanent(SfxRequest& rReq) +{ + // Waehrend einer Native-Diashow wird nichts ausgefuehrt! + + if (SlideShow::IsRunning(GetViewShellBase())) + return; + + USHORT nSId = rReq.GetSlot(); + + if( HasCurrentFunction() && + ( nSId == SID_TEXTEDIT || nSId == SID_ATTR_CHAR || nSId == SID_TEXT_FITTOSIZE || + nSId == SID_ATTR_CHAR_VERTICAL || nSId == SID_TEXT_FITTOSIZE_VERTICAL ) ) + { + FunctionReference xFunc( GetCurrentFunction() ); + + FuText* pFuText = dynamic_cast< FuText* >( xFunc.get() ); + + if( pFuText ) + { + pFuText->SetPermanent(TRUE); + xFunc->ReceiveRequest( rReq ); + + MapSlot( nSId ); + + Invalidate(); + + Invalidate(); + + // #98198# evtl. feed characters to activated textedit + if(SID_ATTR_CHAR == nSId && GetView() && GetView()->IsTextEdit()) + ImpAddPrintableCharactersToTextEdit(rReq, GetView()); + + rReq.Done(); + return; + } + } + + CheckLineTo (rReq); + USHORT nOldSId = 0; + BOOL bPermanent = FALSE; + + if( !mpDrawView ) + return; + + if(HasCurrentFunction()) + { + if( (nSId == SID_FORMATPAINTBRUSH) && (GetCurrentFunction()->GetSlotID() == SID_TEXTEDIT) ) + { + // save text edit mode for format paintbrush! + SetOldFunction( GetCurrentFunction() ); + } + else + { + if(GetOldFunction() == GetCurrentFunction()) + { + SetOldFunction(0); + } + } + + if ( nSId != SID_TEXTEDIT && nSId != SID_ATTR_CHAR && nSId != SID_TEXT_FITTOSIZE && + nSId != SID_ATTR_CHAR_VERTICAL && nSId != SID_TEXT_FITTOSIZE_VERTICAL && + nSId != SID_FORMATPAINTBRUSH && + mpDrawView->IsTextEdit() ) + { + mpDrawView->SdrEndTextEdit(); + } + + if( HasCurrentFunction() ) + { + nOldSId = GetCurrentFunction()->GetSlotID(); + + if (nOldSId == nSId || + ((nOldSId == SID_TEXTEDIT || nOldSId == SID_ATTR_CHAR || nOldSId == SID_TEXT_FITTOSIZE || + nOldSId == SID_ATTR_CHAR_VERTICAL || nOldSId == SID_TEXT_FITTOSIZE_VERTICAL) && + (nSId == SID_TEXTEDIT || nSId == SID_ATTR_CHAR || nSId == SID_TEXT_FITTOSIZE || + nSId == SID_ATTR_CHAR_VERTICAL || nSId == SID_TEXT_FITTOSIZE_VERTICAL ))) + { + bPermanent = TRUE; + } + + GetCurrentFunction()->Deactivate(); + } + + SetCurrentFunction(0); + + SfxBindings& rBind = GetViewFrame()->GetBindings(); + rBind.Invalidate(nOldSId); + rBind.Update(nOldSId); + } + + // Slot wird gemapped (ToolboxImages/-Slots) + MapSlot( nSId ); + + switch ( nSId ) + { + case SID_TEXTEDIT: // BASIC ??? + case SID_ATTR_CHAR: + case SID_ATTR_CHAR_VERTICAL: + case SID_TEXT_FITTOSIZE: + case SID_TEXT_FITTOSIZE_VERTICAL: + { + SetCurrentFunction( FuText::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) ); + GetCurrentFunction()->DoExecute(rReq); + + SfxBindings& rBindings = GetViewFrame()->GetBindings(); + rBindings.Invalidate( SID_ATTR_CHAR ); + rBindings.Invalidate( SID_ATTR_CHAR_VERTICAL ); + rBindings.Invalidate( SID_TEXT_FITTOSIZE ); + rBindings.Invalidate( SID_TEXT_FITTOSIZE_VERTICAL ); + + // #98198# evtl. feed characters to activated textedit + if(SID_ATTR_CHAR == nSId && GetView() && GetView()->IsTextEdit()) + ImpAddPrintableCharactersToTextEdit(rReq, GetView()); + + rReq.Done(); + } + break; + + case SID_FM_CREATE_CONTROL: + { + SetCurrentFunction( FuConstructUnoControl::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) ); + rReq.Done(); + } + break; + + // #98721# + case SID_FM_CREATE_FIELDCONTROL: + { + SFX_REQUEST_ARG( rReq, pDescriptorItem, SfxUnoAnyItem, SID_FM_DATACCESS_DESCRIPTOR, sal_False ); + DBG_ASSERT( pDescriptorItem, "DrawViewShell::FuPermanent(SID_FM_CREATE_FIELDCONTROL): invalid request args!" ); + + if(pDescriptorItem) + { + // get the form view + FmFormView* pFormView = PTR_CAST(FmFormView, mpDrawView); + SdrPageView* pPageView = pFormView ? pFormView->GetSdrPageView() : NULL; + + if(pPageView) + { + ::svx::ODataAccessDescriptor aDescriptor(pDescriptorItem->GetValue()); + SdrObject* pNewDBField = pFormView->CreateFieldControl(aDescriptor); + + if(pNewDBField) + { + Rectangle aVisArea = GetActiveWindow()->PixelToLogic(Rectangle(Point(0,0), GetActiveWindow()->GetOutputSizePixel())); + Point aObjPos(aVisArea.Center()); + Size aObjSize(pNewDBField->GetLogicRect().GetSize()); + aObjPos.X() -= aObjSize.Width() / 2; + aObjPos.Y() -= aObjSize.Height() / 2; + Rectangle aNewObjectRectangle(aObjPos, aObjSize); + + pNewDBField->SetLogicRect(aNewObjectRectangle); + + GetView()->InsertObjectAtView(pNewDBField, *pPageView); + } + } + } + rReq.Done(); + } + break; + + case SID_OBJECT_SELECT: + case SID_OBJECT_ROTATE: + case SID_OBJECT_MIRROR: + case SID_OBJECT_CROP: + case SID_OBJECT_TRANSPARENCE: + case SID_OBJECT_GRADIENT: + case SID_OBJECT_SHEAR: + case SID_OBJECT_CROOK_ROTATE: + case SID_OBJECT_CROOK_SLANT: + case SID_OBJECT_CROOK_STRETCH: + case SID_CONVERT_TO_3D_LATHE: + { + short nSlotId = rReq.GetSlot(); + + if (nSlotId == SID_OBJECT_CROOK_ROTATE || + nSlotId == SID_OBJECT_CROOK_SLANT || + nSlotId == SID_OBJECT_CROOK_STRETCH) + { + if ( mpDrawView->GetMarkedObjectList().GetMarkCount() > 0 && + !mpDrawView->IsCrookAllowed( mpDrawView->IsCrookNoContortion() ) ) + { + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else if ( QueryBox(GetActiveWindow(), WB_YES_NO, + String(SdResId(STR_ASK_FOR_CONVERT_TO_BEZIER) ) + ).Execute() == RET_YES ) + { + // Implizite Wandlung in Bezier + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->ConvertMarkedToPathObj(FALSE); + } + } + } + else if (nSlotId == SID_OBJECT_SHEAR) + { + ULONG i = 0; + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + ULONG nMarkCnt = rMarkList.GetMarkCount(); + BOOL b3DObjMarked = FALSE; + + while (i < nMarkCnt && !b3DObjMarked) + { + if (rMarkList.GetMark(i)->GetMarkedSdrObj()->ISA(E3dObject)) + { + b3DObjMarked = TRUE; + } + else + { + i++; + } + } + + if ( nMarkCnt > 0 && !b3DObjMarked && + (!mpDrawView->IsShearAllowed() || !mpDrawView->IsDistortAllowed()) ) + { + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else if ( QueryBox(GetActiveWindow(), WB_YES_NO, + String(SdResId(STR_ASK_FOR_CONVERT_TO_BEZIER) ) + ).Execute() == RET_YES ) + { + // Implizite Wandlung in Bezier + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->ConvertMarkedToPathObj(FALSE); + } + } + } + + SetCurrentFunction( FuSelection::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) ); + rReq.Done(); + Invalidate( SID_OBJECT_SELECT ); + } + break; + + case SID_DRAW_LINE: + case SID_DRAW_XLINE: + case SID_DRAW_MEASURELINE: + case SID_LINE_ARROW_START: + case SID_LINE_ARROW_END: + case SID_LINE_ARROWS: + case SID_LINE_ARROW_CIRCLE: + case SID_LINE_CIRCLE_ARROW: + case SID_LINE_ARROW_SQUARE: + case SID_LINE_SQUARE_ARROW: + + case SID_DRAW_RECT: + case SID_DRAW_RECT_NOFILL: + case SID_DRAW_RECT_ROUND: + case SID_DRAW_RECT_ROUND_NOFILL: + case SID_DRAW_SQUARE: + case SID_DRAW_SQUARE_NOFILL: + case SID_DRAW_SQUARE_ROUND: + case SID_DRAW_SQUARE_ROUND_NOFILL: + case SID_DRAW_ELLIPSE: + case SID_DRAW_ELLIPSE_NOFILL: + case SID_DRAW_CIRCLE: + case SID_DRAW_CIRCLE_NOFILL: + case SID_DRAW_CAPTION: + case SID_DRAW_CAPTION_VERTICAL: + case SID_TOOL_CONNECTOR: + case SID_CONNECTOR_ARROW_START: + case SID_CONNECTOR_ARROW_END: + case SID_CONNECTOR_ARROWS: + case SID_CONNECTOR_CIRCLE_START: + case SID_CONNECTOR_CIRCLE_END: + case SID_CONNECTOR_CIRCLES: + case SID_CONNECTOR_LINE: + case SID_CONNECTOR_LINE_ARROW_START: + case SID_CONNECTOR_LINE_ARROW_END: + case SID_CONNECTOR_LINE_ARROWS: + case SID_CONNECTOR_LINE_CIRCLE_START: + case SID_CONNECTOR_LINE_CIRCLE_END: + case SID_CONNECTOR_LINE_CIRCLES: + case SID_CONNECTOR_CURVE: + case SID_CONNECTOR_CURVE_ARROW_START: + case SID_CONNECTOR_CURVE_ARROW_END: + case SID_CONNECTOR_CURVE_ARROWS: + case SID_CONNECTOR_CURVE_CIRCLE_START: + case SID_CONNECTOR_CURVE_CIRCLE_END: + case SID_CONNECTOR_CURVE_CIRCLES: + case SID_CONNECTOR_LINES: + case SID_CONNECTOR_LINES_ARROW_START: + case SID_CONNECTOR_LINES_ARROW_END: + case SID_CONNECTOR_LINES_ARROWS: + case SID_CONNECTOR_LINES_CIRCLE_START: + case SID_CONNECTOR_LINES_CIRCLE_END: + case SID_CONNECTOR_LINES_CIRCLES: + { + SetCurrentFunction( FuConstructRectangle::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) ); + rReq.Done(); + } + break; + case SID_DRAW_POLYGON: + case SID_DRAW_POLYGON_NOFILL: + case SID_DRAW_XPOLYGON: + case SID_DRAW_XPOLYGON_NOFILL: + case SID_DRAW_FREELINE: + case SID_DRAW_FREELINE_NOFILL: + case SID_DRAW_BEZIER_FILL: // BASIC + case SID_DRAW_BEZIER_NOFILL: // BASIC + { + SetCurrentFunction( FuConstructBezierPolygon::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent) ); + rReq.Done(); + } + break; + + case SID_GLUE_EDITMODE: + { + if (nOldSId != SID_GLUE_EDITMODE) + { + SetCurrentFunction( FuEditGluePoints::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) ); + } + else + { + GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); + } + + rReq.Done(); + } + break; + + case SID_DRAW_ARC: + case SID_DRAW_CIRCLEARC: + case SID_DRAW_PIE: + case SID_DRAW_PIE_NOFILL: + case SID_DRAW_CIRCLEPIE: + case SID_DRAW_CIRCLEPIE_NOFILL: + case SID_DRAW_ELLIPSECUT: + case SID_DRAW_ELLIPSECUT_NOFILL: + case SID_DRAW_CIRCLECUT: + case SID_DRAW_CIRCLECUT_NOFILL: + { + SetCurrentFunction( FuConstructArc::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent) ); + rReq.Done(); + } + break; + + case SID_3D_CUBE: + case SID_3D_SHELL: + case SID_3D_SPHERE: + case SID_3D_TORUS: + case SID_3D_HALF_SPHERE: + case SID_3D_CYLINDER: + case SID_3D_CONE: + case SID_3D_PYRAMID: + { + SetCurrentFunction( FuConstruct3dObject::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) ); + rReq.Done(); + } + break; + + case SID_DRAWTBX_CS_BASIC : + case SID_DRAWTBX_CS_SYMBOL : + case SID_DRAWTBX_CS_ARROW : + case SID_DRAWTBX_CS_FLOWCHART : + case SID_DRAWTBX_CS_CALLOUT : + case SID_DRAWTBX_CS_STAR : + case SID_DRAW_CS_ID : + { + SetCurrentFunction( FuConstructCustomShape::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) ); + rReq.Done(); + + if ( nSId != SID_DRAW_CS_ID ) + { + SfxBindings& rBind = GetViewFrame()->GetBindings(); + rBind.Invalidate( nSId ); + rBind.Update( nSId ); + } + } + break; + + case SID_FORMATPAINTBRUSH: + { + SetCurrentFunction( FuFormatPaintBrush::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); + rReq.Done(); + SfxBindings& rBind = GetViewFrame()->GetBindings(); + rBind.Invalidate( nSId ); + rBind.Update( nSId ); + break; + } + + default: + break; + } + + if(HasOldFunction()) + { + USHORT nSlotId = GetOldFunction()->GetSlotID(); + + GetOldFunction()->Deactivate(); + SetOldFunction(0); + + SfxBindings& rBind = GetViewFrame()->GetBindings(); + rBind.Invalidate( nSlotId ); + rBind.Update( nSlotId ); + } + + if(HasCurrentFunction()) + { + GetCurrentFunction()->Activate(); + SetOldFunction( GetCurrentFunction() ); + + SetHelpId( GetCurrentFunction()->GetSlotID() ); + } + + // Shell wird invalidiert, schneller als einzeln (laut MI) + // Jetzt explizit der letzte Slot incl. Update() + Invalidate(); + + // #97016# III CTRL-SID_OBJECT_SELECT -> select first draw object if none is selected yet + if(SID_OBJECT_SELECT == nSId && HasCurrentFunction() && (rReq.GetModifier() & KEY_MOD1)) + { + if(!GetView()->AreObjectsMarked()) + { + // select first object + GetView()->UnmarkAllObj(); + GetView()->MarkNextObj(TRUE); + + // ...and make it visible + if(GetView()->AreObjectsMarked()) + GetView()->MakeVisible(GetView()->GetAllMarkedRect(), *GetActiveWindow()); + } + } + + // #97016# with qualifier construct directly + if(HasCurrentFunction() && (rReq.GetModifier() & KEY_MOD1)) + { + // get SdOptions + SdOptions* pOptions = SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType()); + sal_uInt32 nDefaultObjectSizeWidth(pOptions->GetDefaultObjectSizeWidth()); + sal_uInt32 nDefaultObjectSizeHeight(pOptions->GetDefaultObjectSizeHeight()); + + // calc position and size + Rectangle aVisArea = GetActiveWindow()->PixelToLogic(Rectangle(Point(0,0), GetActiveWindow()->GetOutputSizePixel())); + Point aPagePos = aVisArea.Center(); + aPagePos.X() -= nDefaultObjectSizeWidth / 2; + aPagePos.Y() -= nDefaultObjectSizeHeight / 2; + Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight)); + SdrPageView* pPageView = mpDrawView->GetSdrPageView(); + + if(pPageView) + { + // create the default object + SdrObject* pObj = GetCurrentFunction()->CreateDefaultObject(nSId, aNewObjectRectangle); + + if(pObj) + { + // insert into page + GetView()->InsertObjectAtView(pObj, *pPageView); + + // Now that pFuActual has done what it was created for we + // can switch on the edit mode for callout objects. + switch (nSId) + { + case SID_DRAW_CAPTION: + case SID_DRAW_CAPTION_VERTICAL: + { + // Make FuText the current function. + SfxUInt16Item aItem (SID_TEXTEDIT, 1); + GetViewFrame()->GetDispatcher()-> + Execute(SID_TEXTEDIT, SFX_CALLMODE_SYNCHRON | + SFX_CALLMODE_RECORD, &aItem, 0L); + // Put text object into edit mode. + GetView()->SdrBeginTextEdit(static_cast<SdrTextObj*>(pObj), pPageView); + break; + } + } + } + } + } +} + +////////////////////////////////////////////////////////////////////////////// +// service routine for Undo/Redo implementation +extern SfxUndoManager* ImpGetUndoManagerFromViewShell(DrawViewShell& rDViewShell); + +/************************************************************************* +|* +|* SfxRequests fuer Support-Funktionen +|* +\************************************************************************/ + +void DrawViewShell::FuSupport(SfxRequest& rReq) +{ + if( rReq.GetSlot() == SID_STYLE_FAMILY && rReq.GetArgs()) + GetDocSh()->SetStyleFamily(((SfxUInt16Item&)rReq.GetArgs()->Get( SID_STYLE_FAMILY )).GetValue()); + + // Waehrend einer Native-Diashow wird nichts ausgefuehrt! + if(SlideShow::IsRunning(GetViewShellBase()) && + (rReq.GetSlot() != SID_PRESENTATION_END && + rReq.GetSlot() != SID_SIZE_PAGE)) + return; + + CheckLineTo (rReq); + + if( !mpDrawView ) + return; + + USHORT nSId = rReq.GetSlot(); + + // Slot wird evtl. gemapped (ToolboxImages/-Slots) + MapSlot( nSId ); + + switch ( nSId ) + { + case SID_CLEAR_UNDO_STACK: + { + GetDocSh()->ClearUndoBuffer(); + rReq.Ignore (); + } + break; + + // Slots der ToolboxController gemapped ausfuehren + case SID_OBJECT_CHOOSE_MODE: + case SID_POSITION: + case SID_OBJECT_ALIGN: + case SID_ZOOM_TOOLBOX: + case SID_DRAWTBX_TEXT: + case SID_DRAWTBX_RECTANGLES: + case SID_DRAWTBX_ELLIPSES: + case SID_DRAWTBX_LINES: + case SID_DRAWTBX_ARROWS: + case SID_DRAWTBX_3D_OBJECTS: + case SID_DRAWTBX_CONNECTORS: + case SID_DRAWTBX_INSERT: + { + USHORT nMappedSlot = GetMappedSlot( nSId ); + if( nMappedSlot > 0 ) + { + SfxRequest aReq( nMappedSlot, 0, GetDoc()->GetItemPool() ); + ExecuteSlot( aReq ); + } + } + break; + + case SID_PRESENTATION: + case SID_REHEARSE_TIMINGS: + { + Reference< XPresentation2 > xPresentation( GetDoc()->getPresentation() ); + if( xPresentation.is() ) + { + if( ( SID_REHEARSE_TIMINGS != rReq.GetSlot() ) ) + xPresentation->start(); + else + xPresentation->rehearseTimings(); + } + rReq.Ignore (); + } + break; + + case SID_PRESENTATION_END: + { + StopSlideShow(true); + + rReq.Ignore (); + } + break; + + case SID_BEZIER_EDIT: + { + mpDrawView->SetFrameDragSingles(!mpDrawView->IsFrameDragSingles()); + + /****************************************************************** + * ObjectBar einschalten + ******************************************************************/ + if( dynamic_cast< FuSelection* >( GetCurrentFunction().get() ) || dynamic_cast< FuConstructBezierPolygon* >( GetCurrentFunction().get() ) ) + { + // Tell the tool bar manager about the context change. + GetViewShellBase().GetToolBarManager()->SelectionHasChanged(*this,*mpDrawView); + } + + Invalidate(SID_BEZIER_EDIT); + rReq.Ignore(); + } + break; + + case SID_OBJECT_CLOSE: + { + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + if ( rMarkList.GetMark(0) && !mpDrawView->IsAction() ) + { + SdrPathObj* pPathObj = (SdrPathObj*) rMarkList.GetMark(0)->GetMarkedSdrObj(); + const bool bUndo = mpDrawView->IsUndoEnabled(); + if( bUndo ) + mpDrawView->BegUndo(String(SdResId(STR_UNDO_BEZCLOSE))); + + mpDrawView->UnmarkAllPoints(); + + if( bUndo ) + mpDrawView->AddUndo(new SdrUndoGeoObj(*pPathObj)); + + pPathObj->ToggleClosed(); + + if( bUndo ) + mpDrawView->EndUndo(); + } + rReq.Done(); + } + break; + + case SID_CUT: + { + if ( mpDrawView->IsPresObjSelected(FALSE, TRUE, FALSE, TRUE) ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + if(HasCurrentFunction()) + { + GetCurrentFunction()->DoCut(); + } + else if(mpDrawView) + { + mpDrawView->DoCut(); + } + } + rReq.Ignore (); + } + break; + + case SID_COPY: + { + if ( mpDrawView->IsPresObjSelected(FALSE, TRUE, FALSE, TRUE) ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + if(HasCurrentFunction()) + { + GetCurrentFunction()->DoCopy(); + } + else if( mpDrawView ) + { + mpDrawView->DoCopy(); + } + } + rReq.Ignore (); + } + break; + + case SID_PASTE: + { + WaitObject aWait( (Window*)GetActiveWindow() ); + + if(HasCurrentFunction()) + { + GetCurrentFunction()->DoPaste(); + } + else if(mpDrawView) + { + mpDrawView->DoPaste(); + } + + rReq.Ignore (); + } + break; + + case SID_CLIPBOARD_FORMAT_ITEMS: + { + WaitObject aWait( (Window*)GetActiveWindow() ); + TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) ); + const SfxItemSet* pReqArgs = rReq.GetArgs(); + UINT32 nFormat = 0; + + if( pReqArgs ) + { + SFX_REQUEST_ARG( rReq, pIsActive, SfxUInt32Item, SID_CLIPBOARD_FORMAT_ITEMS, FALSE ); + nFormat = pIsActive->GetValue(); + } + + + if( nFormat && aDataHelper.GetTransferable().is() ) + { + sal_Int8 nAction = DND_ACTION_COPY; + + if( !mpDrawView->InsertData( aDataHelper, + GetActiveWindow()->PixelToLogic( Rectangle( Point(), GetActiveWindow()->GetOutputSizePixel() ).Center() ), + nAction, FALSE, nFormat ) ) + { + INetBookmark aINetBookmark( aEmptyStr, aEmptyStr ); + + if( ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) && + aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) ) || + ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) && + aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR, aINetBookmark ) ) || + ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ) && + aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR, aINetBookmark ) ) ) + { + InsertURLField( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), aEmptyStr, NULL ); + } + } + } + } + break; + + case SID_DELETE: + { + if ( mpDrawView->IsTextEdit() ) + { + OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView(); + + if (pOLV) + { + KeyCode aKCode(KEY_DELETE); + KeyEvent aKEvt( 0, aKCode); + pOLV->PostKeyEvent(aKEvt); + } + } + else if ( mpDrawView->IsPresObjSelected(FALSE, TRUE, FALSE, TRUE) ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + KeyCode aKCode(KEY_DELETE); + KeyEvent aKEvt( 0, aKCode); + + bool bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt ); + + if( !bConsumed && HasCurrentFunction() ) + bConsumed = GetCurrentFunction()->KeyInput(aKEvt); + + if( !bConsumed && mpDrawView ) + mpDrawView->DeleteMarked(); + } + rReq.Ignore (); + } + break; + + case SID_NOTESMODE: + case SID_HANDOUTMODE: + // AutoLayouts have to be ready. + GetDoc()->StopWorkStartupDelay(); + // Fall through to following case statements. + + case SID_DRAWINGMODE: + case SID_DIAMODE: + case SID_OUTLINEMODE: + // Let the sub-shell manager handle the slot handling. + framework::FrameworkHelper::Instance(GetViewShellBase())->HandleModeChangeSlot( + nSId, + rReq); + rReq.Ignore (); + break; + + case SID_MASTERPAGE: // BASIC + case SID_SLIDE_MASTERPAGE: // BASIC + case SID_TITLE_MASTERPAGE: // BASIC + case SID_NOTES_MASTERPAGE: // BASIC + case SID_HANDOUT_MASTERPAGE: // BASIC + { + // AutoLayouts muessen fertig sein + GetDoc()->StopWorkStartupDelay(); + + const SfxItemSet* pReqArgs = rReq.GetArgs(); + + if ( pReqArgs ) + { + SFX_REQUEST_ARG (rReq, pIsActive, SfxBoolItem, SID_MASTERPAGE, FALSE); + mbIsLayerModeActive = pIsActive->GetValue (); + } + + Broadcast ( + ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START)); + + if (nSId == SID_MASTERPAGE || + (nSId == SID_SLIDE_MASTERPAGE && mePageKind == PK_STANDARD) || + (nSId == SID_TITLE_MASTERPAGE && mePageKind == PK_STANDARD) || + (nSId == SID_NOTES_MASTERPAGE && mePageKind == PK_NOTES) || + (nSId == SID_HANDOUT_MASTERPAGE && mePageKind == PK_HANDOUT)) + { + if (nSId == SID_TITLE_MASTERPAGE || + nSId == SID_SLIDE_MASTERPAGE) + { + // Gibt es eine Seite mit dem AutoLayout "Titel"? + BOOL bFound = FALSE; + USHORT i = 0; + USHORT nCount = GetDoc()->GetSdPageCount(PK_STANDARD); + + while (i < nCount && !bFound) + { + SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD); + + if (nSId == SID_TITLE_MASTERPAGE && pPage->GetAutoLayout() == AUTOLAYOUT_TITLE) + { + bFound = TRUE; + SwitchPage((pPage->GetPageNum() - 1) / 2); + } + else if (nSId == SID_SLIDE_MASTERPAGE && pPage->GetAutoLayout() != AUTOLAYOUT_TITLE) + { + bFound = TRUE; + SwitchPage((pPage->GetPageNum() - 1) / 2); + } + + i++; + } + } + + // Default-Layer der MasterPage einschalten + mpDrawView->SetActiveLayer( String( SdResId(STR_LAYER_BCKGRNDOBJ) ) ); + + ChangeEditMode(EM_MASTERPAGE, mbIsLayerModeActive); + + if(HasCurrentFunction(SID_BEZIER_EDIT)) + GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); + } + else + { + // Switch to requested ViewShell. + ::OUString sRequestedView; + PageKind ePageKind; + switch (nSId) + { + case SID_SLIDE_MASTERPAGE: + case SID_TITLE_MASTERPAGE: + default: + sRequestedView = framework::FrameworkHelper::msImpressViewURL; + ePageKind = PK_STANDARD; + break; + + case SID_NOTES_MASTERPAGE: + sRequestedView = framework::FrameworkHelper::msNotesViewURL; + ePageKind = PK_NOTES; + break; + + case SID_HANDOUT_MASTERPAGE: + sRequestedView = framework::FrameworkHelper::msHandoutViewURL; + ePageKind = PK_HANDOUT; + break; + } + + mpFrameView->SetViewShEditMode(EM_MASTERPAGE, ePageKind); + mpFrameView->SetLayerMode(mbIsLayerModeActive); + framework::FrameworkHelper::Instance(GetViewShellBase())->RequestView( + sRequestedView, + framework::FrameworkHelper::msCenterPaneURL); + } + Broadcast ( + ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END)); + + InvalidateWindows(); + Invalidate(); + + rReq.Done(); + } + break; + + + case SID_CLOSE_MASTER_VIEW: + { + Broadcast ( + ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START)); + + // Switch page back to the first one. Not doing so leads to a + // crash. This seems to be some bug in the edit mode switching + // and page switching methods. + SwitchPage (0); + ChangeEditMode(EM_PAGE, IsLayerModeActive()); + Broadcast ( + ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END)); + + if(HasCurrentFunction(SID_BEZIER_EDIT)) + { + GetViewFrame()->GetDispatcher()->Execute( + SID_OBJECT_SELECT, + SFX_CALLMODE_ASYNCHRON); + } + + + rReq.Done(); + } + break; + + + case SID_RULER: + { + const SfxItemSet* pReqArgs = rReq.GetArgs(); + + // #97516# Remember old ruler state + BOOL bOldHasRuler(HasRuler()); + + if ( pReqArgs ) + { + SFX_REQUEST_ARG (rReq, pIsActive, SfxBoolItem, SID_RULER, FALSE); + SetRuler (pIsActive->GetValue ()); + } + else SetRuler (!HasRuler()); + + // #97516# Did ruler state change? Tell that to SdOptions, too. + BOOL bHasRuler(HasRuler()); + + if(bOldHasRuler != bHasRuler) + { + SdOptions* pOptions = SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType()); + + if(pOptions && pOptions->IsRulerVisible() != bHasRuler) + { + pOptions->SetRulerVisible(bHasRuler); + } + } + + Invalidate (SID_RULER); + Resize(); + rReq.Done (); + } + break; + + case SID_SIZE_PAGE: + case SID_SIZE_PAGE_WIDTH: // BASIC + { + mbZoomOnPage = ( rReq.GetSlot() == SID_SIZE_PAGE ); + + SdrPageView* pPageView = mpDrawView->GetSdrPageView(); + + if ( pPageView ) + { + Point aPagePos(0, 0); // = pPageView->GetOffset(); + Size aPageSize = pPageView->GetPage()->GetSize(); + + aPagePos.X() += aPageSize.Width() / 2; + aPageSize.Width() = (long) (aPageSize.Width() * 1.03); + + if( rReq.GetSlot() == SID_SIZE_PAGE ) + { + aPagePos.Y() += aPageSize.Height() / 2; + aPageSize.Height() = (long) (aPageSize.Height() * 1.03); + aPagePos.Y() -= aPageSize.Height() / 2; + } + else + { + Point aPt = GetActiveWindow()->PixelToLogic( Point( 0, GetActiveWindow()->GetSizePixel().Height() / 2 ) ); + aPagePos.Y() += aPt.Y(); + aPageSize.Height() = 2; + } + + aPagePos.X() -= aPageSize.Width() / 2; + + SetZoomRect( Rectangle( aPagePos, aPageSize ) ); + + Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), + GetActiveWindow()->GetOutputSizePixel()) ); + mpZoomList->InsertZoomRect(aVisAreaWin); + } + Invalidate( SID_ZOOM_IN ); + Invalidate( SID_ZOOM_OUT ); + Invalidate( SID_ZOOM_PANNING ); + Invalidate( SID_ZOOM_TOOLBOX ); + rReq.Done (); + } + break; + + case SID_SIZE_REAL: // BASIC + { + mbZoomOnPage = FALSE; + SetZoom( 100 ); + Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), + GetActiveWindow()->GetOutputSizePixel()) ); + mpZoomList->InsertZoomRect(aVisAreaWin); + Invalidate( SID_ZOOM_IN ); + Invalidate( SID_ZOOM_OUT ); + Invalidate( SID_ZOOM_PANNING ); + Invalidate( SID_ZOOM_TOOLBOX ); + rReq.Done (); + } + break; + + case SID_ZOOM_IN: // BASIC + { + mbZoomOnPage = FALSE; + SetZoom( Max( (long) ( GetActiveWindow()->GetZoom() / 2 ), (long) GetActiveWindow()->GetMinZoom() ) ); + Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), + GetActiveWindow()->GetOutputSizePixel()) ); + mpZoomList->InsertZoomRect(aVisAreaWin); + Invalidate( SID_ZOOM_IN ); + Invalidate( SID_ZOOM_OUT ); + Invalidate( SID_ZOOM_PANNING ); + Invalidate( SID_ZOOM_TOOLBOX ); + rReq.Done (); + } + break; + + case SID_SIZE_VISAREA: + { + Rectangle aVisArea = mpFrameView->GetVisArea(); + Size aVisAreaSize = aVisArea.GetSize(); + + if (aVisAreaSize.Height()!=0 && aVisAreaSize.Width()!=0) + { + mbZoomOnPage = FALSE; + SetZoomRect(aVisArea); + Invalidate( SID_ZOOM_IN ); + Invalidate( SID_ZOOM_OUT ); + Invalidate( SID_ZOOM_PANNING ); + Invalidate( SID_ZOOM_TOOLBOX ); + } + rReq.Done (); + } + break; + + // Namensverwirrung: SID_SIZE_OPTIMAL -> Zoom auf selektierte Objekte + // --> Wird als Objektzoom im Programm angeboten + case SID_SIZE_OPTIMAL: // BASIC + { + mbZoomOnPage = FALSE; + if ( mpDrawView->AreObjectsMarked() ) + { + maMarkRect = mpDrawView->GetAllMarkedRect(); + long nW = (long) (maMarkRect.GetWidth() * 1.03); + long nH = (long) (maMarkRect.GetHeight() * 1.03); + Point aPos = maMarkRect.Center(); + aPos.X() -= nW / 2; + aPos.Y() -= nH / 2; + if ( nW && nH ) + { + SetZoomRect(Rectangle(aPos, Size(nW, nH))); + + Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), + GetActiveWindow()->GetOutputSizePixel()) ); + mpZoomList->InsertZoomRect(aVisAreaWin); + } + } + Invalidate( SID_ZOOM_IN ); + Invalidate( SID_ZOOM_OUT ); + Invalidate( SID_ZOOM_PANNING ); + Invalidate( SID_ZOOM_TOOLBOX ); + rReq.Done (); + } + break; + + // Namensverwirrung: SID_SIZE_ALL -> Zoom auf alle Objekte + // --> Wird als Optimal im Programm angeboten + case SID_SIZE_ALL: // BASIC + { + mbZoomOnPage = FALSE; + SdrPageView* pPageView = mpDrawView->GetSdrPageView(); + + if( pPageView ) + { + Rectangle aBoundRect( pPageView->GetObjList()->GetAllObjBoundRect() ); + + long nW = (long) (aBoundRect.GetWidth() * 1.03); + long nH = (long) (aBoundRect.GetHeight() * 1.03); + Point aPos = aBoundRect.Center(); + aPos.X() -= nW / 2; + aPos.Y() -= nH / 2; + if ( nW && nH ) + { + SetZoomRect( Rectangle( aPos, Size( nW, nH ) ) ); + + Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), + GetActiveWindow()->GetOutputSizePixel()) ); + mpZoomList->InsertZoomRect(aVisAreaWin); + } + + Invalidate( SID_ZOOM_IN ); + Invalidate( SID_ZOOM_OUT ); + Invalidate( SID_ZOOM_PANNING ); + Invalidate( SID_ZOOM_TOOLBOX ); + } + rReq.Done (); + } + break; + + case SID_ZOOM_PREV: + { + if (mpDrawView->IsTextEdit()) + { + mpDrawView->SdrEndTextEdit(); + } + + if (mpZoomList->IsPreviousPossible()) + { + // Vorheriges ZoomRect einstellen + SetZoomRect(mpZoomList->GetPreviousZoomRect()); + } + rReq.Done (); + Invalidate( SID_ZOOM_TOOLBOX ); + } + break; + + case SID_ZOOM_NEXT: + { + if (mpDrawView->IsTextEdit()) + { + mpDrawView->SdrEndTextEdit(); + } + + if (mpZoomList->IsNextPossible()) + { + // Naechstes ZoomRect einstellen + SetZoomRect(mpZoomList->GetNextZoomRect()); + } + rReq.Done (); + Invalidate( SID_ZOOM_TOOLBOX ); + } + break; + + case SID_GLUE_INSERT_POINT: + case SID_GLUE_PERCENT: + case SID_GLUE_ESCDIR: + case SID_GLUE_ESCDIR_LEFT: + case SID_GLUE_ESCDIR_RIGHT: + case SID_GLUE_ESCDIR_TOP: + case SID_GLUE_ESCDIR_BOTTOM: + case SID_GLUE_HORZALIGN_CENTER: + case SID_GLUE_HORZALIGN_LEFT: + case SID_GLUE_HORZALIGN_RIGHT: + case SID_GLUE_VERTALIGN_CENTER: + case SID_GLUE_VERTALIGN_TOP: + case SID_GLUE_VERTALIGN_BOTTOM: + { + FunctionReference xFunc( GetCurrentFunction() ); + FuEditGluePoints* pFunc = dynamic_cast< FuEditGluePoints* >( xFunc.get() ); + + if(pFunc) + pFunc->ReceiveRequest(rReq); + + rReq.Done(); + } + break; + +#ifdef DBG_UTIL + case SID_SHOW_ITEMBROWSER: + { + mpDrawView->ShowItemBrowser( !mpDrawView->IsItemBrowserVisible() ); + rReq.Done (); + } + break; +#endif + + case SID_AUTOSPELL_CHECK: + { + BOOL bOnlineSpell = !GetDoc()->GetOnlineSpell(); + GetDoc()->SetOnlineSpell(bOnlineSpell); + + ::Outliner* pOL = mpDrawView->GetTextEditOutliner(); + + if (pOL) + { + ULONG nCntrl = pOL->GetControlWord(); + + if (bOnlineSpell) + nCntrl |= EE_CNTRL_ONLINESPELLING; + else + nCntrl &= ~EE_CNTRL_ONLINESPELLING; + + pOL->SetControlWord(nCntrl); + } + + GetActiveWindow()->Invalidate(); + rReq.Done (); + } + break; + + case SID_CONVERT_TO_1BIT_THRESHOLD: + case SID_CONVERT_TO_1BIT_MATRIX: + case SID_CONVERT_TO_4BIT_GRAYS: + case SID_CONVERT_TO_4BIT_COLORS: + case SID_CONVERT_TO_8BIT_GRAYS: + case SID_CONVERT_TO_8BIT_COLORS: + case SID_CONVERT_TO_24BIT: + { + BmpConversion eBmpConvert = BMP_CONVERSION_NONE; + + switch( nSId ) + { + case SID_CONVERT_TO_1BIT_THRESHOLD: + eBmpConvert = BMP_CONVERSION_1BIT_THRESHOLD; + break; + + case SID_CONVERT_TO_1BIT_MATRIX: + eBmpConvert = BMP_CONVERSION_1BIT_MATRIX; + break; + + case SID_CONVERT_TO_4BIT_GRAYS: + eBmpConvert = BMP_CONVERSION_4BIT_GREYS; + break; + + case SID_CONVERT_TO_4BIT_COLORS: + eBmpConvert = BMP_CONVERSION_4BIT_COLORS; + break; + + case SID_CONVERT_TO_8BIT_GRAYS: + eBmpConvert = BMP_CONVERSION_8BIT_GREYS; + break; + + case SID_CONVERT_TO_8BIT_COLORS: + eBmpConvert = BMP_CONVERSION_8BIT_COLORS; + break; + + case SID_CONVERT_TO_24BIT: + eBmpConvert = BMP_CONVERSION_24BIT; + break; + } + + mpDrawView->BegUndo(String(SdResId(STR_UNDO_COLORRESOLUTION))); + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + + for (ULONG i=0; i<rMarkList.GetMarkCount(); i++) + { + SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); + + if (pObj->GetObjInventor() == SdrInventor) + { + if (pObj->GetObjIdentifier() == OBJ_GRAF && !((SdrGrafObj*) pObj)->IsLinkedGraphic()) + { + const Graphic& rGraphic = ((SdrGrafObj*) pObj)->GetGraphic(); + + if( rGraphic.GetType() == GRAPHIC_BITMAP ) + { + SdrGrafObj* pNewObj = (SdrGrafObj*) pObj->Clone(); + + if( rGraphic.IsAnimated() ) + { + Animation aAnim( rGraphic.GetAnimation() ); + aAnim.Convert( eBmpConvert ); + pNewObj->SetGraphic( aAnim ); + } + else + { + BitmapEx aBmpEx( rGraphic.GetBitmapEx() ); + aBmpEx.Convert( eBmpConvert ); + pNewObj->SetGraphic( aBmpEx ); + } + + mpDrawView->ReplaceObjectAtView( pObj, *mpDrawView->GetSdrPageView(), pNewObj ); + } + } + } + } + + mpDrawView->EndUndo(); + rReq.Done (); + } + break; + + case SID_TRANSLITERATE_SENTENCE_CASE: + case SID_TRANSLITERATE_TITLE_CASE: + case SID_TRANSLITERATE_TOGGLE_CASE: + case SID_TRANSLITERATE_UPPER: + case SID_TRANSLITERATE_LOWER: + case SID_TRANSLITERATE_HALFWIDTH: + case SID_TRANSLITERATE_FULLWIDTH: + case SID_TRANSLITERATE_HIRAGANA: + case SID_TRANSLITERATE_KATAGANA: + { + OutlinerView* pOLV = GetView()->GetTextEditOutlinerView(); + if( pOLV ) + { + using namespace ::com::sun::star::i18n; + sal_Int32 nType = 0; + + switch( nSId ) + { + case SID_TRANSLITERATE_SENTENCE_CASE: + nType = TransliterationModulesExtra::SENTENCE_CASE; + break; + case SID_TRANSLITERATE_TITLE_CASE: + nType = TransliterationModulesExtra::TITLE_CASE; + break; + case SID_TRANSLITERATE_TOGGLE_CASE: + nType = TransliterationModulesExtra::TOGGLE_CASE; + break; + case SID_TRANSLITERATE_UPPER: + nType = TransliterationModules_LOWERCASE_UPPERCASE; + break; + case SID_TRANSLITERATE_LOWER: + nType = TransliterationModules_UPPERCASE_LOWERCASE; + break; + case SID_TRANSLITERATE_HALFWIDTH: + nType = TransliterationModules_FULLWIDTH_HALFWIDTH; + break; + case SID_TRANSLITERATE_FULLWIDTH: + nType = TransliterationModules_HALFWIDTH_FULLWIDTH; + break; + case SID_TRANSLITERATE_HIRAGANA: + nType = TransliterationModules_KATAKANA_HIRAGANA; + break; + case SID_TRANSLITERATE_KATAGANA: + nType = TransliterationModules_HIRAGANA_KATAKANA; + break; + } + + pOLV->TransliterateText( nType ); + } + + rReq.Done(); + } + break; + + // #UndoRedo# + case SID_UNDO : + { + // #96090# moved implementation to BaseClass + ImpSidUndo(TRUE, rReq); + } + break; + case SID_REDO : + { + // #96090# moved implementation to BaseClass + ImpSidRedo(TRUE, rReq); + } + break; + + default: + break; + } +} + +/************************************************************************* +|* +|* URL-Feld einfuegen +|* +\************************************************************************/ + +void DrawViewShell::InsertURLField(const String& rURL, const String& rText, + const String& rTarget, const Point* pPos) +{ + OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView(); + + if (pOLV) + { + ESelection aSel( pOLV->GetSelection() ); + SvxFieldItem aURLItem( SvxURLField( rURL, rText, SVXURLFORMAT_REPR ), EE_FEATURE_FIELD ); + pOLV->InsertField( aURLItem ); + if ( aSel.nStartPos <= aSel.nEndPos ) + aSel.nEndPos = aSel.nStartPos + 1; + else + aSel.nStartPos = aSel.nEndPos + 1; + pOLV->SetSelection( aSel ); + } + else + { + Outliner* pOutl = GetDoc()->GetInternalOutliner(); + pOutl->Init( OUTLINERMODE_TEXTOBJECT ); + USHORT nOutlMode = pOutl->GetMode(); + + SvxURLField aURLField(rURL, rText, SVXURLFORMAT_REPR); + aURLField.SetTargetFrame(rTarget); + SvxFieldItem aURLItem(aURLField, EE_FEATURE_FIELD); + pOutl->QuickInsertField( aURLItem, ESelection() ); + OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject(); + + SdrRectObj* pRectObj = new SdrRectObj(OBJ_TEXT); + + pOutl->UpdateFields(); + pOutl->SetUpdateMode( TRUE ); + Size aSize(pOutl->CalcTextSize()); + pOutl->SetUpdateMode( FALSE ); + + Point aPos; + + if (pPos) + { + aPos = *pPos; + } + else + { + Rectangle aRect(aPos, GetActiveWindow()->GetOutputSizePixel() ); + aPos = aRect.Center(); + aPos = GetActiveWindow()->PixelToLogic(aPos); + aPos.X() -= aSize.Width() / 2; + aPos.Y() -= aSize.Height() / 2; + } + + Rectangle aLogicRect(aPos, aSize); + pRectObj->SetLogicRect(aLogicRect); + pRectObj->SetOutlinerParaObject( pOutlParaObject ); + mpDrawView->InsertObjectAtView(pRectObj, *mpDrawView->GetSdrPageView()); + pOutl->Init( nOutlMode ); + } +} + +/************************************************************************* +|* +|* URL-Button einfuegen +|* +\************************************************************************/ + +void DrawViewShell::InsertURLButton(const String& rURL, const String& rText, + const String& rTarget, const Point* pPos) +{ + BOOL bNewObj = TRUE; + + const OUString sTargetURL( ::URIHelper::SmartRel2Abs( INetURLObject( GetDocSh()->GetMedium()->GetBaseURL() ), rURL, URIHelper::GetMaybeFileHdl(), true, false, + INetURLObject::WAS_ENCODED, + INetURLObject::DECODE_UNAMBIGUOUS ) ); + if (mpDrawView->GetMarkedObjectList().GetMarkCount() > 0) + { + SdrObject* pMarkedObj = mpDrawView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj(); + if( pMarkedObj ) try + { + // change first marked object + if( (FmFormInventor == pMarkedObj->GetObjInventor() && pMarkedObj->GetObjIdentifier() == OBJ_FM_BUTTON) ) + { + bNewObj = FALSE; + + SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >( pMarkedObj ); + + Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), UNO_QUERY_THROW ); + Reference< beans::XPropertySet > xPropSet( xControlModel, UNO_QUERY_THROW ); + + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" )), Any( OUString( rText ) ) ); + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetURL" )), Any( sTargetURL ) ); + + if( rTarget.Len() ) + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetFrame" )), Any( OUString( rTarget ) ) ); + + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "ButtonType" )), Any( form::FormButtonType_URL ) ); + if ( ::avmedia::MediaWindow::isMediaURL( rURL ) ) + { + // #105638# OJ + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DispatchURLInternal" )), Any( sal_True ) ); + } + } + else + { + // add url as interaction for first selected shape + bNewObj = FALSE; + + SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pMarkedObj, true); + pInfo->meClickAction = presentation::ClickAction_DOCUMENT; + pInfo->SetBookmark( sTargetURL ); + } + } + catch( uno::Exception& ) + { + } + } + + if (bNewObj) try + { + SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >( SdrObjFactory::MakeNewObject(FmFormInventor, OBJ_FM_BUTTON, + mpDrawView->GetSdrPageView()->GetPage(), GetDoc()) ); + + Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), uno::UNO_QUERY_THROW ); + Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY_THROW ); + + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" )), Any( OUString( rText ) ) ); + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetURL" )), Any( sTargetURL ) ); + + if( rTarget.Len() ) + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetFrame" )), Any( OUString( rTarget ) ) ); + + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "ButtonType" )), Any( form::FormButtonType_URL ) ); + // #105638# OJ + if ( ::avmedia::MediaWindow::isMediaURL( rURL ) ) + xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DispatchURLInternal" )), Any( sal_True ) ); + + Point aPos; + + if (pPos) + { + aPos = *pPos; + } + else + { + aPos = Rectangle(aPos, GetActiveWindow()->GetOutputSizePixel()).Center(); + aPos = GetActiveWindow()->PixelToLogic(aPos); + } + + Size aSize(4000, 1000); + aPos.X() -= aSize.Width() / 2; + aPos.Y() -= aSize.Height() / 2; + pUnoCtrl->SetLogicRect(Rectangle(aPos, aSize)); + + ULONG nOptions = SDRINSERT_SETDEFLAYER; + + OSL_ASSERT (GetViewShell()!=NULL); + SfxInPlaceClient* pIpClient = GetViewShell()->GetIPClient(); + if (pIpClient!=NULL && pIpClient->IsObjectInPlaceActive()) + { + nOptions |= SDRINSERT_DONTMARK; + } + + mpDrawView->InsertObjectAtView(pUnoCtrl, *mpDrawView->GetSdrPageView(), nOptions); + } + catch( Exception& ) + { + } +} + +/************************************************************************* +|* +|* +|* +\************************************************************************/ + +void DrawViewShell::ShowUIControls (bool bVisible) +{ + ViewShell::ShowUIControls (bVisible); + + //AF: The LayerDialogChildWindow is not used anymore (I hope). + // GetViewFrame()->SetChildWindow( + // LayerDialogChildWindow::GetChildWindowId(), + // IsLayerModeActive() && bVisible); + maTabControl.Show (bVisible); +} + +void DrawViewShell::StopSlideShow (bool /*bCloseFrame*/) +{ + Reference< XPresentation2 > xPresentation( GetDoc()->getPresentation() ); + if(xPresentation.is() && xPresentation->isRunning()) + { + if( mpDrawView->IsTextEdit() ) + mpDrawView->SdrEndTextEdit(); + + xPresentation->end(); + } +} + +#ifdef _MSC_VER +#pragma optimize ( "", on ) +#endif + +} // end of namespace sd |