e7f8ad3aa5
2008/04/01 15:36:30 thb 1.34.16.3: #i85898# Stripping all external header guards 2008/04/01 12:39:39 thb 1.34.16.2: #i85898# Stripping all external header guards 2008/03/31 13:59:12 rt 1.34.16.1: #i87441# Change license header to LPGL v3.
997 lines
30 KiB
C++
997 lines
30 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: drviewsc.cxx,v $
|
|
* $Revision: 1.35 $
|
|
*
|
|
* 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>
|
|
|
|
#ifndef _SVXIDS_HRC
|
|
#include <svx/svxids.hrc>
|
|
#endif
|
|
#include <svx/dialogs.hrc>
|
|
#ifndef _IMAPDLG_HXX
|
|
#include <svx/imapdlg.hxx>
|
|
#endif
|
|
#include <vcl/msgbox.hxx>
|
|
#include <sfx2/request.hxx>
|
|
#include <svx/svdogrp.hxx>
|
|
#include <svx/svdoole2.hxx>
|
|
#include <svx/svdograf.hxx>
|
|
#include <svx/svxdlg.hxx>
|
|
#ifndef _BINDING_HXX //autogen
|
|
#include <sfx2/bindings.hxx>
|
|
#endif
|
|
#include <sfx2/dispatch.hxx>
|
|
#include <svx/svdoole2.hxx>
|
|
#include <svtools/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, RID_SVXDLG_OBJECT_NAME);
|
|
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, RID_SVXDLG_OBJECT_TITLE_DESC);
|
|
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
|