summaryrefslogtreecommitdiff
path: root/sd/source/ui/view/drviews7.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/view/drviews7.cxx')
-rwxr-xr-xsd/source/ui/view/drviews7.cxx1741
1 files changed, 1741 insertions, 0 deletions
diff --git a/sd/source/ui/view/drviews7.cxx b/sd/source/ui/view/drviews7.cxx
new file mode 100755
index 000000000000..e853d3944ce0
--- /dev/null
+++ b/sd/source/ui/view/drviews7.cxx
@@ -0,0 +1,1741 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sd.hxx"
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/linguistic2/XThesaurus.hpp>
+#include <svx/fmglob.hxx>
+#include <svx/globl3d.hxx>
+#include <svx/svdouno.hxx>
+#include <editeng/eeitem.hxx>
+#ifndef _FLDITEM_HXX
+#include <editeng/flditem.hxx>
+#endif
+#ifndef _SVXIDS_HXX
+#include <svx/svxids.hrc>
+#endif
+#include <svx/svdpagv.hxx>
+#include <svx/clipfmtitem.hxx>
+#include <svx/fmshell.hxx>
+#include <svl/eitem.hxx>
+#include <svl/aeitem.hxx>
+#include <svl/stritem.hxx>
+#include <svl/visitem.hxx>
+#include <svl/whiter.hxx>
+#include <sfx2/dispatch.hxx>
+#include <svx/svdograf.hxx>
+#include <editeng/unolingu.hxx>
+#include <svx/extrusionbar.hxx>
+#include <svx/fontworkbar.hxx>
+
+// #UndoRedo#
+#include <svl/slstitm.hxx>
+#include <sfx2/app.hxx>
+#include <svtools/insdlg.hxx>
+#include <unotools/moduleoptions.hxx>
+#include <svl/languageoptions.hxx>
+#include <comphelper/processfactory.hxx>
+#include <sfx2/request.hxx>
+
+
+#include <svx/pfiledlg.hxx>
+#include <svx/grafctrl.hxx>
+#include <svtools/cliplistener.hxx>
+#include <sfx2/viewfrm.hxx>
+
+#include "app.hrc"
+#include "glob.hrc"
+#include "res_bmp.hrc"
+#include "PresentationViewShell.hxx"
+
+#include "misc.hxx"
+#include "Outliner.hxx"
+#include "drawdoc.hxx"
+#include "sdresid.hxx"
+#include "sdpage.hxx"
+#include "Client.hxx"
+#include "DrawDocShell.hxx"
+#include "zoomlist.hxx"
+#include "slideshow.hxx"
+#include "drawview.hxx"
+#include "ViewShellBase.hxx"
+#include "ViewShellManager.hxx"
+#include "LayerTabBar.hxx"
+#include "fupoor.hxx"
+#include "Window.hxx"
+#include "fuediglu.hxx"
+#include "fubullet.hxx"
+#include "fuformatpaintbrush.hxx"
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::linguistic2;
+
+/** Create a list of clipboard formats that are supported both from the
+ current clipboard content and the DrawViewShell.
+ The list is stored in a new instance of SvxClipboardFmtItem.
+*/
+::std::auto_ptr<SvxClipboardFmtItem> GetSupportedClipboardFormats (
+ TransferableDataHelper& rDataHelper)
+{
+ ::std::auto_ptr<SvxClipboardFmtItem> pResult (
+ new SvxClipboardFmtItem(SID_CLIPBOARD_FORMAT_ITEMS));
+
+ sal_uInt32 nFormatCount (rDataHelper.GetFormatCount());
+ for (sal_uInt32 i=0; i<nFormatCount; i++)
+ {
+ const SotFormatStringId nTestFormat = rDataHelper.GetFormat(i);
+
+ // Check if the current format is the same as one that has already
+ // been handled.
+ bool bDuplicate (false);
+ for (sal_uInt32 j=0; j<i; j++)
+ {
+ if (nTestFormat == rDataHelper.GetFormat(j))
+ {
+ bDuplicate = true;
+ break;
+ }
+ }
+
+ // Look up the format among those that are supported by the
+ // DrawViewShell.
+ if ( ! bDuplicate)
+ {
+ switch (nTestFormat)
+ {
+ case SOT_FORMATSTR_ID_EMBED_SOURCE:
+ {
+ String sName;
+
+ TransferableObjectDescriptor aDescriptor;
+ if (rDataHelper.GetTransferableObjectDescriptor(
+ SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aDescriptor))
+ {
+ sName = aDescriptor.maTypeName;
+ }
+ if (sName.Len() > 0)
+ pResult->AddClipbrdFormat(nTestFormat, sName);
+ else
+ pResult->AddClipbrdFormat(nTestFormat);
+
+ break;
+ }
+
+ case SOT_FORMATSTR_ID_LINK_SOURCE:
+ case SOT_FORMATSTR_ID_DRAWING:
+ case SOT_FORMATSTR_ID_SVXB:
+ case FORMAT_GDIMETAFILE:
+ case FORMAT_BITMAP:
+ case SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK:
+ case FORMAT_STRING:
+ case SOT_FORMATSTR_ID_HTML:
+ case FORMAT_RTF:
+ case SOT_FORMATSTR_ID_EDITENGINE:
+ pResult->AddClipbrdFormat(nTestFormat);
+ break;
+ }
+ }
+ }
+
+ // Check some OLE formats whose names are handled differently.
+ SotFormatStringId nFormat (SOT_FORMATSTR_ID_EMBED_SOURCE_OLE);
+ bool bHasFormat (rDataHelper.HasFormat(nFormat));
+ if ( ! bHasFormat)
+ {
+ bHasFormat = rDataHelper.HasFormat(nFormat);
+ }
+ if (bHasFormat)
+ {
+ String sName;
+ String sSource;
+ if (SvPasteObjectHelper::GetEmbeddedName (rDataHelper, sName, sSource, nFormat))
+ pResult->AddClipbrdFormat (nFormat, sName);
+ }
+
+ return pResult;
+}
+
+namespace sd {
+
+IMPL_LINK( DrawViewShell, ClipboardChanged, TransferableDataHelper*, pDataHelper )
+{
+ if ( pDataHelper )
+ {
+ mbPastePossible = ( pDataHelper->GetFormatCount() != 0 );
+
+ // Update the list of supported clipboard formats according to the
+ // new clipboard content.
+ // There are some stack traces that indicate the possibility of the
+ // DrawViewShell destructor called during the call to
+ // GetSupportedClipboardFormats(). If that really has happened then
+ // exit immediately.
+ TransferableDataHelper aDataHelper (
+ TransferableDataHelper::CreateFromSystemClipboard(GetActiveWindow()));
+ ::std::auto_ptr<SvxClipboardFmtItem> pFormats (GetSupportedClipboardFormats(aDataHelper));
+ if (mpDrawView == NULL)
+ return 0;
+ mpCurrentClipboardFormats = pFormats;
+
+ SfxBindings& rBindings = GetViewFrame()->GetBindings();
+ rBindings.Invalidate( SID_PASTE );
+ rBindings.Invalidate( SID_PASTE_SPECIAL );
+ rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
+ }
+ return 0;
+}
+
+/*************************************************************************
+|*
+|* Status (Enabled/Disabled) von Menue-SfxSlots setzen
+|*
+\************************************************************************/
+
+void DrawViewShell::GetMenuState( SfxItemSet &rSet )
+{
+ if (mpDrawView == NULL)
+ {
+ // This assertion and return are here to prevent crashes like that
+ // of issue #126202#.
+ DBG_ASSERT(mpDrawView!=NULL, "Please report this assertion to the Impress team.");
+ return;
+ }
+
+ ViewShell::GetMenuState(rSet);
+ BOOL bDisableVerticalText = !SvtLanguageOptions().IsVerticalTextEnabled();
+
+ if ( bDisableVerticalText )
+ {
+ rSet.DisableItem( SID_DRAW_FONTWORK_VERTICAL );
+ rSet.DisableItem( SID_DRAW_CAPTION_VERTICAL );
+ rSet.DisableItem( SID_TEXT_FITTOSIZE_VERTICAL );
+ rSet.DisableItem( SID_DRAW_TEXT_VERTICAL );
+ }
+
+ FASTBOOL bConvertToPathPossible = mpDrawView->IsConvertToPathObjPossible(FALSE);
+
+ const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
+ const ULONG nMarkCount = rMarkList.GetMarkCount();
+
+ //format paintbrush
+ FuFormatPaintBrush::GetMenuState( *this, rSet );
+
+ // Stati der SfxChild-Windows (Animator, Fontwork etc.)
+ SetChildWindowState( rSet );
+
+ // Images der Toolboxen mappen (nur Zoom)
+ UpdateToolboxImages( rSet, FALSE );
+
+ if(HasCurrentFunction())
+ {
+ USHORT nSId = GetCurrentFunction()->GetSlotID();
+
+ rSet.Put( SfxBoolItem( nSId, TRUE ) );
+
+ // Bewirkt ein uncheck eines simulierten Slots
+ USHORT nId = GetIdBySubId( nSId );
+
+ // Images der Toolboxen mappen
+ UpdateToolboxImages( rSet );
+
+ if( nId != SID_ZOOM_TOOLBOX &&
+ nSId != SID_DRAWTBX_INSERT &&
+ nSId != SID_POSITION &&
+ nSId != SID_OBJECT_ALIGN )
+ {
+ if( nId != SID_OBJECT_CHOOSE_MODE )
+ rSet.Put( TbxImageItem( SID_OBJECT_CHOOSE_MODE, 0 ) );
+ if( nId != SID_DRAWTBX_TEXT )
+ rSet.Put( TbxImageItem( SID_DRAWTBX_TEXT, 0 ) );
+ if( nId != SID_DRAWTBX_RECTANGLES )
+ rSet.Put( TbxImageItem( SID_DRAWTBX_RECTANGLES, 0 ) );
+ if( nId != SID_DRAWTBX_ELLIPSES )
+ rSet.Put( TbxImageItem( SID_DRAWTBX_ELLIPSES, 0 ) );
+ if( nId != SID_DRAWTBX_LINES )
+ rSet.Put( TbxImageItem( SID_DRAWTBX_LINES, 0 ) );
+ if( nId != SID_DRAWTBX_ARROWS )
+ rSet.Put( TbxImageItem( SID_DRAWTBX_ARROWS, 0 ) );
+ if( nId != SID_DRAWTBX_3D_OBJECTS )
+ rSet.Put( TbxImageItem( SID_DRAWTBX_3D_OBJECTS, 0 ) );
+ if( nId != SID_DRAWTBX_CONNECTORS )
+ rSet.Put( TbxImageItem( SID_DRAWTBX_CONNECTORS, 0 ) );
+ }
+ }
+
+ SdrPageView* pPageView = mpDrawView->GetSdrPageView();
+
+ GetMenuStateSel(rSet);
+
+ if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_ASSIGN_LAYOUT))
+ {
+ bool bDisable = true;
+ if( pPageView )
+ {
+ SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
+
+ if( pPage )
+ {
+ rSet.Put( SfxUInt32Item( SID_ASSIGN_LAYOUT, static_cast< sal_uInt32 >(pPage->GetAutoLayout()) ) );
+ bDisable = false;
+ }
+ }
+
+ if(bDisable)
+ {
+ rSet.DisableItem(SID_EXPAND_PAGE);
+ }
+ }
+
+ if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_EXPAND_PAGE))
+ {
+ bool bDisable = true;
+ if( pPageView )
+ {
+ SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
+
+ if( pPage && (pPage->GetPageKind() == PK_STANDARD) && !pPage->IsMasterPage() )
+ {
+ SdrObject* pObj = pPage->GetPresObj(PRESOBJ_OUTLINE);
+
+ if(pObj && !pObj->IsEmptyPresObj())
+ {
+ bDisable = false;
+ }
+ }
+ }
+
+ if(bDisable)
+ {
+ rSet.DisableItem(SID_EXPAND_PAGE);
+ }
+ }
+
+ if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_SUMMARY_PAGE))
+ {
+ bool bDisable = true;
+ if( pPageView )
+ {
+ SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
+
+ if( pPage && (pPage->GetPageKind() == PK_STANDARD) && !pPage->IsMasterPage() )
+ {
+ SdrObject* pObj = pPage->GetPresObj(PRESOBJ_TITLE);
+
+ if(pObj && !pObj->IsEmptyPresObj())
+ {
+ bDisable = false;
+ }
+ }
+ }
+
+ if(bDisable)
+ {
+ rSet.DisableItem(SID_SUMMARY_PAGE);
+ }
+ }
+
+ if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_ASSIGN_LAYOUT))
+ {
+ bool bDisable = true;
+ if( pPageView )
+ {
+ SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
+
+ if( pPage && !pPage->IsMasterPage() )
+ {
+ rSet.Put( SfxUInt32Item(SID_ASSIGN_LAYOUT, pPage->GetAutoLayout()) );
+ bDisable = false;
+ }
+ }
+
+ if(bDisable)
+ {
+ rSet.DisableItem(SID_ASSIGN_LAYOUT);
+ }
+ }
+
+ // Starten der Praesentation moeglich?
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PRESENTATION ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_REHEARSE_TIMINGS ) )
+ {
+ BOOL bDisable = TRUE;
+ USHORT nCount = GetDoc()->GetSdPageCount( PK_STANDARD );
+
+ for( USHORT i = 0; i < nCount && bDisable; i++ )
+ {
+ SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
+
+ if( !pPage->IsExcluded() )
+ bDisable = FALSE;
+ }
+
+ if( bDisable || GetDocSh()->IsPreview())
+ {
+ rSet.DisableItem( SID_PRESENTATION );
+ rSet.DisableItem( SID_REHEARSE_TIMINGS );
+ }
+ }
+
+ // Klebepunkte
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_EDITMODE ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_INSERT_POINT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_PERCENT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_LEFT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_RIGHT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_TOP ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_ESCDIR_BOTTOM ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_HORZALIGN_CENTER ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_HORZALIGN_LEFT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_HORZALIGN_RIGHT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_VERTALIGN_CENTER ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_VERTALIGN_TOP ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GLUE_VERTALIGN_BOTTOM ) )
+ {
+ // Prozent
+ TRISTATE eState = mpDrawView->IsMarkedGluePointsPercent();
+ if( eState == STATE_DONTKNOW )
+ rSet.InvalidateItem( SID_GLUE_PERCENT );
+ else
+ rSet.Put( SfxBoolItem( SID_GLUE_PERCENT, eState == STATE_CHECK ) );
+
+ // Bei Prozent hat Alignment keinen Effekt
+ if( eState == STATE_CHECK )
+ {
+ rSet.DisableItem( SID_GLUE_HORZALIGN_CENTER );
+ rSet.DisableItem( SID_GLUE_HORZALIGN_LEFT );
+ rSet.DisableItem( SID_GLUE_HORZALIGN_RIGHT );
+ rSet.DisableItem( SID_GLUE_VERTALIGN_CENTER );
+ rSet.DisableItem( SID_GLUE_VERTALIGN_TOP );
+ rSet.DisableItem( SID_GLUE_VERTALIGN_BOTTOM );
+ }
+ else
+ {
+ // Horizontale Ausrichtung
+ USHORT nHorz = mpDrawView->GetMarkedGluePointsAlign( FALSE );
+ rSet.Put( SfxBoolItem( SID_GLUE_HORZALIGN_CENTER, nHorz == SDRHORZALIGN_CENTER ) );
+ rSet.Put( SfxBoolItem( SID_GLUE_HORZALIGN_LEFT, nHorz == SDRHORZALIGN_LEFT ) );
+ rSet.Put( SfxBoolItem( SID_GLUE_HORZALIGN_RIGHT, nHorz == SDRHORZALIGN_RIGHT ) );
+ // Vertikale Ausrichtung
+ USHORT nVert = mpDrawView->GetMarkedGluePointsAlign( TRUE );
+ rSet.Put( SfxBoolItem( SID_GLUE_VERTALIGN_CENTER, nVert == SDRVERTALIGN_CENTER ) );
+ rSet.Put( SfxBoolItem( SID_GLUE_VERTALIGN_TOP, nVert == SDRVERTALIGN_TOP ) );
+ rSet.Put( SfxBoolItem( SID_GLUE_VERTALIGN_BOTTOM, nVert == SDRVERTALIGN_BOTTOM ) );
+ }
+
+ // Punkt einfuegen
+ rSet.Put( SfxBoolItem( SID_GLUE_INSERT_POINT, mpDrawView->IsInsGluePointMode() ) );
+
+ // Autrittsrichtung
+ // Links
+ eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_LEFT );
+ if( eState == STATE_DONTKNOW )
+ rSet.InvalidateItem( SID_GLUE_ESCDIR_LEFT );
+ else
+ rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_LEFT, eState == STATE_CHECK ) );
+ // Rechts
+ eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_RIGHT );
+ if( eState == STATE_DONTKNOW )
+ rSet.InvalidateItem( SID_GLUE_ESCDIR_RIGHT );
+ else
+ rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_RIGHT, eState == STATE_CHECK ) );
+ // Oben
+ eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_TOP );
+ if( eState == STATE_DONTKNOW )
+ rSet.InvalidateItem( SID_GLUE_ESCDIR_TOP );
+ else
+ rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_TOP, eState == STATE_CHECK ) );
+ // Unten
+ eState = mpDrawView->IsMarkedGluePointsEscDir( SDRESC_BOTTOM );
+ if( eState == STATE_DONTKNOW )
+ rSet.InvalidateItem( SID_GLUE_ESCDIR_BOTTOM );
+ else
+ rSet.Put( SfxBoolItem( SID_GLUE_ESCDIR_BOTTOM, eState == STATE_CHECK ) );
+ }
+
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GRID_FRONT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_HELPLINES_FRONT ) )
+ {
+ rSet.Put( SfxBoolItem( SID_GRID_FRONT, mpDrawView->IsGridFront() ) );
+ rSet.Put( SfxBoolItem( SID_HELPLINES_FRONT, mpDrawView->IsHlplFront() ) );
+ }
+
+ if (!mpDrawView->IsFrameDragSingles())
+ rSet.Put(SfxBoolItem(SID_BEZIER_EDIT, TRUE));
+ else
+ rSet.Put(SfxBoolItem(SID_BEZIER_EDIT, FALSE));
+
+ if(dynamic_cast<FuEditGluePoints*>( GetCurrentFunction().get()))
+ rSet.Put(SfxBoolItem(SID_GLUE_EDITMODE, TRUE));
+ else
+ rSet.Put(SfxBoolItem(SID_GLUE_EDITMODE, FALSE));
+
+ if( !mpDrawView->IsMirrorAllowed( TRUE, TRUE ) )
+ {
+ rSet.DisableItem( SID_HORIZONTAL );
+ rSet.DisableItem( SID_VERTICAL );
+ }
+
+ if( !mpDrawView->IsMirrorAllowed() )
+ {
+ rSet.DisableItem( SID_OBJECT_MIRROR );
+// rSet.DisableItem( SID_CONVERT_TO_3D_LATHE );
+// rSet.DisableItem( SID_CONVERT_TO_3D_LATHE_FAST );
+ }
+
+ // interactive transparence control
+ if(!mpDrawView->IsTransparenceAllowed())
+ {
+ rSet.DisableItem( SID_OBJECT_TRANSPARENCE );
+ }
+
+ // interactive gradient control
+ if(!mpDrawView->IsGradientAllowed())
+ {
+ rSet.DisableItem( SID_OBJECT_GRADIENT );
+ }
+
+ // Morphen ggf. disablen
+ if ( !mpDrawView->IsMorphingAllowed() )
+ rSet.DisableItem( SID_POLYGON_MORPHING );
+
+ // Vectorize ggf. disablen
+ if ( !mpDrawView->IsVectorizeAllowed() )
+ rSet.DisableItem( SID_VECTORIZE );
+
+ if( !mpDrawView->IsReverseOrderPossible() )
+ {
+ rSet.DisableItem( SID_REVERSE_ORDER );
+ }
+
+ if ( !bConvertToPathPossible &&
+ !mpDrawView->IsCrookAllowed( mpDrawView->IsCrookNoContortion() ) )
+ {
+ // Implizite Wandlung in Kurve nicht moeglich
+ rSet.DisableItem(SID_OBJECT_CROOK_ROTATE);
+ rSet.DisableItem(SID_OBJECT_CROOK_SLANT);
+ rSet.DisableItem(SID_OBJECT_CROOK_STRETCH);
+ }
+
+ if ( !mpDrawView->IsGroupEntered() )
+ {
+ rSet.DisableItem( SID_LEAVE_GROUP );
+ rSet.Put( SfxBoolItem( SID_LEAVE_ALL_GROUPS, FALSE ) );
+ rSet.ClearItem( SID_LEAVE_ALL_GROUPS );
+ rSet.DisableItem( SID_LEAVE_ALL_GROUPS );
+ }
+ else
+ rSet.Put( SfxBoolItem( SID_LEAVE_ALL_GROUPS, TRUE ) );
+
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_THESAURUS ) )
+ {
+ if ( !mpDrawView->IsTextEdit() )
+ {
+ rSet.DisableItem( SID_THESAURUS );
+ }
+ else
+ {
+ LanguageType eLang = GetDoc()->GetLanguage( EE_CHAR_LANGUAGE );
+ Reference< XThesaurus > xThesaurus( LinguMgr::GetThesaurus() );
+ Locale aLocale;
+
+ SvxLanguageToLocale( aLocale, eLang );
+
+ if (!xThesaurus.is() || eLang == LANGUAGE_NONE || !xThesaurus->hasLocale(aLocale) )
+ rSet.DisableItem( SID_THESAURUS );
+ }
+ }
+
+ if ( !mpDrawView->IsTextEdit() )
+ {
+ rSet.DisableItem( SID_THESAURUS );
+ }
+
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SELECTALL ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SIZE_ALL ) )
+ {
+ if( pPageView && pPageView->GetObjList()->GetObjCount() == 0 )
+ {
+ // Sollte disabled sein, wenn kein Objekt auf der Zeichenflaeche ist:
+ rSet.DisableItem( SID_SELECTALL );
+ rSet.DisableItem( SID_SIZE_ALL );
+ }
+ }
+
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CONTEXT ) )
+ rSet.Put( SfxStringItem( SID_CONTEXT, mpDrawView->GetStatusText() ) );
+
+ // clipboard (paste)
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PASTE ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PASTE_SPECIAL ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CLIPBOARD_FORMAT_ITEMS ) )
+ {
+ if ( !mpClipEvtLstnr )
+ {
+ // SSA: #108717# avoid clipboard initialization for
+ // read-only presentation views (workaround for NT4.0
+ // clipboard prob...)
+ if( !ISA(PresentationViewShell) )
+ {
+ // create listener
+ mpClipEvtLstnr = new TransferableClipboardListener( LINK( this, DrawViewShell, ClipboardChanged ) );
+ mpClipEvtLstnr->acquire();
+ mpClipEvtLstnr->AddRemoveListener( GetActiveWindow(), TRUE );
+
+ // get initial state
+ TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) );
+ mbPastePossible = ( aDataHelper.GetFormatCount() != 0 );
+ }
+ else
+ mbPastePossible = FALSE;
+ }
+
+ if( !mbPastePossible )
+ {
+ rSet.DisableItem( SID_PASTE );
+ rSet.DisableItem( SID_PASTE_SPECIAL );
+ rSet.DisableItem( SID_CLIPBOARD_FORMAT_ITEMS );
+ }
+ else if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CLIPBOARD_FORMAT_ITEMS ) )
+ {
+ if (mpCurrentClipboardFormats.get() != NULL)
+ rSet.Put(*mpCurrentClipboardFormats);
+ }
+ }
+
+ if ( !bConvertToPathPossible )
+ {
+ rSet.DisableItem(SID_CHANGEBEZIER);
+ }
+
+ if (mpDrawView == NULL)
+ {
+ // When we come to this line then we probably have another
+ // incarnation of issue #126202#. The mpDrawView was not NULL but is
+ // now. The reason for this may be that the DrawViewShell has been
+ // destroyed in the mean time.
+ // We can only return immediately and hope that the deleted
+ // DrawViewShell is not called again.
+ DBG_ASSERT(mpDrawView!=NULL, "Please report this assertion to the Impress team.");
+ return;
+ }
+
+ if( !( mpDrawView->IsConvertToPolyObjPossible(FALSE) || mpDrawView->IsVectorizeAllowed() ) )
+ rSet.DisableItem(SID_CHANGEPOLYGON);
+
+ if( !( mpDrawView->IsConvertToPolyObjPossible(FALSE) || mpDrawView->IsConvertToContourPossible() ) )
+ rSet.DisableItem(SID_CONVERT_TO_CONTOUR);
+
+ if ( !mpDrawView->IsConvertTo3DObjPossible() )
+ {
+ rSet.DisableItem(SID_CONVERT_TO_3D);
+ rSet.DisableItem(SID_CONVERT_TO_3D_LATHE);
+ rSet.DisableItem(SID_CONVERT_TO_3D_LATHE_FAST);
+ }
+
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_MANAGE_LINKS ) )
+ {
+ if ( GetDoc()->GetLinkCount() == 0 )
+ {
+ rSet.DisableItem(SID_MANAGE_LINKS);
+ }
+ }
+
+ if (mePageKind == PK_HANDOUT)
+ {
+ rSet.DisableItem(SID_PRESENTATION_LAYOUT);
+ rSet.DisableItem(SID_SELECT_BACKGROUND);
+ }
+
+ if (mePageKind == PK_NOTES)
+ {
+ rSet.DisableItem(SID_INSERTPAGE);
+ rSet.DisableItem(SID_RENAMEPAGE);
+ rSet.DisableItem(SID_RENAMEPAGE_QUICK);
+ rSet.DisableItem(SID_DUPLICATE_PAGE);
+ rSet.ClearItem(SID_ANIMATION_OBJECTS);
+ rSet.DisableItem(SID_ANIMATION_OBJECTS);
+ rSet.DisableItem(SID_ANIMATION_EFFECTS);
+
+ if (meEditMode == EM_MASTERPAGE)
+ rSet.DisableItem(SID_MODIFYPAGE);
+
+ rSet.DisableItem(SID_SELECT_BACKGROUND);
+ rSet.DisableItem(SID_INSERTLAYER);
+ rSet.DisableItem(SID_LAYERMODE);
+ rSet.DisableItem(SID_INSERTFILE);
+ }
+ else if (mePageKind == PK_HANDOUT)
+ {
+ rSet.DisableItem(SID_INSERTPAGE);
+ rSet.DisableItem(SID_DUPLICATE_PAGE);
+ rSet.ClearItem(SID_ANIMATION_OBJECTS);
+ rSet.DisableItem(SID_ANIMATION_OBJECTS);
+ rSet.DisableItem(SID_ANIMATION_EFFECTS);
+ rSet.DisableItem(SID_RENAMEPAGE);
+ rSet.DisableItem(SID_RENAMEPAGE_QUICK);
+ rSet.DisableItem(SID_INSERTLAYER);
+ rSet.DisableItem(SID_MODIFYLAYER);
+ rSet.DisableItem(SID_RENAMELAYER);
+ rSet.DisableItem(SID_LAYERMODE);
+ rSet.DisableItem(SID_INSERTFILE);
+ rSet.DisableItem(SID_PAGEMODE);
+ rSet.DisableItem(SID_SELECT_BACKGROUND);
+ }
+ else
+ {
+ if (meEditMode == EM_MASTERPAGE)
+ {
+ rSet.DisableItem(SID_INSERTPAGE);
+ rSet.DisableItem(SID_DUPLICATE_PAGE);
+ rSet.DisableItem(SID_MODIFYPAGE);
+ rSet.ClearItem(SID_ANIMATION_OBJECTS);
+ rSet.DisableItem(SID_ANIMATION_OBJECTS);
+ }
+
+ rSet.Put (SfxBoolItem (SID_LAYERMODE, IsLayerModeActive()));
+ }
+
+ if ( ! IsLayerModeActive())
+ {
+ rSet.DisableItem( SID_INSERTLAYER );
+ rSet.DisableItem( SID_MODIFYLAYER );
+ rSet.DisableItem( SID_DELETE_LAYER );
+ rSet.DisableItem( SID_RENAMELAYER );
+ }
+
+ if (meEditMode == EM_PAGE)
+ {
+ /**********************************************************************
+ * Seiten-Modus
+ **********************************************************************/
+ rSet.Put(SfxBoolItem(SID_PAGEMODE, TRUE));
+ rSet.Put(SfxBoolItem(SID_MASTERPAGE, FALSE));
+ rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, FALSE));
+ rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, FALSE));
+ rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, FALSE));
+
+ if (mePageKind == PK_STANDARD &&
+ rSet.GetItemState(SID_TITLE_MASTERPAGE) == SFX_ITEM_AVAILABLE)
+ {
+ // Gibt es eine Seite mit dem AutoLayout "Titel"?
+ BOOL bDisable = TRUE;
+ USHORT i = 0;
+ USHORT nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
+
+ while (i < nCount && bDisable)
+ {
+ SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
+
+ if (pPage->GetAutoLayout() == AUTOLAYOUT_TITLE)
+ {
+ bDisable = FALSE;
+ }
+
+ i++;
+ }
+
+ if (bDisable)
+ {
+ rSet.DisableItem(SID_TITLE_MASTERPAGE);
+ }
+ else
+ {
+ rSet.Put(SfxBoolItem(SID_TITLE_MASTERPAGE, FALSE));
+ }
+ }
+ else
+ {
+ rSet.DisableItem(SID_TITLE_MASTERPAGE);
+ }
+
+ rSet.DisableItem (SID_INSERT_MASTER_PAGE);
+ rSet.DisableItem (SID_DELETE_MASTER_PAGE);
+ rSet.DisableItem (SID_RENAME_MASTER_PAGE);
+ rSet.DisableItem (SID_CLOSE_MASTER_VIEW);
+ }
+ else
+ {
+ rSet.Put(SfxBoolItem(SID_PAGEMODE, FALSE));
+ rSet.Put(SfxBoolItem(SID_MASTERPAGE, TRUE));
+
+ /**********************************************************************
+ * Hintergrundseiten-Modus
+ **********************************************************************/
+ if (mePageKind == PK_STANDARD)
+ {
+ rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, TRUE));
+ rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, FALSE));
+ rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, FALSE));
+
+ if (rSet.GetItemState(SID_TITLE_MASTERPAGE) == SFX_ITEM_AVAILABLE)
+ {
+ BOOL bCheck = FALSE;
+ BOOL bDisable = TRUE;
+ if( pPageView )
+ {
+ SdPage* pMPage = dynamic_cast< SdPage* >( pPageView->GetPage() );
+
+ USHORT i = 0;
+ USHORT nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
+
+ // Referenziert eine Seite mit dem AutoLayout "Titel" die
+ // aktuelle MasterPage?
+ while (i < nCount && !bCheck && bDisable)
+ {
+ SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
+
+ // Seite referenziert aktuelle MasterPage
+ if (pPage->GetAutoLayout() == AUTOLAYOUT_TITLE)
+ {
+ // Eine Seite hat das AutoLayout "Titel"
+ bDisable = FALSE;
+
+ SdPage& rRefMPage = (SdPage&)(pPage->TRG_GetMasterPage());
+
+ if(&rRefMPage == pMPage)
+ {
+ // Eine Seite mit dem AutoLayout "Titel"
+ // referenziert die aktuelle MasterPage
+ bCheck = TRUE;
+ }
+ }
+
+ i++;
+ }
+ }
+
+ if (bCheck)
+ {
+ rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, FALSE));
+ }
+
+ rSet.Put(SfxBoolItem(SID_TITLE_MASTERPAGE, bCheck));
+
+ if (bDisable)
+ {
+ rSet.ClearItem(SID_TITLE_MASTERPAGE);
+ rSet.DisableItem(SID_TITLE_MASTERPAGE);
+ }
+ }
+ }
+ else if (mePageKind == PK_NOTES)
+ {
+ rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, FALSE));
+ rSet.DisableItem(SID_TITLE_MASTERPAGE);
+ rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, TRUE));
+ rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, FALSE));
+ }
+ else if (mePageKind == PK_HANDOUT)
+ {
+ rSet.Put(SfxBoolItem(SID_SLIDE_MASTERPAGE, FALSE));
+ rSet.DisableItem(SID_TITLE_MASTERPAGE);
+ rSet.Put(SfxBoolItem(SID_NOTES_MASTERPAGE, FALSE));
+ rSet.Put(SfxBoolItem(SID_HANDOUT_MASTERPAGE, TRUE));
+ }
+ }
+
+ // Status der Lineale setzen
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_RULER ) )
+ rSet.Put( SfxBoolItem( SID_RULER, HasRuler() ) );
+
+ // nicht die letzte Seite oder eine Masterpage loeschen
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DELETE_PAGE )
+ || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DELETE_MASTER_PAGE ) )
+ {
+ if (maTabControl.GetPageCount() == 1 ||
+ meEditMode == EM_MASTERPAGE ||
+ mePageKind == PK_NOTES ||
+ mePageKind == PK_HANDOUT ||
+ (GetShellType()!=ST_DRAW&&IsLayerModeActive()))
+ {
+ if (rSet.GetItemState(SID_DELETE_PAGE) == SFX_ITEM_AVAILABLE)
+ rSet.DisableItem(SID_DELETE_PAGE);
+ if (rSet.GetItemState(SID_DELETE_MASTER_PAGE)==SFX_ITEM_AVAILABLE)
+ rSet.DisableItem(SID_DELETE_MASTER_PAGE);
+ }
+ }
+
+ // darf der aktuelle Layer geloescht werden?
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DELETE_LAYER ) )
+ {
+ USHORT nCurrentLayer = GetLayerTabControl()->GetCurPageId();
+ const String& rName = GetLayerTabControl()->GetPageText(nCurrentLayer);
+
+ BOOL bDisableIt = !IsLayerModeActive();
+ bDisableIt |= (rName == String(SdResId(STR_LAYER_LAYOUT)));
+ bDisableIt |= (rName == String(SdResId(STR_LAYER_BCKGRND)));
+ bDisableIt |= (rName == String(SdResId(STR_LAYER_BCKGRNDOBJ)));
+ bDisableIt |= (rName == String(SdResId(STR_LAYER_CONTROLS)));
+ bDisableIt |= (rName == String(SdResId(STR_LAYER_MEASURELINES)));
+
+ if (bDisableIt)
+ {
+ rSet.DisableItem(SID_DELETE_LAYER);
+ rSet.DisableItem(SID_RENAMELAYER);
+ }
+ }
+
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_CUT ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_COPY ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_OUTLINE_BULLET ))
+ {
+ OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView();
+
+ // Sonderbehandlung für SID_OUTLINE_BULLET wenn Objekte
+ // mit unterschiedlichen arten von NumBullet Items markiert
+ // sind
+ BOOL bHasOutliner = FALSE;
+ BOOL bHasOther = FALSE;
+ for(ULONG nNum = 0; nNum < nMarkCount; nNum++)
+ {
+ SdrObject* pObj = rMarkList.GetMark(nNum)->GetMarkedSdrObj();
+ if( pObj->GetObjInventor() == SdrInventor )
+ {
+ if( pObj->GetObjIdentifier() == OBJ_OUTLINETEXT )
+ {
+ bHasOutliner = TRUE;
+ if(bHasOther)
+ break;
+ }
+ else
+ {
+ bHasOther = TRUE;
+ if(bHasOutliner)
+ break;
+ }
+ }
+ }
+
+ if( bHasOther && bHasOutliner )
+ rSet.DisableItem( SID_OUTLINE_BULLET );
+
+ if (pOlView)
+ {
+ if ( pOlView->GetSelected().Len() == 0 )
+ {
+ rSet.DisableItem( SID_CUT );
+ rSet.DisableItem( SID_COPY );
+ }
+ }
+
+ }
+
+ FuBullet::GetSlotState( rSet, this, GetViewFrame() );
+
+ if ( GetDocSh()->IsUIActive() )
+ {
+ rSet.DisableItem( SID_INSERT_OBJECT );
+ rSet.DisableItem( SID_INSERT_PLUGIN );
+ rSet.DisableItem( SID_INSERT_SOUND );
+ rSet.DisableItem( SID_INSERT_VIDEO );
+ rSet.DisableItem( SID_INSERT_APPLET );
+ rSet.DisableItem( SID_INSERT_FLOATINGFRAME );
+#ifdef STARIMAGE_AVAILABLE
+ rSet.DisableItem( SID_INSERT_IMAGE );
+#endif
+ rSet.DisableItem( SID_INSERT_MATH );
+ rSet.DisableItem( SID_INSERT_DIAGRAM );
+ rSet.DisableItem( SID_ATTR_TABLE );
+ rSet.DisableItem( SID_SIZE_REAL );
+ rSet.DisableItem( SID_SIZE_OPTIMAL );
+ rSet.DisableItem( SID_SIZE_ALL );
+ rSet.DisableItem( SID_SIZE_PAGE_WIDTH );
+ rSet.DisableItem( SID_SIZE_PAGE );
+// rSet.DisableItem( SID_INSERTPAGE );
+ rSet.DisableItem( SID_DUPLICATE_PAGE );
+ rSet.DisableItem( SID_ZOOM_TOOLBOX );
+ }
+
+ // Zoom-Stati
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_IN ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_OUT )||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_PANNING ) )
+ {
+ if( GetActiveWindow()->GetZoom() <= GetActiveWindow()->GetMinZoom() || GetDocSh()->IsUIActive() )
+ {
+ rSet.DisableItem( SID_ZOOM_IN );
+ rSet.DisableItem( SID_ZOOM_PANNING );
+ }
+ if( GetActiveWindow()->GetZoom() >= GetActiveWindow()->GetMaxZoom() || GetDocSh()->IsUIActive() )
+ rSet.DisableItem( SID_ZOOM_OUT );
+ }
+
+ if (!mpZoomList->IsNextPossible())
+ {
+ rSet.DisableItem(SID_ZOOM_NEXT);
+ }
+ if (!mpZoomList->IsPreviousPossible())
+ {
+ rSet.DisableItem(SID_ZOOM_PREV);
+ }
+
+ // EditText aktiv
+ if (GetViewShellBase().GetViewShellManager()->GetShell(RID_DRAW_TEXT_TOOLBOX) != NULL)
+ {
+ USHORT nCurrentSId = SID_ATTR_CHAR;
+
+ if(HasCurrentFunction())
+ {
+ nCurrentSId = GetCurrentFunction()->GetSlotID();
+ }
+ if( nCurrentSId != SID_TEXT_FITTOSIZE &&
+ nCurrentSId != SID_TEXT_FITTOSIZE_VERTICAL &&
+ nCurrentSId != SID_ATTR_CHAR_VERTICAL )
+ nCurrentSId = SID_ATTR_CHAR;
+
+ rSet.Put( SfxBoolItem( nCurrentSId, TRUE ) );
+
+ // Kurzform von UpdateToolboxImages()
+ rSet.Put( TbxImageItem( SID_DRAWTBX_TEXT, nCurrentSId ) );
+ }
+
+ if ( GetDocSh()->IsReadOnly() )
+ {
+ rSet.DisableItem( SID_AUTOSPELL_CHECK );
+ }
+ else
+ {
+ if (GetDoc()->GetOnlineSpell())
+ {
+ rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, TRUE));
+ }
+ else
+ {
+ rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, FALSE));
+ }
+ }
+
+ SdrPageView* pPV = mpDrawView->GetSdrPageView();
+ String aActiveLayer = mpDrawView->GetActiveLayer();
+
+ if ( ( aActiveLayer.Len() != 0 && pPV && ( pPV->IsLayerLocked(aActiveLayer) ||
+ !pPV->IsLayerVisible(aActiveLayer) ) ) ||
+ SD_MOD()->GetWaterCan() )
+ {
+ rSet.DisableItem( SID_PASTE );
+ rSet.DisableItem( SID_PASTE_SPECIAL );
+ rSet.DisableItem( SID_CLIPBOARD_FORMAT_ITEMS );
+
+ rSet.DisableItem( SID_INSERT_FLD_DATE_FIX );
+ rSet.DisableItem( SID_INSERT_FLD_DATE_VAR );
+ rSet.DisableItem( SID_INSERT_FLD_TIME_FIX );
+ rSet.DisableItem( SID_INSERT_FLD_TIME_VAR );
+ rSet.DisableItem( SID_INSERT_FLD_AUTHOR );
+ rSet.DisableItem( SID_INSERT_FLD_PAGE );
+ rSet.DisableItem( SID_INSERT_FLD_PAGES );
+ rSet.DisableItem( SID_INSERT_FLD_FILE );
+
+ rSet.DisableItem( SID_INSERT_GRAPHIC );
+ rSet.DisableItem( SID_INSERT_AVMEDIA );
+ rSet.DisableItem( SID_INSERT_DIAGRAM );
+ rSet.DisableItem( SID_INSERT_OBJECT );
+ rSet.DisableItem( SID_INSERT_PLUGIN );
+ rSet.DisableItem( SID_INSERT_SOUND );
+ rSet.DisableItem( SID_INSERT_VIDEO );
+ rSet.DisableItem( SID_INSERT_APPLET );
+ rSet.DisableItem( SID_INSERT_FLOATINGFRAME );
+
+#ifdef STARIMAGE_AVAILABLE
+ rSet.DisableItem( SID_INSERT_IMAGE );
+#endif
+ rSet.DisableItem( SID_INSERT_MATH );
+ rSet.DisableItem( SID_INSERT_FRAME );
+ rSet.DisableItem( SID_INSERTFILE );
+ rSet.DisableItem( SID_ATTR_TABLE );
+ rSet.DisableItem( SID_COPYOBJECTS );
+
+ rSet.DisableItem( SID_SCAN );
+ rSet.DisableItem( SID_TWAIN_SELECT );
+ rSet.DisableItem( SID_TWAIN_TRANSFER );
+
+// rSet.DisableItem( SID_BEZIER_EDIT );
+ rSet.DisableItem( SID_GLUE_EDITMODE );
+ rSet.DisableItem( SID_OBJECT_ROTATE );
+ rSet.DisableItem( SID_OBJECT_SHEAR );
+ rSet.DisableItem( SID_OBJECT_MIRROR );
+ rSet.DisableItem( SID_OBJECT_CROP );
+ rSet.DisableItem( SID_ATTR_GRAF_CROP );
+ rSet.DisableItem( SID_OBJECT_TRANSPARENCE );
+ rSet.DisableItem( SID_OBJECT_GRADIENT );
+ rSet.DisableItem( SID_OBJECT_CROOK_ROTATE );
+ rSet.DisableItem( SID_OBJECT_CROOK_SLANT );
+ rSet.DisableItem( SID_OBJECT_CROOK_STRETCH );
+
+ // Alle objekterzeugenden Werkzeuge disablen
+ rSet.ClearItem( SID_ATTR_CHAR );
+ rSet.DisableItem( SID_ATTR_CHAR );
+ rSet.ClearItem( SID_ATTR_CHAR_VERTICAL );
+ rSet.DisableItem( SID_ATTR_CHAR_VERTICAL );
+ rSet.ClearItem(SID_DRAW_LINE);
+ rSet.DisableItem(SID_DRAW_LINE);
+ rSet.ClearItem(SID_DRAW_MEASURELINE);
+ rSet.DisableItem(SID_DRAW_MEASURELINE);
+ rSet.ClearItem(SID_DRAW_XLINE);
+ rSet.DisableItem(SID_DRAW_XLINE);
+ rSet.ClearItem( SID_LINE_ARROW_START );
+ rSet.DisableItem( SID_LINE_ARROW_START );
+ rSet.ClearItem( SID_LINE_ARROW_END );
+ rSet.DisableItem( SID_LINE_ARROW_END );
+ rSet.ClearItem( SID_LINE_ARROWS );
+ rSet.DisableItem( SID_LINE_ARROWS );
+ rSet.ClearItem( SID_LINE_ARROW_CIRCLE );
+ rSet.DisableItem( SID_LINE_ARROW_CIRCLE );
+ rSet.ClearItem( SID_LINE_CIRCLE_ARROW );
+ rSet.DisableItem( SID_LINE_CIRCLE_ARROW );
+ rSet.ClearItem( SID_LINE_ARROW_SQUARE );
+ rSet.DisableItem( SID_LINE_ARROW_SQUARE );
+ rSet.ClearItem( SID_LINE_SQUARE_ARROW );
+ rSet.DisableItem( SID_LINE_SQUARE_ARROW );
+
+ rSet.ClearItem(SID_DRAW_RECT);
+ rSet.DisableItem(SID_DRAW_RECT);
+ rSet.ClearItem(SID_DRAW_RECT_NOFILL);
+ rSet.DisableItem(SID_DRAW_RECT_NOFILL);
+ rSet.ClearItem(SID_DRAW_RECT_ROUND);
+ rSet.DisableItem(SID_DRAW_RECT_ROUND);
+ rSet.ClearItem(SID_DRAW_RECT_ROUND_NOFILL);
+ rSet.DisableItem(SID_DRAW_RECT_ROUND_NOFILL);
+ rSet.ClearItem(SID_DRAW_SQUARE);
+ rSet.DisableItem(SID_DRAW_SQUARE);
+ rSet.ClearItem(SID_DRAW_SQUARE_NOFILL);
+ rSet.DisableItem(SID_DRAW_SQUARE_NOFILL);
+ rSet.ClearItem(SID_DRAW_SQUARE_ROUND);
+ rSet.DisableItem(SID_DRAW_SQUARE_ROUND);
+ rSet.ClearItem(SID_DRAW_SQUARE_ROUND_NOFILL);
+ rSet.DisableItem(SID_DRAW_SQUARE_ROUND_NOFILL);
+ rSet.ClearItem(SID_DRAW_ELLIPSE);
+ rSet.DisableItem(SID_DRAW_ELLIPSE);
+ rSet.ClearItem(SID_DRAW_ELLIPSE_NOFILL);
+ rSet.DisableItem(SID_DRAW_ELLIPSE_NOFILL);
+ rSet.ClearItem(SID_DRAW_CIRCLE);
+ rSet.DisableItem(SID_DRAW_CIRCLE);
+ rSet.ClearItem(SID_DRAW_CIRCLE_NOFILL);
+ rSet.DisableItem(SID_DRAW_CIRCLE_NOFILL);
+ rSet.ClearItem(SID_DRAW_CAPTION);
+ rSet.DisableItem(SID_DRAW_CAPTION);
+ rSet.ClearItem(SID_DRAW_FONTWORK);
+ rSet.DisableItem(SID_DRAW_FONTWORK);
+ rSet.ClearItem(SID_DRAW_FONTWORK_VERTICAL);
+ rSet.DisableItem(SID_DRAW_FONTWORK_VERTICAL);
+ rSet.ClearItem(SID_DRAW_CAPTION_VERTICAL);
+ rSet.DisableItem(SID_DRAW_CAPTION_VERTICAL);
+ rSet.ClearItem(SID_TEXT_FITTOSIZE);
+ rSet.DisableItem(SID_TEXT_FITTOSIZE);
+ rSet.ClearItem(SID_TEXT_FITTOSIZE_VERTICAL);
+ rSet.DisableItem(SID_TEXT_FITTOSIZE_VERTICAL);
+ rSet.ClearItem(SID_TOOL_CONNECTOR);
+ rSet.DisableItem(SID_TOOL_CONNECTOR);
+ rSet.ClearItem(SID_CONNECTOR_ARROW_START);
+ rSet.DisableItem(SID_CONNECTOR_ARROW_START);
+ rSet.ClearItem(SID_CONNECTOR_ARROW_END);
+ rSet.DisableItem(SID_CONNECTOR_ARROW_END);
+ rSet.ClearItem(SID_CONNECTOR_ARROWS);
+ rSet.DisableItem(SID_CONNECTOR_ARROWS);
+ rSet.ClearItem(SID_CONNECTOR_CIRCLE_START);
+ rSet.DisableItem(SID_CONNECTOR_CIRCLE_START);
+ rSet.ClearItem(SID_CONNECTOR_CIRCLE_END);
+ rSet.DisableItem(SID_CONNECTOR_CIRCLE_END);
+ rSet.ClearItem(SID_CONNECTOR_CIRCLES);
+ rSet.DisableItem(SID_CONNECTOR_CIRCLES);
+ rSet.ClearItem(SID_CONNECTOR_LINE);
+ rSet.DisableItem(SID_CONNECTOR_LINE);
+ rSet.ClearItem(SID_CONNECTOR_LINE_ARROW_START);
+ rSet.DisableItem(SID_CONNECTOR_LINE_ARROW_START);
+ rSet.ClearItem(SID_CONNECTOR_LINE_ARROW_END);
+ rSet.DisableItem(SID_CONNECTOR_LINE_ARROW_END);
+ rSet.ClearItem(SID_CONNECTOR_LINE_ARROWS);
+ rSet.DisableItem(SID_CONNECTOR_LINE_ARROWS);
+ rSet.ClearItem(SID_CONNECTOR_LINE_CIRCLE_START);
+ rSet.DisableItem(SID_CONNECTOR_LINE_CIRCLE_START);
+ rSet.ClearItem(SID_CONNECTOR_LINE_CIRCLE_END);
+ rSet.DisableItem(SID_CONNECTOR_LINE_CIRCLE_END);
+ rSet.ClearItem(SID_CONNECTOR_LINE_CIRCLES);
+ rSet.DisableItem(SID_CONNECTOR_LINE_CIRCLES);
+ rSet.ClearItem(SID_CONNECTOR_CURVE);
+ rSet.DisableItem(SID_CONNECTOR_CURVE);
+ rSet.ClearItem(SID_CONNECTOR_CURVE_ARROW_START);
+ rSet.DisableItem(SID_CONNECTOR_CURVE_ARROW_START);
+ rSet.ClearItem(SID_CONNECTOR_CURVE_ARROW_END);
+ rSet.DisableItem(SID_CONNECTOR_CURVE_ARROW_END);
+ rSet.ClearItem(SID_CONNECTOR_CURVE_ARROWS);
+ rSet.DisableItem(SID_CONNECTOR_CURVE_ARROWS);
+ rSet.ClearItem(SID_CONNECTOR_CURVE_CIRCLE_START);
+ rSet.DisableItem(SID_CONNECTOR_CURVE_CIRCLE_START);
+ rSet.ClearItem(SID_CONNECTOR_CURVE_CIRCLE_END);
+ rSet.DisableItem(SID_CONNECTOR_CURVE_CIRCLE_END);
+ rSet.ClearItem(SID_CONNECTOR_CURVE_CIRCLES);
+ rSet.DisableItem(SID_CONNECTOR_CURVE_CIRCLES);
+ rSet.ClearItem(SID_CONNECTOR_LINES);
+ rSet.DisableItem(SID_CONNECTOR_LINES);
+ rSet.ClearItem(SID_CONNECTOR_LINES_ARROW_START);
+ rSet.DisableItem(SID_CONNECTOR_LINES_ARROW_START);
+ rSet.ClearItem(SID_CONNECTOR_LINES_ARROW_END);
+ rSet.DisableItem(SID_CONNECTOR_LINES_ARROW_END);
+ rSet.ClearItem(SID_CONNECTOR_LINES_ARROWS);
+ rSet.DisableItem(SID_CONNECTOR_LINES_ARROWS);
+ rSet.ClearItem(SID_CONNECTOR_LINES_CIRCLE_START);
+ rSet.DisableItem(SID_CONNECTOR_LINES_CIRCLE_START);
+ rSet.ClearItem(SID_CONNECTOR_LINES_CIRCLE_END);
+ rSet.DisableItem(SID_CONNECTOR_LINES_CIRCLE_END);
+ rSet.ClearItem(SID_CONNECTOR_LINES_CIRCLES);
+ rSet.DisableItem(SID_CONNECTOR_LINES_CIRCLES);
+ rSet.ClearItem(SID_DRAW_ARC);
+ rSet.DisableItem(SID_DRAW_ARC);
+ rSet.ClearItem(SID_DRAW_CIRCLEARC);
+ rSet.DisableItem(SID_DRAW_CIRCLEARC);
+ rSet.ClearItem(SID_DRAW_PIE);
+ rSet.DisableItem(SID_DRAW_PIE);
+ rSet.ClearItem(SID_DRAW_PIE_NOFILL);
+ rSet.DisableItem(SID_DRAW_PIE_NOFILL);
+ rSet.ClearItem(SID_DRAW_CIRCLEPIE);
+ rSet.DisableItem(SID_DRAW_CIRCLEPIE);
+ rSet.ClearItem(SID_DRAW_CIRCLEPIE_NOFILL);
+ rSet.DisableItem(SID_DRAW_CIRCLEPIE_NOFILL);
+ rSet.ClearItem(SID_DRAW_ELLIPSECUT);
+ rSet.DisableItem(SID_DRAW_ELLIPSECUT);
+ rSet.ClearItem(SID_DRAW_ELLIPSECUT_NOFILL);
+ rSet.DisableItem(SID_DRAW_ELLIPSECUT_NOFILL);
+ rSet.ClearItem(SID_DRAW_CIRCLECUT);
+ rSet.DisableItem(SID_DRAW_CIRCLECUT);
+ rSet.ClearItem(SID_DRAW_CIRCLECUT_NOFILL);
+ rSet.DisableItem(SID_DRAW_CIRCLECUT_NOFILL);
+ rSet.ClearItem(SID_DRAW_POLYGON);
+ rSet.DisableItem(SID_DRAW_POLYGON);
+ rSet.ClearItem(SID_DRAW_POLYGON_NOFILL);
+ rSet.DisableItem(SID_DRAW_POLYGON_NOFILL);
+ rSet.ClearItem(SID_DRAW_FREELINE);
+ rSet.DisableItem(SID_DRAW_FREELINE);
+ rSet.ClearItem(SID_DRAW_FREELINE_NOFILL);
+ rSet.DisableItem(SID_DRAW_FREELINE_NOFILL);
+ rSet.ClearItem(SID_DRAW_XPOLYGON);
+ rSet.DisableItem(SID_DRAW_XPOLYGON);
+ rSet.ClearItem(SID_DRAW_XPOLYGON_NOFILL);
+ rSet.DisableItem(SID_DRAW_XPOLYGON_NOFILL);
+ rSet.ClearItem(SID_DRAW_BEZIER_FILL);
+ rSet.DisableItem(SID_DRAW_BEZIER_FILL);
+ rSet.ClearItem(SID_DRAW_BEZIER_NOFILL);
+ rSet.DisableItem(SID_DRAW_BEZIER_NOFILL);
+ rSet.ClearItem(SID_3D_CUBE);
+ rSet.DisableItem(SID_3D_CUBE);
+ rSet.ClearItem(SID_3D_SHELL);
+ rSet.DisableItem(SID_3D_SHELL);
+ rSet.ClearItem(SID_3D_SPHERE);
+ rSet.DisableItem(SID_3D_SPHERE);
+ rSet.ClearItem(SID_3D_HALF_SPHERE);
+ rSet.DisableItem(SID_3D_HALF_SPHERE);
+ rSet.ClearItem(SID_3D_CYLINDER);
+ rSet.DisableItem(SID_3D_CYLINDER);
+ rSet.ClearItem(SID_3D_CONE);
+ rSet.DisableItem(SID_3D_CONE);
+ rSet.ClearItem(SID_3D_TORUS);
+ rSet.DisableItem(SID_3D_TORUS);
+ rSet.ClearItem(SID_3D_PYRAMID);
+ rSet.DisableItem(SID_3D_PYRAMID);
+ }
+
+ // Sind die Module verfuegbar?
+
+ if (!SvtModuleOptions().IsCalc())
+ {
+ // remove menu entry if module is not available
+ rSet.Put( SfxVisibilityItem( SID_ATTR_TABLE, sal_False ) );
+ }
+ if (!SvtModuleOptions().IsChart())
+ {
+ rSet.DisableItem( SID_INSERT_DIAGRAM );
+ }
+#ifdef STARIMAGE_AVAILABLE
+ if (!(pApp->HasFeature(SFX_FEATURE_SIMAGE)))
+ {
+ rSet.DisableItem( SID_INSERT_IMAGE );
+ }
+#endif
+ if (!SvtModuleOptions().IsMath())
+ {
+ rSet.DisableItem( SID_INSERT_MATH );
+ }
+
+ rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetViewShellBase() ) );
+ if( (xSlideshow.is() && xSlideshow->isRunning() && (xSlideshow->getAnimationMode() != ANIMATIONMODE_PREVIEW) ) || GetDocSh()->IsPreview() )
+ {
+ // Eigene Slots
+ rSet.DisableItem( SID_PRESENTATION );
+ rSet.DisableItem( SID_ZOOM_IN );
+ rSet.DisableItem( SID_ZOOM_OUT );
+ rSet.DisableItem( SID_ZOOM_PANNING );
+ rSet.DisableItem( SID_ZOOM_NEXT );
+ rSet.DisableItem( SID_ZOOM_PREV );
+ rSet.DisableItem( SID_SIZE_REAL );
+ rSet.DisableItem( SID_SIZE_OPTIMAL );
+ rSet.DisableItem( SID_SIZE_ALL );
+ rSet.DisableItem( SID_SIZE_PAGE_WIDTH );
+ rSet.DisableItem( SID_SIZE_PAGE );
+ rSet.DisableItem( SID_INSERTPAGE );
+ rSet.DisableItem( SID_DUPLICATE_PAGE );
+ rSet.DisableItem( SID_MODIFYPAGE );
+ rSet.DisableItem( SID_RENAMEPAGE );
+ rSet.DisableItem( SID_RENAMEPAGE_QUICK );
+ rSet.DisableItem( SID_DELETE_PAGE );
+ rSet.DisableItem( SID_PAGESETUP );
+
+ if( xSlideshow.is() && xSlideshow->isRunning() )
+ {
+ rSet.ClearItem(SID_OBJECT_ALIGN);
+ rSet.ClearItem(SID_ZOOM_TOOLBOX);
+ rSet.ClearItem(SID_OBJECT_CHOOSE_MODE);
+ rSet.ClearItem(SID_DRAWTBX_TEXT);
+ rSet.ClearItem(SID_DRAWTBX_RECTANGLES);
+ rSet.ClearItem(SID_DRAWTBX_ELLIPSES);
+ rSet.ClearItem(SID_DRAWTBX_LINES);
+ rSet.ClearItem(SID_DRAWTBX_ARROWS);
+ rSet.ClearItem(SID_DRAWTBX_3D_OBJECTS);
+ rSet.ClearItem(SID_DRAWTBX_CONNECTORS);
+ rSet.ClearItem(SID_OBJECT_CHOOSE_MODE );
+ rSet.ClearItem(SID_DRAWTBX_INSERT);
+ rSet.ClearItem(SID_INSERTFILE);
+ rSet.ClearItem(SID_OBJECT_ROTATE);
+ rSet.ClearItem(SID_OBJECT_ALIGN);
+ rSet.ClearItem(SID_POSITION);
+ rSet.ClearItem(SID_FM_CONFIG);
+ rSet.ClearItem(SID_ANIMATION_EFFECTS);
+ rSet.ClearItem(SID_ANIMATION_OBJECTS);
+ rSet.ClearItem(SID_3D_WIN);
+
+ rSet.DisableItem(SID_OBJECT_ALIGN);
+ rSet.DisableItem(SID_ZOOM_TOOLBOX);
+ rSet.DisableItem(SID_OBJECT_CHOOSE_MODE);
+ rSet.DisableItem(SID_DRAWTBX_TEXT);
+ rSet.DisableItem(SID_DRAWTBX_RECTANGLES);
+ rSet.DisableItem(SID_DRAWTBX_ELLIPSES);
+ rSet.DisableItem(SID_DRAWTBX_LINES);
+ rSet.DisableItem(SID_DRAWTBX_ARROWS);
+ rSet.DisableItem(SID_DRAWTBX_3D_OBJECTS);
+ rSet.DisableItem(SID_DRAWTBX_CONNECTORS);
+ rSet.DisableItem(SID_OBJECT_CHOOSE_MODE );
+ rSet.DisableItem(SID_DRAWTBX_INSERT);
+ rSet.DisableItem(SID_INSERTFILE);
+ rSet.DisableItem(SID_OBJECT_ROTATE);
+ rSet.DisableItem(SID_OBJECT_ALIGN);
+ rSet.DisableItem(SID_POSITION);
+ rSet.DisableItem(SID_FM_CONFIG);
+ rSet.DisableItem(SID_ANIMATION_EFFECTS);
+ rSet.DisableItem(SID_ANIMATION_OBJECTS);
+ rSet.DisableItem(SID_3D_WIN);
+ }
+ }
+
+ // #i102735# discussed with CL: removed for performance reasons
+ #if 0
+ if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_INSERT_SOUND ) ||
+ SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_INSERT_VIDEO ) )
+ {
+ ///////////////////////////////////////////////////////////////////////
+ // Menuoption : Insert->Object->Sound and Insert->Object->Video
+ // diable, if there isn't installed any appropriate plugin
+ //
+ if (!SvxPluginFileDlg::IsAvailable (SID_INSERT_SOUND))
+ rSet.DisableItem (SID_INSERT_SOUND);
+ if (!SvxPluginFileDlg::IsAvailable (SID_INSERT_VIDEO))
+ rSet.DisableItem (SID_INSERT_VIDEO);
+ }
+ #endif
+
+ ///////////////////////////////////////////////////////////////////////
+ // Menuoption: Change->Convert->To Bitmap, Change->Convert->To Metafile
+ // disable, if there only Bitmap or Metafiles marked
+ // Menuoption: Format->Area, Format->Line
+ // disabled, if the marked objects not able to handle
+ // these attributes
+ //
+
+ bool bSingleGraphicSelected = false;
+
+ if (!mpDrawView->AreObjectsMarked())
+ {
+ rSet.DisableItem (SID_CONVERT_TO_METAFILE);
+ rSet.DisableItem (SID_CONVERT_TO_BITMAP);
+ }
+ else
+ {
+ // get marklist
+ SdrMarkList aMarkList = mpDrawView->GetMarkedObjectList();
+
+ BOOL bFoundBitmap = FALSE;
+ BOOL bFoundMetafile = FALSE;
+ BOOL bFoundObjNoLine = FALSE;
+ BOOL bFoundObjNoArea = FALSE;
+ BOOL bFoundNoGraphicObj = FALSE;
+ BOOL bFoundAny = FALSE;
+ bool bFoundTable = false;
+
+// const int nMarkCount = (int) aMarkList.GetMarkCount();
+ for (ULONG i=0; i < nMarkCount && !bFoundAny; i++)
+ {
+ SdrObject* pObj= aMarkList.GetMark(i)->GetMarkedSdrObj();
+ UINT16 nId = pObj->GetObjIdentifier();
+ UINT32 nInv = pObj->GetObjInventor();
+
+ if(nInv == SdrInventor)
+ {
+ // 2D objects
+ switch( nId )
+ {
+ case OBJ_PATHLINE :
+ case OBJ_PLIN :
+ case OBJ_LINE:
+ case OBJ_FREELINE :
+ case OBJ_EDGE:
+ case OBJ_CARC :
+ bFoundObjNoArea = TRUE;
+ bFoundNoGraphicObj = TRUE;
+ break;
+ case OBJ_OLE2 :
+ bFoundObjNoLine = TRUE;
+ bFoundObjNoArea = TRUE;
+ bFoundNoGraphicObj = TRUE;
+ break;
+ case OBJ_GRAF :
+ bSingleGraphicSelected = nMarkCount == 1;
+ switch ( ((SdrGrafObj*)pObj)->GetGraphicType() )
+ {
+ case GRAPHIC_BITMAP :
+ bFoundBitmap = TRUE;
+ break;
+ case GRAPHIC_GDIMETAFILE :
+ bFoundMetafile = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ // #i25616# bFoundObjNoLine = TRUE;
+ // #i25616# bFoundObjNoArea = TRUE;
+ break;
+ case OBJ_TABLE:
+ bFoundTable = true;
+ break;
+ default :
+ bFoundAny = TRUE;
+ }
+ }
+ else if(nInv == E3dInventor)
+ {
+ // 3D objects
+ bFoundAny = TRUE;
+ }
+ }
+
+ if( bFoundTable )
+ rSet.DisableItem( SID_ATTRIBUTES_LINE );
+
+ if (!bFoundAny)
+ {
+ // Disable menuitem for area-dialog
+ if( bFoundObjNoArea ) // #i25616#
+ rSet.DisableItem( SID_ATTRIBUTES_AREA );
+
+ // Disable menuitem for line-dialog
+ if( bFoundObjNoLine )
+ rSet.DisableItem( SID_ATTRIBUTES_LINE );
+
+ if( bFoundBitmap && !bFoundMetafile && !bFoundNoGraphicObj ) // only Bitmaps marked
+ rSet.DisableItem( SID_CONVERT_TO_BITMAP );
+ else if( !bFoundBitmap && bFoundMetafile && !bFoundNoGraphicObj ) // only Metafiles marked
+ rSet.DisableItem( SID_CONVERT_TO_METAFILE );
+ else if( !bFoundBitmap && !bFoundMetafile && !bFoundNoGraphicObj ) // nothing to do
+ {
+ rSet.DisableItem( SID_CONVERT_TO_BITMAP );
+ rSet.DisableItem( SID_CONVERT_TO_METAFILE );
+ }
+ }
+ }
+
+ if( !bSingleGraphicSelected )
+ {
+ rSet.DisableItem (SID_OBJECT_CROP);
+ rSet.DisableItem (SID_ATTR_GRAF_CROP);
+ }
+
+ // #96090# moved SID_UNDO to ViewShell::GetMenuState()
+ // #96090# moved SID_REDO to ViewShell::GetMenuState()
+ // #96090# moved SID_GETUNDOSTRINGS to ViewShell::GetMenuState()
+ // #96090# moved SID_GETREDOSTRINGS to ViewShell::GetMenuState()
+
+ ///////////////////////////////////////////////////////////////////////
+ // Menuoption: Edit->Hyperlink
+ // Disable, if there is no hyperlink
+ //
+ sal_Bool bDisableEditHyperlink = sal_True;
+ if( mpDrawView->AreObjectsMarked() && ( mpDrawView->GetMarkedObjectList().GetMarkCount() == 1 ) )
+ {
+ if( mpDrawView->IsTextEdit() )
+ {
+ OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
+ if (pOLV)
+ {
+ const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
+ if (pFieldItem)
+ {
+ ESelection aSel = pOLV->GetSelection();
+ if ( abs( aSel.nEndPos - aSel.nStartPos ) == 1 )
+ {
+ const SvxFieldData* pField = pFieldItem->GetField();
+ if ( pField->ISA(SvxURLField) )
+ bDisableEditHyperlink = sal_False;
+ }
+ }
+ }
+ }
+ else
+ {
+ SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, mpDrawView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj());
+
+ if ( pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor() )
+ {
+ uno::Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel() );
+ if( xControlModel.is() )
+ {
+ uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY );
+ if( xPropSet.is() )
+ {
+ uno::Reference< beans::XPropertySetInfo > xPropInfo( xPropSet->getPropertySetInfo() );
+ if( xPropInfo.is() && xPropInfo->hasPropertyByName(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetURL"))))
+ {
+ bDisableEditHyperlink = sal_False;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //highlight selected custom shape
+ {
+ USHORT nCurrentSId = 0;
+ if(HasCurrentFunction())
+ nCurrentSId = GetCurrentFunction()->GetSlotID();
+
+ if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_BASIC ) )
+ rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_BASIC, SID_DRAWTBX_CS_BASIC == nCurrentSId ));
+ if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_SYMBOL ) )
+ rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_SYMBOL, SID_DRAWTBX_CS_SYMBOL == nCurrentSId ));
+ if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_ARROW ) )
+ rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_ARROW, SID_DRAWTBX_CS_ARROW == nCurrentSId ));
+ if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_FLOWCHART ) )
+ rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_FLOWCHART, SID_DRAWTBX_CS_FLOWCHART == nCurrentSId ));
+ if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_CALLOUT ) )
+ rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_CALLOUT,SID_DRAWTBX_CS_CALLOUT == nCurrentSId ));
+ if ( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_DRAWTBX_CS_STAR ) )
+ rSet.Put(SfxBoolItem(SID_DRAWTBX_CS_STAR, SID_DRAWTBX_CS_STAR == nCurrentSId ));
+ }
+
+ if ( bDisableEditHyperlink || GetDocSh()->IsReadOnly() )
+ rSet.DisableItem( SID_EDIT_HYPERLINK );
+
+ if ( bDisableEditHyperlink )
+ rSet.DisableItem( SID_OPEN_HYPERLINK );
+
+#if defined WIN || defined WNT || defined UNX
+ if( !mxScannerManager.is() )
+ {
+ rSet.DisableItem( SID_TWAIN_SELECT );
+ rSet.DisableItem( SID_TWAIN_TRANSFER );
+ }
+#endif
+
+// Fuer Win16
+#ifndef SOLAR_JAVA
+ rSet.DisableItem( SID_INSERT_APPLET );
+#endif
+
+ // Set the state of two entries in the 'Slide' context sub-menu
+ // concerning the visibility of master page background and master page
+ // shapes.
+ if (rSet.GetItemState(SID_DISPLAY_MASTER_BACKGROUND) == SFX_ITEM_AVAILABLE
+ || rSet.GetItemState(SID_DISPLAY_MASTER_OBJECTS) == SFX_ITEM_AVAILABLE)
+ {
+ SdPage* pPage = GetActualPage();
+ if (pPage != NULL
+ && GetDoc() != NULL)
+ {
+ SetOfByte aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers();
+ SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
+ BYTE aBackgroundId = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), FALSE);
+ BYTE aObjectId = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), FALSE);
+ rSet.Put(SfxBoolItem(SID_DISPLAY_MASTER_BACKGROUND,
+ aVisibleLayers.IsSet(aBackgroundId)));
+ rSet.Put(SfxBoolItem(SID_DISPLAY_MASTER_OBJECTS,
+ aVisibleLayers.IsSet(aObjectId)));
+ }
+ }
+
+ GetModeSwitchingMenuState (rSet);
+}
+
+void DrawViewShell::GetModeSwitchingMenuState (SfxItemSet &rSet)
+{
+ //draview
+ rSet.Put(SfxBoolItem(SID_DIAMODE, FALSE));
+ rSet.Put(SfxBoolItem(SID_OUTLINEMODE, FALSE));
+ if (mePageKind == PK_NOTES)
+ {
+ rSet.Put(SfxBoolItem(SID_DRAWINGMODE, FALSE));
+ rSet.Put(SfxBoolItem(SID_NOTESMODE, TRUE));
+ rSet.Put(SfxBoolItem(SID_HANDOUTMODE, FALSE));
+ }
+ else if (mePageKind == PK_HANDOUT)
+ {
+ rSet.Put(SfxBoolItem(SID_DRAWINGMODE, FALSE));
+ rSet.Put(SfxBoolItem(SID_NOTESMODE, FALSE));
+ rSet.Put(SfxBoolItem(SID_HANDOUTMODE, TRUE));
+ }
+ else
+ {
+ rSet.Put(SfxBoolItem(SID_DRAWINGMODE, TRUE));
+ rSet.Put(SfxBoolItem(SID_NOTESMODE, FALSE));
+ rSet.Put(SfxBoolItem(SID_HANDOUTMODE, FALSE));
+ }
+
+ // #101976# Removed [GetDocSh()->GetCurrentFunction() ||] from the following
+ // clause because the current function of the docshell can only be
+ // search and replace or spell checking and in that case switching the
+ // view mode is allowed.
+ const bool bIsRunning = SlideShow::IsRunning(GetViewShellBase());
+
+ if (GetViewFrame()->GetFrame().IsInPlace() || bIsRunning)
+ {
+ if ( !GetViewFrame()->GetFrame().IsInPlace() )
+ {
+ rSet.ClearItem( SID_DRAWINGMODE );
+ rSet.DisableItem( SID_DRAWINGMODE );
+ }
+
+ rSet.ClearItem( SID_NOTESMODE );
+ rSet.DisableItem( SID_NOTESMODE );
+
+ rSet.ClearItem( SID_HANDOUTMODE );
+ rSet.DisableItem( SID_HANDOUTMODE );
+
+ rSet.ClearItem( SID_OUTLINEMODE );
+ rSet.DisableItem( SID_OUTLINEMODE );
+
+ rSet.ClearItem( SID_DIAMODE );
+ rSet.DisableItem( SID_DIAMODE );
+ }
+
+ if (GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED)
+ {
+ // Outplace-Edit: Kein Umschalten erlauben
+ rSet.ClearItem( SID_OUTLINEMODE );
+ rSet.DisableItem( SID_OUTLINEMODE );
+
+ rSet.ClearItem( SID_DIAMODE );
+ rSet.DisableItem( SID_DIAMODE );
+
+ rSet.ClearItem( SID_NOTESMODE );
+ rSet.DisableItem( SID_NOTESMODE );
+
+ rSet.ClearItem( SID_HANDOUTMODE );
+ rSet.DisableItem( SID_HANDOUTMODE );
+ }
+
+ svx::ExtrusionBar::getState( mpDrawView, rSet );
+ svx::FontworkBar::getState( mpDrawView, rSet );
+}
+
+
+
+void DrawViewShell::GetState (SfxItemSet& rSet)
+{
+ // Iterate over all requested items in the set.
+ SfxWhichIter aIter( rSet );
+ USHORT nWhich = aIter.FirstWhich();
+ while (nWhich)
+ {
+ switch (nWhich)
+ {
+ case SID_SEARCH_ITEM:
+ case SID_SEARCH_OPTIONS:
+ // Forward this request to the the common (old) code of the
+ // document shell.
+ GetDocSh()->GetState (rSet);
+ break;
+ default:
+ OSL_TRACE ("DrawViewShell::GetState(): can not handle which id %d", nWhich);
+ break;
+ }
+ nWhich = aIter.NextWhich();
+ }
+}
+
+
+
+
+void DrawViewShell::Execute (SfxRequest& rReq)
+{
+ if(SlideShow::IsRunning(GetViewShellBase()))
+ {
+ // Do not execute anything during a native slide show.
+ return;
+ }
+
+ switch (rReq.GetSlot())
+ {
+ case SID_SEARCH_ITEM:
+ // Forward this request to the the common (old) code of the
+ // document shell.
+ GetDocSh()->Execute (rReq);
+ break;
+
+ case SID_SPELL_DIALOG:
+ {
+ SfxViewFrame* pViewFrame = GetViewFrame();
+ if (rReq.GetArgs() != NULL)
+ pViewFrame->SetChildWindow (SID_SPELL_DIALOG,
+ ((const SfxBoolItem&) (rReq.GetArgs()->
+ Get(SID_SPELL_DIALOG))).GetValue());
+ else
+ pViewFrame->ToggleChildWindow(SID_SPELL_DIALOG);
+
+ pViewFrame->GetBindings().Invalidate(SID_SPELL_DIALOG);
+ rReq.Ignore ();
+ }
+ break;
+
+ default:
+ OSL_TRACE ("DrawViewShell::Execute(): can not handle slot %d", rReq.GetSlot());
+ break;
+ }
+}
+
+} // end of namespace sd