xref: /trunk/main/sd/source/ui/view/drviewsb.cxx (revision a893be29343ee97512d484e6e8fefa91df2b44cb)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
27 #include <comphelper/processfactory.hxx>
28 #include <svx/svdlayer.hxx>
29 #ifndef _SVXIDS_HXX
30 #include <svx/svxids.hrc>
31 #endif
32 #include <sfx2/msgpool.hxx>
33 #include <svx/hyprlink.hxx>
34 #include <sfx2/viewfrm.hxx>
35 #include <svx/hlnkitem.hxx>
36 #include <tools/urlobj.hxx>
37 #include <editeng/eeitem.hxx>
38 #ifndef _FLDITEM_HXX
39 #include <editeng/flditem.hxx>
40 #endif
41 #include <vcl/msgbox.hxx>
42 #include <sfx2/request.hxx>
43 #include <sfx2/dispatch.hxx>
44 #include <svx/svdorect.hxx>
45 #include <sfx2/docfile.hxx>
46 #include <basic/sbstar.hxx>
47 #include <basic/sberrors.hxx>
48 #include <svx/fmshell.hxx>
49 #include <svx/svxdlg.hxx>
50 #include <svx/dialogs.hrc>
51 #include <unotools/useroptions.hxx>
52 
53 #include "app.hrc"
54 #include "strings.hrc"
55 #include "res_bmp.hrc"
56 #include "glob.hrc"
57 #include "Outliner.hxx"
58 #include "Window.hxx"
59 #include "app.hxx"
60 #include "sdattr.hxx"
61 #include "drawdoc.hxx"
62 #include "DrawDocShell.hxx"
63 #include "sdresid.hxx"
64 #include "sdpage.hxx"
65 #include "DrawViewShell.hxx"
66 #include "drawview.hxx"
67 #include "unmodpg.hxx"
68 #include "undolayer.hxx"
69 #include "ViewShellBase.hxx"
70 #include "FormShellManager.hxx"
71 #include "LayerTabBar.hxx"
72 #include "sdabstdlg.hxx"
73 #include "SlideSorterViewShell.hxx"
74 #include "SlideSorter.hxx"
75 #include "controller/SlideSorterController.hxx"
76 
77 #define RET_DELETE  100
78 
79 namespace sd {
80 
81 /*************************************************************************
82 |*
83 |* SfxRequests fuer temporaere Funktionen
84 |*
85 \************************************************************************/
86 
87 void DrawViewShell::FuTemp02(SfxRequest& rReq)
88 {
89     sal_uInt16 nSId = rReq.GetSlot();
90     switch( nSId )
91     {
92         case SID_INSERTLAYER:
93         {
94             if ( mpDrawView->IsTextEdit() )
95             {
96                 mpDrawView->SdrEndTextEdit();
97             }
98 
99             SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
100             sal_uInt16 nLayerCnt = rLayerAdmin.GetLayerCount();
101             sal_uInt16 nLayer = nLayerCnt - 2 + 1;
102             String aLayerName ( SdResId(STR_LAYER) ), aLayerTitle, aLayerDesc;
103             aLayerName += String::CreateFromInt32( (sal_Int32)nLayer );
104             sal_Bool bIsVisible = sal_False;
105             sal_Bool bIsLocked = sal_False;
106             sal_Bool bIsPrintable = sal_False;
107 
108             const SfxItemSet* pArgs = rReq.GetArgs();
109 
110             if (! pArgs)
111             {
112                 SfxItemSet aNewAttr( GetDoc()->GetPool(), ATTR_LAYER_START, ATTR_LAYER_END );
113 
114                 aNewAttr.Put( SdAttrLayerName( aLayerName ) );
115                 aNewAttr.Put( SdAttrLayerTitle() );
116                 aNewAttr.Put( SdAttrLayerDesc() );
117                 aNewAttr.Put( SdAttrLayerVisible() );
118                 aNewAttr.Put( SdAttrLayerPrintable() );
119                 aNewAttr.Put( SdAttrLayerLocked() );
120                 aNewAttr.Put( SdAttrLayerThisPage() );
121 
122                 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
123                 AbstractSdInsertLayerDlg* pDlg = pFact ? pFact->CreateSdInsertLayerDlg(NULL, aNewAttr, true, String( SdResId( STR_INSERTLAYER ) ) ) : 0;
124                 if( pDlg )
125                 {
126                     pDlg->SetHelpId( SD_MOD()->GetSlotPool()->GetSlot( SID_INSERTLAYER )->GetCommand() );
127 
128                     // Ueberpruefung auf schon vorhandene Namen
129                     sal_Bool bLoop = sal_True;
130                     while( bLoop && pDlg->Execute() == RET_OK )
131                     {
132                         pDlg->GetAttr( aNewAttr );
133                         aLayerName   = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue ();
134 
135                         if( rLayerAdmin.GetLayer( aLayerName, sal_False )
136                             || aLayerName.Len()==0 )
137                         {
138                             // Name ist schon vorhanden
139                             WarningBox aWarningBox (
140                                 GetParentWindow(),
141                                 WinBits( WB_OK ),
142                                 String(SdResId( STR_WARN_NAME_DUPLICATE)));
143                             aWarningBox.Execute();
144                         }
145                         else
146                             bLoop = sal_False;
147                     }
148                     if( bLoop ) // wurde abgebrochen
149                     {
150                         delete pDlg;
151 
152                         Cancel();
153                         rReq.Ignore ();
154                         break;
155                     }
156                     else
157                     {
158                         //pDlg->GetAttr( aNewAttr );
159                         //aLayerName     = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue ();
160                         aLayerTitle  = ((SdAttrLayerTitle &) aNewAttr.Get (ATTR_LAYER_TITLE)).GetValue ();
161                         aLayerDesc   = ((SdAttrLayerDesc &) aNewAttr.Get (ATTR_LAYER_DESC)).GetValue ();
162                         bIsVisible   = ((SdAttrLayerVisible &) aNewAttr.Get (ATTR_LAYER_VISIBLE)).GetValue ();
163                         bIsLocked    = ((SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_LOCKED)).GetValue () ;
164                         bIsPrintable = ((SdAttrLayerPrintable &) aNewAttr.Get (ATTR_LAYER_PRINTABLE)).GetValue () ;
165 
166                         delete pDlg;
167                     }
168                 }
169             }
170             else if (pArgs->Count () != 4)
171                  {
172                      StarBASIC::FatalError (SbERR_WRONG_ARGS);
173                      Cancel();
174                      rReq.Ignore ();
175                      break;
176                  }
177                  else
178                  {
179                      SFX_REQUEST_ARG (rReq, pLayerName, SfxStringItem, ID_VAL_LAYERNAME, sal_False);
180                      SFX_REQUEST_ARG (rReq, pIsVisible, SfxBoolItem, ID_VAL_ISVISIBLE, sal_False);
181                      SFX_REQUEST_ARG (rReq, pIsLocked, SfxBoolItem, ID_VAL_ISLOCKED, sal_False);
182                      SFX_REQUEST_ARG (rReq, pIsPrintable, SfxBoolItem, ID_VAL_ISPRINTABLE, sal_False);
183 
184                      aLayerName   = pLayerName->GetValue ();
185                      bIsVisible   = pIsVisible->GetValue ();
186                      bIsLocked    = pIsLocked->GetValue ();
187                      bIsPrintable = pIsPrintable->GetValue ();
188                  }
189 
190             String aPrevLayer = mpDrawView->GetActiveLayer();
191             String aName;
192             SdrLayer* pLayer;
193             sal_uInt16 nPrevLayer = 0;
194             nLayerCnt = rLayerAdmin.GetLayerCount();
195 
196             for ( nLayer = 0; nLayer < nLayerCnt; nLayer++ )
197             {
198                 pLayer = rLayerAdmin.GetLayer(nLayer);
199                 aName = pLayer->GetName();
200 
201                 if ( aPrevLayer == aName )
202                 {
203 //                    nPrevLayer = nLayer;
204                     nPrevLayer = Max(nLayer, (sal_uInt16) 4);
205                 }
206             }
207 
208             mpDrawView->InsertNewLayer(aLayerName, nPrevLayer + 1);
209             pLayer = rLayerAdmin.GetLayer(aLayerName, sal_False);
210             if( pLayer )
211             {
212                 pLayer->SetTitle( aLayerTitle );
213                 pLayer->SetDescription( aLayerDesc );
214             }
215 
216             mpDrawView->SetLayerVisible( aLayerName, bIsVisible );
217             mpDrawView->SetLayerLocked( aLayerName, bIsLocked);
218             mpDrawView->SetLayerPrintable(aLayerName, bIsPrintable);
219 
220             mpDrawView->SetActiveLayer(aLayerName);
221 
222             ResetActualLayer();
223 
224             GetDoc()->SetChanged(sal_True);
225 
226             GetViewFrame()->GetDispatcher()->Execute(SID_SWITCHLAYER,
227                     SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
228 
229             Cancel();
230             rReq.Done ();
231         }
232         break;
233 
234         case SID_MODIFYLAYER:
235         {
236             if(!GetLayerTabControl()) // #87182#
237             {
238                 OSL_ENSURE(false, "No LayerTabBar (!)");
239                 Cancel();
240                 rReq.Ignore();
241                 break;
242             }
243 
244             if ( mpDrawView->IsTextEdit() )
245             {
246                 mpDrawView->SdrEndTextEdit();
247             }
248 
249             SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
250             sal_uInt16 nCurPage = GetLayerTabControl()->GetCurPageId();
251             String aLayerName( GetLayerTabControl()->GetPageText(nCurPage) );
252             SdrLayer* pLayer = rLayerAdmin.GetLayer(aLayerName, sal_False);
253 
254             String aLayerTitle( pLayer->GetTitle() );
255             String aLayerDesc( pLayer->GetDescription() );
256 
257             String aOldLayerName( aLayerName );
258             String aOldLayerTitle( aLayerTitle );
259             String aOldLayerDesc( aLayerDesc );
260 
261             sal_Bool bIsVisible, bIsLocked, bIsPrintable;
262             sal_Bool bOldIsVisible = bIsVisible = mpDrawView->IsLayerVisible(aLayerName);
263             sal_Bool bOldIsLocked = bIsLocked = mpDrawView->IsLayerLocked(aLayerName);
264             sal_Bool bOldIsPrintable = bIsPrintable = mpDrawView->IsLayerPrintable(aLayerName);
265 
266 
267             const SfxItemSet* pArgs = rReq.GetArgs();
268             // darf der Layer geloescht werden ?
269             bool bDelete = true;
270 
271             String aLayoutLayer ( SdResId(STR_LAYER_LAYOUT) );
272             String aControlsLayer ( SdResId(STR_LAYER_CONTROLS) );
273             String aMeasureLinesLayer ( SdResId(STR_LAYER_MEASURELINES) );
274             String aBackgroundLayer( SdResId(STR_LAYER_BCKGRND) );
275             String aBackgroundObjLayer( SdResId(STR_LAYER_BCKGRNDOBJ) );
276 
277             if( aLayerName == aLayoutLayer       || aLayerName == aControlsLayer ||
278                 aLayerName == aMeasureLinesLayer ||
279                 aLayerName == aBackgroundLayer   || aLayerName == aBackgroundObjLayer )
280             {
281                 bDelete = false;
282             }
283 
284             if (! pArgs)
285             {
286                 SfxItemSet aNewAttr( GetDoc()->GetPool(), ATTR_LAYER_START, ATTR_LAYER_END );
287 
288                 aNewAttr.Put( SdAttrLayerName( aLayerName ) );
289                 aNewAttr.Put( SdAttrLayerTitle( aLayerTitle ) );
290                 aNewAttr.Put( SdAttrLayerDesc( aLayerDesc ) );
291                 aNewAttr.Put( SdAttrLayerVisible( bIsVisible ) );
292                 aNewAttr.Put( SdAttrLayerLocked( bIsLocked ) );
293                 aNewAttr.Put( SdAttrLayerPrintable( bIsPrintable ) );
294                 aNewAttr.Put( SdAttrLayerThisPage() );
295 
296                 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
297                 AbstractSdInsertLayerDlg* pDlg = pFact ? pFact->CreateSdInsertLayerDlg(NULL, aNewAttr, bDelete, String( SdResId( STR_MODIFYLAYER ) ) ) : 0;
298                 if( pDlg )
299                 {
300                     pDlg->SetHelpId( SD_MOD()->GetSlotPool()->GetSlot( SID_MODIFYLAYER )->GetCommand() );
301 
302                     // Ueberpruefung auf schon vorhandene Namen
303                     sal_Bool    bLoop = sal_True;
304                     sal_uInt16  nRet = 0;
305                     while( bLoop && ( (nRet = pDlg->Execute()) == RET_OK ) )
306                     {
307                         pDlg->GetAttr( aNewAttr );
308                         aLayerName   = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue ();
309 
310                         if( (rLayerAdmin.GetLayer( aLayerName, sal_False ) &&
311                              aLayerName != aOldLayerName) || aLayerName.Len()==0 )
312                         {
313                             // Name ist schon vorhanden
314                             WarningBox aWarningBox (
315                                 GetParentWindow(),
316                                 WinBits( WB_OK ),
317                                 String( SdResId( STR_WARN_NAME_DUPLICATE)));
318                             aWarningBox.Execute();
319                         }
320                         else
321                             bLoop = sal_False;
322                     }
323                     switch (nRet)
324                     {
325                         case RET_OK :
326                             aLayerTitle  = ((SdAttrLayerTitle &) aNewAttr.Get (ATTR_LAYER_TITLE)).GetValue ();
327                             aLayerDesc   = ((SdAttrLayerDesc &) aNewAttr.Get (ATTR_LAYER_DESC)).GetValue ();
328                             bIsVisible   = ((const SdAttrLayerVisible &) aNewAttr.Get (ATTR_LAYER_VISIBLE)).GetValue ();
329                             bIsLocked    = ((const SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_LOCKED)).GetValue ();
330                             bIsPrintable = ((const SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_PRINTABLE)).GetValue ();
331 
332                             delete pDlg;
333                             break;
334 
335                         default :
336                             delete pDlg;
337                             rReq.Ignore ();
338                             Cancel ();
339                             return;
340                     }
341                 }
342             }
343             else if (pArgs->Count () == 4)
344             {
345                 SFX_REQUEST_ARG (rReq, pLayerName, SfxStringItem, ID_VAL_LAYERNAME, sal_False);
346                 SFX_REQUEST_ARG (rReq, pIsVisible, SfxBoolItem, ID_VAL_ISVISIBLE, sal_False);
347                 SFX_REQUEST_ARG (rReq, pIsLocked, SfxBoolItem, ID_VAL_ISLOCKED, sal_False);
348                 SFX_REQUEST_ARG (rReq, pIsPrintable, SfxBoolItem, ID_VAL_ISPRINTABLE, sal_False);
349 
350                 aLayerName   = pLayerName->GetValue ();
351                 bIsVisible   = pIsVisible->GetValue ();
352                 bIsLocked    = pIsLocked->GetValue ();
353                 bIsPrintable = pIsPrintable->GetValue ();
354             }
355             else
356             {
357                 StarBASIC::FatalError (SbERR_WRONG_ARGS);
358                 Cancel ();
359                 rReq.Ignore ();
360                 break;
361             }
362 
363             ::svl::IUndoManager* pManager = GetDoc()->GetDocSh()->GetUndoManager();
364             SdLayerModifyUndoAction* pAction = new SdLayerModifyUndoAction(
365                 GetDoc(),
366                 pLayer,
367                 // old values
368                 aOldLayerName,
369                 aOldLayerTitle,
370                 aOldLayerDesc,
371                 bOldIsVisible,
372                 bOldIsLocked,
373                 bOldIsPrintable,
374                 // new values
375                 aLayerName,
376                 aLayerTitle,
377                 aLayerDesc,
378                 bIsVisible,
379                 bIsLocked,
380                 bIsPrintable
381                 );
382             pManager->AddUndoAction( pAction );
383 
384             ModifyLayer( pLayer, aLayerName, aLayerTitle, aLayerDesc, bIsVisible, bIsLocked, bIsPrintable );
385 
386             Cancel();
387             rReq.Done ();
388         }
389         break;
390 
391         case SID_RENAMELAYER:
392         {
393             if ( mpDrawView->IsTextEdit() )
394             {
395                 mpDrawView->SdrEndTextEdit();
396             }
397 
398             if(GetLayerTabControl()) // #87182#
399             {
400                 GetLayerTabControl()->StartEditMode(GetLayerTabControl()->GetCurPageId());
401             }
402             else
403             {
404                 OSL_ENSURE(false, "No LayerTabBar (!)");
405             }
406 
407             Cancel();
408             rReq.Ignore ();
409         }
410         break;
411 
412         case SID_EDIT_HYPERLINK :
413         {
414             GetViewFrame()->GetDispatcher()->Execute( SID_HYPERLINK_DIALOG );
415 
416             Cancel();
417             rReq.Done ();
418         }
419         break;
420 
421         case SID_OPEN_HYPERLINK:
422         {
423             OutlinerView* pOutView = mpDrawView->GetTextEditOutlinerView();
424             if ( pOutView )
425             {
426                 const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection();
427                 if ( pFieldItem )
428                 {
429                     const SvxFieldData* pField = pFieldItem->GetField();
430                     if( pField && pField->ISA( SvxURLField ) )
431                     {
432                         const SvxURLField* pURLField = static_cast< const SvxURLField* >( pField );
433 
434                         SfxStringItem aUrl( SID_FILE_NAME, pURLField->GetURL() );
435                         SfxStringItem aTarget( SID_TARGETNAME, pURLField->GetTargetFrame() );
436 
437                         String aReferName;
438                         SfxViewFrame* pFrame = GetViewFrame();
439                         SfxMedium* pMed = pFrame->GetObjectShell()->GetMedium();
440                         if (pMed)
441                             aReferName = pMed->GetName();
442 
443                         SfxFrameItem aFrm( SID_DOCFRAME, pFrame );
444                         SfxStringItem aReferer( SID_REFERER, aReferName );
445 
446                         SfxBoolItem aNewView( SID_OPEN_NEW_VIEW, sal_False );
447                         SfxBoolItem aBrowsing( SID_BROWSE, sal_True );
448 
449                         SfxViewFrame* pViewFrm = SfxViewFrame::Current();
450                         if (pViewFrm)
451                             pViewFrm->GetDispatcher()->Execute( SID_OPENDOC,
452                                                         SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
453                                                         &aUrl, &aTarget,
454                                                         &aFrm, &aReferer,
455                                                         &aNewView, &aBrowsing,
456                                                         0L );
457                     }
458                 }
459             }
460             Cancel();
461             rReq.Done ();
462         }
463         break;
464 
465         case SID_HYPERLINK_SETLINK:
466         {
467             const SfxItemSet* pReqArgs = rReq.GetArgs();
468 
469             if (pReqArgs)
470             {
471                 SvxHyperlinkItem* pHLItem =
472                 (SvxHyperlinkItem*) &pReqArgs->Get(SID_HYPERLINK_SETLINK);
473 
474                 if (pHLItem->GetInsertMode() == HLINK_FIELD)
475                 {
476                     InsertURLField(pHLItem->GetURL(), pHLItem->GetName(),
477                                    pHLItem->GetTargetFrame(), NULL);
478                 }
479                 else if (pHLItem->GetInsertMode() == HLINK_BUTTON)
480                 {
481                     InsertURLButton(pHLItem->GetURL(), pHLItem->GetName(),
482                                     pHLItem->GetTargetFrame(), NULL);
483                 }
484                 else if (pHLItem->GetInsertMode() == HLINK_DEFAULT)
485                 {
486                     OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
487 
488                     if (pOlView)
489                     {
490                         InsertURLField(pHLItem->GetURL(), pHLItem->GetName(),
491                                        pHLItem->GetTargetFrame(), NULL);
492                     }
493                     else
494                     {
495                         InsertURLButton(pHLItem->GetURL(), pHLItem->GetName(),
496                                         pHLItem->GetTargetFrame(), NULL);
497                     }
498                 }
499             }
500 
501             Cancel();
502             rReq.Ignore ();
503         }
504         break;
505 
506         case SID_INSERT_FLD_DATE_FIX:
507         case SID_INSERT_FLD_DATE_VAR:
508         case SID_INSERT_FLD_TIME_FIX:
509         case SID_INSERT_FLD_TIME_VAR:
510         case SID_INSERT_FLD_AUTHOR:
511         case SID_INSERT_FLD_PAGE:
512         case SID_INSERT_FLD_PAGES:
513         case SID_INSERT_FLD_FILE:
514         {
515             sal_uInt16 nMul = 1;
516             SvxFieldItem* pFieldItem = 0;
517 
518             switch( nSId )
519             {
520                 case SID_INSERT_FLD_DATE_FIX:
521                     pFieldItem = new SvxFieldItem(
522                         SvxDateField( Date(), SVXDATETYPE_FIX ), EE_FEATURE_FIELD );
523                 break;
524 
525                 case SID_INSERT_FLD_DATE_VAR:
526                     pFieldItem = new SvxFieldItem( SvxDateField(), EE_FEATURE_FIELD );
527                 break;
528 
529                 case SID_INSERT_FLD_TIME_FIX:
530                     pFieldItem = new SvxFieldItem(
531                         SvxExtTimeField( Time(), SVXTIMETYPE_FIX ), EE_FEATURE_FIELD );
532                 break;
533 
534                 case SID_INSERT_FLD_TIME_VAR:
535                     pFieldItem = new SvxFieldItem( SvxExtTimeField(), EE_FEATURE_FIELD );
536                 break;
537 
538                 case SID_INSERT_FLD_AUTHOR:
539                 {
540                     SvtUserOptions aUserOptions;
541                     pFieldItem = new SvxFieldItem(
542                             SvxAuthorField(
543                                 aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() ), EE_FEATURE_FIELD );
544                 }
545                 break;
546 
547                 case SID_INSERT_FLD_PAGE:
548                 {
549                     pFieldItem = new SvxFieldItem( SvxPageField(), EE_FEATURE_FIELD );
550                     nMul = 3;
551                 }
552                 break;
553 
554                 case SID_INSERT_FLD_PAGES:
555                 {
556                     pFieldItem = new SvxFieldItem( SvxPagesField(), EE_FEATURE_FIELD );
557                     nMul = 3;
558                 }
559                 break;
560 
561                 case SID_INSERT_FLD_FILE:
562                 {
563                     String aName;
564                     if( GetDocSh()->HasName() )
565                         aName = GetDocSh()->GetMedium()->GetName();
566                     //else
567                     //  aName = GetDocSh()->GetName();
568                     pFieldItem = new SvxFieldItem( SvxExtFileField( aName ), EE_FEATURE_FIELD );
569                 }
570                 break;
571             }
572 
573             OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
574 
575             if( pOLV )
576             {
577                 const SvxFieldItem* pOldFldItem = pOLV->GetFieldAtSelection();
578 
579                 if( pOldFldItem && ( pOldFldItem->GetField()->ISA( SvxURLField ) ||
580                                     pOldFldItem->GetField()->ISA( SvxDateField ) ||
581                                     pOldFldItem->GetField()->ISA( SvxTimeField ) ||
582                                     pOldFldItem->GetField()->ISA( SvxExtTimeField ) ||
583                                     pOldFldItem->GetField()->ISA( SvxExtFileField ) ||
584                                     pOldFldItem->GetField()->ISA( SvxAuthorField ) ||
585                                     pOldFldItem->GetField()->ISA( SvxPageField ) ) )
586                 {
587                     // Feld selektieren, so dass es beim Insert geloescht wird
588                     ESelection aSel = pOLV->GetSelection();
589                     if( aSel.nStartPos == aSel.nEndPos )
590                         aSel.nEndPos++;
591                     pOLV->SetSelection( aSel );
592                 }
593 
594                 if( pFieldItem )
595                     pOLV->InsertField( *pFieldItem );
596             }
597             else
598             {
599                 Outliner* pOutl = GetDoc()->GetInternalOutliner();
600                 pOutl->Init( OUTLINERMODE_TEXTOBJECT );
601                 sal_uInt16 nOutlMode = pOutl->GetMode();
602                 pOutl->SetStyleSheet( 0, NULL );
603                 pOutl->QuickInsertField( *pFieldItem, ESelection() );
604                 OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject();
605 
606                 SdrRectObj* pRectObj = new SdrRectObj( OBJ_TEXT );
607                 pRectObj->SetMergedItem(SdrTextAutoGrowWidthItem(sal_True));
608 
609                 pOutl->UpdateFields();
610                 pOutl->SetUpdateMode( sal_True );
611                 Size aSize( pOutl->CalcTextSize() );
612                 aSize.Width() *= nMul;
613                 pOutl->SetUpdateMode( sal_False );
614 
615                 Point aPos;
616                 Rectangle aRect( aPos, GetActiveWindow()->GetOutputSizePixel() );
617                 aPos = aRect.Center();
618                 aPos = GetActiveWindow()->PixelToLogic(aPos);
619                 aPos.X() -= aSize.Width() / 2;
620                 aPos.Y() -= aSize.Height() / 2;
621 
622                 Rectangle aLogicRect(aPos, aSize);
623                 pRectObj->SetLogicRect(aLogicRect);
624                 pRectObj->SetOutlinerParaObject( pOutlParaObject );
625                 mpDrawView->InsertObjectAtView(pRectObj, *mpDrawView->GetSdrPageView());
626                 pOutl->Init( nOutlMode );
627             }
628 
629             delete pFieldItem;
630 
631             Cancel();
632             rReq.Ignore ();
633         }
634         break;
635 
636         case SID_MODIFY_FIELD:
637         {
638             OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
639 
640             if( pOLV )
641             {
642                 const SvxFieldItem* pFldItem = pOLV->GetFieldAtSelection();
643 
644                 if( pFldItem && (pFldItem->GetField()->ISA( SvxDateField ) ||
645                                  pFldItem->GetField()->ISA( SvxAuthorField ) ||
646                                  pFldItem->GetField()->ISA( SvxExtFileField ) ||
647                                  pFldItem->GetField()->ISA( SvxExtTimeField ) ) )
648                 {
649                     // Dialog...
650                     SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
651                     AbstractSdModifyFieldDlg* pDlg = pFact ? pFact->CreateSdModifyFieldDlg(GetActiveWindow(), pFldItem->GetField(), pOLV->GetAttribs() ) : 0;
652                     if( pDlg && pDlg->Execute() == RET_OK )
653                     {
654                         // #108538#
655                         // To make a correct SetAttribs() call at the utlinerView
656                         // it is necessary to split the actions here
657                         SvxFieldData* pField = pDlg->GetField();
658                         ESelection aSel = pOLV->GetSelection();
659                         sal_Bool bSelectionWasModified(sal_False);
660 
661                         if( pField )
662                         {
663                             SvxFieldItem aFieldItem( *pField, EE_FEATURE_FIELD );
664 
665                             if( aSel.nStartPos == aSel.nEndPos )
666                             {
667                                 bSelectionWasModified = sal_True;
668                                 aSel.nEndPos++;
669                                 pOLV->SetSelection( aSel );
670                             }
671 
672                             pOLV->InsertField( aFieldItem );
673 
674                             // #108538# select again for eventual SetAttribs call
675                             pOLV->SetSelection( aSel );
676                         }
677 
678                         SfxItemSet aSet( pDlg->GetItemSet() );
679 
680                         if( aSet.Count() )
681                         {
682                             pOLV->SetAttribs( aSet );
683 
684                             ::Outliner* pOutliner = pOLV->GetOutliner();
685                             if( pOutliner )
686                                 pOutliner->UpdateFields();
687                         }
688 
689                         if(pField)
690                         {
691                             // #108538# restore selection to original
692                             if(bSelectionWasModified)
693                             {
694                                 aSel.nEndPos--;
695                                 pOLV->SetSelection( aSel );
696                             }
697 
698                             delete pField;
699                         }
700                     }
701                     delete pDlg;
702                 }
703             }
704 
705             Cancel();
706             rReq.Ignore ();
707         }
708         break;
709 
710         case SID_OPEN_XML_FILTERSETTINGS:
711         {
712             try
713             {
714                 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);
715                 if( xDialog.is() )
716                 {
717                     xDialog->execute();
718                 }
719             }
720             catch( ::com::sun::star::uno::RuntimeException& )
721             {
722             }
723 
724             Cancel();
725             rReq.Ignore ();
726         }
727         break;
728 
729         default:
730         {
731             // switch Anweisung wegen CLOOKS aufgeteilt. Alle case-Anweisungen die
732             // eine Fu???? -Funktion aufrufen, sind in die Methode FuTemp03 (drviewsb)
733             // gewandert.
734             FuTemp03(rReq);
735         }
736         break;
737     };
738 };
739 
740 bool DrawViewShell::RenameSlide( sal_uInt16 nPageId, const String & rName  )
741 {
742     sal_Bool   bOutDummy;
743     if( GetDoc()->GetPageByName( rName, bOutDummy ) != SDRPAGE_NOTFOUND )
744         return false;
745 
746     SdPage* pPageToRename = NULL;
747     PageKind ePageKind = GetPageKind();
748 
749     if( GetEditMode() == EM_PAGE )
750     {
751         pPageToRename = GetDoc()->GetSdPage( nPageId - 1, ePageKind );
752 
753         // Undo
754         SdPage* pUndoPage = pPageToRename;
755         SdrLayerAdmin &  rLayerAdmin = GetDoc()->GetLayerAdmin();
756         sal_uInt8 nBackground = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRND )), sal_False );
757         sal_uInt8 nBgObj = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRNDOBJ )), sal_False );
758         SetOfByte aVisibleLayers = mpActualPage->TRG_GetMasterPageVisibleLayers();
759 
760         // (#67720#)
761         ::svl::IUndoManager* pManager = GetDoc()->GetDocSh()->GetUndoManager();
762         ModifyPageUndoAction* pAction = new ModifyPageUndoAction(
763             GetDoc(), pUndoPage, rName, pUndoPage->GetAutoLayout(),
764             aVisibleLayers.IsSet( nBackground ),
765             aVisibleLayers.IsSet( nBgObj ));
766         pManager->AddUndoAction( pAction );
767 
768         // rename
769         pPageToRename->SetName( rName );
770 
771         if( ePageKind == PK_STANDARD )
772         {
773             // also rename notes-page
774             SdPage* pNotesPage = GetDoc()->GetSdPage( nPageId - 1, PK_NOTES );
775             pNotesPage->SetName( rName );
776         }
777     }
778     else
779     {
780         // rename MasterPage -> rename LayoutTemplate
781         pPageToRename = GetDoc()->GetMasterSdPage( nPageId - 1, ePageKind );
782         GetDoc()->RenameLayoutTemplate( pPageToRename->GetLayoutName(), rName );
783     }
784 
785     bool bSuccess = ( sal_False != rName.Equals( pPageToRename->GetName()));
786 
787     if( bSuccess )
788     {
789         // user edited page names may be changed by the page so update control
790         maTabControl.SetPageText( nPageId, rName );
791 
792         // set document to modified state
793         GetDoc()->SetChanged( sal_True );
794 
795         // inform navigator about change
796         SfxBoolItem aItem( SID_NAVIGATOR_INIT, sal_True );
797         GetViewFrame()->GetDispatcher()->Execute(
798             SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
799 
800         // Tell the slide sorter about the name change (necessary for
801         // accessibility.)
802         slidesorter::SlideSorterViewShell* pSlideSorterViewShell
803             = slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase());
804         if (pSlideSorterViewShell != NULL)
805         {
806             pSlideSorterViewShell->GetSlideSorter().GetController().PageNameHasChanged(
807                 nPageId-1, rName);
808         }
809     }
810 
811     return bSuccess;
812 }
813 
814 
815 
816 
817 IMPL_LINK( DrawViewShell, RenameSlideHdl, AbstractSvxNameDialog*, pDialog )
818 {
819     if( ! pDialog )
820         return 0;
821 
822     String aNewName;
823     pDialog->GetName( aNewName );
824 
825     SdPage* pCurrentPage = GetDoc()->GetSdPage( maTabControl.GetCurPageId() - 1, GetPageKind() );
826 
827     return pCurrentPage && ( aNewName.Equals( pCurrentPage->GetName() ) || GetDocSh()->IsNewPageNameValid( aNewName ) );
828 }
829 
830 
831 
832 
833 void DrawViewShell::ModifyLayer (
834     SdrLayer* pLayer,
835     const String& rLayerName,
836     const String& rLayerTitle,
837     const String& rLayerDesc,
838     bool bIsVisible,
839     bool bIsLocked,
840     bool bIsPrintable)
841 {
842     if(!GetLayerTabControl()) // #87182#
843     {
844         OSL_ENSURE(false, "No LayerTabBar (!)");
845         return;
846     }
847 
848     if( pLayer )
849     {
850         const sal_uInt16 nPageCount = GetLayerTabControl()->GetPageCount();
851         sal_uInt16 nCurPage = 0;
852         sal_uInt16 nPos;
853         for( nPos = 0; nPos < nPageCount; nPos++ )
854         {
855             sal_uInt16 nId = GetLayerTabControl()->GetPageId( nPos );
856             if( pLayer->GetName() == GetLayerTabControl()->GetPageText( nId ) )
857             {
858                 nCurPage = nId;
859                 break;
860             }
861         }
862 
863         pLayer->SetName( rLayerName );
864         pLayer->SetTitle( rLayerTitle );
865         pLayer->SetDescription( rLayerDesc );
866         mpDrawView->SetLayerVisible( rLayerName, bIsVisible );
867         mpDrawView->SetLayerLocked( rLayerName, bIsLocked);
868         mpDrawView->SetLayerPrintable(rLayerName, bIsPrintable);
869 
870         GetDoc()->SetChanged(sal_True);
871 
872         GetLayerTabControl()->SetPageText(nCurPage, rLayerName);
873 
874         TabBarPageBits nBits = 0;
875 
876         if (!bIsVisible)
877         {
878             // Unsichtbare Layer werden anders dargestellt
879             nBits = TPB_SPECIAL;
880         }
881 
882         GetLayerTabControl()->SetPageBits(nCurPage, nBits);
883 
884         GetViewFrame()->GetDispatcher()->Execute(
885             SID_SWITCHLAYER,
886             SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
887 
888         // Call Invalidate at the form shell.
889         FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
890         if (pFormShell != NULL)
891             pFormShell->Invalidate();
892     }
893 }
894 
895 } // end of namespace sd
896