office-gobmx/sd/source/ui/view/drviews7.cxx
2009-09-08 10:44:42 +00:00

1716 lines
62 KiB
C++
Raw Blame History

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: drviews7.cxx,v $
* $Revision: 1.78 $
*
* 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 <svx/eeitem.hxx>
#ifndef _FLDITEM_HXX
#include <svx/flditem.hxx>
#endif
#ifndef _SVXIDS_HXX
#include <svx/svxids.hrc>
#endif
#include <svx/svdpagv.hxx>
#include <svx/clipfmtitem.hxx>
#include <svx/fmshell.hxx>
#include <svtools/eitem.hxx>
#include <svtools/aeitem.hxx>
#include <svtools/stritem.hxx>
#include <svtools/visitem.hxx>
#include <svtools/whiter.hxx>
#include <sfx2/dispatch.hxx>
#include <svx/svdograf.hxx>
#include <svx/unolingu.hxx>
#include <svx/extrusionbar.hxx>
#include <svx/fontworkbar.hxx>
// #UndoRedo#
#include <svtools/slstitm.hxx>
#include <sfx2/app.hxx>
#include <svtools/insdlg.hxx>
#include <svtools/moduleoptions.hxx>
#include <svtools/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 "formatclipboard.hxx"
#include "ViewShellBase.hxx"
#include "ViewShellManager.hxx"
#include "LayerTabBar.hxx"
#include "fupoor.hxx"
#include "Window.hxx"
#include "fuediglu.hxx"
#include "fubullet.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_PASTE2 );
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
{
SdFormatClipboard* pFormatClipboard = GetDocSh()->mpFormatClipboard;
bool bHasContent = pFormatClipboard && pFormatClipboard->HasContent();
rSet.Put(SfxBoolItem(SID_FORMATPAINTBRUSH,bHasContent));
if( ( nMarkCount!=1 && !bHasContent ) || mpDrawView->IsTextEdit() )
rSet.DisableItem( SID_FORMATPAINTBRUSH );
if( !bHasContent && nMarkCount==1 )
{
SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
if( !pFormatClipboard->CanCopyThisType(pObj->GetObjInventor(),pObj->GetObjIdentifier()) )
rSet.DisableItem( SID_FORMATPAINTBRUSH );
}
}
// 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_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);
}
}
// 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_PASTE2 ) ||
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_PASTE2 );
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_PASTE2 );
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