Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
30 : : #include <com/sun/star/beans/XPropertySet.hpp>
31 : : #include <com/sun/star/container/XNameAccess.hpp>
32 : :
33 : : #include "scitems.hxx"
34 : : #include <editeng/eeitem.hxx>
35 : :
36 : : #include <sfx2/app.hxx>
37 : : #include <sfx2/viewfrm.hxx>
38 : : #include <sfx2/bindings.hxx>
39 : : #include <sfx2/objface.hxx>
40 : : #include <sfx2/request.hxx>
41 : : #include <svl/whiter.hxx>
42 : : #include <vcl/msgbox.hxx>
43 : :
44 : : #include <svl/stritem.hxx>
45 : : #include <svl/zformat.hxx>
46 : : #include <svl/languageoptions.hxx>
47 : : #include <editeng/boxitem.hxx>
48 : : #include <editeng/langitem.hxx>
49 : : #include <svx/numinf.hxx>
50 : : #include <sfx2/dispatch.hxx>
51 : : #include <sfx2/templdlg.hxx>
52 : : #include <sfx2/tplpitem.hxx>
53 : : #include <editeng/svxenum.hxx>
54 : : #include <svx/algitem.hxx>
55 : : #include <editeng/wghtitem.hxx>
56 : : #include <editeng/postitem.hxx>
57 : : #include <editeng/udlnitem.hxx>
58 : : #include <editeng/bolnitem.hxx>
59 : : #include <editeng/colritem.hxx>
60 : : #include <editeng/brshitem.hxx>
61 : : #include <editeng/frmdiritem.hxx>
62 : : #include <editeng/scripttypeitem.hxx>
63 : : #include <svtools/colorcfg.hxx>
64 : : #include <editeng/shaditem.hxx>
65 : : #include <editeng/justifyitem.hxx>
66 : :
67 : : #include "formatsh.hxx"
68 : : #include "sc.hrc"
69 : : #include "globstr.hrc"
70 : : #include "docsh.hxx"
71 : : #include "patattr.hxx"
72 : : #include "scmod.hxx"
73 : : #include "attrdlg.hrc"
74 : : #include "stlpool.hxx"
75 : : #include "stlsheet.hxx"
76 : : #include "printfun.hxx"
77 : : #include "docpool.hxx"
78 : : #include "scresid.hxx"
79 : : #include "tabvwsh.hxx"
80 : : #include "undostyl.hxx"
81 : : #include "markdata.hxx"
82 : : #include "markarr.hxx"
83 : :
84 : :
85 : : #define ScFormatShell
86 : : #define TableFont
87 : : #define FormatForSelection
88 : : #include "scslots.hxx"
89 : :
90 : : #include "scabstdlg.hxx"
91 : :
92 : :
93 : : using namespace ::com::sun::star;
94 : :
95 : : namespace {
96 : :
97 : 0 : SvxCellHorJustify lclConvertSlotToHAlign( sal_uInt16 nSlot )
98 : : {
99 : 0 : SvxCellHorJustify eHJustify = SVX_HOR_JUSTIFY_STANDARD;
100 [ # # # # : 0 : switch( nSlot )
# # ]
101 : : {
102 : 0 : case SID_ALIGN_ANY_HDEFAULT: eHJustify = SVX_HOR_JUSTIFY_STANDARD; break;
103 : 0 : case SID_ALIGN_ANY_LEFT: eHJustify = SVX_HOR_JUSTIFY_LEFT; break;
104 : 0 : case SID_ALIGN_ANY_HCENTER: eHJustify = SVX_HOR_JUSTIFY_CENTER; break;
105 : 0 : case SID_ALIGN_ANY_RIGHT: eHJustify = SVX_HOR_JUSTIFY_RIGHT; break;
106 : 0 : case SID_ALIGN_ANY_JUSTIFIED: eHJustify = SVX_HOR_JUSTIFY_BLOCK; break;
107 : : default: OSL_FAIL( "lclConvertSlotToHAlign - invalid slot" );
108 : : }
109 : 0 : return eHJustify;
110 : : }
111 : :
112 : 0 : SvxCellVerJustify lclConvertSlotToVAlign( sal_uInt16 nSlot )
113 : : {
114 : 0 : SvxCellVerJustify eVJustify = SVX_VER_JUSTIFY_STANDARD;
115 [ # # # # : 0 : switch( nSlot )
# ]
116 : : {
117 : 0 : case SID_ALIGN_ANY_VDEFAULT: eVJustify = SVX_VER_JUSTIFY_STANDARD; break;
118 : 0 : case SID_ALIGN_ANY_TOP: eVJustify = SVX_VER_JUSTIFY_TOP; break;
119 : 0 : case SID_ALIGN_ANY_VCENTER: eVJustify = SVX_VER_JUSTIFY_CENTER; break;
120 : 0 : case SID_ALIGN_ANY_BOTTOM: eVJustify = SVX_VER_JUSTIFY_BOTTOM; break;
121 : : default: OSL_FAIL( "lclConvertSlotToVAlign - invalid slot" );
122 : : }
123 : 0 : return eVJustify;
124 : : }
125 : :
126 : : } // namespace
127 : :
128 [ - + ][ - + ]: 2784 : TYPEINIT1( ScFormatShell, SfxShell );
129 : :
130 [ + + ][ + - ]: 204 : SFX_IMPL_INTERFACE(ScFormatShell, SfxShell, ScResId(SCSTR_FORMATSHELL) )
[ + - ]
131 : : {
132 [ + - ]: 51 : SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_OBJECT | SFX_VISIBILITY_STANDARD |
133 : : SFX_VISIBILITY_SERVER,
134 [ + - ]: 51 : ScResId(RID_OBJECTBAR_FORMAT));
135 : :
136 : 51 : }
137 : :
138 : :
139 : 229 : ScFormatShell::ScFormatShell(ScViewData* pData) :
140 : 229 : SfxShell(pData->GetViewShell()),
141 : 229 : pViewData(pData)
142 : : {
143 : 229 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
144 : :
145 : 229 : SetPool( &pTabViewShell->GetPool() );
146 [ + - ][ + - ]: 229 : ::svl::IUndoManager* pMgr = pViewData->GetSfxDocShell()->GetUndoManager();
147 [ + - ]: 229 : SetUndoManager( pMgr );
148 [ + - ][ - + ]: 229 : if ( !pViewData->GetDocument()->IsUndoEnabled() )
149 : : {
150 [ # # ]: 0 : pMgr->SetMaxUndoActionCount( 0 );
151 : : }
152 [ + - ]: 229 : SetHelpId(HID_SCSHELL_FORMATSH);
153 [ + - ][ + - ]: 229 : SetName(rtl::OUString("Format"));
[ + - ]
154 : 229 : }
155 : :
156 : 225 : ScFormatShell::~ScFormatShell()
157 : : {
158 [ - + ]: 225 : }
159 : :
160 : : //------------------------------------------------------------------
161 : :
162 : 120 : void ScFormatShell::GetStyleState( SfxItemSet& rSet )
163 : : {
164 [ + - ]: 120 : ScDocument* pDoc = GetViewData()->GetDocument();
165 : 120 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
166 [ + - ]: 120 : SfxStyleSheetBasePool* pStylePool = pDoc->GetStyleSheetPool();
167 : :
168 : 120 : bool bProtected = false;
169 [ + - ]: 120 : SCTAB nTabCount = pDoc->GetTableCount();
170 [ + + ]: 276 : for (SCTAB i=0; i<nTabCount; i++)
171 [ + - ][ - + ]: 156 : if (pDoc->IsTabProtected(i)) // ueberhaupt eine Tabelle geschuetzt?
172 : 0 : bProtected = true;
173 : :
174 [ + - ]: 120 : SfxWhichIter aIter(rSet);
175 [ + - ]: 120 : sal_uInt16 nWhich = aIter.FirstWhich();
176 : 120 : sal_uInt16 nSlotId = 0;
177 : :
178 [ + + ]: 360 : while ( nWhich )
179 : : {
180 : 240 : nSlotId = SfxItemPool::IsWhich( nWhich )
181 : 0 : ? GetPool().GetSlotId( nWhich )
182 [ - + # # ]: 240 : : nWhich;
183 : :
184 [ - + + - : 240 : switch ( nSlotId )
- - - ]
185 : : {
186 : : case SID_STYLE_APPLY:
187 [ # # ]: 0 : if ( !pStylePool )
188 [ # # ]: 0 : rSet.DisableItem( nSlotId );
189 : 0 : break;
190 : :
191 : : case SID_STYLE_FAMILY2: // Zellvorlagen
192 : : {
193 : : SfxStyleSheet* pStyleSheet = (SfxStyleSheet*)
194 [ + - ]: 120 : pTabViewShell->GetStyleSheetFromMarked();
195 : :
196 [ + - ]: 120 : if ( pStyleSheet )
197 [ + - ][ + - ]: 120 : rSet.Put( SfxTemplateItem( nSlotId, pStyleSheet->GetName() ) );
[ + - ][ + - ]
198 : : else
199 [ # # ][ # # ]: 0 : rSet.Put( SfxTemplateItem( nSlotId, String() ) );
[ # # ][ # # ]
[ # # ]
200 : : }
201 : 120 : break;
202 : :
203 : : case SID_STYLE_FAMILY4: // Seitenvorlagen
204 : : {
205 : 120 : SCTAB nCurTab = GetViewData()->GetTabNo();
206 [ + - ][ + - ]: 120 : String aPageStyle = pDoc->GetPageStyle( nCurTab );
207 : : SfxStyleSheet* pStyleSheet = (SfxStyleSheet*)pStylePool->
208 [ + - ]: 120 : Find( aPageStyle, SFX_STYLE_FAMILY_PAGE );
209 : :
210 [ + - ]: 120 : if ( pStyleSheet )
211 [ + - ][ + - ]: 120 : rSet.Put( SfxTemplateItem( nSlotId, aPageStyle ) );
[ + - ]
212 : : else
213 [ # # ][ # # ]: 120 : rSet.Put( SfxTemplateItem( nSlotId, String() ) );
[ # # ][ # # ]
[ # # ][ + - ]
214 : : }
215 : 120 : break;
216 : :
217 : : case SID_STYLE_WATERCAN:
218 : : {
219 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem( nSlotId, SC_MOD()->GetIsWaterCan() ) );
[ # # ][ # # ]
220 : : }
221 : 0 : break;
222 : :
223 : : case SID_STYLE_UPDATE_BY_EXAMPLE:
224 : : {
225 : : ISfxTemplateCommon* pDesigner = SFX_APP()->
226 [ # # ][ # # ]: 0 : GetCurrentTemplateCommon(pTabViewShell->GetViewFrame()->GetBindings());
227 [ # # ][ # # ]: 0 : bool bPage = pDesigner && SFX_STYLE_FAMILY_PAGE == pDesigner->GetActualFamily();
[ # # ]
228 : :
229 [ # # ][ # # ]: 0 : if ( bProtected || bPage )
230 [ # # ]: 0 : rSet.DisableItem( nSlotId );
231 : : }
232 : 0 : break;
233 : :
234 : : case SID_STYLE_EDIT:
235 : : case SID_STYLE_DELETE:
236 : : {
237 : : ISfxTemplateCommon* pDesigner = SFX_APP()->
238 [ # # ][ # # ]: 0 : GetCurrentTemplateCommon(pTabViewShell->GetViewFrame()->GetBindings());
239 [ # # ][ # # ]: 0 : bool bPage = pDesigner && SFX_STYLE_FAMILY_PAGE == pDesigner->GetActualFamily();
[ # # ]
240 : :
241 [ # # ][ # # ]: 0 : if ( bProtected && !bPage )
242 [ # # ]: 0 : rSet.DisableItem( nSlotId );
243 : : }
244 : 0 : break;
245 : :
246 : : default:
247 : 0 : break;
248 : : }
249 : :
250 [ + - ]: 240 : nWhich = aIter.NextWhich();
251 [ + - ]: 120 : }
252 : 120 : }
253 : :
254 : : //------------------------------------------------------------------
255 : :
256 : 0 : void ScFormatShell::ExecuteStyle( SfxRequest& rReq )
257 : : {
258 : : // Wenn ToolBar vertikal :
259 [ # # ]: 0 : if ( !rReq.GetArgs() )
260 : : {
261 [ # # ][ # # ]: 0 : pViewData->GetDispatcher().Execute( SID_STYLE_DESIGNER, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
262 : 0 : return;
263 : : }
264 : :
265 : : //--------------------------------------------------------------------
266 [ # # ]: 0 : SfxBindings& rBindings = pViewData->GetBindings();
267 : 0 : const SfxItemSet* pArgs = rReq.GetArgs();
268 : 0 : const sal_uInt16 nSlotId = rReq.GetSlot();
269 : 0 : const SCTAB nCurTab = GetViewData()->GetTabNo();
270 : 0 : ScDocShell* pDocSh = GetViewData()->GetDocShell();
271 : 0 : ScTabViewShell* pTabViewShell= GetViewData()->GetViewShell();
272 : 0 : ScDocument* pDoc = pDocSh->GetDocument();
273 [ # # ]: 0 : ScMarkData& rMark = GetViewData()->GetMarkData();
274 [ # # ]: 0 : ScModule* pScMod = SC_MOD();
275 [ # # ]: 0 : String aRefName;
276 : 0 : bool bUndo = pDoc->IsUndoEnabled();
277 : :
278 [ # # ][ # # ]: 0 : if ( (nSlotId == SID_STYLE_NEW)
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
279 : : || (nSlotId == SID_STYLE_EDIT)
280 : : || (nSlotId == SID_STYLE_DELETE)
281 : : || (nSlotId == SID_STYLE_APPLY)
282 : : || (nSlotId == SID_STYLE_WATERCAN)
283 : : || (nSlotId == SID_STYLE_FAMILY)
284 : : || (nSlotId == SID_STYLE_NEW_BY_EXAMPLE)
285 : : || (nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE) )
286 : : {
287 [ # # ]: 0 : SfxStyleSheetBasePool* pStylePool = pDoc->GetStyleSheetPool();
288 : 0 : SfxStyleSheetBase* pStyleSheet = NULL;
289 : :
290 : 0 : bool bStyleToMarked = false;
291 : 0 : bool bListAction = false;
292 : 0 : bool bAddUndo = false; // add ScUndoModifyStyle (style modified)
293 [ # # ]: 0 : ScStyleSaveData aOldData; // for undo/redo
294 [ # # ]: 0 : ScStyleSaveData aNewData;
295 : :
296 : 0 : SfxStyleFamily eFamily = SFX_STYLE_FAMILY_PARA;
297 : : const SfxPoolItem* pFamItem;
298 [ # # ][ # # ]: 0 : if ( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILY, sal_True, &pFamItem ) )
[ # # ][ # # ]
299 : 0 : eFamily = (SfxStyleFamily)((const SfxUInt16Item*)pFamItem)->GetValue();
300 : : else
301 [ # # ][ # # ]: 0 : if ( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILYNAME, sal_True, &pFamItem ) )
[ # # ][ # # ]
302 : : {
303 [ # # ]: 0 : String sFamily = ((const SfxStringItem*)pFamItem)->GetValue();
304 [ # # ][ # # ]: 0 : if (sFamily.CompareToAscii("CellStyles") == COMPARE_EQUAL)
305 : 0 : eFamily = SFX_STYLE_FAMILY_PARA;
306 : : else
307 [ # # ][ # # ]: 0 : if (sFamily.CompareToAscii("PageStyles") == COMPARE_EQUAL)
308 [ # # ]: 0 : eFamily = SFX_STYLE_FAMILY_PAGE;
309 : : }
310 : :
311 [ # # ]: 0 : String aStyleName;
312 : 0 : sal_uInt16 nRetMask = 0xffff;
313 : :
314 [ # # ]: 0 : pStylePool->SetSearchMask( eFamily, SFXSTYLEBIT_ALL );
315 : :
316 [ # # # # : 0 : switch ( nSlotId )
# ]
317 : : {
318 : : case SID_STYLE_NEW:
319 : : {
320 : : const SfxPoolItem* pNameItem;
321 [ # # ][ # # ]: 0 : if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( nSlotId, sal_True, &pNameItem ))
[ # # ][ # # ]
322 [ # # ]: 0 : aStyleName = ((const SfxStringItem*)pNameItem)->GetValue();
323 : :
324 : 0 : const SfxPoolItem* pRefItem=NULL;
325 [ # # ][ # # ]: 0 : if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_REFERENCE, sal_True, &pRefItem ))
[ # # ][ # # ]
326 : : {
327 [ # # ]: 0 : if(pRefItem!=NULL)
328 [ # # ]: 0 : aRefName = ((const SfxStringItem*)pRefItem)->GetValue();
329 : : }
330 : :
331 : : pStyleSheet = &(pStylePool->Make( aStyleName, eFamily,
332 [ # # ]: 0 : SFXSTYLEBIT_USERDEF ) );
333 : :
334 [ # # ][ # # ]: 0 : if ( pStyleSheet && pStyleSheet->HasParentSupport() )
[ # # ][ # # ]
335 [ # # ]: 0 : pStyleSheet->SetParent(aRefName);
336 : : }
337 : 0 : break;
338 : :
339 : : case SID_STYLE_APPLY:
340 : : {
341 [ # # ][ # # ]: 0 : SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_APPLY_STYLE, false );
342 [ # # ][ # # ]: 0 : SFX_REQUEST_ARG( rReq, pFamilyItem, SfxStringItem, SID_STYLE_FAMILYNAME, false );
343 [ # # ][ # # ]: 0 : if ( pFamilyItem && pNameItem )
344 : : {
345 [ # # ][ # # ]: 0 : com::sun::star::uno::Reference< com::sun::star::style::XStyleFamiliesSupplier > xModel(pDocSh->GetModel(), com::sun::star::uno::UNO_QUERY);
346 : : try
347 : : {
348 : 0 : com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xStyles;
349 [ # # ][ # # ]: 0 : com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xCont = xModel->getStyleFamilies();
350 [ # # ][ # # ]: 0 : xCont->getByName(pFamilyItem->GetValue()) >>= xStyles;
[ # # ][ # # ]
351 : 0 : com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet > xInfo;
352 [ # # ][ # # ]: 0 : xStyles->getByName( pNameItem->GetValue() ) >>= xInfo;
[ # # ][ # # ]
353 : 0 : ::rtl::OUString aUIName;
354 [ # # ][ # # ]: 0 : xInfo->getPropertyValue( ::rtl::OUString("DisplayName") ) >>= aUIName;
355 [ # # ]: 0 : if ( !aUIName.isEmpty() )
356 [ # # ][ # # ]: 0 : rReq.AppendItem( SfxStringItem( SID_STYLE_APPLY, aUIName ) );
[ # # ][ # # ]
[ # # ][ # # ]
357 : : }
358 [ # # ]: 0 : catch( com::sun::star::uno::Exception& )
359 : : {
360 : 0 : }
361 : : }
362 : : }
363 : : case SID_STYLE_EDIT:
364 : : case SID_STYLE_DELETE:
365 : : case SID_STYLE_NEW_BY_EXAMPLE:
366 : : {
367 : : const SfxPoolItem* pNameItem;
368 [ # # ][ # # ]: 0 : if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( nSlotId, sal_True, &pNameItem ))
[ # # ][ # # ]
369 [ # # ]: 0 : aStyleName = ((const SfxStringItem*)pNameItem)->GetValue();
370 [ # # ]: 0 : pStyleSheet = pStylePool->Find( aStyleName, eFamily );
371 : :
372 [ # # ]: 0 : aOldData.InitFromStyle( pStyleSheet );
373 : : }
374 : 0 : break;
375 : :
376 : : case SID_STYLE_WATERCAN:
377 : : {
378 : 0 : bool bWaterCan = pScMod->GetIsWaterCan();
379 : :
380 [ # # ]: 0 : if( !bWaterCan )
381 : : {
382 : : const SfxPoolItem* pItem;
383 : :
384 [ # # ]: 0 : if ( SFX_ITEM_SET ==
385 [ # # ]: 0 : pArgs->GetItemState( nSlotId, sal_True, &pItem ) )
386 : : {
387 [ # # ][ # # ]: 0 : const SfxStringItem* pStrItem = PTR_CAST(SfxStringItem,pItem);
[ # # ][ # # ]
388 [ # # ]: 0 : if ( pStrItem )
389 : : {
390 [ # # ]: 0 : aStyleName = pStrItem->GetValue();
391 [ # # ]: 0 : pStyleSheet = pStylePool->Find( aStyleName, eFamily );
392 : :
393 [ # # ]: 0 : if ( pStyleSheet )
394 : : {
395 : : ((ScStyleSheetPool*)pStylePool)->
396 : 0 : SetActualStyleSheet( pStyleSheet );
397 [ # # ]: 0 : rReq.Done();
398 : : }
399 : : }
400 : : }
401 : : }
402 : :
403 [ # # ][ # # ]: 0 : if ( !bWaterCan && pStyleSheet )
404 : : {
405 : 0 : pScMod->SetWaterCan( true );
406 [ # # ]: 0 : pTabViewShell->SetActivePointer( Pointer(POINTER_FILL) );
407 [ # # ]: 0 : rReq.Done();
408 : : }
409 : : else
410 : : {
411 : 0 : pScMod->SetWaterCan( false );
412 [ # # ]: 0 : pTabViewShell->SetActivePointer( Pointer(POINTER_ARROW) );
413 [ # # ]: 0 : rReq.Done();
414 : : }
415 : : }
416 : 0 : break;
417 : :
418 : : default:
419 : 0 : break;
420 : : }
421 : :
422 : : // Neuen Style fuer WaterCan-Mode setzen
423 [ # # ][ # # ]: 0 : if ( nSlotId == SID_STYLE_APPLY && pScMod->GetIsWaterCan() && pStyleSheet )
[ # # ][ # # ]
424 : 0 : ((ScStyleSheetPool*)pStylePool)->SetActualStyleSheet( pStyleSheet );
425 : :
426 [ # # # ]: 0 : switch ( eFamily )
427 : : {
428 : : case SFX_STYLE_FAMILY_PARA:
429 : : {
430 [ # # # # ]: 0 : switch ( nSlotId )
431 : : {
432 : : case SID_STYLE_DELETE:
433 : : {
434 [ # # ]: 0 : if ( pStyleSheet )
435 : : {
436 [ # # ]: 0 : pTabViewShell->RemoveStyleSheetInUse( pStyleSheet );
437 [ # # ]: 0 : pStylePool->Remove( pStyleSheet );
438 [ # # ]: 0 : pTabViewShell->InvalidateAttribs();
439 : 0 : nRetMask = true;
440 : 0 : bAddUndo = true;
441 [ # # ]: 0 : rReq.Done();
442 : : }
443 : : else
444 : 0 : nRetMask = false;
445 : : }
446 : 0 : break;
447 : :
448 : : case SID_STYLE_APPLY:
449 : : {
450 [ # # ][ # # ]: 0 : if ( pStyleSheet && !pScMod->GetIsWaterCan() )
[ # # ]
451 : : {
452 : : // Anwenden der Vorlage auf das Dokument
453 [ # # ]: 0 : pTabViewShell->SetStyleSheetToMarked( (SfxStyleSheet*)pStyleSheet );
454 [ # # ]: 0 : pTabViewShell->InvalidateAttribs();
455 [ # # ]: 0 : rReq.Done();
456 : : }
457 : : }
458 : 0 : break;
459 : :
460 : : case SID_STYLE_NEW_BY_EXAMPLE:
461 : : case SID_STYLE_UPDATE_BY_EXAMPLE:
462 : : {
463 : : // Vorlage erzeugen/ersetzen durch Attribute
464 : : // an der Cursor-Position:
465 : :
466 : 0 : const ScPatternAttr* pAttrItem = NULL;
467 : :
468 : : // Die Abfrage, ob markiert ist, war hier immer falsch,
469 : : // darum jetzt gar nicht mehr, und einfach vom Cursor.
470 : : // Wenn Attribute aus der Selektion genommen werden sollen,
471 : : // muss noch darauf geachtet werden, Items aus Vorlagen nicht
472 : : // zu uebernehmen (GetSelectionPattern sammelt auch Items aus
473 : : // Vorlagen zusammen) (#44748#)
474 : : // pAttrItem = GetSelectionPattern();
475 : :
476 : : // ScViewData* pViewData = GetViewData();
477 : 0 : SCCOL nCol = pViewData->GetCurX();
478 : 0 : SCROW nRow = pViewData->GetCurY();
479 [ # # ]: 0 : pAttrItem = pDoc->GetPattern( nCol, nRow, nCurTab );
480 : :
481 [ # # ]: 0 : SfxItemSet aAttrSet = pAttrItem->GetItemSet();
482 [ # # ]: 0 : aAttrSet.ClearItem( ATTR_MERGE );
483 [ # # ]: 0 : aAttrSet.ClearItem( ATTR_MERGE_FLAG );
484 : : // bedingte Formatierung und Gueltigkeit nicht uebernehmen,
485 : : // weil sie in der Vorlage nicht editiert werden koennen
486 [ # # ]: 0 : aAttrSet.ClearItem( ATTR_VALIDDATA );
487 [ # # ]: 0 : aAttrSet.ClearItem( ATTR_CONDITIONAL );
488 : :
489 [ # # ]: 0 : if ( SID_STYLE_NEW_BY_EXAMPLE == nSlotId )
490 : : {
491 [ # # ]: 0 : if ( bUndo )
492 : : {
493 [ # # ][ # # ]: 0 : String aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE );
494 [ # # ][ # # ]: 0 : pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
495 [ # # ]: 0 : bListAction = true;
496 : : }
497 : :
498 : 0 : bool bConvertBack = false;
499 : : SfxStyleSheet* pSheetInUse = (SfxStyleSheet*)
500 [ # # ]: 0 : pTabViewShell->GetStyleSheetFromMarked();
501 : :
502 : : // wenn neuer Style vorhanden und in der Selektion
503 : : // verwendet wird, so darf der Parent nicht uebernommen
504 : : // werden:
505 : :
506 [ # # ][ # # ]: 0 : if ( pStyleSheet && pSheetInUse && pStyleSheet == pSheetInUse )
[ # # ]
507 : 0 : pSheetInUse = NULL;
508 : :
509 : : // wenn bereits vorhanden, erstmal entfernen...
510 [ # # ]: 0 : if ( pStyleSheet )
511 : : {
512 : : // Style-Pointer zu Namen vor Erase,
513 : : // weil Zellen sonst ungueltige Pointer
514 : : // enthalten.
515 : : //!!! bei Gelenheit mal eine Methode, die
516 : : // das fuer einen bestimmten Style macht
517 [ # # ]: 0 : pDoc->StylesToNames();
518 : 0 : bConvertBack = true;
519 [ # # ]: 0 : pStylePool->Remove(pStyleSheet);
520 : : }
521 : :
522 : : // ...und neu anlegen
523 : : pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
524 [ # # ]: 0 : SFXSTYLEBIT_USERDEF );
525 : :
526 : : // wenn ein Style vorhanden ist, so wird dieser
527 : : // Parent der neuen Vorlage:
528 [ # # ][ # # ]: 0 : if ( pSheetInUse && pStyleSheet->HasParentSupport() )
[ # # ][ # # ]
529 [ # # ][ # # ]: 0 : pStyleSheet->SetParent( pSheetInUse->GetName() );
530 : :
531 [ # # ]: 0 : if ( bConvertBack )
532 : : // Namen zu Style-Pointer
533 [ # # ]: 0 : pDoc->UpdStlShtPtrsFrmNms();
534 : : else
535 [ # # ][ # # ]: 0 : pDoc->GetPool()->CellStyleCreated( aStyleName );
536 : :
537 : : // Attribute uebernehmen und Style anwenden
538 [ # # ][ # # ]: 0 : pStyleSheet->GetItemSet().Put( aAttrSet );
539 [ # # ]: 0 : pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
540 : :
541 : : // call SetStyleSheetToMarked after adding the ScUndoModifyStyle
542 : : // (pStyleSheet pointer is used!)
543 : 0 : bStyleToMarked = true;
544 : : }
545 : : else // ( nSlotId == SID_STYLE_UPDATE_BY_EXAMPLE )
546 : : {
547 [ # # ]: 0 : pStyleSheet = (SfxStyleSheet*)pTabViewShell->GetStyleSheetFromMarked();
548 : :
549 [ # # ]: 0 : if ( pStyleSheet )
550 : : {
551 [ # # ]: 0 : aOldData.InitFromStyle( pStyleSheet );
552 : :
553 [ # # ]: 0 : if ( bUndo )
554 : : {
555 [ # # ][ # # ]: 0 : String aUndo = ScGlobal::GetRscString( STR_UNDO_EDITCELLSTYLE );
556 [ # # ][ # # ]: 0 : pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
557 [ # # ]: 0 : bListAction = true;
558 : : }
559 : :
560 [ # # ][ # # ]: 0 : pStyleSheet->GetItemSet().Put( aAttrSet );
561 [ # # ]: 0 : pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
562 : :
563 : : // call SetStyleSheetToMarked after adding the ScUndoModifyStyle
564 : : // (pStyleSheet pointer is used!)
565 : 0 : bStyleToMarked = true;
566 : : }
567 : : }
568 : :
569 [ # # ]: 0 : aNewData.InitFromStyle( pStyleSheet );
570 : 0 : bAddUndo = true;
571 [ # # ][ # # ]: 0 : rReq.Done();
572 : : }
573 : 0 : break;
574 : :
575 : : default:
576 : 0 : break;
577 : : }
578 : : } // case SFX_STYLE_FAMILY_PARA:
579 : 0 : break;
580 : :
581 : : case SFX_STYLE_FAMILY_PAGE:
582 : : {
583 [ # # # # ]: 0 : switch ( nSlotId )
584 : : {
585 : : case SID_STYLE_DELETE:
586 : : {
587 : 0 : nRetMask = ( NULL != pStyleSheet );
588 [ # # ]: 0 : if ( pStyleSheet )
589 : : {
590 [ # # ][ # # ]: 0 : if ( pDoc->RemovePageStyleInUse( pStyleSheet->GetName() ) )
[ # # ][ # # ]
591 : : {
592 [ # # ][ # # ]: 0 : ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), nCurTab ).UpdatePages();
[ # # ][ # # ]
593 [ # # ]: 0 : rBindings.Invalidate( SID_STATUS_PAGESTYLE );
594 [ # # ]: 0 : rBindings.Invalidate( FID_RESET_PRINTZOOM );
595 : : }
596 [ # # ]: 0 : pStylePool->Remove( pStyleSheet );
597 [ # # ]: 0 : rBindings.Invalidate( SID_STYLE_FAMILY4 );
598 [ # # ]: 0 : pDocSh->SetDocumentModified();
599 : 0 : bAddUndo = true;
600 [ # # ]: 0 : rReq.Done();
601 : : }
602 : : }
603 : 0 : break;
604 : :
605 : : case SID_STYLE_APPLY:
606 : : {
607 : 0 : nRetMask = ( NULL != pStyleSheet );
608 [ # # ][ # # ]: 0 : if ( pStyleSheet && !pScMod->GetIsWaterCan() )
[ # # ]
609 : : {
610 : 0 : ScUndoApplyPageStyle* pUndoAction = 0;
611 [ # # ]: 0 : SCTAB nTabCount = pDoc->GetTableCount();
612 [ # # ][ # # ]: 0 : ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
613 [ # # ][ # # ]: 0 : for (; itr != itrEnd && *itr < nTabCount; ++itr)
[ # # ][ # # ]
[ # # ][ # # ]
614 : : {
615 [ # # ][ # # ]: 0 : String aOldName = pDoc->GetPageStyle( *itr );
[ # # ]
616 [ # # ][ # # ]: 0 : if ( aOldName != aStyleName )
617 : : {
618 [ # # ][ # # ]: 0 : pDoc->SetPageStyle( *itr, aStyleName );
[ # # ]
619 [ # # ][ # # ]: 0 : ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), *itr ).UpdatePages();
[ # # ][ # # ]
[ # # ]
620 [ # # ]: 0 : if( !pUndoAction )
621 [ # # ][ # # ]: 0 : pUndoAction = new ScUndoApplyPageStyle( pDocSh, aStyleName );
622 [ # # ][ # # ]: 0 : pUndoAction->AddSheetAction( *itr, aOldName );
623 : : }
624 [ # # ]: 0 : }
625 [ # # ]: 0 : if( pUndoAction )
626 : : {
627 [ # # ][ # # ]: 0 : pDocSh->GetUndoManager()->AddUndoAction( pUndoAction );
628 [ # # ]: 0 : pDocSh->SetDocumentModified();
629 [ # # ]: 0 : rBindings.Invalidate( SID_STYLE_FAMILY4 );
630 [ # # ]: 0 : rBindings.Invalidate( SID_STATUS_PAGESTYLE );
631 [ # # ]: 0 : rBindings.Invalidate( FID_RESET_PRINTZOOM );
632 : : }
633 [ # # ]: 0 : rReq.Done();
634 : : }
635 : : }
636 : 0 : break;
637 : :
638 : : case SID_STYLE_NEW_BY_EXAMPLE:
639 : : {
640 [ # # ][ # # ]: 0 : const String& rStrCurStyle = pDoc->GetPageStyle( nCurTab );
641 : :
642 [ # # ][ # # ]: 0 : if ( rStrCurStyle != aStyleName )
643 : : {
644 [ # # ]: 0 : SfxStyleSheetBase* pCurStyle = pStylePool->Find( rStrCurStyle, eFamily );
645 [ # # ][ # # ]: 0 : SfxItemSet aAttrSet = pCurStyle->GetItemSet();
646 : : SCTAB nInTab;
647 [ # # ][ # # ]: 0 : bool bUsed = pDoc->IsPageStyleInUse( aStyleName, &nInTab );
648 : :
649 : : // wenn bereits vorhanden, erstmal entfernen...
650 [ # # ]: 0 : if ( pStyleSheet )
651 [ # # ]: 0 : pStylePool->Remove( pStyleSheet );
652 : :
653 : : // ...und neu anlegen
654 : : pStyleSheet = &pStylePool->Make( aStyleName, eFamily,
655 [ # # ]: 0 : SFXSTYLEBIT_USERDEF );
656 : :
657 : : // Attribute uebernehmen
658 [ # # ][ # # ]: 0 : pStyleSheet->GetItemSet().Put( aAttrSet );
659 [ # # ]: 0 : pDocSh->SetDocumentModified();
660 : :
661 : : // wenn in Verwendung -> Update
662 [ # # ]: 0 : if ( bUsed )
663 [ # # ][ # # ]: 0 : ScPrintFunc( pDocSh, pTabViewShell->GetPrinter(true), nInTab ).UpdatePages();
[ # # ][ # # ]
664 : :
665 [ # # ]: 0 : aNewData.InitFromStyle( pStyleSheet );
666 : 0 : bAddUndo = true;
667 [ # # ]: 0 : rReq.Done();
668 [ # # ]: 0 : nRetMask = true;
669 [ # # ]: 0 : }
670 : : }
671 : 0 : break;
672 : :
673 : : default:
674 : 0 : break;
675 : : } // switch ( nSlotId )
676 : : } // case SFX_STYLE_FAMILY_PAGE:
677 : 0 : break;
678 : :
679 : : default:
680 : 0 : break;
681 : : } // switch ( eFamily )
682 : :
683 : : // Neu anlegen oder bearbeiten ueber Dialog:
684 [ # # ][ # # ]: 0 : if ( nSlotId == SID_STYLE_NEW || nSlotId == SID_STYLE_EDIT )
685 : : {
686 [ # # ]: 0 : if ( pStyleSheet )
687 : : {
688 : 0 : SvxNumberInfoItem* pNumberInfoItem = NULL;
689 : :
690 : 0 : SfxStyleFamily eFam = pStyleSheet->GetFamily();
691 : 0 : SfxAbstractTabDialog* pDlg = NULL;
692 : 0 : sal_uInt16 nRsc = 0;
693 : :
694 : : // alte Items aus der Vorlage merken
695 [ # # ][ # # ]: 0 : SfxItemSet aOldSet = pStyleSheet->GetItemSet();
696 [ # # ][ # # ]: 0 : String aOldName = pStyleSheet->GetName();
697 : :
698 [ # # ]: 0 : switch ( eFam )
699 : : {
700 : : case SFX_STYLE_FAMILY_PAGE:
701 : 0 : nRsc = RID_SCDLG_STYLES_PAGE;
702 : 0 : break;
703 : :
704 : : case SFX_STYLE_FAMILY_PARA:
705 : : default:
706 : : {
707 [ # # ]: 0 : SfxItemSet& rSet = pStyleSheet->GetItemSet();
708 : :
709 : : const SfxPoolItem* pItem;
710 [ # # ]: 0 : if ( rSet.GetItemState( ATTR_VALUE_FORMAT,
711 [ # # ]: 0 : false, &pItem ) == SFX_ITEM_SET )
712 : : {
713 : : // NumberFormat Value aus Value und Language
714 : : // erzeugen und eintueten
715 : : sal_uLong nFormat =
716 : 0 : ((SfxUInt32Item*)pItem)->GetValue();
717 : : LanguageType eLang =
718 : : ((SvxLanguageItem*)&rSet.Get(
719 [ # # ]: 0 : ATTR_LANGUAGE_FORMAT ))->GetLanguage();
720 : : sal_uLong nLangFormat = pDoc->GetFormatTable()->
721 [ # # ][ # # ]: 0 : GetFormatForLanguageIfBuiltIn( nFormat, eLang );
722 [ # # ]: 0 : if ( nLangFormat != nFormat )
723 : : {
724 [ # # ]: 0 : SfxUInt32Item aNewItem( ATTR_VALUE_FORMAT, nLangFormat );
725 [ # # ]: 0 : rSet.Put( aNewItem );
726 [ # # ][ # # ]: 0 : aOldSet.Put( aNewItem );
727 : : // auch in aOldSet fuer Vergleich nach dem Dialog,
728 : : // sonst geht evtl. eine Aenderung der Sprache verloren
729 : : }
730 : : }
731 : :
732 [ # # ]: 0 : pTabViewShell->MakeNumberInfoItem( pDoc, GetViewData(), &pNumberInfoItem );
733 [ # # ]: 0 : pDocSh->PutItem( *pNumberInfoItem );
734 : 0 : nRsc = RID_SCDLG_STYLES_PAR;
735 : :
736 : : // auf jeden Fall ein SvxBoxInfoItem mit Table = sal_False im Set:
737 : : // (wenn gar kein Item da ist, loescht der Dialog auch das
738 : : // BORDER_OUTER SvxBoxItem aus dem Vorlagen-Set)
739 : :
740 [ # # ][ # # ]: 0 : if ( rSet.GetItemState( ATTR_BORDER_INNER, false ) != SFX_ITEM_SET )
741 : : {
742 [ # # ]: 0 : SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
743 : 0 : aBoxInfoItem.SetTable(false); // keine inneren Linien
744 : 0 : aBoxInfoItem.SetDist(true);
745 : 0 : aBoxInfoItem.SetMinDist(false);
746 [ # # ][ # # ]: 0 : rSet.Put( aBoxInfoItem );
747 : : }
748 : : }
749 : 0 : break;
750 : : }
751 : :
752 : : // If GetDefDialogParent is a dialog, it must be used
753 : : // (style catalog)
754 : :
755 [ # # ]: 0 : Window* pParent = Application::GetDefDialogParent();
756 [ # # ][ # # ]: 0 : if ( !pParent || !pParent->IsDialog() )
[ # # ][ # # ]
757 : : {
758 : : // GetDefDialogParent currently doesn't return the window
759 : : // that was set with SetDefDialogParent (but dynamically finds the
760 : : // topmost parent of the focus window), so IsDialog above is FALSE
761 : : // even if called from the style catalog.
762 : : // -> Use NULL if a modal dialog is open, to enable the Dialog's
763 : : // default parent handling.
764 [ # # ][ # # ]: 0 : if ( Application::IsInModalMode() )
765 : 0 : pParent = NULL;
766 : : else
767 [ # # ]: 0 : pParent = pTabViewShell->GetDialogParent();
768 : : }
769 : :
770 : 0 : pTabViewShell->SetInFormatDialog(true);
771 : :
772 [ # # ]: 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
773 : : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
774 : :
775 [ # # ]: 0 : pDlg = pFact->CreateScStyleDlg( pParent, *pStyleSheet, nRsc, nRsc );
776 : : OSL_ENSURE(pDlg, "Dialog create fail!");
777 [ # # ]: 0 : short nResult = pDlg->Execute();
778 : 0 : pTabViewShell->SetInFormatDialog(false);
779 : :
780 [ # # ]: 0 : if ( nResult == RET_OK )
781 : : {
782 [ # # ]: 0 : const SfxItemSet* pOutSet = pDlg->GetOutputItemSet();
783 : :
784 [ # # ]: 0 : if ( pOutSet )
785 : : {
786 : 0 : nRetMask = pStyleSheet->GetMask();
787 : :
788 : : // Attribut-Vergleiche (frueher in ModifyStyleSheet)
789 : : // jetzt hier mit den alten Werten (Style ist schon veraendert)
790 : :
791 [ # # ]: 0 : if ( SFX_STYLE_FAMILY_PARA == eFam )
792 : : {
793 [ # # ]: 0 : SfxItemSet& rNewSet = pStyleSheet->GetItemSet();
794 : : bool bNumFormatChanged;
795 [ # # ]: 0 : if ( ScGlobal::CheckWidthInvalidate(
796 [ # # ]: 0 : bNumFormatChanged, aOldSet, rNewSet ) )
797 [ # # ]: 0 : pDoc->InvalidateTextWidth( NULL, NULL, bNumFormatChanged );
798 : :
799 [ # # ]: 0 : SCTAB nTabCount = pDoc->GetTableCount();
800 [ # # ]: 0 : for (SCTAB nTab=0; nTab<nTabCount; nTab++)
801 [ # # ][ # # ]: 0 : if (pDoc->IsStreamValid(nTab))
802 [ # # ]: 0 : pDoc->SetStreamValid(nTab, false);
803 : :
804 : : sal_uLong nOldFormat = ((const SfxUInt32Item&)aOldSet.
805 [ # # ]: 0 : Get( ATTR_VALUE_FORMAT )).GetValue();
806 : : sal_uLong nNewFormat = ((const SfxUInt32Item&)rNewSet.
807 [ # # ]: 0 : Get( ATTR_VALUE_FORMAT )).GetValue();
808 [ # # ]: 0 : if ( nNewFormat != nOldFormat )
809 : : {
810 [ # # ]: 0 : SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
811 [ # # ]: 0 : const SvNumberformat* pOld = pFormatter->GetEntry( nOldFormat );
812 [ # # ]: 0 : const SvNumberformat* pNew = pFormatter->GetEntry( nNewFormat );
813 [ # # ][ # # ]: 0 : if ( pOld && pNew && pOld->GetLanguage() != pNew->GetLanguage() )
[ # # ][ # # ]
814 : : rNewSet.Put( SvxLanguageItem(
815 [ # # ][ # # ]: 0 : pNew->GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
[ # # ]
816 : : }
817 : :
818 [ # # ][ # # ]: 0 : pDoc->GetPool()->CellStyleCreated( pStyleSheet->GetName() );
[ # # ]
819 : : }
820 : : else
821 : : {
822 : : //! auch fuer Seitenvorlagen die Abfragen hier
823 : :
824 [ # # ][ # # ]: 0 : String aNewName = pStyleSheet->GetName();
825 [ # # ][ # # ]: 0 : if ( aNewName != aOldName &&
[ # # ][ # # ]
826 [ # # ][ # # ]: 0 : pDoc->RenamePageStyleInUse( aOldName, aNewName ) )
[ # # ][ # # ]
[ # # ]
[ # # # # ]
827 : : {
828 [ # # ]: 0 : rBindings.Invalidate( SID_STATUS_PAGESTYLE );
829 [ # # ]: 0 : rBindings.Invalidate( FID_RESET_PRINTZOOM );
830 : : }
831 : :
832 [ # # ]: 0 : pDoc->ModifyStyleSheet( *pStyleSheet, *pOutSet );
833 [ # # ][ # # ]: 0 : rBindings.Invalidate( FID_RESET_PRINTZOOM );
834 : : }
835 : :
836 [ # # ]: 0 : pDocSh->SetDocumentModified();
837 : :
838 [ # # ]: 0 : if ( SFX_STYLE_FAMILY_PARA == eFam )
839 : : {
840 : : pTabViewShell->UpdateNumberFormatter(
841 : : (const SvxNumberInfoItem&)
842 [ # # ][ # # ]: 0 : *(pDocSh->GetItem(SID_ATTR_NUMBERFORMAT_INFO)) );
843 : :
844 [ # # ]: 0 : pTabViewShell->UpdateStyleSheetInUse( pStyleSheet );
845 [ # # ]: 0 : pTabViewShell->InvalidateAttribs();
846 : : }
847 : :
848 [ # # ]: 0 : aNewData.InitFromStyle( pStyleSheet );
849 : 0 : bAddUndo = true;
850 : : }
851 : : }
852 : : else
853 : : {
854 [ # # ]: 0 : if ( nSlotId == SID_STYLE_NEW )
855 [ # # ]: 0 : pStylePool->Remove( pStyleSheet );
856 : : else
857 : : {
858 : : // falls zwischendurch etwas mit dem temporaer geaenderten
859 : : // ItemSet gepainted wurde:
860 [ # # ]: 0 : pDocSh->PostPaintGridAll();
861 : : }
862 : : }
863 [ # # ][ # # ]: 0 : delete pDlg;
[ # # ][ # # ]
864 : : }
865 : : }
866 : :
867 [ # # ][ # # ]: 0 : rReq.SetReturnValue( SfxUInt16Item( nSlotId, nRetMask ) );
[ # # ]
868 : :
869 [ # # ][ # # ]: 0 : if ( bAddUndo && bUndo)
870 [ # # ]: 0 : pDocSh->GetUndoManager()->AddUndoAction(
871 [ # # ][ # # ]: 0 : new ScUndoModifyStyle( pDocSh, eFamily, aOldData, aNewData ) );
[ # # ]
872 : :
873 [ # # ]: 0 : if ( bStyleToMarked )
874 : : {
875 : : // call SetStyleSheetToMarked after adding the ScUndoModifyStyle,
876 : : // so redo will find the modified style
877 [ # # ]: 0 : pTabViewShell->SetStyleSheetToMarked( (SfxStyleSheet*)pStyleSheet );
878 [ # # ]: 0 : pTabViewShell->InvalidateAttribs();
879 : : }
880 : :
881 [ # # ]: 0 : if ( bListAction )
882 [ # # ][ # # ]: 0 : pDocSh->GetUndoManager()->LeaveListAction();
[ # # ][ # # ]
[ # # ]
883 : : }
884 : : else
885 : : {
886 : : OSL_FAIL( "Unknown slot (ScViewShell::ExecuteStyle)" );
887 [ # # ]: 0 : }
888 : : }
889 : :
890 : 0 : void ScFormatShell::ExecuteNumFormat( SfxRequest& rReq )
891 : : {
892 [ # # ]: 0 : ScModule* pScMod = SC_MOD();
893 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
894 : 0 : const SfxItemSet* pReqArgs = rReq.GetArgs();
895 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
896 : 0 : SfxBindings& rBindings = pTabViewShell->GetViewFrame()->GetBindings();
897 : :
898 [ # # ]: 0 : pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
899 : :
900 : : // Eingabe beenden
901 [ # # ]: 0 : if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
902 : : {
903 [ # # ]: 0 : switch ( nSlot )
904 : : {
905 : : case SID_NUMBER_TWODEC:
906 : : case SID_NUMBER_SCIENTIFIC:
907 : : case SID_NUMBER_DATE:
908 : : case SID_NUMBER_CURRENCY:
909 : : case SID_NUMBER_PERCENT:
910 : : case SID_NUMBER_STANDARD:
911 : : case SID_NUMBER_FORMAT:
912 : : case SID_NUMBER_INCDEC:
913 : : case SID_NUMBER_DECDEC:
914 : : case FID_DEFINE_NAME:
915 : : case FID_ADD_NAME:
916 : : case FID_USE_NAME:
917 : : case FID_INSERT_NAME:
918 : : case SID_SPELL_DIALOG:
919 : : case SID_HANGUL_HANJA_CONVERSION:
920 : :
921 [ # # ]: 0 : pScMod->InputEnterHandler();
922 [ # # ]: 0 : pTabViewShell->UpdateInputHandler();
923 : 0 : break;
924 : :
925 : : default:
926 : 0 : break;
927 : : }
928 : : }
929 : :
930 [ # # ]: 0 : short nType = GetCurrentNumberFormatType();
931 [ # # ]: 0 : SfxItemSet aSet( GetPool(), nSlot, nSlot );
932 [ # # # # : 0 : switch ( nSlot )
# # # # #
# # # ]
933 : : {
934 : : case SID_NUMBER_TWODEC:
935 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER, 4 ); // Standard+4 = #.##0,00
936 [ # # ]: 0 : rReq.Done();
937 : 0 : break;
938 : : case SID_NUMBER_SCIENTIFIC:
939 [ # # ]: 0 : if ((nType & NUMBERFORMAT_SCIENTIFIC))
940 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
941 : : else
942 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_SCIENTIFIC );
943 [ # # ][ # # ]: 0 : aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_SCIENTIFIC)) );
[ # # ]
944 [ # # ]: 0 : rBindings.Invalidate( nSlot );
945 [ # # ]: 0 : rReq.Done();
946 : 0 : break;
947 : : case SID_NUMBER_DATE:
948 [ # # ]: 0 : if ((nType & NUMBERFORMAT_DATE))
949 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
950 : : else
951 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_DATE );
952 [ # # ][ # # ]: 0 : aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_DATE)) );
[ # # ]
953 [ # # ]: 0 : rBindings.Invalidate( nSlot );
954 [ # # ]: 0 : rReq.Done();
955 : 0 : break;
956 : : case SID_NUMBER_TIME:
957 [ # # ]: 0 : if ((nType & NUMBERFORMAT_TIME))
958 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
959 : : else
960 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_TIME );
961 [ # # ][ # # ]: 0 : aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_TIME)) );
[ # # ]
962 [ # # ]: 0 : rBindings.Invalidate( nSlot );
963 [ # # ]: 0 : rReq.Done();
964 : 0 : break;
965 : : case SID_NUMBER_CURRENCY:
966 [ # # ]: 0 : if ((nType & NUMBERFORMAT_CURRENCY))
967 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
968 : : else
969 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_CURRENCY );
970 [ # # ][ # # ]: 0 : aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_CURRENCY)) );
[ # # ]
971 [ # # ]: 0 : rBindings.Invalidate( nSlot );
972 [ # # ]: 0 : rReq.Done();
973 : 0 : break;
974 : : case SID_NUMBER_PERCENT:
975 [ # # ]: 0 : if ((nType & NUMBERFORMAT_PERCENT))
976 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
977 : : else
978 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_PERCENT );
979 [ # # ][ # # ]: 0 : aSet.Put( SfxBoolItem(nSlot, !(nType & NUMBERFORMAT_PERCENT)) );
[ # # ]
980 [ # # ]: 0 : rBindings.Invalidate( nSlot );
981 [ # # ]: 0 : rReq.Done();
982 : 0 : break;
983 : : case SID_NUMBER_STANDARD:
984 [ # # ]: 0 : pTabViewShell->SetNumberFormat( NUMBERFORMAT_NUMBER );
985 [ # # ]: 0 : rReq.Done();
986 : 0 : break;
987 : : case SID_NUMBER_INCDEC:
988 [ # # ]: 0 : pTabViewShell->ChangeNumFmtDecimals( true );
989 [ # # ]: 0 : rReq.Done();
990 : 0 : break;
991 : : case SID_NUMBER_DECDEC:
992 [ # # ]: 0 : pTabViewShell->ChangeNumFmtDecimals( false );
993 [ # # ]: 0 : rReq.Done();
994 : 0 : break;
995 : :
996 : : case SID_NUMBER_FORMAT:
997 [ # # ]: 0 : if ( pReqArgs )
998 : : {
999 : : const SfxPoolItem* pItem;
1000 [ # # ][ # # ]: 0 : if(pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET)
1001 : : {
1002 [ # # ]: 0 : String aCode = ((const SfxStringItem*)pItem)->GetValue();
1003 [ # # ][ # # ]: 0 : pTabViewShell->SetNumFmtByStr( aCode );
1004 : : }
1005 : : }
1006 : 0 : break;
1007 : :
1008 : : case SID_ATTR_NUMBERFORMAT_VALUE:
1009 [ # # ]: 0 : if ( pReqArgs )
1010 : : {
1011 : : const SfxPoolItem* pItem;
1012 [ # # ][ # # ]: 0 : if ( pReqArgs->GetItemState( ATTR_VALUE_FORMAT, sal_True, &pItem ) == SFX_ITEM_SET )
1013 : : {
1014 : : // We have to accomplish this using ApplyAttributes()
1015 : : // because we also need the language information to be
1016 : : // considered.
1017 : : const SfxItemSet& rOldSet =
1018 [ # # ]: 0 : pTabViewShell->GetSelectionPattern()->GetItemSet();
1019 [ # # ][ # # ]: 0 : SfxItemPool* pDocPool = GetViewData()->GetDocument()->GetPool();
1020 [ # # ]: 0 : SfxItemSet aNewSet( *pDocPool, ATTR_PATTERN_START, ATTR_PATTERN_END );
1021 [ # # ]: 0 : aNewSet.Put( *pItem );
1022 [ # # ][ # # ]: 0 : pTabViewShell->ApplyAttributes( &aNewSet, &rOldSet, sal_True );
1023 : : }
1024 : : }
1025 : 0 : break;
1026 : :
1027 : : default:
1028 : : OSL_FAIL("falscher Slot bei ExecuteEdit");
1029 : 0 : break;
1030 [ # # ]: 0 : }
1031 : 0 : }
1032 : :
1033 : :
1034 : : //------------------------------------------------------------------
1035 : :
1036 : 0 : void ScFormatShell::ExecuteAlignment( SfxRequest& rReq )
1037 : : {
1038 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1039 : 0 : SfxBindings& rBindings = pViewData->GetBindings();
1040 : 0 : const SfxItemSet* pSet = rReq.GetArgs();
1041 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
1042 : :
1043 : 0 : pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
1044 : :
1045 [ # # # ]: 0 : switch( nSlot )
1046 : : {
1047 : : // pseudo slots for Format menu
1048 : : case SID_ALIGN_ANY_HDEFAULT:
1049 : : case SID_ALIGN_ANY_LEFT:
1050 : : case SID_ALIGN_ANY_HCENTER:
1051 : : case SID_ALIGN_ANY_RIGHT:
1052 : : case SID_ALIGN_ANY_JUSTIFIED:
1053 [ # # ]: 0 : pTabViewShell->ApplyAttr( SvxHorJustifyItem( lclConvertSlotToHAlign( nSlot ), ATTR_HOR_JUSTIFY ) );
1054 : 0 : break;
1055 : : case SID_ALIGN_ANY_VDEFAULT:
1056 : : case SID_ALIGN_ANY_TOP:
1057 : : case SID_ALIGN_ANY_VCENTER:
1058 : : case SID_ALIGN_ANY_BOTTOM:
1059 [ # # ]: 0 : pTabViewShell->ApplyAttr( SvxVerJustifyItem( lclConvertSlotToVAlign( nSlot ), ATTR_VER_JUSTIFY ) );
1060 : 0 : break;
1061 : :
1062 : : default:
1063 [ # # ]: 0 : if( pSet )
1064 : : {
1065 : 0 : const SfxPoolItem* pItem = NULL;
1066 [ # # ][ # # ]: 0 : if( pSet->GetItemState(GetPool().GetWhich(nSlot), sal_True, &pItem ) == SFX_ITEM_SET )
[ # # ]
1067 : : {
1068 : :
1069 [ # # # # ]: 0 : switch ( nSlot )
1070 : : {
1071 : : case SID_ATTR_ALIGN_HOR_JUSTIFY:
1072 : : case SID_ATTR_ALIGN_VER_JUSTIFY:
1073 : : case SID_ATTR_ALIGN_INDENT:
1074 : : case SID_ATTR_ALIGN_HYPHENATION:
1075 : : case SID_ATTR_ALIGN_DEGREES:
1076 : : case SID_ATTR_ALIGN_LOCKPOS:
1077 : : case SID_ATTR_ALIGN_MARGIN:
1078 : : case SID_ATTR_ALIGN_STACKED:
1079 [ # # ]: 0 : pTabViewShell->ApplyAttr( *pItem );
1080 : 0 : break;
1081 : :
1082 : : case SID_H_ALIGNCELL:
1083 : : {
1084 : 0 : SvxCellHorJustify eJust = (SvxCellHorJustify)((const SvxHorJustifyItem*)pItem)->GetValue();
1085 : : // #i78476# update alignment of text in cell edit mode
1086 [ # # ]: 0 : pTabViewShell->UpdateInputHandlerCellAdjust( eJust );
1087 [ # # ][ # # ]: 0 : pTabViewShell->ApplyAttr( SvxHorJustifyItem( eJust, ATTR_HOR_JUSTIFY ) );
[ # # ]
1088 : : }
1089 : 0 : break;
1090 : : case SID_V_ALIGNCELL:
1091 [ # # ][ # # ]: 0 : pTabViewShell->ApplyAttr( SvxVerJustifyItem( (SvxCellVerJustify)((const SvxVerJustifyItem*)pItem)->GetValue(), ATTR_VER_JUSTIFY ) );
[ # # ]
1092 : 0 : break;
1093 : : default:
1094 : : OSL_FAIL( "ExecuteAlignment: invalid slot" );
1095 : 0 : return;
1096 : : }
1097 : : }
1098 : : }
1099 : : }
1100 : :
1101 : 0 : rBindings.Invalidate( SID_ALIGNLEFT );
1102 : 0 : rBindings.Invalidate( SID_ALIGNRIGHT );
1103 : 0 : rBindings.Invalidate( SID_ALIGNCENTERHOR );
1104 : 0 : rBindings.Invalidate( SID_ALIGNBLOCK );
1105 : 0 : rBindings.Invalidate( SID_ALIGNTOP );
1106 : 0 : rBindings.Invalidate( SID_ALIGNBOTTOM );
1107 : 0 : rBindings.Invalidate( SID_ALIGNCENTERVER );
1108 : 0 : rBindings.Invalidate( SID_V_ALIGNCELL );
1109 : 0 : rBindings.Invalidate( SID_H_ALIGNCELL );
1110 : : // pseudo slots for Format menu
1111 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_HDEFAULT );
1112 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_LEFT );
1113 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_HCENTER );
1114 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_RIGHT );
1115 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_JUSTIFIED );
1116 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_VDEFAULT );
1117 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_TOP );
1118 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_VCENTER );
1119 : 0 : rBindings.Invalidate( SID_ALIGN_ANY_BOTTOM );
1120 : 0 : rBindings.Update();
1121 : :
1122 [ # # ]: 0 : if( ! rReq.IsAPI() )
1123 : 0 : rReq.Done();
1124 : : }
1125 : :
1126 : 0 : void ScFormatShell::ExecuteTextAttr( SfxRequest& rReq )
1127 : : {
1128 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1129 : 0 : SfxBindings& rBindings = pViewData->GetBindings();
1130 : 0 : const ScPatternAttr* pAttrs = pTabViewShell->GetSelectionPattern();
1131 : 0 : const SfxItemSet* pSet = rReq.GetArgs();
1132 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
1133 : 0 : SfxAllItemSet* pNewSet = 0;
1134 : :
1135 : 0 : pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
1136 : :
1137 [ # # ][ # # ]: 0 : if ( (nSlot == SID_ATTR_CHAR_WEIGHT)
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
1138 : : ||(nSlot == SID_ATTR_CHAR_POSTURE)
1139 : : ||(nSlot == SID_ATTR_CHAR_UNDERLINE)
1140 : : ||(nSlot == SID_ULINE_VAL_NONE)
1141 : : ||(nSlot == SID_ULINE_VAL_SINGLE)
1142 : : ||(nSlot == SID_ULINE_VAL_DOUBLE)
1143 : : ||(nSlot == SID_ULINE_VAL_DOTTED) )
1144 : : {
1145 [ # # ]: 0 : pNewSet = new SfxAllItemSet( GetPool() );
1146 : :
1147 [ # # # # : 0 : switch ( nSlot )
# # ]
1148 : : {
1149 : : case SID_ATTR_CHAR_WEIGHT:
1150 : : {
1151 : : // #i78017 establish the same behaviour as in Writer
1152 : 0 : sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
1153 : :
1154 : 0 : SfxItemPool& rPool = GetPool();
1155 [ # # ]: 0 : SvxScriptSetItem aSetItem( nSlot, rPool );
1156 [ # # ]: 0 : if ( pSet )
1157 [ # # ][ # # ]: 0 : aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_WEIGHT ) );
1158 : : else
1159 : : {
1160 : : // toggle manually
1161 : :
1162 : 0 : FontWeight eWeight = WEIGHT_BOLD;
1163 [ # # ]: 0 : SvxScriptSetItem aOldSetItem( nSlot, rPool );
1164 [ # # ]: 0 : aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), false );
1165 [ # # ]: 0 : const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
1166 [ # # ][ # # ]: 0 : if ( pCore && ((const SvxWeightItem*)pCore)->GetWeight() == WEIGHT_BOLD )
[ # # ]
1167 : 0 : eWeight = WEIGHT_NORMAL;
1168 : :
1169 [ # # ][ # # ]: 0 : aSetItem.PutItemForScriptType( nScript, SvxWeightItem( eWeight, ATTR_FONT_WEIGHT ) );
[ # # ][ # # ]
1170 : : }
1171 [ # # ]: 0 : pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
1172 [ # # ][ # # ]: 0 : pNewSet->Put( aSetItem.GetItemSet(), false );
1173 : : }
1174 : 0 : break;
1175 : :
1176 : : case SID_ATTR_CHAR_POSTURE:
1177 : : {
1178 : : // #i78017 establish the same behaviour as in Writer
1179 : 0 : sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
1180 : :
1181 : 0 : SfxItemPool& rPool = GetPool();
1182 [ # # ]: 0 : SvxScriptSetItem aSetItem( nSlot, rPool );
1183 [ # # ]: 0 : if ( pSet )
1184 [ # # ][ # # ]: 0 : aSetItem.PutItemForScriptType( nScript, pSet->Get( ATTR_FONT_POSTURE ) );
1185 : : else
1186 : : {
1187 : : // toggle manually
1188 : :
1189 : 0 : FontItalic eItalic = ITALIC_NORMAL;
1190 [ # # ]: 0 : SvxScriptSetItem aOldSetItem( nSlot, rPool );
1191 [ # # ]: 0 : aOldSetItem.GetItemSet().Put( pAttrs->GetItemSet(), false );
1192 [ # # ]: 0 : const SfxPoolItem* pCore = aOldSetItem.GetItemOfScript( nScript );
1193 [ # # ][ # # ]: 0 : if ( pCore && ((const SvxPostureItem*)pCore)->GetPosture() == ITALIC_NORMAL )
[ # # ]
1194 : 0 : eItalic = ITALIC_NONE;
1195 : :
1196 [ # # ][ # # ]: 0 : aSetItem.PutItemForScriptType( nScript, SvxPostureItem( eItalic, ATTR_FONT_POSTURE ) );
[ # # ][ # # ]
1197 : : }
1198 [ # # ]: 0 : pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
1199 [ # # ][ # # ]: 0 : pNewSet->Put( aSetItem.GetItemSet(), false );
1200 : : }
1201 : 0 : break;
1202 : :
1203 : : case SID_ATTR_CHAR_UNDERLINE:
1204 : : {
1205 : : FontUnderline eUnderline;
1206 : :
1207 [ # # ]: 0 : if( pSet )
1208 : : {
1209 : 0 : const SfxPoolItem& rUnderline = pSet->Get( ATTR_FONT_UNDERLINE );
1210 : :
1211 [ # # ]: 0 : if( rUnderline.ISA(SvxUnderlineItem) )
1212 : : {
1213 : 0 : pTabViewShell->ApplyAttr( rUnderline );
1214 : 0 : pNewSet->Put( rUnderline,rUnderline.Which() );
1215 : : }
1216 [ # # ]: 0 : else if ( rUnderline.ISA(SvxTextLineItem) )
1217 : : {
1218 : : // #i106580# also allow SvxTextLineItem (base class of SvxUnderlineItem)
1219 : 0 : const SvxTextLineItem& rTextLineItem = static_cast<const SvxTextLineItem&>(rUnderline);
1220 [ # # ]: 0 : SvxUnderlineItem aNewItem( rTextLineItem.GetLineStyle(), rTextLineItem.Which() );
1221 : 0 : aNewItem.SetColor( rTextLineItem.GetColor() );
1222 [ # # ]: 0 : pTabViewShell->ApplyAttr( aNewItem );
1223 [ # # ][ # # ]: 0 : pNewSet->Put( aNewItem, aNewItem.Which() );
1224 : : }
1225 : : }
1226 : : else
1227 : : {
1228 : : SvxUnderlineItem aUnderline( (const SvxUnderlineItem&)
1229 : : pAttrs->GetItem(
1230 [ # # ][ # # ]: 0 : ATTR_FONT_UNDERLINE ) );
1231 : 0 : eUnderline = (UNDERLINE_NONE != aUnderline.GetLineStyle())
1232 : : ? UNDERLINE_NONE
1233 : 0 : : UNDERLINE_SINGLE;
1234 : 0 : aUnderline.SetLineStyle( eUnderline );
1235 [ # # ]: 0 : pTabViewShell->ApplyAttr( aUnderline );
1236 [ # # ][ # # ]: 0 : pNewSet->Put( aUnderline,aUnderline.Which() );
1237 : : }
1238 : : }
1239 : 0 : break;
1240 : :
1241 : : case SID_ULINE_VAL_NONE:
1242 [ # # ]: 0 : pTabViewShell->ApplyAttr( SvxUnderlineItem( UNDERLINE_NONE, ATTR_FONT_UNDERLINE ) );
1243 : 0 : break;
1244 : : case SID_ULINE_VAL_SINGLE: // Toggles
1245 : : case SID_ULINE_VAL_DOUBLE:
1246 : : case SID_ULINE_VAL_DOTTED:
1247 : : {
1248 : : FontUnderline eOld = ((const SvxUnderlineItem&)
1249 : 0 : pAttrs->GetItem(ATTR_FONT_UNDERLINE)).GetLineStyle();
1250 : 0 : FontUnderline eNew = eOld;
1251 [ # # # # ]: 0 : switch (nSlot)
1252 : : {
1253 : : case SID_ULINE_VAL_SINGLE:
1254 : 0 : eNew = ( eOld == UNDERLINE_SINGLE ) ? UNDERLINE_NONE : UNDERLINE_SINGLE;
1255 : 0 : break;
1256 : : case SID_ULINE_VAL_DOUBLE:
1257 [ # # ]: 0 : eNew = ( eOld == UNDERLINE_DOUBLE ) ? UNDERLINE_NONE : UNDERLINE_DOUBLE;
1258 : 0 : break;
1259 : : case SID_ULINE_VAL_DOTTED:
1260 [ # # ]: 0 : eNew = ( eOld == UNDERLINE_DOTTED ) ? UNDERLINE_NONE : UNDERLINE_DOTTED;
1261 : 0 : break;
1262 : : }
1263 [ # # ]: 0 : pTabViewShell->ApplyAttr( SvxUnderlineItem( eNew, ATTR_FONT_UNDERLINE ) );
1264 : : }
1265 : 0 : break;
1266 : :
1267 : : default:
1268 : 0 : break;
1269 : : }
1270 : 0 : rBindings.Invalidate( nSlot );
1271 : : }
1272 : : else
1273 : : {
1274 : : /*
1275 : : * "Selbstgemachte" RadioButton-Funktionalitaet
1276 : : * Beim Toggle gibt es den Standard-State, d.h. kein
1277 : : * Button ist gedrueckt
1278 : : */
1279 : :
1280 [ # # ]: 0 : const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
1281 : 0 : const SfxPoolItem* pItem = NULL;
1282 : 0 : const SvxHorJustifyItem* pHorJustify = NULL;
1283 : 0 : const SvxVerJustifyItem* pVerJustify = NULL;
1284 : 0 : SvxCellHorJustify eHorJustify = SVX_HOR_JUSTIFY_STANDARD;
1285 : 0 : SvxCellVerJustify eVerJustify = SVX_VER_JUSTIFY_STANDARD;
1286 : :
1287 [ # # ][ # # ]: 0 : if (rAttrSet.GetItemState(ATTR_HOR_JUSTIFY, sal_True,&pItem ) == SFX_ITEM_SET)
1288 : : {
1289 : 0 : pHorJustify = (const SvxHorJustifyItem*)pItem;
1290 : 0 : eHorJustify = SvxCellHorJustify( pHorJustify->GetValue() );
1291 : : }
1292 [ # # ][ # # ]: 0 : if (rAttrSet.GetItemState(ATTR_VER_JUSTIFY, sal_True,&pItem ) == SFX_ITEM_SET)
1293 : : {
1294 : 0 : pVerJustify = (const SvxVerJustifyItem*)pItem;
1295 : 0 : eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
1296 : : }
1297 : :
1298 [ # # # # : 0 : switch ( nSlot )
# # # # ]
1299 : : {
1300 : : case SID_ALIGNLEFT:
1301 : 0 : rReq.SetSlot( SID_H_ALIGNCELL );
1302 : : rReq.AppendItem( SvxHorJustifyItem(
1303 : : !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_LEFT) ?
1304 [ # # ][ # # ]: 0 : SVX_HOR_JUSTIFY_LEFT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
[ # # ][ # # ]
[ # # ]
1305 [ # # ][ # # ]: 0 : ExecuteSlot( rReq, GetInterface() );
1306 : : return;
1307 : : //break;
1308 : :
1309 : : case SID_ALIGNRIGHT:
1310 : 0 : rReq.SetSlot( SID_H_ALIGNCELL );
1311 : : rReq.AppendItem( SvxHorJustifyItem(
1312 : : !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_RIGHT) ?
1313 [ # # ][ # # ]: 0 : SVX_HOR_JUSTIFY_RIGHT : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
[ # # ][ # # ]
[ # # ]
1314 [ # # ][ # # ]: 0 : ExecuteSlot( rReq, GetInterface() );
1315 : : return;
1316 : : //break;
1317 : :
1318 : : case SID_ALIGNCENTERHOR:
1319 : 0 : rReq.SetSlot( SID_H_ALIGNCELL );
1320 : : rReq.AppendItem( SvxHorJustifyItem(
1321 : : !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_CENTER) ?
1322 [ # # ][ # # ]: 0 : SVX_HOR_JUSTIFY_CENTER : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
[ # # ][ # # ]
[ # # ]
1323 [ # # ][ # # ]: 0 : ExecuteSlot( rReq, GetInterface() );
1324 : : return;
1325 : : //break;
1326 : :
1327 : : case SID_ALIGNBLOCK:
1328 : 0 : rReq.SetSlot( SID_H_ALIGNCELL );
1329 : : rReq.AppendItem( SvxHorJustifyItem(
1330 : : !pHorJustify || (eHorJustify != SVX_HOR_JUSTIFY_BLOCK) ?
1331 [ # # ][ # # ]: 0 : SVX_HOR_JUSTIFY_BLOCK : SVX_HOR_JUSTIFY_STANDARD, SID_H_ALIGNCELL ) );
[ # # ][ # # ]
[ # # ]
1332 [ # # ][ # # ]: 0 : ExecuteSlot( rReq, GetInterface() );
1333 : : return;
1334 : : //break;
1335 : :
1336 : : case SID_ALIGNTOP:
1337 : 0 : rReq.SetSlot( SID_V_ALIGNCELL );
1338 : : rReq.AppendItem( SvxVerJustifyItem(
1339 : : !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_TOP) ?
1340 [ # # ][ # # ]: 0 : SVX_VER_JUSTIFY_TOP : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
[ # # ][ # # ]
[ # # ]
1341 [ # # ][ # # ]: 0 : ExecuteSlot( rReq, GetInterface() );
1342 : : return;
1343 : : //break;
1344 : :
1345 : : case SID_ALIGNBOTTOM:
1346 : 0 : rReq.SetSlot( SID_V_ALIGNCELL );
1347 : : rReq.AppendItem( SvxVerJustifyItem(
1348 : : !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_BOTTOM) ?
1349 [ # # ][ # # ]: 0 : SVX_VER_JUSTIFY_BOTTOM : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
[ # # ][ # # ]
[ # # ]
1350 [ # # ][ # # ]: 0 : ExecuteSlot( rReq, GetInterface() );
1351 : : return;
1352 : : //break;
1353 : :
1354 : : case SID_ALIGNCENTERVER:
1355 : 0 : rReq.SetSlot( SID_V_ALIGNCELL );
1356 : : rReq.AppendItem( SvxVerJustifyItem(
1357 : : !pVerJustify || (eVerJustify != SVX_VER_JUSTIFY_CENTER) ?
1358 [ # # ][ # # ]: 0 : SVX_VER_JUSTIFY_CENTER : SVX_VER_JUSTIFY_STANDARD, SID_V_ALIGNCELL ) );
[ # # ][ # # ]
[ # # ]
1359 [ # # ][ # # ]: 0 : ExecuteSlot( rReq, GetInterface() );
1360 : : return;
1361 : : //break;
1362 : :
1363 : : default:
1364 : 0 : break;
1365 : : }
1366 : :
1367 : : }
1368 : :
1369 : 0 : rBindings.Update();
1370 : :
1371 [ # # ]: 0 : if( pNewSet )
1372 : : {
1373 : 0 : rReq.Done( *pNewSet );
1374 [ # # ]: 0 : delete pNewSet;
1375 : : }
1376 : : else
1377 : : {
1378 : 0 : rReq.Done();
1379 : : }
1380 : :
1381 : : }
1382 : :
1383 : : //------------------------------------------------------------------
1384 : :
1385 : 0 : void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
1386 : : {
1387 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1388 : 0 : SfxBindings& rBindings = pViewData->GetBindings();
1389 : 0 : const SfxItemSet* pNewAttrs = rReq.GetArgs();
1390 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
1391 : :
1392 : 0 : pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
1393 [ # # ]: 0 : if ( !pNewAttrs )
1394 : : {
1395 [ # # # # ]: 0 : switch ( nSlot )
1396 : : {
1397 : : case SID_ATTR_CHAR_COLOR:
1398 : : case SID_ATTR_CHAR_FONT:
1399 : : case SID_ATTR_CHAR_FONTHEIGHT:
1400 : 0 : pTabViewShell->ExecuteCellFormatDlg( rReq, TP_FONT ); // wenn ToolBar vertikal
1401 : 0 : break;
1402 : :
1403 : : case SID_BACKGROUND_COLOR:
1404 : : {
1405 : : SvxBrushItem aBrushItem( (const SvxBrushItem&)
1406 [ # # ][ # # ]: 0 : pTabViewShell->GetSelectionPattern()->GetItem( ATTR_BACKGROUND ) );
[ # # ]
1407 : 0 : aBrushItem.SetColor( COL_TRANSPARENT );
1408 [ # # ][ # # ]: 0 : pTabViewShell->ApplyAttr( aBrushItem );
1409 : : }
1410 : 0 : break;
1411 : :
1412 : : case SID_ATTR_ALIGN_LINEBREAK: // ohne Parameter als Toggle
1413 : : {
1414 [ # # ]: 0 : const ScPatternAttr* pAttrs = pTabViewShell->GetSelectionPattern();
1415 [ # # ]: 0 : bool bOld = ((const SfxBoolItem&)pAttrs->GetItem(ATTR_LINEBREAK)).GetValue();
1416 [ # # ]: 0 : SfxBoolItem aBreakItem( ATTR_LINEBREAK, !bOld );
1417 [ # # ]: 0 : pTabViewShell->ApplyAttr( aBreakItem );
1418 : :
1419 [ # # ]: 0 : SfxAllItemSet aNewSet( GetPool() );
1420 [ # # ]: 0 : aNewSet.Put( aBreakItem,aBreakItem.Which() );
1421 [ # # ]: 0 : rReq.Done( aNewSet );
1422 : :
1423 [ # # ][ # # ]: 0 : rBindings.Invalidate( nSlot );
[ # # ]
1424 : : }
1425 : 0 : break;
1426 : : }
1427 : : }
1428 : : else
1429 : : {
1430 [ # # # # : 0 : switch ( nSlot )
# # # #
# ]
1431 : : {
1432 : : case SID_ATTR_CHAR_OVERLINE:
1433 : : case SID_ATTR_CHAR_STRIKEOUT:
1434 : : case SID_ATTR_ALIGN_LINEBREAK:
1435 : : case SID_ATTR_CHAR_COLOR:
1436 : : case SID_ATTR_CHAR_CONTOUR:
1437 : : case SID_ATTR_CHAR_SHADOWED:
1438 : : case SID_ATTR_CHAR_RELIEF:
1439 : : case SID_SCATTR_PROTECTION :
1440 : 0 : pTabViewShell->ApplyAttr( pNewAttrs->Get( pNewAttrs->GetPool()->GetWhich( nSlot ) ) );
1441 : 0 : rBindings.Invalidate( nSlot );
1442 : 0 : rBindings.Update( nSlot );
1443 : 0 : break;
1444 : :
1445 : : case SID_ATTR_CHAR_FONT:
1446 : : case SID_ATTR_CHAR_FONTHEIGHT:
1447 : : {
1448 : : // #i78017 establish the same behaviour as in Writer
1449 : 0 : sal_uInt8 nScript = SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN | SCRIPTTYPE_COMPLEX;
1450 [ # # ]: 0 : if (nSlot == SID_ATTR_CHAR_FONT)
1451 [ # # ]: 0 : nScript = pTabViewShell->GetSelectionScriptType();
1452 : :
1453 : 0 : SfxItemPool& rPool = GetPool();
1454 [ # # ]: 0 : SvxScriptSetItem aSetItem( nSlot, rPool );
1455 [ # # ]: 0 : sal_uInt16 nWhich = rPool.GetWhich( nSlot );
1456 [ # # ][ # # ]: 0 : aSetItem.PutItemForScriptType( nScript, pNewAttrs->Get( nWhich ) );
1457 : :
1458 [ # # ]: 0 : pTabViewShell->ApplyUserItemSet( aSetItem.GetItemSet() );
1459 : :
1460 [ # # ]: 0 : rBindings.Invalidate( nSlot );
1461 [ # # ][ # # ]: 0 : rBindings.Update( nSlot );
1462 : : }
1463 : 0 : break;
1464 : :
1465 : : case SID_FRAME_LINESTYLE:
1466 : : {
1467 : : // Default-Linie aktualisieren
1468 : : const ::editeng::SvxBorderLine* pLine =
1469 : : ((const SvxLineItem&)
1470 : 0 : pNewAttrs->Get( SID_FRAME_LINESTYLE )).
1471 : 0 : GetLine();
1472 : :
1473 [ # # ]: 0 : if ( pLine )
1474 : : {
1475 : 0 : ::editeng::SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
1476 : :
1477 [ # # ]: 0 : if ( pDefLine )
1478 : : {
1479 : : pDefLine->SetBorderLineStyle(
1480 : 0 : pLine->GetBorderLineStyle());
1481 : 0 : pDefLine->SetWidth( pLine->GetWidth( ) );
1482 : 0 : pTabViewShell->SetSelectionFrameLines( pDefLine, false );
1483 : : }
1484 : : else
1485 : : {
1486 : 0 : pTabViewShell->SetDefaultFrameLine( pLine );
1487 : 0 : pTabViewShell->GetDefaultFrameLine()->SetColor( COL_BLACK );
1488 : 0 : pTabViewShell->SetSelectionFrameLines( pLine, false );
1489 : : }
1490 : : }
1491 : : else
1492 : : {
1493 : 0 : Color aColorBlack( COL_BLACK );
1494 : : ::editeng::SvxBorderLine aDefLine( &aColorBlack, 20,
1495 [ # # ]: 0 : table::BorderLineStyle::SOLID );
1496 [ # # ]: 0 : pTabViewShell->SetDefaultFrameLine( &aDefLine );
1497 [ # # ]: 0 : pTabViewShell->SetSelectionFrameLines( NULL, false );
1498 : : }
1499 : : }
1500 : 0 : break;
1501 : :
1502 : : case SID_FRAME_LINECOLOR:
1503 : : {
1504 : 0 : ::editeng::SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
1505 : : const Color& rColor = ((const SvxColorItem&)
1506 : 0 : pNewAttrs->Get( SID_FRAME_LINECOLOR )).
1507 : 0 : GetValue();
1508 : :
1509 : : // Default-Linie aktualisieren
1510 [ # # ]: 0 : if ( pDefLine )
1511 : : {
1512 : 0 : pDefLine->SetColor( rColor );
1513 : 0 : pTabViewShell->SetSelectionFrameLines( pDefLine, sal_True );
1514 : : }
1515 : : else
1516 : : {
1517 : : ::editeng::SvxBorderLine aDefLine( &rColor, 20,
1518 [ # # ]: 0 : table::BorderLineStyle::SOLID );
1519 [ # # ]: 0 : pTabViewShell->SetDefaultFrameLine( &aDefLine );
1520 [ # # ]: 0 : pTabViewShell->SetSelectionFrameLines( &aDefLine, false );
1521 : : }
1522 : : }
1523 : 0 : break;
1524 : :
1525 : : case SID_ATTR_BORDER_OUTER:
1526 : : case SID_ATTR_BORDER:
1527 : : {
1528 : 0 : ::editeng::SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
1529 [ # # ]: 0 : const ScPatternAttr* pOldAttrs = pTabViewShell->GetSelectionPattern();
1530 [ # # ]: 0 : ScDocument* pDoc = GetViewData()->GetDocument();
1531 : : SfxItemSet* pOldSet =
1532 : : new SfxItemSet(
1533 [ # # ]: 0 : *(pDoc->GetPool()),
1534 : : ATTR_PATTERN_START,
1535 [ # # ][ # # ]: 0 : ATTR_PATTERN_END );
1536 : : SfxItemSet* pNewSet =
1537 : : new SfxItemSet(
1538 [ # # ]: 0 : *(pDoc->GetPool()),
1539 : : ATTR_PATTERN_START,
1540 [ # # ][ # # ]: 0 : ATTR_PATTERN_END );
1541 : : const SfxPoolItem& rBorderAttr =
1542 : 0 : pOldAttrs->GetItemSet().
1543 [ # # ]: 0 : Get( ATTR_BORDER );
1544 : :
1545 : : // Border-Items vom Controller auswerten:
1546 : 0 : const SfxPoolItem* pItem = 0;
1547 : :
1548 [ # # ][ # # ]: 0 : if ( pNewAttrs->GetItemState( ATTR_BORDER, sal_True, &pItem )
1549 : : == SFX_ITEM_SET )
1550 : : {
1551 : : // The SvxFrameToolBoxControl toolbox controller uses a default
1552 : : // SvxBorderLine (all widths 0) to mark the lines that should be set.
1553 : : // Macro recording uses a SvxBoxItem with the real values (OutWidth > 0)
1554 : : // or NULL pointers for no lines.
1555 : : // -> Substitute existing lines with pDefLine only if widths are 0.
1556 [ # # ]: 0 : SvxBoxItem aBoxItem ( *(const SvxBoxItem*)pItem );
1557 [ # # ][ # # ]: 0 : if ( aBoxItem.GetTop() && aBoxItem.GetTop()->GetOutWidth() == 0 )
[ # # ][ # # ]
1558 [ # # ]: 0 : aBoxItem.SetLine( pDefLine, BOX_LINE_TOP );
1559 [ # # ][ # # ]: 0 : if ( aBoxItem.GetBottom() && aBoxItem.GetBottom()->GetOutWidth() == 0 )
[ # # ][ # # ]
1560 [ # # ]: 0 : aBoxItem.SetLine( pDefLine, BOX_LINE_BOTTOM );
1561 [ # # ][ # # ]: 0 : if ( aBoxItem.GetLeft() && aBoxItem.GetLeft()->GetOutWidth() == 0 )
[ # # ][ # # ]
1562 [ # # ]: 0 : aBoxItem.SetLine( pDefLine, BOX_LINE_LEFT );
1563 [ # # ][ # # ]: 0 : if ( aBoxItem.GetRight() && aBoxItem.GetRight()->GetOutWidth() == 0 )
[ # # ][ # # ]
1564 [ # # ]: 0 : aBoxItem.SetLine( pDefLine, BOX_LINE_RIGHT );
1565 [ # # ]: 0 : pNewSet->Put( aBoxItem );
1566 [ # # ][ # # ]: 0 : rReq.AppendItem( aBoxItem );
1567 : : }
1568 : :
1569 [ # # ][ # # ]: 0 : if ( pNewAttrs->GetItemState( ATTR_BORDER_INNER, sal_True, &pItem )
1570 : : == SFX_ITEM_SET )
1571 : : {
1572 [ # # ]: 0 : SvxBoxInfoItem aBoxInfoItem( *(const SvxBoxInfoItem*)pItem );
1573 [ # # ][ # # ]: 0 : if ( aBoxInfoItem.GetHori() && aBoxInfoItem.GetHori()->GetOutWidth() == 0 )
[ # # ][ # # ]
1574 [ # # ]: 0 : aBoxInfoItem.SetLine( pDefLine, BOXINFO_LINE_HORI );
1575 [ # # ][ # # ]: 0 : if ( aBoxInfoItem.GetVert() && aBoxInfoItem.GetVert()->GetOutWidth() == 0 )
[ # # ][ # # ]
1576 [ # # ]: 0 : aBoxInfoItem.SetLine( pDefLine, BOXINFO_LINE_VERT );
1577 [ # # ]: 0 : pNewSet->Put( aBoxInfoItem );
1578 [ # # ][ # # ]: 0 : rReq.AppendItem( aBoxInfoItem );
1579 : : }
1580 : : else
1581 : : {
1582 [ # # ]: 0 : SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
1583 [ # # ]: 0 : aBoxInfoItem.SetLine( NULL, BOXINFO_LINE_HORI );
1584 [ # # ]: 0 : aBoxInfoItem.SetLine( NULL, BOXINFO_LINE_VERT );
1585 [ # # ][ # # ]: 0 : pNewSet->Put( aBoxInfoItem );
1586 : : }
1587 : :
1588 [ # # ]: 0 : pOldSet->Put( rBorderAttr );
1589 [ # # ]: 0 : pTabViewShell->ApplyAttributes( pNewSet, pOldSet );
1590 : :
1591 [ # # ][ # # ]: 0 : delete pOldSet;
1592 [ # # ][ # # ]: 0 : delete pNewSet;
1593 : : }
1594 : 0 : break;
1595 : :
1596 : : // ATTR_BACKGROUND (=SID_ATTR_BRUSH) muss ueber zwei IDs
1597 : : // gesetzt werden:
1598 : : case SID_BACKGROUND_COLOR:
1599 : : {
1600 : : const SvxColorItem rNewColorItem = (const SvxColorItem&)
1601 [ # # ][ # # ]: 0 : pNewAttrs->Get( SID_BACKGROUND_COLOR );
1602 : :
1603 : : SvxBrushItem aBrushItem( (const SvxBrushItem&)
1604 : : pTabViewShell->GetSelectionPattern()->
1605 [ # # ][ # # ]: 0 : GetItem( ATTR_BACKGROUND ) );
[ # # ]
1606 : :
1607 : 0 : aBrushItem.SetColor( rNewColorItem.GetValue() );
1608 : :
1609 [ # # ][ # # ]: 0 : pTabViewShell->ApplyAttr( aBrushItem );
[ # # ]
1610 : : }
1611 : 0 : break;
1612 : :
1613 : : case SID_ATTR_BRUSH:
1614 : : {
1615 : : SvxBrushItem aBrushItem( (const SvxBrushItem&)
1616 : : pTabViewShell->GetSelectionPattern()->
1617 [ # # ][ # # ]: 0 : GetItem( ATTR_BACKGROUND ) );
[ # # ]
1618 : : const SvxBrushItem& rNewBrushItem = (const SvxBrushItem&)
1619 [ # # ][ # # ]: 0 : pNewAttrs->Get( GetPool().GetWhich(nSlot) );
1620 : 0 : aBrushItem.SetColor(rNewBrushItem.GetColor());
1621 [ # # ][ # # ]: 0 : pTabViewShell->ApplyAttr( aBrushItem );
1622 : : }
1623 : 0 : break;
1624 : :
1625 : : case SID_ATTR_BORDER_SHADOW:
1626 : : {
1627 : : const SvxShadowItem& rNewShadowItem = (const SvxShadowItem&)
1628 : 0 : pNewAttrs->Get( ATTR_SHADOW );
1629 : 0 : pTabViewShell->ApplyAttr( rNewShadowItem );
1630 : : }
1631 : 0 : break;
1632 : :
1633 : : default:
1634 : 0 : break;
1635 : : }
1636 : :
1637 [ # # ]: 0 : if( ! rReq.IsAPI() )
1638 [ # # ]: 0 : if( ! rReq.IsDone() )
1639 : 0 : rReq.Done();
1640 : : }
1641 : 0 : }
1642 : :
1643 : 1611 : void ScFormatShell::GetAttrState( SfxItemSet& rSet )
1644 : : {
1645 : 1611 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1646 [ + - ]: 1611 : const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
1647 : 1611 : const ::editeng::SvxBorderLine* pLine = pTabViewShell->GetDefaultFrameLine();
1648 [ + - ]: 1611 : const SvxBrushItem& rBrushItem = (const SvxBrushItem&)rAttrSet.Get( ATTR_BACKGROUND );
1649 [ + - ]: 1611 : SfxWhichIter aIter( rSet );
1650 [ + - ]: 1611 : sal_uInt16 nWhich = aIter.FirstWhich();
1651 : :
1652 [ + - ]: 1611 : rSet.Put( rAttrSet, false );
1653 : :
1654 : : // choose font info according to selection script type
1655 : 1611 : sal_uInt8 nScript = 0; // GetSelectionScriptType never returns 0
1656 [ + - ][ + + ]: 1611 : if ( rSet.GetItemState( ATTR_FONT ) != SFX_ITEM_UNKNOWN )
1657 : : {
1658 [ + - ][ + - ]: 459 : if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
1659 [ + - ]: 459 : ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT, nScript );
1660 : : }
1661 [ + - ][ + + ]: 1611 : if ( rSet.GetItemState( ATTR_FONT_HEIGHT ) != SFX_ITEM_UNKNOWN )
1662 : : {
1663 [ + + ][ + - ]: 267 : if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
1664 [ + - ]: 267 : ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_HEIGHT, nScript );
1665 : : }
1666 : :
1667 [ + + ]: 3672 : while ( nWhich )
1668 : : {
1669 [ + + - + ]: 2061 : switch(nWhich)
1670 : : {
1671 : : case SID_BACKGROUND_COLOR:
1672 : : {
1673 [ + - ][ + - ]: 267 : rSet.Put( SvxColorItem( rBrushItem.GetColor(), SID_BACKGROUND_COLOR ) );
[ + - ]
1674 : : }
1675 : 267 : break;
1676 : : case SID_FRAME_LINECOLOR:
1677 : : {
1678 [ + - ][ + - ]: 267 : rSet.Put( SvxColorItem( pLine ? pLine->GetColor() : Color(), SID_FRAME_LINECOLOR ) );
[ + - ][ + - ]
1679 : : }
1680 : 267 : break;
1681 : : case SID_ATTR_BRUSH:
1682 : : {
1683 [ # # ][ # # ]: 0 : rSet.Put( rBrushItem, GetPool().GetWhich(nWhich) );
1684 : : }
1685 : 0 : break;
1686 : : }
1687 [ + - ]: 2061 : nWhich = aIter.NextWhich();
1688 [ + - ]: 1611 : }
1689 : 1611 : }
1690 : :
1691 : : //------------------------------------------------------------------
1692 : :
1693 : 2188 : void ScFormatShell::GetTextAttrState( SfxItemSet& rSet )
1694 : : {
1695 : 2188 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1696 [ + - ]: 2188 : const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
1697 [ + - ]: 2188 : rSet.Put( rAttrSet, false ); // ItemStates mitkopieren
1698 : :
1699 : : // choose font info according to selection script type
1700 : 2188 : sal_uInt8 nScript = 0; // GetSelectionScriptType never returns 0
1701 [ + - ][ + + ]: 2188 : if ( rSet.GetItemState( ATTR_FONT_WEIGHT ) != SFX_ITEM_UNKNOWN )
1702 : : {
1703 [ + - ][ + - ]: 267 : if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
1704 [ + - ]: 267 : ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_WEIGHT, nScript );
1705 : : }
1706 [ + - ][ + + ]: 2188 : if ( rSet.GetItemState( ATTR_FONT_POSTURE ) != SFX_ITEM_UNKNOWN )
1707 : : {
1708 [ + + ][ + - ]: 267 : if (!nScript) nScript = pTabViewShell->GetSelectionScriptType();
1709 [ + - ]: 267 : ScViewUtil::PutItemScript( rSet, rAttrSet, ATTR_FONT_POSTURE, nScript );
1710 : : }
1711 : :
1712 : : SfxItemState eState;
1713 : : // const SfxPoolItem* pItem;
1714 : :
1715 : : //--------------------------------------------------------------------
1716 : : // eigene Kontrolle ueber RadioButton-Funktionalitaet:
1717 : : //--------------------------------------------------------------------
1718 : : // Unterstreichung
1719 : : //------------------------
1720 : :
1721 [ + - ]: 2188 : eState = rAttrSet.GetItemState( ATTR_FONT_UNDERLINE, sal_True );
1722 [ - + ]: 2188 : if ( eState == SFX_ITEM_DONTCARE )
1723 : : {
1724 [ # # ]: 0 : rSet.InvalidateItem( SID_ULINE_VAL_NONE );
1725 [ # # ]: 0 : rSet.InvalidateItem( SID_ULINE_VAL_SINGLE );
1726 [ # # ]: 0 : rSet.InvalidateItem( SID_ULINE_VAL_DOUBLE );
1727 [ # # ]: 0 : rSet.InvalidateItem( SID_ULINE_VAL_DOTTED );
1728 : : }
1729 : : else
1730 : : {
1731 : : FontUnderline eUnderline = ((const SvxUnderlineItem&)
1732 [ + - ]: 2188 : rAttrSet.Get(ATTR_FONT_UNDERLINE)).GetLineStyle();
1733 : 2188 : sal_uInt16 nId = SID_ULINE_VAL_NONE;
1734 [ - - - + ]: 2188 : switch (eUnderline)
1735 : : {
1736 : 0 : case UNDERLINE_SINGLE: nId = SID_ULINE_VAL_SINGLE; break;
1737 : 0 : case UNDERLINE_DOUBLE: nId = SID_ULINE_VAL_DOUBLE; break;
1738 : 0 : case UNDERLINE_DOTTED: nId = SID_ULINE_VAL_DOTTED; break;
1739 : : default:
1740 : 2188 : break;
1741 : : }
1742 [ + - ][ + - ]: 2188 : rSet.Put( SfxBoolItem( nId, sal_True ) );
[ + - ]
1743 : : }
1744 : :
1745 : : //------------------------
1746 : : // horizontale Ausrichtung
1747 : : //------------------------
1748 : :
1749 : 2188 : const SvxHorJustifyItem* pHorJustify = NULL;
1750 : 2188 : const SvxVerJustifyItem* pVerJustify = NULL;
1751 : 2188 : SvxCellVerJustify eVerJustify = SVX_VER_JUSTIFY_STANDARD;
1752 : 2188 : sal_uInt16 nWhich = 0;
1753 : 2188 : bool bJustifyStd = false;
1754 [ + - ]: 2188 : SfxBoolItem aBoolItem ( 0, sal_True );
1755 : :
1756 : : eState = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY, sal_True,
1757 [ + - ]: 2188 : (const SfxPoolItem**)&pHorJustify );
1758 [ - - + ]: 2188 : switch ( eState )
1759 : : {
1760 : : case SFX_ITEM_SET:
1761 : : {
1762 [ # # # # : 0 : switch ( SvxCellHorJustify( pHorJustify->GetValue() ) )
# # ]
1763 : : {
1764 : : case SVX_HOR_JUSTIFY_STANDARD:
1765 : 0 : break;
1766 : :
1767 : : case SVX_HOR_JUSTIFY_LEFT:
1768 : 0 : nWhich = SID_ALIGNLEFT;
1769 : 0 : break;
1770 : :
1771 : : case SVX_HOR_JUSTIFY_RIGHT:
1772 : 0 : nWhich = SID_ALIGNRIGHT;
1773 : 0 : break;
1774 : :
1775 : : case SVX_HOR_JUSTIFY_CENTER:
1776 : 0 : nWhich = SID_ALIGNCENTERHOR;
1777 : 0 : break;
1778 : :
1779 : : case SVX_HOR_JUSTIFY_BLOCK:
1780 : 0 : nWhich = SID_ALIGNBLOCK;
1781 : 0 : break;
1782 : :
1783 : : case SVX_HOR_JUSTIFY_REPEAT:
1784 : : default:
1785 : 0 : bJustifyStd = sal_True;
1786 : 0 : break;
1787 : : }
1788 : : }
1789 : 0 : break;
1790 : :
1791 : : case SFX_ITEM_DONTCARE:
1792 [ # # ]: 0 : rSet.InvalidateItem( SID_ALIGNLEFT );
1793 [ # # ]: 0 : rSet.InvalidateItem( SID_ALIGNRIGHT );
1794 [ # # ]: 0 : rSet.InvalidateItem( SID_ALIGNCENTERHOR );
1795 [ # # ]: 0 : rSet.InvalidateItem( SID_ALIGNBLOCK );
1796 : 0 : break;
1797 : :
1798 : : default:
1799 : 2188 : bJustifyStd = sal_True;
1800 : 2188 : break;
1801 : : }
1802 : :
1803 [ - + ]: 2188 : if ( nWhich )
1804 : : {
1805 : 0 : aBoolItem.SetWhich( nWhich );
1806 [ # # ]: 0 : rSet.Put( aBoolItem );
1807 : : }
1808 [ + - ]: 2188 : else if ( bJustifyStd )
1809 : : {
1810 : 2188 : aBoolItem.SetValue( false );
1811 [ + - ]: 2188 : aBoolItem.SetWhich( SID_ALIGNLEFT ); rSet.Put( aBoolItem );
1812 [ + - ]: 2188 : aBoolItem.SetWhich( SID_ALIGNRIGHT ); rSet.Put( aBoolItem );
1813 [ + - ]: 2188 : aBoolItem.SetWhich( SID_ALIGNCENTERHOR ); rSet.Put( aBoolItem );
1814 [ + - ]: 2188 : aBoolItem.SetWhich( SID_ALIGNBLOCK ); rSet.Put( aBoolItem );
1815 : 2188 : bJustifyStd = false;
1816 : : }
1817 : :
1818 : : //------------------------
1819 : : // vertikale Ausrichtung
1820 : : //------------------------
1821 : :
1822 : 2188 : nWhich = 0;
1823 : 2188 : aBoolItem.SetValue( sal_True );
1824 : :
1825 : : eState = rAttrSet.GetItemState( ATTR_VER_JUSTIFY, sal_True,
1826 [ + - ]: 2188 : (const SfxPoolItem**)&pVerJustify );
1827 : :
1828 [ - - + ]: 2188 : switch ( eState )
1829 : : {
1830 : : case SFX_ITEM_SET:
1831 : : {
1832 : 0 : eVerJustify = SvxCellVerJustify( pVerJustify->GetValue() );
1833 : :
1834 [ # # # # ]: 0 : switch ( eVerJustify )
1835 : : {
1836 : : case SVX_VER_JUSTIFY_TOP:
1837 : 0 : nWhich = SID_ALIGNTOP;
1838 : 0 : break;
1839 : :
1840 : : case SVX_VER_JUSTIFY_BOTTOM:
1841 : 0 : nWhich = SID_ALIGNBOTTOM;
1842 : 0 : break;
1843 : :
1844 : : case SVX_VER_JUSTIFY_CENTER:
1845 : 0 : nWhich = SID_ALIGNCENTERVER;
1846 : 0 : break;
1847 : :
1848 : : case SVX_VER_JUSTIFY_STANDARD:
1849 : : default:
1850 : 0 : bJustifyStd = sal_True;
1851 : 0 : break;
1852 : : }
1853 : : }
1854 : 0 : break;
1855 : :
1856 : : case SFX_ITEM_DONTCARE:
1857 [ # # ]: 0 : rSet.InvalidateItem( SID_ALIGNTOP );
1858 [ # # ]: 0 : rSet.InvalidateItem( SID_ALIGNBOTTOM );
1859 [ # # ]: 0 : rSet.InvalidateItem( SID_ALIGNCENTERVER );
1860 : 0 : break;
1861 : :
1862 : : default:
1863 : 2188 : bJustifyStd = sal_True;
1864 : 2188 : break;
1865 : : }
1866 : :
1867 [ - + ]: 2188 : if ( nWhich )
1868 : : {
1869 : 0 : aBoolItem.SetWhich( nWhich );
1870 [ # # ]: 0 : rSet.Put( aBoolItem );
1871 : : }
1872 [ + - ]: 2188 : else if ( bJustifyStd )
1873 : : {
1874 : 2188 : aBoolItem.SetValue( false );
1875 [ + - ]: 2188 : aBoolItem.SetWhich( SID_ALIGNTOP ); rSet.Put( aBoolItem );
1876 [ + - ]: 2188 : aBoolItem.SetWhich( SID_ALIGNBOTTOM ); rSet.Put( aBoolItem );
1877 [ + - ]: 2188 : aBoolItem.SetWhich( SID_ALIGNCENTERVER ); rSet.Put( aBoolItem );
1878 [ + - ]: 2188 : }
1879 : 2188 : }
1880 : :
1881 : :
1882 : : //------------------------------------------------------------------
1883 : :
1884 : 0 : void ScFormatShell::GetBorderState( SfxItemSet& rSet )
1885 : : {
1886 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1887 [ # # ]: 0 : SvxBoxItem aBoxItem( ATTR_BORDER );
1888 [ # # ]: 0 : SvxBoxInfoItem aInfoItem( ATTR_BORDER_INNER );
1889 : :
1890 [ # # ]: 0 : pTabViewShell->GetSelectionFrame( aBoxItem, aInfoItem );
1891 : :
1892 [ # # ][ # # ]: 0 : if ( rSet.GetItemState( ATTR_BORDER ) != SFX_ITEM_UNKNOWN )
1893 [ # # ]: 0 : rSet.Put( aBoxItem );
1894 [ # # ][ # # ]: 0 : if ( rSet.GetItemState( ATTR_BORDER_INNER ) != SFX_ITEM_UNKNOWN )
1895 [ # # ][ # # ]: 0 : rSet.Put( aInfoItem );
[ # # ]
1896 : 0 : }
1897 : :
1898 : : //------------------------------------------------------------------
1899 : :
1900 : 0 : void ScFormatShell::GetAlignState( SfxItemSet& rSet )
1901 : : {
1902 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1903 [ # # ]: 0 : const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
1904 [ # # ]: 0 : SfxWhichIter aIter(rSet);
1905 [ # # ]: 0 : sal_uInt16 nWhich = aIter.FirstWhich();
1906 : :
1907 : 0 : SvxCellHorJustify eHAlign = SVX_HOR_JUSTIFY_STANDARD;
1908 [ # # ]: 0 : bool bHasHAlign = rAttrSet.GetItemState( ATTR_HOR_JUSTIFY ) != SFX_ITEM_DONTCARE;
1909 [ # # ]: 0 : if( bHasHAlign )
1910 [ # # ]: 0 : eHAlign = (SvxCellHorJustify)((const SvxHorJustifyItem&) rAttrSet.Get( ATTR_HOR_JUSTIFY )).GetValue();
1911 : :
1912 : 0 : SvxCellVerJustify eVAlign = SVX_VER_JUSTIFY_STANDARD;
1913 [ # # ]: 0 : bool bHasVAlign = rAttrSet.GetItemState( ATTR_VER_JUSTIFY ) != SFX_ITEM_DONTCARE;
1914 [ # # ]: 0 : if( bHasVAlign )
1915 [ # # ]: 0 : eVAlign = (SvxCellVerJustify)((const SvxVerJustifyItem&) rAttrSet.Get( ATTR_VER_JUSTIFY )).GetValue();
1916 : :
1917 [ # # ]: 0 : while ( nWhich )
1918 : : {
1919 [ # # # # : 0 : switch ( nWhich )
# ]
1920 : : {
1921 : : case SID_H_ALIGNCELL:
1922 [ # # ]: 0 : if ( bHasHAlign )
1923 [ # # ][ # # ]: 0 : rSet.Put( SvxHorJustifyItem( eHAlign, nWhich ));
[ # # ]
1924 : 0 : break;
1925 : : case SID_V_ALIGNCELL:
1926 [ # # ]: 0 : if ( bHasVAlign )
1927 [ # # ][ # # ]: 0 : rSet.Put( SvxVerJustifyItem( eVAlign, nWhich ));
[ # # ]
1928 : 0 : break;
1929 : :
1930 : : // pseudo slots for Format menu
1931 : : case SID_ALIGN_ANY_HDEFAULT:
1932 : : case SID_ALIGN_ANY_LEFT:
1933 : : case SID_ALIGN_ANY_HCENTER:
1934 : : case SID_ALIGN_ANY_RIGHT:
1935 : : case SID_ALIGN_ANY_JUSTIFIED:
1936 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem( nWhich, bHasHAlign && (eHAlign == lclConvertSlotToHAlign( nWhich )) ) );
[ # # ][ # # ]
[ # # ]
1937 : 0 : break;
1938 : : case SID_ALIGN_ANY_VDEFAULT:
1939 : : case SID_ALIGN_ANY_TOP:
1940 : : case SID_ALIGN_ANY_VCENTER:
1941 : : case SID_ALIGN_ANY_BOTTOM:
1942 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem( nWhich, bHasVAlign && (eVAlign == lclConvertSlotToVAlign( nWhich )) ) );
[ # # ][ # # ]
[ # # ]
1943 : 0 : break;
1944 : : }
1945 [ # # ]: 0 : nWhich = aIter.NextWhich();
1946 [ # # ]: 0 : }
1947 : 0 : }
1948 : :
1949 : 816 : void ScFormatShell::GetNumFormatState( SfxItemSet& rSet )
1950 : : {
1951 : 816 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
1952 [ + - ]: 816 : ScDocument* pDoc = pViewData->GetDocument();
1953 [ + - ]: 816 : short nType = GetCurrentNumberFormatType();
1954 : :
1955 [ + - ]: 816 : SfxWhichIter aIter(rSet);
1956 [ + - ]: 816 : sal_uInt16 nWhich = aIter.FirstWhich();
1957 [ + + ]: 1776 : while ( nWhich )
1958 : : {
1959 [ - + + + : 960 : switch ( nWhich )
+ - - ]
1960 : : {
1961 : : case SID_NUMBER_FORMAT:
1962 : : {
1963 [ # # ]: 0 : String aFormatCode; // bleibt leer, wenn dont-care
1964 : :
1965 [ # # ]: 0 : const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
1966 [ # # ][ # # ]: 0 : if ( rAttrSet.GetItemState( ATTR_VALUE_FORMAT ) != SFX_ITEM_DONTCARE )
1967 : : {
1968 : : sal_uLong nNumberFormat = ((const SfxUInt32Item&)rAttrSet.Get(
1969 [ # # ]: 0 : ATTR_VALUE_FORMAT )).GetValue();
1970 : :
1971 [ # # ]: 0 : SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
1972 [ # # ]: 0 : const SvNumberformat* pFormatEntry = pFormatter->GetEntry( nNumberFormat );
1973 [ # # ]: 0 : if ( pFormatEntry )
1974 [ # # ]: 0 : aFormatCode = pFormatEntry->GetFormatstring();
1975 : : }
1976 : :
1977 [ # # ][ # # ]: 0 : rSet.Put( SfxStringItem( nWhich, aFormatCode ) );
[ # # ][ # # ]
1978 : : }
1979 : 0 : break;
1980 : : case SID_NUMBER_SCIENTIFIC:
1981 [ + - ][ + - ]: 240 : rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_SCIENTIFIC)) );
[ + - ]
1982 : 240 : break;
1983 : : case SID_NUMBER_DATE:
1984 [ + - ][ + - ]: 240 : rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_DATE)) );
[ + - ]
1985 : 240 : break;
1986 : : case SID_NUMBER_CURRENCY:
1987 [ + - ][ + - ]: 240 : rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_CURRENCY)) );
[ + - ]
1988 : 240 : break;
1989 : : case SID_NUMBER_PERCENT:
1990 [ + - ][ + - ]: 240 : rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_PERCENT)) );
[ + - ]
1991 : 240 : break;
1992 : : case SID_NUMBER_TIME:
1993 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem(nWhich, (nType & NUMBERFORMAT_TIME)) );
[ # # ]
1994 : 0 : break;
1995 : : }
1996 [ + - ]: 960 : nWhich = aIter.NextWhich();
1997 [ + - ]: 816 : }
1998 : 816 : }
1999 : :
2000 : :
2001 : 0 : void ScFormatShell::ExecuteTextDirection( SfxRequest& rReq )
2002 : : {
2003 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2004 : 0 : pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
2005 [ # # ]: 0 : if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
2006 : : {
2007 : 0 : SC_MOD()->InputEnterHandler();
2008 : 0 : pTabViewShell->UpdateInputHandler();
2009 : : }
2010 : :
2011 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
2012 [ # # # ]: 0 : switch( nSlot )
2013 : : {
2014 : : case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
2015 : : case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
2016 : : {
2017 : 0 : sal_Bool bVert = (nSlot == SID_TEXTDIRECTION_TOP_TO_BOTTOM);
2018 [ # # ][ # # ]: 0 : ScPatternAttr aAttr( GetViewData()->GetDocument()->GetPool() );
[ # # ]
2019 : 0 : SfxItemSet& rItemSet = aAttr.GetItemSet();
2020 [ # # ][ # # ]: 0 : rItemSet.Put( SfxBoolItem( ATTR_STACKED, bVert ) );
[ # # ]
2021 [ # # ][ # # ]: 0 : rItemSet.Put( SfxBoolItem( ATTR_VERTICAL_ASIAN, bVert ) );
[ # # ]
2022 [ # # ]: 0 : pTabViewShell->ApplySelectionPattern( aAttr );
2023 [ # # ][ # # ]: 0 : pTabViewShell->AdjustBlockHeight();
2024 : : }
2025 : 0 : break;
2026 : :
2027 : : case SID_ATTR_PARA_LEFT_TO_RIGHT:
2028 : : case SID_ATTR_PARA_RIGHT_TO_LEFT:
2029 : : {
2030 : : SvxFrameDirection eDirection = ( nSlot == SID_ATTR_PARA_LEFT_TO_RIGHT ) ?
2031 : 0 : FRMDIR_HORI_LEFT_TOP : FRMDIR_HORI_RIGHT_TOP;
2032 [ # # ]: 0 : pTabViewShell->ApplyAttr( SvxFrameDirectionItem( eDirection, ATTR_WRITINGDIR ) );
2033 : : }
2034 : 0 : break;
2035 : : }
2036 : 0 : }
2037 : :
2038 : 2381 : void ScFormatShell::GetTextDirectionState( SfxItemSet& rSet )
2039 : : {
2040 : 2381 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2041 [ + - ]: 2381 : const SfxItemSet& rAttrSet = pTabViewShell->GetSelectionPattern()->GetItemSet();
2042 : :
2043 : : sal_Bool bVertDontCare =
2044 [ + - ]: 2381 : (rAttrSet.GetItemState( ATTR_VERTICAL_ASIAN ) == SFX_ITEM_DONTCARE) ||
2045 [ + - ][ + - ]: 2381 : (rAttrSet.GetItemState( ATTR_STACKED ) == SFX_ITEM_DONTCARE);
[ - + ]
2046 : : sal_Bool bLeftRight = !bVertDontCare &&
2047 [ + - ][ + - ]: 2381 : !((const SfxBoolItem&) rAttrSet.Get( ATTR_STACKED )).GetValue();
[ + - ]
2048 : : sal_Bool bTopBottom = !bVertDontCare && !bLeftRight &&
2049 [ + - ][ - + ]: 2381 : ((const SfxBoolItem&) rAttrSet.Get( ATTR_VERTICAL_ASIAN )).GetValue();
[ # # ][ # # ]
2050 : :
2051 [ + - ]: 2381 : sal_Bool bBidiDontCare = (rAttrSet.GetItemState( ATTR_WRITINGDIR ) == SFX_ITEM_DONTCARE);
2052 : 2381 : EEHorizontalTextDirection eBidiDir = EE_HTEXTDIR_DEFAULT;
2053 [ + - ]: 2381 : if ( !bBidiDontCare )
2054 : : {
2055 : : SvxFrameDirection eCellDir = (SvxFrameDirection)((const SvxFrameDirectionItem&)
2056 [ + - ]: 2381 : rAttrSet.Get( ATTR_WRITINGDIR )).GetValue();
2057 [ + - ]: 2381 : if ( eCellDir == FRMDIR_ENVIRONMENT )
2058 : : eBidiDir = (EEHorizontalTextDirection)GetViewData()->GetDocument()->
2059 [ + - ][ + - ]: 2381 : GetEditTextDirection( GetViewData()->GetTabNo() );
2060 [ # # ]: 0 : else if ( eCellDir == FRMDIR_HORI_RIGHT_TOP )
2061 : 0 : eBidiDir = EE_HTEXTDIR_R2L;
2062 : : else
2063 : 0 : eBidiDir = EE_HTEXTDIR_L2R;
2064 : : }
2065 : :
2066 [ + - ]: 2381 : SvtLanguageOptions aLangOpt;
2067 [ + - ]: 2381 : sal_Bool bDisableCTLFont = !aLangOpt.IsCTLFontEnabled();
2068 [ + - ]: 2381 : sal_Bool bDisableVerticalText = !aLangOpt.IsVerticalTextEnabled();
2069 : :
2070 [ + - ]: 2381 : SfxWhichIter aIter( rSet );
2071 [ + - ]: 2381 : sal_uInt16 nWhich = aIter.FirstWhich();
2072 [ + + ]: 5001 : while( nWhich )
2073 : : {
2074 [ + + + ]: 2620 : switch( nWhich )
2075 : : {
2076 : : case SID_TEXTDIRECTION_LEFT_TO_RIGHT:
2077 : : case SID_TEXTDIRECTION_TOP_TO_BOTTOM:
2078 [ + - ]: 480 : if ( bDisableVerticalText )
2079 [ + - ]: 480 : rSet.DisableItem( nWhich );
2080 : : else
2081 : : {
2082 [ # # ]: 0 : if( bVertDontCare )
2083 [ # # ]: 0 : rSet.InvalidateItem( nWhich );
2084 [ # # ]: 0 : else if ( nWhich == SID_TEXTDIRECTION_LEFT_TO_RIGHT )
2085 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem( nWhich, bLeftRight ) );
[ # # ]
2086 : : else
2087 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem( nWhich, bTopBottom ) );
[ # # ]
2088 : : }
2089 : 480 : break;
2090 : :
2091 : : case SID_ATTR_PARA_LEFT_TO_RIGHT:
2092 : : case SID_ATTR_PARA_RIGHT_TO_LEFT:
2093 [ + - ]: 878 : if ( bDisableCTLFont )
2094 [ + - ]: 878 : rSet.DisableItem( nWhich );
2095 : : else
2096 : : {
2097 [ # # ]: 0 : if ( bTopBottom )
2098 [ # # ]: 0 : rSet.DisableItem( nWhich );
2099 [ # # ]: 0 : else if ( bBidiDontCare )
2100 [ # # ]: 0 : rSet.InvalidateItem( nWhich );
2101 [ # # ]: 0 : else if ( nWhich == SID_ATTR_PARA_LEFT_TO_RIGHT )
2102 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_L2R ) );
[ # # ]
2103 : : else
2104 [ # # ][ # # ]: 0 : rSet.Put( SfxBoolItem( nWhich, eBidiDir == EE_HTEXTDIR_R2L ) );
[ # # ]
2105 : : }
2106 : : }
2107 [ + - ]: 2620 : nWhich = aIter.NextWhich();
2108 [ + - ][ + - ]: 2381 : }
2109 : 2381 : }
2110 : :
2111 : 0 : void ScFormatShell::ExecFormatPaintbrush( SfxRequest& rReq )
2112 : : {
2113 [ # # ]: 0 : ScViewFunc* pView = pViewData->GetView();
2114 [ # # ]: 0 : if ( pView->HasPaintBrush() )
2115 : : {
2116 : : // cancel paintbrush mode
2117 : 0 : pView->ResetBrushDocument();
2118 : : }
2119 : : else
2120 : : {
2121 : 0 : sal_Bool bLock = false;
2122 : 0 : const SfxItemSet *pArgs = rReq.GetArgs();
2123 [ # # ][ # # ]: 0 : if( pArgs && pArgs->Count() >= 1 )
[ # # ]
2124 [ # # ]: 0 : bLock = static_cast<const SfxBoolItem&>(pArgs->Get(SID_FORMATPAINTBRUSH)).GetValue();
2125 : :
2126 : : // in case of multi selection, deselect all and use the cursor position
2127 : 0 : ScRange aDummy;
2128 [ # # ][ # # ]: 0 : if ( pViewData->GetSimpleArea(aDummy) != SC_MARK_SIMPLE )
2129 [ # # ]: 0 : pView->Unmark();
2130 : :
2131 [ # # ][ # # ]: 0 : ScDocument* pBrushDoc = new ScDocument( SCDOCMODE_CLIP );
2132 [ # # ]: 0 : pView->CopyToClip( pBrushDoc, false, true );
2133 [ # # ]: 0 : pView->SetBrushDocument( pBrushDoc, bLock );
2134 : : }
2135 : 0 : }
2136 : :
2137 : 268 : void ScFormatShell::StateFormatPaintbrush( SfxItemSet& rSet )
2138 : : {
2139 [ - + ]: 268 : if ( pViewData->HasEditView( pViewData->GetActivePart() ) )
2140 : 0 : rSet.DisableItem( SID_FORMATPAINTBRUSH );
2141 : : else
2142 [ + - ]: 268 : rSet.Put( SfxBoolItem( SID_FORMATPAINTBRUSH, pViewData->GetView()->HasPaintBrush() ) );
2143 : 268 : }
2144 : :
2145 : 816 : short ScFormatShell::GetCurrentNumberFormatType()
2146 : : {
2147 : 816 : short nType = NUMBERFORMAT_ALL;
2148 [ + - ]: 816 : ScDocument* pDoc = GetViewData()->GetDocument();
2149 [ + - ][ + - ]: 816 : ScMarkData aMark(GetViewData()->GetMarkData());
2150 [ + - ]: 816 : const SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
2151 [ - + ]: 816 : if (!pFormatter)
2152 : 0 : return nType;
2153 : :
2154 : : // TODO: Find out how to get a selected table range in case multiple tables
2155 : : // are selected. Currently we only check for the current active table.
2156 : :
2157 [ + - ][ - + ]: 816 : if ( aMark.IsMarked() || aMark.IsMultiMarked() )
[ - + ]
2158 : : {
2159 [ # # ]: 0 : aMark.MarkToMulti();
2160 : 0 : ScRange aRange;
2161 [ # # ]: 0 : aMark.GetMultiMarkArea(aRange);
2162 : :
2163 : 0 : const ScMarkArray* pArray = aMark.GetArray();
2164 [ # # ]: 0 : if (!pArray)
2165 : 0 : return nType;
2166 : :
2167 : 0 : short nComboType = NUMBERFORMAT_ALL;
2168 : 0 : bool bFirstItem = true;
2169 [ # # ]: 0 : for (SCCOL nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); ++nCol)
2170 : : {
2171 : 0 : const ScMarkArray& rColArray = pArray[nCol];
2172 [ # # ]: 0 : if (!rColArray.HasMarks())
2173 : 0 : continue;
2174 : :
2175 : : SCROW nRow1, nRow2;
2176 [ # # ]: 0 : ScMarkArrayIter aMarkIter(&rColArray);
2177 [ # # ][ # # ]: 0 : while (aMarkIter.Next(nRow1, nRow2))
2178 : : {
2179 : 0 : ScRange aColRange(nCol, nRow1, aRange.aStart.Tab());
2180 : 0 : aColRange.aEnd.SetRow(nRow2);
2181 [ # # ]: 0 : sal_uInt32 nNumFmt = pDoc->GetNumberFormat(aColRange);
2182 [ # # ]: 0 : const SvNumberformat* pEntry = pFormatter->GetEntry(nNumFmt);
2183 [ # # ]: 0 : if (!pEntry)
2184 : 0 : return 0;
2185 : :
2186 : 0 : short nThisType = pEntry->GetType();
2187 [ # # ]: 0 : if (bFirstItem)
2188 : : {
2189 : 0 : bFirstItem = false;
2190 : 0 : nComboType = nThisType;
2191 : : }
2192 [ # # ]: 0 : else if (nComboType != nThisType)
2193 : : // mixed number format type.
2194 : 0 : return NUMBERFORMAT_ALL;
2195 : : }
2196 [ # # ][ # # ]: 0 : }
2197 : 0 : nType = nComboType;
2198 : : }
2199 : : else
2200 : : {
2201 : : sal_uInt32 nNumFmt;
2202 : 816 : pDoc->GetNumberFormat( pViewData->GetCurX(), pViewData->GetCurY(),
2203 [ + - ]: 1632 : pViewData->GetTabNo(), nNumFmt );
2204 [ + - ]: 816 : const SvNumberformat* pEntry = pFormatter->GetEntry( nNumFmt );
2205 [ + - ]: 816 : nType = pEntry ? pEntry->GetType() : 0;
2206 : : }
2207 [ + - ]: 816 : return nType;
2208 : : }
2209 : :
2210 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|