xref: /aoo4110/main/sc/source/ui/view/formatsh.cxx (revision b1cdbd2c)
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