diff options
Diffstat (limited to 'sd/source/ui/view/drviewsc.cxx')
-rw-r--r-- | sd/source/ui/view/drviewsc.cxx | 991 |
1 files changed, 991 insertions, 0 deletions
diff --git a/sd/source/ui/view/drviewsc.cxx b/sd/source/ui/view/drviewsc.cxx new file mode 100644 index 000000000000..563a153a7ef5 --- /dev/null +++ b/sd/source/ui/view/drviewsc.cxx @@ -0,0 +1,991 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * 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 "DrawViewShell.hxx" +#include "ViewShellImplementation.hxx" +#include <vcl/waitobj.hxx> + +#include <svx/svxids.hrc> +#include <svx/dialogs.hrc> +#include <svx/imapdlg.hxx> +#include <vcl/msgbox.hxx> +#include <sfx2/request.hxx> +#include <svx/svdogrp.hxx> +#include <svx/svdoole2.hxx> +#include <svx/svdograf.hxx> +#include <svx/svxdlg.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <svx/svdoole2.hxx> +#include <svl/style.hxx> +#include <svx/svdpagv.hxx> +#include <svx/grafctrl.hxx> +#include "stlsheet.hxx" + +#include <sfx2/viewfrm.hxx> + +#include "app.hrc" +#include "strings.hrc" +#include "helpids.h" +#include "misc.hxx" +#include "Window.hxx" +#include "imapinfo.hxx" +#include "futempl.hxx" +#include "fusel.hxx" +#include "sdresid.hxx" +#include "drawdoc.hxx" +#include "DrawDocShell.hxx" +#include "drawview.hxx" +#include "sdabstdlg.hxx" +#include "brkdlg.hrc" +namespace sd { + +#define MIN_ACTIONS_FOR_DIALOG 5000 // bei mehr als 1600 Metaobjekten + // wird beim Aufbrechen ein Dialog + // angezeigt. +/************************************************************************* +|* +|* SfxRequests fuer temporaere Funktionen +|* +\************************************************************************/ + +void DrawViewShell::FuTemp03(SfxRequest& rReq) +{ + USHORT nSId = rReq.GetSlot(); + switch( nSId ) + { + case SID_GROUP: // BASIC + { + if ( mpDrawView->IsPresObjSelected( TRUE, TRUE, TRUE ) ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + mpDrawView->GroupMarked(); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_UNGROUP: // BASIC + { + mpDrawView->UnGroupMarked(); + Cancel(); + rReq.Done (); + } + break; + + case SID_NAME_GROUP: + { + // only allow for single object selection since the name of an object needs + // to be unique + if(1L == mpDrawView->GetMarkedObjectCount()) + { + // #i68101# + SdrObject* pSelected = mpDrawView->GetMarkedObjectByIndex(0L); + OSL_ENSURE(pSelected, "DrawViewShell::FuTemp03: nMarkCount, but no object (!)"); + String aName(pSelected->GetName()); + + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + OSL_ENSURE(pFact, "Dialogdiet fail!"); + AbstractSvxObjectNameDialog* pDlg = pFact->CreateSvxObjectNameDialog(NULL, aName); + OSL_ENSURE(pDlg, "Dialogdiet fail!"); + + pDlg->SetCheckNameHdl(LINK(this, DrawViewShell, NameObjectHdl)); + + if(RET_OK == pDlg->Execute()) + { + pDlg->GetName(aName); + pSelected->SetName(aName); + } + + delete pDlg; + } + + SfxBindings& rBindings = GetViewFrame()->GetBindings(); + rBindings.Invalidate( SID_NAVIGATOR_STATE, TRUE, FALSE ); + rBindings.Invalidate( SID_CONTEXT ); + + Cancel(); + rReq.Ignore(); + break; + } + + // #i68101# + case SID_OBJECT_TITLE_DESCRIPTION: + { + if(1L == mpDrawView->GetMarkedObjectCount()) + { + SdrObject* pSelected = mpDrawView->GetMarkedObjectByIndex(0L); + OSL_ENSURE(pSelected, "DrawViewShell::FuTemp03: nMarkCount, but no object (!)"); + String aTitle(pSelected->GetTitle()); + String aDescription(pSelected->GetDescription()); + + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + OSL_ENSURE(pFact, "Dialogdiet fail!"); + AbstractSvxObjectTitleDescDialog* pDlg = pFact->CreateSvxObjectTitleDescDialog(NULL, aTitle, aDescription); + OSL_ENSURE(pDlg, "Dialogdiet fail!"); + + if(RET_OK == pDlg->Execute()) + { + pDlg->GetTitle(aTitle); + pDlg->GetDescription(aDescription); + pSelected->SetTitle(aTitle); + pSelected->SetDescription(aDescription); + } + + delete pDlg; + } + + SfxBindings& rBindings = GetViewFrame()->GetBindings(); + rBindings.Invalidate( SID_NAVIGATOR_STATE, TRUE, FALSE ); + rBindings.Invalidate( SID_CONTEXT ); + + Cancel(); + rReq.Ignore(); + break; + } + + case SID_ENTER_GROUP: // BASIC + { + mpDrawView->EnterMarkedGroup(); + Cancel(); + rReq.Done (); + } + break; + + case SID_LEAVE_GROUP: // BASIC + { + mpDrawView->LeaveOneGroup(); + Cancel(); + rReq.Done (); + } + break; + + case SID_LEAVE_ALL_GROUPS: // BASIC + { + mpDrawView->LeaveAllGroup(); + Cancel(); + rReq.Done (); + } + break; + + case SID_COMBINE: // BASIC + { + // #88224# End text edit to avoid conflicts + if(mpDrawView->IsTextEdit()) + mpDrawView->SdrEndTextEdit(); + + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->CombineMarkedObjects(sal_False); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_DISTRIBUTE_DLG: + { + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + mpDrawView->DistributeMarkedObjects(); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_POLY_MERGE: + { + // #88224# End text edit to avoid conflicts + if(mpDrawView->IsTextEdit()) + mpDrawView->SdrEndTextEdit(); + + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->MergeMarkedObjects(SDR_MERGE_MERGE); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_POLY_SUBSTRACT: + { + // #88224# End text edit to avoid conflicts + if(mpDrawView->IsTextEdit()) + mpDrawView->SdrEndTextEdit(); + + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->MergeMarkedObjects(SDR_MERGE_SUBSTRACT); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_POLY_INTERSECT: + { + // #88224# End text edit to avoid conflicts + if(mpDrawView->IsTextEdit()) + mpDrawView->SdrEndTextEdit(); + + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->MergeMarkedObjects(SDR_MERGE_INTERSECT); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_DISMANTLE: // BASIC + { + if ( mpDrawView->IsDismantlePossible(FALSE) ) + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->DismantleMarkedObjects(FALSE); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_CONNECT: // BASIC + { + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->CombineMarkedObjects(sal_True); + } + Cancel(); + rReq.Done (); + } + break; + + case SID_BREAK: // BASIC + { + if ( mpDrawView->IsTextEdit() ) + { + mpDrawView->SdrEndTextEdit(); + } + + if ( mpDrawView->IsBreak3DObjPossible() ) + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->Break3DObj(); + } + else if ( mpDrawView->IsDismantlePossible(TRUE) ) + { + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->DismantleMarkedObjects(TRUE); + } + else if ( mpDrawView->IsImportMtfPossible() ) + { + + WaitObject aWait( (Window*)GetActiveWindow() ); + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + ULONG nAnz=rMarkList.GetMarkCount(); + + // Summe der Metaobjekte aller sel. Metafiles erm. + ULONG nCount = 0; + for(ULONG nm=0; nm<nAnz; nm++) + { + SdrMark* pM=rMarkList.GetMark(nm); + SdrObject* pObj=pM->GetMarkedSdrObj(); + SdrGrafObj* pGraf=PTR_CAST(SdrGrafObj,pObj); + SdrOle2Obj* pOle2=PTR_CAST(SdrOle2Obj,pObj); + if (pGraf!=NULL && pGraf->HasGDIMetaFile()) + nCount += pGraf->GetGraphic().GetGDIMetaFile().GetActionCount(); + if(pOle2!=NULL && pOle2->GetGraphic()) + nCount += pOle2->GetGraphic()->GetGDIMetaFile().GetActionCount(); + } + + // anhand der erm. Summe entscheiden ob mit + // oder ohne Dialog aufgebrochen wird. + if(nCount < MIN_ACTIONS_FOR_DIALOG) + { + // ohne Dialog aufbrechen + mpDrawView->DoImportMarkedMtf(); + } + else + { + SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); + if( pFact ) + { + VclAbstractDialog* pDlg = pFact->CreateBreakDlg(GetActiveWindow(), mpDrawView, GetDocSh(), nCount, nAnz ); + if( pDlg ) + { + pDlg->Execute(); + delete pDlg; + } + } + } + } + + Cancel(); + rReq.Done (); + } + break; + + case SID_CONVERT_TO_3D: + { + if ( mpDrawView->IsPresObjSelected() ) + { + ::sd::Window* pWindow = GetActiveWindow(); + InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); + } + else + { + if (mpDrawView->IsConvertTo3DObjPossible()) + { + if (mpDrawView->IsTextEdit()) + { + mpDrawView->SdrEndTextEdit(); + } + + WaitObject aWait( (Window*)GetActiveWindow() ); + mpDrawView->ConvertMarkedObjTo3D(TRUE); + } + } + + Cancel(); + rReq.Done(); + } + break; + + case SID_FRAME_TO_TOP: // BASIC + { + mpDrawView->PutMarkedToTop(); + Cancel(); + Invalidate( SID_POSITION ); + rReq.Done (); + } + break; + + case SID_MOREFRONT: // BASIC + { + mpDrawView->MovMarkedToTop(); + Cancel(); + Invalidate( SID_POSITION ); + rReq.Done (); + } + break; + + case SID_MOREBACK: // BASIC + { + mpDrawView->MovMarkedToBtm(); + Cancel(); + Invalidate( SID_POSITION ); + rReq.Done (); + } + break; + + case SID_FRAME_TO_BOTTOM: // BASIC + { + mpDrawView->PutMarkedToBtm(); + Cancel(); + Invalidate( SID_POSITION ); + rReq.Done (); + } + break; + + case SID_HORIZONTAL: // BASIC + { + mpDrawView->MirrorAllMarkedHorizontal(); + Cancel(); + rReq.Done (); + } + break; + + case SID_VERTICAL: // BASIC + { + mpDrawView->MirrorAllMarkedVertical(); + Cancel(); + rReq.Done (); + } + break; + + case SID_OBJECT_ALIGN_LEFT: // BASIC + { + mpDrawView->AlignMarkedObjects(SDRHALIGN_LEFT, SDRVALIGN_NONE); + Cancel(); + rReq.Done (); + } + break; + + case SID_OBJECT_ALIGN_CENTER: // BASIC + { + mpDrawView->AlignMarkedObjects(SDRHALIGN_CENTER, SDRVALIGN_NONE); + Cancel(); + rReq.Done (); + } + break; + + case SID_OBJECT_ALIGN_RIGHT: // BASIC + { + mpDrawView->AlignMarkedObjects(SDRHALIGN_RIGHT, SDRVALIGN_NONE); + Cancel(); + rReq.Done (); + } + break; + + case SID_OBJECT_ALIGN_UP: // BASIC + { + mpDrawView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_TOP); + Cancel(); + rReq.Done (); + } + break; + + case SID_OBJECT_ALIGN_MIDDLE: // BASIC + { + mpDrawView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_CENTER); + Cancel(); + rReq.Done (); + } + break; + + case SID_OBJECT_ALIGN_DOWN: // BASIC + { + mpDrawView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_BOTTOM); + Cancel(); + rReq.Done (); + } + break; + + case SID_SELECTALL: // BASIC + { + if( (dynamic_cast<FuSelection*>( GetOldFunction().get() ) != 0) && + !GetView()->IsFrameDragSingles() && GetView()->HasMarkablePoints()) + { + if ( !mpDrawView->IsAction() ) + mpDrawView->MarkAllPoints(); + } + else + mpDrawView->SelectAll(); + + Cancel(); + rReq.Done (); + } + break; + + case SID_STYLE_NEW: // BASIC ??? + case SID_STYLE_APPLY: + case SID_STYLE_EDIT: + case SID_STYLE_DELETE: + case SID_STYLE_FAMILY: + case SID_STYLE_WATERCAN: + case SID_STYLE_UPDATE_BY_EXAMPLE: + case SID_STYLE_NEW_BY_EXAMPLE: + { + if( rReq.GetSlot() == SID_STYLE_EDIT && !rReq.GetArgs() ) + { + SfxStyleSheet* pStyleSheet = mpDrawView->GetStyleSheet(); + if( pStyleSheet && pStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE) + pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet(); + + if( (pStyleSheet == NULL) && GetView()->IsTextEdit() ) + { + GetView()->SdrEndTextEdit(); + + pStyleSheet = mpDrawView->GetStyleSheet(); + if(pStyleSheet && pStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE) + pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet(); + } + + if( pStyleSheet == NULL ) + { + rReq.Ignore(); + break; + } + + SfxAllItemSet aSet(GetDoc()->GetPool()); + + SfxStringItem aStyleNameItem( SID_STYLE_EDIT, pStyleSheet->GetName() ); + aSet.Put(aStyleNameItem); + + SfxUInt16Item aStyleFamilyItem( SID_STYLE_FAMILY, (UINT16)pStyleSheet->GetFamily() ); + aSet.Put(aStyleFamilyItem); + + rReq.SetArgs(aSet); + } + + if( rReq.GetArgs() ) + { + SetCurrentFunction( FuTemplate::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); + if( rReq.GetSlot() == SID_STYLE_APPLY ) + GetViewFrame()->GetBindings().Invalidate( SID_STYLE_APPLY ); + Cancel(); + } + else if( rReq.GetSlot() == SID_STYLE_APPLY ) + GetViewFrame()->GetDispatcher()->Execute( SID_STYLE_DESIGNER, SFX_CALLMODE_ASYNCHRON ); + rReq.Ignore (); + } + break; + + case SID_IMAP: + { + SvxIMapDlg* pDlg; + USHORT nId = SvxIMapDlgChildWindow::GetChildWindowId(); + + GetViewFrame()->ToggleChildWindow( nId ); + GetViewFrame()->GetBindings().Invalidate( SID_IMAP ); + + if ( GetViewFrame()->HasChildWindow( nId ) + && ( ( pDlg = ViewShell::Implementation::GetImageMapDialog() ) != NULL ) ) + { + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + + if ( rMarkList.GetMarkCount() == 1 ) + UpdateIMapDlg( rMarkList.GetMark( 0 )->GetMarkedSdrObj() ); + } + + Cancel(); + rReq.Ignore (); + } + break; + + case SID_GRID_FRONT: + { + mpDrawView->SetGridFront( !mpDrawView->IsGridFront() ); + Cancel(); + rReq.Done (); + } + break; + + case SID_HELPLINES_FRONT: + { + mpDrawView->SetHlplFront( !mpDrawView->IsHlplFront() ); + Cancel(); + rReq.Done (); + } + break; + + default: + FuTemp04(rReq); + break; + }; +}; + +/************************************************************************* +|* +|* Liefert die globale/Haupt-ID zurueck, also die ID, ueber die die +|* Toolbox ausgeloest wird +|* +\************************************************************************/ + +USHORT DrawViewShell::GetIdBySubId( USHORT nSId ) +{ + USHORT nMappedSId = 0; + switch( nSId ) + { + case SID_OBJECT_ROTATE: + case SID_OBJECT_MIRROR: + 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: + { + nMappedSId = SID_OBJECT_CHOOSE_MODE; + } + break; + + case SID_OBJECT_ALIGN_LEFT: + case SID_OBJECT_ALIGN_CENTER: + case SID_OBJECT_ALIGN_RIGHT: + case SID_OBJECT_ALIGN_UP: + case SID_OBJECT_ALIGN_MIDDLE: + case SID_OBJECT_ALIGN_DOWN: + { + nMappedSId = SID_OBJECT_ALIGN; + } + break; + + case SID_FRAME_TO_TOP: + case SID_MOREFRONT: + case SID_MOREBACK: + case SID_FRAME_TO_BOTTOM: + case SID_BEFORE_OBJ: + case SID_BEHIND_OBJ: + case SID_REVERSE_ORDER: + { + nMappedSId = SID_POSITION; + } + break; + + case SID_ZOOM_OUT: + case SID_ZOOM_IN: + case SID_SIZE_REAL: + case SID_ZOOM_PANNING: + case SID_SIZE_PAGE: + case SID_SIZE_PAGE_WIDTH: + case SID_SIZE_ALL: + case SID_SIZE_OPTIMAL: + case SID_ZOOM_NEXT: + case SID_ZOOM_PREV: + { + nMappedSId = SID_ZOOM_TOOLBOX; + } + break; + + case SID_ATTR_CHAR: + case SID_TEXT_FITTOSIZE: + case SID_DRAW_CAPTION: + case SID_DRAW_FONTWORK: + case SID_DRAW_FONTWORK_VERTICAL: + { + nMappedSId = SID_DRAWTBX_TEXT; + } + break; + + case SID_DRAW_RECT: + case SID_DRAW_SQUARE: + case SID_DRAW_RECT_ROUND: + case SID_DRAW_SQUARE_ROUND: + case SID_DRAW_RECT_NOFILL: + case SID_DRAW_SQUARE_NOFILL: + case SID_DRAW_RECT_ROUND_NOFILL: + case SID_DRAW_SQUARE_ROUND_NOFILL: + { + nMappedSId = SID_DRAWTBX_RECTANGLES; + } + break; + + case SID_DRAW_ELLIPSE: + case SID_DRAW_CIRCLE: + case SID_DRAW_PIE: + case SID_DRAW_CIRCLEPIE: + case SID_DRAW_ELLIPSECUT: + case SID_DRAW_CIRCLECUT: + case SID_DRAW_ARC: + case SID_DRAW_CIRCLEARC: + case SID_DRAW_ELLIPSE_NOFILL: + case SID_DRAW_CIRCLE_NOFILL: + case SID_DRAW_PIE_NOFILL: + case SID_DRAW_CIRCLEPIE_NOFILL: + case SID_DRAW_ELLIPSECUT_NOFILL: + case SID_DRAW_CIRCLECUT_NOFILL: + { + nMappedSId = SID_DRAWTBX_ELLIPSES; + } + break; + + case SID_DRAW_BEZIER_NOFILL: + case SID_DRAW_POLYGON_NOFILL: + case SID_DRAW_XPOLYGON_NOFILL: + case SID_DRAW_FREELINE_NOFILL: + case SID_DRAW_BEZIER_FILL: + case SID_DRAW_POLYGON: + case SID_DRAW_XPOLYGON: + case SID_DRAW_FREELINE: + { + nMappedSId = SID_DRAWTBX_LINES; + } + 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: + { + nMappedSId = SID_DRAWTBX_ARROWS; + } + break; + + case SID_3D_CUBE: + case SID_3D_TORUS: + case SID_3D_SPHERE: + case SID_3D_SHELL: + case SID_3D_HALF_SPHERE: + case SID_3D_CYLINDER: + case SID_3D_CONE: + case SID_3D_PYRAMID: + { + nMappedSId = SID_DRAWTBX_3D_OBJECTS; + } + break; + + case SID_INSERT_DIAGRAM: +#ifdef STARIMAGE_AVAILABLE + case SID_INSERT_IMAGE: +#endif + case SID_ATTR_TABLE: + case SID_INSERTFILE: + case SID_INSERT_GRAPHIC: + case SID_INSERT_AVMEDIA: + case SID_INSERTPAGE: + case SID_INSERT_MATH: + case SID_INSERT_FLOATINGFRAME: + case SID_INSERT_OBJECT: + case SID_INSERT_PLUGIN: + case SID_INSERT_SOUND: + case SID_INSERT_VIDEO: + case SID_INSERT_APPLET: + case SID_INSERT_TABLE: + { + nMappedSId = SID_DRAWTBX_INSERT; + } + break; + + 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: + { + nMappedSId = SID_DRAWTBX_CONNECTORS; + } + } + return( nMappedSId ); +} + +/************************************************************************* +|* +|* Fuellt das SlotArray, um das aktuelle Mapping des ToolboxSlots zu +|* bekommen +|* +\************************************************************************/ + +void DrawViewShell::MapSlot( USHORT nSId ) +{ + USHORT nMappedSId = GetIdBySubId( nSId ); + + if( nMappedSId > 0 ) + { + USHORT nID = GetArrayId( nMappedSId ) + 1; + mpSlotArray[ nID ] = nSId; + } +} + +/************************************************************************* +|* +|* Ermoeglicht ueber das SlotArray ein ImageMapping +|* +\************************************************************************/ + +void DrawViewShell::UpdateToolboxImages( SfxItemSet &rSet, BOOL bPermanent ) +{ + if( !bPermanent ) + { + USHORT nId = GetArrayId( SID_ZOOM_TOOLBOX ) + 1; + rSet.Put( TbxImageItem( SID_ZOOM_TOOLBOX, mpSlotArray[nId] ) ); + + nId = GetArrayId( SID_DRAWTBX_INSERT ) + 1; + rSet.Put( TbxImageItem( SID_DRAWTBX_INSERT, mpSlotArray[nId] ) ); + + nId = GetArrayId( SID_POSITION ) + 1; + rSet.Put( TbxImageItem( SID_POSITION, mpSlotArray[nId] ) ); + + nId = GetArrayId( SID_OBJECT_ALIGN ) + 1; + rSet.Put( TbxImageItem( SID_OBJECT_ALIGN, mpSlotArray[nId] ) ); + } + else + { + for( USHORT nId = 0; nId < SLOTARRAY_COUNT; nId += 2 ) + { + rSet.Put( TbxImageItem( mpSlotArray[nId], mpSlotArray[nId+1] ) ); + } + } +} + +/************************************************************************* +|* +|* Gibt den gemappten Slot zurueck +|* +\************************************************************************/ + +USHORT DrawViewShell::GetMappedSlot( USHORT nSId ) +{ + USHORT nSlot = 0; + USHORT nId = GetArrayId( nSId ); + if( nId != USHRT_MAX ) + nSlot = mpSlotArray[ nId+1 ]; + + // Wenn der Slot noch auf sich selbst gemapped ist, muss 0 zurueck- + // gegeben werden, da sonst der Slot immer wieder selbst executet + // wird. Im Array ist der Slot selbst initial vorhanden, damit das + // Image richtig angezeigt wird. + if( nSId == nSlot ) + return( 0 ); + + return( nSlot ); +} + +/************************************************************************* +|* +|* Gibt die Nummer des HauptSlots im SlotArray zurueck +|* +\************************************************************************/ + +USHORT DrawViewShell::GetArrayId( USHORT nSId ) +{ + for( USHORT i = 0; i < SLOTARRAY_COUNT; i += 2 ) + { + if( mpSlotArray[ i ] == nSId ) + return( i ); + } + DBG_ERROR( "Slot im Array nicht gefunden!" ); + return( USHRT_MAX ); +} + + +/************************************************************************* +|* +|* IMap-Dlg updaten +|* +\************************************************************************/ + +void DrawViewShell::UpdateIMapDlg( SdrObject* pObj ) +{ + if( ( pObj->ISA( SdrGrafObj ) || pObj->ISA( SdrOle2Obj ) ) && !mpDrawView->IsTextEdit() && + GetViewFrame()->HasChildWindow( SvxIMapDlgChildWindow::GetChildWindowId() ) ) + { + Graphic aGraphic; + ImageMap* pIMap = NULL; + TargetList* pTargetList = NULL; + SdIMapInfo* pIMapInfo = GetDoc()->GetIMapInfo( pObj ); + + // get graphic from shape + SdrGrafObj* pGrafObj = dynamic_cast< SdrGrafObj* >( pObj ); + if( pGrafObj ) + aGraphic = pGrafObj->GetGraphic(); + + if ( pIMapInfo ) + { + pIMap = (ImageMap*) &pIMapInfo->GetImageMap(); + pTargetList = new TargetList; + GetViewFrame()->GetTargetList( *pTargetList ); + } + + SvxIMapDlgChildWindow::UpdateIMapDlg( aGraphic, pIMap, pTargetList, pObj ); + + // TargetListe kann von uns wieder geloescht werden + if ( pTargetList ) + { + String* pEntry = pTargetList->First(); + while( pEntry ) + { + delete pEntry; + pEntry = pTargetList->Next(); + } + + delete pTargetList; + } + } +} + +// ----------------------------------------------------------------------------- + +IMPL_LINK( DrawViewShell, NameObjectHdl, AbstractSvxNameDialog*, pDialog ) +{ + String aName; + + if( pDialog ) + pDialog->GetName( aName ); + + return( ( !aName.Len() || ( GetDoc() && !GetDoc()->GetObj( aName ) ) ) ? 1 : 0 ); +} + +} // end of namespace sd + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |