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