summaryrefslogtreecommitdiff
path: root/sd/source/ui/view/drviewsb.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/view/drviewsb.cxx')
-rw-r--r--sd/source/ui/view/drviewsb.cxx879
1 files changed, 879 insertions, 0 deletions
diff --git a/sd/source/ui/view/drviewsb.cxx b/sd/source/ui/view/drviewsb.cxx
new file mode 100644
index 000000000000..d7cc1fc1d84a
--- /dev/null
+++ b/sd/source/ui/view/drviewsb.cxx
@@ -0,0 +1,879 @@
+/*************************************************************************
+ *
+ * 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/ui/dialogs/XExecutableDialog.hpp>
+#include <comphelper/processfactory.hxx>
+#include <svx/svdlayer.hxx>
+#ifndef _SVXIDS_HXX
+#include <svx/svxids.hrc>
+#endif
+#include <sfx2/msgpool.hxx>
+#include <svx/hyprlink.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <svx/hlnkitem.hxx>
+#include <tools/urlobj.hxx>
+#include <editeng/eeitem.hxx>
+#ifndef _FLDITEM_HXX
+#include <editeng/flditem.hxx>
+#endif
+#include <vcl/msgbox.hxx>
+#include <sfx2/request.hxx>
+#include <sfx2/dispatch.hxx>
+#include <svx/svdorect.hxx>
+#include <sfx2/docfile.hxx>
+#include <basic/sbstar.hxx>
+#include <basic/sberrors.hxx>
+#include <svx/fmshell.hxx>
+#include <svx/svxdlg.hxx>
+#include <svx/dialogs.hrc>
+#include <unotools/useroptions.hxx>
+
+#include "app.hrc"
+#include "strings.hrc"
+#include "res_bmp.hrc"
+#include "glob.hrc"
+#include "Outliner.hxx"
+#include "Window.hxx"
+#include "app.hxx"
+#include "sdattr.hxx"
+#include "drawdoc.hxx"
+#include "DrawDocShell.hxx"
+#include "sdresid.hxx"
+#include "sdpage.hxx"
+#include "DrawViewShell.hxx"
+#include "drawview.hxx"
+#include "unmodpg.hxx"
+#include "undolayer.hxx"
+#include "ViewShellBase.hxx"
+#include "FormShellManager.hxx"
+#include "LayerTabBar.hxx"
+#include "sdabstdlg.hxx"
+#include "SlideSorterViewShell.hxx"
+#include "SlideSorter.hxx"
+#include "controller/SlideSorterController.hxx"
+
+#define RET_DELETE 100
+
+namespace sd {
+
+/*************************************************************************
+|*
+|* SfxRequests fuer temporaere Funktionen
+|*
+\************************************************************************/
+
+void DrawViewShell::FuTemp02(SfxRequest& rReq)
+{
+ USHORT nSId = rReq.GetSlot();
+ switch( nSId )
+ {
+ case SID_INSERTLAYER:
+ {
+ if ( mpDrawView->IsTextEdit() )
+ {
+ mpDrawView->SdrEndTextEdit();
+ }
+
+ SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
+ USHORT nLayerCnt = rLayerAdmin.GetLayerCount();
+ USHORT nLayer = nLayerCnt - 2 + 1;
+ String aLayerName ( SdResId(STR_LAYER) ), aLayerTitle, aLayerDesc;
+ aLayerName += String::CreateFromInt32( (sal_Int32)nLayer );
+ BOOL bIsVisible = FALSE;
+ BOOL bIsLocked = FALSE;
+ BOOL bIsPrintable = FALSE;
+
+ const SfxItemSet* pArgs = rReq.GetArgs();
+
+ if (! pArgs)
+ {
+ SfxItemSet aNewAttr( GetDoc()->GetPool(), ATTR_LAYER_START, ATTR_LAYER_END );
+
+ aNewAttr.Put( SdAttrLayerName( aLayerName ) );
+ aNewAttr.Put( SdAttrLayerTitle() );
+ aNewAttr.Put( SdAttrLayerDesc() );
+ aNewAttr.Put( SdAttrLayerVisible() );
+ aNewAttr.Put( SdAttrLayerPrintable() );
+ aNewAttr.Put( SdAttrLayerLocked() );
+ aNewAttr.Put( SdAttrLayerThisPage() );
+
+ SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
+ AbstractSdInsertLayerDlg* pDlg = pFact ? pFact->CreateSdInsertLayerDlg(NULL, aNewAttr, true, String( SdResId( STR_INSERTLAYER ) ) ) : 0;
+ if( pDlg )
+ {
+ pDlg->SetHelpId( SD_MOD()->GetSlotPool()->GetSlot( SID_INSERTLAYER )->GetCommand() );
+
+ // Ueberpruefung auf schon vorhandene Namen
+ BOOL bLoop = TRUE;
+ while( bLoop && pDlg->Execute() == RET_OK )
+ {
+ pDlg->GetAttr( aNewAttr );
+ aLayerName = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue ();
+
+ if( rLayerAdmin.GetLayer( aLayerName, FALSE )
+ || aLayerName.Len()==0 )
+ {
+ // Name ist schon vorhanden
+ WarningBox aWarningBox (
+ GetParentWindow(),
+ WinBits( WB_OK ),
+ String(SdResId( STR_WARN_NAME_DUPLICATE)));
+ aWarningBox.Execute();
+ }
+ else
+ bLoop = FALSE;
+ }
+ if( bLoop ) // wurde abgebrochen
+ {
+ delete pDlg;
+
+ Cancel();
+ rReq.Ignore ();
+ break;
+ }
+ else
+ {
+ //pDlg->GetAttr( aNewAttr );
+ //aLayerName = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue ();
+ aLayerTitle = ((SdAttrLayerTitle &) aNewAttr.Get (ATTR_LAYER_TITLE)).GetValue ();
+ aLayerDesc = ((SdAttrLayerDesc &) aNewAttr.Get (ATTR_LAYER_DESC)).GetValue ();
+ bIsVisible = ((SdAttrLayerVisible &) aNewAttr.Get (ATTR_LAYER_VISIBLE)).GetValue ();
+ bIsLocked = ((SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_LOCKED)).GetValue () ;
+ bIsPrintable = ((SdAttrLayerPrintable &) aNewAttr.Get (ATTR_LAYER_PRINTABLE)).GetValue () ;
+
+ delete pDlg;
+ }
+ }
+ }
+ else if (pArgs->Count () != 4)
+ {
+ StarBASIC::FatalError (SbERR_WRONG_ARGS);
+ Cancel();
+ rReq.Ignore ();
+ break;
+ }
+ else
+ {
+ SFX_REQUEST_ARG (rReq, pLayerName, SfxStringItem, ID_VAL_LAYERNAME, FALSE);
+ SFX_REQUEST_ARG (rReq, pIsVisible, SfxBoolItem, ID_VAL_ISVISIBLE, FALSE);
+ SFX_REQUEST_ARG (rReq, pIsLocked, SfxBoolItem, ID_VAL_ISLOCKED, FALSE);
+ SFX_REQUEST_ARG (rReq, pIsPrintable, SfxBoolItem, ID_VAL_ISPRINTABLE, FALSE);
+
+ aLayerName = pLayerName->GetValue ();
+ bIsVisible = pIsVisible->GetValue ();
+ bIsLocked = pIsLocked->GetValue ();
+ bIsPrintable = pIsPrintable->GetValue ();
+ }
+
+ String aPrevLayer = mpDrawView->GetActiveLayer();
+ String aName;
+ SdrLayer* pLayer;
+ USHORT nPrevLayer = 0;
+ nLayerCnt = rLayerAdmin.GetLayerCount();
+
+ for ( nLayer = 0; nLayer < nLayerCnt; nLayer++ )
+ {
+ pLayer = rLayerAdmin.GetLayer(nLayer);
+ aName = pLayer->GetName();
+
+ if ( aPrevLayer == aName )
+ {
+// nPrevLayer = nLayer;
+ nPrevLayer = Max(nLayer, (USHORT) 4);
+ }
+ }
+
+ mpDrawView->InsertNewLayer(aLayerName, nPrevLayer + 1);
+ pLayer = rLayerAdmin.GetLayer(aLayerName, FALSE);
+ if( pLayer )
+ {
+ pLayer->SetTitle( aLayerTitle );
+ pLayer->SetDescription( aLayerDesc );
+ }
+
+ mpDrawView->SetLayerVisible( aLayerName, bIsVisible );
+ mpDrawView->SetLayerLocked( aLayerName, bIsLocked);
+ mpDrawView->SetLayerPrintable(aLayerName, bIsPrintable);
+
+ mpDrawView->SetActiveLayer(aLayerName);
+
+ ResetActualLayer();
+
+ GetDoc()->SetChanged(TRUE);
+
+ GetViewFrame()->GetDispatcher()->Execute(SID_SWITCHLAYER,
+ SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
+
+ Cancel();
+ rReq.Done ();
+ }
+ break;
+
+ case SID_MODIFYLAYER:
+ {
+ if ( mpDrawView->IsTextEdit() )
+ {
+ mpDrawView->SdrEndTextEdit();
+ }
+
+ SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
+ USHORT nCurPage = GetLayerTabControl()->GetCurPageId();
+ String aLayerName( GetLayerTabControl()->GetPageText(nCurPage) );
+ SdrLayer* pLayer = rLayerAdmin.GetLayer(aLayerName, FALSE);
+
+ String aLayerTitle( pLayer->GetTitle() );
+ String aLayerDesc( pLayer->GetDescription() );
+
+ String aOldLayerName( aLayerName );
+ String aOldLayerTitle( aLayerTitle );
+ String aOldLayerDesc( aLayerDesc );
+
+ BOOL bIsVisible, bIsLocked, bIsPrintable;
+ BOOL bOldIsVisible = bIsVisible = mpDrawView->IsLayerVisible(aLayerName);
+ BOOL bOldIsLocked = bIsLocked = mpDrawView->IsLayerLocked(aLayerName);
+ BOOL bOldIsPrintable = bIsPrintable = mpDrawView->IsLayerPrintable(aLayerName);
+
+
+ const SfxItemSet* pArgs = rReq.GetArgs();
+ // darf der Layer geloescht werden ?
+ bool bDelete = true;
+
+ String aLayoutLayer ( SdResId(STR_LAYER_LAYOUT) );
+ String aControlsLayer ( SdResId(STR_LAYER_CONTROLS) );
+ String aMeasureLinesLayer ( SdResId(STR_LAYER_MEASURELINES) );
+ String aBackgroundLayer( SdResId(STR_LAYER_BCKGRND) );
+ String aBackgroundObjLayer( SdResId(STR_LAYER_BCKGRNDOBJ) );
+
+ if( aLayerName == aLayoutLayer || aLayerName == aControlsLayer ||
+ aLayerName == aMeasureLinesLayer ||
+ aLayerName == aBackgroundLayer || aLayerName == aBackgroundObjLayer )
+ {
+ bDelete = false;
+ }
+
+ if (! pArgs)
+ {
+ SfxItemSet aNewAttr( GetDoc()->GetPool(), ATTR_LAYER_START, ATTR_LAYER_END );
+
+ aNewAttr.Put( SdAttrLayerName( aLayerName ) );
+ aNewAttr.Put( SdAttrLayerTitle( aLayerTitle ) );
+ aNewAttr.Put( SdAttrLayerDesc( aLayerDesc ) );
+ aNewAttr.Put( SdAttrLayerVisible( bIsVisible ) );
+ aNewAttr.Put( SdAttrLayerLocked( bIsLocked ) );
+ aNewAttr.Put( SdAttrLayerPrintable( bIsPrintable ) );
+ aNewAttr.Put( SdAttrLayerThisPage() );
+
+ SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
+ AbstractSdInsertLayerDlg* pDlg = pFact ? pFact->CreateSdInsertLayerDlg(NULL, aNewAttr, bDelete, String( SdResId( STR_MODIFYLAYER ) ) ) : 0;
+ if( pDlg )
+ {
+ pDlg->SetHelpId( SD_MOD()->GetSlotPool()->GetSlot( SID_MODIFYLAYER )->GetCommand() );
+
+ // Ueberpruefung auf schon vorhandene Namen
+ BOOL bLoop = TRUE;
+ USHORT nRet = 0;
+ while( bLoop && ( (nRet = pDlg->Execute()) == RET_OK ) )
+ {
+ pDlg->GetAttr( aNewAttr );
+ aLayerName = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue ();
+
+ if( (rLayerAdmin.GetLayer( aLayerName, FALSE ) &&
+ aLayerName != aOldLayerName) || aLayerName.Len()==0 )
+ {
+ // Name ist schon vorhanden
+ WarningBox aWarningBox (
+ GetParentWindow(),
+ WinBits( WB_OK ),
+ String( SdResId( STR_WARN_NAME_DUPLICATE)));
+ aWarningBox.Execute();
+ }
+ else
+ bLoop = FALSE;
+ }
+ switch (nRet)
+ {
+ case RET_OK :
+ aLayerTitle = ((SdAttrLayerTitle &) aNewAttr.Get (ATTR_LAYER_TITLE)).GetValue ();
+ aLayerDesc = ((SdAttrLayerDesc &) aNewAttr.Get (ATTR_LAYER_DESC)).GetValue ();
+ bIsVisible = ((const SdAttrLayerVisible &) aNewAttr.Get (ATTR_LAYER_VISIBLE)).GetValue ();
+ bIsLocked = ((const SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_LOCKED)).GetValue ();
+ bIsPrintable = ((const SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_PRINTABLE)).GetValue ();
+
+ delete pDlg;
+ break;
+
+ default :
+ delete pDlg;
+ rReq.Ignore ();
+ Cancel ();
+ return;
+ }
+ }
+ }
+ else if (pArgs->Count () == 4)
+ {
+ SFX_REQUEST_ARG (rReq, pLayerName, SfxStringItem, ID_VAL_LAYERNAME, FALSE);
+ SFX_REQUEST_ARG (rReq, pIsVisible, SfxBoolItem, ID_VAL_ISVISIBLE, FALSE);
+ SFX_REQUEST_ARG (rReq, pIsLocked, SfxBoolItem, ID_VAL_ISLOCKED, FALSE);
+ SFX_REQUEST_ARG (rReq, pIsPrintable, SfxBoolItem, ID_VAL_ISPRINTABLE, FALSE);
+
+ aLayerName = pLayerName->GetValue ();
+ bIsVisible = pIsVisible->GetValue ();
+ bIsLocked = pIsLocked->GetValue ();
+ bIsPrintable = pIsPrintable->GetValue ();
+ }
+ else
+ {
+ StarBASIC::FatalError (SbERR_WRONG_ARGS);
+ Cancel ();
+ rReq.Ignore ();
+ break;
+ }
+
+ SfxUndoManager* pManager = GetDoc()->GetDocSh()->GetUndoManager();
+ SdLayerModifyUndoAction* pAction = new SdLayerModifyUndoAction(
+ GetDoc(),
+ pLayer,
+ // old values
+ aOldLayerName,
+ aOldLayerTitle,
+ aOldLayerDesc,
+ bOldIsVisible,
+ bOldIsLocked,
+ bOldIsPrintable,
+ // new values
+ aLayerName,
+ aLayerTitle,
+ aLayerDesc,
+ bIsVisible,
+ bIsLocked,
+ bIsPrintable
+ );
+ pManager->AddUndoAction( pAction );
+
+ ModifyLayer( pLayer, aLayerName, aLayerTitle, aLayerDesc, bIsVisible, bIsLocked, bIsPrintable );
+
+ Cancel();
+ rReq.Done ();
+ }
+ break;
+
+ case SID_RENAMELAYER:
+ {
+ if ( mpDrawView->IsTextEdit() )
+ {
+ mpDrawView->SdrEndTextEdit();
+ }
+
+ GetLayerTabControl()->StartEditMode(
+ GetLayerTabControl()->GetCurPageId() );
+
+ Cancel();
+ rReq.Ignore ();
+ }
+ break;
+
+ case SID_EDIT_HYPERLINK :
+ {
+ GetViewFrame()->GetDispatcher()->Execute( SID_HYPERLINK_DIALOG );
+
+ Cancel();
+ rReq.Done ();
+ }
+ break;
+
+ case SID_OPEN_HYPERLINK:
+ {
+ OutlinerView* pOutView = mpDrawView->GetTextEditOutlinerView();
+ if ( pOutView )
+ {
+ const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
+ if ( pFieldItem )
+ {
+ const SvxFieldData* pField = pFieldItem->GetField();
+ if( pField && pField->ISA( SvxURLField ) )
+ {
+ const SvxURLField* pURLField = static_cast< const SvxURLField* >( pField );
+
+ SfxStringItem aUrl( SID_FILE_NAME, pURLField->GetURL() );
+ SfxStringItem aTarget( SID_TARGETNAME, pURLField->GetTargetFrame() );
+
+ String aReferName;
+ SfxViewFrame* pFrame = GetViewFrame();
+ SfxMedium* pMed = pFrame->GetObjectShell()->GetMedium();
+ if (pMed)
+ aReferName = pMed->GetName();
+
+ SfxFrameItem aFrm( SID_DOCFRAME, pFrame );
+ SfxStringItem aReferer( SID_REFERER, aReferName );
+
+ SfxBoolItem aNewView( SID_OPEN_NEW_VIEW, FALSE );
+ SfxBoolItem aBrowsing( SID_BROWSE, TRUE );
+
+ SfxViewFrame* pViewFrm = SfxViewFrame::Current();
+ if (pViewFrm)
+ pViewFrm->GetDispatcher()->Execute( SID_OPENDOC,
+ SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
+ &aUrl, &aTarget,
+ &aFrm, &aReferer,
+ &aNewView, &aBrowsing,
+ 0L );
+ }
+ }
+ }
+ Cancel();
+ rReq.Done ();
+ }
+ break;
+
+ case SID_HYPERLINK_SETLINK:
+ {
+ const SfxItemSet* pReqArgs = rReq.GetArgs();
+
+ if (pReqArgs)
+ {
+ SvxHyperlinkItem* pHLItem =
+ (SvxHyperlinkItem*) &pReqArgs->Get(SID_HYPERLINK_SETLINK);
+
+ if (pHLItem->GetInsertMode() == HLINK_FIELD)
+ {
+ InsertURLField(pHLItem->GetURL(), pHLItem->GetName(),
+ pHLItem->GetTargetFrame(), NULL);
+ }
+ else if (pHLItem->GetInsertMode() == HLINK_BUTTON)
+ {
+ InsertURLButton(pHLItem->GetURL(), pHLItem->GetName(),
+ pHLItem->GetTargetFrame(), NULL);
+ }
+ else if (pHLItem->GetInsertMode() == HLINK_DEFAULT)
+ {
+ OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
+
+ if (pOlView)
+ {
+ InsertURLField(pHLItem->GetURL(), pHLItem->GetName(),
+ pHLItem->GetTargetFrame(), NULL);
+ }
+ else
+ {
+ InsertURLButton(pHLItem->GetURL(), pHLItem->GetName(),
+ pHLItem->GetTargetFrame(), NULL);
+ }
+ }
+ }
+
+ Cancel();
+ rReq.Ignore ();
+ }
+ break;
+
+ case SID_INSERT_FLD_DATE_FIX:
+ case SID_INSERT_FLD_DATE_VAR:
+ case SID_INSERT_FLD_TIME_FIX:
+ case SID_INSERT_FLD_TIME_VAR:
+ case SID_INSERT_FLD_AUTHOR:
+ case SID_INSERT_FLD_PAGE:
+ case SID_INSERT_FLD_PAGES:
+ case SID_INSERT_FLD_FILE:
+ {
+ USHORT nMul = 1;
+ SvxFieldItem* pFieldItem = 0;
+
+ switch( nSId )
+ {
+ case SID_INSERT_FLD_DATE_FIX:
+ pFieldItem = new SvxFieldItem(
+ SvxDateField( Date(), SVXDATETYPE_FIX ), EE_FEATURE_FIELD );
+ break;
+
+ case SID_INSERT_FLD_DATE_VAR:
+ pFieldItem = new SvxFieldItem( SvxDateField(), EE_FEATURE_FIELD );
+ break;
+
+ case SID_INSERT_FLD_TIME_FIX:
+ pFieldItem = new SvxFieldItem(
+ SvxExtTimeField( Time(), SVXTIMETYPE_FIX ), EE_FEATURE_FIELD );
+ break;
+
+ case SID_INSERT_FLD_TIME_VAR:
+ pFieldItem = new SvxFieldItem( SvxExtTimeField(), EE_FEATURE_FIELD );
+ break;
+
+ case SID_INSERT_FLD_AUTHOR:
+ {
+ SvtUserOptions aUserOptions;
+ pFieldItem = new SvxFieldItem(
+ SvxAuthorField(
+ aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() ), EE_FEATURE_FIELD );
+ }
+ break;
+
+ case SID_INSERT_FLD_PAGE:
+ {
+ pFieldItem = new SvxFieldItem( SvxPageField(), EE_FEATURE_FIELD );
+ nMul = 3;
+ }
+ break;
+
+ case SID_INSERT_FLD_PAGES:
+ {
+ pFieldItem = new SvxFieldItem( SvxPagesField(), EE_FEATURE_FIELD );
+ nMul = 3;
+ }
+ break;
+
+ case SID_INSERT_FLD_FILE:
+ {
+ String aName;
+ if( GetDocSh()->HasName() )
+ aName = GetDocSh()->GetMedium()->GetName();
+ //else
+ // aName = GetDocSh()->GetName();
+ pFieldItem = new SvxFieldItem( SvxExtFileField( aName ), EE_FEATURE_FIELD );
+ }
+ break;
+ }
+
+ OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
+
+ if( pOLV )
+ {
+ const SvxFieldItem* pOldFldItem = pOLV->GetFieldAtSelection();
+
+ if( pOldFldItem && ( pOldFldItem->GetField()->ISA( SvxURLField ) ||
+ pOldFldItem->GetField()->ISA( SvxDateField ) ||
+ pOldFldItem->GetField()->ISA( SvxTimeField ) ||
+ pOldFldItem->GetField()->ISA( SvxExtTimeField ) ||
+ pOldFldItem->GetField()->ISA( SvxExtFileField ) ||
+ pOldFldItem->GetField()->ISA( SvxAuthorField ) ||
+ pOldFldItem->GetField()->ISA( SvxPageField ) ) )
+ {
+ // Feld selektieren, so dass es beim Insert geloescht wird
+ ESelection aSel = pOLV->GetSelection();
+ if( aSel.nStartPos == aSel.nEndPos )
+ aSel.nEndPos++;
+ pOLV->SetSelection( aSel );
+ }
+
+ if( pFieldItem )
+ pOLV->InsertField( *pFieldItem );
+ }
+ else
+ {
+ Outliner* pOutl = GetDoc()->GetInternalOutliner();
+ pOutl->Init( OUTLINERMODE_TEXTOBJECT );
+ USHORT nOutlMode = pOutl->GetMode();
+ pOutl->SetStyleSheet( 0, NULL );
+ pOutl->QuickInsertField( *pFieldItem, ESelection() );
+ OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject();
+
+ SdrRectObj* pRectObj = new SdrRectObj( OBJ_TEXT );
+ pRectObj->SetMergedItem(SdrTextAutoGrowWidthItem(TRUE));
+
+ pOutl->UpdateFields();
+ pOutl->SetUpdateMode( TRUE );
+ Size aSize( pOutl->CalcTextSize() );
+ aSize.Width() *= nMul;
+ pOutl->SetUpdateMode( FALSE );
+
+ Point aPos;
+ 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 );
+ }
+
+ delete pFieldItem;
+
+ Cancel();
+ rReq.Ignore ();
+ }
+ break;
+
+ case SID_MODIFY_FIELD:
+ {
+ OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
+
+ if( pOLV )
+ {
+ const SvxFieldItem* pFldItem = pOLV->GetFieldAtSelection();
+
+ if( pFldItem && (pFldItem->GetField()->ISA( SvxDateField ) ||
+ pFldItem->GetField()->ISA( SvxAuthorField ) ||
+ pFldItem->GetField()->ISA( SvxExtFileField ) ||
+ pFldItem->GetField()->ISA( SvxExtTimeField ) ) )
+ {
+ // Dialog...
+ SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
+ AbstractSdModifyFieldDlg* pDlg = pFact ? pFact->CreateSdModifyFieldDlg(GetActiveWindow(), pFldItem->GetField(), pOLV->GetAttribs() ) : 0;
+ if( pDlg && pDlg->Execute() == RET_OK )
+ {
+ // #108538#
+ // To make a correct SetAttribs() call at the utlinerView
+ // it is necessary to split the actions here
+ SvxFieldData* pField = pDlg->GetField();
+ ESelection aSel = pOLV->GetSelection();
+ sal_Bool bSelectionWasModified(sal_False);
+
+ if( pField )
+ {
+ SvxFieldItem aFieldItem( *pField, EE_FEATURE_FIELD );
+
+ if( aSel.nStartPos == aSel.nEndPos )
+ {
+ bSelectionWasModified = sal_True;
+ aSel.nEndPos++;
+ pOLV->SetSelection( aSel );
+ }
+
+ pOLV->InsertField( aFieldItem );
+
+ // #108538# select again for eventual SetAttribs call
+ pOLV->SetSelection( aSel );
+ }
+
+ SfxItemSet aSet( pDlg->GetItemSet() );
+
+ if( aSet.Count() )
+ {
+ pOLV->SetAttribs( aSet );
+
+ ::Outliner* pOutliner = pOLV->GetOutliner();
+ if( pOutliner )
+ pOutliner->UpdateFields();
+ }
+
+ if(pField)
+ {
+ // #108538# restore selection to original
+ if(bSelectionWasModified)
+ {
+ aSel.nEndPos--;
+ pOLV->SetSelection( aSel );
+ }
+
+ delete pField;
+ }
+ }
+ delete pDlg;
+ }
+ }
+
+ Cancel();
+ rReq.Ignore ();
+ }
+ break;
+
+ case SID_OPEN_XML_FILTERSETTINGS:
+ {
+ try
+ {
+ com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XExecutableDialog > xDialog(::comphelper::getProcessServiceFactory()->createInstance(rtl::OUString::createFromAscii("com.sun.star.comp.ui.XSLTFilterDialog")), com::sun::star::uno::UNO_QUERY);
+ if( xDialog.is() )
+ {
+ xDialog->execute();
+ }
+ }
+ catch( ::com::sun::star::uno::RuntimeException& )
+ {
+ }
+
+ Cancel();
+ rReq.Ignore ();
+ }
+ break;
+
+ default:
+ {
+ // switch Anweisung wegen CLOOKS aufgeteilt. Alle case-Anweisungen die
+ // eine Fu???? -Funktion aufrufen, sind in die Methode FuTemp03 (drviewsb)
+ // gewandert.
+ FuTemp03(rReq);
+ }
+ break;
+ };
+};
+
+bool DrawViewShell::RenameSlide( USHORT nPageId, const String & rName )
+{
+ BOOL bOutDummy;
+ if( GetDoc()->GetPageByName( rName, bOutDummy ) != SDRPAGE_NOTFOUND )
+ return false;
+
+ SdPage* pPageToRename = NULL;
+ PageKind ePageKind = GetPageKind();
+
+ if( GetEditMode() == EM_PAGE )
+ {
+ pPageToRename = GetDoc()->GetSdPage( nPageId - 1, ePageKind );
+
+ // Undo
+ SdPage* pUndoPage = pPageToRename;
+ SdrLayerAdmin & rLayerAdmin = GetDoc()->GetLayerAdmin();
+ BYTE nBackground = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRND )), FALSE );
+ BYTE nBgObj = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRNDOBJ )), FALSE );
+ SetOfByte aVisibleLayers = mpActualPage->TRG_GetMasterPageVisibleLayers();
+
+ // (#67720#)
+ SfxUndoManager* pManager = GetDoc()->GetDocSh()->GetUndoManager();
+ ModifyPageUndoAction* pAction = new ModifyPageUndoAction(
+ pManager, GetDoc(), pUndoPage, rName, pUndoPage->GetAutoLayout(),
+ aVisibleLayers.IsSet( nBackground ),
+ aVisibleLayers.IsSet( nBgObj ));
+ pManager->AddUndoAction( pAction );
+
+ // rename
+ pPageToRename->SetName( rName );
+
+ if( ePageKind == PK_STANDARD )
+ {
+ // also rename notes-page
+ SdPage* pNotesPage = GetDoc()->GetSdPage( nPageId - 1, PK_NOTES );
+ pNotesPage->SetName( rName );
+ }
+ }
+ else
+ {
+ // rename MasterPage -> rename LayoutTemplate
+ pPageToRename = GetDoc()->GetMasterSdPage( nPageId - 1, ePageKind );
+ GetDoc()->RenameLayoutTemplate( pPageToRename->GetLayoutName(), rName );
+ }
+
+ bool bSuccess = ( FALSE != rName.Equals( pPageToRename->GetName()));
+
+ if( bSuccess )
+ {
+ // user edited page names may be changed by the page so update control
+ maTabControl.SetPageText( nPageId, rName );
+
+ // set document to modified state
+ GetDoc()->SetChanged( TRUE );
+
+ // inform navigator about change
+ SfxBoolItem aItem( SID_NAVIGATOR_INIT, TRUE );
+ GetViewFrame()->GetDispatcher()->Execute(
+ SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
+
+ // Tell the slide sorter about the name change (necessary for
+ // accessibility.)
+ slidesorter::SlideSorterViewShell* pSlideSorterViewShell
+ = slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase());
+ if (pSlideSorterViewShell != NULL)
+ {
+ pSlideSorterViewShell->GetSlideSorter().GetController().PageNameHasChanged(
+ nPageId-1, rName);
+ }
+ }
+
+ return bSuccess;
+}
+
+
+
+
+IMPL_LINK( DrawViewShell, RenameSlideHdl, AbstractSvxNameDialog*, pDialog )
+{
+ if( ! pDialog )
+ return 0;
+
+ String aNewName;
+ pDialog->GetName( aNewName );
+
+ SdPage* pCurrentPage = GetDoc()->GetSdPage( maTabControl.GetCurPageId() - 1, GetPageKind() );
+
+ return pCurrentPage && ( aNewName.Equals( pCurrentPage->GetName() ) || GetDocSh()->IsNewPageNameValid( aNewName ) );
+}
+
+
+
+
+void DrawViewShell::ModifyLayer (
+ SdrLayer* pLayer,
+ const String& rLayerName,
+ const String& rLayerTitle,
+ const String& rLayerDesc,
+ bool bIsVisible,
+ bool bIsLocked,
+ bool bIsPrintable)
+{
+ if( pLayer )
+ {
+ const USHORT nPageCount = GetLayerTabControl()->GetPageCount();
+ USHORT nCurPage = 0;
+ USHORT nPos;
+ for( nPos = 0; nPos < nPageCount; nPos++ )
+ {
+ USHORT nId = GetLayerTabControl()->GetPageId( nPos );
+ if( pLayer->GetName() == GetLayerTabControl()->GetPageText( nId ) )
+ {
+ nCurPage = nId;
+ break;
+ }
+ }
+
+ pLayer->SetName( rLayerName );
+ pLayer->SetTitle( rLayerTitle );
+ pLayer->SetDescription( rLayerDesc );
+ mpDrawView->SetLayerVisible( rLayerName, bIsVisible );
+ mpDrawView->SetLayerLocked( rLayerName, bIsLocked);
+ mpDrawView->SetLayerPrintable(rLayerName, bIsPrintable);
+
+ GetDoc()->SetChanged(TRUE);
+
+ GetLayerTabControl()->SetPageText(nCurPage, rLayerName);
+
+ TabBarPageBits nBits = 0;
+
+ if (!bIsVisible)
+ {
+ // Unsichtbare Layer werden anders dargestellt
+ nBits = TPB_SPECIAL;
+ }
+
+ GetLayerTabControl()->SetPageBits(nCurPage, nBits);
+
+ GetViewFrame()->GetDispatcher()->Execute(
+ SID_SWITCHLAYER,
+ SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
+
+ // Call Invalidate at the form shell.
+ FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
+ if (pFormShell != NULL)
+ pFormShell->Invalidate();
+ }
+}
+
+} // end of namespace sd