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 "OutlineViewShell.hxx"
21 :
22 : #include <com/sun/star/presentation/XPresentation2.hpp>
23 : #include <com/sun/star/beans/PropertyValue.hpp>
24 : #include <com/sun/star/uno/Any.hxx>
25 :
26 : #include "app.hrc"
27 : #include <svx/hlnkitem.hxx>
28 : #include <sfx2/docfile.hxx>
29 : #include <sfx2/dispatch.hxx>
30 : #include <sfx2/request.hxx>
31 : #include <svl/eitem.hxx>
32 : #include <sfx2/zoomitem.hxx>
33 : #include <svx/svxids.hrc>
34 : #include <vcl/msgbox.hxx>
35 : #include <editeng/eeitem.hxx>
36 : #include <editeng/flditem.hxx>
37 : #include <editeng/editstat.hxx>
38 : #include "optsitem.hxx"
39 : #include <unotools/useroptions.hxx>
40 :
41 : #include <sfx2/viewfrm.hxx>
42 : #include "Outliner.hxx"
43 : #include "Window.hxx"
44 : #include "fubullet.hxx"
45 : #include "fuolbull.hxx"
46 : #include "FrameView.hxx"
47 : #include "fuzoom.hxx"
48 : #include "fuscale.hxx"
49 : #include "fuchar.hxx"
50 : #include "fuinsfil.hxx"
51 : #include "fuprobjs.hxx"
52 : #include "futhes.hxx"
53 : #include "futempl.hxx"
54 : #include "fusldlg.hxx"
55 : #include "zoomlist.hxx"
56 : #include "fuexpand.hxx"
57 : #include "fusumry.hxx"
58 : #include "fucushow.hxx"
59 : #include "drawdoc.hxx"
60 : #include "sdattr.hxx"
61 : #include "ViewShellBase.hxx"
62 : #include "sdabstdlg.hxx"
63 : #include "framework/FrameworkHelper.hxx"
64 : #include "DrawViewShell.hxx"
65 : #include "slideshow.hxx"
66 : #include <boost/scoped_ptr.hpp>
67 :
68 : using namespace ::com::sun::star::uno;
69 : using namespace ::com::sun::star::presentation;
70 : using namespace ::com::sun::star::beans;
71 :
72 : namespace sd {
73 :
74 : /************************************************************************/
75 :
76 : /**
77 : * SfxRequests for temporary functions
78 : */
79 :
80 0 : void OutlineViewShell::FuTemporary(SfxRequest &rReq)
81 : {
82 0 : DeactivateCurrentFunction();
83 :
84 0 : OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
85 0 : sal_uInt16 nSId = rReq.GetSlot();
86 :
87 0 : switch( nSId )
88 : {
89 : case SID_ATTR_ZOOM:
90 : {
91 0 : const SfxItemSet* pArgs = rReq.GetArgs();
92 :
93 0 : if ( pArgs )
94 : {
95 : SvxZoomType eZT = static_cast<const SvxZoomItem&>( pArgs->
96 0 : Get( SID_ATTR_ZOOM ) ).GetType();
97 0 : switch( eZT )
98 : {
99 : case SvxZoomType::PERCENT:
100 : SetZoom( (long) static_cast<const SvxZoomItem&>( pArgs->
101 0 : Get( SID_ATTR_ZOOM ) ).GetValue() );
102 0 : Invalidate( SID_ATTR_ZOOM );
103 0 : Invalidate( SID_ATTR_ZOOMSLIDER );
104 0 : break;
105 : default:
106 0 : break;
107 : }
108 0 : rReq.Done();
109 : }
110 : else
111 : {
112 : // open the zoom dialog here
113 0 : SetCurrentFunction( FuScale::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
114 : }
115 0 : Cancel();
116 : }
117 0 : break;
118 :
119 : case SID_ATTR_ZOOMSLIDER:
120 : {
121 0 : const SfxItemSet* pArgs = rReq.GetArgs();
122 :
123 0 : if (pArgs && pArgs->Count () == 1 )
124 : {
125 0 : SFX_REQUEST_ARG (rReq, pScale, SfxUInt16Item, SID_ATTR_ZOOMSLIDER, false);
126 0 : if (CHECK_RANGE (5, pScale->GetValue (), 3000))
127 : {
128 0 : SetZoom (pScale->GetValue ());
129 :
130 0 : SfxBindings& rBindings = GetViewFrame()->GetBindings();
131 0 : rBindings.Invalidate( SID_ATTR_ZOOM );
132 0 : rBindings.Invalidate( SID_ZOOM_IN );
133 0 : rBindings.Invalidate( SID_ZOOM_OUT );
134 0 : rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
135 :
136 : }
137 : }
138 :
139 0 : Cancel();
140 0 : rReq.Done ();
141 0 : break;
142 : }
143 :
144 : case SID_ZOOM_OUT:
145 : {
146 0 : SetZoom( std::min( (long) ( GetActiveWindow()->GetZoom() * 2 ), (long) GetActiveWindow()->GetMaxZoom() ) );
147 0 : Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
148 0 : GetActiveWindow()->GetOutputSizePixel()) );
149 0 : mpZoomList->InsertZoomRect(aVisAreaWin);
150 0 : Invalidate( SID_ATTR_ZOOM );
151 0 : Invalidate( SID_ZOOM_IN );
152 0 : Invalidate( SID_ATTR_ZOOMSLIDER );
153 0 : Cancel();
154 0 : rReq.Done();
155 : }
156 0 : break;
157 :
158 : case SID_SIZE_REAL:
159 : {
160 0 : SetZoom( 100 );
161 0 : Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
162 0 : GetActiveWindow()->GetOutputSizePixel()) );
163 0 : mpZoomList->InsertZoomRect(aVisAreaWin);
164 0 : Invalidate( SID_ATTR_ZOOM );
165 0 : Invalidate( SID_ATTR_ZOOMSLIDER );
166 0 : Cancel();
167 0 : rReq.Done();
168 : }
169 0 : break;
170 :
171 : case SID_ZOOM_IN:
172 : {
173 0 : SetZoom( std::max( (long) ( GetActiveWindow()->GetZoom() / 2 ), (long) GetActiveWindow()->GetMinZoom() ) );
174 0 : Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
175 0 : GetActiveWindow()->GetOutputSizePixel()) );
176 0 : mpZoomList->InsertZoomRect(aVisAreaWin);
177 0 : Invalidate( SID_ATTR_ZOOM );
178 0 : Invalidate( SID_ZOOM_OUT);
179 0 : Invalidate( SID_ZOOM_IN );
180 0 : Invalidate( SID_ATTR_ZOOMSLIDER );
181 0 : Cancel();
182 0 : rReq.Done();
183 : }
184 0 : break;
185 :
186 : case SID_OUTLINE_COLLAPSE_ALL:
187 : {
188 0 : pOutlinerView->CollapseAll();
189 0 : Cancel();
190 0 : rReq.Done();
191 : }
192 0 : break;
193 :
194 : case SID_OUTLINE_COLLAPSE:
195 : {
196 0 : pOutlinerView->Collapse();
197 0 : Cancel();
198 0 : rReq.Done();
199 : }
200 0 : break;
201 :
202 : case SID_OUTLINE_EXPAND_ALL:
203 : {
204 0 : pOutlinerView->ExpandAll();
205 0 : Cancel();
206 0 : rReq.Done();
207 : }
208 0 : break;
209 :
210 : case SID_OUTLINE_EXPAND:
211 : {
212 0 : pOutlinerView->Expand();
213 0 : Cancel();
214 0 : rReq.Done();
215 : }
216 0 : break;
217 :
218 : case SID_OUTLINE_FORMAT:
219 : {
220 0 : ::Outliner* pOutl = pOutlinerView->GetOutliner();
221 0 : pOutl->SetFlatMode( !pOutl->IsFlatMode() );
222 0 : Invalidate( SID_COLORVIEW );
223 0 : Cancel();
224 0 : rReq.Done();
225 : }
226 0 : break;
227 :
228 : case SID_SELECTALL:
229 : {
230 0 : ::Outliner& rOutl = pOlView->GetOutliner();
231 0 : sal_Int32 nParaCount = rOutl.GetParagraphCount();
232 0 : if (nParaCount > 0)
233 : {
234 0 : pOutlinerView->SelectRange( 0, nParaCount );
235 : }
236 0 : Cancel();
237 : }
238 0 : break;
239 :
240 : case SID_PRESENTATION:
241 : case SID_PRESENTATION_CURRENT_SLIDE:
242 : case SID_REHEARSE_TIMINGS:
243 : {
244 0 : pOlView->PrepareClose();
245 0 : ShowSlideShow(rReq);
246 0 : Cancel();
247 0 : rReq.Done();
248 : }
249 0 : break;
250 :
251 : case SID_COLORVIEW:
252 : {
253 0 : ::Outliner* pOutl = pOutlinerView->GetOutliner();
254 0 : EEControlBits nCntrl = pOutl->GetControlWord();
255 :
256 0 : if ( !(nCntrl & EEControlBits::NOCOLORS) )
257 : {
258 : // color view is enabled: disable
259 0 : pOutl->SetControlWord(nCntrl | EEControlBits::NOCOLORS);
260 : }
261 : else
262 : {
263 : // color view is disabled: enable
264 0 : pOutl->SetControlWord(nCntrl & ~EEControlBits::NOCOLORS);
265 : }
266 :
267 0 : InvalidateWindows();
268 0 : Invalidate( SID_COLORVIEW );
269 0 : Cancel();
270 0 : rReq.Done();
271 : }
272 0 : break;
273 :
274 : case SID_STYLE_EDIT:
275 : case SID_STYLE_UPDATE_BY_EXAMPLE:
276 : {
277 0 : if( rReq.GetArgs() )
278 : {
279 0 : SetCurrentFunction( FuTemplate::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
280 0 : Cancel();
281 : }
282 :
283 0 : rReq.Ignore ();
284 : }
285 0 : break;
286 :
287 : case SID_PRESENTATION_DLG:
288 : {
289 0 : SetCurrentFunction( FuSlideShowDlg::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
290 0 : Cancel();
291 : }
292 0 : break;
293 :
294 : case SID_REMOTE_DLG:
295 : {
296 : #ifdef ENABLE_SDREMOTE
297 0 : SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
298 0 : VclAbstractDialog* pDlg = pFact ? pFact->CreateRemoteDialog(GetActiveWindow()) : 0;
299 0 : if (pDlg)
300 0 : pDlg->Execute();
301 : #endif
302 : }
303 0 : break;
304 :
305 : case SID_CUSTOMSHOW_DLG:
306 : {
307 0 : SetCurrentFunction( FuCustomShowDlg::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
308 0 : Cancel();
309 : }
310 0 : break;
311 :
312 : case SID_PHOTOALBUM:
313 : {
314 0 : SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
315 : boost::scoped_ptr<VclAbstractDialog> pDlg(pFact ? pFact->CreateSdPhotoAlbumDialog(
316 0 : GetActiveWindow(),
317 0 : GetDoc()) : 0);
318 :
319 0 : if (pDlg)
320 : {
321 0 : pDlg->Execute();
322 0 : pDlg.reset();
323 : }
324 0 : Cancel();
325 0 : rReq.Ignore ();
326 : }
327 0 : break;
328 : }
329 :
330 0 : if(HasCurrentFunction())
331 0 : GetCurrentFunction()->Activate();
332 :
333 0 : Invalidate( SID_OUTLINE_COLLAPSE_ALL );
334 0 : Invalidate( SID_OUTLINE_COLLAPSE );
335 0 : Invalidate( SID_OUTLINE_EXPAND_ALL );
336 0 : Invalidate( SID_OUTLINE_EXPAND );
337 :
338 0 : SfxBindings& rBindings = GetViewFrame()->GetBindings();
339 0 : rBindings.Invalidate( SID_OUTLINE_LEFT );
340 0 : rBindings.Invalidate( SID_OUTLINE_RIGHT );
341 0 : rBindings.Invalidate( SID_OUTLINE_UP );
342 0 : rBindings.Invalidate( SID_OUTLINE_DOWN );
343 :
344 0 : Invalidate( SID_OUTLINE_FORMAT );
345 0 : Invalidate( SID_COLORVIEW );
346 0 : Invalidate(SID_CUT);
347 0 : Invalidate(SID_COPY);
348 0 : Invalidate(SID_PASTE);
349 0 : Invalidate(SID_PASTE_UNFORMATTED);
350 0 : }
351 :
352 0 : void OutlineViewShell::ShowSlideShow(SfxRequest& rReq)
353 : {
354 0 : slideshowhelp::ShowSlideShow(rReq, *GetDoc());
355 0 : }
356 :
357 0 : void OutlineViewShell::FuTemporaryModify(SfxRequest &rReq)
358 : {
359 0 : sal_uInt16 nSId = rReq.GetSlot();
360 0 : boost::scoped_ptr< OutlineViewModelChangeGuard > aGuard;
361 0 : if (nSId != SID_OUTLINE_BULLET && nSId != FN_SVX_SET_BULLET && nSId != FN_SVX_SET_NUMBER)
362 : {
363 0 : aGuard.reset( new OutlineViewModelChangeGuard(*pOlView) );
364 : }
365 0 : DeactivateCurrentFunction();
366 :
367 0 : OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
368 : //sal_uInt16 nSId = rReq.GetSlot();
369 :
370 0 : switch( nSId )
371 : {
372 : case SID_HYPERLINK_SETLINK:
373 : {
374 0 : const SfxItemSet* pReqArgs = rReq.GetArgs();
375 :
376 0 : if (pReqArgs)
377 : {
378 : const SvxHyperlinkItem* pHLItem =
379 0 : static_cast<const SvxHyperlinkItem*>( &pReqArgs->Get(SID_HYPERLINK_SETLINK) );
380 :
381 0 : SvxFieldItem aURLItem(SvxURLField(pHLItem->GetURL(),
382 0 : pHLItem->GetName(),
383 0 : SVXURLFORMAT_REPR), EE_FEATURE_FIELD);
384 0 : ESelection aSel( pOutlinerView->GetSelection() );
385 0 : pOutlinerView->InsertField(aURLItem);
386 0 : if ( aSel.nStartPos <= aSel.nEndPos )
387 0 : aSel.nEndPos = aSel.nStartPos + 1;
388 : else
389 0 : aSel.nStartPos = aSel.nEndPos + 1;
390 0 : pOutlinerView->SetSelection( aSel );
391 : }
392 :
393 0 : Cancel();
394 0 : rReq.Ignore ();
395 : }
396 0 : break;
397 :
398 : case FN_INSERT_SOFT_HYPHEN:
399 : case FN_INSERT_HARDHYPHEN:
400 : case FN_INSERT_HARD_SPACE:
401 : case SID_INSERT_RLM :
402 : case SID_INSERT_LRM :
403 : case SID_INSERT_ZWNBSP :
404 : case SID_INSERT_ZWSP:
405 : case SID_CHARMAP:
406 : {
407 0 : SetCurrentFunction( FuBullet::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
408 0 : Cancel();
409 : }
410 0 : break;
411 :
412 : case SID_OUTLINE_BULLET:
413 : case FN_SVX_SET_BULLET:
414 : case FN_SVX_SET_NUMBER:
415 : {
416 0 : SetCurrentFunction( FuOutlineBullet::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
417 0 : Cancel();
418 : }
419 0 : break;
420 :
421 : case SID_THESAURUS:
422 : {
423 0 : SetCurrentFunction( FuThesaurus::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
424 0 : Cancel();
425 0 : rReq.Ignore ();
426 : }
427 0 : break;
428 :
429 : case SID_CHAR_DLG_EFFECT:
430 : case SID_CHAR_DLG:
431 : {
432 0 : SetCurrentFunction( FuChar::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
433 0 : Cancel();
434 : }
435 0 : break;
436 :
437 : case SID_INSERTFILE:
438 : {
439 0 : SetCurrentFunction( FuInsertFile::Create(this, GetActiveWindow(), pOlView, GetDoc(), rReq) );
440 0 : Cancel();
441 : }
442 0 : break;
443 :
444 : case SID_PRESENTATIONOBJECT:
445 : {
446 0 : SetCurrentFunction( FuPresentationObjects::Create(this, GetActiveWindow(), pOlView, GetDoc(), rReq) );
447 0 : Cancel();
448 : }
449 0 : break;
450 :
451 : case SID_SET_DEFAULT:
452 : {
453 0 : pOutlinerView->RemoveAttribs(true); // sal_True = also paragraph attributes
454 0 : Cancel();
455 0 : rReq.Done();
456 : }
457 0 : break;
458 :
459 : case SID_SUMMARY_PAGE:
460 : {
461 0 : pOlView->SetSelectedPages();
462 0 : SetCurrentFunction( FuSummaryPage::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
463 0 : pOlView->GetOutliner().Clear();
464 0 : pOlView->FillOutliner();
465 0 : pOlView->GetActualPage();
466 0 : Cancel();
467 : }
468 0 : break;
469 :
470 : case SID_EXPAND_PAGE:
471 : {
472 0 : pOlView->SetSelectedPages();
473 0 : SetCurrentFunction( FuExpandPage::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
474 0 : pOlView->GetOutliner().Clear();
475 0 : pOlView->FillOutliner();
476 0 : pOlView->GetActualPage();
477 0 : Cancel();
478 : }
479 0 : break;
480 :
481 : case SID_INSERT_FLD_DATE_FIX:
482 : case SID_INSERT_FLD_DATE_VAR:
483 : case SID_INSERT_FLD_TIME_FIX:
484 : case SID_INSERT_FLD_TIME_VAR:
485 : case SID_INSERT_FLD_AUTHOR:
486 : case SID_INSERT_FLD_PAGE:
487 : case SID_INSERT_FLD_PAGE_TITLE:
488 : case SID_INSERT_FLD_PAGES:
489 : case SID_INSERT_FLD_FILE:
490 : {
491 0 : boost::scoped_ptr<SvxFieldItem> pFieldItem;
492 :
493 0 : switch( nSId )
494 : {
495 : case SID_INSERT_FLD_DATE_FIX:
496 : pFieldItem.reset(new SvxFieldItem(
497 0 : SvxDateField( Date( Date::SYSTEM ), SVXDATETYPE_FIX ), EE_FEATURE_FIELD ));
498 0 : break;
499 :
500 : case SID_INSERT_FLD_DATE_VAR:
501 0 : pFieldItem.reset(new SvxFieldItem( SvxDateField(), EE_FEATURE_FIELD ));
502 0 : break;
503 :
504 : case SID_INSERT_FLD_TIME_FIX:
505 : pFieldItem.reset(new SvxFieldItem(
506 0 : SvxExtTimeField( ::tools::Time( ::tools::Time::SYSTEM ), SVXTIMETYPE_FIX ), EE_FEATURE_FIELD ));
507 0 : break;
508 :
509 : case SID_INSERT_FLD_TIME_VAR:
510 0 : pFieldItem.reset(new SvxFieldItem( SvxExtTimeField(), EE_FEATURE_FIELD ));
511 0 : break;
512 :
513 : case SID_INSERT_FLD_AUTHOR:
514 : {
515 0 : SvtUserOptions aUserOptions;
516 : pFieldItem.reset(new SvxFieldItem(
517 : SvxAuthorField(
518 : aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() )
519 0 : , EE_FEATURE_FIELD ));
520 : }
521 0 : break;
522 :
523 : case SID_INSERT_FLD_PAGE:
524 0 : pFieldItem.reset(new SvxFieldItem( SvxPageField(), EE_FEATURE_FIELD ));
525 0 : break;
526 :
527 : case SID_INSERT_FLD_PAGE_TITLE:
528 0 : pFieldItem.reset(new SvxFieldItem( SvxPageTitleField(), EE_FEATURE_FIELD));
529 0 : break;
530 :
531 : case SID_INSERT_FLD_PAGES:
532 0 : pFieldItem.reset(new SvxFieldItem( SvxPagesField(), EE_FEATURE_FIELD ));
533 0 : break;
534 :
535 : case SID_INSERT_FLD_FILE:
536 : {
537 0 : OUString aName;
538 0 : if( GetDocSh()->HasName() )
539 0 : aName = GetDocSh()->GetMedium()->GetName();
540 : //else
541 : // aName = GetDocSh()->GetName();
542 0 : pFieldItem.reset(new SvxFieldItem( SvxExtFileField( aName ), EE_FEATURE_FIELD ));
543 : }
544 0 : break;
545 : }
546 :
547 0 : const SvxFieldItem* pOldFldItem = pOutlinerView->GetFieldAtSelection();
548 :
549 0 : if( pOldFldItem && ( pOldFldItem->GetField()->ISA( SvxURLField ) ||
550 0 : pOldFldItem->GetField()->ISA( SvxDateField ) ||
551 0 : pOldFldItem->GetField()->ISA( SvxTimeField ) ||
552 0 : pOldFldItem->GetField()->ISA( SvxExtTimeField ) ||
553 0 : pOldFldItem->GetField()->ISA( SvxExtFileField ) ||
554 0 : pOldFldItem->GetField()->ISA( SvxAuthorField ) ||
555 0 : pOldFldItem->GetField()->ISA( SvxPageField ) ||
556 0 : pOldFldItem->GetField()->ISA( SvxPagesField )) )
557 : {
558 : // select field, so it gets deleted on Insert
559 0 : ESelection aSel = pOutlinerView->GetSelection();
560 0 : if( aSel.nStartPos == aSel.nEndPos )
561 0 : aSel.nEndPos++;
562 0 : pOutlinerView->SetSelection( aSel );
563 : }
564 :
565 0 : if( pFieldItem )
566 0 : pOutlinerView->InsertField( *pFieldItem );
567 :
568 0 : pFieldItem.reset();
569 :
570 0 : Cancel();
571 0 : rReq.Ignore ();
572 : }
573 0 : break;
574 :
575 : case SID_MODIFY_FIELD:
576 : {
577 0 : const SvxFieldItem* pFldItem = pOutlinerView->GetFieldAtSelection();
578 :
579 0 : if( pFldItem && (pFldItem->GetField()->ISA( SvxDateField ) ||
580 0 : pFldItem->GetField()->ISA( SvxAuthorField ) ||
581 0 : pFldItem->GetField()->ISA( SvxExtFileField ) ||
582 0 : pFldItem->GetField()->ISA( SvxExtTimeField ) ) )
583 : {
584 : // Dialog...
585 0 : SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
586 0 : boost::scoped_ptr<AbstractSdModifyFieldDlg> pDlg(pFact ? pFact->CreateSdModifyFieldDlg(GetActiveWindow(), pFldItem->GetField(), pOutlinerView->GetAttribs() ) : 0);
587 0 : if( pDlg && (pDlg->Execute() == RET_OK) )
588 : {
589 0 : boost::scoped_ptr<SvxFieldData> pField(pDlg->GetField());
590 0 : if( pField )
591 : {
592 0 : SvxFieldItem aFieldItem( *pField, EE_FEATURE_FIELD );
593 : //pOLV->DeleteSelected(); <-- unfortunately missing!
594 : // select field, so it gets deleted on Insert
595 0 : ESelection aSel = pOutlinerView->GetSelection();
596 0 : bool bSel = true;
597 0 : if( aSel.nStartPos == aSel.nEndPos )
598 : {
599 0 : bSel = false;
600 0 : aSel.nEndPos++;
601 : }
602 0 : pOutlinerView->SetSelection( aSel );
603 :
604 0 : pOutlinerView->InsertField( aFieldItem );
605 :
606 : // reset selection to original state
607 0 : if( !bSel )
608 0 : aSel.nEndPos--;
609 0 : pOutlinerView->SetSelection( aSel );
610 :
611 0 : pField.reset();
612 : }
613 :
614 0 : SfxItemSet aSet( pDlg->GetItemSet() );
615 0 : if( aSet.Count() )
616 : {
617 0 : pOutlinerView->SetAttribs( aSet );
618 :
619 0 : ::Outliner* pOutliner = pOutlinerView->GetOutliner();
620 0 : if( pOutliner )
621 0 : pOutliner->UpdateFields();
622 0 : }
623 0 : }
624 : }
625 :
626 0 : Cancel();
627 0 : rReq.Ignore ();
628 : }
629 0 : break;
630 : }
631 :
632 0 : if(HasCurrentFunction())
633 0 : GetCurrentFunction()->Activate();
634 :
635 0 : Invalidate( SID_OUTLINE_COLLAPSE_ALL );
636 0 : Invalidate( SID_OUTLINE_COLLAPSE );
637 0 : Invalidate( SID_OUTLINE_EXPAND_ALL );
638 0 : Invalidate( SID_OUTLINE_EXPAND );
639 :
640 0 : SfxBindings& rBindings = GetViewFrame()->GetBindings();
641 0 : rBindings.Invalidate( SID_OUTLINE_LEFT );
642 0 : rBindings.Invalidate( SID_OUTLINE_RIGHT );
643 0 : rBindings.Invalidate( SID_OUTLINE_UP );
644 0 : rBindings.Invalidate( SID_OUTLINE_DOWN );
645 :
646 0 : Invalidate( SID_OUTLINE_FORMAT );
647 0 : Invalidate( SID_COLORVIEW );
648 0 : Invalidate(SID_CUT);
649 0 : Invalidate(SID_COPY);
650 0 : Invalidate(SID_PASTE);
651 0 : Invalidate(SID_PASTE_UNFORMATTED);
652 0 : }
653 :
654 66 : } // end of namespace sd
655 :
656 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|