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