1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
33*b1cdbd2cSJim Jagielski
34*b1cdbd2cSJim Jagielski //svdraw.hxx
35*b1cdbd2cSJim Jagielski #define _SDR_NOITEMS
36*b1cdbd2cSJim Jagielski #define _SDR_NOTOUCH
37*b1cdbd2cSJim Jagielski #define _SDR_NOTRANSFORM
38*b1cdbd2cSJim Jagielski #define _SI_NOSBXCONTROLS
39*b1cdbd2cSJim Jagielski #define _VCONT_HXX
40*b1cdbd2cSJim Jagielski #define _SI_NOOTHERFORMS
41*b1cdbd2cSJim Jagielski #define _VCTRLS_HXX
42*b1cdbd2cSJim Jagielski #define _SI_NOCONTROL
43*b1cdbd2cSJim Jagielski #define _SETBRW_HXX
44*b1cdbd2cSJim Jagielski #define _VCBRW_HXX
45*b1cdbd2cSJim Jagielski #define _SI_NOSBXCONTROLS
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
48*b1cdbd2cSJim Jagielski
49*b1cdbd2cSJim Jagielski #include "scitems.hxx"
50*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
53*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
54*b1cdbd2cSJim Jagielski #include <sfx2/objface.hxx>
55*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
56*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
57*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski #define _ZFORLIST_DECLARE_TABLE
60*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
61*b1cdbd2cSJim Jagielski #include <svl/zformat.hxx>
62*b1cdbd2cSJim Jagielski #include <svl/languageoptions.hxx>
63*b1cdbd2cSJim Jagielski #include <editeng/boxitem.hxx>
64*b1cdbd2cSJim Jagielski #include <editeng/langitem.hxx>
65*b1cdbd2cSJim Jagielski #include <svx/numinf.hxx>
66*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
67*b1cdbd2cSJim Jagielski #include <sfx2/templdlg.hxx>
68*b1cdbd2cSJim Jagielski #include <sfx2/tplpitem.hxx>
69*b1cdbd2cSJim Jagielski #include <editeng/svxenum.hxx>
70*b1cdbd2cSJim Jagielski #include <svx/algitem.hxx>
71*b1cdbd2cSJim Jagielski #include <editeng/wghtitem.hxx>
72*b1cdbd2cSJim Jagielski #include <editeng/postitem.hxx>
73*b1cdbd2cSJim Jagielski #include <editeng/udlnitem.hxx>
74*b1cdbd2cSJim Jagielski #include <editeng/bolnitem.hxx>
75*b1cdbd2cSJim Jagielski #include <editeng/colritem.hxx>
76*b1cdbd2cSJim Jagielski #include <editeng/brshitem.hxx>
77*b1cdbd2cSJim Jagielski #include <editeng/frmdiritem.hxx>
78*b1cdbd2cSJim Jagielski #include <editeng/scripttypeitem.hxx>
79*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx>
80*b1cdbd2cSJim Jagielski #include <editeng/shaditem.hxx>
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski #include "formatsh.hxx"
83*b1cdbd2cSJim Jagielski #include "sc.hrc"
84*b1cdbd2cSJim Jagielski #include "globstr.hrc"
85*b1cdbd2cSJim Jagielski #include "docsh.hxx"
86*b1cdbd2cSJim Jagielski #include "patattr.hxx"
87*b1cdbd2cSJim Jagielski #include "scmod.hxx"
88*b1cdbd2cSJim Jagielski //CHINA001 #include "styledlg.hxx"
89*b1cdbd2cSJim Jagielski #include "attrdlg.hrc"
90*b1cdbd2cSJim Jagielski #include "stlpool.hxx"
91*b1cdbd2cSJim Jagielski #include "stlsheet.hxx"
92*b1cdbd2cSJim Jagielski #include "printfun.hxx"
93*b1cdbd2cSJim Jagielski #include "docpool.hxx"
94*b1cdbd2cSJim Jagielski #include "scresid.hxx"
95*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
96*b1cdbd2cSJim Jagielski #include "undostyl.hxx"
97*b1cdbd2cSJim Jagielski
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski #define ScFormatShell
100*b1cdbd2cSJim Jagielski #define TableFont
101*b1cdbd2cSJim Jagielski #define FormatForSelection
102*b1cdbd2cSJim Jagielski #include "scslots.hxx"
103*b1cdbd2cSJim Jagielski
104*b1cdbd2cSJim Jagielski #include "scabstdlg.hxx" //CHINA001
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski namespace {
107*b1cdbd2cSJim Jagielski
lclConvertSlotToHAlign(sal_uInt16 nSlot)108*b1cdbd2cSJim Jagielski SvxCellHorJustify lclConvertSlotToHAlign( sal_uInt16 nSlot )
109*b1cdbd2cSJim Jagielski {
110*b1cdbd2cSJim Jagielski SvxCellHorJustify eHJustify = SVX_HOR_JUSTIFY_STANDARD;
111*b1cdbd2cSJim Jagielski switch( nSlot )
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_HDEFAULT: eHJustify = SVX_HOR_JUSTIFY_STANDARD; break;
114*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_LEFT: eHJustify = SVX_HOR_JUSTIFY_LEFT; break;
115*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_HCENTER: eHJustify = SVX_HOR_JUSTIFY_CENTER; break;
116*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_RIGHT: eHJustify = SVX_HOR_JUSTIFY_RIGHT; break;
117*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_JUSTIFIED: eHJustify = SVX_HOR_JUSTIFY_BLOCK; break;
118*b1cdbd2cSJim Jagielski default: DBG_ERRORFILE( "lclConvertSlotToHAlign - invalid slot" );
119*b1cdbd2cSJim Jagielski }
120*b1cdbd2cSJim Jagielski return eHJustify;
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski
lclConvertSlotToVAlign(sal_uInt16 nSlot)123*b1cdbd2cSJim Jagielski SvxCellVerJustify lclConvertSlotToVAlign( sal_uInt16 nSlot )
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski SvxCellVerJustify eVJustify = SVX_VER_JUSTIFY_STANDARD;
126*b1cdbd2cSJim Jagielski switch( nSlot )
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_VDEFAULT: eVJustify = SVX_VER_JUSTIFY_STANDARD; break;
129*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_TOP: eVJustify = SVX_VER_JUSTIFY_TOP; break;
130*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_VCENTER: eVJustify = SVX_VER_JUSTIFY_CENTER; break;
131*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_BOTTOM: eVJustify = SVX_VER_JUSTIFY_BOTTOM; break;
132*b1cdbd2cSJim Jagielski default: DBG_ERRORFILE( "lclConvertSlotToVAlign - invalid slot" );
133*b1cdbd2cSJim Jagielski }
134*b1cdbd2cSJim Jagielski return eVJustify;
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski } // namespace
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski TYPEINIT1( ScFormatShell, SfxShell );
140*b1cdbd2cSJim Jagielski
SFX_IMPL_INTERFACE(ScFormatShell,SfxShell,ScResId (SCSTR_FORMATSHELL))141*b1cdbd2cSJim Jagielski SFX_IMPL_INTERFACE(ScFormatShell, SfxShell, ScResId(SCSTR_FORMATSHELL) )
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_OBJECT | SFX_VISIBILITY_STANDARD |
144*b1cdbd2cSJim Jagielski SFX_VISIBILITY_SERVER,
145*b1cdbd2cSJim Jagielski ScResId(RID_OBJECTBAR_FORMAT));
146*b1cdbd2cSJim Jagielski
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski
ScFormatShell(ScViewData * pData)150*b1cdbd2cSJim Jagielski ScFormatShell::ScFormatShell(ScViewData* pData) :
151*b1cdbd2cSJim Jagielski SfxShell(pData->GetViewShell()),
152*b1cdbd2cSJim Jagielski pViewData(pData)
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski SetPool( &pTabViewShell->GetPool() );
157*b1cdbd2cSJim Jagielski ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager();
158*b1cdbd2cSJim Jagielski SetUndoManager( pMgr );
159*b1cdbd2cSJim Jagielski if ( !pViewData->GetDocument()->IsUndoEnabled() )
160*b1cdbd2cSJim Jagielski {
161*b1cdbd2cSJim Jagielski pMgr->SetMaxUndoActionCount( 0 );
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski SetHelpId(HID_SCSHELL_FORMATSH);
164*b1cdbd2cSJim Jagielski SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Format")));
165*b1cdbd2cSJim Jagielski }
166*b1cdbd2cSJim Jagielski
~ScFormatShell()167*b1cdbd2cSJim Jagielski ScFormatShell::~ScFormatShell()
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski }
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
172*b1cdbd2cSJim Jagielski
GetStyleState(SfxItemSet & rSet)173*b1cdbd2cSJim Jagielski void __EXPORT ScFormatShell::GetStyleState( SfxItemSet& rSet )
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski ScDocument* pDoc = GetViewData()->GetDocument();
176*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
177*b1cdbd2cSJim Jagielski SfxStyleSheetBasePool* pStylePool = pDoc->GetStyleSheetPool();
178*b1cdbd2cSJim Jagielski
179*b1cdbd2cSJim Jagielski sal_Bool bProtected = sal_False;
180*b1cdbd2cSJim Jagielski SCTAB nTabCount = pDoc->GetTableCount();
181*b1cdbd2cSJim Jagielski for (SCTAB i=0; i<nTabCount; i++)
182*b1cdbd2cSJim Jagielski if (pDoc->IsTabProtected(i)) // ueberhaupt eine Tabelle geschuetzt?
183*b1cdbd2cSJim Jagielski bProtected = sal_True;
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski SfxWhichIter aIter(rSet);
186*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = aIter.FirstWhich();
187*b1cdbd2cSJim Jagielski sal_uInt16 nSlotId = 0;
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski while ( nWhich )
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski nSlotId = SfxItemPool::IsWhich( nWhich )
192*b1cdbd2cSJim Jagielski ? GetPool().GetSlotId( nWhich )
193*b1cdbd2cSJim Jagielski : nWhich;
194*b1cdbd2cSJim Jagielski
195*b1cdbd2cSJim Jagielski switch ( nSlotId )
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski case SID_STYLE_APPLY:
198*b1cdbd2cSJim Jagielski if ( !pStylePool )
199*b1cdbd2cSJim Jagielski rSet.DisableItem( nSlotId );
200*b1cdbd2cSJim Jagielski break;
201*b1cdbd2cSJim Jagielski
202*b1cdbd2cSJim Jagielski case SID_STYLE_FAMILY2: // Zellvorlagen
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski SfxStyleSheet* pStyleSheet = (SfxStyleSheet*)
205*b1cdbd2cSJim Jagielski pTabViewShell->GetStyleSheetFromMarked();
206*b1cdbd2cSJim Jagielski
207*b1cdbd2cSJim Jagielski if ( pStyleSheet )
208*b1cdbd2cSJim Jagielski rSet.Put( SfxTemplateItem( nSlotId, pStyleSheet->GetName() ) );
209*b1cdbd2cSJim Jagielski else
210*b1cdbd2cSJim Jagielski rSet.Put( SfxTemplateItem( nSlotId, String() ) );
211*b1cdbd2cSJim Jagielski }
212*b1cdbd2cSJim Jagielski break;
213*b1cdbd2cSJim Jagielski
214*b1cdbd2cSJim Jagielski case SID_STYLE_FAMILY4: // Seitenvorlagen
215*b1cdbd2cSJim Jagielski {
216*b1cdbd2cSJim Jagielski SCTAB nCurTab = GetViewData()->GetTabNo();
217*b1cdbd2cSJim Jagielski String aPageStyle = pDoc->GetPageStyle( nCurTab );
218*b1cdbd2cSJim Jagielski SfxStyleSheet* pStyleSheet = (SfxStyleSheet*)pStylePool->
219*b1cdbd2cSJim Jagielski Find( aPageStyle, SFX_STYLE_FAMILY_PAGE );
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski if ( pStyleSheet )
222*b1cdbd2cSJim Jagielski rSet.Put( SfxTemplateItem( nSlotId, aPageStyle ) );
223*b1cdbd2cSJim Jagielski else
224*b1cdbd2cSJim Jagielski rSet.Put( SfxTemplateItem( nSlotId, String() ) );
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski break;
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski case SID_STYLE_WATERCAN:
229*b1cdbd2cSJim Jagielski {
230*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nSlotId, SC_MOD()->GetIsWaterCan() ) );
231*b1cdbd2cSJim Jagielski }
232*b1cdbd2cSJim Jagielski break;
233*b1cdbd2cSJim Jagielski
234*b1cdbd2cSJim Jagielski case SID_STYLE_UPDATE_BY_EXAMPLE:
235*b1cdbd2cSJim Jagielski {
236*b1cdbd2cSJim Jagielski ISfxTemplateCommon* pDesigner = SFX_APP()->
237*b1cdbd2cSJim Jagielski GetCurrentTemplateCommon(pTabViewShell->GetViewFrame()->GetBindings());
238*b1cdbd2cSJim Jagielski sal_Bool bPage = pDesigner && SFX_STYLE_FAMILY_PAGE == pDesigner->GetActualFamily();
239*b1cdbd2cSJim Jagielski
240*b1cdbd2cSJim Jagielski if ( bProtected || bPage )
241*b1cdbd2cSJim Jagielski rSet.DisableItem( nSlotId );
242*b1cdbd2cSJim Jagielski }
243*b1cdbd2cSJim Jagielski break;
244*b1cdbd2cSJim Jagielski
245*b1cdbd2cSJim Jagielski case SID_STYLE_EDIT:
246*b1cdbd2cSJim Jagielski case SID_STYLE_DELETE:
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski ISfxTemplateCommon* pDesigner = SFX_APP()->
249*b1cdbd2cSJim Jagielski GetCurrentTemplateCommon(pTabViewShell->GetViewFrame()->GetBindings());
250*b1cdbd2cSJim Jagielski sal_Bool bPage = pDesigner && SFX_STYLE_FAMILY_PAGE == pDesigner->GetActualFamily();
251*b1cdbd2cSJim Jagielski
252*b1cdbd2cSJim Jagielski if ( bProtected && !bPage )
253*b1cdbd2cSJim Jagielski rSet.DisableItem( nSlotId );
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski break;
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski default:
258*b1cdbd2cSJim Jagielski break;
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski nWhich = aIter.NextWhich();
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski
265*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
266*b1cdbd2cSJim Jagielski
ExecuteStyle(SfxRequest & rReq)267*b1cdbd2cSJim Jagielski void __EXPORT ScFormatShell::ExecuteStyle( SfxRequest& rReq )
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski // Wenn ToolBar vertikal :
270*b1cdbd2cSJim Jagielski if ( !rReq.GetArgs() )
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski pViewData->GetDispatcher().Execute( SID_STYLE_DESIGNER, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
273*b1cdbd2cSJim Jagielski return;
274*b1cdbd2cSJim Jagielski }
275*b1cdbd2cSJim Jagielski
276*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
277*b1cdbd2cSJim Jagielski SfxBindings& rBindings = pViewData->GetBindings();
278*b1cdbd2cSJim Jagielski const SfxItemSet* pArgs = rReq.GetArgs();
279*b1cdbd2cSJim Jagielski const sal_uInt16 nSlotId = rReq.GetSlot();
280*b1cdbd2cSJim Jagielski const SCTAB nCurTab = GetViewData()->GetTabNo();
281*b1cdbd2cSJim Jagielski ScDocShell* pDocSh = GetViewData()->GetDocShell();
282*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell= GetViewData()->GetViewShell();
283*b1cdbd2cSJim Jagielski ScDocument* pDoc = pDocSh->GetDocument();
284*b1cdbd2cSJim Jagielski ScMarkData& rMark = GetViewData()->GetMarkData();
285*b1cdbd2cSJim Jagielski ScModule* pScMod = SC_MOD();
286*b1cdbd2cSJim Jagielski String aRefName;
287*b1cdbd2cSJim Jagielski sal_Bool bUndo = pDoc->IsUndoEnabled();
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielski if ( (nSlotId == SID_STYLE_NEW)
290*b1cdbd2cSJim Jagielski || (nSlotId == SID_STYLE_EDIT)
291*b1cdbd2cSJim Jagielski || (nSlotId == SID_STYLE_DELETE)
292*b1cdbd2cSJim Jagielski || (nSlotId == SID_STYLE_APPLY)
293*b1cdbd2cSJim Jagielski || (nSlotId == SID_STYLE_WATERCAN)
294*b1cdbd2cSJim Jagielski || (nSlotId == SID_STYLE_FAMILY)
295*b1cdbd2cSJim Jagielski || (nSlotId == SID_STYLE_NEW_BY_EXAMPLE)
296*b1cdbd2cSJim Jagielski || (nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE) )
297*b1cdbd2cSJim Jagielski {
298*b1cdbd2cSJim Jagielski SfxStyleSheetBasePool* pStylePool = pDoc->GetStyleSheetPool();
299*b1cdbd2cSJim Jagielski SfxStyleSheetBase* pStyleSheet = NULL;
300*b1cdbd2cSJim Jagielski
301*b1cdbd2cSJim Jagielski sal_Bool bStyleToMarked = sal_False;
302*b1cdbd2cSJim Jagielski sal_Bool bListAction = sal_False;
303*b1cdbd2cSJim Jagielski sal_Bool bAddUndo = sal_False; // add ScUndoModifyStyle (style modified)
304*b1cdbd2cSJim Jagielski ScStyleSaveData aOldData; // for undo/redo
305*b1cdbd2cSJim Jagielski ScStyleSaveData aNewData;
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski SfxStyleFamily eFamily = SFX_STYLE_FAMILY_PARA;
308*b1cdbd2cSJim Jagielski const SfxPoolItem* pFamItem;
309*b1cdbd2cSJim Jagielski if ( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILY, sal_True, &pFamItem ) )
310*b1cdbd2cSJim Jagielski eFamily = (SfxStyleFamily)((const SfxUInt16Item*)pFamItem)->GetValue();
311*b1cdbd2cSJim Jagielski else
312*b1cdbd2cSJim Jagielski if ( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILYNAME, sal_True, &pFamItem ) )
313*b1cdbd2cSJim Jagielski {
314*b1cdbd2cSJim Jagielski String sFamily = ((const SfxStringItem*)pFamItem)->GetValue();
315*b1cdbd2cSJim Jagielski if (sFamily.CompareToAscii("CellStyles") == COMPARE_EQUAL)
316*b1cdbd2cSJim Jagielski eFamily = SFX_STYLE_FAMILY_PARA;
317*b1cdbd2cSJim Jagielski else
318*b1cdbd2cSJim Jagielski if (sFamily.CompareToAscii("PageStyles") == COMPARE_EQUAL)
319*b1cdbd2cSJim Jagielski eFamily = SFX_STYLE_FAMILY_PAGE;
320*b1cdbd2cSJim Jagielski }
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski String aStyleName;
323*b1cdbd2cSJim Jagielski sal_uInt16 nRetMask = 0xffff;
324*b1cdbd2cSJim Jagielski // #96983# only stylist sends focus to sheet
325*b1cdbd2cSJim Jagielski // sal_Bool bGrabFocus = ( SID_STYLE_APPLY == nSlotId );
326*b1cdbd2cSJim Jagielski
327*b1cdbd2cSJim Jagielski pStylePool->SetSearchMask( eFamily, SFXSTYLEBIT_ALL );
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim Jagielski switch ( nSlotId )
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski case SID_STYLE_NEW:
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski const SfxPoolItem* pNameItem;
334*b1cdbd2cSJim Jagielski if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( nSlotId, sal_True, &pNameItem ))
335*b1cdbd2cSJim Jagielski aStyleName = ((const SfxStringItem*)pNameItem)->GetValue();
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski const SfxPoolItem* pRefItem=NULL;
338*b1cdbd2cSJim Jagielski if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_REFERENCE, sal_True, &pRefItem ))
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski if(pRefItem!=NULL)
341*b1cdbd2cSJim Jagielski aRefName = ((const SfxStringItem*)pRefItem)->GetValue();
342*b1cdbd2cSJim Jagielski }
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski pStyleSheet = &(pStylePool->Make( aStyleName, eFamily,
345*b1cdbd2cSJim Jagielski SFXSTYLEBIT_USERDEF ) );
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski if ( pStyleSheet && pStyleSheet->HasParentSupport() )
348*b1cdbd2cSJim Jagielski pStyleSheet->SetParent(aRefName);
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski break;
351*b1cdbd2cSJim Jagielski
352*b1cdbd2cSJim Jagielski case SID_STYLE_APPLY:
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_APPLY_STYLE, sal_False );
355*b1cdbd2cSJim Jagielski SFX_REQUEST_ARG( rReq, pFamilyItem, SfxStringItem, SID_STYLE_FAMILYNAME, sal_False );
356*b1cdbd2cSJim Jagielski if ( pFamilyItem && pNameItem )
357*b1cdbd2cSJim Jagielski {
358*b1cdbd2cSJim Jagielski com::sun::star::uno::Reference< com::sun::star::style::XStyleFamiliesSupplier > xModel(pDocSh->GetModel(), com::sun::star::uno::UNO_QUERY);
359*b1cdbd2cSJim Jagielski try
360*b1cdbd2cSJim Jagielski {
361*b1cdbd2cSJim Jagielski com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xStyles;
362*b1cdbd2cSJim Jagielski com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xCont = xModel->getStyleFamilies();
363*b1cdbd2cSJim Jagielski xCont->getByName(pFamilyItem->GetValue()) >>= xStyles;
364*b1cdbd2cSJim Jagielski com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet > xInfo;
365*b1cdbd2cSJim Jagielski xStyles->getByName( pNameItem->GetValue() ) >>= xInfo;
366*b1cdbd2cSJim Jagielski ::rtl::OUString aUIName;
367*b1cdbd2cSJim Jagielski xInfo->getPropertyValue( ::rtl::OUString::createFromAscii("DisplayName") ) >>= aUIName;
368*b1cdbd2cSJim Jagielski if ( aUIName.getLength() )
369*b1cdbd2cSJim Jagielski rReq.AppendItem( SfxStringItem( SID_STYLE_APPLY, aUIName ) );
370*b1cdbd2cSJim Jagielski }
371*b1cdbd2cSJim Jagielski catch( com::sun::star::uno::Exception& )
372*b1cdbd2cSJim Jagielski {
373*b1cdbd2cSJim Jagielski }
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski case SID_STYLE_EDIT:
377*b1cdbd2cSJim Jagielski case SID_STYLE_DELETE:
378*b1cdbd2cSJim Jagielski case SID_STYLE_NEW_BY_EXAMPLE:
379*b1cdbd2cSJim Jagielski {
380*b1cdbd2cSJim Jagielski const SfxPoolItem* pNameItem;
381*b1cdbd2cSJim Jagielski if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( nSlotId, sal_True, &pNameItem ))
382*b1cdbd2cSJim Jagielski aStyleName = ((const SfxStringItem*)pNameItem)->GetValue();
383*b1cdbd2cSJim Jagielski pStyleSheet = pStylePool->Find( aStyleName, eFamily );
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski aOldData.InitFromStyle( pStyleSheet );
386*b1cdbd2cSJim Jagielski }
387*b1cdbd2cSJim Jagielski break;
388*b1cdbd2cSJim Jagielski
389*b1cdbd2cSJim Jagielski case SID_STYLE_WATERCAN:
390*b1cdbd2cSJim Jagielski {
391*b1cdbd2cSJim Jagielski sal_Bool bWaterCan = pScMod->GetIsWaterCan();
392*b1cdbd2cSJim Jagielski
393*b1cdbd2cSJim Jagielski if( !bWaterCan )
394*b1cdbd2cSJim Jagielski {
395*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
396*b1cdbd2cSJim Jagielski
397*b1cdbd2cSJim Jagielski if ( SFX_ITEM_SET ==
398*b1cdbd2cSJim Jagielski pArgs->GetItemState( nSlotId, sal_True, &pItem ) )
399*b1cdbd2cSJim Jagielski {
400*b1cdbd2cSJim Jagielski const SfxStringItem* pStrItem = PTR_CAST(SfxStringItem,pItem);
401*b1cdbd2cSJim Jagielski if ( pStrItem )
402*b1cdbd2cSJim Jagielski {
403*b1cdbd2cSJim Jagielski aStyleName = pStrItem->GetValue();
404*b1cdbd2cSJim Jagielski pStyleSheet = pStylePool->Find( aStyleName, eFamily );
405*b1cdbd2cSJim Jagielski
406*b1cdbd2cSJim Jagielski if ( pStyleSheet )
407*b1cdbd2cSJim Jagielski {
408*b1cdbd2cSJim Jagielski ((ScStyleSheetPool*)pStylePool)->
409*b1cdbd2cSJim Jagielski SetActualStyleSheet( pStyleSheet );
410*b1cdbd2cSJim Jagielski rReq.Done();
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski }
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski if ( !bWaterCan && pStyleSheet )
417*b1cdbd2cSJim Jagielski {
418*b1cdbd2cSJim Jagielski pScMod->SetWaterCan( sal_True );
419*b1cdbd2cSJim Jagielski pTabViewShell->SetActivePointer( Pointer(POINTER_FILL) );
420*b1cdbd2cSJim Jagielski rReq.Done();
421*b1cdbd2cSJim Jagielski }
422*b1cdbd2cSJim Jagielski else
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski pScMod->SetWaterCan( sal_False );
425*b1cdbd2cSJim Jagielski pTabViewShell->SetActivePointer( Pointer(POINTER_ARROW) );
426*b1cdbd2cSJim Jagielski rReq.Done();
427*b1cdbd2cSJim Jagielski }
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski break;
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski default:
432*b1cdbd2cSJim Jagielski break;
433*b1cdbd2cSJim Jagielski }
434*b1cdbd2cSJim Jagielski
435*b1cdbd2cSJim Jagielski // Neuen Style fuer WaterCan-Mode setzen
436*b1cdbd2cSJim Jagielski if ( nSlotId == SID_STYLE_APPLY && pScMod->GetIsWaterCan() && pStyleSheet )
437*b1cdbd2cSJim Jagielski ((ScStyleSheetPool*)pStylePool)->SetActualStyleSheet( pStyleSheet );
438*b1cdbd2cSJim Jagielski
439*b1cdbd2cSJim Jagielski switch ( eFamily )
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski case SFX_STYLE_FAMILY_PARA:
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski switch ( nSlotId )
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski case SID_STYLE_DELETE:
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski if ( pStyleSheet )
448*b1cdbd2cSJim Jagielski {
449*b1cdbd2cSJim Jagielski pTabViewShell->RemoveStyleSheetInUse( pStyleSheet );
450*b1cdbd2cSJim Jagielski pStylePool->Remove( pStyleSheet );
451*b1cdbd2cSJim Jagielski pTabViewShell->InvalidateAttribs();
452*b1cdbd2cSJim Jagielski nRetMask = sal_True;
453*b1cdbd2cSJim Jagielski bAddUndo = sal_True;
454*b1cdbd2cSJim Jagielski rReq.Done();
455*b1cdbd2cSJim Jagielski }
456*b1cdbd2cSJim Jagielski else
457*b1cdbd2cSJim Jagielski nRetMask = sal_False;
458*b1cdbd2cSJim Jagielski }
459*b1cdbd2cSJim Jagielski break;
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski case SID_STYLE_APPLY:
462*b1cdbd2cSJim Jagielski {
463*b1cdbd2cSJim Jagielski if ( pStyleSheet && !pScMod->GetIsWaterCan() )
464*b1cdbd2cSJim Jagielski {
465*b1cdbd2cSJim Jagielski // Anwenden der Vorlage auf das Dokument
466*b1cdbd2cSJim Jagielski pTabViewShell->SetStyleSheetToMarked( (SfxStyleSheet*)pStyleSheet );
467*b1cdbd2cSJim Jagielski pTabViewShell->InvalidateAttribs();
468*b1cdbd2cSJim Jagielski rReq.Done();
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski break;
472*b1cdbd2cSJim Jagielski
473*b1cdbd2cSJim Jagielski case SID_STYLE_NEW_BY_EXAMPLE:
474*b1cdbd2cSJim Jagielski case SID_STYLE_UPDATE_BY_EXAMPLE:
475*b1cdbd2cSJim Jagielski {
476*b1cdbd2cSJim Jagielski // Vorlage erzeugen/ersetzen durch Attribute
477*b1cdbd2cSJim Jagielski // an der Cursor-Position:
478*b1cdbd2cSJim Jagielski
479*b1cdbd2cSJim Jagielski const ScPatternAttr* pAttrItem = NULL;
480*b1cdbd2cSJim Jagielski
481*b1cdbd2cSJim Jagielski // Die Abfrage, ob markiert ist, war hier immer falsch,
482*b1cdbd2cSJim Jagielski // darum jetzt gar nicht mehr, und einfach vom Cursor.
483*b1cdbd2cSJim Jagielski // Wenn Attribute aus der Selektion genommen werden sollen,
484*b1cdbd2cSJim Jagielski // muss noch darauf geachtet werden, Items aus Vorlagen nicht
485*b1cdbd2cSJim Jagielski // zu uebernehmen (GetSelectionPattern sammelt auch Items aus
486*b1cdbd2cSJim Jagielski // Vorlagen zusammen) (#44748#)
487*b1cdbd2cSJim Jagielski // pAttrItem = GetSelectionPattern();
488*b1cdbd2cSJim Jagielski
489*b1cdbd2cSJim Jagielski // ScViewData* pViewData = GetViewData();
490*b1cdbd2cSJim Jagielski SCCOL nCol = pViewData->GetCurX();
491*b1cdbd2cSJim Jagielski SCROW nRow = pViewData->GetCurY();
492*b1cdbd2cSJim Jagielski pAttrItem = pDoc->GetPattern( nCol, nRow, nCurTab );
493*b1cdbd2cSJim Jagielski
494*b1cdbd2cSJim Jagielski SfxItemSet aAttrSet = pAttrItem->GetItemSet();
495*b1cdbd2cSJim Jagielski aAttrSet.ClearItem( ATTR_MERGE );
496*b1cdbd2cSJim Jagielski aAttrSet.ClearItem( ATTR_MERGE_FLAG );
497*b1cdbd2cSJim Jagielski // bedingte Formatierung und Gueltigkeit nicht uebernehmen,
498*b1cdbd2cSJim Jagielski // weil sie in der Vorlage nicht editiert werden koennen
499*b1cdbd2cSJim Jagielski aAttrSet.ClearItem( ATTR_VALIDDATA );
500*b1cdbd2cSJim Jagielski aAttrSet.ClearItem( ATTR_CONDITIONAL );
501*b1cdbd2cSJim Jagielski
502*b1cdbd2cSJim Jagielski if ( SID_STYLE_NEW_BY_EXAMPLE == nSlotId )
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski if ( bUndo )
505*b1cdbd2cSJim Jagielski {
506*b1cdbd2cSJim Jagielski String aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE );
507*b1cdbd2cSJim Jagielski pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
508*b1cdbd2cSJim Jagielski bListAction = sal_True;
509*b1cdbd2cSJim Jagielski }
510*b1cdbd2cSJim Jagielski
511*b1cdbd2cSJim Jagielski sal_Bool bConvertBack = sal_False;
512*b1cdbd2cSJim Jagielski SfxStyleSheet* pSheetInUse = (SfxStyleSheet*)
513*b1cdbd2cSJim Jagielski pTabViewShell->GetStyleSheetFromMarked();
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski // wenn neuer Style vorhanden und in der Selektion
516*b1cdbd2cSJim Jagielski // verwendet wird, so darf der Parent nicht uebernommen
517*b1cdbd2cSJim Jagielski // werden:
518*b1cdbd2cSJim Jagielski
519*b1cdbd2cSJim Jagielski if ( pStyleSheet && pSheetInUse && pStyleSheet == pSheetInUse )
520*b1cdbd2cSJim Jagielski pSheetInUse = NULL;
521*b1cdbd2cSJim Jagielski
522*b1cdbd2cSJim Jagielski // wenn bereits vorhanden, erstmal entfernen...
523*b1cdbd2cSJim Jagielski if ( pStyleSheet )
524*b1cdbd2cSJim Jagielski {
525*b1cdbd2cSJim Jagielski // Style-Pointer zu Namen vor Erase,
526*b1cdbd2cSJim Jagielski // weil Zellen sonst ungueltige Pointer
527*b1cdbd2cSJim Jagielski // enthalten.
528*b1cdbd2cSJim Jagielski //!!! bei Gelenheit mal eine Methode, die
529*b1cdbd2cSJim Jagielski // das fuer einen bestimmten Style macht
530*b1cdbd2cSJim Jagielski pDoc->StylesToNames();
531*b1cdbd2cSJim Jagielski bConvertBack = sal_True;
532*b1cdbd2cSJim Jagielski pStylePool->Remove(pStyleSheet);
533*b1cdbd2cSJim Jagielski }
534*b1cdbd2cSJim Jagielski
535*b1cdbd2cSJim Jagielski // ...und neu anlegen
536*b1cdbd2cSJim Jagielski pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
537*b1cdbd2cSJim Jagielski SFXSTYLEBIT_USERDEF );
538*b1cdbd2cSJim Jagielski
539*b1cdbd2cSJim Jagielski // wenn ein Style vorhanden ist, so wird dieser
540*b1cdbd2cSJim Jagielski // Parent der neuen Vorlage:
541*b1cdbd2cSJim Jagielski if ( pSheetInUse && pStyleSheet->HasParentSupport() )
542*b1cdbd2cSJim Jagielski pStyleSheet->SetParent( pSheetInUse->GetName() );
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski if ( bConvertBack )
545*b1cdbd2cSJim Jagielski // Namen zu Style-Pointer
546*b1cdbd2cSJim Jagielski pDoc->UpdStlShtPtrsFrmNms();
547*b1cdbd2cSJim Jagielski else
548*b1cdbd2cSJim Jagielski pDoc->GetPool()->CellStyleCreated( aStyleName );
549*b1cdbd2cSJim Jagielski
550*b1cdbd2cSJim Jagielski // Attribute uebernehmen und Style anwenden
551*b1cdbd2cSJim Jagielski pStyleSheet->GetItemSet().Put( aAttrSet );
552*b1cdbd2cSJim Jagielski pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski // call SetStyleSheetToMarked after adding the ScUndoModifyStyle
555*b1cdbd2cSJim Jagielski // (pStyleSheet pointer is used!)
556*b1cdbd2cSJim Jagielski bStyleToMarked = sal_True;
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski else // ( nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE )
559*b1cdbd2cSJim Jagielski {
560*b1cdbd2cSJim Jagielski pStyleSheet = (SfxStyleSheet*)pTabViewShell->GetStyleSheetFromMarked();
561*b1cdbd2cSJim Jagielski
562*b1cdbd2cSJim Jagielski if ( pStyleSheet )
563*b1cdbd2cSJim Jagielski {
564*b1cdbd2cSJim Jagielski aOldData.InitFromStyle( pStyleSheet );
565*b1cdbd2cSJim Jagielski
566*b1cdbd2cSJim Jagielski if ( bUndo )
567*b1cdbd2cSJim Jagielski {
568*b1cdbd2cSJim Jagielski String aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE );
569*b1cdbd2cSJim Jagielski pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
570*b1cdbd2cSJim Jagielski bListAction = sal_True;
571*b1cdbd2cSJim Jagielski }
572*b1cdbd2cSJim Jagielski
573*b1cdbd2cSJim Jagielski pStyleSheet->GetItemSet().Put( aAttrSet );
574*b1cdbd2cSJim Jagielski pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
575*b1cdbd2cSJim Jagielski
576*b1cdbd2cSJim Jagielski // call SetStyleSheetToMarked after adding the ScUndoModifyStyle
577*b1cdbd2cSJim Jagielski // (pStyleSheet pointer is used!)
578*b1cdbd2cSJim Jagielski bStyleToMarked = sal_True;
579*b1cdbd2cSJim Jagielski }
580*b1cdbd2cSJim Jagielski }
581*b1cdbd2cSJim Jagielski
582*b1cdbd2cSJim Jagielski aNewData.InitFromStyle( pStyleSheet );
583*b1cdbd2cSJim Jagielski bAddUndo = sal_True;
584*b1cdbd2cSJim Jagielski rReq.Done();
585*b1cdbd2cSJim Jagielski }
586*b1cdbd2cSJim Jagielski break;
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski default:
589*b1cdbd2cSJim Jagielski break;
590*b1cdbd2cSJim Jagielski }
591*b1cdbd2cSJim Jagielski } // case SFX_STYLE_FAMILY_PARA:
592*b1cdbd2cSJim Jagielski break;
593*b1cdbd2cSJim Jagielski
594*b1cdbd2cSJim Jagielski case SFX_STYLE_FAMILY_PAGE:
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski switch ( nSlotId )
597*b1cdbd2cSJim Jagielski {
598*b1cdbd2cSJim Jagielski case SID_STYLE_DELETE:
599*b1cdbd2cSJim Jagielski {
600*b1cdbd2cSJim Jagielski nRetMask = ( NULL != pStyleSheet );
601*b1cdbd2cSJim Jagielski if ( pStyleSheet )
602*b1cdbd2cSJim Jagielski {
603*b1cdbd2cSJim Jagielski if ( pDoc->RemovePageStyleInUse( pStyleSheet->GetName() ) )
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(sal_True), nCurTab ).UpdatePages();
606*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_STATUS_PAGESTYLE );
607*b1cdbd2cSJim Jagielski rBindings.Invalidate( FID_RESET_PRINTZOOM );
608*b1cdbd2cSJim Jagielski }
609*b1cdbd2cSJim Jagielski pStylePool->Remove( pStyleSheet );
610*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_STYLE_FAMILY4 );
611*b1cdbd2cSJim Jagielski pDocSh->SetDocumentModified();
612*b1cdbd2cSJim Jagielski bAddUndo = sal_True;
613*b1cdbd2cSJim Jagielski rReq.Done();
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski }
616*b1cdbd2cSJim Jagielski break;
617*b1cdbd2cSJim Jagielski
618*b1cdbd2cSJim Jagielski case SID_STYLE_APPLY:
619*b1cdbd2cSJim Jagielski {
620*b1cdbd2cSJim Jagielski nRetMask = ( NULL != pStyleSheet );
621*b1cdbd2cSJim Jagielski if ( pStyleSheet && !pScMod->GetIsWaterCan() )
622*b1cdbd2cSJim Jagielski {
623*b1cdbd2cSJim Jagielski ScUndoApplyPageStyle* pUndoAction = 0;
624*b1cdbd2cSJim Jagielski for( SCTAB nTab = 0, nTabCount = pDoc->GetTableCount(); nTab < nTabCount; ++nTab )
625*b1cdbd2cSJim Jagielski {
626*b1cdbd2cSJim Jagielski if( rMark.GetTableSelect( nTab ) )
627*b1cdbd2cSJim Jagielski {
628*b1cdbd2cSJim Jagielski String aOldName = pDoc->GetPageStyle( nTab );
629*b1cdbd2cSJim Jagielski if ( aOldName != aStyleName )
630*b1cdbd2cSJim Jagielski {
631*b1cdbd2cSJim Jagielski pDoc->SetPageStyle( nTab, aStyleName );
632*b1cdbd2cSJim Jagielski ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(sal_True), nTab ).UpdatePages();
633*b1cdbd2cSJim Jagielski if( !pUndoAction )
634*b1cdbd2cSJim Jagielski pUndoAction = new ScUndoApplyPageStyle( pDocSh, aStyleName );
635*b1cdbd2cSJim Jagielski pUndoAction->AddSheetAction( nTab, aOldName );
636*b1cdbd2cSJim Jagielski }
637*b1cdbd2cSJim Jagielski }
638*b1cdbd2cSJim Jagielski }
639*b1cdbd2cSJim Jagielski if( pUndoAction )
640*b1cdbd2cSJim Jagielski {
641*b1cdbd2cSJim Jagielski pDocSh->GetUndoManager()->AddUndoAction( pUndoAction );
642*b1cdbd2cSJim Jagielski pDocSh->SetDocumentModified();
643*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_STYLE_FAMILY4 );
644*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_STATUS_PAGESTYLE );
645*b1cdbd2cSJim Jagielski rBindings.Invalidate( FID_RESET_PRINTZOOM );
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski rReq.Done();
648*b1cdbd2cSJim Jagielski }
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski break;
651*b1cdbd2cSJim Jagielski
652*b1cdbd2cSJim Jagielski case SID_STYLE_NEW_BY_EXAMPLE:
653*b1cdbd2cSJim Jagielski {
654*b1cdbd2cSJim Jagielski const String& rStrCurStyle = pDoc->GetPageStyle( nCurTab );
655*b1cdbd2cSJim Jagielski
656*b1cdbd2cSJim Jagielski if ( rStrCurStyle != aStyleName )
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski SfxStyleSheetBase* pCurStyle = pStylePool->Find( rStrCurStyle, eFamily );
659*b1cdbd2cSJim Jagielski SfxItemSet aAttrSet = pCurStyle->GetItemSet();
660*b1cdbd2cSJim Jagielski SCTAB nInTab;
661*b1cdbd2cSJim Jagielski sal_Bool bUsed = pDoc->IsPageStyleInUse( aStyleName, &nInTab );
662*b1cdbd2cSJim Jagielski
663*b1cdbd2cSJim Jagielski // wenn bereits vorhanden, erstmal entfernen...
664*b1cdbd2cSJim Jagielski if ( pStyleSheet )
665*b1cdbd2cSJim Jagielski pStylePool->Remove( pStyleSheet );
666*b1cdbd2cSJim Jagielski
667*b1cdbd2cSJim Jagielski // ...und neu anlegen
668*b1cdbd2cSJim Jagielski pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
669*b1cdbd2cSJim Jagielski SFXSTYLEBIT_USERDEF );
670*b1cdbd2cSJim Jagielski
671*b1cdbd2cSJim Jagielski // Attribute uebernehmen
672*b1cdbd2cSJim Jagielski pStyleSheet->GetItemSet().Put( aAttrSet );
673*b1cdbd2cSJim Jagielski pDocSh->SetDocumentModified();
674*b1cdbd2cSJim Jagielski
675*b1cdbd2cSJim Jagielski // wenn in Verwendung -> Update
676*b1cdbd2cSJim Jagielski if ( bUsed )
677*b1cdbd2cSJim Jagielski ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(sal_True), nInTab ).UpdatePages();
678*b1cdbd2cSJim Jagielski
679*b1cdbd2cSJim Jagielski aNewData.InitFromStyle( pStyleSheet );
680*b1cdbd2cSJim Jagielski bAddUndo = sal_True;
681*b1cdbd2cSJim Jagielski rReq.Done();
682*b1cdbd2cSJim Jagielski nRetMask = sal_True;
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski }
685*b1cdbd2cSJim Jagielski break;
686*b1cdbd2cSJim Jagielski
687*b1cdbd2cSJim Jagielski default:
688*b1cdbd2cSJim Jagielski break;
689*b1cdbd2cSJim Jagielski } // switch ( nSlotId )
690*b1cdbd2cSJim Jagielski } // case SFX_STYLE_FAMILY_PAGE:
691*b1cdbd2cSJim Jagielski break;
692*b1cdbd2cSJim Jagielski
693*b1cdbd2cSJim Jagielski default:
694*b1cdbd2cSJim Jagielski break;
695*b1cdbd2cSJim Jagielski } // switch ( eFamily )
696*b1cdbd2cSJim Jagielski
697*b1cdbd2cSJim Jagielski // Neu anlegen oder bearbeiten ueber Dialog:
698*b1cdbd2cSJim Jagielski if ( nSlotId == SID_STYLE_NEW || nSlotId == SID_STYLE_EDIT )
699*b1cdbd2cSJim Jagielski {
700*b1cdbd2cSJim Jagielski if ( pStyleSheet )
701*b1cdbd2cSJim Jagielski {
702*b1cdbd2cSJim Jagielski SvxNumberInfoItem* pNumberInfoItem = NULL;
703*b1cdbd2cSJim Jagielski
704*b1cdbd2cSJim Jagielski SfxStyleFamily eFam = pStyleSheet->GetFamily();
705*b1cdbd2cSJim Jagielski // ScDocument* pDoc = GetViewData()->GetDocument();
706*b1cdbd2cSJim Jagielski // ScDocShell* pDocSh = GetViewData()->GetDocShell();
707*b1cdbd2cSJim Jagielski //CHINA001 ScStyleDlg* pDlg = NULL;
708*b1cdbd2cSJim Jagielski SfxAbstractTabDialog* pDlg = NULL; //CHINA001
709*b1cdbd2cSJim Jagielski sal_uInt16 nRsc = 0;
710*b1cdbd2cSJim Jagielski
711*b1cdbd2cSJim Jagielski // #37034#/#37245# alte Items aus der Vorlage merken
712*b1cdbd2cSJim Jagielski SfxItemSet aOldSet = pStyleSheet->GetItemSet();
713*b1cdbd2cSJim Jagielski String aOldName = pStyleSheet->GetName();
714*b1cdbd2cSJim Jagielski
715*b1cdbd2cSJim Jagielski switch ( eFam )
716*b1cdbd2cSJim Jagielski {
717*b1cdbd2cSJim Jagielski case SFX_STYLE_FAMILY_PAGE:
718*b1cdbd2cSJim Jagielski nRsc = RID_SCDLG_STYLES_PAGE;
719*b1cdbd2cSJim Jagielski break;
720*b1cdbd2cSJim Jagielski
721*b1cdbd2cSJim Jagielski case SFX_STYLE_FAMILY_PARA:
722*b1cdbd2cSJim Jagielski default:
723*b1cdbd2cSJim Jagielski {
724*b1cdbd2cSJim Jagielski SfxItemSet& rSet = pStyleSheet->GetItemSet();
725*b1cdbd2cSJim Jagielski
726*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
727*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_VALUE_FORMAT,
728*b1cdbd2cSJim Jagielski sal_False, &pItem ) == SFX_ITEM_SET )
729*b1cdbd2cSJim Jagielski {
730*b1cdbd2cSJim Jagielski // NumberFormat Value aus Value und Language
731*b1cdbd2cSJim Jagielski // erzeugen und eintueten
732*b1cdbd2cSJim Jagielski sal_uLong nFormat =
733*b1cdbd2cSJim Jagielski ((SfxUInt32Item*)pItem)->GetValue();
734*b1cdbd2cSJim Jagielski LanguageType eLang =
735*b1cdbd2cSJim Jagielski ((SvxLanguageItem*)&rSet.Get(
736*b1cdbd2cSJim Jagielski ATTR_LANGUAGE_FORMAT ))->GetLanguage();
737*b1cdbd2cSJim Jagielski sal_uLong nLangFormat = pDoc->GetFormatTable()->
738*b1cdbd2cSJim Jagielski GetFormatForLanguageIfBuiltIn( nFormat, eLang );
739*b1cdbd2cSJim Jagielski if ( nLangFormat != nFormat )
740*b1cdbd2cSJim Jagielski {
741*b1cdbd2cSJim Jagielski SfxUInt32Item aNewItem( ATTR_VALUE_FORMAT, nLangFormat );
742*b1cdbd2cSJim Jagielski rSet.Put( aNewItem );
743*b1cdbd2cSJim Jagielski aOldSet.Put( aNewItem );
744*b1cdbd2cSJim Jagielski // auch in aOldSet fuer Vergleich nach dem Dialog,
745*b1cdbd2cSJim Jagielski // sonst geht evtl. eine Aenderung der Sprache verloren
746*b1cdbd2cSJim Jagielski }
747*b1cdbd2cSJim Jagielski }
748*b1cdbd2cSJim Jagielski
749*b1cdbd2cSJim Jagielski pTabViewShell->MakeNumberInfoItem( pDoc, GetViewData(), &pNumberInfoItem );
750*b1cdbd2cSJim Jagielski pDocSh->PutItem( *pNumberInfoItem );
751*b1cdbd2cSJim Jagielski nRsc = RID_SCDLG_STYLES_PAR;
752*b1cdbd2cSJim Jagielski
753*b1cdbd2cSJim Jagielski // auf jeden Fall ein SvxBoxInfoItem mit Table = sal_False im Set:
754*b1cdbd2cSJim Jagielski // (wenn gar kein Item da ist, loescht der Dialog auch das
755*b1cdbd2cSJim Jagielski // BORDER_OUTER SvxBoxItem aus dem Vorlagen-Set)
756*b1cdbd2cSJim Jagielski
757*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_BORDER_INNER, sal_False ) != SFX_ITEM_SET )
758*b1cdbd2cSJim Jagielski {
759*b1cdbd2cSJim Jagielski SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
760*b1cdbd2cSJim Jagielski aBoxInfoItem.SetTable(sal_False); // keine inneren Linien
761*b1cdbd2cSJim Jagielski aBoxInfoItem.SetDist(sal_True);
762*b1cdbd2cSJim Jagielski aBoxInfoItem.SetMinDist(sal_False);
763*b1cdbd2cSJim Jagielski rSet.Put( aBoxInfoItem );
764*b1cdbd2cSJim Jagielski }
765*b1cdbd2cSJim Jagielski }
766*b1cdbd2cSJim Jagielski break;
767*b1cdbd2cSJim Jagielski }
768*b1cdbd2cSJim Jagielski
769*b1cdbd2cSJim Jagielski // If GetDefDialogParent is a dialog, it must be used
770*b1cdbd2cSJim Jagielski // (style catalog)
771*b1cdbd2cSJim Jagielski
772*b1cdbd2cSJim Jagielski Window* pParent = Application::GetDefDialogParent();
773*b1cdbd2cSJim Jagielski if ( !pParent || !pParent->IsDialog() )
774*b1cdbd2cSJim Jagielski {
775*b1cdbd2cSJim Jagielski // #107256# GetDefDialogParent currently doesn't return the window
776*b1cdbd2cSJim Jagielski // that was set with SetDefDialogParent (but dynamically finds the
777*b1cdbd2cSJim Jagielski // topmost parent of the focus window), so IsDialog above is FALSE
778*b1cdbd2cSJim Jagielski // even if called from the style catalog.
779*b1cdbd2cSJim Jagielski // -> Use NULL if a modal dialog is open, to enable the Dialog's
780*b1cdbd2cSJim Jagielski // default parent handling.
781*b1cdbd2cSJim Jagielski if ( Application::IsInModalMode() )
782*b1cdbd2cSJim Jagielski pParent = NULL;
783*b1cdbd2cSJim Jagielski else
784*b1cdbd2cSJim Jagielski pParent = pTabViewShell->GetDialogParent();
785*b1cdbd2cSJim Jagielski }
786*b1cdbd2cSJim Jagielski
787*b1cdbd2cSJim Jagielski pTabViewShell->SetInFormatDialog(sal_True);
788*b1cdbd2cSJim Jagielski
789*b1cdbd2cSJim Jagielski //CHINA001 pDlg = new ScStyleDlg( pParent, *pStyleSheet, nRsc );
790*b1cdbd2cSJim Jagielski ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
791*b1cdbd2cSJim Jagielski DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
792*b1cdbd2cSJim Jagielski
793*b1cdbd2cSJim Jagielski pDlg = pFact->CreateScStyleDlg( pParent, *pStyleSheet, nRsc, nRsc );
794*b1cdbd2cSJim Jagielski DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
795*b1cdbd2cSJim Jagielski short nResult = pDlg->Execute();
796*b1cdbd2cSJim Jagielski pTabViewShell->SetInFormatDialog(sal_False);
797*b1cdbd2cSJim Jagielski
798*b1cdbd2cSJim Jagielski if ( nResult == RET_OK )
799*b1cdbd2cSJim Jagielski {
800*b1cdbd2cSJim Jagielski const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
801*b1cdbd2cSJim Jagielski
802*b1cdbd2cSJim Jagielski if ( pOutSet )
803*b1cdbd2cSJim Jagielski {
804*b1cdbd2cSJim Jagielski nRetMask = pStyleSheet->GetMask();
805*b1cdbd2cSJim Jagielski
806*b1cdbd2cSJim Jagielski // #37034#/#37245# Attribut-Vergleiche (frueher in ModifyStyleSheet)
807*b1cdbd2cSJim Jagielski // jetzt hier mit den alten Werten (Style ist schon veraendert)
808*b1cdbd2cSJim Jagielski
809*b1cdbd2cSJim Jagielski if ( SFX_STYLE_FAMILY_PARA == eFam )
810*b1cdbd2cSJim Jagielski {
811*b1cdbd2cSJim Jagielski // pDoc->CellStyleChanged( *pStyleSheet, aOldSet );
812*b1cdbd2cSJim Jagielski
813*b1cdbd2cSJim Jagielski SfxItemSet& rNewSet = pStyleSheet->GetItemSet();
814*b1cdbd2cSJim Jagielski sal_Bool bNumFormatChanged;
815*b1cdbd2cSJim Jagielski if ( ScGlobal::CheckWidthInvalidate(
816*b1cdbd2cSJim Jagielski bNumFormatChanged, aOldSet, rNewSet ) )
817*b1cdbd2cSJim Jagielski pDoc->InvalidateTextWidth( NULL, NULL, bNumFormatChanged );
818*b1cdbd2cSJim Jagielski
819*b1cdbd2cSJim Jagielski SCTAB nTabCount = pDoc->GetTableCount();
820*b1cdbd2cSJim Jagielski for (SCTAB nTab=0; nTab<nTabCount; nTab++)
821*b1cdbd2cSJim Jagielski if (pDoc->IsStreamValid(nTab))
822*b1cdbd2cSJim Jagielski pDoc->SetStreamValid(nTab, sal_False);
823*b1cdbd2cSJim Jagielski
824*b1cdbd2cSJim Jagielski sal_uLong nOldFormat = ((const SfxUInt32Item&)aOldSet.
825*b1cdbd2cSJim Jagielski Get( ATTR_VALUE_FORMAT )).GetValue();
826*b1cdbd2cSJim Jagielski sal_uLong nNewFormat = ((const SfxUInt32Item&)rNewSet.
827*b1cdbd2cSJim Jagielski Get( ATTR_VALUE_FORMAT )).GetValue();
828*b1cdbd2cSJim Jagielski if ( nNewFormat != nOldFormat )
829*b1cdbd2cSJim Jagielski {
830*b1cdbd2cSJim Jagielski SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
831*b1cdbd2cSJim Jagielski const SvNumberformat* pOld = pFormatter->GetEntry( nOldFormat );
832*b1cdbd2cSJim Jagielski const SvNumberformat* pNew = pFormatter->GetEntry( nNewFormat );
833*b1cdbd2cSJim Jagielski if ( pOld && pNew && pOld->GetLanguage() != pNew->GetLanguage() )
834*b1cdbd2cSJim Jagielski rNewSet.Put( SvxLanguageItem(
835*b1cdbd2cSJim Jagielski pNew->GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
836*b1cdbd2cSJim Jagielski }
837*b1cdbd2cSJim Jagielski
838*b1cdbd2cSJim Jagielski pDoc->GetPool()->CellStyleCreated( pStyleSheet->GetName() );
839*b1cdbd2cSJim Jagielski }
840*b1cdbd2cSJim Jagielski else
841*b1cdbd2cSJim Jagielski {
842*b1cdbd2cSJim Jagielski //! auch fuer Seitenvorlagen die Abfragen hier
843*b1cdbd2cSJim Jagielski
844*b1cdbd2cSJim Jagielski String aNewName = pStyleSheet->GetName();
845*b1cdbd2cSJim Jagielski if ( aNewName != aOldName &&
846*b1cdbd2cSJim Jagielski pDoc->RenamePageStyleInUse( aOldName, aNewName ) )
847*b1cdbd2cSJim Jagielski {
848*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_STATUS_PAGESTYLE );
849*b1cdbd2cSJim Jagielski rBindings.Invalidate( FID_RESET_PRINTZOOM );
850*b1cdbd2cSJim Jagielski }
851*b1cdbd2cSJim Jagielski
852*b1cdbd2cSJim Jagielski pDoc->ModifyStyleSheet( *pStyleSheet, *pOutSet );
853*b1cdbd2cSJim Jagielski rBindings.Invalidate( FID_RESET_PRINTZOOM );
854*b1cdbd2cSJim Jagielski }
855*b1cdbd2cSJim Jagielski
856*b1cdbd2cSJim Jagielski pDocSh->SetDocumentModified();
857*b1cdbd2cSJim Jagielski
858*b1cdbd2cSJim Jagielski if ( SFX_STYLE_FAMILY_PARA == eFam )
859*b1cdbd2cSJim Jagielski {
860*b1cdbd2cSJim Jagielski pTabViewShell->UpdateNumberFormatter( pDoc,
861*b1cdbd2cSJim Jagielski (const SvxNumberInfoItem&)
862*b1cdbd2cSJim Jagielski *(pDocSh->GetItem(SID_ATTR_NUMBERFORMAT_INFO)) );
863*b1cdbd2cSJim Jagielski
864*b1cdbd2cSJim Jagielski pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
865*b1cdbd2cSJim Jagielski pTabViewShell->InvalidateAttribs();
866*b1cdbd2cSJim Jagielski }
867*b1cdbd2cSJim Jagielski
868*b1cdbd2cSJim Jagielski aNewData.InitFromStyle( pStyleSheet );
869*b1cdbd2cSJim Jagielski bAddUndo = sal_True;
870*b1cdbd2cSJim Jagielski }
871*b1cdbd2cSJim Jagielski }
872*b1cdbd2cSJim Jagielski else
873*b1cdbd2cSJim Jagielski {
874*b1cdbd2cSJim Jagielski if ( nSlotId == SID_STYLE_NEW )
875*b1cdbd2cSJim Jagielski pStylePool->Remove( pStyleSheet );
876*b1cdbd2cSJim Jagielski else
877*b1cdbd2cSJim Jagielski {
878*b1cdbd2cSJim Jagielski // falls zwischendurch etwas mit dem temporaer geaenderten
879*b1cdbd2cSJim Jagielski // ItemSet gepainted wurde:
880*b1cdbd2cSJim Jagielski pDocSh->PostPaintGridAll();
881*b1cdbd2cSJim Jagielski }
882*b1cdbd2cSJim Jagielski }
883*b1cdbd2cSJim Jagielski delete pDlg;
884*b1cdbd2cSJim Jagielski }
885*b1cdbd2cSJim Jagielski }
886*b1cdbd2cSJim Jagielski
887*b1cdbd2cSJim Jagielski // if ( nRetMask != 0xffff )// Irgendein Wert MUSS geliefert werden JN
888*b1cdbd2cSJim Jagielski rReq.SetReturnValue( SfxUInt16Item( nSlotId, nRetMask ) );
889*b1cdbd2cSJim Jagielski
890*b1cdbd2cSJim Jagielski // #96983# only stylist sends focus to sheet
891*b1cdbd2cSJim Jagielski // if ( bGrabFocus )
892*b1cdbd2cSJim Jagielski // pTabViewShell->GetActiveWin()->GrabFocus();
893*b1cdbd2cSJim Jagielski
894*b1cdbd2cSJim Jagielski if ( bAddUndo && bUndo)
895*b1cdbd2cSJim Jagielski pDocSh->GetUndoManager()->AddUndoAction(
896*b1cdbd2cSJim Jagielski new ScUndoModifyStyle( pDocSh, eFamily, aOldData, aNewData ) );
897*b1cdbd2cSJim Jagielski
898*b1cdbd2cSJim Jagielski if ( bStyleToMarked )
899*b1cdbd2cSJim Jagielski {
900*b1cdbd2cSJim Jagielski // call SetStyleSheetToMarked after adding the ScUndoModifyStyle,
901*b1cdbd2cSJim Jagielski // so redo will find the modified style
902*b1cdbd2cSJim Jagielski pTabViewShell->SetStyleSheetToMarked( (SfxStyleSheet*)pStyleSheet );
903*b1cdbd2cSJim Jagielski pTabViewShell->InvalidateAttribs();
904*b1cdbd2cSJim Jagielski }
905*b1cdbd2cSJim Jagielski
906*b1cdbd2cSJim Jagielski if ( bListAction )
907*b1cdbd2cSJim Jagielski pDocSh->GetUndoManager()->LeaveListAction();
908*b1cdbd2cSJim Jagielski }
909*b1cdbd2cSJim Jagielski else
910*b1cdbd2cSJim Jagielski {
911*b1cdbd2cSJim Jagielski DBG_ERROR( "Unknown slot (ScViewShell::ExecuteStyle)" );
912*b1cdbd2cSJim Jagielski }
913*b1cdbd2cSJim Jagielski }
914*b1cdbd2cSJim Jagielski
ExecuteNumFormat(SfxRequest & rReq)915*b1cdbd2cSJim Jagielski void ScFormatShell::ExecuteNumFormat( SfxRequest& rReq )
916*b1cdbd2cSJim Jagielski {
917*b1cdbd2cSJim Jagielski ScModule* pScMod = SC_MOD();
918*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
919*b1cdbd2cSJim Jagielski const SfxItemSet* pReqArgs = rReq.GetArgs();
920*b1cdbd2cSJim Jagielski sal_uInt16 nSlot = rReq.GetSlot();
921*b1cdbd2cSJim Jagielski
922*b1cdbd2cSJim Jagielski pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
923*b1cdbd2cSJim Jagielski
924*b1cdbd2cSJim Jagielski // Eingabe beenden
925*b1cdbd2cSJim Jagielski if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
926*b1cdbd2cSJim Jagielski {
927*b1cdbd2cSJim Jagielski switch ( nSlot )
928*b1cdbd2cSJim Jagielski {
929*b1cdbd2cSJim Jagielski case SID_NUMBER_TWODEC:
930*b1cdbd2cSJim Jagielski case SID_NUMBER_SCIENTIFIC:
931*b1cdbd2cSJim Jagielski case SID_NUMBER_DATE:
932*b1cdbd2cSJim Jagielski case SID_NUMBER_CURRENCY:
933*b1cdbd2cSJim Jagielski case SID_NUMBER_PERCENT:
934*b1cdbd2cSJim Jagielski case SID_NUMBER_STANDARD:
935*b1cdbd2cSJim Jagielski case SID_NUMBER_FORMAT:
936*b1cdbd2cSJim Jagielski case SID_NUMBER_INCDEC:
937*b1cdbd2cSJim Jagielski case SID_NUMBER_DECDEC:
938*b1cdbd2cSJim Jagielski case FID_DEFINE_NAME:
939*b1cdbd2cSJim Jagielski case FID_USE_NAME:
940*b1cdbd2cSJim Jagielski case FID_INSERT_NAME:
941*b1cdbd2cSJim Jagielski case SID_SPELL_DIALOG:
942*b1cdbd2cSJim Jagielski case SID_HANGUL_HANJA_CONVERSION:
943*b1cdbd2cSJim Jagielski
944*b1cdbd2cSJim Jagielski pScMod->InputEnterHandler();
945*b1cdbd2cSJim Jagielski pTabViewShell->UpdateInputHandler();
946*b1cdbd2cSJim Jagielski break;
947*b1cdbd2cSJim Jagielski
948*b1cdbd2cSJim Jagielski default:
949*b1cdbd2cSJim Jagielski break;
950*b1cdbd2cSJim Jagielski }
951*b1cdbd2cSJim Jagielski }
952*b1cdbd2cSJim Jagielski
953*b1cdbd2cSJim Jagielski switch ( nSlot )
954*b1cdbd2cSJim Jagielski {
955*b1cdbd2cSJim Jagielski case SID_NUMBER_TWODEC:
956*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER, 4 ); // Standard+4 = #.##0,00
957*b1cdbd2cSJim Jagielski rReq.Done();
958*b1cdbd2cSJim Jagielski break;
959*b1cdbd2cSJim Jagielski case SID_NUMBER_SCIENTIFIC:
960*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_SCIENTIFIC );
961*b1cdbd2cSJim Jagielski rReq.Done();
962*b1cdbd2cSJim Jagielski break;
963*b1cdbd2cSJim Jagielski case SID_NUMBER_DATE:
964*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_DATE );
965*b1cdbd2cSJim Jagielski rReq.Done();
966*b1cdbd2cSJim Jagielski break;
967*b1cdbd2cSJim Jagielski case SID_NUMBER_TIME:
968*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_TIME );
969*b1cdbd2cSJim Jagielski rReq.Done();
970*b1cdbd2cSJim Jagielski break;
971*b1cdbd2cSJim Jagielski case SID_NUMBER_CURRENCY:
972*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_CURRENCY );
973*b1cdbd2cSJim Jagielski rReq.Done();
974*b1cdbd2cSJim Jagielski break;
975*b1cdbd2cSJim Jagielski case SID_NUMBER_PERCENT:
976*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_PERCENT );
977*b1cdbd2cSJim Jagielski rReq.Done();
978*b1cdbd2cSJim Jagielski break;
979*b1cdbd2cSJim Jagielski case SID_NUMBER_STANDARD:
980*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
981*b1cdbd2cSJim Jagielski rReq.Done();
982*b1cdbd2cSJim Jagielski break;
983*b1cdbd2cSJim Jagielski case SID_NUMBER_INCDEC:
984*b1cdbd2cSJim Jagielski pTabViewShell->ChangeNumFmtDecimals( sal_True );
985*b1cdbd2cSJim Jagielski rReq.Done();
986*b1cdbd2cSJim Jagielski break;
987*b1cdbd2cSJim Jagielski case SID_NUMBER_DECDEC:
988*b1cdbd2cSJim Jagielski pTabViewShell->ChangeNumFmtDecimals( sal_False );
989*b1cdbd2cSJim Jagielski rReq.Done();
990*b1cdbd2cSJim Jagielski break;
991*b1cdbd2cSJim Jagielski
992*b1cdbd2cSJim Jagielski case SID_NUMBER_FORMAT:
993*b1cdbd2cSJim Jagielski //if ( pReqArgs )
994*b1cdbd2cSJim Jagielski //{
995*b1cdbd2cSJim Jagielski // const SfxPoolItem* pItem;
996*b1cdbd2cSJim Jagielski // if(pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET)
997*b1cdbd2cSJim Jagielski // {
998*b1cdbd2cSJim Jagielski // String aCode = ((const SfxStringItem*)pItem)->GetValue();
999*b1cdbd2cSJim Jagielski // pTabViewShell->SetNumFmtByStr( aCode );
1000*b1cdbd2cSJim Jagielski // }
1001*b1cdbd2cSJim Jagielski //}
1002*b1cdbd2cSJim Jagielski
1003*b1cdbd2cSJim Jagielski // symphony version with format interpretation
1004*b1cdbd2cSJim Jagielski if(pReqArgs)
1005*b1cdbd2cSJim Jagielski {
1006*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
1007*b1cdbd2cSJim Jagielski ScDocument* pDoc = pViewData->GetDocument();
1008*b1cdbd2cSJim Jagielski SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
1009*b1cdbd2cSJim Jagielski LanguageType eLanguage = ScGlobal::eLnge;
1010*b1cdbd2cSJim Jagielski sal_Int16 eType = -1;
1011*b1cdbd2cSJim Jagielski sal_uInt32 nCurrentNumberFormat;
1012*b1cdbd2cSJim Jagielski
1013*b1cdbd2cSJim Jagielski pDoc->GetNumberFormat(pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo(), nCurrentNumberFormat);
1014*b1cdbd2cSJim Jagielski const SvNumberformat* pEntry = pFormatter->GetEntry(nCurrentNumberFormat);
1015*b1cdbd2cSJim Jagielski
1016*b1cdbd2cSJim Jagielski if(pEntry)
1017*b1cdbd2cSJim Jagielski {
1018*b1cdbd2cSJim Jagielski eLanguage = pEntry->GetLanguage();
1019*b1cdbd2cSJim Jagielski eType = pEntry->GetType();
1020*b1cdbd2cSJim Jagielski }
1021*b1cdbd2cSJim Jagielski
1022*b1cdbd2cSJim Jagielski //Just use eType to judge whether the command is fired for NUMBER/PERCENT/CURRENCY
1023*b1cdbd2cSJim Jagielski //In sidebar, users can fire SID_NUMBER_FORMAT command by operating the related UI controls before they are disable
1024*b1cdbd2cSJim Jagielski switch(eType)
1025*b1cdbd2cSJim Jagielski {
1026*b1cdbd2cSJim Jagielski case NUMBERFORMAT_ALL:
1027*b1cdbd2cSJim Jagielski case NUMBERFORMAT_NUMBER:
1028*b1cdbd2cSJim Jagielski case NUMBERFORMAT_NUMBER| NUMBERFORMAT_DEFINED:
1029*b1cdbd2cSJim Jagielski case NUMBERFORMAT_PERCENT:
1030*b1cdbd2cSJim Jagielski case NUMBERFORMAT_PERCENT| NUMBERFORMAT_DEFINED:
1031*b1cdbd2cSJim Jagielski case NUMBERFORMAT_CURRENCY:
1032*b1cdbd2cSJim Jagielski case NUMBERFORMAT_CURRENCY|NUMBERFORMAT_DEFINED:
1033*b1cdbd2cSJim Jagielski eType = 0;
1034*b1cdbd2cSJim Jagielski break;
1035*b1cdbd2cSJim Jagielski default:
1036*b1cdbd2cSJim Jagielski eType =-1;
1037*b1cdbd2cSJim Jagielski }
1038*b1cdbd2cSJim Jagielski
1039*b1cdbd2cSJim Jagielski if(SFX_ITEM_SET == pReqArgs->GetItemState(nSlot, true, &pItem) && eType != -1)
1040*b1cdbd2cSJim Jagielski {
1041*b1cdbd2cSJim Jagielski String aCode = ((const SfxStringItem*)pItem)->GetValue();
1042*b1cdbd2cSJim Jagielski sal_uInt16 aLen = aCode.Len();
1043*b1cdbd2cSJim Jagielski String* sFormat = new String[4];
1044*b1cdbd2cSJim Jagielski String sTmpStr = String::CreateFromAscii("");
1045*b1cdbd2cSJim Jagielski sal_uInt16 nCount(0);
1046*b1cdbd2cSJim Jagielski sal_uInt16 nStrCount(0);
1047*b1cdbd2cSJim Jagielski
1048*b1cdbd2cSJim Jagielski while(nCount < aLen)
1049*b1cdbd2cSJim Jagielski {
1050*b1cdbd2cSJim Jagielski sal_Unicode cChar = aCode.GetChar(nCount);
1051*b1cdbd2cSJim Jagielski
1052*b1cdbd2cSJim Jagielski if(cChar == sal_Unicode(','))
1053*b1cdbd2cSJim Jagielski {
1054*b1cdbd2cSJim Jagielski sFormat[nStrCount] = sTmpStr;
1055*b1cdbd2cSJim Jagielski sTmpStr = String::CreateFromAscii("");
1056*b1cdbd2cSJim Jagielski nStrCount++;
1057*b1cdbd2cSJim Jagielski }
1058*b1cdbd2cSJim Jagielski else
1059*b1cdbd2cSJim Jagielski {
1060*b1cdbd2cSJim Jagielski sTmpStr += cChar;
1061*b1cdbd2cSJim Jagielski }
1062*b1cdbd2cSJim Jagielski
1063*b1cdbd2cSJim Jagielski nCount++;
1064*b1cdbd2cSJim Jagielski
1065*b1cdbd2cSJim Jagielski if(nStrCount > 3)
1066*b1cdbd2cSJim Jagielski break;
1067*b1cdbd2cSJim Jagielski }
1068*b1cdbd2cSJim Jagielski
1069*b1cdbd2cSJim Jagielski const sal_Bool bThousand = (sal_Bool)sFormat[0].ToInt32();
1070*b1cdbd2cSJim Jagielski const sal_Bool bNegRed = (sal_Bool)sFormat[1].ToInt32();
1071*b1cdbd2cSJim Jagielski const sal_uInt16 nPrecision = (sal_uInt16)sFormat[2].ToInt32();
1072*b1cdbd2cSJim Jagielski const sal_uInt16 nLeadZeroes = (sal_uInt16)sFormat[3].ToInt32();
1073*b1cdbd2cSJim Jagielski
1074*b1cdbd2cSJim Jagielski pFormatter->GenerateFormat(
1075*b1cdbd2cSJim Jagielski aCode,
1076*b1cdbd2cSJim Jagielski nCurrentNumberFormat,//modify
1077*b1cdbd2cSJim Jagielski eLanguage,
1078*b1cdbd2cSJim Jagielski bThousand,
1079*b1cdbd2cSJim Jagielski bNegRed,
1080*b1cdbd2cSJim Jagielski nPrecision,
1081*b1cdbd2cSJim Jagielski nLeadZeroes);
1082*b1cdbd2cSJim Jagielski pTabViewShell->SetNumFmtByStr(aCode);
1083*b1cdbd2cSJim Jagielski delete[] sFormat;
1084*b1cdbd2cSJim Jagielski }
1085*b1cdbd2cSJim Jagielski }
1086*b1cdbd2cSJim Jagielski break;
1087*b1cdbd2cSJim Jagielski
1088*b1cdbd2cSJim Jagielski case SID_ATTR_NUMBERFORMAT_VALUE:
1089*b1cdbd2cSJim Jagielski if ( pReqArgs )
1090*b1cdbd2cSJim Jagielski {
1091*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
1092*b1cdbd2cSJim Jagielski if ( pReqArgs->GetItemState( ATTR_VALUE_FORMAT, sal_True, &pItem ) == SFX_ITEM_SET )
1093*b1cdbd2cSJim Jagielski {
1094*b1cdbd2cSJim Jagielski // We have to accomplish this using ApplyAttributes()
1095*b1cdbd2cSJim Jagielski // because we also need the language information to be
1096*b1cdbd2cSJim Jagielski // considered.
1097*b1cdbd2cSJim Jagielski const SfxItemSet& rOldSet =
1098*b1cdbd2cSJim Jagielski pTabViewShell->GetSelectionPattern()->GetItemSet();
1099*b1cdbd2cSJim Jagielski SfxItemPool* pDocPool = GetViewData()->GetDocument()->GetPool();
1100*b1cdbd2cSJim Jagielski SfxItemSet aNewSet( *pDocPool, ATTR_PATTERN_START, ATTR_PATTERN_END );
1101*b1cdbd2cSJim Jagielski aNewSet.Put( *pItem );
1102*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttributes( &aNewSet, &rOldSet, sal_True );
1103*b1cdbd2cSJim Jagielski }
1104*b1cdbd2cSJim Jagielski }
1105*b1cdbd2cSJim Jagielski break;
1106*b1cdbd2cSJim Jagielski
1107*b1cdbd2cSJim Jagielski case SID_NUMBER_TYPE_FORMAT:
1108*b1cdbd2cSJim Jagielski if ( pReqArgs )
1109*b1cdbd2cSJim Jagielski {
1110*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
1111*b1cdbd2cSJim Jagielski if ( pReqArgs->GetItemState( nSlot, sal_True, &pItem ) == SFX_ITEM_SET )
1112*b1cdbd2cSJim Jagielski {
1113*b1cdbd2cSJim Jagielski sal_uInt16 nFormat = ((SfxInt16Item *)pItem)->GetValue();
1114*b1cdbd2cSJim Jagielski switch(nFormat)
1115*b1cdbd2cSJim Jagielski {
1116*b1cdbd2cSJim Jagielski case 0:
1117*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER); //Modify
1118*b1cdbd2cSJim Jagielski break;
1119*b1cdbd2cSJim Jagielski case 1:
1120*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER, 2 ); //Modify
1121*b1cdbd2cSJim Jagielski break;
1122*b1cdbd2cSJim Jagielski case 2:
1123*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_PERCENT );
1124*b1cdbd2cSJim Jagielski break;
1125*b1cdbd2cSJim Jagielski case 3:
1126*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_CURRENCY );
1127*b1cdbd2cSJim Jagielski break;
1128*b1cdbd2cSJim Jagielski case 4:
1129*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_DATE );
1130*b1cdbd2cSJim Jagielski break;
1131*b1cdbd2cSJim Jagielski case 5:
1132*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_TIME );
1133*b1cdbd2cSJim Jagielski break;
1134*b1cdbd2cSJim Jagielski case 6:
1135*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_SCIENTIFIC );
1136*b1cdbd2cSJim Jagielski break;
1137*b1cdbd2cSJim Jagielski case 7:
1138*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_FRACTION );
1139*b1cdbd2cSJim Jagielski break;
1140*b1cdbd2cSJim Jagielski case 8:
1141*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_LOGICAL );
1142*b1cdbd2cSJim Jagielski break;
1143*b1cdbd2cSJim Jagielski case 9:
1144*b1cdbd2cSJim Jagielski pTabViewShell->SetNumberFormat( NUMBERFORMAT_TEXT );
1145*b1cdbd2cSJim Jagielski break;
1146*b1cdbd2cSJim Jagielski default:
1147*b1cdbd2cSJim Jagielski ;
1148*b1cdbd2cSJim Jagielski }
1149*b1cdbd2cSJim Jagielski rReq.Done();
1150*b1cdbd2cSJim Jagielski }
1151*b1cdbd2cSJim Jagielski }
1152*b1cdbd2cSJim Jagielski break;
1153*b1cdbd2cSJim Jagielski
1154*b1cdbd2cSJim Jagielski default:
1155*b1cdbd2cSJim Jagielski DBG_ERROR("falscher Slot bei ExecuteEdit");
1156*b1cdbd2cSJim Jagielski break;
1157*b1cdbd2cSJim Jagielski }
1158*b1cdbd2cSJim Jagielski }
1159*b1cdbd2cSJim Jagielski
1160*b1cdbd2cSJim Jagielski
1161*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1162*b1cdbd2cSJim Jagielski
1163*b1cdbd2cSJim Jagielski #define APPLY_HOR_JUSTIFY(j) \
1164*b1cdbd2cSJim Jagielski { \
1165*b1cdbd2cSJim Jagielski if ( !pHorJustify || (eHorJustify != (j) ) ) \
1166*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxHorJustifyItem( (j) ) ); \
1167*b1cdbd2cSJim Jagielski else \
1168*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxHorJustifyItem( SVX_HOR_JUSTIFY_STANDARD ) ); \
1169*b1cdbd2cSJim Jagielski }
1170*b1cdbd2cSJim Jagielski
1171*b1cdbd2cSJim Jagielski #define APPLY_VER_JUSTIFY(j) \
1172*b1cdbd2cSJim Jagielski { \
1173*b1cdbd2cSJim Jagielski if ( !pVerJustify || (eVerJustify != (j) ) ) \
1174*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxVerJustifyItem( (j) ) ); \
1175*b1cdbd2cSJim Jagielski else \
1176*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxVerJustifyItem( SVX_VER_JUSTIFY_STANDARD ) ); \
1177*b1cdbd2cSJim Jagielski }
1178*b1cdbd2cSJim Jagielski
ExecuteAlignment(SfxRequest & rReq)1179*b1cdbd2cSJim Jagielski void ScFormatShell::ExecuteAlignment( SfxRequest& rReq )
1180*b1cdbd2cSJim Jagielski {
1181*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1182*b1cdbd2cSJim Jagielski SfxBindings& rBindings = pViewData->GetBindings();
1183*b1cdbd2cSJim Jagielski const SfxItemSet* pSet = rReq.GetArgs();
1184*b1cdbd2cSJim Jagielski sal_uInt16 nSlot = rReq.GetSlot();
1185*b1cdbd2cSJim Jagielski
1186*b1cdbd2cSJim Jagielski pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
1187*b1cdbd2cSJim Jagielski
1188*b1cdbd2cSJim Jagielski switch( nSlot )
1189*b1cdbd2cSJim Jagielski {
1190*b1cdbd2cSJim Jagielski // pseudo slots for Format menu
1191*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_HDEFAULT:
1192*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_LEFT:
1193*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_HCENTER:
1194*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_RIGHT:
1195*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_JUSTIFIED:
1196*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxHorJustifyItem( lclConvertSlotToHAlign( nSlot ), ATTR_HOR_JUSTIFY ) );
1197*b1cdbd2cSJim Jagielski break;
1198*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_VDEFAULT:
1199*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_TOP:
1200*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_VCENTER:
1201*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_BOTTOM:
1202*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxVerJustifyItem( lclConvertSlotToVAlign( nSlot ), ATTR_VER_JUSTIFY ) );
1203*b1cdbd2cSJim Jagielski break;
1204*b1cdbd2cSJim Jagielski
1205*b1cdbd2cSJim Jagielski default:
1206*b1cdbd2cSJim Jagielski if( pSet )
1207*b1cdbd2cSJim Jagielski {
1208*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem = NULL;
1209*b1cdbd2cSJim Jagielski if( pSet->GetItemState(GetPool().GetWhich(nSlot), sal_True, &pItem ) == SFX_ITEM_SET )
1210*b1cdbd2cSJim Jagielski {
1211*b1cdbd2cSJim Jagielski
1212*b1cdbd2cSJim Jagielski switch ( nSlot )
1213*b1cdbd2cSJim Jagielski {
1214*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_HOR_JUSTIFY:
1215*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_VER_JUSTIFY:
1216*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_INDENT:
1217*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_HYPHENATION:
1218*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_DEGREES:
1219*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_LOCKPOS:
1220*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_MARGIN:
1221*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_STACKED:
1222*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( *pItem );
1223*b1cdbd2cSJim Jagielski break;
1224*b1cdbd2cSJim Jagielski
1225*b1cdbd2cSJim Jagielski case SID_H_ALIGNCELL:
1226*b1cdbd2cSJim Jagielski {
1227*b1cdbd2cSJim Jagielski SvxCellHorJustify eJust = (SvxCellHorJustify)((const SvxHorJustifyItem*)pItem)->GetValue();
1228*b1cdbd2cSJim Jagielski // #i78476# update alignment of text in cell edit mode
1229*b1cdbd2cSJim Jagielski pTabViewShell->UpdateInputHandlerCellAdjust( eJust );
1230*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxHorJustifyItem( eJust, ATTR_HOR_JUSTIFY ) );
1231*b1cdbd2cSJim Jagielski }
1232*b1cdbd2cSJim Jagielski break;
1233*b1cdbd2cSJim Jagielski case SID_V_ALIGNCELL:
1234*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxVerJustifyItem( (SvxCellVerJustify)((const SvxVerJustifyItem*)pItem)->GetValue(), ATTR_VER_JUSTIFY ) );
1235*b1cdbd2cSJim Jagielski break;
1236*b1cdbd2cSJim Jagielski default:
1237*b1cdbd2cSJim Jagielski DBG_ERROR( "ExecuteAlignment: invalid slot" );
1238*b1cdbd2cSJim Jagielski return;
1239*b1cdbd2cSJim Jagielski }
1240*b1cdbd2cSJim Jagielski }
1241*b1cdbd2cSJim Jagielski }
1242*b1cdbd2cSJim Jagielski }
1243*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT );
1244*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT );
1245*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK );
1246*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER);
1247*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGNLEFT );
1248*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGNRIGHT );
1249*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGNCENTERHOR );
1250*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGNBLOCK );
1251*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGNTOP );
1252*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGNBOTTOM );
1253*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGNCENTERVER );
1254*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_V_ALIGNCELL );
1255*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_H_ALIGNCELL );
1256*b1cdbd2cSJim Jagielski // pseudo slots for Format menu
1257*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_HDEFAULT );
1258*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_LEFT );
1259*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_HCENTER );
1260*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_RIGHT );
1261*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_JUSTIFIED );
1262*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_VDEFAULT );
1263*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_TOP );
1264*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_VCENTER );
1265*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ALIGN_ANY_BOTTOM );
1266*b1cdbd2cSJim Jagielski rBindings.Update();
1267*b1cdbd2cSJim Jagielski
1268*b1cdbd2cSJim Jagielski if( ! rReq.IsAPI() )
1269*b1cdbd2cSJim Jagielski rReq.Done();
1270*b1cdbd2cSJim Jagielski }
1271*b1cdbd2cSJim Jagielski
ExecuteTextAttr(SfxRequest & rReq)1272*b1cdbd2cSJim Jagielski void ScFormatShell::ExecuteTextAttr( SfxRequest& rReq )
1273*b1cdbd2cSJim Jagielski {
1274*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1275*b1cdbd2cSJim Jagielski SfxBindings& rBindings = pViewData->GetBindings();
1276*b1cdbd2cSJim Jagielski const ScPatternAttr* pAttrs = pTabViewShell->GetSelectionPattern();
1277*b1cdbd2cSJim Jagielski const SfxItemSet* pSet = rReq.GetArgs();
1278*b1cdbd2cSJim Jagielski sal_uInt16 nSlot = rReq.GetSlot();
1279*b1cdbd2cSJim Jagielski SfxAllItemSet* pNewSet = 0;
1280*b1cdbd2cSJim Jagielski
1281*b1cdbd2cSJim Jagielski pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
1282*b1cdbd2cSJim Jagielski
1283*b1cdbd2cSJim Jagielski if ( (nSlot == SID_ATTR_CHAR_WEIGHT)
1284*b1cdbd2cSJim Jagielski ||(nSlot == SID_ATTR_CHAR_POSTURE)
1285*b1cdbd2cSJim Jagielski ||(nSlot == SID_ATTR_CHAR_UNDERLINE)
1286*b1cdbd2cSJim Jagielski ||(nSlot == SID_ULINE_VAL_NONE)
1287*b1cdbd2cSJim Jagielski ||(nSlot == SID_ULINE_VAL_SINGLE)
1288*b1cdbd2cSJim Jagielski ||(nSlot == SID_ULINE_VAL_DOUBLE)
1289*b1cdbd2cSJim Jagielski ||(nSlot == SID_ULINE_VAL_DOTTED) )
1290*b1cdbd2cSJim Jagielski {
1291*b1cdbd2cSJim Jagielski pNewSet = new SfxAllItemSet( GetPool() );
1292*b1cdbd2cSJim Jagielski
1293*b1cdbd2cSJim Jagielski switch ( nSlot )
1294*b1cdbd2cSJim Jagielski {
1295*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_WEIGHT:
1296*b1cdbd2cSJim Jagielski {
1297*b1cdbd2cSJim Jagielski // #i78017 establish the same behaviour as in Writer
1298*b1cdbd2cSJim Jagielski sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
1299*b1cdbd2cSJim Jagielski
1300*b1cdbd2cSJim Jagielski SfxItemPool& rPool = GetPool();
1301*b1cdbd2cSJim Jagielski SvxScriptSetItem aSetItem( nSlot, rPool );
1302*b1cdbd2cSJim Jagielski if ( pSet )
1303*b1cdbd2cSJim Jagielski aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_WEIGHT ) );
1304*b1cdbd2cSJim Jagielski else
1305*b1cdbd2cSJim Jagielski {
1306*b1cdbd2cSJim Jagielski // toggle manually
1307*b1cdbd2cSJim Jagielski
1308*b1cdbd2cSJim Jagielski FontWeight eWeight = WEIGHT_BOLD;
1309*b1cdbd2cSJim Jagielski SvxScriptSetItem aOldSetItem( nSlot, rPool );
1310*b1cdbd2cSJim Jagielski aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), sal_False );
1311*b1cdbd2cSJim Jagielski const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
1312*b1cdbd2cSJim Jagielski if ( pCore && ((const SvxWeightItem*)pCore)->GetWeight() == WEIGHT_BOLD )
1313*b1cdbd2cSJim Jagielski eWeight = WEIGHT_NORMAL;
1314*b1cdbd2cSJim Jagielski
1315*b1cdbd2cSJim Jagielski aSetItem.PutItemForScriptType( nScript, SvxWeightItem( eWeight, ATTR_FONT_WEIGHT ) );
1316*b1cdbd2cSJim Jagielski }
1317*b1cdbd2cSJim Jagielski pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
1318*b1cdbd2cSJim Jagielski pNewSet->Put( aSetItem.GetItemSet(), sal_False );
1319*b1cdbd2cSJim Jagielski }
1320*b1cdbd2cSJim Jagielski break;
1321*b1cdbd2cSJim Jagielski
1322*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_POSTURE:
1323*b1cdbd2cSJim Jagielski {
1324*b1cdbd2cSJim Jagielski // #i78017 establish the same behaviour as in Writer
1325*b1cdbd2cSJim Jagielski sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
1326*b1cdbd2cSJim Jagielski
1327*b1cdbd2cSJim Jagielski SfxItemPool& rPool = GetPool();
1328*b1cdbd2cSJim Jagielski SvxScriptSetItem aSetItem( nSlot, rPool );
1329*b1cdbd2cSJim Jagielski if ( pSet )
1330*b1cdbd2cSJim Jagielski aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_POSTURE ) );
1331*b1cdbd2cSJim Jagielski else
1332*b1cdbd2cSJim Jagielski {
1333*b1cdbd2cSJim Jagielski // toggle manually
1334*b1cdbd2cSJim Jagielski
1335*b1cdbd2cSJim Jagielski FontItalic eItalic = ITALIC_NORMAL;
1336*b1cdbd2cSJim Jagielski SvxScriptSetItem aOldSetItem( nSlot, rPool );
1337*b1cdbd2cSJim Jagielski aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), sal_False );
1338*b1cdbd2cSJim Jagielski const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
1339*b1cdbd2cSJim Jagielski if ( pCore && ((const SvxPostureItem*)pCore)->GetPosture() == ITALIC_NORMAL )
1340*b1cdbd2cSJim Jagielski eItalic = ITALIC_NONE;
1341*b1cdbd2cSJim Jagielski
1342*b1cdbd2cSJim Jagielski aSetItem.PutItemForScriptType( nScript, SvxPostureItem( eItalic, ATTR_FONT_POSTURE ) );
1343*b1cdbd2cSJim Jagielski }
1344*b1cdbd2cSJim Jagielski pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
1345*b1cdbd2cSJim Jagielski pNewSet->Put( aSetItem.GetItemSet(), sal_False );
1346*b1cdbd2cSJim Jagielski }
1347*b1cdbd2cSJim Jagielski break;
1348*b1cdbd2cSJim Jagielski
1349*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_UNDERLINE:
1350*b1cdbd2cSJim Jagielski {
1351*b1cdbd2cSJim Jagielski FontUnderline eUnderline;
1352*b1cdbd2cSJim Jagielski
1353*b1cdbd2cSJim Jagielski if( pSet )
1354*b1cdbd2cSJim Jagielski {
1355*b1cdbd2cSJim Jagielski const SfxPoolItem& rUnderline = pSet->Get( ATTR_FONT_UNDERLINE );
1356*b1cdbd2cSJim Jagielski
1357*b1cdbd2cSJim Jagielski if( rUnderline.ISA(SvxUnderlineItem) )
1358*b1cdbd2cSJim Jagielski {
1359*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( rUnderline );
1360*b1cdbd2cSJim Jagielski pNewSet->Put( rUnderline,rUnderline.Which() );
1361*b1cdbd2cSJim Jagielski }
1362*b1cdbd2cSJim Jagielski else if ( rUnderline.ISA(SvxTextLineItem) )
1363*b1cdbd2cSJim Jagielski {
1364*b1cdbd2cSJim Jagielski // #i106580# also allow SvxTextLineItem (base class of SvxUnderlineItem)
1365*b1cdbd2cSJim Jagielski const SvxTextLineItem& rTextLineItem = static_cast<const SvxTextLineItem&>(rUnderline);
1366*b1cdbd2cSJim Jagielski SvxUnderlineItem aNewItem( rTextLineItem.GetLineStyle(), rTextLineItem.Which() );
1367*b1cdbd2cSJim Jagielski aNewItem.SetColor( rTextLineItem.GetColor() );
1368*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( aNewItem );
1369*b1cdbd2cSJim Jagielski pNewSet->Put( aNewItem, aNewItem.Which() );
1370*b1cdbd2cSJim Jagielski }
1371*b1cdbd2cSJim Jagielski }
1372*b1cdbd2cSJim Jagielski else
1373*b1cdbd2cSJim Jagielski {
1374*b1cdbd2cSJim Jagielski SvxUnderlineItem aUnderline( (const SvxUnderlineItem&)
1375*b1cdbd2cSJim Jagielski pAttrs->GetItem(
1376*b1cdbd2cSJim Jagielski ATTR_FONT_UNDERLINE ) );
1377*b1cdbd2cSJim Jagielski eUnderline = (UNDERLINE_NONE != aUnderline.GetLineStyle())
1378*b1cdbd2cSJim Jagielski ? UNDERLINE_NONE
1379*b1cdbd2cSJim Jagielski : UNDERLINE_SINGLE;
1380*b1cdbd2cSJim Jagielski aUnderline.SetLineStyle( eUnderline );
1381*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( aUnderline );
1382*b1cdbd2cSJim Jagielski pNewSet->Put( aUnderline,aUnderline.Which() );
1383*b1cdbd2cSJim Jagielski }
1384*b1cdbd2cSJim Jagielski }
1385*b1cdbd2cSJim Jagielski break;
1386*b1cdbd2cSJim Jagielski
1387*b1cdbd2cSJim Jagielski case SID_ULINE_VAL_NONE:
1388*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxUnderlineItem( UNDERLINE_NONE, ATTR_FONT_UNDERLINE ) );
1389*b1cdbd2cSJim Jagielski break;
1390*b1cdbd2cSJim Jagielski case SID_ULINE_VAL_SINGLE: // Toggles
1391*b1cdbd2cSJim Jagielski case SID_ULINE_VAL_DOUBLE:
1392*b1cdbd2cSJim Jagielski case SID_ULINE_VAL_DOTTED:
1393*b1cdbd2cSJim Jagielski {
1394*b1cdbd2cSJim Jagielski FontUnderline eOld = ((const SvxUnderlineItem&)
1395*b1cdbd2cSJim Jagielski pAttrs->GetItem(ATTR_FONT_UNDERLINE)).GetLineStyle();
1396*b1cdbd2cSJim Jagielski FontUnderline eNew = eOld;
1397*b1cdbd2cSJim Jagielski switch (nSlot)
1398*b1cdbd2cSJim Jagielski {
1399*b1cdbd2cSJim Jagielski case SID_ULINE_VAL_SINGLE:
1400*b1cdbd2cSJim Jagielski eNew = ( eOld == UNDERLINE_SINGLE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
1401*b1cdbd2cSJim Jagielski break;
1402*b1cdbd2cSJim Jagielski case SID_ULINE_VAL_DOUBLE:
1403*b1cdbd2cSJim Jagielski eNew = ( eOld == UNDERLINE_DOUBLE ) ? UNDERLINE_NONE : UNDERLINE_DOUBLE;
1404*b1cdbd2cSJim Jagielski break;
1405*b1cdbd2cSJim Jagielski case SID_ULINE_VAL_DOTTED:
1406*b1cdbd2cSJim Jagielski eNew = ( eOld == UNDERLINE_DOTTED ) ? UNDERLINE_NONE : UNDERLINE_DOTTED;
1407*b1cdbd2cSJim Jagielski break;
1408*b1cdbd2cSJim Jagielski }
1409*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxUnderlineItem( eNew, ATTR_FONT_UNDERLINE ) );
1410*b1cdbd2cSJim Jagielski }
1411*b1cdbd2cSJim Jagielski break;
1412*b1cdbd2cSJim Jagielski
1413*b1cdbd2cSJim Jagielski default:
1414*b1cdbd2cSJim Jagielski break;
1415*b1cdbd2cSJim Jagielski }
1416*b1cdbd2cSJim Jagielski rBindings.Invalidate( nSlot );
1417*b1cdbd2cSJim Jagielski }
1418*b1cdbd2cSJim Jagielski else
1419*b1cdbd2cSJim Jagielski {
1420*b1cdbd2cSJim Jagielski /*
1421*b1cdbd2cSJim Jagielski * "Selbstgemachte" RadioButton-Funktionalitaet
1422*b1cdbd2cSJim Jagielski * Beim Toggle gibt es den Standard-State, d.h. kein
1423*b1cdbd2cSJim Jagielski * Button ist gedrueckt
1424*b1cdbd2cSJim Jagielski */
1425*b1cdbd2cSJim Jagielski
1426*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
1427*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem = NULL;
1428*b1cdbd2cSJim Jagielski const SvxHorJustifyItem* pHorJustify = NULL;
1429*b1cdbd2cSJim Jagielski const SvxVerJustifyItem* pVerJustify = NULL;
1430*b1cdbd2cSJim Jagielski SvxCellHorJustify eHorJustify = SVX_HOR_JUSTIFY_STANDARD;
1431*b1cdbd2cSJim Jagielski SvxCellVerJustify eVerJustify = SVX_VER_JUSTIFY_STANDARD;
1432*b1cdbd2cSJim Jagielski
1433*b1cdbd2cSJim Jagielski if (rAttrSet.GetItemState(ATTR_HOR_JUSTIFY, sal_True,&pItem ) == SFX_ITEM_SET)
1434*b1cdbd2cSJim Jagielski {
1435*b1cdbd2cSJim Jagielski pHorJustify = (const SvxHorJustifyItem*)pItem;
1436*b1cdbd2cSJim Jagielski eHorJustify = SvxCellHorJustify( pHorJustify->GetValue() );
1437*b1cdbd2cSJim Jagielski }
1438*b1cdbd2cSJim Jagielski if (rAttrSet.GetItemState(ATTR_VER_JUSTIFY, sal_True,&pItem ) == SFX_ITEM_SET)
1439*b1cdbd2cSJim Jagielski {
1440*b1cdbd2cSJim Jagielski pVerJustify = (const SvxVerJustifyItem*)pItem;
1441*b1cdbd2cSJim Jagielski eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
1442*b1cdbd2cSJim Jagielski }
1443*b1cdbd2cSJim Jagielski
1444*b1cdbd2cSJim Jagielski switch ( nSlot )
1445*b1cdbd2cSJim Jagielski {
1446*b1cdbd2cSJim Jagielski case SID_ALIGNLEFT:
1447*b1cdbd2cSJim Jagielski rReq.SetSlot( SID_H_ALIGNCELL );
1448*b1cdbd2cSJim Jagielski rReq.AppendItem( SvxHorJustifyItem(
1449*b1cdbd2cSJim Jagielski !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_LEFT) ?
1450*b1cdbd2cSJim Jagielski SVX_HOR_JUSTIFY_LEFT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
1451*b1cdbd2cSJim Jagielski ExecuteSlot( rReq, GetInterface() );
1452*b1cdbd2cSJim Jagielski return;
1453*b1cdbd2cSJim Jagielski // APPLY_HOR_JUSTIFY( SVX_HOR_JUSTIFY_LEFT );
1454*b1cdbd2cSJim Jagielski //break;
1455*b1cdbd2cSJim Jagielski
1456*b1cdbd2cSJim Jagielski case SID_ALIGNRIGHT:
1457*b1cdbd2cSJim Jagielski rReq.SetSlot( SID_H_ALIGNCELL );
1458*b1cdbd2cSJim Jagielski rReq.AppendItem( SvxHorJustifyItem(
1459*b1cdbd2cSJim Jagielski !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_RIGHT) ?
1460*b1cdbd2cSJim Jagielski SVX_HOR_JUSTIFY_RIGHT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
1461*b1cdbd2cSJim Jagielski ExecuteSlot( rReq, GetInterface() );
1462*b1cdbd2cSJim Jagielski return;
1463*b1cdbd2cSJim Jagielski // APPLY_HOR_JUSTIFY( SVX_HOR_JUSTIFY_RIGHT );
1464*b1cdbd2cSJim Jagielski //break;
1465*b1cdbd2cSJim Jagielski
1466*b1cdbd2cSJim Jagielski case SID_ALIGNCENTERHOR:
1467*b1cdbd2cSJim Jagielski rReq.SetSlot( SID_H_ALIGNCELL );
1468*b1cdbd2cSJim Jagielski rReq.AppendItem( SvxHorJustifyItem(
1469*b1cdbd2cSJim Jagielski !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_CENTER) ?
1470*b1cdbd2cSJim Jagielski SVX_HOR_JUSTIFY_CENTER : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
1471*b1cdbd2cSJim Jagielski ExecuteSlot( rReq, GetInterface() );
1472*b1cdbd2cSJim Jagielski return;
1473*b1cdbd2cSJim Jagielski // APPLY_HOR_JUSTIFY( SVX_HOR_JUSTIFY_CENTER );
1474*b1cdbd2cSJim Jagielski //break;
1475*b1cdbd2cSJim Jagielski
1476*b1cdbd2cSJim Jagielski case SID_ALIGNBLOCK:
1477*b1cdbd2cSJim Jagielski rReq.SetSlot( SID_H_ALIGNCELL );
1478*b1cdbd2cSJim Jagielski rReq.AppendItem( SvxHorJustifyItem(
1479*b1cdbd2cSJim Jagielski !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_BLOCK) ?
1480*b1cdbd2cSJim Jagielski SVX_HOR_JUSTIFY_BLOCK : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
1481*b1cdbd2cSJim Jagielski ExecuteSlot( rReq, GetInterface() );
1482*b1cdbd2cSJim Jagielski return;
1483*b1cdbd2cSJim Jagielski // APPLY_HOR_JUSTIFY( SVX_HOR_JUSTIFY_BLOCK );
1484*b1cdbd2cSJim Jagielski //break;
1485*b1cdbd2cSJim Jagielski
1486*b1cdbd2cSJim Jagielski case SID_ALIGNTOP:
1487*b1cdbd2cSJim Jagielski rReq.SetSlot( SID_V_ALIGNCELL );
1488*b1cdbd2cSJim Jagielski rReq.AppendItem( SvxVerJustifyItem(
1489*b1cdbd2cSJim Jagielski !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_TOP) ?
1490*b1cdbd2cSJim Jagielski SVX_VER_JUSTIFY_TOP : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
1491*b1cdbd2cSJim Jagielski ExecuteSlot( rReq, GetInterface() );
1492*b1cdbd2cSJim Jagielski return;
1493*b1cdbd2cSJim Jagielski // APPLY_VER_JUSTIFY( SVX_VER_JUSTIFY_TOP );
1494*b1cdbd2cSJim Jagielski //break;
1495*b1cdbd2cSJim Jagielski
1496*b1cdbd2cSJim Jagielski case SID_ALIGNBOTTOM:
1497*b1cdbd2cSJim Jagielski rReq.SetSlot( SID_V_ALIGNCELL );
1498*b1cdbd2cSJim Jagielski rReq.AppendItem( SvxVerJustifyItem(
1499*b1cdbd2cSJim Jagielski !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_BOTTOM) ?
1500*b1cdbd2cSJim Jagielski SVX_VER_JUSTIFY_BOTTOM : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
1501*b1cdbd2cSJim Jagielski ExecuteSlot( rReq, GetInterface() );
1502*b1cdbd2cSJim Jagielski return;
1503*b1cdbd2cSJim Jagielski // APPLY_VER_JUSTIFY( SVX_VER_JUSTIFY_BOTTOM );
1504*b1cdbd2cSJim Jagielski //break;
1505*b1cdbd2cSJim Jagielski
1506*b1cdbd2cSJim Jagielski case SID_ALIGNCENTERVER:
1507*b1cdbd2cSJim Jagielski rReq.SetSlot( SID_V_ALIGNCELL );
1508*b1cdbd2cSJim Jagielski rReq.AppendItem( SvxVerJustifyItem(
1509*b1cdbd2cSJim Jagielski !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_CENTER) ?
1510*b1cdbd2cSJim Jagielski SVX_VER_JUSTIFY_CENTER : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
1511*b1cdbd2cSJim Jagielski ExecuteSlot( rReq, GetInterface() );
1512*b1cdbd2cSJim Jagielski return;
1513*b1cdbd2cSJim Jagielski // APPLY_VER_JUSTIFY( SVX_VER_JUSTIFY_CENTER );
1514*b1cdbd2cSJim Jagielski //break;
1515*b1cdbd2cSJim Jagielski
1516*b1cdbd2cSJim Jagielski default:
1517*b1cdbd2cSJim Jagielski break;
1518*b1cdbd2cSJim Jagielski }
1519*b1cdbd2cSJim Jagielski
1520*b1cdbd2cSJim Jagielski }
1521*b1cdbd2cSJim Jagielski
1522*b1cdbd2cSJim Jagielski rBindings.Update();
1523*b1cdbd2cSJim Jagielski // rReq.Done();
1524*b1cdbd2cSJim Jagielski
1525*b1cdbd2cSJim Jagielski if( pNewSet )
1526*b1cdbd2cSJim Jagielski {
1527*b1cdbd2cSJim Jagielski rReq.Done( *pNewSet );
1528*b1cdbd2cSJim Jagielski delete pNewSet;
1529*b1cdbd2cSJim Jagielski }
1530*b1cdbd2cSJim Jagielski else
1531*b1cdbd2cSJim Jagielski {
1532*b1cdbd2cSJim Jagielski rReq.Done();
1533*b1cdbd2cSJim Jagielski }
1534*b1cdbd2cSJim Jagielski
1535*b1cdbd2cSJim Jagielski }
1536*b1cdbd2cSJim Jagielski
1537*b1cdbd2cSJim Jagielski #undef APPLY_HOR_JUSTIFY
1538*b1cdbd2cSJim Jagielski #undef APPLY_VER_JUSTIFY
1539*b1cdbd2cSJim Jagielski
1540*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1541*b1cdbd2cSJim Jagielski
ExecuteAttr(SfxRequest & rReq)1542*b1cdbd2cSJim Jagielski void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
1543*b1cdbd2cSJim Jagielski {
1544*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1545*b1cdbd2cSJim Jagielski SfxBindings& rBindings = pViewData->GetBindings();
1546*b1cdbd2cSJim Jagielski const SfxItemSet* pNewAttrs = rReq.GetArgs();
1547*b1cdbd2cSJim Jagielski
1548*b1cdbd2cSJim Jagielski pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
1549*b1cdbd2cSJim Jagielski
1550*b1cdbd2cSJim Jagielski if ( !pNewAttrs )
1551*b1cdbd2cSJim Jagielski {
1552*b1cdbd2cSJim Jagielski sal_uInt16 nSlot = rReq.GetSlot();
1553*b1cdbd2cSJim Jagielski
1554*b1cdbd2cSJim Jagielski switch ( nSlot )
1555*b1cdbd2cSJim Jagielski {
1556*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_FONT:
1557*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_FONTHEIGHT:
1558*b1cdbd2cSJim Jagielski pTabViewShell->ExecuteCellFormatDlg( rReq, TP_FONT ); // wenn ToolBar vertikal
1559*b1cdbd2cSJim Jagielski break;
1560*b1cdbd2cSJim Jagielski
1561*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_LINEBREAK: // ohne Parameter als Toggle
1562*b1cdbd2cSJim Jagielski {
1563*b1cdbd2cSJim Jagielski const ScPatternAttr* pAttrs = pTabViewShell->GetSelectionPattern();
1564*b1cdbd2cSJim Jagielski sal_Bool bOld = ((const SfxBoolItem&)pAttrs->GetItem(ATTR_LINEBREAK)).GetValue();
1565*b1cdbd2cSJim Jagielski SfxBoolItem aBreakItem( ATTR_LINEBREAK, !bOld );
1566*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( aBreakItem );
1567*b1cdbd2cSJim Jagielski
1568*b1cdbd2cSJim Jagielski SfxAllItemSet aNewSet( GetPool() );
1569*b1cdbd2cSJim Jagielski aNewSet.Put( aBreakItem,aBreakItem.Which() );
1570*b1cdbd2cSJim Jagielski rReq.Done( aNewSet );
1571*b1cdbd2cSJim Jagielski
1572*b1cdbd2cSJim Jagielski rBindings.Invalidate( nSlot );
1573*b1cdbd2cSJim Jagielski }
1574*b1cdbd2cSJim Jagielski break;
1575*b1cdbd2cSJim Jagielski
1576*b1cdbd2cSJim Jagielski case SID_BACKGROUND_COLOR:
1577*b1cdbd2cSJim Jagielski {
1578*b1cdbd2cSJim Jagielski // SID_BACKGROUND_COLOR without arguments -> set transparent background
1579*b1cdbd2cSJim Jagielski
1580*b1cdbd2cSJim Jagielski SvxBrushItem aBrushItem( (const SvxBrushItem&)
1581*b1cdbd2cSJim Jagielski pTabViewShell->GetSelectionPattern()->
1582*b1cdbd2cSJim Jagielski GetItem( ATTR_BACKGROUND ) );
1583*b1cdbd2cSJim Jagielski
1584*b1cdbd2cSJim Jagielski aBrushItem.SetColor( COL_TRANSPARENT );
1585*b1cdbd2cSJim Jagielski
1586*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( aBrushItem );
1587*b1cdbd2cSJim Jagielski }
1588*b1cdbd2cSJim Jagielski break;
1589*b1cdbd2cSJim Jagielski }
1590*b1cdbd2cSJim Jagielski }
1591*b1cdbd2cSJim Jagielski else
1592*b1cdbd2cSJim Jagielski {
1593*b1cdbd2cSJim Jagielski sal_uInt16 nSlot = rReq.GetSlot();
1594*b1cdbd2cSJim Jagielski
1595*b1cdbd2cSJim Jagielski switch ( nSlot )
1596*b1cdbd2cSJim Jagielski {
1597*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_OVERLINE:
1598*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_STRIKEOUT:
1599*b1cdbd2cSJim Jagielski case SID_ATTR_ALIGN_LINEBREAK:
1600*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_COLOR:
1601*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_CONTOUR:
1602*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_SHADOWED:
1603*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_RELIEF:
1604*b1cdbd2cSJim Jagielski case SID_SCATTR_PROTECTION :
1605*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich( nSlot ) ) );
1606*b1cdbd2cSJim Jagielski rBindings.Invalidate( nSlot );
1607*b1cdbd2cSJim Jagielski rBindings.Update( nSlot );
1608*b1cdbd2cSJim Jagielski break;
1609*b1cdbd2cSJim Jagielski
1610*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_FONT:
1611*b1cdbd2cSJim Jagielski case SID_ATTR_CHAR_FONTHEIGHT:
1612*b1cdbd2cSJim Jagielski {
1613*b1cdbd2cSJim Jagielski // #i78017 establish the same behaviour as in Writer
1614*b1cdbd2cSJim Jagielski sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
1615*b1cdbd2cSJim Jagielski if (nSlot == SID_ATTR_CHAR_FONT)
1616*b1cdbd2cSJim Jagielski nScript = pTabViewShell->GetSelectionScriptType();
1617*b1cdbd2cSJim Jagielski
1618*b1cdbd2cSJim Jagielski SfxItemPool& rPool = GetPool();
1619*b1cdbd2cSJim Jagielski SvxScriptSetItem aSetItem( nSlot, rPool );
1620*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = rPool.GetWhich( nSlot );
1621*b1cdbd2cSJim Jagielski aSetItem.PutItemForScriptType( nScript, pNewAttrs->Get( nWhich ) );
1622*b1cdbd2cSJim Jagielski
1623*b1cdbd2cSJim Jagielski pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
1624*b1cdbd2cSJim Jagielski
1625*b1cdbd2cSJim Jagielski rBindings.Invalidate( nSlot );
1626*b1cdbd2cSJim Jagielski rBindings.Update( nSlot );
1627*b1cdbd2cSJim Jagielski }
1628*b1cdbd2cSJim Jagielski break;
1629*b1cdbd2cSJim Jagielski
1630*b1cdbd2cSJim Jagielski case SID_FRAME_LINESTYLE:
1631*b1cdbd2cSJim Jagielski {
1632*b1cdbd2cSJim Jagielski // Default-Linie aktualisieren
1633*b1cdbd2cSJim Jagielski const SvxBorderLine* pLine =
1634*b1cdbd2cSJim Jagielski ((const SvxLineItem&)
1635*b1cdbd2cSJim Jagielski pNewAttrs->Get( SID_FRAME_LINESTYLE )).
1636*b1cdbd2cSJim Jagielski GetLine();
1637*b1cdbd2cSJim Jagielski
1638*b1cdbd2cSJim Jagielski if ( pLine )
1639*b1cdbd2cSJim Jagielski {
1640*b1cdbd2cSJim Jagielski SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
1641*b1cdbd2cSJim Jagielski
1642*b1cdbd2cSJim Jagielski if ( pDefLine )
1643*b1cdbd2cSJim Jagielski {
1644*b1cdbd2cSJim Jagielski pDefLine->SetOutWidth( pLine->GetOutWidth() );
1645*b1cdbd2cSJim Jagielski pDefLine->SetInWidth ( pLine->GetInWidth() );
1646*b1cdbd2cSJim Jagielski pDefLine->SetDistance( pLine->GetDistance() );
1647*b1cdbd2cSJim Jagielski pTabViewShell->SetSelectionFrameLines( pDefLine, sal_False );
1648*b1cdbd2cSJim Jagielski }
1649*b1cdbd2cSJim Jagielski else
1650*b1cdbd2cSJim Jagielski {
1651*b1cdbd2cSJim Jagielski pTabViewShell->SetDefaultFrameLine( pLine );
1652*b1cdbd2cSJim Jagielski pTabViewShell->GetDefaultFrameLine()->SetColor( COL_BLACK );
1653*b1cdbd2cSJim Jagielski pTabViewShell->SetSelectionFrameLines( pLine, sal_False );
1654*b1cdbd2cSJim Jagielski }
1655*b1cdbd2cSJim Jagielski }
1656*b1cdbd2cSJim Jagielski else
1657*b1cdbd2cSJim Jagielski {
1658*b1cdbd2cSJim Jagielski Color aColorBlack( COL_BLACK );
1659*b1cdbd2cSJim Jagielski SvxBorderLine aDefLine( &aColorBlack, 20, 0, 0 );
1660*b1cdbd2cSJim Jagielski pTabViewShell->SetDefaultFrameLine( &aDefLine );
1661*b1cdbd2cSJim Jagielski pTabViewShell->SetSelectionFrameLines( NULL, sal_False );
1662*b1cdbd2cSJim Jagielski }
1663*b1cdbd2cSJim Jagielski }
1664*b1cdbd2cSJim Jagielski break;
1665*b1cdbd2cSJim Jagielski
1666*b1cdbd2cSJim Jagielski case SID_FRAME_LINECOLOR:
1667*b1cdbd2cSJim Jagielski {
1668*b1cdbd2cSJim Jagielski SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
1669*b1cdbd2cSJim Jagielski const Color& rColor = ((const SvxColorItem&)
1670*b1cdbd2cSJim Jagielski pNewAttrs->Get( SID_FRAME_LINECOLOR )).
1671*b1cdbd2cSJim Jagielski GetValue();
1672*b1cdbd2cSJim Jagielski
1673*b1cdbd2cSJim Jagielski // Default-Linie aktualisieren
1674*b1cdbd2cSJim Jagielski if ( pDefLine )
1675*b1cdbd2cSJim Jagielski {
1676*b1cdbd2cSJim Jagielski pDefLine->SetColor( rColor );
1677*b1cdbd2cSJim Jagielski pTabViewShell->SetSelectionFrameLines( pDefLine, sal_True );
1678*b1cdbd2cSJim Jagielski }
1679*b1cdbd2cSJim Jagielski else
1680*b1cdbd2cSJim Jagielski {
1681*b1cdbd2cSJim Jagielski SvxBorderLine aDefLine( &rColor, 20, 0, 0 );
1682*b1cdbd2cSJim Jagielski pTabViewShell->SetDefaultFrameLine( &aDefLine );
1683*b1cdbd2cSJim Jagielski pTabViewShell->SetSelectionFrameLines( &aDefLine, sal_False );
1684*b1cdbd2cSJim Jagielski }
1685*b1cdbd2cSJim Jagielski }
1686*b1cdbd2cSJim Jagielski break;
1687*b1cdbd2cSJim Jagielski
1688*b1cdbd2cSJim Jagielski case SID_ATTR_BORDER_OUTER:
1689*b1cdbd2cSJim Jagielski case SID_ATTR_BORDER:
1690*b1cdbd2cSJim Jagielski {
1691*b1cdbd2cSJim Jagielski SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
1692*b1cdbd2cSJim Jagielski const ScPatternAttr* pOldAttrs = pTabViewShell->GetSelectionPattern();
1693*b1cdbd2cSJim Jagielski ScDocument* pDoc = GetViewData()->GetDocument();
1694*b1cdbd2cSJim Jagielski SfxItemSet* pOldSet =
1695*b1cdbd2cSJim Jagielski new SfxItemSet(
1696*b1cdbd2cSJim Jagielski *(pDoc->GetPool()),
1697*b1cdbd2cSJim Jagielski ATTR_PATTERN_START,
1698*b1cdbd2cSJim Jagielski ATTR_PATTERN_END );
1699*b1cdbd2cSJim Jagielski SfxItemSet* pNewSet =
1700*b1cdbd2cSJim Jagielski new SfxItemSet(
1701*b1cdbd2cSJim Jagielski *(pDoc->GetPool()),
1702*b1cdbd2cSJim Jagielski ATTR_PATTERN_START,
1703*b1cdbd2cSJim Jagielski ATTR_PATTERN_END );
1704*b1cdbd2cSJim Jagielski const SfxPoolItem& rBorderAttr =
1705*b1cdbd2cSJim Jagielski pOldAttrs->GetItemSet().
1706*b1cdbd2cSJim Jagielski Get( ATTR_BORDER );
1707*b1cdbd2cSJim Jagielski
1708*b1cdbd2cSJim Jagielski // Border-Items vom Controller auswerten:
1709*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem = 0;
1710*b1cdbd2cSJim Jagielski
1711*b1cdbd2cSJim Jagielski if ( pNewAttrs->GetItemState( ATTR_BORDER, sal_True, &pItem )
1712*b1cdbd2cSJim Jagielski == SFX_ITEM_SET )
1713*b1cdbd2cSJim Jagielski {
1714*b1cdbd2cSJim Jagielski // #100959# The SvxFrameToolBoxControl toolbox controller uses a default
1715*b1cdbd2cSJim Jagielski // SvxBorderLine (all widths 0) to mark the lines that should be set.
1716*b1cdbd2cSJim Jagielski // Macro recording uses a SvxBoxItem with the real values (OutWidth > 0)
1717*b1cdbd2cSJim Jagielski // or NULL pointers for no lines.
1718*b1cdbd2cSJim Jagielski // -> Substitute existing lines with pDefLine only if widths are 0.
1719*b1cdbd2cSJim Jagielski SvxBoxItem aBoxItem ( *(const SvxBoxItem*)pItem );
1720*b1cdbd2cSJim Jagielski if ( aBoxItem.GetTop() && aBoxItem.GetTop()->GetOutWidth() == 0 )
1721*b1cdbd2cSJim Jagielski aBoxItem.SetLine( pDefLine, BOX_LINE_TOP );
1722*b1cdbd2cSJim Jagielski if ( aBoxItem.GetBottom() && aBoxItem.GetBottom()->GetOutWidth() == 0 )
1723*b1cdbd2cSJim Jagielski aBoxItem.SetLine( pDefLine, BOX_LINE_BOTTOM );
1724*b1cdbd2cSJim Jagielski if ( aBoxItem.GetLeft() && aBoxItem.GetLeft()->GetOutWidth() == 0 )
1725*b1cdbd2cSJim Jagielski aBoxItem.SetLine( pDefLine, BOX_LINE_LEFT );
1726*b1cdbd2cSJim Jagielski if ( aBoxItem.GetRight() && aBoxItem.GetRight()->GetOutWidth() == 0 )
1727*b1cdbd2cSJim Jagielski aBoxItem.SetLine( pDefLine, BOX_LINE_RIGHT );
1728*b1cdbd2cSJim Jagielski pNewSet->Put( aBoxItem );
1729*b1cdbd2cSJim Jagielski rReq.AppendItem( aBoxItem );
1730*b1cdbd2cSJim Jagielski }
1731*b1cdbd2cSJim Jagielski
1732*b1cdbd2cSJim Jagielski if ( pNewAttrs->GetItemState( ATTR_BORDER_INNER, sal_True, &pItem )
1733*b1cdbd2cSJim Jagielski == SFX_ITEM_SET )
1734*b1cdbd2cSJim Jagielski {
1735*b1cdbd2cSJim Jagielski SvxBoxInfoItem aBoxInfoItem( *(const SvxBoxInfoItem*)pItem );
1736*b1cdbd2cSJim Jagielski if ( aBoxInfoItem.GetHori() && aBoxInfoItem.GetHori()->GetOutWidth() == 0 )
1737*b1cdbd2cSJim Jagielski aBoxInfoItem.SetLine( pDefLine, BOXINFO_LINE_HORI );
1738*b1cdbd2cSJim Jagielski if ( aBoxInfoItem.GetVert() && aBoxInfoItem.GetVert()->GetOutWidth() == 0 )
1739*b1cdbd2cSJim Jagielski aBoxInfoItem.SetLine( pDefLine, BOXINFO_LINE_VERT );
1740*b1cdbd2cSJim Jagielski pNewSet->Put( aBoxInfoItem );
1741*b1cdbd2cSJim Jagielski rReq.AppendItem( aBoxInfoItem );
1742*b1cdbd2cSJim Jagielski }
1743*b1cdbd2cSJim Jagielski else
1744*b1cdbd2cSJim Jagielski {
1745*b1cdbd2cSJim Jagielski SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
1746*b1cdbd2cSJim Jagielski aBoxInfoItem.SetLine( NULL, BOXINFO_LINE_HORI );
1747*b1cdbd2cSJim Jagielski aBoxInfoItem.SetLine( NULL, BOXINFO_LINE_VERT );
1748*b1cdbd2cSJim Jagielski pNewSet->Put( aBoxInfoItem );
1749*b1cdbd2cSJim Jagielski }
1750*b1cdbd2cSJim Jagielski
1751*b1cdbd2cSJim Jagielski pOldSet->Put( rBorderAttr );
1752*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttributes( pNewSet, pOldSet );
1753*b1cdbd2cSJim Jagielski
1754*b1cdbd2cSJim Jagielski delete pOldSet;
1755*b1cdbd2cSJim Jagielski delete pNewSet;
1756*b1cdbd2cSJim Jagielski }
1757*b1cdbd2cSJim Jagielski break;
1758*b1cdbd2cSJim Jagielski
1759*b1cdbd2cSJim Jagielski case SID_ATTR_BORDER_DIAG_TLBR:
1760*b1cdbd2cSJim Jagielski case SID_ATTR_BORDER_DIAG_BLTR:
1761*b1cdbd2cSJim Jagielski {
1762*b1cdbd2cSJim Jagielski // ScDocument* pDoc = GetViewData()->GetDocument();
1763*b1cdbd2cSJim Jagielski const ScPatternAttr* pOldAttrs = pTabViewShell->GetSelectionPattern();
1764*b1cdbd2cSJim Jagielski SfxItemSet* pOldSet = new SfxItemSet(pOldAttrs->GetItemSet());
1765*b1cdbd2cSJim Jagielski SfxItemSet* pNewSet = new SfxItemSet(pOldAttrs->GetItemSet());
1766*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem = 0;
1767*b1cdbd2cSJim Jagielski
1768*b1cdbd2cSJim Jagielski if(SID_ATTR_BORDER_DIAG_TLBR == nSlot)
1769*b1cdbd2cSJim Jagielski {
1770*b1cdbd2cSJim Jagielski if(SFX_ITEM_SET == pNewAttrs->GetItemState(ATTR_BORDER_TLBR, true, &pItem))
1771*b1cdbd2cSJim Jagielski {
1772*b1cdbd2cSJim Jagielski SvxLineItem aItem(ATTR_BORDER_TLBR);
1773*b1cdbd2cSJim Jagielski aItem.SetLine(((const SvxLineItem&)pNewAttrs->Get(ATTR_BORDER_TLBR)).GetLine());
1774*b1cdbd2cSJim Jagielski pNewSet->Put(aItem);
1775*b1cdbd2cSJim Jagielski rReq.AppendItem(aItem);
1776*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttributes(pNewSet, pOldSet);
1777*b1cdbd2cSJim Jagielski }
1778*b1cdbd2cSJim Jagielski }
1779*b1cdbd2cSJim Jagielski else // if( nSlot == SID_ATTR_BORDER_DIAG_BLTR )
1780*b1cdbd2cSJim Jagielski {
1781*b1cdbd2cSJim Jagielski if(SFX_ITEM_SET == pNewAttrs->GetItemState(ATTR_BORDER_BLTR, true, &pItem ))
1782*b1cdbd2cSJim Jagielski {
1783*b1cdbd2cSJim Jagielski SvxLineItem aItem(ATTR_BORDER_BLTR);
1784*b1cdbd2cSJim Jagielski aItem.SetLine(((const SvxLineItem&)pNewAttrs->Get(ATTR_BORDER_BLTR)).GetLine());
1785*b1cdbd2cSJim Jagielski pNewSet->Put(aItem);
1786*b1cdbd2cSJim Jagielski rReq.AppendItem(aItem);
1787*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttributes(pNewSet, pOldSet);
1788*b1cdbd2cSJim Jagielski }
1789*b1cdbd2cSJim Jagielski }
1790*b1cdbd2cSJim Jagielski
1791*b1cdbd2cSJim Jagielski delete pOldSet;
1792*b1cdbd2cSJim Jagielski delete pNewSet;
1793*b1cdbd2cSJim Jagielski rBindings.Invalidate(nSlot);
1794*b1cdbd2cSJim Jagielski }
1795*b1cdbd2cSJim Jagielski break;
1796*b1cdbd2cSJim Jagielski
1797*b1cdbd2cSJim Jagielski // ATTR_BACKGROUND (=SID_ATTR_BRUSH) muss ueber zwei IDs
1798*b1cdbd2cSJim Jagielski // gesetzt werden:
1799*b1cdbd2cSJim Jagielski case SID_BACKGROUND_COLOR:
1800*b1cdbd2cSJim Jagielski {
1801*b1cdbd2cSJim Jagielski const SvxColorItem rNewColorItem = (const SvxColorItem&)
1802*b1cdbd2cSJim Jagielski pNewAttrs->Get( SID_BACKGROUND_COLOR );
1803*b1cdbd2cSJim Jagielski
1804*b1cdbd2cSJim Jagielski SvxBrushItem aBrushItem( (const SvxBrushItem&)
1805*b1cdbd2cSJim Jagielski pTabViewShell->GetSelectionPattern()->
1806*b1cdbd2cSJim Jagielski GetItem( ATTR_BACKGROUND ) );
1807*b1cdbd2cSJim Jagielski
1808*b1cdbd2cSJim Jagielski aBrushItem.SetColor( rNewColorItem.GetValue() );
1809*b1cdbd2cSJim Jagielski
1810*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( aBrushItem );
1811*b1cdbd2cSJim Jagielski }
1812*b1cdbd2cSJim Jagielski break;
1813*b1cdbd2cSJim Jagielski
1814*b1cdbd2cSJim Jagielski case SID_ATTR_BRUSH:
1815*b1cdbd2cSJim Jagielski {
1816*b1cdbd2cSJim Jagielski SvxBrushItem aBrushItem( (const SvxBrushItem&)
1817*b1cdbd2cSJim Jagielski pTabViewShell->GetSelectionPattern()->
1818*b1cdbd2cSJim Jagielski GetItem( ATTR_BACKGROUND ) );
1819*b1cdbd2cSJim Jagielski const SvxBrushItem& rNewBrushItem = (const SvxBrushItem&)
1820*b1cdbd2cSJim Jagielski pNewAttrs->Get( GetPool().GetWhich(nSlot) );
1821*b1cdbd2cSJim Jagielski aBrushItem.SetColor(rNewBrushItem.GetColor());
1822*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( aBrushItem );
1823*b1cdbd2cSJim Jagielski }
1824*b1cdbd2cSJim Jagielski break;
1825*b1cdbd2cSJim Jagielski
1826*b1cdbd2cSJim Jagielski case SID_ATTR_BORDER_SHADOW:
1827*b1cdbd2cSJim Jagielski {
1828*b1cdbd2cSJim Jagielski const SvxShadowItem& rNewShadowItem = (const SvxShadowItem&)
1829*b1cdbd2cSJim Jagielski pNewAttrs->Get( ATTR_SHADOW );
1830*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( rNewShadowItem );
1831*b1cdbd2cSJim Jagielski }
1832*b1cdbd2cSJim Jagielski break;
1833*b1cdbd2cSJim Jagielski
1834*b1cdbd2cSJim Jagielski default:
1835*b1cdbd2cSJim Jagielski break;
1836*b1cdbd2cSJim Jagielski }
1837*b1cdbd2cSJim Jagielski
1838*b1cdbd2cSJim Jagielski if( ! rReq.IsAPI() )
1839*b1cdbd2cSJim Jagielski if( ! rReq.IsDone() )
1840*b1cdbd2cSJim Jagielski rReq.Done();
1841*b1cdbd2cSJim Jagielski }
1842*b1cdbd2cSJim Jagielski }
1843*b1cdbd2cSJim Jagielski
GetAttrState(SfxItemSet & rSet)1844*b1cdbd2cSJim Jagielski void ScFormatShell::GetAttrState( SfxItemSet& rSet )
1845*b1cdbd2cSJim Jagielski {
1846*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1847*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
1848*b1cdbd2cSJim Jagielski // const SvxBorderLine* pLine = pTabViewShell->GetDefaultFrameLine();
1849*b1cdbd2cSJim Jagielski const SvxBrushItem& rBrushItem = (const SvxBrushItem&)rAttrSet.Get( ATTR_BACKGROUND );
1850*b1cdbd2cSJim Jagielski SfxWhichIter aIter( rSet );
1851*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = aIter.FirstWhich();
1852*b1cdbd2cSJim Jagielski
1853*b1cdbd2cSJim Jagielski rSet.Put( rAttrSet, sal_False );
1854*b1cdbd2cSJim Jagielski
1855*b1cdbd2cSJim Jagielski // choose font info according to selection script type
1856*b1cdbd2cSJim Jagielski sal_uInt8 nScript = 0; // GetSelectionScriptType never returns 0
1857*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_FONT ) != SFX_ITEM_UNKNOWN )
1858*b1cdbd2cSJim Jagielski {
1859*b1cdbd2cSJim Jagielski if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
1860*b1cdbd2cSJim Jagielski ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT, nScript );
1861*b1cdbd2cSJim Jagielski }
1862*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_FONT_HEIGHT ) != SFX_ITEM_UNKNOWN )
1863*b1cdbd2cSJim Jagielski {
1864*b1cdbd2cSJim Jagielski if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
1865*b1cdbd2cSJim Jagielski ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_HEIGHT, nScript );
1866*b1cdbd2cSJim Jagielski }
1867*b1cdbd2cSJim Jagielski
1868*b1cdbd2cSJim Jagielski while ( nWhich )
1869*b1cdbd2cSJim Jagielski {
1870*b1cdbd2cSJim Jagielski switch(nWhich)
1871*b1cdbd2cSJim Jagielski {
1872*b1cdbd2cSJim Jagielski case SID_BACKGROUND_COLOR:
1873*b1cdbd2cSJim Jagielski {
1874*b1cdbd2cSJim Jagielski rSet.Put( SvxColorItem( rBrushItem.GetColor(), SID_BACKGROUND_COLOR ) );
1875*b1cdbd2cSJim Jagielski
1876*b1cdbd2cSJim Jagielski if(SFX_ITEM_DONTCARE == rAttrSet.GetItemState(ATTR_BACKGROUND))
1877*b1cdbd2cSJim Jagielski {
1878*b1cdbd2cSJim Jagielski rSet.InvalidateItem(SID_BACKGROUND_COLOR);
1879*b1cdbd2cSJim Jagielski }
1880*b1cdbd2cSJim Jagielski }
1881*b1cdbd2cSJim Jagielski break;
1882*b1cdbd2cSJim Jagielski case SID_FRAME_LINESTYLE:
1883*b1cdbd2cSJim Jagielski case SID_FRAME_LINECOLOR:
1884*b1cdbd2cSJim Jagielski {
1885*b1cdbd2cSJim Jagielski // handled together because both need the cell border information for decisions
1886*b1cdbd2cSJim Jagielski // rSet.Put( SvxColorItem( pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR ) );
1887*b1cdbd2cSJim Jagielski Color aCol = 0;
1888*b1cdbd2cSJim Jagielski // sal_uInt16 nOut = 0, nIn = 0, nDis = 0;
1889*b1cdbd2cSJim Jagielski SvxBorderLine aLine(0,0,0,0);
1890*b1cdbd2cSJim Jagielski bool bCol = 0;
1891*b1cdbd2cSJim Jagielski bool bColDisable = 0, bStyleDisable = 0;
1892*b1cdbd2cSJim Jagielski SvxBoxItem aBoxItem(ATTR_BORDER);
1893*b1cdbd2cSJim Jagielski SvxBoxInfoItem aInfoItem(ATTR_BORDER_INNER);
1894*b1cdbd2cSJim Jagielski
1895*b1cdbd2cSJim Jagielski pTabViewShell->GetSelectionFrame(aBoxItem, aInfoItem);
1896*b1cdbd2cSJim Jagielski
1897*b1cdbd2cSJim Jagielski if( aBoxItem.GetTop() )
1898*b1cdbd2cSJim Jagielski {
1899*b1cdbd2cSJim Jagielski bCol = 1;
1900*b1cdbd2cSJim Jagielski aCol = aBoxItem.GetTop()->GetColor() ;
1901*b1cdbd2cSJim Jagielski aLine.SetColor(aCol);
1902*b1cdbd2cSJim Jagielski aLine.SetOutWidth( aBoxItem.GetTop()->GetOutWidth());
1903*b1cdbd2cSJim Jagielski aLine.SetInWidth( aBoxItem.GetTop()->GetInWidth());
1904*b1cdbd2cSJim Jagielski aLine.SetDistance( aBoxItem.GetTop()->GetDistance());
1905*b1cdbd2cSJim Jagielski }
1906*b1cdbd2cSJim Jagielski
1907*b1cdbd2cSJim Jagielski if( aBoxItem.GetBottom() )
1908*b1cdbd2cSJim Jagielski {
1909*b1cdbd2cSJim Jagielski if(bCol == 0)
1910*b1cdbd2cSJim Jagielski {
1911*b1cdbd2cSJim Jagielski bCol = 1;
1912*b1cdbd2cSJim Jagielski aCol = aBoxItem.GetBottom()->GetColor() ;
1913*b1cdbd2cSJim Jagielski aLine.SetColor(aCol);
1914*b1cdbd2cSJim Jagielski aLine.SetOutWidth( aBoxItem.GetBottom()->GetOutWidth());
1915*b1cdbd2cSJim Jagielski aLine.SetInWidth( aBoxItem.GetBottom()->GetInWidth());
1916*b1cdbd2cSJim Jagielski aLine.SetDistance( aBoxItem.GetBottom()->GetDistance());
1917*b1cdbd2cSJim Jagielski }
1918*b1cdbd2cSJim Jagielski else
1919*b1cdbd2cSJim Jagielski {
1920*b1cdbd2cSJim Jagielski if(aCol != aBoxItem.GetBottom()->GetColor() )
1921*b1cdbd2cSJim Jagielski bColDisable = 1;
1922*b1cdbd2cSJim Jagielski if(!( aLine == *(aBoxItem.GetBottom())) )
1923*b1cdbd2cSJim Jagielski bStyleDisable = 1;
1924*b1cdbd2cSJim Jagielski }
1925*b1cdbd2cSJim Jagielski }
1926*b1cdbd2cSJim Jagielski
1927*b1cdbd2cSJim Jagielski if( aBoxItem.GetLeft() )
1928*b1cdbd2cSJim Jagielski {
1929*b1cdbd2cSJim Jagielski if(bCol == 0)
1930*b1cdbd2cSJim Jagielski {
1931*b1cdbd2cSJim Jagielski bCol = 1;
1932*b1cdbd2cSJim Jagielski aCol = aBoxItem.GetLeft()->GetColor() ;
1933*b1cdbd2cSJim Jagielski aLine.SetColor(aCol);
1934*b1cdbd2cSJim Jagielski aLine.SetOutWidth( aBoxItem.GetLeft()->GetOutWidth());
1935*b1cdbd2cSJim Jagielski aLine.SetInWidth( aBoxItem.GetLeft()->GetInWidth());
1936*b1cdbd2cSJim Jagielski aLine.SetDistance( aBoxItem.GetLeft()->GetDistance());
1937*b1cdbd2cSJim Jagielski }
1938*b1cdbd2cSJim Jagielski else
1939*b1cdbd2cSJim Jagielski {
1940*b1cdbd2cSJim Jagielski if(aCol != aBoxItem.GetLeft()->GetColor() )
1941*b1cdbd2cSJim Jagielski bColDisable = 1;
1942*b1cdbd2cSJim Jagielski if(!( aLine == *(aBoxItem.GetLeft())) )
1943*b1cdbd2cSJim Jagielski bStyleDisable = 1;
1944*b1cdbd2cSJim Jagielski }
1945*b1cdbd2cSJim Jagielski }
1946*b1cdbd2cSJim Jagielski
1947*b1cdbd2cSJim Jagielski if( aBoxItem.GetRight() )
1948*b1cdbd2cSJim Jagielski {
1949*b1cdbd2cSJim Jagielski if(bCol == 0)
1950*b1cdbd2cSJim Jagielski {
1951*b1cdbd2cSJim Jagielski bCol = 1;
1952*b1cdbd2cSJim Jagielski aCol = aBoxItem.GetRight()->GetColor() ;
1953*b1cdbd2cSJim Jagielski aLine.SetColor(aCol);
1954*b1cdbd2cSJim Jagielski aLine.SetOutWidth( aBoxItem.GetRight()->GetOutWidth());
1955*b1cdbd2cSJim Jagielski aLine.SetInWidth( aBoxItem.GetRight()->GetInWidth());
1956*b1cdbd2cSJim Jagielski aLine.SetDistance( aBoxItem.GetRight()->GetDistance());
1957*b1cdbd2cSJim Jagielski }
1958*b1cdbd2cSJim Jagielski else
1959*b1cdbd2cSJim Jagielski {
1960*b1cdbd2cSJim Jagielski if(aCol != aBoxItem.GetRight()->GetColor() )
1961*b1cdbd2cSJim Jagielski bColDisable = 1;
1962*b1cdbd2cSJim Jagielski if(!( aLine == *(aBoxItem.GetRight())) )
1963*b1cdbd2cSJim Jagielski bStyleDisable = 1;
1964*b1cdbd2cSJim Jagielski }
1965*b1cdbd2cSJim Jagielski }
1966*b1cdbd2cSJim Jagielski
1967*b1cdbd2cSJim Jagielski if( aInfoItem.GetVert())
1968*b1cdbd2cSJim Jagielski {
1969*b1cdbd2cSJim Jagielski if(bCol == 0)
1970*b1cdbd2cSJim Jagielski {
1971*b1cdbd2cSJim Jagielski bCol = 1;
1972*b1cdbd2cSJim Jagielski aCol = aInfoItem.GetVert()->GetColor() ;
1973*b1cdbd2cSJim Jagielski aLine.SetColor(aCol);
1974*b1cdbd2cSJim Jagielski aLine.SetOutWidth( aInfoItem.GetVert()->GetOutWidth());
1975*b1cdbd2cSJim Jagielski aLine.SetInWidth( aInfoItem.GetVert()->GetInWidth());
1976*b1cdbd2cSJim Jagielski aLine.SetDistance( aInfoItem.GetVert()->GetDistance());
1977*b1cdbd2cSJim Jagielski }
1978*b1cdbd2cSJim Jagielski else
1979*b1cdbd2cSJim Jagielski {
1980*b1cdbd2cSJim Jagielski if(aCol != aInfoItem.GetVert()->GetColor() )
1981*b1cdbd2cSJim Jagielski bColDisable = 1;
1982*b1cdbd2cSJim Jagielski if(!( aLine == *(aInfoItem.GetVert())) )
1983*b1cdbd2cSJim Jagielski bStyleDisable = 1;
1984*b1cdbd2cSJim Jagielski }
1985*b1cdbd2cSJim Jagielski }
1986*b1cdbd2cSJim Jagielski
1987*b1cdbd2cSJim Jagielski if( aInfoItem.GetHori())
1988*b1cdbd2cSJim Jagielski {
1989*b1cdbd2cSJim Jagielski if(bCol == 0)
1990*b1cdbd2cSJim Jagielski {
1991*b1cdbd2cSJim Jagielski bCol = 1;
1992*b1cdbd2cSJim Jagielski aCol = aInfoItem.GetHori()->GetColor() ;
1993*b1cdbd2cSJim Jagielski aLine.SetColor(aCol);
1994*b1cdbd2cSJim Jagielski aLine.SetOutWidth( aInfoItem.GetHori()->GetOutWidth());
1995*b1cdbd2cSJim Jagielski aLine.SetInWidth( aInfoItem.GetHori()->GetInWidth());
1996*b1cdbd2cSJim Jagielski aLine.SetDistance( aInfoItem.GetHori()->GetDistance());
1997*b1cdbd2cSJim Jagielski }
1998*b1cdbd2cSJim Jagielski else
1999*b1cdbd2cSJim Jagielski {
2000*b1cdbd2cSJim Jagielski if(aCol != aInfoItem.GetHori()->GetColor() )
2001*b1cdbd2cSJim Jagielski bColDisable = 1;
2002*b1cdbd2cSJim Jagielski if(!( aLine == *(aInfoItem.GetHori())) )
2003*b1cdbd2cSJim Jagielski bStyleDisable = 1;
2004*b1cdbd2cSJim Jagielski }
2005*b1cdbd2cSJim Jagielski }
2006*b1cdbd2cSJim Jagielski
2007*b1cdbd2cSJim Jagielski if( !aInfoItem.IsValid( VALID_VERT )
2008*b1cdbd2cSJim Jagielski || !aInfoItem.IsValid( VALID_HORI )
2009*b1cdbd2cSJim Jagielski || !aInfoItem.IsValid( VALID_LEFT )
2010*b1cdbd2cSJim Jagielski || !aInfoItem.IsValid( VALID_RIGHT )
2011*b1cdbd2cSJim Jagielski || !aInfoItem.IsValid( VALID_TOP )
2012*b1cdbd2cSJim Jagielski || !aInfoItem.IsValid( VALID_BOTTOM ) )
2013*b1cdbd2cSJim Jagielski {
2014*b1cdbd2cSJim Jagielski bColDisable = 1;
2015*b1cdbd2cSJim Jagielski bStyleDisable = 1;
2016*b1cdbd2cSJim Jagielski }
2017*b1cdbd2cSJim Jagielski
2018*b1cdbd2cSJim Jagielski if(SID_FRAME_LINECOLOR == nWhich)
2019*b1cdbd2cSJim Jagielski {
2020*b1cdbd2cSJim Jagielski if(bColDisable) // if different lines have differernt colors
2021*b1cdbd2cSJim Jagielski {
2022*b1cdbd2cSJim Jagielski aCol = COL_TRANSPARENT;
2023*b1cdbd2cSJim Jagielski rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
2024*b1cdbd2cSJim Jagielski rSet.InvalidateItem(SID_FRAME_LINECOLOR);
2025*b1cdbd2cSJim Jagielski }
2026*b1cdbd2cSJim Jagielski else if( bCol == 0 && bColDisable == 0) // if no line available
2027*b1cdbd2cSJim Jagielski {
2028*b1cdbd2cSJim Jagielski aCol = COL_AUTO;
2029*b1cdbd2cSJim Jagielski rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
2030*b1cdbd2cSJim Jagielski }
2031*b1cdbd2cSJim Jagielski else
2032*b1cdbd2cSJim Jagielski rSet.Put( SvxColorItem(aCol, SID_FRAME_LINECOLOR ) );
2033*b1cdbd2cSJim Jagielski }
2034*b1cdbd2cSJim Jagielski else // if( nWhich == SID_FRAME_LINESTYLE)
2035*b1cdbd2cSJim Jagielski {
2036*b1cdbd2cSJim Jagielski if(bStyleDisable) // if have several lines but don't have same style
2037*b1cdbd2cSJim Jagielski {
2038*b1cdbd2cSJim Jagielski aLine.SetOutWidth( 1 );
2039*b1cdbd2cSJim Jagielski aLine.SetInWidth( 0 );
2040*b1cdbd2cSJim Jagielski aLine.SetDistance( 0 );
2041*b1cdbd2cSJim Jagielski SvxLineItem aItem(SID_FRAME_LINESTYLE);
2042*b1cdbd2cSJim Jagielski aItem.SetLine(&aLine);
2043*b1cdbd2cSJim Jagielski rSet.Put( aItem );
2044*b1cdbd2cSJim Jagielski rSet.InvalidateItem(SID_FRAME_LINESTYLE);
2045*b1cdbd2cSJim Jagielski }
2046*b1cdbd2cSJim Jagielski else // all the lines have same style or no line availavle, use initial value (0,0,0,0)
2047*b1cdbd2cSJim Jagielski {
2048*b1cdbd2cSJim Jagielski SvxLineItem aItem(SID_FRAME_LINESTYLE);
2049*b1cdbd2cSJim Jagielski aItem.SetLine(&aLine);
2050*b1cdbd2cSJim Jagielski rSet.Put( aItem );
2051*b1cdbd2cSJim Jagielski }
2052*b1cdbd2cSJim Jagielski }
2053*b1cdbd2cSJim Jagielski }
2054*b1cdbd2cSJim Jagielski break;
2055*b1cdbd2cSJim Jagielski case SID_ATTR_BRUSH:
2056*b1cdbd2cSJim Jagielski {
2057*b1cdbd2cSJim Jagielski rSet.Put( rBrushItem, GetPool().GetWhich(nWhich) );
2058*b1cdbd2cSJim Jagielski }
2059*b1cdbd2cSJim Jagielski break;
2060*b1cdbd2cSJim Jagielski }
2061*b1cdbd2cSJim Jagielski nWhich = aIter.NextWhich();
2062*b1cdbd2cSJim Jagielski }
2063*b1cdbd2cSJim Jagielski
2064*b1cdbd2cSJim Jagielski // stuff for sidebar panels
2065*b1cdbd2cSJim Jagielski Invalidate(SID_ATTR_ALIGN_DEGREES);
2066*b1cdbd2cSJim Jagielski Invalidate(SID_ATTR_ALIGN_STACKED);
2067*b1cdbd2cSJim Jagielski }
2068*b1cdbd2cSJim Jagielski
2069*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
2070*b1cdbd2cSJim Jagielski
GetTextAttrState(SfxItemSet & rSet)2071*b1cdbd2cSJim Jagielski void ScFormatShell::GetTextAttrState( SfxItemSet& rSet )
2072*b1cdbd2cSJim Jagielski {
2073*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2074*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
2075*b1cdbd2cSJim Jagielski rSet.Put( rAttrSet, sal_False ); // ItemStates mitkopieren
2076*b1cdbd2cSJim Jagielski
2077*b1cdbd2cSJim Jagielski // choose font info according to selection script type
2078*b1cdbd2cSJim Jagielski sal_uInt8 nScript = 0; // GetSelectionScriptType never returns 0
2079*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_FONT_WEIGHT ) != SFX_ITEM_UNKNOWN )
2080*b1cdbd2cSJim Jagielski {
2081*b1cdbd2cSJim Jagielski if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
2082*b1cdbd2cSJim Jagielski ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_WEIGHT, nScript );
2083*b1cdbd2cSJim Jagielski }
2084*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_FONT_POSTURE ) != SFX_ITEM_UNKNOWN )
2085*b1cdbd2cSJim Jagielski {
2086*b1cdbd2cSJim Jagielski if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
2087*b1cdbd2cSJim Jagielski ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_POSTURE, nScript );
2088*b1cdbd2cSJim Jagielski }
2089*b1cdbd2cSJim Jagielski
2090*b1cdbd2cSJim Jagielski SfxItemState eState;
2091*b1cdbd2cSJim Jagielski // const SfxPoolItem* pItem;
2092*b1cdbd2cSJim Jagielski
2093*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
2094*b1cdbd2cSJim Jagielski // eigene Kontrolle ueber RadioButton-Funktionalitaet:
2095*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
2096*b1cdbd2cSJim Jagielski // Unterstreichung
2097*b1cdbd2cSJim Jagielski //------------------------
2098*b1cdbd2cSJim Jagielski
2099*b1cdbd2cSJim Jagielski eState = rAttrSet.GetItemState( ATTR_FONT_UNDERLINE, sal_True );
2100*b1cdbd2cSJim Jagielski if ( eState == SFX_ITEM_DONTCARE )
2101*b1cdbd2cSJim Jagielski {
2102*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ULINE_VAL_NONE );
2103*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
2104*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
2105*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
2106*b1cdbd2cSJim Jagielski }
2107*b1cdbd2cSJim Jagielski else
2108*b1cdbd2cSJim Jagielski {
2109*b1cdbd2cSJim Jagielski FontUnderline eUnderline = ((const SvxUnderlineItem&)
2110*b1cdbd2cSJim Jagielski rAttrSet.Get(ATTR_FONT_UNDERLINE)).GetLineStyle();
2111*b1cdbd2cSJim Jagielski sal_uInt16 nId = SID_ULINE_VAL_NONE;
2112*b1cdbd2cSJim Jagielski switch (eUnderline)
2113*b1cdbd2cSJim Jagielski {
2114*b1cdbd2cSJim Jagielski case UNDERLINE_SINGLE: nId = SID_ULINE_VAL_SINGLE; break;
2115*b1cdbd2cSJim Jagielski case UNDERLINE_DOUBLE: nId = SID_ULINE_VAL_DOUBLE; break;
2116*b1cdbd2cSJim Jagielski case UNDERLINE_DOTTED: nId = SID_ULINE_VAL_DOTTED; break;
2117*b1cdbd2cSJim Jagielski default:
2118*b1cdbd2cSJim Jagielski break;
2119*b1cdbd2cSJim Jagielski }
2120*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nId, sal_True ) );
2121*b1cdbd2cSJim Jagielski }
2122*b1cdbd2cSJim Jagielski
2123*b1cdbd2cSJim Jagielski //------------------------
2124*b1cdbd2cSJim Jagielski // horizontale Ausrichtung
2125*b1cdbd2cSJim Jagielski //------------------------
2126*b1cdbd2cSJim Jagielski
2127*b1cdbd2cSJim Jagielski const SvxHorJustifyItem* pHorJustify = NULL;
2128*b1cdbd2cSJim Jagielski const SvxVerJustifyItem* pVerJustify = NULL;
2129*b1cdbd2cSJim Jagielski SvxCellHorJustify eHorJustify = SVX_HOR_JUSTIFY_STANDARD;
2130*b1cdbd2cSJim Jagielski SvxCellVerJustify eVerJustify = SVX_VER_JUSTIFY_STANDARD;
2131*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = 0;
2132*b1cdbd2cSJim Jagielski sal_Bool bJustifyStd = sal_False;
2133*b1cdbd2cSJim Jagielski SfxBoolItem aBoolItem ( 0, sal_True );
2134*b1cdbd2cSJim Jagielski
2135*b1cdbd2cSJim Jagielski eState = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY, sal_True,
2136*b1cdbd2cSJim Jagielski (const SfxPoolItem**)&pHorJustify );
2137*b1cdbd2cSJim Jagielski switch ( eState )
2138*b1cdbd2cSJim Jagielski {
2139*b1cdbd2cSJim Jagielski case SFX_ITEM_SET:
2140*b1cdbd2cSJim Jagielski {
2141*b1cdbd2cSJim Jagielski eHorJustify = SvxCellHorJustify( pHorJustify->GetValue() );
2142*b1cdbd2cSJim Jagielski
2143*b1cdbd2cSJim Jagielski switch ( SvxCellHorJustify( pHorJustify->GetValue() ) )
2144*b1cdbd2cSJim Jagielski {
2145*b1cdbd2cSJim Jagielski case SVX_HOR_JUSTIFY_STANDARD:
2146*b1cdbd2cSJim Jagielski break;
2147*b1cdbd2cSJim Jagielski
2148*b1cdbd2cSJim Jagielski case SVX_HOR_JUSTIFY_LEFT:
2149*b1cdbd2cSJim Jagielski nWhich = SID_ALIGNLEFT;
2150*b1cdbd2cSJim Jagielski break;
2151*b1cdbd2cSJim Jagielski
2152*b1cdbd2cSJim Jagielski case SVX_HOR_JUSTIFY_RIGHT:
2153*b1cdbd2cSJim Jagielski nWhich = SID_ALIGNRIGHT;
2154*b1cdbd2cSJim Jagielski break;
2155*b1cdbd2cSJim Jagielski
2156*b1cdbd2cSJim Jagielski case SVX_HOR_JUSTIFY_CENTER:
2157*b1cdbd2cSJim Jagielski nWhich = SID_ALIGNCENTERHOR;
2158*b1cdbd2cSJim Jagielski break;
2159*b1cdbd2cSJim Jagielski
2160*b1cdbd2cSJim Jagielski case SVX_HOR_JUSTIFY_BLOCK:
2161*b1cdbd2cSJim Jagielski nWhich = SID_ALIGNBLOCK;
2162*b1cdbd2cSJim Jagielski break;
2163*b1cdbd2cSJim Jagielski
2164*b1cdbd2cSJim Jagielski case SVX_HOR_JUSTIFY_REPEAT:
2165*b1cdbd2cSJim Jagielski default:
2166*b1cdbd2cSJim Jagielski bJustifyStd = sal_True;
2167*b1cdbd2cSJim Jagielski break;
2168*b1cdbd2cSJim Jagielski }
2169*b1cdbd2cSJim Jagielski }
2170*b1cdbd2cSJim Jagielski break;
2171*b1cdbd2cSJim Jagielski
2172*b1cdbd2cSJim Jagielski case SFX_ITEM_DONTCARE:
2173*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ALIGNLEFT );
2174*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ALIGNRIGHT );
2175*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ALIGNCENTERHOR );
2176*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ALIGNBLOCK );
2177*b1cdbd2cSJim Jagielski break;
2178*b1cdbd2cSJim Jagielski
2179*b1cdbd2cSJim Jagielski default:
2180*b1cdbd2cSJim Jagielski bJustifyStd = sal_True;
2181*b1cdbd2cSJim Jagielski break;
2182*b1cdbd2cSJim Jagielski }
2183*b1cdbd2cSJim Jagielski
2184*b1cdbd2cSJim Jagielski if ( nWhich )
2185*b1cdbd2cSJim Jagielski {
2186*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( nWhich );
2187*b1cdbd2cSJim Jagielski rSet.Put( aBoolItem );
2188*b1cdbd2cSJim Jagielski }
2189*b1cdbd2cSJim Jagielski else if ( bJustifyStd )
2190*b1cdbd2cSJim Jagielski {
2191*b1cdbd2cSJim Jagielski aBoolItem.SetValue( sal_False );
2192*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( SID_ALIGNLEFT ); rSet.Put( aBoolItem );
2193*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( SID_ALIGNRIGHT ); rSet.Put( aBoolItem );
2194*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( SID_ALIGNCENTERHOR ); rSet.Put( aBoolItem );
2195*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( SID_ALIGNBLOCK ); rSet.Put( aBoolItem );
2196*b1cdbd2cSJim Jagielski bJustifyStd = sal_False;
2197*b1cdbd2cSJim Jagielski }
2198*b1cdbd2cSJim Jagielski
2199*b1cdbd2cSJim Jagielski //------------------------
2200*b1cdbd2cSJim Jagielski // vertikale Ausrichtung
2201*b1cdbd2cSJim Jagielski //------------------------
2202*b1cdbd2cSJim Jagielski
2203*b1cdbd2cSJim Jagielski nWhich = 0;
2204*b1cdbd2cSJim Jagielski aBoolItem.SetValue( sal_True );
2205*b1cdbd2cSJim Jagielski
2206*b1cdbd2cSJim Jagielski eState = rAttrSet.GetItemState( ATTR_VER_JUSTIFY, sal_True,
2207*b1cdbd2cSJim Jagielski (const SfxPoolItem**)&pVerJustify );
2208*b1cdbd2cSJim Jagielski
2209*b1cdbd2cSJim Jagielski switch ( eState )
2210*b1cdbd2cSJim Jagielski {
2211*b1cdbd2cSJim Jagielski case SFX_ITEM_SET:
2212*b1cdbd2cSJim Jagielski {
2213*b1cdbd2cSJim Jagielski eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
2214*b1cdbd2cSJim Jagielski
2215*b1cdbd2cSJim Jagielski switch ( eVerJustify )
2216*b1cdbd2cSJim Jagielski {
2217*b1cdbd2cSJim Jagielski case SVX_VER_JUSTIFY_TOP:
2218*b1cdbd2cSJim Jagielski nWhich = SID_ALIGNTOP;
2219*b1cdbd2cSJim Jagielski break;
2220*b1cdbd2cSJim Jagielski
2221*b1cdbd2cSJim Jagielski case SVX_VER_JUSTIFY_BOTTOM:
2222*b1cdbd2cSJim Jagielski nWhich = SID_ALIGNBOTTOM;
2223*b1cdbd2cSJim Jagielski break;
2224*b1cdbd2cSJim Jagielski
2225*b1cdbd2cSJim Jagielski case SVX_VER_JUSTIFY_CENTER:
2226*b1cdbd2cSJim Jagielski nWhich = SID_ALIGNCENTERVER;
2227*b1cdbd2cSJim Jagielski break;
2228*b1cdbd2cSJim Jagielski
2229*b1cdbd2cSJim Jagielski case SVX_VER_JUSTIFY_STANDARD:
2230*b1cdbd2cSJim Jagielski default:
2231*b1cdbd2cSJim Jagielski bJustifyStd = sal_True;
2232*b1cdbd2cSJim Jagielski break;
2233*b1cdbd2cSJim Jagielski }
2234*b1cdbd2cSJim Jagielski }
2235*b1cdbd2cSJim Jagielski break;
2236*b1cdbd2cSJim Jagielski
2237*b1cdbd2cSJim Jagielski case SFX_ITEM_DONTCARE:
2238*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ALIGNTOP );
2239*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ALIGNBOTTOM );
2240*b1cdbd2cSJim Jagielski rSet.InvalidateItem( SID_ALIGNCENTERVER );
2241*b1cdbd2cSJim Jagielski break;
2242*b1cdbd2cSJim Jagielski
2243*b1cdbd2cSJim Jagielski default:
2244*b1cdbd2cSJim Jagielski bJustifyStd = sal_True;
2245*b1cdbd2cSJim Jagielski break;
2246*b1cdbd2cSJim Jagielski }
2247*b1cdbd2cSJim Jagielski
2248*b1cdbd2cSJim Jagielski if ( nWhich )
2249*b1cdbd2cSJim Jagielski {
2250*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( nWhich );
2251*b1cdbd2cSJim Jagielski rSet.Put( aBoolItem );
2252*b1cdbd2cSJim Jagielski }
2253*b1cdbd2cSJim Jagielski else if ( bJustifyStd )
2254*b1cdbd2cSJim Jagielski {
2255*b1cdbd2cSJim Jagielski aBoolItem.SetValue( sal_False );
2256*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( SID_ALIGNTOP ); rSet.Put( aBoolItem );
2257*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( SID_ALIGNBOTTOM ); rSet.Put( aBoolItem );
2258*b1cdbd2cSJim Jagielski aBoolItem.SetWhich( SID_ALIGNCENTERVER ); rSet.Put( aBoolItem );
2259*b1cdbd2cSJim Jagielski }
2260*b1cdbd2cSJim Jagielski }
2261*b1cdbd2cSJim Jagielski
2262*b1cdbd2cSJim Jagielski
2263*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
2264*b1cdbd2cSJim Jagielski
GetBorderState(SfxItemSet & rSet)2265*b1cdbd2cSJim Jagielski void ScFormatShell::GetBorderState( SfxItemSet& rSet )
2266*b1cdbd2cSJim Jagielski {
2267*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2268*b1cdbd2cSJim Jagielski SvxBoxItem aBoxItem( ATTR_BORDER );
2269*b1cdbd2cSJim Jagielski SvxBoxInfoItem aInfoItem( ATTR_BORDER_INNER );
2270*b1cdbd2cSJim Jagielski
2271*b1cdbd2cSJim Jagielski pTabViewShell->GetSelectionFrame( aBoxItem, aInfoItem );
2272*b1cdbd2cSJim Jagielski
2273*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_BORDER ) != SFX_ITEM_UNKNOWN )
2274*b1cdbd2cSJim Jagielski rSet.Put( aBoxItem );
2275*b1cdbd2cSJim Jagielski if ( rSet.GetItemState( ATTR_BORDER_INNER ) != SFX_ITEM_UNKNOWN )
2276*b1cdbd2cSJim Jagielski rSet.Put( aInfoItem );
2277*b1cdbd2cSJim Jagielski }
2278*b1cdbd2cSJim Jagielski
2279*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
2280*b1cdbd2cSJim Jagielski
GetAlignState(SfxItemSet & rSet)2281*b1cdbd2cSJim Jagielski void ScFormatShell::GetAlignState( SfxItemSet& rSet )
2282*b1cdbd2cSJim Jagielski {
2283*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2284*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
2285*b1cdbd2cSJim Jagielski SfxWhichIter aIter(rSet);
2286*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = aIter.FirstWhich();
2287*b1cdbd2cSJim Jagielski
2288*b1cdbd2cSJim Jagielski SvxCellHorJustify eHAlign = SVX_HOR_JUSTIFY_STANDARD;
2289*b1cdbd2cSJim Jagielski bool bHasHAlign = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY ) != SFX_ITEM_DONTCARE;
2290*b1cdbd2cSJim Jagielski if( bHasHAlign )
2291*b1cdbd2cSJim Jagielski eHAlign = (SvxCellHorJustify)((const SvxHorJustifyItem&) rAttrSet.Get( ATTR_HOR_JUSTIFY )).GetValue();
2292*b1cdbd2cSJim Jagielski
2293*b1cdbd2cSJim Jagielski SvxCellVerJustify eVAlign = SVX_VER_JUSTIFY_STANDARD;
2294*b1cdbd2cSJim Jagielski bool bHasVAlign = rAttrSet.GetItemState( ATTR_VER_JUSTIFY ) != SFX_ITEM_DONTCARE;
2295*b1cdbd2cSJim Jagielski if( bHasVAlign )
2296*b1cdbd2cSJim Jagielski eVAlign = (SvxCellVerJustify)((const SvxVerJustifyItem&) rAttrSet.Get( ATTR_VER_JUSTIFY )).GetValue();
2297*b1cdbd2cSJim Jagielski
2298*b1cdbd2cSJim Jagielski while ( nWhich )
2299*b1cdbd2cSJim Jagielski {
2300*b1cdbd2cSJim Jagielski switch ( nWhich )
2301*b1cdbd2cSJim Jagielski {
2302*b1cdbd2cSJim Jagielski case SID_H_ALIGNCELL:
2303*b1cdbd2cSJim Jagielski if ( bHasHAlign )
2304*b1cdbd2cSJim Jagielski rSet.Put( SvxHorJustifyItem( eHAlign, nWhich ));
2305*b1cdbd2cSJim Jagielski break;
2306*b1cdbd2cSJim Jagielski case SID_V_ALIGNCELL:
2307*b1cdbd2cSJim Jagielski if ( bHasVAlign )
2308*b1cdbd2cSJim Jagielski rSet.Put( SvxVerJustifyItem( eVAlign, nWhich ));
2309*b1cdbd2cSJim Jagielski break;
2310*b1cdbd2cSJim Jagielski
2311*b1cdbd2cSJim Jagielski // pseudo slots for Format menu
2312*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_HDEFAULT:
2313*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_LEFT:
2314*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_HCENTER:
2315*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_RIGHT:
2316*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_JUSTIFIED:
2317*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nWhich, bHasHAlign && (eHAlign == lclConvertSlotToHAlign( nWhich )) ) );
2318*b1cdbd2cSJim Jagielski break;
2319*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_VDEFAULT:
2320*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_TOP:
2321*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_VCENTER:
2322*b1cdbd2cSJim Jagielski case SID_ALIGN_ANY_BOTTOM:
2323*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nWhich, bHasVAlign && (eVAlign == lclConvertSlotToVAlign( nWhich )) ) );
2324*b1cdbd2cSJim Jagielski break;
2325*b1cdbd2cSJim Jagielski }
2326*b1cdbd2cSJim Jagielski nWhich = aIter.NextWhich();
2327*b1cdbd2cSJim Jagielski }
2328*b1cdbd2cSJim Jagielski }
2329*b1cdbd2cSJim Jagielski
GetNumFormatState(SfxItemSet & rSet)2330*b1cdbd2cSJim Jagielski void ScFormatShell::GetNumFormatState( SfxItemSet& rSet )
2331*b1cdbd2cSJim Jagielski {
2332*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2333*b1cdbd2cSJim Jagielski
2334*b1cdbd2cSJim Jagielski // ScViewData* pViewData = GetViewData();
2335*b1cdbd2cSJim Jagielski ScDocument* pDoc = pViewData->GetDocument();
2336*b1cdbd2cSJim Jagielski
2337*b1cdbd2cSJim Jagielski SfxWhichIter aIter(rSet);
2338*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = aIter.FirstWhich();
2339*b1cdbd2cSJim Jagielski while ( nWhich )
2340*b1cdbd2cSJim Jagielski {
2341*b1cdbd2cSJim Jagielski switch ( nWhich )
2342*b1cdbd2cSJim Jagielski {
2343*b1cdbd2cSJim Jagielski case SID_NUMBER_FORMAT:
2344*b1cdbd2cSJim Jagielski //{
2345*b1cdbd2cSJim Jagielski // String aFormatCode; // bleibt leer, wenn dont-care
2346*b1cdbd2cSJim Jagielski //
2347*b1cdbd2cSJim Jagielski // const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
2348*b1cdbd2cSJim Jagielski // if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) != SFX_ITEM_DONTCARE )
2349*b1cdbd2cSJim Jagielski // {
2350*b1cdbd2cSJim Jagielski // sal_uLong nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get(
2351*b1cdbd2cSJim Jagielski // ATTR_VALUE_FORMAT )).GetValue();
2352*b1cdbd2cSJim Jagielski //
2353*b1cdbd2cSJim Jagielski // SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
2354*b1cdbd2cSJim Jagielski // const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
2355*b1cdbd2cSJim Jagielski // if ( pFormatEntry )
2356*b1cdbd2cSJim Jagielski // aFormatCode = pFormatEntry->GetFormatstring();
2357*b1cdbd2cSJim Jagielski // }
2358*b1cdbd2cSJim Jagielski //
2359*b1cdbd2cSJim Jagielski // rSet.Put( SfxStringItem( nWhich, aFormatCode ) );
2360*b1cdbd2cSJim Jagielski //}
2361*b1cdbd2cSJim Jagielski
2362*b1cdbd2cSJim Jagielski // symphony version with format interpretation
2363*b1cdbd2cSJim Jagielski {
2364*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
2365*b1cdbd2cSJim Jagielski
2366*b1cdbd2cSJim Jagielski if(SFX_ITEM_DONTCARE != rAttrSet.GetItemState(ATTR_VALUE_FORMAT))
2367*b1cdbd2cSJim Jagielski {
2368*b1cdbd2cSJim Jagielski SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
2369*b1cdbd2cSJim Jagielski sal_uInt32 nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get(ATTR_VALUE_FORMAT)).GetValue();
2370*b1cdbd2cSJim Jagielski sal_Bool bThousand(false);
2371*b1cdbd2cSJim Jagielski sal_Bool bNegRed(false);
2372*b1cdbd2cSJim Jagielski sal_uInt16 nPrecision(0);
2373*b1cdbd2cSJim Jagielski sal_uInt16 nLeadZeroes(0);
2374*b1cdbd2cSJim Jagielski
2375*b1cdbd2cSJim Jagielski pFormatter->GetFormatSpecialInfo(nNumberFormat,bThousand, bNegRed, nPrecision, nLeadZeroes);
2376*b1cdbd2cSJim Jagielski String aFormat;
2377*b1cdbd2cSJim Jagielski static String sBreak = String::CreateFromAscii(",");
2378*b1cdbd2cSJim Jagielski const String sThousand = String::CreateFromInt32(bThousand);
2379*b1cdbd2cSJim Jagielski const String sNegRed = String::CreateFromInt32(bNegRed);
2380*b1cdbd2cSJim Jagielski const String sPrecision = String::CreateFromInt32(nPrecision);
2381*b1cdbd2cSJim Jagielski const String sLeadZeroes = String::CreateFromInt32(nLeadZeroes);
2382*b1cdbd2cSJim Jagielski
2383*b1cdbd2cSJim Jagielski aFormat += sThousand;
2384*b1cdbd2cSJim Jagielski aFormat += sBreak;
2385*b1cdbd2cSJim Jagielski aFormat += sNegRed;
2386*b1cdbd2cSJim Jagielski aFormat += sBreak;
2387*b1cdbd2cSJim Jagielski aFormat += sPrecision;
2388*b1cdbd2cSJim Jagielski aFormat += sBreak;
2389*b1cdbd2cSJim Jagielski aFormat += sLeadZeroes;
2390*b1cdbd2cSJim Jagielski aFormat += sBreak;
2391*b1cdbd2cSJim Jagielski
2392*b1cdbd2cSJim Jagielski rSet.Put(SfxStringItem(nWhich, aFormat));
2393*b1cdbd2cSJim Jagielski }
2394*b1cdbd2cSJim Jagielski else
2395*b1cdbd2cSJim Jagielski {
2396*b1cdbd2cSJim Jagielski rSet.InvalidateItem( nWhich );
2397*b1cdbd2cSJim Jagielski }
2398*b1cdbd2cSJim Jagielski }
2399*b1cdbd2cSJim Jagielski break;
2400*b1cdbd2cSJim Jagielski
2401*b1cdbd2cSJim Jagielski case SID_NUMBER_TYPE_FORMAT:
2402*b1cdbd2cSJim Jagielski {
2403*b1cdbd2cSJim Jagielski sal_Int16 aFormatCode = -1;
2404*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
2405*b1cdbd2cSJim Jagielski if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) >= SFX_ITEM_AVAILABLE ) //Modify for more robust
2406*b1cdbd2cSJim Jagielski {
2407*b1cdbd2cSJim Jagielski SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
2408*b1cdbd2cSJim Jagielski sal_uInt32 nNumberFormat = pTabViewShell->GetSelectionPattern()->GetNumberFormat( pFormatter );
2409*b1cdbd2cSJim Jagielski const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
2410*b1cdbd2cSJim Jagielski bool bStandard = false;
2411*b1cdbd2cSJim Jagielski
2412*b1cdbd2cSJim Jagielski if ( pFormatEntry )
2413*b1cdbd2cSJim Jagielski {
2414*b1cdbd2cSJim Jagielski aFormatCode = pFormatEntry->GetType();
2415*b1cdbd2cSJim Jagielski bStandard = pFormatEntry->IsStandard();
2416*b1cdbd2cSJim Jagielski }
2417*b1cdbd2cSJim Jagielski
2418*b1cdbd2cSJim Jagielski switch(aFormatCode)
2419*b1cdbd2cSJim Jagielski {
2420*b1cdbd2cSJim Jagielski case NUMBERFORMAT_NUMBER:
2421*b1cdbd2cSJim Jagielski case NUMBERFORMAT_NUMBER| NUMBERFORMAT_DEFINED:
2422*b1cdbd2cSJim Jagielski //use format code and standard format code to judge whether it is General,
2423*b1cdbd2cSJim Jagielski //if (nNumberFormat == nStandardNumberFormat)
2424*b1cdbd2cSJim Jagielski if (bStandard)
2425*b1cdbd2cSJim Jagielski aFormatCode = 0;
2426*b1cdbd2cSJim Jagielski else
2427*b1cdbd2cSJim Jagielski aFormatCode = 1;
2428*b1cdbd2cSJim Jagielski break;
2429*b1cdbd2cSJim Jagielski case NUMBERFORMAT_PERCENT:
2430*b1cdbd2cSJim Jagielski case NUMBERFORMAT_PERCENT| NUMBERFORMAT_DEFINED:
2431*b1cdbd2cSJim Jagielski aFormatCode = 2;
2432*b1cdbd2cSJim Jagielski break;
2433*b1cdbd2cSJim Jagielski case NUMBERFORMAT_CURRENCY:
2434*b1cdbd2cSJim Jagielski case NUMBERFORMAT_CURRENCY| NUMBERFORMAT_DEFINED:
2435*b1cdbd2cSJim Jagielski aFormatCode = 3;
2436*b1cdbd2cSJim Jagielski break;
2437*b1cdbd2cSJim Jagielski case NUMBERFORMAT_DATE:
2438*b1cdbd2cSJim Jagielski case NUMBERFORMAT_DATE| NUMBERFORMAT_DEFINED:
2439*b1cdbd2cSJim Jagielski //Add
2440*b1cdbd2cSJim Jagielski case NUMBERFORMAT_DATETIME:
2441*b1cdbd2cSJim Jagielski case NUMBERFORMAT_DATETIME | NUMBERFORMAT_DEFINED:
2442*b1cdbd2cSJim Jagielski aFormatCode = 4;
2443*b1cdbd2cSJim Jagielski break;
2444*b1cdbd2cSJim Jagielski case NUMBERFORMAT_TIME:
2445*b1cdbd2cSJim Jagielski case NUMBERFORMAT_TIME| NUMBERFORMAT_DEFINED:
2446*b1cdbd2cSJim Jagielski aFormatCode = 5;
2447*b1cdbd2cSJim Jagielski break;
2448*b1cdbd2cSJim Jagielski case NUMBERFORMAT_SCIENTIFIC:
2449*b1cdbd2cSJim Jagielski case NUMBERFORMAT_SCIENTIFIC| NUMBERFORMAT_DEFINED:
2450*b1cdbd2cSJim Jagielski aFormatCode = 6;
2451*b1cdbd2cSJim Jagielski break;
2452*b1cdbd2cSJim Jagielski case NUMBERFORMAT_FRACTION:
2453*b1cdbd2cSJim Jagielski case NUMBERFORMAT_FRACTION| NUMBERFORMAT_DEFINED:
2454*b1cdbd2cSJim Jagielski aFormatCode = 7;
2455*b1cdbd2cSJim Jagielski break;
2456*b1cdbd2cSJim Jagielski case NUMBERFORMAT_LOGICAL:
2457*b1cdbd2cSJim Jagielski case NUMBERFORMAT_LOGICAL| NUMBERFORMAT_DEFINED:
2458*b1cdbd2cSJim Jagielski aFormatCode = 8;
2459*b1cdbd2cSJim Jagielski break;
2460*b1cdbd2cSJim Jagielski case NUMBERFORMAT_TEXT:
2461*b1cdbd2cSJim Jagielski case NUMBERFORMAT_TEXT| NUMBERFORMAT_DEFINED:
2462*b1cdbd2cSJim Jagielski aFormatCode = 9;
2463*b1cdbd2cSJim Jagielski break;
2464*b1cdbd2cSJim Jagielski default:
2465*b1cdbd2cSJim Jagielski aFormatCode = -1; //for more roburst
2466*b1cdbd2cSJim Jagielski }
2467*b1cdbd2cSJim Jagielski if( aFormatCode == -1 )
2468*b1cdbd2cSJim Jagielski rSet.InvalidateItem( nWhich );
2469*b1cdbd2cSJim Jagielski else
2470*b1cdbd2cSJim Jagielski rSet.Put( SfxInt16Item( nWhich, aFormatCode ) );
2471*b1cdbd2cSJim Jagielski }
2472*b1cdbd2cSJim Jagielski else
2473*b1cdbd2cSJim Jagielski {
2474*b1cdbd2cSJim Jagielski rSet.InvalidateItem( nWhich );
2475*b1cdbd2cSJim Jagielski }
2476*b1cdbd2cSJim Jagielski
2477*b1cdbd2cSJim Jagielski }
2478*b1cdbd2cSJim Jagielski break;
2479*b1cdbd2cSJim Jagielski }
2480*b1cdbd2cSJim Jagielski nWhich = aIter.NextWhich();
2481*b1cdbd2cSJim Jagielski }
2482*b1cdbd2cSJim Jagielski }
2483*b1cdbd2cSJim Jagielski
2484*b1cdbd2cSJim Jagielski
ExecuteTextDirection(SfxRequest & rReq)2485*b1cdbd2cSJim Jagielski void ScFormatShell::ExecuteTextDirection( SfxRequest& rReq )
2486*b1cdbd2cSJim Jagielski {
2487*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2488*b1cdbd2cSJim Jagielski pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
2489*b1cdbd2cSJim Jagielski if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
2490*b1cdbd2cSJim Jagielski {
2491*b1cdbd2cSJim Jagielski SC_MOD()->InputEnterHandler();
2492*b1cdbd2cSJim Jagielski pTabViewShell->UpdateInputHandler();
2493*b1cdbd2cSJim Jagielski }
2494*b1cdbd2cSJim Jagielski
2495*b1cdbd2cSJim Jagielski sal_uInt16 nSlot = rReq.GetSlot();
2496*b1cdbd2cSJim Jagielski switch( nSlot )
2497*b1cdbd2cSJim Jagielski {
2498*b1cdbd2cSJim Jagielski case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
2499*b1cdbd2cSJim Jagielski case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
2500*b1cdbd2cSJim Jagielski {
2501*b1cdbd2cSJim Jagielski sal_Bool bVert = (nSlot == SID_TEXTDIRECTION_TOP_TO_BOTTOM);
2502*b1cdbd2cSJim Jagielski ScPatternAttr aAttr( GetViewData()->GetDocument()->GetPool() );
2503*b1cdbd2cSJim Jagielski SfxItemSet& rItemSet = aAttr.GetItemSet();
2504*b1cdbd2cSJim Jagielski rItemSet.Put( SfxBoolItem( ATTR_STACKED, bVert ) );
2505*b1cdbd2cSJim Jagielski rItemSet.Put( SfxBoolItem( ATTR_VERTICAL_ASIAN, bVert ) );
2506*b1cdbd2cSJim Jagielski pTabViewShell->ApplySelectionPattern( aAttr );
2507*b1cdbd2cSJim Jagielski pTabViewShell->AdjustBlockHeight();
2508*b1cdbd2cSJim Jagielski }
2509*b1cdbd2cSJim Jagielski break;
2510*b1cdbd2cSJim Jagielski
2511*b1cdbd2cSJim Jagielski case SID_ATTR_PARA_LEFT_TO_RIGHT:
2512*b1cdbd2cSJim Jagielski case SID_ATTR_PARA_RIGHT_TO_LEFT:
2513*b1cdbd2cSJim Jagielski {
2514*b1cdbd2cSJim Jagielski SvxFrameDirection eDirection = ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ) ?
2515*b1cdbd2cSJim Jagielski FRMDIR_HORI_LEFT_TOP : FRMDIR_HORI_RIGHT_TOP;
2516*b1cdbd2cSJim Jagielski pTabViewShell->ApplyAttr( SvxFrameDirectionItem( eDirection, ATTR_WRITINGDIR ) );
2517*b1cdbd2cSJim Jagielski }
2518*b1cdbd2cSJim Jagielski break;
2519*b1cdbd2cSJim Jagielski }
2520*b1cdbd2cSJim Jagielski }
2521*b1cdbd2cSJim Jagielski
GetTextDirectionState(SfxItemSet & rSet)2522*b1cdbd2cSJim Jagielski void ScFormatShell::GetTextDirectionState( SfxItemSet& rSet )
2523*b1cdbd2cSJim Jagielski {
2524*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2525*b1cdbd2cSJim Jagielski const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
2526*b1cdbd2cSJim Jagielski
2527*b1cdbd2cSJim Jagielski sal_Bool bVertDontCare =
2528*b1cdbd2cSJim Jagielski (rAttrSet.GetItemState( ATTR_VERTICAL_ASIAN ) == SFX_ITEM_DONTCARE) ||
2529*b1cdbd2cSJim Jagielski (rAttrSet.GetItemState( ATTR_STACKED ) == SFX_ITEM_DONTCARE);
2530*b1cdbd2cSJim Jagielski sal_Bool bLeftRight = !bVertDontCare &&
2531*b1cdbd2cSJim Jagielski !((const SfxBoolItem&) rAttrSet.Get( ATTR_STACKED )).GetValue();
2532*b1cdbd2cSJim Jagielski sal_Bool bTopBottom = !bVertDontCare && !bLeftRight &&
2533*b1cdbd2cSJim Jagielski ((const SfxBoolItem&) rAttrSet.Get( ATTR_VERTICAL_ASIAN )).GetValue();
2534*b1cdbd2cSJim Jagielski
2535*b1cdbd2cSJim Jagielski sal_Bool bBidiDontCare = (rAttrSet.GetItemState( ATTR_WRITINGDIR ) == SFX_ITEM_DONTCARE);
2536*b1cdbd2cSJim Jagielski EEHorizontalTextDirection eBidiDir = EE_HTEXTDIR_DEFAULT;
2537*b1cdbd2cSJim Jagielski if ( !bBidiDontCare )
2538*b1cdbd2cSJim Jagielski {
2539*b1cdbd2cSJim Jagielski SvxFrameDirection eCellDir = (SvxFrameDirection)((const SvxFrameDirectionItem&)
2540*b1cdbd2cSJim Jagielski rAttrSet.Get( ATTR_WRITINGDIR )).GetValue();
2541*b1cdbd2cSJim Jagielski if ( eCellDir == FRMDIR_ENVIRONMENT )
2542*b1cdbd2cSJim Jagielski eBidiDir = (EEHorizontalTextDirection)GetViewData()->GetDocument()->
2543*b1cdbd2cSJim Jagielski GetEditTextDirection( GetViewData()->GetTabNo() );
2544*b1cdbd2cSJim Jagielski else if ( eCellDir == FRMDIR_HORI_RIGHT_TOP )
2545*b1cdbd2cSJim Jagielski eBidiDir = EE_HTEXTDIR_R2L;
2546*b1cdbd2cSJim Jagielski else
2547*b1cdbd2cSJim Jagielski eBidiDir = EE_HTEXTDIR_L2R;
2548*b1cdbd2cSJim Jagielski }
2549*b1cdbd2cSJim Jagielski
2550*b1cdbd2cSJim Jagielski SvtLanguageOptions aLangOpt;
2551*b1cdbd2cSJim Jagielski sal_Bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled();
2552*b1cdbd2cSJim Jagielski sal_Bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
2553*b1cdbd2cSJim Jagielski
2554*b1cdbd2cSJim Jagielski SfxWhichIter aIter( rSet );
2555*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = aIter.FirstWhich();
2556*b1cdbd2cSJim Jagielski while( nWhich )
2557*b1cdbd2cSJim Jagielski {
2558*b1cdbd2cSJim Jagielski switch( nWhich )
2559*b1cdbd2cSJim Jagielski {
2560*b1cdbd2cSJim Jagielski case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
2561*b1cdbd2cSJim Jagielski case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
2562*b1cdbd2cSJim Jagielski if ( bDisableVerticalText )
2563*b1cdbd2cSJim Jagielski rSet.DisableItem( nWhich );
2564*b1cdbd2cSJim Jagielski else
2565*b1cdbd2cSJim Jagielski {
2566*b1cdbd2cSJim Jagielski if( bVertDontCare )
2567*b1cdbd2cSJim Jagielski rSet.InvalidateItem( nWhich );
2568*b1cdbd2cSJim Jagielski else if ( nWhich == SID_TEXTDIRECTION_LEFT_TO_RIGHT )
2569*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nWhich, bLeftRight ) );
2570*b1cdbd2cSJim Jagielski else
2571*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nWhich, bTopBottom ) );
2572*b1cdbd2cSJim Jagielski }
2573*b1cdbd2cSJim Jagielski break;
2574*b1cdbd2cSJim Jagielski
2575*b1cdbd2cSJim Jagielski case SID_ATTR_PARA_LEFT_TO_RIGHT:
2576*b1cdbd2cSJim Jagielski case SID_ATTR_PARA_RIGHT_TO_LEFT:
2577*b1cdbd2cSJim Jagielski if ( bDisableCTLFont )
2578*b1cdbd2cSJim Jagielski rSet.DisableItem( nWhich );
2579*b1cdbd2cSJim Jagielski else
2580*b1cdbd2cSJim Jagielski {
2581*b1cdbd2cSJim Jagielski if ( bTopBottom )
2582*b1cdbd2cSJim Jagielski rSet.DisableItem( nWhich );
2583*b1cdbd2cSJim Jagielski else if ( bBidiDontCare )
2584*b1cdbd2cSJim Jagielski rSet.InvalidateItem( nWhich );
2585*b1cdbd2cSJim Jagielski else if ( nWhich == SID_ATTR_PARA_LEFT_TO_RIGHT )
2586*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_L2R ) );
2587*b1cdbd2cSJim Jagielski else
2588*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_R2L ) );
2589*b1cdbd2cSJim Jagielski }
2590*b1cdbd2cSJim Jagielski }
2591*b1cdbd2cSJim Jagielski nWhich = aIter.NextWhich();
2592*b1cdbd2cSJim Jagielski }
2593*b1cdbd2cSJim Jagielski }
2594*b1cdbd2cSJim Jagielski
ExecFormatPaintbrush(SfxRequest & rReq)2595*b1cdbd2cSJim Jagielski void ScFormatShell::ExecFormatPaintbrush( SfxRequest& rReq )
2596*b1cdbd2cSJim Jagielski {
2597*b1cdbd2cSJim Jagielski ScViewFunc* pView = pViewData->GetView();
2598*b1cdbd2cSJim Jagielski if ( pView->HasPaintBrush() )
2599*b1cdbd2cSJim Jagielski {
2600*b1cdbd2cSJim Jagielski // cancel paintbrush mode
2601*b1cdbd2cSJim Jagielski pView->ResetBrushDocument();
2602*b1cdbd2cSJim Jagielski }
2603*b1cdbd2cSJim Jagielski else
2604*b1cdbd2cSJim Jagielski {
2605*b1cdbd2cSJim Jagielski sal_Bool bLock = sal_False;
2606*b1cdbd2cSJim Jagielski const SfxItemSet *pArgs = rReq.GetArgs();
2607*b1cdbd2cSJim Jagielski if( pArgs && pArgs->Count() >= 1 )
2608*b1cdbd2cSJim Jagielski bLock = static_cast<const SfxBoolItem&>(pArgs->Get(SID_FORMATPAINTBRUSH)).GetValue();
2609*b1cdbd2cSJim Jagielski
2610*b1cdbd2cSJim Jagielski // in case of multi selection, deselect all and use the cursor position
2611*b1cdbd2cSJim Jagielski ScRange aDummy;
2612*b1cdbd2cSJim Jagielski if ( pViewData->GetSimpleArea(aDummy) != SC_MARK_SIMPLE )
2613*b1cdbd2cSJim Jagielski pView->Unmark();
2614*b1cdbd2cSJim Jagielski
2615*b1cdbd2cSJim Jagielski ScDocument* pBrushDoc = new ScDocument( SCDOCMODE_CLIP );
2616*b1cdbd2cSJim Jagielski pView->CopyToClip( pBrushDoc, sal_False, sal_True );
2617*b1cdbd2cSJim Jagielski pView->SetBrushDocument( pBrushDoc, bLock );
2618*b1cdbd2cSJim Jagielski }
2619*b1cdbd2cSJim Jagielski }
2620*b1cdbd2cSJim Jagielski
StateFormatPaintbrush(SfxItemSet & rSet)2621*b1cdbd2cSJim Jagielski void ScFormatShell::StateFormatPaintbrush( SfxItemSet& rSet )
2622*b1cdbd2cSJim Jagielski {
2623*b1cdbd2cSJim Jagielski if ( pViewData->HasEditView( pViewData->GetActivePart() ) )
2624*b1cdbd2cSJim Jagielski rSet.DisableItem( SID_FORMATPAINTBRUSH );
2625*b1cdbd2cSJim Jagielski else
2626*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( SID_FORMATPAINTBRUSH, pViewData->GetView()->HasPaintBrush() ) );
2627*b1cdbd2cSJim Jagielski }
2628*b1cdbd2cSJim Jagielski
ExecViewOptions(SfxRequest & rReq)2629*b1cdbd2cSJim Jagielski void ScFormatShell::ExecViewOptions( SfxRequest& rReq )
2630*b1cdbd2cSJim Jagielski {
2631*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2632*b1cdbd2cSJim Jagielski SfxBindings& rBindings = pViewData->GetBindings();
2633*b1cdbd2cSJim Jagielski const SfxItemSet* pNewAttrs = rReq.GetArgs();
2634*b1cdbd2cSJim Jagielski
2635*b1cdbd2cSJim Jagielski if ( pNewAttrs )
2636*b1cdbd2cSJim Jagielski {
2637*b1cdbd2cSJim Jagielski sal_uInt16 nSlot = rReq.GetSlot();
2638*b1cdbd2cSJim Jagielski
2639*b1cdbd2cSJim Jagielski if( nSlot == SID_SCGRIDSHOW)
2640*b1cdbd2cSJim Jagielski {
2641*b1cdbd2cSJim Jagielski
2642*b1cdbd2cSJim Jagielski ScViewData* pViewData = pTabViewShell->GetViewData();
2643*b1cdbd2cSJim Jagielski const ScViewOptions& rOldOpt = pViewData->GetOptions();
2644*b1cdbd2cSJim Jagielski ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
2645*b1cdbd2cSJim Jagielski bool bState = ((const SfxBoolItem &)pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich( nSlot ) )).GetValue();
2646*b1cdbd2cSJim Jagielski
2647*b1cdbd2cSJim Jagielski if ( (bool)rOldOpt.GetOption( VOPT_GRID ) != bState)
2648*b1cdbd2cSJim Jagielski {
2649*b1cdbd2cSJim Jagielski ScViewOptions rNewOpt(rOldOpt);
2650*b1cdbd2cSJim Jagielski rNewOpt.SetOption( VOPT_GRID, bState);
2651*b1cdbd2cSJim Jagielski pViewData->SetOptions( rNewOpt );
2652*b1cdbd2cSJim Jagielski pViewData->GetDocument()->SetViewOptions( rNewOpt );
2653*b1cdbd2cSJim Jagielski pDocSh->SetDocumentModified();
2654*b1cdbd2cSJim Jagielski //add , write the change to sc view config
2655*b1cdbd2cSJim Jagielski ScModule* pScMod = SC_MOD();
2656*b1cdbd2cSJim Jagielski pScMod->SetViewOptions( rNewOpt );
2657*b1cdbd2cSJim Jagielski //add end
2658*b1cdbd2cSJim Jagielski rBindings.Invalidate( nSlot );
2659*b1cdbd2cSJim Jagielski }
2660*b1cdbd2cSJim Jagielski }
2661*b1cdbd2cSJim Jagielski }
2662*b1cdbd2cSJim Jagielski
2663*b1cdbd2cSJim Jagielski }
2664*b1cdbd2cSJim Jagielski
GetViewOptions(SfxItemSet & rSet)2665*b1cdbd2cSJim Jagielski void ScFormatShell::GetViewOptions( SfxItemSet& rSet )
2666*b1cdbd2cSJim Jagielski {
2667*b1cdbd2cSJim Jagielski ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2668*b1cdbd2cSJim Jagielski if( pTabViewShell )
2669*b1cdbd2cSJim Jagielski {
2670*b1cdbd2cSJim Jagielski ScViewOptions aViewOpt = pTabViewShell->GetViewData()->GetOptions();
2671*b1cdbd2cSJim Jagielski rSet.ClearItem(SID_SCGRIDSHOW);
2672*b1cdbd2cSJim Jagielski SfxBoolItem aItem( SID_SCGRIDSHOW, aViewOpt.GetOption( VOPT_GRID ) );
2673*b1cdbd2cSJim Jagielski rSet.Put(aItem);
2674*b1cdbd2cSJim Jagielski }
2675*b1cdbd2cSJim Jagielski }
2676*b1cdbd2cSJim Jagielski
2677*b1cdbd2cSJim Jagielski // eof
2678