summaryrefslogtreecommitdiff
path: root/sd/source/ui/view/drviewsc.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/view/drviewsc.cxx')
-rw-r--r--sd/source/ui/view/drviewsc.cxx991
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: */