sc drawstyles: Move style commands to ScTabViewShell
For them to be available also when shapes are selected. This commit alone shouldn't cause any change in behavior. Change-Id: Ic038618fe8b450ef2c93a19efb2e27c41f6de0f4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149047 Tested-by: Jenkins Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
This commit is contained in:
parent
34f7c8cce9
commit
796c9c5ac2
6 changed files with 738 additions and 738 deletions
|
@ -39,17 +39,6 @@ interface TableFont
|
|||
interface FormatForSelection
|
||||
{
|
||||
// slots which are disabled in the DrawShell {{
|
||||
SID_STYLE_FAMILY2 [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_APPLY [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_WATERCAN [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_NEW_BY_EXAMPLE [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_UPDATE_BY_EXAMPLE [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_NEW [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_FAMILY4 [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_EDIT [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_DELETE [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_HIDE [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_SHOW [ ExecMethod = ExecuteStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_PREVIEW [ ExecMethod = ExecuteStyle; ]
|
||||
SID_STYLE_END_PREVIEW [ ExecMethod = ExecuteStyle; ]
|
||||
SID_CLASSIFICATION_APPLY [ ExecMethod = ExecuteStyle; ]
|
||||
|
|
|
@ -205,6 +205,18 @@ interface TableEditView
|
|||
SID_GRID_USE [ ExecMethod = ExecDrawOpt; StateMethod = GetDrawOptState; ]
|
||||
SID_HELPLINES_MOVE [ ExecMethod = ExecDrawOpt; StateMethod = GetDrawOptState; ]
|
||||
|
||||
SID_STYLE_FAMILY2 [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_FAMILY4 [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_APPLY [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_WATERCAN [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_NEW_BY_EXAMPLE [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_UPDATE_BY_EXAMPLE [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_NEW [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_EDIT [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_DELETE [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_HIDE [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
SID_STYLE_SHOW [ ExecMethod = ExecStyle; StateMethod = GetStyleState; ]
|
||||
|
||||
SID_GETUNDOSTRINGS [ StateMethod = GetUndoState; ]
|
||||
SID_GETREDOSTRINGS [ StateMethod = GetUndoState; ]
|
||||
SID_UNDO [ ExecMethod = ExecuteUndo; StateMethod = GetUndoState; ]
|
||||
|
|
|
@ -60,7 +60,6 @@ public:
|
|||
void GetBorderState( SfxItemSet& rSet );
|
||||
|
||||
void ExecuteStyle( SfxRequest& rReq );
|
||||
void GetStyleState( SfxItemSet& rSet );
|
||||
|
||||
void ExecuteTextDirection( const SfxRequest& rReq );
|
||||
void GetTextDirectionState( SfxItemSet& rSet );
|
||||
|
|
|
@ -277,6 +277,9 @@ public:
|
|||
void ExecDrawOpt(const SfxRequest& rReq);
|
||||
void GetDrawOptState(SfxItemSet &rSet);
|
||||
|
||||
void ExecStyle(SfxRequest& rReq);
|
||||
void GetStyleState(SfxItemSet &rSet);
|
||||
|
||||
void UpdateDrawShell();
|
||||
void SetDrawShell( bool bActive );
|
||||
void SetDrawTextShell( bool bActive );
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include <sfx2/viewfrm.hxx>
|
||||
#include <sfx2/bindings.hxx>
|
||||
#include <sfx2/newstyle.hxx>
|
||||
#include <sfx2/objface.hxx>
|
||||
#include <sfx2/request.hxx>
|
||||
#include <sfx2/sfxdlg.hxx>
|
||||
|
@ -41,8 +40,6 @@
|
|||
#include <editeng/boxitem.hxx>
|
||||
#include <editeng/langitem.hxx>
|
||||
#include <svx/numinf.hxx>
|
||||
#include <sfx2/dispatch.hxx>
|
||||
#include <sfx2/tplpitem.hxx>
|
||||
#include <editeng/svxenum.hxx>
|
||||
#include <editeng/wghtitem.hxx>
|
||||
#include <editeng/postitem.hxx>
|
||||
|
@ -71,8 +68,6 @@
|
|||
#include <printfun.hxx>
|
||||
#include <docpool.hxx>
|
||||
#include <tabvwsh.hxx>
|
||||
#include <undostyl.hxx>
|
||||
#include <markdata.hxx>
|
||||
#include <attrib.hxx>
|
||||
|
||||
#define ShellClass_ScFormatShell
|
||||
|
@ -80,7 +75,6 @@
|
|||
#define ShellClass_FormatForSelection
|
||||
#include <scslots.hxx>
|
||||
|
||||
#include <scabstdlg.hxx>
|
||||
#include <editeng/fontitem.hxx>
|
||||
#include <sfx2/classificationhelper.hxx>
|
||||
|
||||
|
@ -151,121 +145,14 @@ ScFormatShell::~ScFormatShell()
|
|||
{
|
||||
}
|
||||
|
||||
void ScFormatShell::GetStyleState( SfxItemSet& rSet )
|
||||
{
|
||||
ScDocument& rDoc = GetViewData().GetDocument();
|
||||
ScTabViewShell* pTabViewShell = GetViewData().GetViewShell();
|
||||
SfxStyleSheetBasePool* pStylePool = rDoc.GetStyleSheetPool();
|
||||
|
||||
bool bProtected = false;
|
||||
SCTAB nTabCount = rDoc.GetTableCount();
|
||||
for (SCTAB i=0; i<nTabCount && !bProtected; i++)
|
||||
if (rDoc.IsTabProtected(i)) // look after protected table
|
||||
bProtected = true;
|
||||
|
||||
SfxWhichIter aIter(rSet);
|
||||
sal_uInt16 nWhich = aIter.FirstWhich();
|
||||
sal_uInt16 nSlotId = 0;
|
||||
|
||||
while ( nWhich )
|
||||
{
|
||||
nSlotId = SfxItemPool::IsWhich( nWhich )
|
||||
? GetPool().GetSlotId( nWhich )
|
||||
: nWhich;
|
||||
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_APPLY:
|
||||
if ( !pStylePool )
|
||||
rSet.DisableItem( nSlotId );
|
||||
break;
|
||||
|
||||
case SID_STYLE_FAMILY2: // cell style sheets
|
||||
{
|
||||
SfxStyleSheet* pStyleSheet = const_cast<SfxStyleSheet*>(
|
||||
pTabViewShell->GetStyleSheetFromMarked());
|
||||
|
||||
if ( pStyleSheet )
|
||||
rSet.Put( SfxTemplateItem( nSlotId, pStyleSheet->GetName() ) );
|
||||
else
|
||||
rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_FAMILY4: // page style sheets
|
||||
{
|
||||
SCTAB nCurTab = GetViewData().GetTabNo();
|
||||
OUString aPageStyle = rDoc.GetPageStyle( nCurTab );
|
||||
SfxStyleSheet* pStyleSheet = pStylePool ? static_cast<SfxStyleSheet*>(pStylePool->
|
||||
Find( aPageStyle, SfxStyleFamily::Page )) : nullptr;
|
||||
|
||||
if ( pStyleSheet )
|
||||
rSet.Put( SfxTemplateItem( nSlotId, aPageStyle ) );
|
||||
else
|
||||
rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_WATERCAN:
|
||||
{
|
||||
rSet.Put( SfxBoolItem( nSlotId, SC_MOD()->GetIsWaterCan() ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_UPDATE_BY_EXAMPLE:
|
||||
{
|
||||
std::unique_ptr<SfxUInt16Item> pFamilyItem;
|
||||
pTabViewShell->GetViewFrame().GetBindings().QueryState(SID_STYLE_FAMILY, pFamilyItem);
|
||||
|
||||
bool bPage = pFamilyItem && SfxStyleFamily::Page == static_cast<SfxStyleFamily>(pFamilyItem->GetValue());
|
||||
|
||||
if ( bProtected || bPage )
|
||||
rSet.DisableItem( nSlotId );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_EDIT:
|
||||
case SID_STYLE_DELETE:
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
{
|
||||
std::unique_ptr<SfxUInt16Item> pFamilyItem;
|
||||
pTabViewShell->GetViewFrame().GetBindings().QueryState(SID_STYLE_FAMILY, pFamilyItem);
|
||||
bool bPage = pFamilyItem && SfxStyleFamily::Page == static_cast<SfxStyleFamily>(pFamilyItem->GetValue());
|
||||
|
||||
if ( bProtected && !bPage )
|
||||
rSet.DisableItem( nSlotId );
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
nWhich = aIter.NextWhich();
|
||||
}
|
||||
}
|
||||
|
||||
void ScFormatShell::ExecuteStyle( SfxRequest& rReq )
|
||||
{
|
||||
const SfxItemSet* pArgs = rReq.GetArgs();
|
||||
const sal_uInt16 nSlotId = rReq.GetSlot();
|
||||
if ( !pArgs && nSlotId != SID_STYLE_NEW_BY_EXAMPLE && nSlotId != SID_STYLE_UPDATE_BY_EXAMPLE )
|
||||
{
|
||||
// in case of vertical toolbar
|
||||
rViewData.GetDispatcher().Execute( SID_STYLE_DESIGNER, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD );
|
||||
return;
|
||||
}
|
||||
|
||||
SfxBindings& rBindings = rViewData.GetBindings();
|
||||
const SCTAB nCurTab = GetViewData().GetTabNo();
|
||||
ScDocShell* pDocSh = GetViewData().GetDocShell();
|
||||
ScTabViewShell* pTabViewShell= GetViewData().GetViewShell();
|
||||
ScDocument& rDoc = pDocSh->GetDocument();
|
||||
ScMarkData& rMark = GetViewData().GetMarkData();
|
||||
ScModule* pScMod = SC_MOD();
|
||||
OUString aRefName;
|
||||
bool bUndo = rDoc.IsUndoEnabled();
|
||||
SfxStyleSheetBasePool* pStylePool = rDoc.GetStyleSheetPool();
|
||||
|
||||
if ( (nSlotId == SID_STYLE_PREVIEW)
|
||||
|
@ -334,619 +221,6 @@ void ScFormatShell::ExecuteStyle( SfxRequest& rReq )
|
|||
}
|
||||
}
|
||||
}
|
||||
else if ( (nSlotId == SID_STYLE_NEW)
|
||||
|| (nSlotId == SID_STYLE_EDIT)
|
||||
|| (nSlotId == SID_STYLE_DELETE)
|
||||
|| (nSlotId == SID_STYLE_HIDE)
|
||||
|| (nSlotId == SID_STYLE_SHOW)
|
||||
|| (nSlotId == SID_STYLE_APPLY)
|
||||
|| (nSlotId == SID_STYLE_WATERCAN)
|
||||
|| (nSlotId == SID_STYLE_FAMILY)
|
||||
|| (nSlotId == SID_STYLE_NEW_BY_EXAMPLE)
|
||||
|| (nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE) )
|
||||
{
|
||||
SfxStyleSheetBase* pStyleSheet = nullptr;
|
||||
|
||||
bool bStyleToMarked = false;
|
||||
bool bListAction = false;
|
||||
bool bAddUndo = false; // add ScUndoModifyStyle (style modified)
|
||||
ScStyleSaveData aOldData; // for undo/redo
|
||||
ScStyleSaveData aNewData;
|
||||
|
||||
SfxStyleFamily eFamily = SfxStyleFamily::Para;
|
||||
const SfxUInt16Item* pFamItem;
|
||||
const SfxStringItem* pFamilyNameItem;
|
||||
if ( pArgs && (pFamItem = pArgs->GetItemIfSet( SID_STYLE_FAMILY )) )
|
||||
eFamily = static_cast<SfxStyleFamily>(pFamItem->GetValue());
|
||||
else if ( pArgs && (pFamilyNameItem = pArgs->GetItemIfSet( SID_STYLE_FAMILYNAME )) )
|
||||
{
|
||||
OUString sFamily = pFamilyNameItem->GetValue();
|
||||
if (sFamily == "CellStyles")
|
||||
eFamily = SfxStyleFamily::Para;
|
||||
else if (sFamily == "PageStyles")
|
||||
eFamily = SfxStyleFamily::Page;
|
||||
}
|
||||
|
||||
OUString aStyleName;
|
||||
sal_uInt16 nRetMask = 0xffff;
|
||||
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_NEW:
|
||||
{
|
||||
const SfxPoolItem* pNameItem;
|
||||
if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem ))
|
||||
aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue();
|
||||
|
||||
const SfxStringItem* pRefItem=nullptr;
|
||||
if (pArgs && (pRefItem = pArgs->GetItemIfSet( SID_STYLE_REFERENCE )))
|
||||
{
|
||||
aRefName = pRefItem->GetValue();
|
||||
}
|
||||
|
||||
pStyleSheet = &(pStylePool->Make( aStyleName, eFamily,
|
||||
SfxStyleSearchBits::UserDefined ) );
|
||||
|
||||
if (pStyleSheet->HasParentSupport())
|
||||
pStyleSheet->SetParent(aRefName);
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_APPLY:
|
||||
{
|
||||
const SfxStringItem* pNameItem = rReq.GetArg<SfxStringItem>(SID_APPLY_STYLE);
|
||||
const SfxStringItem* pFamilyItem = rReq.GetArg<SfxStringItem>(SID_STYLE_FAMILYNAME);
|
||||
if ( pFamilyItem && pNameItem )
|
||||
{
|
||||
try
|
||||
{
|
||||
css::uno::Reference< css::container::XNameAccess > xStyles;
|
||||
css::uno::Reference< css::container::XNameAccess > xCont = pDocSh->GetModel()->getStyleFamilies();
|
||||
xCont->getByName(pFamilyItem->GetValue()) >>= xStyles;
|
||||
css::uno::Reference< css::beans::XPropertySet > xInfo;
|
||||
xStyles->getByName( pNameItem->GetValue() ) >>= xInfo;
|
||||
OUString aUIName;
|
||||
xInfo->getPropertyValue("DisplayName") >>= aUIName;
|
||||
if ( !aUIName.isEmpty() )
|
||||
rReq.AppendItem( SfxStringItem( SID_STYLE_APPLY, aUIName ) );
|
||||
}
|
||||
catch( css::uno::Exception& )
|
||||
{
|
||||
}
|
||||
}
|
||||
[[fallthrough]];
|
||||
}
|
||||
case SID_STYLE_EDIT:
|
||||
case SID_STYLE_DELETE:
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
case SID_STYLE_NEW_BY_EXAMPLE:
|
||||
{
|
||||
const SfxPoolItem* pNameItem;
|
||||
if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem ))
|
||||
aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue();
|
||||
else if ( nSlotId == SID_STYLE_NEW_BY_EXAMPLE )
|
||||
{
|
||||
weld::Window* pDialogParent = rReq.GetFrameWeld();
|
||||
if (!pDialogParent)
|
||||
pDialogParent = pTabViewShell->GetFrameWeld();
|
||||
SfxNewStyleDlg aDlg(pDialogParent, *pStylePool, eFamily);
|
||||
if (aDlg.run() != RET_OK)
|
||||
return;
|
||||
aStyleName = aDlg.GetName();
|
||||
}
|
||||
|
||||
pStyleSheet = pStylePool->Find( aStyleName, eFamily );
|
||||
|
||||
aOldData.InitFromStyle( pStyleSheet );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_WATERCAN:
|
||||
{
|
||||
bool bWaterCan = pScMod->GetIsWaterCan();
|
||||
|
||||
if( !bWaterCan )
|
||||
{
|
||||
const SfxPoolItem* pItem;
|
||||
|
||||
if ( SfxItemState::SET ==
|
||||
pArgs->GetItemState( nSlotId, true, &pItem ) )
|
||||
{
|
||||
const SfxStringItem* pStrItem = dynamic_cast< const SfxStringItem *>( pItem );
|
||||
if ( pStrItem )
|
||||
{
|
||||
aStyleName = pStrItem->GetValue();
|
||||
pStyleSheet = pStylePool->Find( aStyleName, eFamily );
|
||||
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
static_cast<ScStyleSheetPool*>(pStylePool)->
|
||||
SetActualStyleSheet( pStyleSheet );
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !bWaterCan && pStyleSheet )
|
||||
{
|
||||
pScMod->SetWaterCan( true );
|
||||
pTabViewShell->SetActivePointer( PointerStyle::Fill );
|
||||
rReq.Done();
|
||||
}
|
||||
else
|
||||
{
|
||||
pScMod->SetWaterCan( false );
|
||||
pTabViewShell->SetActivePointer( PointerStyle::Arrow );
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// set new style for paintbrush format mode
|
||||
if ( nSlotId == SID_STYLE_APPLY && pScMod->GetIsWaterCan() && pStyleSheet )
|
||||
static_cast<ScStyleSheetPool*>(pStylePool)->SetActualStyleSheet( pStyleSheet );
|
||||
|
||||
switch ( eFamily )
|
||||
{
|
||||
case SfxStyleFamily::Para:
|
||||
{
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_DELETE:
|
||||
{
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
pTabViewShell->RemoveStyleSheetInUse( pStyleSheet );
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
pTabViewShell->InvalidateAttribs();
|
||||
nRetMask = sal_uInt16(true);
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
}
|
||||
else
|
||||
nRetMask = sal_uInt16(false);
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
{
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
pStyleSheet->SetHidden( nSlotId == SID_STYLE_HIDE );
|
||||
pTabViewShell->InvalidateAttribs();
|
||||
rReq.Done();
|
||||
}
|
||||
else
|
||||
nRetMask = sal_uInt16(false);
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_APPLY:
|
||||
{
|
||||
if ( pStyleSheet && !pScMod->GetIsWaterCan() )
|
||||
{
|
||||
// apply style sheet to document
|
||||
pTabViewShell->SetStyleSheetToMarked( static_cast<SfxStyleSheet*>(pStyleSheet) );
|
||||
pTabViewShell->InvalidateAttribs();
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_NEW_BY_EXAMPLE:
|
||||
case SID_STYLE_UPDATE_BY_EXAMPLE:
|
||||
{
|
||||
// create/replace style sheet by attributes
|
||||
// at cursor position:
|
||||
|
||||
const ScPatternAttr* pAttrItem = nullptr;
|
||||
|
||||
// The query if marked, was always wrong here,
|
||||
// so now no more, and just from the cursor.
|
||||
// If attributes are to be removed from the selection, still need to be
|
||||
// cautious not to adopt items from templates
|
||||
// (GetSelectionPattern also collects items from originals) (# 44748 #)
|
||||
SCCOL nCol = rViewData.GetCurX();
|
||||
SCROW nRow = rViewData.GetCurY();
|
||||
pAttrItem = rDoc.GetPattern( nCol, nRow, nCurTab );
|
||||
|
||||
SfxItemSet aAttrSet = pAttrItem->GetItemSet();
|
||||
aAttrSet.ClearItem( ATTR_MERGE );
|
||||
aAttrSet.ClearItem( ATTR_MERGE_FLAG );
|
||||
|
||||
// Do not adopt conditional formatting and validity,
|
||||
// because they can not be edited in the template
|
||||
aAttrSet.ClearItem( ATTR_VALIDDATA );
|
||||
aAttrSet.ClearItem( ATTR_CONDITIONAL );
|
||||
|
||||
if ( SID_STYLE_NEW_BY_EXAMPLE == nSlotId )
|
||||
{
|
||||
if ( bUndo )
|
||||
{
|
||||
OUString aUndo = ScResId( STR_UNDO_EDITCELLSTYLE );
|
||||
pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pTabViewShell->GetViewShellId() );
|
||||
bListAction = true;
|
||||
}
|
||||
|
||||
bool bConvertBack = false;
|
||||
SfxStyleSheet* pSheetInUse = const_cast<SfxStyleSheet*>(
|
||||
pTabViewShell->GetStyleSheetFromMarked());
|
||||
|
||||
// when a new style is present and is used in the selection,
|
||||
// then the parent can not be adopted:
|
||||
if ( pStyleSheet && pSheetInUse && pStyleSheet == pSheetInUse )
|
||||
pSheetInUse = nullptr;
|
||||
|
||||
// if already present, first remove ...
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
// style pointer to names before erase,
|
||||
// otherwise cells will get invalid pointer
|
||||
//!!! As it happens, a method that does it for a particular style
|
||||
rDoc.StylesToNames();
|
||||
bConvertBack = true;
|
||||
pStylePool->Remove(pStyleSheet);
|
||||
}
|
||||
|
||||
// ...and create new
|
||||
pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
|
||||
SfxStyleSearchBits::UserDefined );
|
||||
|
||||
// when a style is present, then this will become
|
||||
// the parent of the new style:
|
||||
if ( pSheetInUse && pStyleSheet->HasParentSupport() )
|
||||
pStyleSheet->SetParent( pSheetInUse->GetName() );
|
||||
|
||||
if ( bConvertBack )
|
||||
// Name to style pointer
|
||||
rDoc.UpdStlShtPtrsFrmNms();
|
||||
else
|
||||
rDoc.GetPool()->CellStyleCreated( aStyleName, rDoc );
|
||||
|
||||
// Adopt attribute and use style
|
||||
pStyleSheet->GetItemSet().Put( aAttrSet );
|
||||
pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
|
||||
|
||||
// call SetStyleSheetToMarked after adding the ScUndoModifyStyle
|
||||
// (pStyleSheet pointer is used!)
|
||||
bStyleToMarked = true;
|
||||
}
|
||||
else // ( nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE )
|
||||
{
|
||||
pStyleSheet = const_cast<SfxStyleSheet*>(pTabViewShell->GetStyleSheetFromMarked());
|
||||
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
aOldData.InitFromStyle( pStyleSheet );
|
||||
|
||||
if ( bUndo )
|
||||
{
|
||||
OUString aUndo = ScResId( STR_UNDO_EDITCELLSTYLE );
|
||||
pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, pTabViewShell->GetViewShellId() );
|
||||
bListAction = true;
|
||||
}
|
||||
|
||||
pStyleSheet->GetItemSet().Put( aAttrSet );
|
||||
pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
|
||||
|
||||
// call SetStyleSheetToMarked after adding the ScUndoModifyStyle
|
||||
// (pStyleSheet pointer is used!)
|
||||
bStyleToMarked = true;
|
||||
}
|
||||
}
|
||||
|
||||
aNewData.InitFromStyle( pStyleSheet );
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} // case SfxStyleFamily::Para:
|
||||
break;
|
||||
|
||||
case SfxStyleFamily::Page:
|
||||
{
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_DELETE:
|
||||
{
|
||||
nRetMask = sal_uInt16( nullptr != pStyleSheet );
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
if ( rDoc.RemovePageStyleInUse( pStyleSheet->GetName() ) )
|
||||
{
|
||||
ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), nCurTab ).UpdatePages();
|
||||
rBindings.Invalidate( SID_STATUS_PAGESTYLE );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
rBindings.Invalidate( SID_STYLE_FAMILY4 );
|
||||
pDocSh->SetDocumentModified();
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
{
|
||||
nRetMask = sal_uInt16( nullptr != pStyleSheet );
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
pStyleSheet->SetHidden( nSlotId == SID_STYLE_HIDE );
|
||||
rBindings.Invalidate( SID_STYLE_FAMILY4 );
|
||||
pDocSh->SetDocumentModified();
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_APPLY:
|
||||
{
|
||||
nRetMask = sal_uInt16( nullptr != pStyleSheet );
|
||||
if ( pStyleSheet && !pScMod->GetIsWaterCan() )
|
||||
{
|
||||
std::unique_ptr<ScUndoApplyPageStyle> pUndoAction;
|
||||
SCTAB nTabCount = rDoc.GetTableCount();
|
||||
for (const auto& rTab : rMark)
|
||||
{
|
||||
if (rTab >= nTabCount)
|
||||
break;
|
||||
OUString aOldName = rDoc.GetPageStyle( rTab );
|
||||
if ( aOldName != aStyleName )
|
||||
{
|
||||
rDoc.SetPageStyle( rTab, aStyleName );
|
||||
ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), rTab ).UpdatePages();
|
||||
if( !pUndoAction )
|
||||
pUndoAction.reset(new ScUndoApplyPageStyle( pDocSh, aStyleName ));
|
||||
pUndoAction->AddSheetAction( rTab, aOldName );
|
||||
}
|
||||
}
|
||||
if( pUndoAction )
|
||||
{
|
||||
pDocSh->GetUndoManager()->AddUndoAction( std::move(pUndoAction) );
|
||||
pDocSh->SetDocumentModified();
|
||||
rBindings.Invalidate( SID_STYLE_FAMILY4 );
|
||||
rBindings.Invalidate( SID_STATUS_PAGESTYLE );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_NEW_BY_EXAMPLE:
|
||||
{
|
||||
const OUString& rStrCurStyle = rDoc.GetPageStyle( nCurTab );
|
||||
|
||||
if ( rStrCurStyle != aStyleName )
|
||||
{
|
||||
SfxStyleSheetBase* pCurStyle = pStylePool->Find( rStrCurStyle, eFamily );
|
||||
SfxItemSet aAttrSet = pCurStyle->GetItemSet();
|
||||
SCTAB nInTab;
|
||||
bool bUsed = rDoc.IsPageStyleInUse( aStyleName, &nInTab );
|
||||
|
||||
// if already present, first remove...
|
||||
if ( pStyleSheet )
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
|
||||
// ...and create new
|
||||
pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
|
||||
SfxStyleSearchBits::UserDefined );
|
||||
|
||||
// Adopt attribute
|
||||
pStyleSheet->GetItemSet().Put( aAttrSet );
|
||||
pDocSh->SetDocumentModified();
|
||||
|
||||
// If being used -> Update
|
||||
if ( bUsed )
|
||||
ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), nInTab ).UpdatePages();
|
||||
|
||||
aNewData.InitFromStyle( pStyleSheet );
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
nRetMask = sal_uInt16(true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // switch ( nSlotId )
|
||||
} // case SfxStyleFamily::Page:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // switch ( eFamily )
|
||||
|
||||
// create new or process through Dialog:
|
||||
if ( nSlotId == SID_STYLE_NEW || nSlotId == SID_STYLE_EDIT )
|
||||
{
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
SfxStyleFamily eFam = pStyleSheet->GetFamily();
|
||||
ScopedVclPtr<SfxAbstractTabDialog> pDlg;
|
||||
bool bPage = false;
|
||||
|
||||
// Store old Items from the style
|
||||
SfxItemSet aOldSet = pStyleSheet->GetItemSet();
|
||||
OUString aOldName = pStyleSheet->GetName();
|
||||
|
||||
switch ( eFam )
|
||||
{
|
||||
case SfxStyleFamily::Page:
|
||||
bPage = true;
|
||||
break;
|
||||
|
||||
case SfxStyleFamily::Para:
|
||||
default:
|
||||
{
|
||||
SfxItemSet& rSet = pStyleSheet->GetItemSet();
|
||||
|
||||
if ( const SfxUInt32Item* pItem = rSet.GetItemIfSet( ATTR_VALUE_FORMAT,
|
||||
false ) )
|
||||
{
|
||||
// Produce and format NumberFormat Value from Value and Language
|
||||
sal_uLong nFormat = pItem->GetValue();
|
||||
LanguageType eLang =
|
||||
rSet.Get(ATTR_LANGUAGE_FORMAT ).GetLanguage();
|
||||
sal_uLong nLangFormat = rDoc.GetFormatTable()->
|
||||
GetFormatForLanguageIfBuiltIn( nFormat, eLang );
|
||||
if ( nLangFormat != nFormat )
|
||||
{
|
||||
SfxUInt32Item aNewItem( ATTR_VALUE_FORMAT, nLangFormat );
|
||||
rSet.Put( aNewItem );
|
||||
aOldSet.Put( aNewItem );
|
||||
// Also in aOldSet for comparison after the dialog,
|
||||
// Otherwise might miss a language change
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<SvxNumberInfoItem> pNumberInfoItem(
|
||||
ScTabViewShell::MakeNumberInfoItem(rDoc, GetViewData()));
|
||||
|
||||
pDocSh->PutItem( *pNumberInfoItem );
|
||||
bPage = false;
|
||||
|
||||
// Definitely a SvxBoxInfoItem with Table = sal_False in set:
|
||||
// (If there is no item, the dialogue will also delete the
|
||||
// BORDER_OUTER SvxBoxItem from the Template Set)
|
||||
if ( rSet.GetItemState( ATTR_BORDER_INNER, false ) != SfxItemState::SET )
|
||||
{
|
||||
SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
|
||||
aBoxInfoItem.SetTable(false); // no inner lines
|
||||
aBoxInfoItem.SetDist(true);
|
||||
aBoxInfoItem.SetMinDist(false);
|
||||
rSet.Put( aBoxInfoItem );
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
pTabViewShell->SetInFormatDialog(true);
|
||||
|
||||
SfxItemSet& rStyleSet = pStyleSheet->GetItemSet();
|
||||
rStyleSet.MergeRange( XATTR_FILL_FIRST, XATTR_FILL_LAST );
|
||||
|
||||
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
|
||||
|
||||
weld::Window* pDialogParent = rReq.GetFrameWeld();
|
||||
if (!pDialogParent)
|
||||
pDialogParent = pTabViewShell->GetFrameWeld();
|
||||
pDlg.disposeAndReset(pFact->CreateScStyleDlg(pDialogParent, *pStyleSheet, bPage));
|
||||
short nResult = pDlg->Execute();
|
||||
pTabViewShell->SetInFormatDialog(false);
|
||||
|
||||
if ( nResult == RET_OK )
|
||||
{
|
||||
const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
|
||||
|
||||
if ( pOutSet )
|
||||
{
|
||||
nRetMask = sal_uInt16(pStyleSheet->GetMask());
|
||||
|
||||
// Attribute comparisons (earlier in ModifyStyleSheet) now here
|
||||
// with the old values (the style is already changed)
|
||||
if ( SfxStyleFamily::Para == eFam )
|
||||
{
|
||||
SfxItemSet& rNewSet = pStyleSheet->GetItemSet();
|
||||
bool bNumFormatChanged;
|
||||
if ( ScGlobal::CheckWidthInvalidate(
|
||||
bNumFormatChanged, rNewSet, aOldSet ) )
|
||||
rDoc.InvalidateTextWidth( nullptr, nullptr, bNumFormatChanged );
|
||||
|
||||
SCTAB nTabCount = rDoc.GetTableCount();
|
||||
for (SCTAB nTab=0; nTab<nTabCount; nTab++)
|
||||
rDoc.SetStreamValid(nTab, false);
|
||||
|
||||
sal_uLong nOldFormat = aOldSet.Get( ATTR_VALUE_FORMAT ).GetValue();
|
||||
sal_uLong nNewFormat = rNewSet.Get( ATTR_VALUE_FORMAT ).GetValue();
|
||||
if ( nNewFormat != nOldFormat )
|
||||
{
|
||||
SvNumberFormatter* pFormatter = rDoc.GetFormatTable();
|
||||
const SvNumberformat* pOld = pFormatter->GetEntry( nOldFormat );
|
||||
const SvNumberformat* pNew = pFormatter->GetEntry( nNewFormat );
|
||||
if ( pOld && pNew && pOld->GetLanguage() != pNew->GetLanguage() )
|
||||
rNewSet.Put( SvxLanguageItem(
|
||||
pNew->GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
|
||||
}
|
||||
|
||||
rDoc.GetPool()->CellStyleCreated( pStyleSheet->GetName(), rDoc );
|
||||
}
|
||||
else
|
||||
{
|
||||
//! Here also queries for Page Styles
|
||||
|
||||
OUString aNewName = pStyleSheet->GetName();
|
||||
if ( aNewName != aOldName &&
|
||||
rDoc.RenamePageStyleInUse( aOldName, aNewName ) )
|
||||
{
|
||||
rBindings.Invalidate( SID_STATUS_PAGESTYLE );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
|
||||
rDoc.ModifyStyleSheet( *pStyleSheet, *pOutSet );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
|
||||
pDocSh->SetDocumentModified();
|
||||
|
||||
if ( SfxStyleFamily::Para == eFam )
|
||||
{
|
||||
ScTabViewShell::UpdateNumberFormatter(
|
||||
*( pDocSh->GetItem(SID_ATTR_NUMBERFORMAT_INFO) ));
|
||||
|
||||
pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
|
||||
pTabViewShell->InvalidateAttribs();
|
||||
}
|
||||
|
||||
aNewData.InitFromStyle( pStyleSheet );
|
||||
bAddUndo = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( nSlotId == SID_STYLE_NEW )
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
else
|
||||
{
|
||||
// If in the meantime something was painted with the
|
||||
// temporary changed item set
|
||||
pDocSh->PostPaintGridAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rReq.SetReturnValue( SfxUInt16Item( nSlotId, nRetMask ) );
|
||||
|
||||
if ( bAddUndo && bUndo)
|
||||
pDocSh->GetUndoManager()->AddUndoAction(
|
||||
std::make_unique<ScUndoModifyStyle>( pDocSh, eFamily, aOldData, aNewData ) );
|
||||
|
||||
if ( bStyleToMarked )
|
||||
{
|
||||
// call SetStyleSheetToMarked after adding the ScUndoModifyStyle,
|
||||
// so redo will find the modified style
|
||||
pTabViewShell->SetStyleSheetToMarked( static_cast<SfxStyleSheet*>(pStyleSheet) );
|
||||
pTabViewShell->InvalidateAttribs();
|
||||
}
|
||||
|
||||
if ( bListAction )
|
||||
pDocSh->GetUndoManager()->LeaveListAction();
|
||||
}
|
||||
else if (nSlotId == SID_CLASSIFICATION_APPLY)
|
||||
{
|
||||
const SfxPoolItem* pItem = nullptr;
|
||||
|
|
|
@ -21,12 +21,16 @@
|
|||
|
||||
#include <comphelper/lok.hxx>
|
||||
#include <editeng/boxitem.hxx>
|
||||
#include <editeng/langitem.hxx>
|
||||
#include <o3tl/temporary.hxx>
|
||||
#include <sfx2/bindings.hxx>
|
||||
#include <sfx2/request.hxx>
|
||||
#include <sfx2/sfxdlg.hxx>
|
||||
#include <sfx2/sidebar/Sidebar.hxx>
|
||||
#include <sfx2/viewfrm.hxx>
|
||||
#include <sfx2/dispatch.hxx>
|
||||
#include <sfx2/newstyle.hxx>
|
||||
#include <sfx2/tplpitem.hxx>
|
||||
#include <svl/ilstitem.hxx>
|
||||
#include <svl/numformat.hxx>
|
||||
#include <svl/zformat.hxx>
|
||||
|
@ -61,6 +65,9 @@
|
|||
#include <tabvwsh.hxx>
|
||||
#include <tokenarray.hxx>
|
||||
#include <viewdata.hxx>
|
||||
#include <docpool.hxx>
|
||||
#include <printfun.hxx>
|
||||
#include <undostyl.hxx>
|
||||
|
||||
#include <memory>
|
||||
|
||||
|
@ -894,4 +901,720 @@ void ScTabViewShell::GetDrawOptState( SfxItemSet& rSet )
|
|||
rSet.Put( aBool );
|
||||
}
|
||||
|
||||
void ScTabViewShell::ExecStyle( SfxRequest& rReq )
|
||||
{
|
||||
const SfxItemSet* pArgs = rReq.GetArgs();
|
||||
const sal_uInt16 nSlotId = rReq.GetSlot();
|
||||
if ( !pArgs && nSlotId != SID_STYLE_NEW_BY_EXAMPLE && nSlotId != SID_STYLE_UPDATE_BY_EXAMPLE )
|
||||
{
|
||||
// in case of vertical toolbar
|
||||
GetDispatcher()->Execute( SID_STYLE_DESIGNER, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD );
|
||||
return;
|
||||
}
|
||||
|
||||
SfxBindings& rBindings = GetViewData().GetBindings();
|
||||
const SCTAB nCurTab = GetViewData().GetTabNo();
|
||||
ScDocShell* pDocSh = GetViewData().GetDocShell();
|
||||
ScDocument& rDoc = pDocSh->GetDocument();
|
||||
ScMarkData& rMark = GetViewData().GetMarkData();
|
||||
ScModule* pScMod = SC_MOD();
|
||||
OUString aRefName;
|
||||
bool bUndo = rDoc.IsUndoEnabled();
|
||||
|
||||
SfxStyleSheetBasePool* pStylePool = rDoc.GetStyleSheetPool();
|
||||
SfxStyleSheetBase* pStyleSheet = nullptr;
|
||||
|
||||
bool bStyleToMarked = false;
|
||||
bool bListAction = false;
|
||||
bool bAddUndo = false; // add ScUndoModifyStyle (style modified)
|
||||
ScStyleSaveData aOldData; // for undo/redo
|
||||
ScStyleSaveData aNewData;
|
||||
|
||||
SfxStyleFamily eFamily = SfxStyleFamily::Para;
|
||||
const SfxUInt16Item* pFamItem;
|
||||
const SfxStringItem* pFamilyNameItem;
|
||||
if ( pArgs && (pFamItem = pArgs->GetItemIfSet( SID_STYLE_FAMILY )) )
|
||||
eFamily = static_cast<SfxStyleFamily>(pFamItem->GetValue());
|
||||
else if ( pArgs && (pFamilyNameItem = pArgs->GetItemIfSet( SID_STYLE_FAMILYNAME )) )
|
||||
{
|
||||
OUString sFamily = pFamilyNameItem->GetValue();
|
||||
if (sFamily == "CellStyles")
|
||||
eFamily = SfxStyleFamily::Para;
|
||||
else if (sFamily == "PageStyles")
|
||||
eFamily = SfxStyleFamily::Page;
|
||||
}
|
||||
|
||||
OUString aStyleName;
|
||||
sal_uInt16 nRetMask = 0xffff;
|
||||
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_NEW:
|
||||
{
|
||||
const SfxPoolItem* pNameItem;
|
||||
if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem ))
|
||||
aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue();
|
||||
|
||||
const SfxStringItem* pRefItem=nullptr;
|
||||
if (pArgs && (pRefItem = pArgs->GetItemIfSet( SID_STYLE_REFERENCE )))
|
||||
{
|
||||
aRefName = pRefItem->GetValue();
|
||||
}
|
||||
|
||||
pStyleSheet = &(pStylePool->Make( aStyleName, eFamily,
|
||||
SfxStyleSearchBits::UserDefined ) );
|
||||
|
||||
if (pStyleSheet->HasParentSupport())
|
||||
pStyleSheet->SetParent(aRefName);
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_APPLY:
|
||||
{
|
||||
const SfxStringItem* pNameItem = rReq.GetArg<SfxStringItem>(SID_APPLY_STYLE);
|
||||
const SfxStringItem* pFamilyItem = rReq.GetArg<SfxStringItem>(SID_STYLE_FAMILYNAME);
|
||||
if ( pFamilyItem && pNameItem )
|
||||
{
|
||||
try
|
||||
{
|
||||
css::uno::Reference< css::container::XNameAccess > xStyles;
|
||||
css::uno::Reference< css::container::XNameAccess > xCont = pDocSh->GetModel()->getStyleFamilies();
|
||||
xCont->getByName(pFamilyItem->GetValue()) >>= xStyles;
|
||||
css::uno::Reference< css::beans::XPropertySet > xInfo;
|
||||
xStyles->getByName( pNameItem->GetValue() ) >>= xInfo;
|
||||
OUString aUIName;
|
||||
xInfo->getPropertyValue("DisplayName") >>= aUIName;
|
||||
if ( !aUIName.isEmpty() )
|
||||
rReq.AppendItem( SfxStringItem( SID_STYLE_APPLY, aUIName ) );
|
||||
}
|
||||
catch( css::uno::Exception& )
|
||||
{
|
||||
}
|
||||
}
|
||||
[[fallthrough]];
|
||||
}
|
||||
case SID_STYLE_EDIT:
|
||||
case SID_STYLE_DELETE:
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
case SID_STYLE_NEW_BY_EXAMPLE:
|
||||
{
|
||||
const SfxPoolItem* pNameItem;
|
||||
if (pArgs && SfxItemState::SET == pArgs->GetItemState( nSlotId, true, &pNameItem ))
|
||||
aStyleName = static_cast<const SfxStringItem*>(pNameItem)->GetValue();
|
||||
else if ( nSlotId == SID_STYLE_NEW_BY_EXAMPLE )
|
||||
{
|
||||
weld::Window* pDialogParent = rReq.GetFrameWeld();
|
||||
if (!pDialogParent)
|
||||
pDialogParent = GetFrameWeld();
|
||||
SfxNewStyleDlg aDlg(pDialogParent, *pStylePool, eFamily);
|
||||
if (aDlg.run() != RET_OK)
|
||||
return;
|
||||
aStyleName = aDlg.GetName();
|
||||
}
|
||||
|
||||
pStyleSheet = pStylePool->Find( aStyleName, eFamily );
|
||||
|
||||
aOldData.InitFromStyle( pStyleSheet );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_WATERCAN:
|
||||
{
|
||||
bool bWaterCan = pScMod->GetIsWaterCan();
|
||||
|
||||
if( !bWaterCan )
|
||||
{
|
||||
const SfxPoolItem* pItem;
|
||||
|
||||
if ( SfxItemState::SET ==
|
||||
pArgs->GetItemState( nSlotId, true, &pItem ) )
|
||||
{
|
||||
const SfxStringItem* pStrItem = dynamic_cast< const SfxStringItem *>( pItem );
|
||||
if ( pStrItem )
|
||||
{
|
||||
aStyleName = pStrItem->GetValue();
|
||||
pStyleSheet = pStylePool->Find( aStyleName, eFamily );
|
||||
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
static_cast<ScStyleSheetPool*>(pStylePool)->
|
||||
SetActualStyleSheet( pStyleSheet );
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !bWaterCan && pStyleSheet )
|
||||
{
|
||||
pScMod->SetWaterCan( true );
|
||||
SetActivePointer( PointerStyle::Fill );
|
||||
rReq.Done();
|
||||
}
|
||||
else
|
||||
{
|
||||
pScMod->SetWaterCan( false );
|
||||
SetActivePointer( PointerStyle::Arrow );
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// set new style for paintbrush format mode
|
||||
if ( nSlotId == SID_STYLE_APPLY && pScMod->GetIsWaterCan() && pStyleSheet )
|
||||
static_cast<ScStyleSheetPool*>(pStylePool)->SetActualStyleSheet( pStyleSheet );
|
||||
|
||||
switch ( eFamily )
|
||||
{
|
||||
case SfxStyleFamily::Para:
|
||||
{
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_DELETE:
|
||||
{
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
RemoveStyleSheetInUse( pStyleSheet );
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
InvalidateAttribs();
|
||||
nRetMask = sal_uInt16(true);
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
}
|
||||
else
|
||||
nRetMask = sal_uInt16(false);
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
{
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
pStyleSheet->SetHidden( nSlotId == SID_STYLE_HIDE );
|
||||
InvalidateAttribs();
|
||||
rReq.Done();
|
||||
}
|
||||
else
|
||||
nRetMask = sal_uInt16(false);
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_APPLY:
|
||||
{
|
||||
if ( pStyleSheet && !pScMod->GetIsWaterCan() )
|
||||
{
|
||||
// apply style sheet to document
|
||||
SetStyleSheetToMarked( static_cast<SfxStyleSheet*>(pStyleSheet) );
|
||||
InvalidateAttribs();
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_NEW_BY_EXAMPLE:
|
||||
case SID_STYLE_UPDATE_BY_EXAMPLE:
|
||||
{
|
||||
// create/replace style sheet by attributes
|
||||
// at cursor position:
|
||||
|
||||
const ScPatternAttr* pAttrItem = nullptr;
|
||||
|
||||
// The query if marked, was always wrong here,
|
||||
// so now no more, and just from the cursor.
|
||||
// If attributes are to be removed from the selection, still need to be
|
||||
// cautious not to adopt items from templates
|
||||
// (GetSelectionPattern also collects items from originals) (# 44748 #)
|
||||
SCCOL nCol = GetViewData().GetCurX();
|
||||
SCROW nRow = GetViewData().GetCurY();
|
||||
pAttrItem = rDoc.GetPattern( nCol, nRow, nCurTab );
|
||||
|
||||
SfxItemSet aAttrSet = pAttrItem->GetItemSet();
|
||||
aAttrSet.ClearItem( ATTR_MERGE );
|
||||
aAttrSet.ClearItem( ATTR_MERGE_FLAG );
|
||||
|
||||
// Do not adopt conditional formatting and validity,
|
||||
// because they can not be edited in the template
|
||||
aAttrSet.ClearItem( ATTR_VALIDDATA );
|
||||
aAttrSet.ClearItem( ATTR_CONDITIONAL );
|
||||
|
||||
if ( SID_STYLE_NEW_BY_EXAMPLE == nSlotId )
|
||||
{
|
||||
if ( bUndo )
|
||||
{
|
||||
OUString aUndo = ScResId( STR_UNDO_EDITCELLSTYLE );
|
||||
pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, GetViewShellId() );
|
||||
bListAction = true;
|
||||
}
|
||||
|
||||
bool bConvertBack = false;
|
||||
SfxStyleSheet* pSheetInUse = const_cast<SfxStyleSheet*>(GetStyleSheetFromMarked());
|
||||
|
||||
// when a new style is present and is used in the selection,
|
||||
// then the parent can not be adopted:
|
||||
if ( pStyleSheet && pSheetInUse && pStyleSheet == pSheetInUse )
|
||||
pSheetInUse = nullptr;
|
||||
|
||||
// if already present, first remove ...
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
// style pointer to names before erase,
|
||||
// otherwise cells will get invalid pointer
|
||||
//!!! As it happens, a method that does it for a particular style
|
||||
rDoc.StylesToNames();
|
||||
bConvertBack = true;
|
||||
pStylePool->Remove(pStyleSheet);
|
||||
}
|
||||
|
||||
// ...and create new
|
||||
pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
|
||||
SfxStyleSearchBits::UserDefined );
|
||||
|
||||
// when a style is present, then this will become
|
||||
// the parent of the new style:
|
||||
if ( pSheetInUse && pStyleSheet->HasParentSupport() )
|
||||
pStyleSheet->SetParent( pSheetInUse->GetName() );
|
||||
|
||||
if ( bConvertBack )
|
||||
// Name to style pointer
|
||||
rDoc.UpdStlShtPtrsFrmNms();
|
||||
else
|
||||
rDoc.GetPool()->CellStyleCreated( aStyleName, rDoc );
|
||||
|
||||
// Adopt attribute and use style
|
||||
pStyleSheet->GetItemSet().Put( aAttrSet );
|
||||
UpdateStyleSheetInUse( pStyleSheet );
|
||||
|
||||
// call SetStyleSheetToMarked after adding the ScUndoModifyStyle
|
||||
// (pStyleSheet pointer is used!)
|
||||
bStyleToMarked = true;
|
||||
}
|
||||
else // ( nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE )
|
||||
{
|
||||
pStyleSheet = const_cast<SfxStyleSheet*>(GetStyleSheetFromMarked());
|
||||
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
aOldData.InitFromStyle( pStyleSheet );
|
||||
|
||||
if ( bUndo )
|
||||
{
|
||||
OUString aUndo = ScResId( STR_UNDO_EDITCELLSTYLE );
|
||||
pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo, 0, GetViewShellId() );
|
||||
bListAction = true;
|
||||
}
|
||||
|
||||
pStyleSheet->GetItemSet().Put( aAttrSet );
|
||||
UpdateStyleSheetInUse( pStyleSheet );
|
||||
|
||||
// call SetStyleSheetToMarked after adding the ScUndoModifyStyle
|
||||
// (pStyleSheet pointer is used!)
|
||||
bStyleToMarked = true;
|
||||
}
|
||||
}
|
||||
|
||||
aNewData.InitFromStyle( pStyleSheet );
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} // case SfxStyleFamily::Para:
|
||||
break;
|
||||
|
||||
case SfxStyleFamily::Page:
|
||||
{
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_DELETE:
|
||||
{
|
||||
nRetMask = sal_uInt16( nullptr != pStyleSheet );
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
if ( rDoc.RemovePageStyleInUse( pStyleSheet->GetName() ) )
|
||||
{
|
||||
ScPrintFunc( pDocSh, GetPrinter(true), nCurTab ).UpdatePages();
|
||||
rBindings.Invalidate( SID_STATUS_PAGESTYLE );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
rBindings.Invalidate( SID_STYLE_FAMILY4 );
|
||||
pDocSh->SetDocumentModified();
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
{
|
||||
nRetMask = sal_uInt16( nullptr != pStyleSheet );
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
pStyleSheet->SetHidden( nSlotId == SID_STYLE_HIDE );
|
||||
rBindings.Invalidate( SID_STYLE_FAMILY4 );
|
||||
pDocSh->SetDocumentModified();
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_APPLY:
|
||||
{
|
||||
nRetMask = sal_uInt16( nullptr != pStyleSheet );
|
||||
if ( pStyleSheet && !pScMod->GetIsWaterCan() )
|
||||
{
|
||||
std::unique_ptr<ScUndoApplyPageStyle> pUndoAction;
|
||||
SCTAB nTabCount = rDoc.GetTableCount();
|
||||
for (const auto& rTab : rMark)
|
||||
{
|
||||
if (rTab >= nTabCount)
|
||||
break;
|
||||
OUString aOldName = rDoc.GetPageStyle( rTab );
|
||||
if ( aOldName != aStyleName )
|
||||
{
|
||||
rDoc.SetPageStyle( rTab, aStyleName );
|
||||
ScPrintFunc( pDocSh, GetPrinter(true), rTab ).UpdatePages();
|
||||
if( !pUndoAction )
|
||||
pUndoAction.reset(new ScUndoApplyPageStyle( pDocSh, aStyleName ));
|
||||
pUndoAction->AddSheetAction( rTab, aOldName );
|
||||
}
|
||||
}
|
||||
if( pUndoAction )
|
||||
{
|
||||
pDocSh->GetUndoManager()->AddUndoAction( std::move(pUndoAction) );
|
||||
pDocSh->SetDocumentModified();
|
||||
rBindings.Invalidate( SID_STYLE_FAMILY4 );
|
||||
rBindings.Invalidate( SID_STATUS_PAGESTYLE );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
rReq.Done();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_NEW_BY_EXAMPLE:
|
||||
{
|
||||
const OUString& rStrCurStyle = rDoc.GetPageStyle( nCurTab );
|
||||
|
||||
if ( rStrCurStyle != aStyleName )
|
||||
{
|
||||
SfxStyleSheetBase* pCurStyle = pStylePool->Find( rStrCurStyle, eFamily );
|
||||
SfxItemSet aAttrSet = pCurStyle->GetItemSet();
|
||||
SCTAB nInTab;
|
||||
bool bUsed = rDoc.IsPageStyleInUse( aStyleName, &nInTab );
|
||||
|
||||
// if already present, first remove...
|
||||
if ( pStyleSheet )
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
|
||||
// ...and create new
|
||||
pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
|
||||
SfxStyleSearchBits::UserDefined );
|
||||
|
||||
// Adopt attribute
|
||||
pStyleSheet->GetItemSet().Put( aAttrSet );
|
||||
pDocSh->SetDocumentModified();
|
||||
|
||||
// If being used -> Update
|
||||
if ( bUsed )
|
||||
ScPrintFunc( pDocSh, GetPrinter(true), nInTab ).UpdatePages();
|
||||
|
||||
aNewData.InitFromStyle( pStyleSheet );
|
||||
bAddUndo = true;
|
||||
rReq.Done();
|
||||
nRetMask = sal_uInt16(true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // switch ( nSlotId )
|
||||
} // case SfxStyleFamily::Page:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // switch ( eFamily )
|
||||
|
||||
// create new or process through Dialog:
|
||||
if ( nSlotId == SID_STYLE_NEW || nSlotId == SID_STYLE_EDIT )
|
||||
{
|
||||
if ( pStyleSheet )
|
||||
{
|
||||
SfxStyleFamily eFam = pStyleSheet->GetFamily();
|
||||
ScopedVclPtr<SfxAbstractTabDialog> pDlg;
|
||||
bool bPage = false;
|
||||
|
||||
// Store old Items from the style
|
||||
SfxItemSet aOldSet = pStyleSheet->GetItemSet();
|
||||
OUString aOldName = pStyleSheet->GetName();
|
||||
|
||||
switch ( eFam )
|
||||
{
|
||||
case SfxStyleFamily::Page:
|
||||
bPage = true;
|
||||
break;
|
||||
|
||||
case SfxStyleFamily::Para:
|
||||
default:
|
||||
{
|
||||
SfxItemSet& rSet = pStyleSheet->GetItemSet();
|
||||
|
||||
if ( const SfxUInt32Item* pItem = rSet.GetItemIfSet( ATTR_VALUE_FORMAT,
|
||||
false ) )
|
||||
{
|
||||
// Produce and format NumberFormat Value from Value and Language
|
||||
sal_uLong nFormat = pItem->GetValue();
|
||||
LanguageType eLang =
|
||||
rSet.Get(ATTR_LANGUAGE_FORMAT ).GetLanguage();
|
||||
sal_uLong nLangFormat = rDoc.GetFormatTable()->
|
||||
GetFormatForLanguageIfBuiltIn( nFormat, eLang );
|
||||
if ( nLangFormat != nFormat )
|
||||
{
|
||||
SfxUInt32Item aNewItem( ATTR_VALUE_FORMAT, nLangFormat );
|
||||
rSet.Put( aNewItem );
|
||||
aOldSet.Put( aNewItem );
|
||||
// Also in aOldSet for comparison after the dialog,
|
||||
// Otherwise might miss a language change
|
||||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<SvxNumberInfoItem> pNumberInfoItem(
|
||||
ScTabViewShell::MakeNumberInfoItem(rDoc, GetViewData()));
|
||||
|
||||
pDocSh->PutItem( *pNumberInfoItem );
|
||||
bPage = false;
|
||||
|
||||
// Definitely a SvxBoxInfoItem with Table = sal_False in set:
|
||||
// (If there is no item, the dialogue will also delete the
|
||||
// BORDER_OUTER SvxBoxItem from the Template Set)
|
||||
if ( rSet.GetItemState( ATTR_BORDER_INNER, false ) != SfxItemState::SET )
|
||||
{
|
||||
SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
|
||||
aBoxInfoItem.SetTable(false); // no inner lines
|
||||
aBoxInfoItem.SetDist(true);
|
||||
aBoxInfoItem.SetMinDist(false);
|
||||
rSet.Put( aBoxInfoItem );
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
SetInFormatDialog(true);
|
||||
|
||||
SfxItemSet& rStyleSet = pStyleSheet->GetItemSet();
|
||||
rStyleSet.MergeRange( XATTR_FILL_FIRST, XATTR_FILL_LAST );
|
||||
|
||||
ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
|
||||
|
||||
weld::Window* pDialogParent = rReq.GetFrameWeld();
|
||||
if (!pDialogParent)
|
||||
pDialogParent = GetFrameWeld();
|
||||
pDlg.disposeAndReset(pFact->CreateScStyleDlg(pDialogParent, *pStyleSheet, bPage));
|
||||
short nResult = pDlg->Execute();
|
||||
SetInFormatDialog(false);
|
||||
|
||||
if ( nResult == RET_OK )
|
||||
{
|
||||
const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
|
||||
|
||||
if ( pOutSet )
|
||||
{
|
||||
nRetMask = sal_uInt16(pStyleSheet->GetMask());
|
||||
|
||||
// Attribute comparisons (earlier in ModifyStyleSheet) now here
|
||||
// with the old values (the style is already changed)
|
||||
if ( SfxStyleFamily::Para == eFam )
|
||||
{
|
||||
SfxItemSet& rNewSet = pStyleSheet->GetItemSet();
|
||||
bool bNumFormatChanged;
|
||||
if ( ScGlobal::CheckWidthInvalidate(
|
||||
bNumFormatChanged, rNewSet, aOldSet ) )
|
||||
rDoc.InvalidateTextWidth( nullptr, nullptr, bNumFormatChanged );
|
||||
|
||||
SCTAB nTabCount = rDoc.GetTableCount();
|
||||
for (SCTAB nTab=0; nTab<nTabCount; nTab++)
|
||||
rDoc.SetStreamValid(nTab, false);
|
||||
|
||||
sal_uLong nOldFormat = aOldSet.Get( ATTR_VALUE_FORMAT ).GetValue();
|
||||
sal_uLong nNewFormat = rNewSet.Get( ATTR_VALUE_FORMAT ).GetValue();
|
||||
if ( nNewFormat != nOldFormat )
|
||||
{
|
||||
SvNumberFormatter* pFormatter = rDoc.GetFormatTable();
|
||||
const SvNumberformat* pOld = pFormatter->GetEntry( nOldFormat );
|
||||
const SvNumberformat* pNew = pFormatter->GetEntry( nNewFormat );
|
||||
if ( pOld && pNew && pOld->GetLanguage() != pNew->GetLanguage() )
|
||||
rNewSet.Put( SvxLanguageItem(
|
||||
pNew->GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
|
||||
}
|
||||
|
||||
rDoc.GetPool()->CellStyleCreated( pStyleSheet->GetName(), rDoc );
|
||||
}
|
||||
else
|
||||
{
|
||||
//! Here also queries for Page Styles
|
||||
|
||||
OUString aNewName = pStyleSheet->GetName();
|
||||
if ( aNewName != aOldName &&
|
||||
rDoc.RenamePageStyleInUse( aOldName, aNewName ) )
|
||||
{
|
||||
rBindings.Invalidate( SID_STATUS_PAGESTYLE );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
|
||||
rDoc.ModifyStyleSheet( *pStyleSheet, *pOutSet );
|
||||
rBindings.Invalidate( FID_RESET_PRINTZOOM );
|
||||
}
|
||||
|
||||
pDocSh->SetDocumentModified();
|
||||
|
||||
if ( SfxStyleFamily::Para == eFam )
|
||||
{
|
||||
ScTabViewShell::UpdateNumberFormatter(
|
||||
*( pDocSh->GetItem(SID_ATTR_NUMBERFORMAT_INFO) ));
|
||||
|
||||
UpdateStyleSheetInUse( pStyleSheet );
|
||||
InvalidateAttribs();
|
||||
}
|
||||
|
||||
aNewData.InitFromStyle( pStyleSheet );
|
||||
bAddUndo = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( nSlotId == SID_STYLE_NEW )
|
||||
pStylePool->Remove( pStyleSheet );
|
||||
else
|
||||
{
|
||||
// If in the meantime something was painted with the
|
||||
// temporary changed item set
|
||||
pDocSh->PostPaintGridAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rReq.SetReturnValue( SfxUInt16Item( nSlotId, nRetMask ) );
|
||||
|
||||
if ( bAddUndo && bUndo)
|
||||
pDocSh->GetUndoManager()->AddUndoAction(
|
||||
std::make_unique<ScUndoModifyStyle>( pDocSh, eFamily, aOldData, aNewData ) );
|
||||
|
||||
if ( bStyleToMarked )
|
||||
{
|
||||
// call SetStyleSheetToMarked after adding the ScUndoModifyStyle,
|
||||
// so redo will find the modified style
|
||||
SetStyleSheetToMarked( static_cast<SfxStyleSheet*>(pStyleSheet) );
|
||||
InvalidateAttribs();
|
||||
}
|
||||
|
||||
if ( bListAction )
|
||||
pDocSh->GetUndoManager()->LeaveListAction();
|
||||
}
|
||||
|
||||
void ScTabViewShell::GetStyleState( SfxItemSet& rSet )
|
||||
{
|
||||
ScDocument& rDoc = GetViewData().GetDocument();
|
||||
SfxStyleSheetBasePool* pStylePool = rDoc.GetStyleSheetPool();
|
||||
|
||||
bool bProtected = false;
|
||||
SCTAB nTabCount = rDoc.GetTableCount();
|
||||
for (SCTAB i=0; i<nTabCount && !bProtected; i++)
|
||||
if (rDoc.IsTabProtected(i)) // look after protected table
|
||||
bProtected = true;
|
||||
|
||||
SfxWhichIter aIter(rSet);
|
||||
sal_uInt16 nWhich = aIter.FirstWhich();
|
||||
sal_uInt16 nSlotId = 0;
|
||||
|
||||
while ( nWhich )
|
||||
{
|
||||
nSlotId = SfxItemPool::IsWhich( nWhich )
|
||||
? GetPool().GetSlotId( nWhich )
|
||||
: nWhich;
|
||||
|
||||
switch ( nSlotId )
|
||||
{
|
||||
case SID_STYLE_APPLY:
|
||||
if ( !pStylePool )
|
||||
rSet.DisableItem( nSlotId );
|
||||
break;
|
||||
|
||||
case SID_STYLE_FAMILY2: // cell style sheets
|
||||
{
|
||||
SfxStyleSheet* pStyleSheet = const_cast<SfxStyleSheet*>(GetStyleSheetFromMarked());
|
||||
|
||||
if ( pStyleSheet )
|
||||
rSet.Put( SfxTemplateItem( nSlotId, pStyleSheet->GetName() ) );
|
||||
else
|
||||
rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_FAMILY4: // page style sheets
|
||||
{
|
||||
SCTAB nCurTab = GetViewData().GetTabNo();
|
||||
OUString aPageStyle = rDoc.GetPageStyle( nCurTab );
|
||||
SfxStyleSheet* pStyleSheet = pStylePool ? static_cast<SfxStyleSheet*>(pStylePool->
|
||||
Find( aPageStyle, SfxStyleFamily::Page )) : nullptr;
|
||||
|
||||
if ( pStyleSheet )
|
||||
rSet.Put( SfxTemplateItem( nSlotId, aPageStyle ) );
|
||||
else
|
||||
rSet.Put( SfxTemplateItem( nSlotId, OUString() ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_WATERCAN:
|
||||
{
|
||||
rSet.Put( SfxBoolItem( nSlotId, SC_MOD()->GetIsWaterCan() ) );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_UPDATE_BY_EXAMPLE:
|
||||
{
|
||||
std::unique_ptr<SfxUInt16Item> pFamilyItem;
|
||||
GetViewFrame().GetBindings().QueryState(SID_STYLE_FAMILY, pFamilyItem);
|
||||
|
||||
bool bPage = pFamilyItem && SfxStyleFamily::Page == static_cast<SfxStyleFamily>(pFamilyItem->GetValue());
|
||||
|
||||
if ( bProtected || bPage )
|
||||
rSet.DisableItem( nSlotId );
|
||||
}
|
||||
break;
|
||||
|
||||
case SID_STYLE_EDIT:
|
||||
case SID_STYLE_DELETE:
|
||||
case SID_STYLE_HIDE:
|
||||
case SID_STYLE_SHOW:
|
||||
{
|
||||
std::unique_ptr<SfxUInt16Item> pFamilyItem;
|
||||
GetViewFrame().GetBindings().QueryState(SID_STYLE_FAMILY, pFamilyItem);
|
||||
bool bPage = pFamilyItem && SfxStyleFamily::Page == static_cast<SfxStyleFamily>(pFamilyItem->GetValue());
|
||||
|
||||
if ( bProtected && !bPage )
|
||||
rSet.DisableItem( nSlotId );
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
nWhich = aIter.NextWhich();
|
||||
}
|
||||
}
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
|
Loading…
Reference in a new issue