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 <hintids.hxx>
30 : :
31 : : #include <vcl/msgbox.hxx>
32 : : #include <svl/whiter.hxx>
33 : : #include <svl/stritem.hxx>
34 : : #include <svl/itemiter.hxx>
35 : : #include <svl/ctloptions.hxx>
36 : : #include <swmodule.hxx>
37 : : #include <sfx2/bindings.hxx>
38 : : #include <sfx2/request.hxx>
39 : : #include <editeng/fhgtitem.hxx>
40 : : #include <editeng/adjitem.hxx>
41 : : #include <editeng/lspcitem.hxx>
42 : : #include <editeng/udlnitem.hxx>
43 : : #include <editeng/escpitem.hxx>
44 : : #include <svx/htmlmode.hxx>
45 : : #include <editeng/scripttypeitem.hxx>
46 : : #include <editeng/frmdiritem.hxx>
47 : : #include "paratr.hxx"
48 : :
49 : : #include <fmtinfmt.hxx>
50 : : #include <docsh.hxx>
51 : : #include <wrtsh.hxx>
52 : : #include <view.hxx>
53 : : #include <viewopt.hxx>
54 : : #include <uitool.hxx>
55 : : #include <textsh.hxx>
56 : : #include <num.hxx>
57 : : #include <swundo.hxx>
58 : : #include <fmtcol.hxx>
59 : :
60 : : #include <cmdid.h>
61 : : #include <globals.h>
62 : : #include <shells.hrc>
63 : : #include <SwStyleNameMapper.hxx>
64 : : #include "swabstdlg.hxx"
65 : : #include "chrdlg.hrc"
66 : : const SwTwips lFontInc = 2 * 20; // ==> PointToTwips(2)
67 : : const SwTwips lFontMaxSz = 72 * 20; // ==> PointToTwips(72)
68 : :
69 : :
70 : :
71 : :
72 : 0 : void SwTextShell::ExecCharAttr(SfxRequest &rReq)
73 : : {
74 [ # # ]: 0 : SwWrtShell &rSh = GetShell();
75 : 0 : const SfxItemSet *pArgs = rReq.GetArgs();
76 : 0 : int eState = STATE_TOGGLE;
77 : 0 : sal_uInt16 nWhich = rReq.GetSlot();
78 : :
79 [ # # ]: 0 : if(pArgs )
80 : : {
81 : : const SfxPoolItem* pItem;
82 [ # # ]: 0 : pArgs->GetItemState(nWhich, sal_False, &pItem);
83 : : eState = ((const SfxBoolItem &) pArgs->
84 [ # # ][ # # ]: 0 : Get( nWhich )).GetValue() ? STATE_ON : STATE_OFF;
85 : : }
86 : :
87 : :
88 [ # # ]: 0 : SfxItemSet aSet( GetPool(), RES_CHRATR_BEGIN, RES_CHRATR_END-1 );
89 [ # # ]: 0 : if (STATE_TOGGLE == eState)
90 [ # # ]: 0 : rSh.GetCurAttr( aSet );
91 : :
92 [ # # # # : 0 : switch ( nWhich )
# ]
93 : : {
94 : : case FN_SET_SUB_SCRIPT:
95 : : case FN_SET_SUPER_SCRIPT:
96 : : {
97 : 0 : SvxEscapement eEscape = SVX_ESCAPEMENT_SUBSCRIPT;
98 [ # # # # ]: 0 : switch (eState)
99 : : {
100 : : case STATE_TOGGLE:
101 : : {
102 : : short nTmpEsc = ((const SvxEscapementItem&)
103 [ # # ]: 0 : aSet.Get( RES_CHRATR_ESCAPEMENT )).GetEsc();
104 : : eEscape = nWhich == FN_SET_SUPER_SCRIPT ?
105 : : SVX_ESCAPEMENT_SUPERSCRIPT:
106 [ # # ]: 0 : SVX_ESCAPEMENT_SUBSCRIPT;
107 [ # # ][ # # ]: 0 : if( (nWhich == FN_SET_SUB_SCRIPT && nTmpEsc < 0) ||
[ # # ][ # # ]
108 : : (nWhich == FN_SET_SUPER_SCRIPT && nTmpEsc > 0) )
109 : 0 : eEscape = SVX_ESCAPEMENT_OFF;
110 : :
111 : 0 : SfxBindings& rBind = GetView().GetViewFrame()->GetBindings();
112 [ # # ]: 0 : if( nWhich == FN_SET_SUB_SCRIPT )
113 : : rBind.SetState( SfxBoolItem( FN_SET_SUPER_SCRIPT,
114 [ # # ][ # # ]: 0 : sal_False ) );
[ # # ]
115 : : else
116 : : rBind.SetState( SfxBoolItem( FN_SET_SUB_SCRIPT,
117 [ # # ][ # # ]: 0 : sal_False ) );
[ # # ]
118 : :
119 : : }
120 : 0 : break;
121 : : case STATE_ON:
122 : : eEscape = nWhich == FN_SET_SUPER_SCRIPT ?
123 : : SVX_ESCAPEMENT_SUPERSCRIPT:
124 [ # # ]: 0 : SVX_ESCAPEMENT_SUBSCRIPT;
125 : 0 : break;
126 : : case STATE_OFF:
127 : 0 : eEscape = SVX_ESCAPEMENT_OFF;
128 : 0 : break;
129 : : }
130 [ # # ]: 0 : SvxEscapementItem aEscape( eEscape, RES_CHRATR_ESCAPEMENT );
131 [ # # ]: 0 : if(eEscape == SVX_ESCAPEMENT_SUPERSCRIPT)
132 : 0 : aEscape.GetEsc() = DFLT_ESC_AUTO_SUPER;
133 [ # # ]: 0 : else if(eEscape == SVX_ESCAPEMENT_SUBSCRIPT)
134 : 0 : aEscape.GetEsc() = DFLT_ESC_AUTO_SUB;
135 [ # # ]: 0 : if(eState != STATE_OFF )
136 : : {
137 [ # # ]: 0 : if(eEscape == FN_SET_SUPER_SCRIPT)
138 : 0 : aEscape.GetEsc() *= -1;
139 : : }
140 [ # # ]: 0 : rSh.SetAttr( aEscape );
141 [ # # ]: 0 : rReq.AppendItem( aEscape );
142 [ # # ][ # # ]: 0 : rReq.Done();
143 : : }
144 : 0 : break;
145 : :
146 : : case FN_UPDATE_STYLE_BY_EXAMPLE:
147 [ # # ]: 0 : rSh.QuickUpdateStyle();
148 [ # # ]: 0 : rReq.Done();
149 : 0 : break;
150 : : case FN_UNDERLINE_DOUBLE:
151 : : {
152 : : FontUnderline eUnderline = ((const SvxUnderlineItem&)
153 [ # # ]: 0 : aSet.Get(RES_CHRATR_UNDERLINE)).GetLineStyle();
154 [ # # # # ]: 0 : switch( eState )
155 : : {
156 : : case STATE_TOGGLE:
157 : : eUnderline = eUnderline == UNDERLINE_DOUBLE ?
158 : : UNDERLINE_NONE :
159 [ # # ]: 0 : UNDERLINE_DOUBLE;
160 : 0 : break;
161 : : case STATE_ON:
162 : 0 : eUnderline = UNDERLINE_DOUBLE;
163 : 0 : break;
164 : : case STATE_OFF:
165 : 0 : eUnderline = UNDERLINE_NONE;
166 : 0 : break;
167 : : }
168 [ # # ]: 0 : SvxUnderlineItem aUnderline(eUnderline, RES_CHRATR_UNDERLINE );
169 [ # # ]: 0 : rSh.SetAttr( aUnderline );
170 [ # # ]: 0 : rReq.AppendItem( aUnderline );
171 [ # # ][ # # ]: 0 : rReq.Done();
172 : : }
173 : 0 : break;
174 : : case FN_REMOVE_DIRECT_CHAR_FORMATS:
175 [ # # ][ # # ]: 0 : if( !rSh.HasReadonlySel() && rSh.IsEndPara())
[ # # ][ # # ]
[ # # ]
176 [ # # ]: 0 : rSh.DontExpandFmt();
177 : 0 : break;
178 : : default:
179 : : OSL_FAIL("wrong dispatcher");
180 : 0 : return;
181 [ # # ][ # # ]: 0 : }
182 : : }
183 : :
184 : :
185 : 0 : void SwTextShell::ExecCharAttrArgs(SfxRequest &rReq)
186 : : {
187 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
188 : 0 : const SfxItemSet* pArgs = rReq.GetArgs();
189 [ # # ][ # # ]: 0 : sal_Bool bArgs = pArgs != 0 && pArgs->Count() > 0;
190 : 0 : int bGrow = sal_False;
191 : 0 : SwWrtShell& rWrtSh = GetShell();
192 : 0 : SwTxtFmtColl* pColl = 0;
193 : :
194 : : // nur gesetzt, wenn gesamter Absatz selektiert ist und AutoUpdateFmt gesetzt ist
195 [ # # ][ # # ]: 0 : if( rWrtSh.HasSelection() && rWrtSh.IsSelFullPara() )
[ # # ]
196 : : {
197 : 0 : pColl = rWrtSh.GetCurTxtFmtColl();
198 [ # # ][ # # ]: 0 : if(pColl && !pColl->IsAutoUpdateFmt())
[ # # ]
199 : 0 : pColl = 0;
200 : : }
201 : 0 : SfxItemPool& rPool = GetPool();
202 : 0 : sal_uInt16 nWhich = rPool.GetWhich(nSlot);
203 [ # # # # ]: 0 : switch ( nSlot )
204 : : {
205 : : case FN_TXTATR_INET:
206 : : // Sonderbehandlung der PoolId des SwFmtInetFmt
207 [ # # ]: 0 : if(bArgs)
208 : : {
209 [ # # ]: 0 : const SfxPoolItem& rItem = pArgs->Get(nWhich );
210 : :
211 [ # # ]: 0 : SwFmtINetFmt aINetFmt((const SwFmtINetFmt&)rItem);
212 [ # # ]: 0 : if( USHRT_MAX == aINetFmt.GetVisitedFmtId() )
213 : : {
214 : : aINetFmt.SetVisitedFmtId(
215 [ # # ]: 0 : SwStyleNameMapper::GetPoolIdFromUIName( aINetFmt.GetVisitedFmt(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT));
216 : : }
217 [ # # ]: 0 : if( USHRT_MAX == aINetFmt.GetINetFmtId() )
218 : : {
219 : : aINetFmt.SetINetFmtId(
220 [ # # ]: 0 : SwStyleNameMapper::GetPoolIdFromUIName( aINetFmt.GetINetFmt(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT));
221 : : }
222 : :
223 [ # # ]: 0 : if ( pColl )
224 [ # # ]: 0 : pColl->SetFmtAttr( aINetFmt );
225 [ # # ]: 0 : else rWrtSh.SetAttr( aINetFmt );
226 [ # # ][ # # ]: 0 : rReq.Done();
227 : : }
228 : 0 : break;
229 : :
230 : : case FN_GROW_FONT_SIZE:
231 : 0 : bGrow = sal_True;
232 : : // kein break !!
233 : : case FN_SHRINK_FONT_SIZE:
234 : : {
235 [ # # ]: 0 : SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONTHEIGHT, rPool );
236 [ # # ]: 0 : rWrtSh.GetCurAttr( aSetItem.GetItemSet() );
237 [ # # ]: 0 : SfxItemSet aAttrSet( rPool, aSetItem.GetItemSet().GetRanges() );
238 : :
239 : : const SfxPoolItem* pI;
240 : : static const sal_uInt16 aScrTypes[] = {
241 : : SCRIPTTYPE_LATIN, SCRIPTTYPE_ASIAN, SCRIPTTYPE_COMPLEX, 0 };
242 [ # # ]: 0 : sal_uInt16 nScriptType = rWrtSh.GetScriptType();
243 [ # # ]: 0 : for( const sal_uInt16* pScrpTyp = aScrTypes; *pScrpTyp; ++pScrpTyp )
244 [ # # ][ # # ]: 0 : if( ( nScriptType & *pScrpTyp ) &&
[ # # ][ # # ]
245 : 0 : 0 != ( pI = aSetItem.GetItemOfScript( *pScrpTyp )))
246 : : {
247 [ # # ]: 0 : SvxFontHeightItem aSize( *(const SvxFontHeightItem*)pI );
248 : 0 : SwTwips lSize = (SwTwips) aSize.GetHeight();
249 : :
250 [ # # ]: 0 : if (bGrow)
251 : : {
252 [ # # ]: 0 : if( lSize == lFontMaxSz )
253 : : break; // das wars, hoeher gehts nicht
254 [ # # ]: 0 : if( ( lSize += lFontInc ) > lFontMaxSz )
255 : 0 : lSize = lFontMaxSz;
256 : : }
257 : : else
258 : : {
259 [ # # ]: 0 : if( 4 == lSize )
260 : : break;
261 [ # # ]: 0 : if( ( lSize -= lFontInc ) < 4 )
262 : 0 : lSize = 4;
263 : : }
264 [ # # ]: 0 : aSize.SetHeight( lSize );
265 [ # # ][ # # ]: 0 : aAttrSet.Put( aSize );
[ # # ]
266 : : }
267 [ # # ]: 0 : if( aAttrSet.Count() )
268 : : {
269 [ # # ]: 0 : if( pColl )
270 [ # # ]: 0 : pColl->SetFmtAttr( aAttrSet );
271 : : else
272 [ # # ]: 0 : rWrtSh.SetAttr( aAttrSet );
273 : : }
274 [ # # ][ # # ]: 0 : rReq.Done();
[ # # ]
275 : : }
276 : 0 : break;
277 : :
278 : : default:
279 : : OSL_FAIL("wrong dispatcher");
280 : 0 : return;
281 : : }
282 : : }
283 : :
284 : 0 : void SwTextShell::ExecParaAttr(SfxRequest &rReq)
285 : : {
286 : : SvxAdjust eAdjst;
287 : : sal_uInt8 ePropL;
288 : 0 : const SfxItemSet* pArgs = rReq.GetArgs();
289 : :
290 : : // gleich beide Attribute holen, ist nicht teuerer !!
291 : 0 : SfxItemSet aSet( GetPool(),
292 : : RES_PARATR_LINESPACING, RES_PARATR_ADJUST,
293 : : RES_FRAMEDIR, RES_FRAMEDIR,
294 [ # # ]: 0 : 0 );
295 : :
296 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
297 [ # # # # : 0 : switch (nSlot)
# # # # #
# # ]
298 : : {
299 : : case SID_ATTR_PARA_ADJUST:
300 : : {
301 [ # # ][ # # ]: 0 : if( pArgs && SFX_ITEM_SET == pArgs->GetItemState(RES_PARATR_ADJUST) )
[ # # ][ # # ]
302 : : {
303 [ # # ]: 0 : const SvxAdjustItem& rAdj = (const SvxAdjustItem&) pArgs->Get(RES_PARATR_ADJUST);
304 [ # # ]: 0 : SvxAdjustItem aAdj( rAdj.GetAdjust(), RES_PARATR_ADJUST );
305 [ # # ]: 0 : if ( rAdj.GetAdjust() == SVX_ADJUST_BLOCK )
306 : : {
307 : 0 : aAdj.SetLastBlock( rAdj.GetLastBlock() );
308 : 0 : aAdj.SetOneWord( rAdj.GetOneWord() );
309 : : }
310 : :
311 [ # # ][ # # ]: 0 : aSet.Put(aAdj);
312 : : }
313 : : }
314 : 0 : break;
315 : 0 : case SID_ATTR_PARA_ADJUST_LEFT: eAdjst = SVX_ADJUST_LEFT; goto SET_ADJUST;
316 : 0 : case SID_ATTR_PARA_ADJUST_RIGHT: eAdjst = SVX_ADJUST_RIGHT; goto SET_ADJUST;
317 : 0 : case SID_ATTR_PARA_ADJUST_CENTER: eAdjst = SVX_ADJUST_CENTER; goto SET_ADJUST;
318 : 0 : case SID_ATTR_PARA_ADJUST_BLOCK: eAdjst = SVX_ADJUST_BLOCK; goto SET_ADJUST;
319 : : SET_ADJUST:
320 : : {
321 [ # # ][ # # ]: 0 : aSet.Put(SvxAdjustItem(eAdjst,RES_PARATR_ADJUST));
[ # # ]
322 [ # # ][ # # ]: 0 : rReq.AppendItem( SfxBoolItem( GetPool().GetWhich(nSlot), sal_True ) );
[ # # ][ # # ]
323 : : }
324 : 0 : break;
325 : :
326 : : case SID_ATTR_PARA_LINESPACE:
327 [ # # ][ # # ]: 0 : if(pArgs && SFX_ITEM_SET == pArgs->GetItemState( GetPool().GetWhich(nSlot) ))
[ # # ][ # # ]
[ # # ]
328 : : {
329 : : SvxLineSpacingItem aLineSpace = (const SvxLineSpacingItem&)pArgs->Get(
330 [ # # ][ # # ]: 0 : GetPool().GetWhich(nSlot));
[ # # ]
331 [ # # ][ # # ]: 0 : aSet.Put( aLineSpace );
332 : : }
333 : 0 : break;
334 : 0 : case SID_ATTR_PARA_LINESPACE_10: ePropL = 100; goto SET_LINESPACE;
335 : 0 : case SID_ATTR_PARA_LINESPACE_15: ePropL = 150; goto SET_LINESPACE;
336 : 0 : case SID_ATTR_PARA_LINESPACE_20: ePropL = 200; goto SET_LINESPACE;
337 : :
338 : : SET_LINESPACE:
339 : : {
340 : :
341 [ # # ]: 0 : SvxLineSpacingItem aLineSpacing(ePropL, RES_PARATR_LINESPACING );
342 : 0 : aLineSpacing.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
343 [ # # ]: 0 : if( 100 == ePropL )
344 : 0 : aLineSpacing.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
345 : : else
346 : 0 : aLineSpacing.SetPropLineSpace(ePropL);
347 [ # # ][ # # ]: 0 : aSet.Put( aLineSpacing );
348 : : }
349 : 0 : break;
350 : :
351 : : case SID_ATTR_PARA_LEFT_TO_RIGHT :
352 : : case SID_ATTR_PARA_RIGHT_TO_LEFT :
353 : : {
354 : 0 : SfxItemSet aAdjustSet( GetPool(),
355 [ # # ]: 0 : RES_PARATR_ADJUST, RES_PARATR_ADJUST );
356 [ # # ][ # # ]: 0 : GetShell().GetCurAttr(aAdjustSet);
357 : 0 : sal_Bool bChgAdjust = sal_False;
358 [ # # ]: 0 : SfxItemState eAdjustState = aAdjustSet.GetItemState(RES_PARATR_ADJUST, sal_False);
359 [ # # ]: 0 : if(eAdjustState >= SFX_ITEM_DEFAULT)
360 : : {
361 : : int eAdjust = (int)(( const SvxAdjustItem& )
362 [ # # ]: 0 : aAdjustSet.Get(RES_PARATR_ADJUST)).GetAdjust();
363 : : bChgAdjust = (SVX_ADJUST_LEFT == eAdjust && SID_ATTR_PARA_RIGHT_TO_LEFT == nSlot) ||
364 [ # # ][ # # ]: 0 : (SVX_ADJUST_RIGHT == eAdjust && SID_ATTR_PARA_LEFT_TO_RIGHT == nSlot);
[ # # ][ # # ]
365 : : }
366 : : else
367 : 0 : bChgAdjust = sal_True;
368 : :
369 : : SvxFrameDirection eFrmDirection =
370 : : (SID_ATTR_PARA_LEFT_TO_RIGHT == nSlot) ?
371 : 0 : FRMDIR_HORI_LEFT_TOP : FRMDIR_HORI_RIGHT_TOP;
372 [ # # ][ # # ]: 0 : aSet.Put( SvxFrameDirectionItem( eFrmDirection, RES_FRAMEDIR ) );
[ # # ]
373 : :
374 [ # # ]: 0 : if (bChgAdjust)
375 : : {
376 : : SvxAdjust eAdjust = (SID_ATTR_PARA_LEFT_TO_RIGHT == nSlot) ?
377 : 0 : SVX_ADJUST_LEFT : SVX_ADJUST_RIGHT;
378 [ # # ]: 0 : SvxAdjustItem aAdjust( eAdjust, RES_PARATR_ADJUST );
379 [ # # ]: 0 : aSet.Put( aAdjust );
380 : 0 : aAdjust.SetWhich(SID_ATTR_PARA_ADJUST);
381 [ # # ]: 0 : GetView().GetViewFrame()->GetBindings().SetState( aAdjust );
382 : : // Toggle numbering alignment
383 [ # # ][ # # ]: 0 : const SwNumRule* pCurRule = GetShell().GetCurNumRule();
384 [ # # ]: 0 : if( pCurRule )
385 : : {
386 [ # # ]: 0 : SvxNumRule aRule = pCurRule->MakeSvxNumRule();
387 : :
388 [ # # ]: 0 : for(sal_uInt16 i = 0; i < aRule.GetLevelCount(); i++)
389 : : {
390 [ # # ][ # # ]: 0 : SvxNumberFormat aFmt(aRule.GetLevel(i));
391 [ # # ]: 0 : if(SVX_ADJUST_LEFT == aFmt.GetNumAdjust())
392 : 0 : aFmt.SetNumAdjust( SVX_ADJUST_RIGHT );
393 : :
394 [ # # ]: 0 : else if(SVX_ADJUST_RIGHT == aFmt.GetNumAdjust())
395 : 0 : aFmt.SetNumAdjust( SVX_ADJUST_LEFT );
396 : :
397 [ # # ][ # # ]: 0 : aRule.SetLevel(i, aFmt, aRule.Get(i) != 0);
398 [ # # ]: 0 : }
399 : 0 : SwNumRule aSetRule( pCurRule->GetName(),
400 [ # # ]: 0 : pCurRule->Get( 0 ).GetPositionAndSpaceMode() );
[ # # # # ]
401 [ # # ][ # # ]: 0 : aSetRule.SetSvxRule( aRule, GetShell().GetDoc());
402 : 0 : aSetRule.SetAutoRule( sal_True );
403 : : // no start or continuation of a list - list style is only changed
404 [ # # ][ # # ]: 0 : GetShell().SetCurNumRule( aSetRule, false );
[ # # ][ # # ]
[ # # ][ # # ]
405 [ # # ]: 0 : }
406 [ # # ]: 0 : }
407 : : }
408 : 0 : break;
409 : :
410 : : default:
411 : : OSL_FAIL("wrong dispatcher");
412 : 0 : return;
413 : : }
414 [ # # ]: 0 : SwWrtShell& rWrtSh = GetShell();
415 [ # # ]: 0 : SwTxtFmtColl* pColl = rWrtSh.GetCurTxtFmtColl();
416 [ # # ][ # # ]: 0 : if(pColl && pColl->IsAutoUpdateFmt())
[ # # ]
417 : : {
418 [ # # ]: 0 : rWrtSh.AutoUpdatePara(pColl, aSet);
419 : : }
420 : : else
421 [ # # ]: 0 : rWrtSh.SetAttr( aSet );
422 [ # # ][ # # ]: 0 : rReq.Done();
[ # # ]
423 : : }
424 : :
425 : 0 : void SwTextShell::ExecParaAttrArgs(SfxRequest &rReq)
426 : : {
427 [ # # ]: 0 : SwWrtShell &rSh = GetShell();
428 : 0 : const SfxItemSet *pArgs = rReq.GetArgs();
429 : 0 : const SfxPoolItem *pItem = 0;
430 : :
431 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
432 [ # # ]: 0 : if(pArgs)
433 [ # # ][ # # ]: 0 : pArgs->GetItemState(GetPool().GetWhich(nSlot), sal_False, &pItem);
434 [ # # # # : 0 : switch ( nSlot )
# ]
435 : : {
436 : : case FN_DROP_CHAR_STYLE_NAME:
437 [ # # ]: 0 : if( pItem )
438 : : {
439 [ # # ]: 0 : String sCharStyleName = ((const SfxStringItem*)pItem)->GetValue();
440 [ # # ]: 0 : SfxItemSet aSet(GetPool(), RES_PARATR_DROP, RES_PARATR_DROP, 0L);
441 [ # # ]: 0 : rSh.GetCurAttr(aSet);
442 [ # # ][ # # ]: 0 : SwFmtDrop aDropItem((const SwFmtDrop&)aSet.Get(RES_PARATR_DROP));
443 : 0 : SwCharFmt* pFmt = 0;
444 [ # # ]: 0 : if(sCharStyleName.Len())
445 [ # # ]: 0 : pFmt = rSh.FindCharFmtByName( sCharStyleName );
446 [ # # ]: 0 : aDropItem.SetCharFmt( pFmt );
447 [ # # ]: 0 : aSet.Put(aDropItem);
448 [ # # ][ # # ]: 0 : rSh.SetAttr(aSet);
[ # # ][ # # ]
449 : : }
450 : 0 : break;
451 : : case FN_FORMAT_DROPCAPS:
452 : : {
453 [ # # ]: 0 : if(pItem)
454 : : {
455 [ # # ]: 0 : rSh.SetAttr(*pItem);
456 [ # # ]: 0 : rReq.Done();
457 : : }
458 : : else
459 : : {
460 : 0 : SfxItemSet aSet(GetPool(), RES_PARATR_DROP, RES_PARATR_DROP,
461 [ # # ]: 0 : HINT_END, HINT_END, 0);
462 [ # # ]: 0 : rSh.GetCurAttr(aSet);
463 [ # # ]: 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
464 : : OSL_ENSURE(pFact, "SwAbstractDialogFactory fail!");
465 : :
466 : 0 : SfxAbstractDialog* pDlg = pFact->CreateSfxDialog( GetView().GetWindow(), aSet,
467 [ # # ]: 0 : rSh.GetView().GetViewFrame()->GetFrame().GetFrameInterface(), DLG_SWDROPCAPS );
[ # # # # ]
468 : : OSL_ENSURE(pDlg, "Dialogdiet fail!");
469 [ # # ][ # # ]: 0 : if (pDlg->Execute() == RET_OK)
470 : : {
471 [ # # ]: 0 : rSh.StartAction();
472 [ # # ]: 0 : rSh.StartUndo( UNDO_START );
473 [ # # ][ # # ]: 0 : if ( SFX_ITEM_SET == aSet.GetItemState(HINT_END,sal_False,&pItem) )
474 : : {
475 [ # # ]: 0 : if ( ((SfxStringItem*)pItem)->GetValue().Len() )
476 [ # # ]: 0 : rSh.ReplaceDropTxt(((SfxStringItem*)pItem)->GetValue());
477 : : }
478 [ # # ][ # # ]: 0 : rSh.SetAttr(*pDlg->GetOutputItemSet());
479 [ # # ]: 0 : rSh.StartUndo( UNDO_END );
480 [ # # ]: 0 : rSh.EndAction();
481 [ # # ][ # # ]: 0 : rReq.Done(*pDlg->GetOutputItemSet());
482 : : }
483 [ # # ][ # # ]: 0 : delete pDlg;
[ # # ]
484 : : }
485 : : }
486 : 0 : break;
487 : : case SID_ATTR_PARA_PAGEBREAK:
488 [ # # ]: 0 : if(pItem)
489 : : {
490 [ # # ]: 0 : rSh.SetAttr( *pItem );
491 [ # # ]: 0 : rReq.Done();
492 : : }
493 : 0 : break;
494 : : case SID_ATTR_PARA_MODEL:
495 : : {
496 [ # # ]: 0 : if(pItem)
497 : : {
498 : 0 : SfxItemSet aCoreSet( GetPool(),
499 : : RES_PAGEDESC, RES_PAGEDESC,
500 [ # # ]: 0 : SID_ATTR_PARA_MODEL, SID_ATTR_PARA_MODEL, 0);
501 [ # # ]: 0 : aCoreSet.Put(*pItem);
502 [ # # ]: 0 : SfxToSwPageDescAttr( rSh, aCoreSet);
503 [ # # ]: 0 : rSh.SetAttr(aCoreSet);
504 [ # # ][ # # ]: 0 : rReq.Done();
505 : : }
506 : : }
507 : 0 : break;
508 : :
509 : : default:
510 : : OSL_FAIL("wrong dispatcher");
511 : 0 : return;
512 : : }
513 : : }
514 : :
515 : :
516 : :
517 : 14836 : void SwTextShell::GetAttrState(SfxItemSet &rSet)
518 : : {
519 [ + - ]: 14836 : SwWrtShell &rSh = GetShell();
520 : 14836 : SfxItemPool& rPool = GetPool();
521 [ + - ]: 14836 : SfxItemSet aCoreSet(rPool, aTxtFmtCollSetRange);
522 [ + - ]: 14836 : rSh.GetCurAttr(aCoreSet); // *alle* Textattribute von der Core erfragen
523 : :
524 [ + - ]: 14836 : SfxWhichIter aIter(rSet);
525 [ + - ]: 14836 : sal_uInt16 nSlot = aIter.FirstWhich();
526 : 14836 : sal_Bool bFlag = sal_False;
527 [ + - ]: 14836 : SfxBoolItem aFlagItem;
528 : 14836 : const SfxPoolItem* pItem = 0;
529 : 14836 : int eAdjust = -1; // Illegaler Wert, um DONTCARE zu erkennen
530 [ + - ]: 14836 : SfxItemState eState = aCoreSet.GetItemState(RES_PARATR_ADJUST, sal_False, &pItem);
531 : :
532 [ + + ]: 14836 : if( SFX_ITEM_DEFAULT == eState )
533 [ + - ]: 14831 : pItem = &rPool.GetDefaultItem(RES_PARATR_ADJUST);
534 [ + + ]: 14836 : if( SFX_ITEM_DEFAULT <= eState )
535 : 14832 : eAdjust = (int)(( SvxAdjustItem* ) pItem)->GetAdjust();
536 : :
537 : 14836 : short nEsc = 0;
538 [ + - ]: 14836 : eState = aCoreSet.GetItemState(RES_CHRATR_ESCAPEMENT, sal_False, &pItem);
539 [ + + ]: 14836 : if( SFX_ITEM_DEFAULT == eState )
540 [ + - ]: 14833 : pItem = &rPool.GetDefaultItem(RES_CHRATR_ESCAPEMENT);
541 [ + - ]: 14836 : if( eState >= SFX_ITEM_DEFAULT )
542 : 14836 : nEsc = ((SvxEscapementItem* )pItem)->GetEsc();
543 : :
544 : 14836 : sal_uInt16 nLineSpace = 0;
545 [ + - ]: 14836 : eState = aCoreSet.GetItemState(RES_PARATR_LINESPACING, sal_False, &pItem);
546 [ + - ]: 14836 : if( SFX_ITEM_DEFAULT == eState )
547 [ + - ]: 14836 : pItem = &rPool.GetDefaultItem(RES_PARATR_LINESPACING);
548 [ + - + - ]: 29672 : if( SFX_ITEM_DEFAULT <= eState &&
[ + - ]
549 : 14836 : ((SvxLineSpacingItem* )pItem)->GetLineSpaceRule() == SVX_LINE_SPACE_AUTO )
550 : : {
551 [ + - ]: 14836 : if(SVX_INTER_LINE_SPACE_OFF ==
552 : 14836 : ((SvxLineSpacingItem* )pItem)->GetInterLineSpaceRule())
553 : 14836 : nLineSpace = 100;
554 : : else
555 : 0 : nLineSpace = ((SvxLineSpacingItem* )pItem)->GetPropLineSpace();
556 : : }
557 : :
558 [ + + ]: 37215 : while (nSlot)
559 : : {
560 [ + + + + : 22379 : switch(nSlot)
+ + + + +
+ - - + -
- - + ]
561 : : {
562 : : case FN_SET_SUPER_SCRIPT:
563 : 1327 : bFlag = 0 < nEsc;
564 : 1327 : break;
565 : : case FN_SET_SUB_SCRIPT:
566 : 1327 : bFlag = 0 > nEsc;
567 : 1327 : break;
568 : : case SID_ATTR_PARA_ADJUST_LEFT:
569 [ + + ]: 1327 : if (eAdjust == -1)
570 : : {
571 [ + - ]: 4 : rSet.InvalidateItem( nSlot );
572 : 4 : nSlot = 0;
573 : : }
574 : : else
575 : 1323 : bFlag = SVX_ADJUST_LEFT == eAdjust;
576 : 1327 : break;
577 : : case SID_ATTR_PARA_ADJUST_RIGHT:
578 [ + + ]: 1327 : if (eAdjust == -1)
579 : : {
580 [ + - ]: 4 : rSet.InvalidateItem( nSlot );
581 : 4 : nSlot = 0;
582 : : }
583 : : else
584 : 1323 : bFlag = SVX_ADJUST_RIGHT == eAdjust;
585 : 1327 : break;
586 : : case SID_ATTR_PARA_ADJUST_CENTER:
587 [ + + ]: 1327 : if (eAdjust == -1)
588 : : {
589 [ + - ]: 4 : rSet.InvalidateItem( nSlot );
590 : 4 : nSlot = 0;
591 : : }
592 : : else
593 : 1323 : bFlag = SVX_ADJUST_CENTER == eAdjust;
594 : 1327 : break;
595 : : case SID_ATTR_PARA_ADJUST_BLOCK:
596 : : {
597 [ + + ]: 1327 : if (eAdjust == -1)
598 : : {
599 [ + - ]: 4 : rSet.InvalidateItem( nSlot );
600 : 4 : nSlot = 0;
601 : : }
602 : : else
603 : : {
604 : 1323 : bFlag = SVX_ADJUST_BLOCK == eAdjust;
605 [ + - ][ + - ]: 1323 : sal_uInt16 nHtmlMode = GetHtmlMode(rSh.GetView().GetDocShell());
606 [ + + ][ + - ]: 1323 : if((nHtmlMode & HTMLMODE_ON) && !(nHtmlMode & HTMLMODE_FULL_STYLES ))
607 : : {
608 [ + - ]: 4 : rSet.DisableItem( nSlot );
609 : 4 : nSlot = 0;
610 : : }
611 : : }
612 : : }
613 : 1327 : break;
614 : : case SID_ATTR_PARA_LINESPACE_10:
615 : 1327 : bFlag = nLineSpace == 100;
616 : 1327 : break;
617 : : case SID_ATTR_PARA_LINESPACE_15:
618 : 1327 : bFlag = nLineSpace == 150;
619 : 1327 : break;
620 : : case SID_ATTR_PARA_LINESPACE_20:
621 : 1327 : bFlag = nLineSpace == 200;
622 : 1327 : break;
623 : : case FN_GROW_FONT_SIZE:
624 : : case FN_SHRINK_FONT_SIZE:
625 : : {
626 : : SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONTHEIGHT,
627 [ + - ]: 2654 : *rSet.GetPool() );
628 [ + - ]: 2654 : aSetItem.GetItemSet().Put( aCoreSet, sal_False );
629 [ + - ][ + - ]: 2654 : if( !aSetItem.GetItemOfScript( rSh.GetScriptType() ))
[ - + ]
630 [ # # ]: 0 : rSet.DisableItem( nSlot );
631 [ + - ]: 2654 : nSlot = 0;
632 : : }
633 : 2654 : break;
634 : : case FN_UNDERLINE_DOUBLE:
635 : : {
636 [ # # ]: 0 : eState = aCoreSet.GetItemState(RES_CHRATR_UNDERLINE);
637 [ # # ]: 0 : if( eState >= SFX_ITEM_DEFAULT )
638 : : {
639 : : FontUnderline eUnderline = ((const SvxUnderlineItem&)
640 [ # # ]: 0 : aCoreSet.Get(RES_CHRATR_UNDERLINE)).GetLineStyle();
641 [ # # ][ # # ]: 0 : rSet.Put(SfxBoolItem(nSlot, eUnderline == UNDERLINE_DOUBLE));
[ # # ]
642 : : }
643 : : else
644 [ # # ]: 0 : rSet.InvalidateItem(nSlot);
645 : 0 : nSlot = 0;
646 : : }
647 : 0 : break;
648 : : case SID_ATTR_PARA_ADJUST:
649 [ # # ]: 0 : if (eAdjust == -1)
650 [ # # ]: 0 : rSet.InvalidateItem( nSlot );
651 : : else
652 [ # # ][ # # ]: 0 : rSet.Put(SvxAdjustItem((SvxAdjust)eAdjust, SID_ATTR_PARA_ADJUST ));
[ # # ]
653 : 0 : nSlot = 0;
654 : 0 : break;
655 : :
656 : : case SID_ATTR_PARA_LEFT_TO_RIGHT :
657 : : case SID_ATTR_PARA_RIGHT_TO_LEFT :
658 : : {
659 [ + - ][ + - ]: 4182 : if ( !SW_MOD()->GetCTLOptions().IsCTLFontEnabled() )
[ + - ][ + - ]
660 : : {
661 [ + - ]: 4182 : rSet.DisableItem( nSlot );
662 : 4182 : nSlot = 0;
663 : : }
664 : : else
665 : : {
666 : : // is the item set?
667 [ # # ][ # # ]: 0 : sal_uInt16 nHtmlMode = GetHtmlMode(rSh.GetView().GetDocShell());
668 [ # # ][ # # ]: 0 : if((!(nHtmlMode & HTMLMODE_ON) || (0 != (nHtmlMode & HTMLMODE_SOME_STYLES))) &&
[ # # ][ # # ]
669 [ # # ]: 0 : aCoreSet.GetItemState( RES_FRAMEDIR, sal_False ) >= SFX_ITEM_DEFAULT)
670 : : {
671 : : SvxFrameDirection eFrmDir = (SvxFrameDirection)
672 [ # # ]: 0 : ((const SvxFrameDirectionItem& )aCoreSet.Get(RES_FRAMEDIR)).GetValue();
673 [ # # ]: 0 : if (FRMDIR_ENVIRONMENT == eFrmDir)
674 : : {
675 [ # # ]: 0 : eFrmDir = rSh.IsInRightToLeftText() ?
676 [ # # ]: 0 : FRMDIR_HORI_RIGHT_TOP : FRMDIR_HORI_LEFT_TOP;
677 : : }
678 : : bFlag = (SID_ATTR_PARA_LEFT_TO_RIGHT == nSlot &&
679 : : FRMDIR_HORI_LEFT_TOP == eFrmDir) ||
680 : : (SID_ATTR_PARA_RIGHT_TO_LEFT == nSlot &&
681 [ # # ][ # # ]: 0 : FRMDIR_HORI_RIGHT_TOP == eFrmDir);
[ # # ][ # # ]
682 : : }
683 : : else
684 : : {
685 [ # # ]: 0 : rSet.InvalidateItem(nSlot);
686 : 0 : nSlot = 0;
687 : : }
688 : : }
689 : : }
690 : 4182 : break;
691 : :
692 : : case SID_ATTR_CHAR_LANGUAGE:
693 : : case SID_ATTR_CHAR_KERNING:
694 : : case RES_PARATR_DROP:
695 : : {
696 : : #if OSL_DEBUG_LEVEL > 1
697 : : const SfxPoolItem& rItem = aCoreSet.Get(GetPool().GetWhich(nSlot), sal_True);
698 : : rSet.Put(rItem);
699 : : #else
700 [ # # ][ # # ]: 0 : rSet.Put(aCoreSet.Get( GetPool().GetWhich(nSlot), sal_True));
[ # # ]
701 : : #endif
702 : 0 : nSlot = 0;
703 : : }
704 : 0 : break;
705 : : case SID_ATTR_PARA_MODEL:
706 : : {
707 : 0 : SfxItemSet aTemp(GetPool(),
708 : : RES_PAGEDESC,RES_PAGEDESC,
709 : : SID_ATTR_PARA_MODEL,SID_ATTR_PARA_MODEL,
710 [ # # ]: 0 : 0L);
711 [ # # ]: 0 : aTemp.Put(aCoreSet);
712 [ # # ]: 0 : ::SwToSfxPageDescAttr(aTemp);
713 [ # # ][ # # ]: 0 : rSet.Put(aTemp.Get(SID_ATTR_PARA_MODEL));
714 [ # # ]: 0 : nSlot = 0;
715 : : }
716 : 0 : break;
717 : : case RES_TXTATR_INETFMT:
718 : : {
719 [ # # ]: 0 : SfxItemSet aSet(GetPool(), RES_TXTATR_INETFMT, RES_TXTATR_INETFMT);
720 [ # # ]: 0 : rSh.GetCurAttr(aSet);
721 [ # # ]: 0 : const SfxPoolItem& rItem = aSet.Get(RES_TXTATR_INETFMT, sal_True);
722 [ # # ]: 0 : rSet.Put(rItem);
723 [ # # ]: 0 : nSlot = 0;
724 : : }
725 : 0 : break;
726 : :
727 : : default:
728 : : // Nichts tun
729 : 3600 : nSlot = 0;
730 : 3600 : break;
731 : :
732 : : }
733 [ + + ]: 22379 : if( nSlot )
734 : : {
735 : 11923 : aFlagItem.SetWhich( nSlot );
736 : 11923 : aFlagItem.SetValue( bFlag );
737 [ + - ]: 11923 : rSet.Put( aFlagItem );
738 : : }
739 [ + - ]: 22379 : nSlot = aIter.NextWhich();
740 : : }
741 : :
742 [ + - ][ + - ]: 14836 : rSet.Put(aCoreSet,sal_False);
[ + - ][ + - ]
743 : 14836 : }
744 : :
745 : :
746 : :
747 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|