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/lang/XMultiServiceFactory.hpp>
21 : #include <com/sun/star/lang/Locale.hpp>
22 : #include <com/sun/star/linguistic2/XThesaurus.hpp>
23 : #include <svx/fmglob.hxx>
24 : #include <svx/globl3d.hxx>
25 : #include <svx/svdouno.hxx>
26 : #include <editeng/eeitem.hxx>
27 : #include <editeng/flditem.hxx>
28 : #include <editeng/outlobj.hxx>
29 : #include <officecfg/Office/Common.hxx>
30 : #include <officecfg/Office/Impress.hxx>
31 : #include <svx/svxids.hrc>
32 : #include <svx/svdpagv.hxx>
33 : #include <svx/clipfmtitem.hxx>
34 : #include <svx/fmshell.hxx>
35 : #include <svl/eitem.hxx>
36 : #include <svl/aeitem.hxx>
37 : #include <svl/stritem.hxx>
38 : #include <svl/visitem.hxx>
39 : #include <svl/whiter.hxx>
40 : #include <sfx2/dispatch.hxx>
41 : #include <svx/svdograf.hxx>
42 : #include <editeng/unolingu.hxx>
43 : #include <svx/extrusionbar.hxx>
44 : #include <svx/fontworkbar.hxx>
45 :
46 : // #UndoRedo#
47 : #include <svl/slstitm.hxx>
48 : #include <sfx2/app.hxx>
49 : #include <svtools/insdlg.hxx>
50 : #include <unotools/moduleoptions.hxx>
51 : #include <svl/languageoptions.hxx>
52 : #include <comphelper/processfactory.hxx>
53 : #include <sfx2/request.hxx>
54 :
55 : #include <svx/pfiledlg.hxx>
56 : #include <svx/grafctrl.hxx>
57 : #include <svtools/cliplistener.hxx>
58 : #include <sfx2/viewfrm.hxx>
59 :
60 : #include "app.hrc"
61 : #include "glob.hrc"
62 : #include "res_bmp.hrc"
63 : #include "PresentationViewShell.hxx"
64 :
65 : #include "Outliner.hxx"
66 : #include "drawdoc.hxx"
67 : #include "sdresid.hxx"
68 : #include "sdpage.hxx"
69 : #include "Client.hxx"
70 : #include "DrawDocShell.hxx"
71 : #include "zoomlist.hxx"
72 : #include "slideshow.hxx"
73 : #include "drawview.hxx"
74 : #include "ViewShellBase.hxx"
75 : #include "ViewShellManager.hxx"
76 : #include "LayerTabBar.hxx"
77 : #include "fupoor.hxx"
78 : #include "Window.hxx"
79 : #include "fuediglu.hxx"
80 : #include "fubullet.hxx"
81 : #include "fuformatpaintbrush.hxx"
82 :
83 : using namespace ::com::sun::star;
84 : using namespace ::com::sun::star::uno;
85 : using namespace ::com::sun::star::lang;
86 : using namespace ::com::sun::star::linguistic2;
87 :
88 : /** Create a list of clipboard formats that are supported both from the
89 : current clipboard content and the DrawViewShell.
90 : The list is stored in a new instance of SvxClipboardFmtItem.
91 : */
92 : SAL_WNODEPRECATED_DECLARATIONS_PUSH
93 0 : ::std::auto_ptr<SvxClipboardFmtItem> GetSupportedClipboardFormats (
94 : TransferableDataHelper& rDataHelper)
95 : {
96 : ::std::auto_ptr<SvxClipboardFmtItem> pResult (
97 0 : new SvxClipboardFmtItem(SID_CLIPBOARD_FORMAT_ITEMS));
98 :
99 0 : sal_uInt32 nFormatCount (rDataHelper.GetFormatCount());
100 0 : for (sal_uInt32 i=0; i<nFormatCount; i++)
101 : {
102 0 : const SotFormatStringId nTestFormat = rDataHelper.GetFormat(i);
103 :
104 : // Check if the current format is the same as one that has already
105 : // been handled.
106 0 : bool bDuplicate (false);
107 0 : for (sal_uInt32 j=0; j<i; j++)
108 : {
109 0 : if (nTestFormat == rDataHelper.GetFormat(j))
110 : {
111 0 : bDuplicate = true;
112 0 : break;
113 : }
114 : }
115 :
116 : // Look up the format among those that are supported by the
117 : // DrawViewShell.
118 0 : if ( ! bDuplicate)
119 : {
120 0 : switch (nTestFormat)
121 : {
122 : case SOT_FORMATSTR_ID_EMBED_SOURCE:
123 : {
124 0 : String sName;
125 :
126 0 : TransferableObjectDescriptor aDescriptor;
127 0 : if (rDataHelper.GetTransferableObjectDescriptor(
128 0 : SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aDescriptor))
129 : {
130 0 : sName = aDescriptor.maTypeName;
131 : }
132 0 : if (sName.Len() > 0)
133 0 : pResult->AddClipbrdFormat(nTestFormat, sName);
134 : else
135 0 : pResult->AddClipbrdFormat(nTestFormat);
136 :
137 0 : break;
138 : }
139 :
140 : case SOT_FORMATSTR_ID_LINK_SOURCE:
141 : case SOT_FORMATSTR_ID_DRAWING:
142 : case SOT_FORMATSTR_ID_SVXB:
143 : case FORMAT_GDIMETAFILE:
144 : case FORMAT_BITMAP:
145 : case SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK:
146 : case FORMAT_STRING:
147 : case SOT_FORMATSTR_ID_HTML:
148 : case FORMAT_RTF:
149 : case SOT_FORMATSTR_ID_EDITENGINE:
150 0 : pResult->AddClipbrdFormat(nTestFormat);
151 0 : break;
152 : }
153 : }
154 : }
155 :
156 : // Check some OLE formats whose names are handled differently.
157 0 : SotFormatStringId nFormat (SOT_FORMATSTR_ID_EMBED_SOURCE_OLE);
158 0 : bool bHasFormat (rDataHelper.HasFormat(nFormat));
159 0 : if ( ! bHasFormat)
160 : {
161 0 : bHasFormat = rDataHelper.HasFormat(nFormat);
162 : }
163 0 : if (bHasFormat)
164 : {
165 0 : String sName;
166 0 : String sSource;
167 0 : if (SvPasteObjectHelper::GetEmbeddedName (rDataHelper, sName, sSource, nFormat))
168 0 : pResult->AddClipbrdFormat (nFormat, sName);
169 : }
170 :
171 0 : return pResult;
172 : }
173 : SAL_WNODEPRECATED_DECLARATIONS_POP
174 :
175 : namespace sd {
176 :
177 0 : IMPL_LINK( DrawViewShell, ClipboardChanged, TransferableDataHelper*, pDataHelper )
178 : {
179 0 : if ( pDataHelper )
180 : {
181 0 : mbPastePossible = ( pDataHelper->GetFormatCount() != 0 );
182 :
183 : // Update the list of supported clipboard formats according to the
184 : // new clipboard content.
185 : // There are some stack traces that indicate the possibility of the
186 : // DrawViewShell destructor called during the call to
187 : // GetSupportedClipboardFormats(). If that really has happened then
188 : // exit immediately.
189 : TransferableDataHelper aDataHelper (
190 0 : TransferableDataHelper::CreateFromSystemClipboard(GetActiveWindow()));
191 : SAL_WNODEPRECATED_DECLARATIONS_PUSH
192 0 : ::std::auto_ptr<SvxClipboardFmtItem> pFormats (GetSupportedClipboardFormats(aDataHelper));
193 : SAL_WNODEPRECATED_DECLARATIONS_POP
194 0 : if (mpDrawView == NULL)
195 0 : return 0;
196 0 : mpCurrentClipboardFormats = pFormats;
197 :
198 0 : SfxBindings& rBindings = GetViewFrame()->GetBindings();
199 0 : rBindings.Invalidate( SID_PASTE );
200 0 : rBindings.Invalidate( SID_PASTE_SPECIAL );
201 0 : rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
202 : }
203 0 : return 0;
204 : }
205 :
206 0 : void DrawViewShell::GetDrawAttrState(SfxItemSet& rSet)
207 : {
208 0 : SfxItemSet aSet( mpDrawView->GetGeoAttrFromMarked() );
209 0 : rSet.Put(aSet,sal_False);
210 0 : }
211 :
212 3280 : void DrawViewShell::GetMenuState( SfxItemSet &rSet )
213 : {
214 3280 : if (mpDrawView == NULL)
215 : {
216 : // This assertion and return are here to prevent crashes.
217 : DBG_ASSERT(mpDrawView!=NULL, "Please report this assertion to the Impress team.");
218 0 : return;
219 : }
220 :
221 3280 : ViewShell::GetMenuState(rSet);
222 3280 : sal_Bool bDisableVerticalText = !SvtLanguageOptions().IsVerticalTextEnabled();
223 :
224 3280 : if ( bDisableVerticalText )
225 : {
226 3280 : rSet.DisableItem( SID_DRAW_FONTWORK_VERTICAL );
227 3280 : rSet.DisableItem( SID_DRAW_CAPTION_VERTICAL );
228 3280 : rSet.DisableItem( SID_TEXT_FITTOSIZE_VERTICAL );
229 3280 : rSet.DisableItem( SID_DRAW_TEXT_VERTICAL );
230 : }
231 :
232 3280 : bool bConvertToPathPossible = mpDrawView->IsConvertToPathObjPossible(sal_False);
233 :
234 3280 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
235 3280 : const sal_uLong nMarkCount = rMarkList.GetMarkCount();
236 :
237 : //format paintbrush
238 3280 : FuFormatPaintBrush::GetMenuState( *this, rSet );
239 :
240 : // State of SfxChild-Windows (Animator, Fontwork etc.)
241 3280 : SetChildWindowState( rSet );
242 :
243 : // map images of toolboxes (only zoom)
244 3280 : UpdateToolboxImages( rSet, sal_False );
245 :
246 3280 : if(HasCurrentFunction())
247 : {
248 3280 : sal_uInt16 nSId = GetCurrentFunction()->GetSlotID();
249 :
250 3280 : rSet.Put( SfxBoolItem( nSId, sal_True ) );
251 :
252 : // will cause a uncheck of a simulated slot
253 3280 : sal_uInt16 nId = GetIdBySubId( nSId );
254 :
255 : // map images of the toolboxes
256 3280 : UpdateToolboxImages( rSet );
257 :
258 3280 : if( nId != SID_ZOOM_TOOLBOX &&
259 3280 : nSId != SID_DRAWTBX_INSERT &&
260 3280 : nSId != SID_POSITION &&
261 : nSId != SID_OBJECT_ALIGN )
262 : {
263 3280 : if( nId != SID_OBJECT_CHOOSE_MODE )
264 3280 : rSet.Put( TbxImageItem( SID_OBJECT_CHOOSE_MODE, 0 ) );
265 3280 : if( nId != SID_DRAWTBX_TEXT )
266 3280 : rSet.Put( TbxImageItem( SID_DRAWTBX_TEXT, 0 ) );
267 3280 : if( nId != SID_DRAWTBX_RECTANGLES )
268 3280 : rSet.Put( TbxImageItem( SID_DRAWTBX_RECTANGLES, 0 ) );
269 3280 : if( nId != SID_DRAWTBX_ELLIPSES )
270 3280 : rSet.Put( TbxImageItem( SID_DRAWTBX_ELLIPSES, 0 ) );
271 3280 : if( nId != SID_DRAWTBX_LINES )
272 3280 : rSet.Put( TbxImageItem( SID_DRAWTBX_LINES, 0 ) );
273 3280 : if( nId != SID_DRAWTBX_ARROWS )
274 3280 : rSet.Put( TbxImageItem( SID_DRAWTBX_ARROWS, 0 ) );
275 3280 : if( nId != SID_DRAWTBX_3D_OBJECTS )
276 3280 : rSet.Put( TbxImageItem( SID_DRAWTBX_3D_OBJECTS, 0 ) );
277 3280 : if( nId != SID_DRAWTBX_CONNECTORS )
278 3280 : rSet.Put( TbxImageItem( SID_DRAWTBX_CONNECTORS, 0 ) );
279 : }
280 : }
281 :
282 3280 : SdrPageView* pPageView = mpDrawView->GetSdrPageView();
283 :
284 3280 : GetMenuStateSel(rSet);
285 :
286 3280 : if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_ASSIGN_LAYOUT))
287 : {
288 17 : bool bDisable = true;
289 17 : if( pPageView )
290 : {
291 17 : SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
292 :
293 17 : if( pPage && !pPage->IsMasterPage() )
294 : {
295 17 : rSet.Put( SfxUInt32Item( SID_ASSIGN_LAYOUT, static_cast< sal_uInt32 >(pPage->GetAutoLayout()) ) );
296 17 : bDisable = false;
297 : }
298 : }
299 :
300 17 : if(bDisable)
301 : {
302 0 : rSet.DisableItem(SID_ASSIGN_LAYOUT);
303 : }
304 : }
305 :
306 3280 : if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_EXPAND_PAGE))
307 : {
308 17 : bool bDisable = true;
309 17 : if( pPageView )
310 : {
311 17 : SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
312 :
313 17 : if( pPage && (pPage->GetPageKind() == PK_STANDARD) && !pPage->IsMasterPage() )
314 : {
315 17 : SdrObject* pObj = pPage->GetPresObj(PRESOBJ_OUTLINE);
316 :
317 17 : if (pObj!=NULL )
318 : {
319 0 : if( !pObj->IsEmptyPresObj() )
320 : {
321 0 : bDisable = false;
322 : }
323 : else
324 : {
325 : // check if the object is in edit, than its temporarely not empty
326 0 : SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj );
327 0 : if( pTextObj )
328 : {
329 0 : OutlinerParaObject* pParaObj = pTextObj->GetEditOutlinerParaObject();
330 0 : if( pParaObj )
331 : {
332 0 : delete pParaObj;
333 0 : bDisable = false;
334 : }
335 : }
336 : }
337 : }
338 : }
339 : }
340 :
341 17 : if(bDisable)
342 : {
343 17 : rSet.DisableItem(SID_EXPAND_PAGE);
344 : }
345 : }
346 :
347 3280 : if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_SUMMARY_PAGE))
348 : {
349 0 : bool bDisable = true;
350 0 : if( pPageView )
351 : {
352 0 : SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
353 :
354 0 : if( pPage && (pPage->GetPageKind() == PK_STANDARD) && !pPage->IsMasterPage() )
355 : {
356 0 : SdrObject* pObj = pPage->GetPresObj(PRESOBJ_TITLE);
357 :
358 0 : if(pObj && !pObj->IsEmptyPresObj())
359 : {
360 0 : bDisable = false;
361 : }
362 : }
363 : }
364 :
365 0 : if(bDisable)
366 : {
367 0 : rSet.DisableItem(SID_SUMMARY_PAGE);
368 : }
369 : }
370 :
371 3280 : if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_ASSIGN_LAYOUT))
372 : {
373 0 : bool bDisable = true;
374 0 : if( pPageView )
375 : {
376 0 : SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
377 :
378 0 : if( pPage && !pPage->IsMasterPage() )
379 : {
380 0 : rSet.Put( SfxUInt32Item(SID_ASSIGN_LAYOUT, pPage->GetAutoLayout()) );
381 0 : bDisable = false;
382 : }
383 : }
384 :
385 0 : if(bDisable)
386 : {
387 0 : rSet.DisableItem(SID_ASSIGN_LAYOUT);
388 : }
389 : }
390 :
391 : // is it possible to start the presentation?
392 6543 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PRESENTATION ) ||
393 3263 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_REHEARSE_TIMINGS ) )
394 : {
395 17 : sal_Bool bDisable = sal_True;
396 17 : sal_uInt16 nCount = GetDoc()->GetSdPageCount( PK_STANDARD );
397 :
398 34 : for( sal_uInt16 i = 0; i < nCount && bDisable; i++ )
399 : {
400 17 : SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
401 :
402 17 : if( !pPage->IsExcluded() )
403 17 : bDisable = sal_False;
404 : }
405 :
406 17 : if( bDisable || GetDocSh()->IsPreview())
407 : {
408 0 : rSet.DisableItem( SID_PRESENTATION );
409 0 : rSet.DisableItem( SID_REHEARSE_TIMINGS );
410 : }
411 : }
412 :
413 : // glue points
414 9731 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_EDITMODE ) ||
415 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_INSERT_POINT ) ||
416 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_PERCENT ) ||
417 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR ) ||
418 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_LEFT ) ||
419 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_RIGHT ) ||
420 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_TOP ) ||
421 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_BOTTOM ) ||
422 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_HORZALIGN_CENTER ) ||
423 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_HORZALIGN_LEFT ) ||
424 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_HORZALIGN_RIGHT ) ||
425 6342 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_VERTALIGN_CENTER ) ||
426 9622 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_VERTALIGN_TOP ) ||
427 3171 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_VERTALIGN_BOTTOM ) )
428 : {
429 : // percent
430 109 : TRISTATE eState = mpDrawView->IsMarkedGluePointsPercent();
431 109 : if( eState == STATE_DONTKNOW )
432 0 : rSet.InvalidateItem( SID_GLUE_PERCENT );
433 : else
434 109 : rSet.Put( SfxBoolItem( SID_GLUE_PERCENT, eState == STATE_CHECK ) );
435 :
436 : // alignment has no effect by percent
437 109 : if( eState == STATE_CHECK )
438 : {
439 109 : rSet.DisableItem( SID_GLUE_HORZALIGN_CENTER );
440 109 : rSet.DisableItem( SID_GLUE_HORZALIGN_LEFT );
441 109 : rSet.DisableItem( SID_GLUE_HORZALIGN_RIGHT );
442 109 : rSet.DisableItem( SID_GLUE_VERTALIGN_CENTER );
443 109 : rSet.DisableItem( SID_GLUE_VERTALIGN_TOP );
444 109 : rSet.DisableItem( SID_GLUE_VERTALIGN_BOTTOM );
445 : }
446 : else
447 : {
448 : // horizontal alignment
449 0 : sal_uInt16 nHorz = mpDrawView->GetMarkedGluePointsAlign( sal_False );
450 0 : rSet.Put( SfxBoolItem( SID_GLUE_HORZALIGN_CENTER, nHorz == SDRHORZALIGN_CENTER ) );
451 0 : rSet.Put( SfxBoolItem( SID_GLUE_HORZALIGN_LEFT, nHorz == SDRHORZALIGN_LEFT ) );
452 0 : rSet.Put( SfxBoolItem( SID_GLUE_HORZALIGN_RIGHT, nHorz == SDRHORZALIGN_RIGHT ) );
453 : // vertical alignment
454 0 : sal_uInt16 nVert = mpDrawView->GetMarkedGluePointsAlign( sal_True );
455 0 : rSet.Put( SfxBoolItem( SID_GLUE_VERTALIGN_CENTER, nVert == SDRVERTALIGN_CENTER ) );
456 0 : rSet.Put( SfxBoolItem( SID_GLUE_VERTALIGN_TOP, nVert == SDRVERTALIGN_TOP ) );
457 0 : rSet.Put( SfxBoolItem( SID_GLUE_VERTALIGN_BOTTOM, nVert == SDRVERTALIGN_BOTTOM ) );
458 : }
459 :
460 : // insert point
461 109 : rSet.Put( SfxBoolItem( SID_GLUE_INSERT_POINT, mpDrawView->IsInsGluePointMode() ) );
462 :
463 : // Escape direction
464 : // left
465 109 : eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_LEFT );
466 109 : if( eState == STATE_DONTKNOW )
467 0 : rSet.InvalidateItem( SID_GLUE_ESCDIR_LEFT );
468 : else
469 109 : rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_LEFT, eState == STATE_CHECK ) );
470 : // right
471 109 : eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_RIGHT );
472 109 : if( eState == STATE_DONTKNOW )
473 0 : rSet.InvalidateItem( SID_GLUE_ESCDIR_RIGHT );
474 : else
475 109 : rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_RIGHT, eState == STATE_CHECK ) );
476 : // top
477 109 : eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_TOP );
478 109 : if( eState == STATE_DONTKNOW )
479 0 : rSet.InvalidateItem( SID_GLUE_ESCDIR_TOP );
480 : else
481 109 : rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_TOP, eState == STATE_CHECK ) );
482 : // bottom
483 109 : eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_BOTTOM );
484 109 : if( eState == STATE_DONTKNOW )
485 0 : rSet.InvalidateItem( SID_GLUE_ESCDIR_BOTTOM );
486 : else
487 109 : rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_BOTTOM, eState == STATE_CHECK ) );
488 : }
489 :
490 6560 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GRID_FRONT ) ||
491 3280 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_HELPLINES_FRONT ) )
492 : {
493 0 : rSet.Put( SfxBoolItem( SID_GRID_FRONT, mpDrawView->IsGridFront() ) );
494 0 : rSet.Put( SfxBoolItem( SID_HELPLINES_FRONT, mpDrawView->IsHlplFront() ) );
495 : }
496 :
497 3280 : if (!mpDrawView->IsFrameDragSingles())
498 0 : rSet.Put(SfxBoolItem(SID_BEZIER_EDIT, sal_True));
499 : else
500 3280 : rSet.Put(SfxBoolItem(SID_BEZIER_EDIT, sal_False));
501 :
502 3280 : if(dynamic_cast<FuEditGluePoints*>( GetCurrentFunction().get()))
503 0 : rSet.Put(SfxBoolItem(SID_GLUE_EDITMODE, sal_True));
504 : else
505 3280 : rSet.Put(SfxBoolItem(SID_GLUE_EDITMODE, sal_False));
506 :
507 3280 : if( !mpDrawView->IsMirrorAllowed( sal_True, sal_True ) )
508 : {
509 3279 : rSet.DisableItem( SID_HORIZONTAL );
510 3279 : rSet.DisableItem( SID_VERTICAL );
511 3279 : rSet.DisableItem( SID_FLIP_HORIZONTAL );
512 3279 : rSet.DisableItem( SID_FLIP_VERTICAL );
513 : }
514 :
515 3280 : if( !mpDrawView->IsMirrorAllowed() )
516 : {
517 3279 : rSet.DisableItem( SID_OBJECT_MIRROR );
518 : // rSet.DisableItem( SID_CONVERT_TO_3D_LATHE );
519 : // rSet.DisableItem( SID_CONVERT_TO_3D_LATHE_FAST );
520 : }
521 :
522 : // interactive transparence control
523 3280 : if(!mpDrawView->IsTransparenceAllowed())
524 : {
525 3279 : rSet.DisableItem( SID_OBJECT_TRANSPARENCE );
526 : }
527 :
528 : // interactive gradient control
529 3280 : if(!mpDrawView->IsGradientAllowed())
530 : {
531 3280 : rSet.DisableItem( SID_OBJECT_GRADIENT );
532 : }
533 :
534 : // disable morphing if necessary
535 3280 : if ( !mpDrawView->IsMorphingAllowed() )
536 3280 : rSet.DisableItem( SID_POLYGON_MORPHING );
537 :
538 : // disable vectorizing if necessary
539 3280 : if ( !mpDrawView->IsVectorizeAllowed() )
540 3280 : rSet.DisableItem( SID_VECTORIZE );
541 :
542 3280 : if( !mpDrawView->IsReverseOrderPossible() )
543 : {
544 3280 : rSet.DisableItem( SID_REVERSE_ORDER );
545 : }
546 :
547 6559 : if ( !bConvertToPathPossible &&
548 3279 : !mpDrawView->IsCrookAllowed( mpDrawView->IsCrookNoContortion() ) )
549 : {
550 : // implicit transformation into curve not possible
551 3279 : rSet.DisableItem(SID_OBJECT_CROOK_ROTATE);
552 3279 : rSet.DisableItem(SID_OBJECT_CROOK_SLANT);
553 3279 : rSet.DisableItem(SID_OBJECT_CROOK_STRETCH);
554 : }
555 :
556 3280 : if ( !mpDrawView->IsGroupEntered() )
557 : {
558 3280 : rSet.DisableItem( SID_LEAVE_GROUP );
559 3280 : rSet.Put( SfxBoolItem( SID_LEAVE_ALL_GROUPS, sal_False ) );
560 3280 : rSet.ClearItem( SID_LEAVE_ALL_GROUPS );
561 3280 : rSet.DisableItem( SID_LEAVE_ALL_GROUPS );
562 : }
563 : else
564 0 : rSet.Put( SfxBoolItem( SID_LEAVE_ALL_GROUPS, sal_True ) );
565 :
566 3280 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_THESAURUS ) )
567 : {
568 0 : if ( !mpDrawView->IsTextEdit() )
569 : {
570 0 : rSet.DisableItem( SID_THESAURUS );
571 : }
572 : else
573 : {
574 0 : LanguageType eLang = GetDoc()->GetLanguage( EE_CHAR_LANGUAGE );
575 0 : Reference< XThesaurus > xThesaurus( LinguMgr::GetThesaurus() );
576 :
577 0 : if (!xThesaurus.is() || eLang == LANGUAGE_NONE || !xThesaurus->hasLocale( LanguageTag( eLang).getLocale()) )
578 0 : rSet.DisableItem( SID_THESAURUS );
579 : }
580 : }
581 :
582 3280 : if ( !mpDrawView->IsTextEdit() )
583 : {
584 3280 : rSet.DisableItem( SID_THESAURUS );
585 : }
586 :
587 6560 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SELECTALL ) ||
588 3280 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SIZE_ALL ) )
589 : {
590 0 : if( pPageView && pPageView->GetObjList()->GetObjCount() == 0 )
591 : {
592 : // should be disabled if there is no object on the draw area:
593 0 : rSet.DisableItem( SID_SELECTALL );
594 0 : rSet.DisableItem( SID_SIZE_ALL );
595 : }
596 : }
597 :
598 3280 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CONTEXT ) )
599 139 : rSet.Put( SfxStringItem( SID_CONTEXT, mpDrawView->GetStatusText() ) );
600 :
601 : // clipboard (paste)
602 9702 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PASTE ) ||
603 6422 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PASTE_SPECIAL ) ||
604 3142 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CLIPBOARD_FORMAT_ITEMS ) )
605 : {
606 203 : if ( !mpClipEvtLstnr )
607 : {
608 : // avoid clipboard initialization for
609 : // read-only presentation views (workaround for NT4.0
610 : // clipboard prob...)
611 65 : if( !ISA(PresentationViewShell) )
612 : {
613 : // create listener
614 65 : mpClipEvtLstnr = new TransferableClipboardListener( LINK( this, DrawViewShell, ClipboardChanged ) );
615 65 : mpClipEvtLstnr->acquire();
616 65 : mpClipEvtLstnr->AddRemoveListener( GetActiveWindow(), sal_True );
617 :
618 : // get initial state
619 65 : TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) );
620 65 : mbPastePossible = ( aDataHelper.GetFormatCount() != 0 );
621 : }
622 : else
623 0 : mbPastePossible = sal_False;
624 : }
625 :
626 203 : if( !mbPastePossible )
627 : {
628 203 : rSet.DisableItem( SID_PASTE );
629 203 : rSet.DisableItem( SID_PASTE_SPECIAL );
630 203 : rSet.DisableItem( SID_CLIPBOARD_FORMAT_ITEMS );
631 : }
632 0 : else if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CLIPBOARD_FORMAT_ITEMS ) )
633 : {
634 0 : if (mpCurrentClipboardFormats.get() != NULL)
635 0 : rSet.Put(*mpCurrentClipboardFormats);
636 : }
637 : }
638 :
639 3280 : if ( !bConvertToPathPossible )
640 : {
641 3279 : rSet.DisableItem(SID_CHANGEBEZIER);
642 : }
643 :
644 3280 : if (mpDrawView == NULL)
645 : {
646 : // The mpDrawView was not NULL but is now.
647 : // The reason for this may be that the DrawViewShell has been
648 : // destroyed in the mean time.
649 : // We can only return immediately and hope that the deleted
650 : // DrawViewShell is not called again.
651 : DBG_ASSERT(mpDrawView!=NULL, "Please report this assertion to the Impress team.");
652 0 : return;
653 : }
654 :
655 3280 : if( !( mpDrawView->IsConvertToPolyObjPossible(sal_False) || mpDrawView->IsVectorizeAllowed() ) )
656 3279 : rSet.DisableItem(SID_CHANGEPOLYGON);
657 :
658 3280 : if( !( mpDrawView->IsConvertToPolyObjPossible(sal_False) || mpDrawView->IsConvertToContourPossible() ) )
659 3279 : rSet.DisableItem(SID_CONVERT_TO_CONTOUR);
660 :
661 3280 : if ( !mpDrawView->IsConvertTo3DObjPossible() )
662 : {
663 3279 : rSet.DisableItem(SID_CONVERT_TO_3D);
664 3279 : rSet.DisableItem(SID_CONVERT_TO_3D_LATHE);
665 3279 : rSet.DisableItem(SID_CONVERT_TO_3D_LATHE_FAST);
666 : }
667 :
668 3280 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_MANAGE_LINKS ) )
669 : {
670 0 : if ( GetDoc()->GetLinkCount() == 0 )
671 : {
672 0 : rSet.DisableItem(SID_MANAGE_LINKS);
673 : }
674 : }
675 :
676 3280 : if (mePageKind == PK_HANDOUT)
677 : {
678 0 : rSet.DisableItem(SID_PRESENTATION_LAYOUT);
679 0 : rSet.DisableItem(SID_SELECT_BACKGROUND);
680 : }
681 :
682 3280 : if (mePageKind == PK_NOTES)
683 : {
684 0 : rSet.DisableItem(SID_INSERTPAGE);
685 0 : rSet.DisableItem(SID_RENAMEPAGE);
686 0 : rSet.DisableItem(SID_RENAMEPAGE_QUICK);
687 0 : rSet.DisableItem(SID_DUPLICATE_PAGE);
688 0 : rSet.ClearItem(SID_ANIMATION_OBJECTS);
689 0 : rSet.DisableItem(SID_ANIMATION_OBJECTS);
690 0 : rSet.DisableItem(SID_ANIMATION_EFFECTS);
691 :
692 0 : if (meEditMode == EM_MASTERPAGE)
693 0 : rSet.DisableItem(SID_MODIFYPAGE);
694 :
695 0 : rSet.DisableItem(SID_SELECT_BACKGROUND);
696 0 : rSet.DisableItem(SID_INSERTLAYER);
697 0 : rSet.DisableItem(SID_LAYERMODE);
698 0 : rSet.DisableItem(SID_INSERTFILE);
699 : }
700 3280 : else if (mePageKind == PK_HANDOUT)
701 : {
702 0 : rSet.DisableItem(SID_INSERTPAGE);
703 0 : rSet.DisableItem(SID_DUPLICATE_PAGE);
704 0 : rSet.ClearItem(SID_ANIMATION_OBJECTS);
705 0 : rSet.DisableItem(SID_ANIMATION_OBJECTS);
706 0 : rSet.DisableItem(SID_ANIMATION_EFFECTS);
707 0 : rSet.DisableItem(SID_RENAMEPAGE);
708 0 : rSet.DisableItem(SID_RENAMEPAGE_QUICK);
709 0 : rSet.DisableItem(SID_INSERTLAYER);
710 0 : rSet.DisableItem(SID_MODIFYLAYER);
711 0 : rSet.DisableItem(SID_RENAMELAYER);
712 0 : rSet.DisableItem(SID_LAYERMODE);
713 0 : rSet.DisableItem(SID_INSERTFILE);
714 0 : rSet.DisableItem(SID_PAGEMODE);
715 0 : rSet.DisableItem(SID_SELECT_BACKGROUND);
716 : }
717 : else
718 : {
719 3280 : if (meEditMode == EM_MASTERPAGE)
720 : {
721 0 : rSet.DisableItem(SID_INSERTPAGE);
722 0 : rSet.DisableItem(SID_DUPLICATE_PAGE);
723 0 : rSet.DisableItem(SID_MODIFYPAGE);
724 0 : rSet.ClearItem(SID_ANIMATION_OBJECTS);
725 0 : rSet.DisableItem(SID_ANIMATION_OBJECTS);
726 : }
727 :
728 3280 : rSet.Put (SfxBoolItem (SID_LAYERMODE, IsLayerModeActive()));
729 : }
730 :
731 3280 : if ( ! IsLayerModeActive())
732 : {
733 762 : rSet.DisableItem( SID_INSERTLAYER );
734 762 : rSet.DisableItem( SID_MODIFYLAYER );
735 762 : rSet.DisableItem( SID_DELETE_LAYER );
736 762 : rSet.DisableItem( SID_RENAMELAYER );
737 : }
738 :
739 3280 : if (meEditMode == EM_PAGE)
740 : {
741 : /**********************************************************************
742 : * page mode
743 : **********************************************************************/
744 3280 : rSet.Put(SfxBoolItem(SID_PAGEMODE, sal_True));
745 3280 : rSet.Put(SfxBoolItem(SID_MASTERPAGE, sal_False));
746 3280 : rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, sal_False));
747 3280 : rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, sal_False));
748 3280 : rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, sal_False));
749 :
750 6560 : if (mePageKind == PK_STANDARD &&
751 3280 : rSet.GetItemState(SID_TITLE_MASTERPAGE) == SFX_ITEM_AVAILABLE)
752 : {
753 : // Is there a page with the AutoLayout "Title"?
754 0 : sal_Bool bDisable = sal_True;
755 0 : sal_uInt16 i = 0;
756 0 : sal_uInt16 nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
757 :
758 0 : while (i < nCount && bDisable)
759 : {
760 0 : SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
761 :
762 0 : if (pPage->GetAutoLayout() == AUTOLAYOUT_TITLE)
763 : {
764 0 : bDisable = sal_False;
765 : }
766 :
767 0 : i++;
768 : }
769 :
770 0 : if (bDisable)
771 : {
772 0 : rSet.DisableItem(SID_TITLE_MASTERPAGE);
773 : }
774 : else
775 : {
776 0 : rSet.Put(SfxBoolItem(SID_TITLE_MASTERPAGE, sal_False));
777 : }
778 : }
779 : else
780 : {
781 3280 : rSet.DisableItem(SID_TITLE_MASTERPAGE);
782 : }
783 :
784 3280 : rSet.DisableItem (SID_INSERT_MASTER_PAGE);
785 3280 : rSet.DisableItem (SID_DELETE_MASTER_PAGE);
786 3280 : rSet.DisableItem (SID_RENAME_MASTER_PAGE);
787 3280 : rSet.DisableItem (SID_CLOSE_MASTER_VIEW);
788 : }
789 : else
790 : {
791 0 : rSet.Put(SfxBoolItem(SID_PAGEMODE, sal_False));
792 0 : rSet.Put(SfxBoolItem(SID_MASTERPAGE, sal_True));
793 :
794 : /**********************************************************************
795 : * Background page mode
796 : **********************************************************************/
797 0 : if (mePageKind == PK_STANDARD)
798 : {
799 0 : rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, sal_True));
800 0 : rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, sal_False));
801 0 : rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, sal_False));
802 :
803 0 : if (rSet.GetItemState(SID_TITLE_MASTERPAGE) == SFX_ITEM_AVAILABLE)
804 : {
805 0 : sal_Bool bCheck = sal_False;
806 0 : sal_Bool bDisable = sal_True;
807 0 : if( pPageView )
808 : {
809 0 : SdPage* pMPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
810 :
811 0 : sal_uInt16 i = 0;
812 0 : sal_uInt16 nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
813 :
814 : // Is there a reference to the current master page from a page
815 : // with the AutoLayout "Title"?
816 0 : while (i < nCount && !bCheck && bDisable)
817 : {
818 0 : SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
819 :
820 : // page does reference the current master page
821 0 : if (pPage->GetAutoLayout() == AUTOLAYOUT_TITLE)
822 : {
823 : // a page does have a AutoLayout "Title"
824 0 : bDisable = sal_False;
825 :
826 0 : SdPage& rRefMPage = (SdPage&)(pPage->TRG_GetMasterPage());
827 :
828 0 : if(&rRefMPage == pMPage)
829 : {
830 : // a page with the AutoLayout "Title" does reference
831 : // the current master page
832 0 : bCheck = sal_True;
833 : }
834 : }
835 :
836 0 : i++;
837 : }
838 : }
839 :
840 0 : if (bCheck)
841 : {
842 0 : rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, sal_False));
843 : }
844 :
845 0 : rSet.Put(SfxBoolItem(SID_TITLE_MASTERPAGE, bCheck));
846 :
847 0 : if (bDisable)
848 : {
849 0 : rSet.ClearItem(SID_TITLE_MASTERPAGE);
850 0 : rSet.DisableItem(SID_TITLE_MASTERPAGE);
851 : }
852 : }
853 : }
854 0 : else if (mePageKind == PK_NOTES)
855 : {
856 0 : rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, sal_False));
857 0 : rSet.DisableItem(SID_TITLE_MASTERPAGE);
858 0 : rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, sal_True));
859 0 : rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, sal_False));
860 : }
861 0 : else if (mePageKind == PK_HANDOUT)
862 : {
863 0 : rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, sal_False));
864 0 : rSet.DisableItem(SID_TITLE_MASTERPAGE);
865 0 : rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, sal_False));
866 0 : rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, sal_True));
867 : }
868 : }
869 :
870 : // set state of the ruler
871 3280 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_RULER ) )
872 0 : rSet.Put( SfxBoolItem( SID_RULER, HasRuler() ) );
873 :
874 : // do not delete the last page or a master page
875 6560 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DELETE_PAGE )
876 3280 : || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DELETE_MASTER_PAGE ) )
877 : {
878 0 : if (maTabControl.GetPageCount() == 1 ||
879 0 : meEditMode == EM_MASTERPAGE ||
880 0 : mePageKind == PK_NOTES ||
881 0 : mePageKind == PK_HANDOUT ||
882 0 : (GetShellType()!=ST_DRAW&&IsLayerModeActive()))
883 : {
884 0 : if (rSet.GetItemState(SID_DELETE_PAGE) == SFX_ITEM_AVAILABLE)
885 0 : rSet.DisableItem(SID_DELETE_PAGE);
886 0 : if (rSet.GetItemState(SID_DELETE_MASTER_PAGE)==SFX_ITEM_AVAILABLE)
887 0 : rSet.DisableItem(SID_DELETE_MASTER_PAGE);
888 : }
889 : }
890 :
891 : // is it allowed to delete the current layer?
892 3280 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DELETE_LAYER ) )
893 : {
894 0 : sal_uInt16 nCurrentLayer = GetLayerTabControl()->GetCurPageId();
895 0 : const String& rName = GetLayerTabControl()->GetPageText(nCurrentLayer);
896 :
897 0 : sal_Bool bDisableIt = !IsLayerModeActive();
898 0 : bDisableIt |= (rName == String(SdResId(STR_LAYER_LAYOUT)));
899 0 : bDisableIt |= (rName == String(SdResId(STR_LAYER_BCKGRND)));
900 0 : bDisableIt |= (rName == String(SdResId(STR_LAYER_BCKGRNDOBJ)));
901 0 : bDisableIt |= (rName == String(SdResId(STR_LAYER_CONTROLS)));
902 0 : bDisableIt |= (rName == String(SdResId(STR_LAYER_MEASURELINES)));
903 :
904 0 : if (bDisableIt)
905 : {
906 0 : rSet.DisableItem(SID_DELETE_LAYER);
907 0 : rSet.DisableItem(SID_RENAMELAYER);
908 0 : }
909 : }
910 :
911 9840 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CUT ) ||
912 6560 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_COPY ) ||
913 3280 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_OUTLINE_BULLET ))
914 : {
915 0 : OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
916 :
917 : // special treatment of for SID_OUTLINE_BULLET if objects with different
918 : // kinds of NumBullets are marked
919 0 : sal_Bool bHasOutliner = sal_False;
920 0 : sal_Bool bHasOther = sal_False;
921 0 : for(sal_uLong nNum = 0; nNum < nMarkCount; nNum++)
922 : {
923 0 : SdrObject* pObj = rMarkList.GetMark(nNum)->GetMarkedSdrObj();
924 0 : if( pObj->GetObjInventor() == SdrInventor )
925 : {
926 0 : if( pObj->GetObjIdentifier() == OBJ_OUTLINETEXT )
927 : {
928 0 : bHasOutliner = sal_True;
929 0 : if(bHasOther)
930 0 : break;
931 : }
932 : else
933 : {
934 0 : bHasOther = sal_True;
935 0 : if(bHasOutliner)
936 0 : break;
937 : }
938 : }
939 : }
940 :
941 0 : if( bHasOther && bHasOutliner )
942 0 : rSet.DisableItem( SID_OUTLINE_BULLET );
943 :
944 0 : if (pOlView)
945 : {
946 0 : if ( pOlView->GetSelected().Len() == 0 )
947 : {
948 0 : rSet.DisableItem( SID_CUT );
949 0 : rSet.DisableItem( SID_COPY );
950 : }
951 : }
952 :
953 : }
954 :
955 3280 : FuBullet::GetSlotState( rSet, this, GetViewFrame() );
956 :
957 3280 : if ( GetDocSh()->IsUIActive() )
958 : {
959 0 : rSet.DisableItem( SID_INSERT_OBJECT );
960 0 : rSet.DisableItem( SID_INSERT_PLUGIN );
961 0 : rSet.DisableItem( SID_INSERT_SOUND );
962 0 : rSet.DisableItem( SID_INSERT_VIDEO );
963 0 : rSet.DisableItem( SID_INSERT_FLOATINGFRAME );
964 0 : rSet.DisableItem( SID_INSERT_MATH );
965 0 : rSet.DisableItem( SID_INSERT_DIAGRAM );
966 0 : rSet.DisableItem( SID_ATTR_TABLE );
967 0 : rSet.DisableItem( SID_SIZE_REAL );
968 0 : rSet.DisableItem( SID_SIZE_OPTIMAL );
969 0 : rSet.DisableItem( SID_SIZE_ALL );
970 0 : rSet.DisableItem( SID_SIZE_PAGE_WIDTH );
971 0 : rSet.DisableItem( SID_SIZE_PAGE );
972 0 : rSet.DisableItem( SID_DUPLICATE_PAGE );
973 0 : rSet.DisableItem( SID_ZOOM_TOOLBOX );
974 : }
975 :
976 : // Zoom-State
977 9840 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_IN ) ||
978 6560 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_OUT )||
979 3280 : SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_PANNING ) )
980 : {
981 0 : if( GetActiveWindow()->GetZoom() <= GetActiveWindow()->GetMinZoom() || GetDocSh()->IsUIActive() )
982 : {
983 0 : rSet.DisableItem( SID_ZOOM_IN );
984 0 : rSet.DisableItem( SID_ZOOM_PANNING );
985 : }
986 0 : if( GetActiveWindow()->GetZoom() >= GetActiveWindow()->GetMaxZoom() || GetDocSh()->IsUIActive() )
987 0 : rSet.DisableItem( SID_ZOOM_OUT );
988 : }
989 :
990 3280 : if (!mpZoomList->IsNextPossible())
991 : {
992 3280 : rSet.DisableItem(SID_ZOOM_NEXT);
993 : }
994 3280 : if (!mpZoomList->IsPreviousPossible())
995 : {
996 74 : rSet.DisableItem(SID_ZOOM_PREV);
997 : }
998 :
999 3280 : if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_REMOTE_DLG ) )
1000 : {
1001 :
1002 0 : bool bDisableSdremoteForGood = false;
1003 : #ifndef ENABLE_SDREMOTE
1004 : bDisableSdremoteForGood = true;
1005 : #endif
1006 0 : uno::Reference< uno::XComponentContext > xContext = comphelper::getProcessComponentContext();
1007 0 : if ( xContext.is() )
1008 0 : bDisableSdremoteForGood |= ! ( officecfg::Office::Common::Misc::ExperimentalMode::get( xContext ) &&
1009 :
1010 0 : officecfg::Office::Impress::Misc::Start::EnableSdremote::get( xContext ) );
1011 :
1012 : // This dialog is only useful for TCP/IP remote control
1013 : // which is unusual, under-tested and a security issue.
1014 0 : if ( bDisableSdremoteForGood )
1015 : {
1016 0 : rSet.Put(SfxVisibilityItem(SID_REMOTE_DLG, false));
1017 0 : }
1018 : }
1019 :
1020 : // EditText active
1021 3280 : if (GetViewShellBase().GetViewShellManager()->GetShell(RID_DRAW_TEXT_TOOLBOX) != NULL)
1022 : {
1023 0 : sal_uInt16 nCurrentSId = SID_ATTR_CHAR;
1024 :
1025 0 : if(HasCurrentFunction())
1026 : {
1027 0 : nCurrentSId = GetCurrentFunction()->GetSlotID();
1028 : }
1029 0 : if( nCurrentSId != SID_TEXT_FITTOSIZE &&
1030 0 : nCurrentSId != SID_TEXT_FITTOSIZE_VERTICAL &&
1031 : nCurrentSId != SID_ATTR_CHAR_VERTICAL )
1032 0 : nCurrentSId = SID_ATTR_CHAR;
1033 :
1034 0 : rSet.Put( SfxBoolItem( nCurrentSId, sal_True ) );
1035 :
1036 : // Short version of UpdateToolboxImages()
1037 0 : rSet.Put( TbxImageItem( SID_DRAWTBX_TEXT, nCurrentSId ) );
1038 : }
1039 :
1040 3280 : if ( GetDocSh()->IsReadOnly() )
1041 : {
1042 0 : rSet.DisableItem( SID_AUTOSPELL_CHECK );
1043 : }
1044 : else
1045 : {
1046 3280 : if (GetDoc()->GetOnlineSpell())
1047 : {
1048 3280 : rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, sal_True));
1049 : }
1050 : else
1051 : {
1052 0 : rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, sal_False));
1053 : }
1054 : }
1055 :
1056 3280 : SdrPageView* pPV = mpDrawView->GetSdrPageView();
1057 3280 : String aActiveLayer = mpDrawView->GetActiveLayer();
1058 :
1059 13120 : if ( ( aActiveLayer.Len() != 0 && pPV && ( pPV->IsLayerLocked(aActiveLayer) ||
1060 9840 : !pPV->IsLayerVisible(aActiveLayer) ) ) ||
1061 3280 : SD_MOD()->GetWaterCan() )
1062 : {
1063 0 : rSet.DisableItem( SID_PASTE );
1064 0 : rSet.DisableItem( SID_PASTE_SPECIAL );
1065 0 : rSet.DisableItem( SID_CLIPBOARD_FORMAT_ITEMS );
1066 :
1067 0 : rSet.DisableItem( SID_INSERT_FLD_DATE_FIX );
1068 0 : rSet.DisableItem( SID_INSERT_FLD_DATE_VAR );
1069 0 : rSet.DisableItem( SID_INSERT_FLD_TIME_FIX );
1070 0 : rSet.DisableItem( SID_INSERT_FLD_TIME_VAR );
1071 0 : rSet.DisableItem( SID_INSERT_FLD_AUTHOR );
1072 0 : rSet.DisableItem( SID_INSERT_FLD_PAGE );
1073 0 : rSet.DisableItem( SID_INSERT_FLD_PAGES );
1074 0 : rSet.DisableItem( SID_INSERT_FLD_FILE );
1075 :
1076 0 : rSet.DisableItem( SID_INSERT_GRAPHIC );
1077 0 : rSet.DisableItem( SID_INSERT_AVMEDIA );
1078 0 : rSet.DisableItem( SID_INSERT_DIAGRAM );
1079 0 : rSet.DisableItem( SID_INSERT_OBJECT );
1080 0 : rSet.DisableItem( SID_INSERT_PLUGIN );
1081 0 : rSet.DisableItem( SID_INSERT_SOUND );
1082 0 : rSet.DisableItem( SID_INSERT_VIDEO );
1083 0 : rSet.DisableItem( SID_INSERT_FLOATINGFRAME );
1084 :
1085 0 : rSet.DisableItem( SID_INSERT_MATH );
1086 0 : rSet.DisableItem( SID_INSERT_FRAME );
1087 0 : rSet.DisableItem( SID_INSERTFILE );
1088 0 : rSet.DisableItem( SID_ATTR_TABLE );
1089 0 : rSet.DisableItem( SID_COPYOBJECTS );
1090 :
1091 0 : rSet.DisableItem( SID_SCAN );
1092 0 : rSet.DisableItem( SID_TWAIN_SELECT );
1093 0 : rSet.DisableItem( SID_TWAIN_TRANSFER );
1094 :
1095 : // rSet.DisableItem( SID_BEZIER_EDIT );
1096 0 : rSet.DisableItem( SID_GLUE_EDITMODE );
1097 0 : rSet.DisableItem( SID_OBJECT_ROTATE );
1098 0 : rSet.DisableItem( SID_OBJECT_SHEAR );
1099 0 : rSet.DisableItem( SID_OBJECT_MIRROR );
1100 0 : rSet.DisableItem( SID_OBJECT_CROP );
1101 0 : rSet.DisableItem( SID_ATTR_GRAF_CROP );
1102 0 : rSet.DisableItem( SID_OBJECT_TRANSPARENCE );
1103 0 : rSet.DisableItem( SID_OBJECT_GRADIENT );
1104 0 : rSet.DisableItem( SID_OBJECT_CROOK_ROTATE );
1105 0 : rSet.DisableItem( SID_OBJECT_CROOK_SLANT );
1106 0 : rSet.DisableItem( SID_OBJECT_CROOK_STRETCH );
1107 :
1108 : // Disable all object-creating tools
1109 0 : rSet.ClearItem( SID_ATTR_CHAR );
1110 0 : rSet.DisableItem( SID_ATTR_CHAR );
1111 0 : rSet.ClearItem( SID_ATTR_CHAR_VERTICAL );
1112 0 : rSet.DisableItem( SID_ATTR_CHAR_VERTICAL );
1113 0 : rSet.ClearItem(SID_DRAW_LINE);
1114 0 : rSet.DisableItem(SID_DRAW_LINE);
1115 0 : rSet.ClearItem(SID_DRAW_MEASURELINE);
1116 0 : rSet.DisableItem(SID_DRAW_MEASURELINE);
1117 0 : rSet.ClearItem(SID_DRAW_XLINE);
1118 0 : rSet.DisableItem(SID_DRAW_XLINE);
1119 0 : rSet.ClearItem( SID_LINE_ARROW_START );
1120 0 : rSet.DisableItem( SID_LINE_ARROW_START );
1121 0 : rSet.ClearItem( SID_LINE_ARROW_END );
1122 0 : rSet.DisableItem( SID_LINE_ARROW_END );
1123 0 : rSet.ClearItem( SID_LINE_ARROWS );
1124 0 : rSet.DisableItem( SID_LINE_ARROWS );
1125 0 : rSet.ClearItem( SID_LINE_ARROW_CIRCLE );
1126 0 : rSet.DisableItem( SID_LINE_ARROW_CIRCLE );
1127 0 : rSet.ClearItem( SID_LINE_CIRCLE_ARROW );
1128 0 : rSet.DisableItem( SID_LINE_CIRCLE_ARROW );
1129 0 : rSet.ClearItem( SID_LINE_ARROW_SQUARE );
1130 0 : rSet.DisableItem( SID_LINE_ARROW_SQUARE );
1131 0 : rSet.ClearItem( SID_LINE_SQUARE_ARROW );
1132 0 : rSet.DisableItem( SID_LINE_SQUARE_ARROW );
1133 :
1134 0 : rSet.ClearItem(SID_DRAW_RECT);
1135 0 : rSet.DisableItem(SID_DRAW_RECT);
1136 0 : rSet.ClearItem(SID_DRAW_RECT_NOFILL);
1137 0 : rSet.DisableItem(SID_DRAW_RECT_NOFILL);
1138 0 : rSet.ClearItem(SID_DRAW_RECT_ROUND);
1139 0 : rSet.DisableItem(SID_DRAW_RECT_ROUND);
1140 0 : rSet.ClearItem(SID_DRAW_RECT_ROUND_NOFILL);
1141 0 : rSet.DisableItem(SID_DRAW_RECT_ROUND_NOFILL);
1142 0 : rSet.ClearItem(SID_DRAW_SQUARE);
1143 0 : rSet.DisableItem(SID_DRAW_SQUARE);
1144 0 : rSet.ClearItem(SID_DRAW_SQUARE_NOFILL);
1145 0 : rSet.DisableItem(SID_DRAW_SQUARE_NOFILL);
1146 0 : rSet.ClearItem(SID_DRAW_SQUARE_ROUND);
1147 0 : rSet.DisableItem(SID_DRAW_SQUARE_ROUND);
1148 0 : rSet.ClearItem(SID_DRAW_SQUARE_ROUND_NOFILL);
1149 0 : rSet.DisableItem(SID_DRAW_SQUARE_ROUND_NOFILL);
1150 0 : rSet.ClearItem(SID_DRAW_ELLIPSE);
1151 0 : rSet.DisableItem(SID_DRAW_ELLIPSE);
1152 0 : rSet.ClearItem(SID_DRAW_ELLIPSE_NOFILL);
1153 0 : rSet.DisableItem(SID_DRAW_ELLIPSE_NOFILL);
1154 0 : rSet.ClearItem(SID_DRAW_CIRCLE);
1155 0 : rSet.DisableItem(SID_DRAW_CIRCLE);
1156 0 : rSet.ClearItem(SID_DRAW_CIRCLE_NOFILL);
1157 0 : rSet.DisableItem(SID_DRAW_CIRCLE_NOFILL);
1158 0 : rSet.ClearItem(SID_DRAW_CAPTION);
1159 0 : rSet.DisableItem(SID_DRAW_CAPTION);
1160 0 : rSet.ClearItem(SID_DRAW_FONTWORK);
1161 0 : rSet.DisableItem(SID_DRAW_FONTWORK);
1162 0 : rSet.ClearItem(SID_DRAW_FONTWORK_VERTICAL);
1163 0 : rSet.DisableItem(SID_DRAW_FONTWORK_VERTICAL);
1164 0 : rSet.ClearItem(SID_DRAW_CAPTION_VERTICAL);
1165 0 : rSet.DisableItem(SID_DRAW_CAPTION_VERTICAL);
1166 0 : rSet.ClearItem(SID_TEXT_FITTOSIZE);
1167 0 : rSet.DisableItem(SID_TEXT_FITTOSIZE);
1168 0 : rSet.ClearItem(SID_TEXT_FITTOSIZE_VERTICAL);
1169 0 : rSet.DisableItem(SID_TEXT_FITTOSIZE_VERTICAL);
1170 0 : rSet.ClearItem(SID_TOOL_CONNECTOR);
1171 0 : rSet.DisableItem(SID_TOOL_CONNECTOR);
1172 0 : rSet.ClearItem(SID_CONNECTOR_ARROW_START);
1173 0 : rSet.DisableItem(SID_CONNECTOR_ARROW_START);
1174 0 : rSet.ClearItem(SID_CONNECTOR_ARROW_END);
1175 0 : rSet.DisableItem(SID_CONNECTOR_ARROW_END);
1176 0 : rSet.ClearItem(SID_CONNECTOR_ARROWS);
1177 0 : rSet.DisableItem(SID_CONNECTOR_ARROWS);
1178 0 : rSet.ClearItem(SID_CONNECTOR_CIRCLE_START);
1179 0 : rSet.DisableItem(SID_CONNECTOR_CIRCLE_START);
1180 0 : rSet.ClearItem(SID_CONNECTOR_CIRCLE_END);
1181 0 : rSet.DisableItem(SID_CONNECTOR_CIRCLE_END);
1182 0 : rSet.ClearItem(SID_CONNECTOR_CIRCLES);
1183 0 : rSet.DisableItem(SID_CONNECTOR_CIRCLES);
1184 0 : rSet.ClearItem(SID_CONNECTOR_LINE);
1185 0 : rSet.DisableItem(SID_CONNECTOR_LINE);
1186 0 : rSet.ClearItem(SID_CONNECTOR_LINE_ARROW_START);
1187 0 : rSet.DisableItem(SID_CONNECTOR_LINE_ARROW_START);
1188 0 : rSet.ClearItem(SID_CONNECTOR_LINE_ARROW_END);
1189 0 : rSet.DisableItem(SID_CONNECTOR_LINE_ARROW_END);
1190 0 : rSet.ClearItem(SID_CONNECTOR_LINE_ARROWS);
1191 0 : rSet.DisableItem(SID_CONNECTOR_LINE_ARROWS);
1192 0 : rSet.ClearItem(SID_CONNECTOR_LINE_CIRCLE_START);
1193 0 : rSet.DisableItem(SID_CONNECTOR_LINE_CIRCLE_START);
1194 0 : rSet.ClearItem(SID_CONNECTOR_LINE_CIRCLE_END);
1195 0 : rSet.DisableItem(SID_CONNECTOR_LINE_CIRCLE_END);
1196 0 : rSet.ClearItem(SID_CONNECTOR_LINE_CIRCLES);
1197 0 : rSet.DisableItem(SID_CONNECTOR_LINE_CIRCLES);
1198 0 : rSet.ClearItem(SID_CONNECTOR_CURVE);
1199 0 : rSet.DisableItem(SID_CONNECTOR_CURVE);
1200 0 : rSet.ClearItem(SID_CONNECTOR_CURVE_ARROW_START);
1201 0 : rSet.DisableItem(SID_CONNECTOR_CURVE_ARROW_START);
1202 0 : rSet.ClearItem(SID_CONNECTOR_CURVE_ARROW_END);
1203 0 : rSet.DisableItem(SID_CONNECTOR_CURVE_ARROW_END);
1204 0 : rSet.ClearItem(SID_CONNECTOR_CURVE_ARROWS);
1205 0 : rSet.DisableItem(SID_CONNECTOR_CURVE_ARROWS);
1206 0 : rSet.ClearItem(SID_CONNECTOR_CURVE_CIRCLE_START);
1207 0 : rSet.DisableItem(SID_CONNECTOR_CURVE_CIRCLE_START);
1208 0 : rSet.ClearItem(SID_CONNECTOR_CURVE_CIRCLE_END);
1209 0 : rSet.DisableItem(SID_CONNECTOR_CURVE_CIRCLE_END);
1210 0 : rSet.ClearItem(SID_CONNECTOR_CURVE_CIRCLES);
1211 0 : rSet.DisableItem(SID_CONNECTOR_CURVE_CIRCLES);
1212 0 : rSet.ClearItem(SID_CONNECTOR_LINES);
1213 0 : rSet.DisableItem(SID_CONNECTOR_LINES);
1214 0 : rSet.ClearItem(SID_CONNECTOR_LINES_ARROW_START);
1215 0 : rSet.DisableItem(SID_CONNECTOR_LINES_ARROW_START);
1216 0 : rSet.ClearItem(SID_CONNECTOR_LINES_ARROW_END);
1217 0 : rSet.DisableItem(SID_CONNECTOR_LINES_ARROW_END);
1218 0 : rSet.ClearItem(SID_CONNECTOR_LINES_ARROWS);
1219 0 : rSet.DisableItem(SID_CONNECTOR_LINES_ARROWS);
1220 0 : rSet.ClearItem(SID_CONNECTOR_LINES_CIRCLE_START);
1221 0 : rSet.DisableItem(SID_CONNECTOR_LINES_CIRCLE_START);
1222 0 : rSet.ClearItem(SID_CONNECTOR_LINES_CIRCLE_END);
1223 0 : rSet.DisableItem(SID_CONNECTOR_LINES_CIRCLE_END);
1224 0 : rSet.ClearItem(SID_CONNECTOR_LINES_CIRCLES);
1225 0 : rSet.DisableItem(SID_CONNECTOR_LINES_CIRCLES);
1226 0 : rSet.ClearItem(SID_DRAW_ARC);
1227 0 : rSet.DisableItem(SID_DRAW_ARC);
1228 0 : rSet.ClearItem(SID_DRAW_CIRCLEARC);
1229 0 : rSet.DisableItem(SID_DRAW_CIRCLEARC);
1230 0 : rSet.ClearItem(SID_DRAW_PIE);
1231 0 : rSet.DisableItem(SID_DRAW_PIE);
1232 0 : rSet.ClearItem(SID_DRAW_PIE_NOFILL);
1233 0 : rSet.DisableItem(SID_DRAW_PIE_NOFILL);
1234 0 : rSet.ClearItem(SID_DRAW_CIRCLEPIE);
1235 0 : rSet.DisableItem(SID_DRAW_CIRCLEPIE);
1236 0 : rSet.ClearItem(SID_DRAW_CIRCLEPIE_NOFILL);
1237 0 : rSet.DisableItem(SID_DRAW_CIRCLEPIE_NOFILL);
1238 0 : rSet.ClearItem(SID_DRAW_ELLIPSECUT);
1239 0 : rSet.DisableItem(SID_DRAW_ELLIPSECUT);
1240 0 : rSet.ClearItem(SID_DRAW_ELLIPSECUT_NOFILL);
1241 0 : rSet.DisableItem(SID_DRAW_ELLIPSECUT_NOFILL);
1242 0 : rSet.ClearItem(SID_DRAW_CIRCLECUT);
1243 0 : rSet.DisableItem(SID_DRAW_CIRCLECUT);
1244 0 : rSet.ClearItem(SID_DRAW_CIRCLECUT_NOFILL);
1245 0 : rSet.DisableItem(SID_DRAW_CIRCLECUT_NOFILL);
1246 0 : rSet.ClearItem(SID_DRAW_POLYGON);
1247 0 : rSet.DisableItem(SID_DRAW_POLYGON);
1248 0 : rSet.ClearItem(SID_DRAW_POLYGON_NOFILL);
1249 0 : rSet.DisableItem(SID_DRAW_POLYGON_NOFILL);
1250 0 : rSet.ClearItem(SID_DRAW_FREELINE);
1251 0 : rSet.DisableItem(SID_DRAW_FREELINE);
1252 0 : rSet.ClearItem(SID_DRAW_FREELINE_NOFILL);
1253 0 : rSet.DisableItem(SID_DRAW_FREELINE_NOFILL);
1254 0 : rSet.ClearItem(SID_DRAW_XPOLYGON);
1255 0 : rSet.DisableItem(SID_DRAW_XPOLYGON);
1256 0 : rSet.ClearItem(SID_DRAW_XPOLYGON_NOFILL);
1257 0 : rSet.DisableItem(SID_DRAW_XPOLYGON_NOFILL);
1258 0 : rSet.ClearItem(SID_DRAW_BEZIER_FILL);
1259 0 : rSet.DisableItem(SID_DRAW_BEZIER_FILL);
1260 0 : rSet.ClearItem(SID_DRAW_BEZIER_NOFILL);
1261 0 : rSet.DisableItem(SID_DRAW_BEZIER_NOFILL);
1262 0 : rSet.ClearItem(SID_3D_CUBE);
1263 0 : rSet.DisableItem(SID_3D_CUBE);
1264 0 : rSet.ClearItem(SID_3D_SHELL);
1265 0 : rSet.DisableItem(SID_3D_SHELL);
1266 0 : rSet.ClearItem(SID_3D_SPHERE);
1267 0 : rSet.DisableItem(SID_3D_SPHERE);
1268 0 : rSet.ClearItem(SID_3D_HALF_SPHERE);
1269 0 : rSet.DisableItem(SID_3D_HALF_SPHERE);
1270 0 : rSet.ClearItem(SID_3D_CYLINDER);
1271 0 : rSet.DisableItem(SID_3D_CYLINDER);
1272 0 : rSet.ClearItem(SID_3D_CONE);
1273 0 : rSet.DisableItem(SID_3D_CONE);
1274 0 : rSet.ClearItem(SID_3D_TORUS);
1275 0 : rSet.DisableItem(SID_3D_TORUS);
1276 0 : rSet.ClearItem(SID_3D_PYRAMID);
1277 0 : rSet.DisableItem(SID_3D_PYRAMID);
1278 : }
1279 :
1280 : // are the modules available?
1281 :
1282 3280 : if (!SvtModuleOptions().IsCalc())
1283 : {
1284 : // remove menu entry if module is not available
1285 0 : rSet.Put( SfxVisibilityItem( SID_ATTR_TABLE, sal_False ) );
1286 : }
1287 3280 : if (!SvtModuleOptions().IsChart())
1288 : {
1289 0 : rSet.DisableItem( SID_INSERT_DIAGRAM );
1290 : }
1291 3280 : if (!SvtModuleOptions().IsMath())
1292 : {
1293 0 : rSet.DisableItem( SID_INSERT_MATH );
1294 : }
1295 :
1296 6560 : rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetViewShellBase() ) );
1297 3280 : if( (xSlideshow.is() && xSlideshow->isRunning() && (xSlideshow->getAnimationMode() != ANIMATIONMODE_PREVIEW) ) || GetDocSh()->IsPreview() )
1298 : {
1299 : // Own Slots
1300 0 : rSet.DisableItem( SID_PRESENTATION );
1301 0 : rSet.DisableItem( SID_ZOOM_IN );
1302 0 : rSet.DisableItem( SID_ZOOM_OUT );
1303 0 : rSet.DisableItem( SID_ZOOM_PANNING );
1304 0 : rSet.DisableItem( SID_ZOOM_NEXT );
1305 0 : rSet.DisableItem( SID_ZOOM_PREV );
1306 0 : rSet.DisableItem( SID_SIZE_REAL );
1307 0 : rSet.DisableItem( SID_SIZE_OPTIMAL );
1308 0 : rSet.DisableItem( SID_SIZE_ALL );
1309 0 : rSet.DisableItem( SID_SIZE_PAGE_WIDTH );
1310 0 : rSet.DisableItem( SID_SIZE_PAGE );
1311 0 : rSet.DisableItem( SID_INSERTPAGE );
1312 0 : rSet.DisableItem( SID_DUPLICATE_PAGE );
1313 0 : rSet.DisableItem( SID_MODIFYPAGE );
1314 0 : rSet.DisableItem( SID_RENAMEPAGE );
1315 0 : rSet.DisableItem( SID_RENAMEPAGE_QUICK );
1316 0 : rSet.DisableItem( SID_DELETE_PAGE );
1317 0 : rSet.DisableItem( SID_PAGESETUP );
1318 :
1319 0 : if( xSlideshow.is() && xSlideshow->isRunning() )
1320 : {
1321 0 : rSet.ClearItem(SID_OBJECT_ALIGN);
1322 0 : rSet.ClearItem(SID_ZOOM_TOOLBOX);
1323 0 : rSet.ClearItem(SID_OBJECT_CHOOSE_MODE);
1324 0 : rSet.ClearItem(SID_DRAWTBX_TEXT);
1325 0 : rSet.ClearItem(SID_DRAWTBX_RECTANGLES);
1326 0 : rSet.ClearItem(SID_DRAWTBX_ELLIPSES);
1327 0 : rSet.ClearItem(SID_DRAWTBX_LINES);
1328 0 : rSet.ClearItem(SID_DRAWTBX_ARROWS);
1329 0 : rSet.ClearItem(SID_DRAWTBX_3D_OBJECTS);
1330 0 : rSet.ClearItem(SID_DRAWTBX_CONNECTORS);
1331 0 : rSet.ClearItem(SID_OBJECT_CHOOSE_MODE );
1332 0 : rSet.ClearItem(SID_DRAWTBX_INSERT);
1333 0 : rSet.ClearItem(SID_INSERTFILE);
1334 0 : rSet.ClearItem(SID_OBJECT_ROTATE);
1335 0 : rSet.ClearItem(SID_OBJECT_ALIGN);
1336 0 : rSet.ClearItem(SID_POSITION);
1337 0 : rSet.ClearItem(SID_FM_CONFIG);
1338 0 : rSet.ClearItem(SID_ANIMATION_EFFECTS);
1339 0 : rSet.ClearItem(SID_ANIMATION_OBJECTS);
1340 0 : rSet.ClearItem(SID_3D_WIN);
1341 :
1342 0 : rSet.DisableItem(SID_OBJECT_ALIGN);
1343 0 : rSet.DisableItem(SID_ZOOM_TOOLBOX);
1344 0 : rSet.DisableItem(SID_OBJECT_CHOOSE_MODE);
1345 0 : rSet.DisableItem(SID_DRAWTBX_TEXT);
1346 0 : rSet.DisableItem(SID_DRAWTBX_RECTANGLES);
1347 0 : rSet.DisableItem(SID_DRAWTBX_ELLIPSES);
1348 0 : rSet.DisableItem(SID_DRAWTBX_LINES);
1349 0 : rSet.DisableItem(SID_DRAWTBX_ARROWS);
1350 0 : rSet.DisableItem(SID_DRAWTBX_3D_OBJECTS);
1351 0 : rSet.DisableItem(SID_DRAWTBX_CONNECTORS);
1352 0 : rSet.DisableItem(SID_OBJECT_CHOOSE_MODE );
1353 0 : rSet.DisableItem(SID_DRAWTBX_INSERT);
1354 0 : rSet.DisableItem(SID_INSERTFILE);
1355 0 : rSet.DisableItem(SID_OBJECT_ROTATE);
1356 0 : rSet.DisableItem(SID_OBJECT_ALIGN);
1357 0 : rSet.DisableItem(SID_POSITION);
1358 0 : rSet.DisableItem(SID_FM_CONFIG);
1359 0 : rSet.DisableItem(SID_ANIMATION_EFFECTS);
1360 0 : rSet.DisableItem(SID_ANIMATION_OBJECTS);
1361 0 : rSet.DisableItem(SID_3D_WIN);
1362 : }
1363 : }
1364 :
1365 : ///////////////////////////////////////////////////////////////////////
1366 : // Menuoption: Change->Convert->To Bitmap, Change->Convert->To Metafile
1367 : // disable, if there only Bitmap or Metafiles marked
1368 : // Menuoption: Format->Area, Format->Line
1369 : // disabled, if the marked objects not able to handle
1370 : // these attributes
1371 : //
1372 :
1373 3280 : bool bSingleGraphicSelected = false;
1374 :
1375 3280 : if (!mpDrawView->AreObjectsMarked())
1376 : {
1377 3279 : rSet.DisableItem (SID_CONVERT_TO_METAFILE);
1378 3279 : rSet.DisableItem (SID_CONVERT_TO_BITMAP);
1379 : }
1380 : else
1381 : {
1382 : // get marklist
1383 1 : SdrMarkList aMarkList = mpDrawView->GetMarkedObjectList();
1384 :
1385 1 : sal_Bool bFoundBitmap = sal_False;
1386 1 : sal_Bool bFoundMetafile = sal_False;
1387 1 : sal_Bool bFoundObjNoLine = sal_False;
1388 1 : sal_Bool bFoundObjNoArea = sal_False;
1389 1 : sal_Bool bFoundNoGraphicObj = sal_False;
1390 1 : sal_Bool bFoundAny = sal_False;
1391 1 : bool bFoundTable = false;
1392 :
1393 : // const int nMarkCount = (int) aMarkList.GetMarkCount();
1394 2 : for (sal_uLong i=0; i < nMarkCount && !bFoundAny; i++)
1395 : {
1396 1 : SdrObject* pObj= aMarkList.GetMark(i)->GetMarkedSdrObj();
1397 1 : sal_uInt16 nId = pObj->GetObjIdentifier();
1398 1 : sal_uInt32 nInv = pObj->GetObjInventor();
1399 :
1400 1 : if(nInv == SdrInventor)
1401 : {
1402 : // 2D objects
1403 1 : switch( nId )
1404 : {
1405 : case OBJ_PATHLINE :
1406 : case OBJ_PLIN :
1407 : case OBJ_LINE:
1408 : case OBJ_FREELINE :
1409 : case OBJ_EDGE:
1410 : case OBJ_CARC :
1411 0 : bFoundObjNoArea = sal_True;
1412 0 : bFoundNoGraphicObj = sal_True;
1413 0 : break;
1414 : case OBJ_OLE2 :
1415 : // #i118485# #i118525# Allow Line, Area and Graphic (Metafile, Bitmap)
1416 0 : bSingleGraphicSelected = nMarkCount == 1;
1417 0 : bFoundBitmap = true;
1418 0 : bFoundMetafile = true;
1419 0 : break;
1420 : case OBJ_GRAF :
1421 : {
1422 0 : bSingleGraphicSelected = nMarkCount == 1;
1423 0 : const SdrGrafObj* pSdrGrafObj = static_cast< const SdrGrafObj* >(pObj);
1424 0 : switch(pSdrGrafObj->GetGraphicType())
1425 : {
1426 : case GRAPHIC_BITMAP :
1427 0 : bFoundBitmap = sal_True;
1428 0 : if(pSdrGrafObj->isEmbeddedSvg())
1429 : {
1430 0 : bFoundMetafile = true;
1431 : }
1432 0 : break;
1433 : case GRAPHIC_GDIMETAFILE :
1434 0 : bFoundMetafile = sal_True;
1435 0 : break;
1436 : default:
1437 0 : break;
1438 : }
1439 0 : break;
1440 : }
1441 : case OBJ_TABLE:
1442 0 : bFoundTable = true;
1443 0 : break;
1444 : default :
1445 1 : bFoundAny = sal_True;
1446 : }
1447 : }
1448 0 : else if(nInv == E3dInventor)
1449 : {
1450 : // 3D objects
1451 0 : bFoundAny = sal_True;
1452 : }
1453 : }
1454 :
1455 1 : if( bFoundTable )
1456 0 : rSet.DisableItem( SID_ATTRIBUTES_LINE );
1457 :
1458 1 : if (!bFoundAny)
1459 : {
1460 : // Disable menuitem for area-dialog
1461 0 : if( bFoundObjNoArea ) // #i25616#
1462 0 : rSet.DisableItem( SID_ATTRIBUTES_AREA );
1463 :
1464 : // Disable menuitem for line-dialog
1465 0 : if( bFoundObjNoLine )
1466 0 : rSet.DisableItem( SID_ATTRIBUTES_LINE );
1467 :
1468 0 : if( bFoundBitmap && !bFoundMetafile && !bFoundNoGraphicObj ) // only Bitmaps marked
1469 0 : rSet.DisableItem( SID_CONVERT_TO_BITMAP );
1470 0 : else if( !bFoundBitmap && bFoundMetafile && !bFoundNoGraphicObj ) // only Metafiles marked
1471 0 : rSet.DisableItem( SID_CONVERT_TO_METAFILE );
1472 0 : else if( !bFoundBitmap && !bFoundMetafile && !bFoundNoGraphicObj ) // nothing to do
1473 : {
1474 0 : rSet.DisableItem( SID_CONVERT_TO_BITMAP );
1475 0 : rSet.DisableItem( SID_CONVERT_TO_METAFILE );
1476 : }
1477 1 : }
1478 : }
1479 :
1480 3280 : if( !bSingleGraphicSelected )
1481 : {
1482 3280 : rSet.DisableItem (SID_OBJECT_CROP);
1483 3280 : rSet.DisableItem (SID_ATTR_GRAF_CROP);
1484 : }
1485 :
1486 : ///////////////////////////////////////////////////////////////////////
1487 : // Menuoption: Edit->Hyperlink
1488 : // Disable, if there is no hyperlink
1489 : //
1490 3280 : sal_Bool bDisableEditHyperlink = sal_True;
1491 3280 : if( mpDrawView->AreObjectsMarked() && ( mpDrawView->GetMarkedObjectList().GetMarkCount() == 1 ) )
1492 : {
1493 1 : if( mpDrawView->IsTextEdit() )
1494 : {
1495 0 : OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
1496 0 : if (pOLV)
1497 : {
1498 0 : const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
1499 0 : if (pFieldItem)
1500 : {
1501 0 : ESelection aSel = pOLV->GetSelection();
1502 0 : if ( abs( aSel.nEndPos - aSel.nStartPos ) == 1 )
1503 : {
1504 0 : const SvxFieldData* pField = pFieldItem->GetField();
1505 0 : if ( pField->ISA(SvxURLField) )
1506 0 : bDisableEditHyperlink = sal_False;
1507 : }
1508 : }
1509 : }
1510 : }
1511 : else
1512 : {
1513 1 : SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, mpDrawView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj());
1514 :
1515 1 : if ( pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor() )
1516 : {
1517 0 : uno::Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel() );
1518 0 : if( xControlModel.is() )
1519 : {
1520 0 : uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY );
1521 0 : if( xPropSet.is() )
1522 : {
1523 0 : uno::Reference< beans::XPropertySetInfo > xPropInfo( xPropSet->getPropertySetInfo() );
1524 0 : if( xPropInfo.is() && xPropInfo->hasPropertyByName( "TargetURL") )
1525 : {
1526 0 : bDisableEditHyperlink = sal_False;
1527 0 : }
1528 0 : }
1529 0 : }
1530 : }
1531 : }
1532 : }
1533 :
1534 : //highlight selected custom shape
1535 : {
1536 3280 : sal_uInt16 nCurrentSId = 0;
1537 3280 : if(HasCurrentFunction())
1538 3280 : nCurrentSId = GetCurrentFunction()->GetSlotID();
1539 :
1540 3280 : if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_BASIC ) )
1541 317 : rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_BASIC, SID_DRAWTBX_CS_BASIC == nCurrentSId ));
1542 3280 : if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_SYMBOL ) )
1543 109 : rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_SYMBOL, SID_DRAWTBX_CS_SYMBOL == nCurrentSId ));
1544 3280 : if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_ARROW ) )
1545 109 : rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_ARROW, SID_DRAWTBX_CS_ARROW == nCurrentSId ));
1546 3280 : if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_FLOWCHART ) )
1547 109 : rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_FLOWCHART, SID_DRAWTBX_CS_FLOWCHART == nCurrentSId ));
1548 3280 : if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_CALLOUT ) )
1549 109 : rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_CALLOUT,SID_DRAWTBX_CS_CALLOUT == nCurrentSId ));
1550 3280 : if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_STAR ) )
1551 109 : rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_STAR, SID_DRAWTBX_CS_STAR == nCurrentSId ));
1552 : }
1553 :
1554 3280 : if ( bDisableEditHyperlink || GetDocSh()->IsReadOnly() )
1555 3280 : rSet.DisableItem( SID_EDIT_HYPERLINK );
1556 :
1557 3280 : if ( bDisableEditHyperlink )
1558 3280 : rSet.DisableItem( SID_OPEN_HYPERLINK );
1559 :
1560 : #if defined WNT || defined UNX
1561 3280 : if( !mxScannerManager.is() )
1562 : {
1563 0 : rSet.DisableItem( SID_TWAIN_SELECT );
1564 0 : rSet.DisableItem( SID_TWAIN_TRANSFER );
1565 : }
1566 : #endif
1567 :
1568 : // Set the state of two entries in the 'Slide' context sub-menu
1569 : // concerning the visibility of master page background and master page
1570 : // shapes.
1571 6560 : if (rSet.GetItemState(SID_DISPLAY_MASTER_BACKGROUND) == SFX_ITEM_AVAILABLE
1572 3280 : || rSet.GetItemState(SID_DISPLAY_MASTER_OBJECTS) == SFX_ITEM_AVAILABLE)
1573 : {
1574 0 : SdPage* pPage = GetActualPage();
1575 0 : if (pPage != NULL
1576 0 : && GetDoc() != NULL)
1577 : {
1578 0 : SetOfByte aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers();
1579 0 : SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
1580 0 : sal_uInt8 aBackgroundId = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
1581 0 : sal_uInt8 aObjectId = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
1582 : rSet.Put(SfxBoolItem(SID_DISPLAY_MASTER_BACKGROUND,
1583 0 : aVisibleLayers.IsSet(aBackgroundId)));
1584 : rSet.Put(SfxBoolItem(SID_DISPLAY_MASTER_OBJECTS,
1585 0 : aVisibleLayers.IsSet(aObjectId)));
1586 : }
1587 : }
1588 :
1589 6560 : GetModeSwitchingMenuState (rSet);
1590 : }
1591 :
1592 3280 : void DrawViewShell::GetModeSwitchingMenuState (SfxItemSet &rSet)
1593 : {
1594 : //draview
1595 3280 : rSet.Put(SfxBoolItem(SID_DIAMODE, sal_False));
1596 3280 : rSet.Put(SfxBoolItem(SID_OUTLINEMODE, sal_False));
1597 3280 : if (mePageKind == PK_NOTES)
1598 : {
1599 0 : rSet.Put(SfxBoolItem(SID_DRAWINGMODE, sal_False));
1600 0 : rSet.Put(SfxBoolItem(SID_NOTESMODE, sal_True));
1601 0 : rSet.Put(SfxBoolItem(SID_HANDOUTMODE, sal_False));
1602 : }
1603 3280 : else if (mePageKind == PK_HANDOUT)
1604 : {
1605 0 : rSet.Put(SfxBoolItem(SID_DRAWINGMODE, sal_False));
1606 0 : rSet.Put(SfxBoolItem(SID_NOTESMODE, sal_False));
1607 0 : rSet.Put(SfxBoolItem(SID_HANDOUTMODE, sal_True));
1608 : }
1609 : else
1610 : {
1611 3280 : rSet.Put(SfxBoolItem(SID_DRAWINGMODE, sal_True));
1612 3280 : rSet.Put(SfxBoolItem(SID_NOTESMODE, sal_False));
1613 3280 : rSet.Put(SfxBoolItem(SID_HANDOUTMODE, sal_False));
1614 : }
1615 :
1616 : // Removed [GetDocSh()->GetCurrentFunction() ||] from the following
1617 : // clause because the current function of the docshell can only be
1618 : // search and replace or spell checking and in that case switching the
1619 : // view mode is allowed.
1620 3280 : const bool bIsRunning = SlideShow::IsRunning(GetViewShellBase());
1621 :
1622 3280 : if (GetViewFrame()->GetFrame().IsInPlace() || bIsRunning)
1623 : {
1624 0 : if ( !GetViewFrame()->GetFrame().IsInPlace() )
1625 : {
1626 0 : rSet.ClearItem( SID_DRAWINGMODE );
1627 0 : rSet.DisableItem( SID_DRAWINGMODE );
1628 : }
1629 :
1630 0 : rSet.ClearItem( SID_NOTESMODE );
1631 0 : rSet.DisableItem( SID_NOTESMODE );
1632 :
1633 0 : rSet.ClearItem( SID_HANDOUTMODE );
1634 0 : rSet.DisableItem( SID_HANDOUTMODE );
1635 :
1636 0 : rSet.ClearItem( SID_OUTLINEMODE );
1637 0 : rSet.DisableItem( SID_OUTLINEMODE );
1638 :
1639 0 : rSet.ClearItem( SID_DIAMODE );
1640 0 : rSet.DisableItem( SID_DIAMODE );
1641 : }
1642 :
1643 3280 : if (GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED)
1644 : {
1645 : // Outplace-Edit: do not allow switch
1646 0 : rSet.ClearItem( SID_OUTLINEMODE );
1647 0 : rSet.DisableItem( SID_OUTLINEMODE );
1648 :
1649 0 : rSet.ClearItem( SID_DIAMODE );
1650 0 : rSet.DisableItem( SID_DIAMODE );
1651 :
1652 0 : rSet.ClearItem( SID_NOTESMODE );
1653 0 : rSet.DisableItem( SID_NOTESMODE );
1654 :
1655 0 : rSet.ClearItem( SID_HANDOUTMODE );
1656 0 : rSet.DisableItem( SID_HANDOUTMODE );
1657 : }
1658 :
1659 3280 : svx::ExtrusionBar::getState( mpDrawView, rSet );
1660 3280 : svx::FontworkBar::getState( mpDrawView, rSet );
1661 3280 : }
1662 :
1663 :
1664 :
1665 0 : void DrawViewShell::GetState (SfxItemSet& rSet)
1666 : {
1667 : // Iterate over all requested items in the set.
1668 0 : SfxWhichIter aIter( rSet );
1669 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1670 0 : while (nWhich)
1671 : {
1672 0 : switch (nWhich)
1673 : {
1674 : case SID_SEARCH_ITEM:
1675 : case SID_SEARCH_OPTIONS:
1676 : // Forward this request to the common (old) code of the
1677 : // document shell.
1678 0 : GetDocSh()->GetState (rSet);
1679 0 : break;
1680 : default:
1681 : OSL_TRACE ("DrawViewShell::GetState(): can not handle which id %d", nWhich);
1682 0 : break;
1683 : }
1684 0 : nWhich = aIter.NextWhich();
1685 0 : }
1686 0 : }
1687 :
1688 :
1689 :
1690 :
1691 0 : void DrawViewShell::Execute (SfxRequest& rReq)
1692 : {
1693 0 : if(SlideShow::IsRunning(GetViewShellBase()))
1694 : {
1695 : // Do not execute anything during a native slide show.
1696 0 : return;
1697 : }
1698 :
1699 0 : switch (rReq.GetSlot())
1700 : {
1701 : case SID_SEARCH_ITEM:
1702 : // Forward this request to the common (old) code of the
1703 : // document shell.
1704 0 : GetDocSh()->Execute (rReq);
1705 0 : break;
1706 :
1707 : case SID_SPELL_DIALOG:
1708 : {
1709 0 : SfxViewFrame* pViewFrame = GetViewFrame();
1710 0 : if (rReq.GetArgs() != NULL)
1711 : pViewFrame->SetChildWindow (SID_SPELL_DIALOG,
1712 0 : ((const SfxBoolItem&) (rReq.GetArgs()->
1713 0 : Get(SID_SPELL_DIALOG))).GetValue());
1714 : else
1715 0 : pViewFrame->ToggleChildWindow(SID_SPELL_DIALOG);
1716 :
1717 0 : pViewFrame->GetBindings().Invalidate(SID_SPELL_DIALOG);
1718 0 : rReq.Ignore ();
1719 : }
1720 0 : break;
1721 :
1722 : default:
1723 : OSL_TRACE ("DrawViewShell::Execute(): can not handle slot %d", rReq.GetSlot());
1724 0 : break;
1725 : }
1726 : }
1727 :
1728 33 : } // end of namespace sd
1729 :
1730 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|