blob: cede030a8bf40c368cc2874b112928f67333dc32 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
//------------------------------------------------------------------
#include <editeng/eeitem.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/request.hxx>
#include <sfx2/bindings.hxx>
#include <tools/urlobj.hxx>
//CHINA001 #include <svx/dlgname.hxx>
#include <svx/svxdlg.hxx> //CHINA001
#include <svx/dialogs.hrc> //CHINA001
#include <svx/fmglob.hxx>
#include <svx/hlnkitem.hxx>
#include <svx/fontwork.hxx>
#include <svx/svdocapt.hxx>
#include <svx/svdoole2.hxx>
#include <svx/svdouno.hxx>
#include <svx/svdpage.hxx>
#include <svx/svdundo.hxx>
#include <svx/xdef.hxx>
#include <vcl/msgbox.hxx>
#include <svx/extrusionbar.hxx>
#include <svx/fontworkbar.hxx>
#include <sfx2/docfile.hxx>
#include <com/sun/star/form/FormButtonType.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#include <com/sun/star/awt/XControlModel.hpp>
#include "drawsh.hxx"
#include "drawview.hxx"
#include "viewdata.hxx"
#include "tabvwsh.hxx"
#include "docsh.hxx"
//CHINA001 #include "strindlg.hxx"
#include "scresid.hxx"
#include "undotab.hxx"
#include "drwlayer.hxx"
#include "userdat.hxx"
#include "postit.hxx"
#include "sc.hrc"
using namespace com::sun::star;
//------------------------------------------------------------------
void ScDrawShell::GetHLinkState( SfxItemSet& rSet ) // Hyperlink
{
ScDrawView* pView = pViewData->GetScDrawView();
const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
sal_uLong nMarkCount = rMarkList.GetMarkCount();
// Hyperlink
SvxHyperlinkItem aHLinkItem;
if ( nMarkCount == 1 ) // URL-Button markiert ?
{
SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
#ifdef ISSUE66550_HLINK_FOR_SHAPES
ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( pObj );
if ( pInfo && (pInfo->GetHlink().getLength() > 0) )
{
aHLinkItem.SetURL( pInfo->GetHlink() );
aHLinkItem.SetInsertMode(HLINK_FIELD);
}
#endif
SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, pObj);
if (pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor())
{
uno::Reference<awt::XControlModel> xControlModel = pUnoCtrl->GetUnoControlModel();
DBG_ASSERT( xControlModel.is(), "UNO-Control ohne Model" );
if( !xControlModel.is() )
return;
uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY );
uno::Reference< beans::XPropertySetInfo > xInfo = xPropSet->getPropertySetInfo();
rtl::OUString sPropButtonType = rtl::OUString::createFromAscii( "ButtonType" );
rtl::OUString sPropTargetURL = rtl::OUString::createFromAscii( "TargetURL" );
rtl::OUString sPropTargetFrame = rtl::OUString::createFromAscii( "TargetFrame" );
rtl::OUString sPropLabel = rtl::OUString::createFromAscii( "Label" );
if(xInfo->hasPropertyByName( sPropButtonType ))
{
uno::Any aAny = xPropSet->getPropertyValue( sPropButtonType );
form::FormButtonType eTmp;
if ( (aAny >>= eTmp) && eTmp == form::FormButtonType_URL )
{
rtl::OUString sTmp;
// Label
if(xInfo->hasPropertyByName( sPropLabel ))
{
aAny = xPropSet->getPropertyValue( sPropLabel );
if ( (aAny >>= sTmp) && sTmp.getLength() )
{
aHLinkItem.SetName(sTmp);
}
}
// URL
if(xInfo->hasPropertyByName( sPropTargetURL ))
{
aAny = xPropSet->getPropertyValue( sPropTargetURL );
if ( (aAny >>= sTmp) && sTmp.getLength() )
{
aHLinkItem.SetURL(sTmp);
}
}
// Target
if(xInfo->hasPropertyByName( sPropTargetFrame ))
{
aAny = xPropSet->getPropertyValue( sPropTargetFrame );
if ( (aAny >>= sTmp) && sTmp.getLength() )
{
aHLinkItem.SetTargetFrame(sTmp);
}
}
aHLinkItem.SetInsertMode(HLINK_BUTTON);
}
}
}
}
rSet.Put(aHLinkItem);
}
void ScDrawShell::ExecuteHLink( SfxRequest& rReq )
{
const SfxItemSet* pReqArgs = rReq.GetArgs();
sal_uInt16 nSlot = rReq.GetSlot();
switch ( nSlot )
{
case SID_HYPERLINK_SETLINK:
if( pReqArgs )
{
const SfxPoolItem* pItem;
if ( pReqArgs->GetItemState( SID_HYPERLINK_SETLINK, sal_True, &pItem ) == SFX_ITEM_SET )
{
const SvxHyperlinkItem* pHyper = (const SvxHyperlinkItem*) pItem;
const String& rName = pHyper->GetName();
const String& rURL = pHyper->GetURL();
const String& rTarget = pHyper->GetTargetFrame();
SvxLinkInsertMode eMode = pHyper->GetInsertMode();
sal_Bool bDone = sal_False;
if ( eMode == HLINK_FIELD || eMode == HLINK_BUTTON )
{
ScDrawView* pView = pViewData->GetScDrawView();
const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
if ( rMarkList.GetMarkCount() == 1 )
{
SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, pObj );
if (pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor())
{
uno::Reference<awt::XControlModel> xControlModel =
pUnoCtrl->GetUnoControlModel();
DBG_ASSERT( xControlModel.is(), "UNO-Control ohne Model" );
if( !xControlModel.is() )
return;
uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY );
uno::Reference< beans::XPropertySetInfo > xInfo = xPropSet->getPropertySetInfo();
rtl::OUString sPropTargetURL =
rtl::OUString::createFromAscii( "TargetURL" );
// Darf man eine URL an dem Objekt setzen?
if (xInfo->hasPropertyByName( sPropTargetURL ))
{
// Ja!
rtl::OUString sPropButtonType =
rtl::OUString::createFromAscii( "ButtonType" );
rtl::OUString sPropTargetFrame =
rtl::OUString::createFromAscii( "TargetFrame" );
rtl::OUString sPropLabel =
rtl::OUString::createFromAscii( "Label" );
uno::Any aAny;
if ( xInfo->hasPropertyByName( sPropLabel ) )
{
aAny <<= rtl::OUString(rName);
xPropSet->setPropertyValue( sPropLabel, aAny );
}
::rtl::OUString aTmp = INetURLObject::GetAbsURL( pViewData->GetDocShell()->GetMedium()->GetBaseURL(), rURL );
aAny <<= aTmp;
xPropSet->setPropertyValue( sPropTargetURL, aAny );
if( rTarget.Len() && xInfo->hasPropertyByName( sPropTargetFrame ) )
{
aAny <<= rtl::OUString(rTarget);
xPropSet->setPropertyValue( sPropTargetFrame, aAny );
}
if ( xInfo->hasPropertyByName( sPropButtonType ) )
{
form::FormButtonType eButtonType = form::FormButtonType_URL;
aAny <<= eButtonType;
xPropSet->setPropertyValue( sPropButtonType, aAny );
}
//! Undo ???
pViewData->GetDocShell()->SetDocumentModified();
bDone = sal_True;
}
}
#ifdef ISSUE66550_HLINK_FOR_SHAPES
else
{
SetHlinkForObject( pObj, rURL );
bDone = sal_True;
}
#endif
}
}
if (!bDone)
pViewData->GetViewShell()->
InsertURL( rName, rURL, rTarget, (sal_uInt16) eMode );
// InsertURL an der ViewShell schaltet bei "Text" die DrawShell ab !!!
}
}
break;
default:
DBG_ERROR("falscher Slot");
}
}
sal_uInt16 ScGetFontWorkId(); // wegen CLOOKs - in drtxtob2
//------------------------------------------------------------------
//
// Funktionen auf Drawing-Objekten
//
void ScDrawShell::ExecDrawFunc( SfxRequest& rReq )
{
SfxBindings& rBindings = pViewData->GetBindings();
ScTabView* pTabView = pViewData->GetView();
ScDrawView* pView = pTabView->GetScDrawView();
const SfxItemSet *pArgs = rReq.GetArgs();
sal_uInt16 nSlotId = rReq.GetSlot();
//!!!
// wer weiss, wie lange das funktioniert? (->vom Abreisscontrol funktioniert es)
//
if (nSlotId == SID_OBJECT_ALIGN && pArgs)
nSlotId = SID_OBJECT_ALIGN + ((SfxEnumItem&)pArgs->Get(SID_OBJECT_ALIGN)).GetValue() + 1;
switch (nSlotId)
{
case SID_OBJECT_HEAVEN:
pView->SetMarkedToLayer( SC_LAYER_FRONT );
rBindings.Invalidate(SID_OBJECT_HEAVEN);
rBindings.Invalidate(SID_OBJECT_HELL);
break;
case SID_OBJECT_HELL:
pView->SetMarkedToLayer( SC_LAYER_BACK );
rBindings.Invalidate(SID_OBJECT_HEAVEN);
rBindings.Invalidate(SID_OBJECT_HELL);
// leave draw shell if nothing selected (layer may be locked)
pViewData->GetViewShell()->UpdateDrawShell();
break;
case SID_FRAME_TO_TOP:
pView->PutMarkedToTop();
break;
case SID_FRAME_TO_BOTTOM:
pView->PutMarkedToBtm();
break;
case SID_FRAME_UP:
pView->MovMarkedToTop();
break;
case SID_FRAME_DOWN:
pView->MovMarkedToBtm();
break;
case SID_GROUP:
pView->GroupMarked();
break;
case SID_UNGROUP:
pView->UnGroupMarked();
break;
case SID_ENTER_GROUP:
pView->EnterMarkedGroup();
break;
case SID_LEAVE_GROUP:
pView->LeaveOneGroup();
break;
case SID_MIRROR_HORIZONTAL:
case SID_FLIP_HORIZONTAL:
pView->MirrorAllMarkedHorizontal();
rBindings.Invalidate( SID_ATTR_TRANSFORM_ANGLE );
break;
case SID_MIRROR_VERTICAL:
case SID_FLIP_VERTICAL:
pView->MirrorAllMarkedVertical();
rBindings.Invalidate( SID_ATTR_TRANSFORM_ANGLE );
break;
case SID_OBJECT_ALIGN_LEFT:
case SID_ALIGN_ANY_LEFT:
if (pView->IsAlignPossible())
pView->AlignMarkedObjects(SDRHALIGN_LEFT, SDRVALIGN_NONE);
break;
case SID_OBJECT_ALIGN_CENTER:
case SID_ALIGN_ANY_HCENTER:
if (pView->IsAlignPossible())
pView->AlignMarkedObjects(SDRHALIGN_CENTER, SDRVALIGN_NONE);
break;
case SID_OBJECT_ALIGN_RIGHT:
case SID_ALIGN_ANY_RIGHT:
if (pView->IsAlignPossible())
pView->AlignMarkedObjects(SDRHALIGN_RIGHT, SDRVALIGN_NONE);
break;
case SID_OBJECT_ALIGN_UP:
case SID_ALIGN_ANY_TOP:
if (pView->IsAlignPossible())
pView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_TOP);
break;
case SID_OBJECT_ALIGN_MIDDLE:
case SID_ALIGN_ANY_VCENTER:
if (pView->IsAlignPossible())
pView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_CENTER);
break;
case SID_OBJECT_ALIGN_DOWN:
case SID_ALIGN_ANY_BOTTOM:
if (pView->IsAlignPossible())
pView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_BOTTOM);
break;
case SID_DELETE:
case SID_DELETE_CONTENTS:
pView->DeleteMarked();
pViewData->GetViewShell()->UpdateDrawShell();
break;
case SID_CUT:
pView->DoCut();
pViewData->GetViewShell()->UpdateDrawShell();
break;
case SID_COPY:
pView->DoCopy();
break;
case SID_PASTE:
DBG_ERROR( "SdrView::PasteClipboard not supported anymore" );
// pView->PasteClipboard( pWin );
break;
case SID_SELECTALL:
pView->MarkAll();
break;
case SID_ANCHOR_PAGE:
pView->SetAnchor( SCA_PAGE );
rBindings.Invalidate( SID_ANCHOR_PAGE );
rBindings.Invalidate( SID_ANCHOR_CELL );
break;
case SID_ANCHOR_CELL:
pView->SetAnchor( SCA_CELL );
rBindings.Invalidate( SID_ANCHOR_PAGE );
rBindings.Invalidate( SID_ANCHOR_CELL );
break;
case SID_ANCHOR_TOGGLE:
{
switch( pView->GetAnchor() )
{
case SCA_CELL:
pView->SetAnchor( SCA_PAGE );
break;
default:
pView->SetAnchor( SCA_CELL );
break;
}
}
rBindings.Invalidate( SID_ANCHOR_PAGE );
rBindings.Invalidate( SID_ANCHOR_CELL );
break;
case SID_OBJECT_ROTATE:
{
SdrDragMode eMode;
if (pView->GetDragMode() == SDRDRAG_ROTATE)
eMode = SDRDRAG_MOVE;
else
eMode = SDRDRAG_ROTATE;
pView->SetDragMode( eMode );
rBindings.Invalidate( SID_OBJECT_ROTATE );
rBindings.Invalidate( SID_OBJECT_MIRROR );
if (eMode == SDRDRAG_ROTATE && !pView->IsFrameDragSingles())
{
pView->SetFrameDragSingles( sal_True );
rBindings.Invalidate( SID_BEZIER_EDIT );
}
}
break;
case SID_OBJECT_MIRROR:
{
SdrDragMode eMode;
if (pView->GetDragMode() == SDRDRAG_MIRROR)
eMode = SDRDRAG_MOVE;
else
eMode = SDRDRAG_MIRROR;
pView->SetDragMode( eMode );
rBindings.Invalidate( SID_OBJECT_ROTATE );
rBindings.Invalidate( SID_OBJECT_MIRROR );
if (eMode == SDRDRAG_MIRROR && !pView->IsFrameDragSingles())
{
pView->SetFrameDragSingles( sal_True );
rBindings.Invalidate( SID_BEZIER_EDIT );
}
}
break;
case SID_BEZIER_EDIT:
{
sal_Bool bOld = pView->IsFrameDragSingles();
pView->SetFrameDragSingles( !bOld );
rBindings.Invalidate( SID_BEZIER_EDIT );
if (bOld && pView->GetDragMode() != SDRDRAG_MOVE)
{
pView->SetDragMode( SDRDRAG_MOVE );
rBindings.Invalidate( SID_OBJECT_ROTATE );
rBindings.Invalidate( SID_OBJECT_MIRROR );
}
}
break;
case SID_FONTWORK:
{
sal_uInt16 nId = ScGetFontWorkId();
SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame();
if ( rReq.GetArgs() )
pViewFrm->SetChildWindow( nId,
((const SfxBoolItem&)
(rReq.GetArgs()->Get(SID_FONTWORK))).
GetValue() );
else
pViewFrm->ToggleChildWindow( nId );
rBindings.Invalidate( SID_FONTWORK );
rReq.Done();
}
break;
case SID_ORIGINALSIZE:
pView->SetMarkedOriginalSize();
break;
case SID_ENABLE_HYPHENATION:
{
SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, SID_ENABLE_HYPHENATION, sal_False);
if( pItem )
{
SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE );
sal_Bool bValue = ( (const SfxBoolItem*) pItem)->GetValue();
aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, bValue ) );
pView->SetAttributes( aSet );
}
rReq.Done();
}
break;
case SID_RENAME_OBJECT:
{
if(1L == pView->GetMarkedObjectCount())
{
// #i68101#
SdrObject* pSelected = pView->GetMarkedObjectByIndex(0L);
OSL_ENSURE(pSelected, "ScDrawShell::ExecDrawFunc: nMarkCount, but no object (!)");
if(SC_LAYER_INTERN != pSelected->GetLayer())
{
String aName(pSelected->GetName());
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "Dialogdiet fail!");
AbstractSvxObjectNameDialog* pDlg = pFact->CreateSvxObjectNameDialog(NULL, aName);
OSL_ENSURE(pDlg, "Dialogdiet fail!");
pDlg->SetCheckNameHdl(LINK(this, ScDrawShell, NameObjectHdl));
if(RET_OK == pDlg->Execute())
{
ScDocShell* pDocSh = pViewData->GetDocShell();
pDlg->GetName(aName);
if(aName != pSelected->GetName())
{
// handle name change
const sal_uInt16 nObjType(pSelected->GetObjIdentifier());
if(OBJ_GRAF == nObjType && 0L == aName.Len())
{
// graphics objects must have names
// (all graphics are supposed to be in the navigator)
ScDrawLayer* pModel = pViewData->GetDocument()->GetDrawLayer();
if(pModel)
{
aName = pModel->GetNewGraphicName();
}
}
// An undo action for renaming is missing in svdraw (99363).
// For OLE objects (which can be identified using the persist name),
// ScUndoRenameObject can be used until there is a common action for all objects.
if(OBJ_OLE2 == nObjType)
{
const String aPersistName = static_cast<SdrOle2Obj*>(pSelected)->GetPersistName();
if(aPersistName.Len())
{
pDocSh->GetUndoManager()->AddUndoAction(
new ScUndoRenameObject(pDocSh, aPersistName, pSelected->GetName(), aName));
}
}
// set new name
pSelected->SetName(aName);
}
// ChartListenerCollectionNeedsUpdate is needed for Navigator update
pDocSh->GetDocument()->SetChartListenerCollectionNeedsUpdate( sal_True );
pDocSh->SetDrawModified();
}
delete pDlg;
}
}
break;
}
// #i68101#
case SID_TITLE_DESCRIPTION_OBJECT:
{
if(1L == pView->GetMarkedObjectCount())
{
SdrObject* pSelected = pView->GetMarkedObjectByIndex(0L);
OSL_ENSURE(pSelected, "ScDrawShell::ExecDrawFunc: nMarkCount, but no object (!)");
if(SC_LAYER_INTERN != pSelected->GetLayer())
{
String aTitle(pSelected->GetTitle());
String aDescription(pSelected->GetDescription());
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "Dialogdiet fail!");
AbstractSvxObjectTitleDescDialog* pDlg = pFact->CreateSvxObjectTitleDescDialog(NULL, aTitle, aDescription);
OSL_ENSURE(pDlg, "Dialogdiet fail!");
if(RET_OK == pDlg->Execute())
{
ScDocShell* pDocSh = pViewData->GetDocShell();
// handle Title and Description
pDlg->GetTitle(aTitle);
pDlg->GetDescription(aDescription);
pSelected->SetTitle(aTitle);
pSelected->SetDescription(aDescription);
// ChartListenerCollectionNeedsUpdate is needed for Navigator update
pDocSh->GetDocument()->SetChartListenerCollectionNeedsUpdate( sal_True );
pDocSh->SetDrawModified();
}
delete pDlg;
}
}
break;
}
case SID_EXTRUSION_TOOGLE:
case SID_EXTRUSION_TILT_DOWN:
case SID_EXTRUSION_TILT_UP:
case SID_EXTRUSION_TILT_LEFT:
case SID_EXTRUSION_TILT_RIGHT:
case SID_EXTRUSION_3D_COLOR:
case SID_EXTRUSION_DEPTH:
case SID_EXTRUSION_DIRECTION:
case SID_EXTRUSION_PROJECTION:
case SID_EXTRUSION_LIGHTING_DIRECTION:
case SID_EXTRUSION_LIGHTING_INTENSITY:
case SID_EXTRUSION_SURFACE:
case SID_EXTRUSION_DEPTH_FLOATER:
case SID_EXTRUSION_DIRECTION_FLOATER:
case SID_EXTRUSION_LIGHTING_FLOATER:
case SID_EXTRUSION_SURFACE_FLOATER:
case SID_EXTRUSION_DEPTH_DIALOG:
svx::ExtrusionBar::execute( pView, rReq, rBindings );
rReq.Ignore ();
break;
case SID_FONTWORK_SHAPE:
case SID_FONTWORK_SHAPE_TYPE:
case SID_FONTWORK_ALIGNMENT:
case SID_FONTWORK_SAME_LETTER_HEIGHTS:
case SID_FONTWORK_CHARACTER_SPACING:
case SID_FONTWORK_KERN_CHARACTER_PAIRS:
case SID_FONTWORK_CHARACTER_SPACING_FLOATER:
case SID_FONTWORK_ALIGNMENT_FLOATER:
case SID_FONTWORK_CHARACTER_SPACING_DIALOG:
svx::FontworkBar::execute( pView, rReq, rBindings );
rReq.Ignore ();
break;
default:
break;
}
}
IMPL_LINK( ScDrawShell, NameObjectHdl, AbstractSvxNameDialog*, pDialog )
{
String aName;
if( pDialog )
pDialog->GetName( aName );
ScDrawLayer* pModel = pViewData->GetDocument()->GetDrawLayer();
if ( aName.Len() && pModel )
{
SCTAB nDummyTab;
if ( pModel->GetNamedObject( aName, 0, nDummyTab ) )
{
// existing object found -> name invalid
return 0;
}
}
return 1; // name is valid
}
//------------------------------------------------------------------
void ScDrawShell::ExecFormText(SfxRequest& rReq)
{
ScDrawView* pDrView = pViewData->GetScDrawView();
const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList();
if ( rMarkList.GetMarkCount() == 1 && rReq.GetArgs() )
{
const SfxItemSet& rSet = *rReq.GetArgs();
if ( pDrView->IsTextEdit() )
pDrView->ScEndTextEdit();
pDrView->SetAttributes(rSet);
}
}
//------------------------------------------------------------------
void ScDrawShell::ExecFormatPaintbrush( SfxRequest& rReq )
{
ScViewFunc* pView = pViewData->GetView();
if ( pView->HasPaintBrush() )
{
// cancel paintbrush mode
pView->ResetBrushDocument();
}
else
{
sal_Bool bLock = sal_False;
const SfxItemSet *pArgs = rReq.GetArgs();
if( pArgs && pArgs->Count() >= 1 )
bLock = static_cast<const SfxBoolItem&>(pArgs->Get(SID_FORMATPAINTBRUSH)).GetValue();
ScDrawView* pDrawView = pViewData->GetScDrawView();
if ( pDrawView && pDrawView->AreObjectsMarked() )
{
sal_Bool bOnlyHardAttr = sal_True;
SfxItemSet* pItemSet = new SfxItemSet( pDrawView->GetAttrFromMarked(bOnlyHardAttr) );
pView->SetDrawBrushSet( pItemSet, bLock );
}
}
}
void ScDrawShell::StateFormatPaintbrush( SfxItemSet& rSet )
{
ScDrawView* pDrawView = pViewData->GetScDrawView();
sal_Bool bSelection = pDrawView && pDrawView->AreObjectsMarked();
sal_Bool bHasPaintBrush = pViewData->GetView()->HasPaintBrush();
if ( !bHasPaintBrush && !bSelection )
rSet.DisableItem( SID_FORMATPAINTBRUSH );
else
rSet.Put( SfxBoolItem( SID_FORMATPAINTBRUSH, bHasPaintBrush ) );
}
ScDrawView* ScDrawShell::GetDrawView()
{
return pViewData->GetView()->GetScDrawView();
}