Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #include "ParaLineSpacingControl.hxx"
20 : #include "ParaPropertyPanel.hrc"
21 : #include <sfx2/sidebar/ResourceDefinitions.hrc>
22 : #include <svx/dialogs.hrc>
23 : #include <svx/dialmgr.hxx>
24 : #include <unotools/viewoptions.hxx>
25 : #include <editeng/kernitem.hxx>
26 : #include <sfx2/bindings.hxx>
27 : #include <sfx2/dispatch.hxx>
28 : #include <sfx2/sidebar/Theme.hxx>
29 : #include <svtools/unitconv.hxx>
30 : #include <vcl/settings.hxx>
31 :
32 : #define _DEFAULT_LINE_SPACING 200
33 : #define FIX_DIST_DEF 283
34 : #define LINESPACE_1 100
35 : #define LINESPACE_15 150
36 : #define LINESPACE_2 200
37 : #define LINESPACE_115 115
38 :
39 : #define LLINESPACE_1 0
40 : #define LLINESPACE_15 1
41 : #define LLINESPACE_2 2
42 : #define LLINESPACE_PROP 3
43 : #define LLINESPACE_MIN 4
44 : #define LLINESPACE_DURCH 5
45 : #define LLINESPACE_FIX 6
46 :
47 : #define DO_NOT_CUSTOM false
48 : #define USE_CUSTOM true
49 :
50 : #define LSP_POS_GLOBAL_VALUE "Line_Spacing_Pos"
51 : #define LSP_LV_GLOBAL_VALUE "Line_Spacing_Lv"
52 : #define BEGIN_VALUE 28
53 :
54 : using namespace svx::sidebar;
55 :
56 0 : ParaLineSpacingControl::ParaLineSpacingControl(vcl::Window* pParent, svx::sidebar::ParaPropertyPanel& rPanel)
57 0 : : PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_LINESPACING))
58 : , mbUseLineSPCustom (false)
59 : , mbLineSPDisable (false)
60 : , mrParaPropertyPanel(rPanel)
61 : , mpBindings(NULL)
62 : , nMinFixDist(BEGIN_VALUE)
63 : , pActLineDistFld(&aLineDistAtPercentBox)
64 0 : , maLineSpacing(ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES( LINE_SPACING ) )
65 0 : , maCustomFT ( this, SVX_RES( FT_CUSTOM ) )
66 0 : , maLSpacingFT ( this, SVX_RES( FT_LINE_SPACING ) )
67 0 : , aLineDist( this, SVX_RES( LB_LINE_SPACING ))
68 0 : , maOfFT ( this, SVX_RES( FT_OF ) )
69 0 : , aLineDistAtPercentBox ( this, SVX_RES( ED_SBINDE_LINEDISTPERCENT ) )
70 0 : , aLineDistAtMetricBox ( this, SVX_RES( ED_SBINDE_LINEDISTPOINT ) )
71 0 : , maSpacing1 (SVX_RES(IMG_SPACING1))
72 0 : , maSpacing115 (SVX_RES(IMG_SPACING115))
73 0 : , maSpacing15 (SVX_RES(IMG_SPACING15))
74 0 : , maSpacing2 (SVX_RES(IMG_SPACING2))
75 0 : , maSelSpacing1 (SVX_RES(IMG_SEL_SPACING1))
76 0 : , maSelSpacing115 (SVX_RES(IMG_SEL_SPACING115))
77 0 : , maSelSpacing15 (SVX_RES(IMG_SEL_SPACING15))
78 0 : , maSelSpacing2 (SVX_RES(IMG_SEL_SPACING2))
79 0 : , maImgCus (SVX_RES(IMG_PARA_CUSTOM))
80 0 : , maImgCusGrey (SVX_RES(IMG_PARA_CUSTOM_GRAY))
81 0 : , maStrCus (SVX_RESSTR(STR_LCVALUE))
82 : , mpImg(NULL)
83 : , mpImgSel(NULL)
84 : , mpStr(NULL)
85 : , mpStrTip(NULL)
86 0 : , maLine(SVX_RESSTR(STR_LSPACING))
87 0 : , maOf(SVX_RESSTR(STR_LS_OF))
88 : , maValue( 0 )
89 0 : , maPos( 0 )
90 : {
91 0 : initial();
92 0 : FreeResource();
93 0 : mpBindings = mrParaPropertyPanel.GetBindings();
94 : // m_eLNSpaceUnit = mrParaPropertyPanel.maLNSpaceControl.GetCoreMetric();
95 0 : m_eLNSpaceUnit = SFX_MAPUNIT_100TH_MM;
96 0 : }
97 0 : ParaLineSpacingControl::~ParaLineSpacingControl()
98 : {
99 0 : delete[] mpImg;
100 0 : delete[] mpImgSel;
101 0 : delete[] mpStr;
102 0 : delete[] mpStrTip;
103 0 : }
104 :
105 0 : void ParaLineSpacingControl::initial()
106 : {
107 0 : maLineSpacing.SetStyle( maLineSpacing.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT );
108 :
109 : maLineSpacing.SetControlBackground(
110 0 : GetSettings().GetStyleSettings().GetHighContrastMode()
111 0 : ? GetSettings().GetStyleSettings().GetMenuColor()
112 0 : : sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
113 : maLineSpacing.SetColor(
114 0 : GetSettings().GetStyleSettings().GetHighContrastMode()
115 0 : ? GetSettings().GetStyleSettings().GetMenuColor()
116 0 : : sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
117 : maLineSpacing.SetBackground(
118 0 : GetSettings().GetStyleSettings().GetHighContrastMode()
119 0 : ? GetSettings().GetStyleSettings().GetMenuColor()
120 0 : : sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
121 :
122 0 : mpImg = new Image[4];
123 0 : mpImg[0] = maSpacing1;
124 0 : mpImg[1] = maSpacing115;
125 0 : mpImg[2] = maSpacing15;
126 0 : mpImg[3] = maSpacing2;
127 :
128 0 : mpImgSel = new Image[4];
129 0 : mpImgSel[0] = maSelSpacing1;
130 0 : mpImgSel[1] = maSelSpacing115;
131 0 : mpImgSel[2] = maSelSpacing15;
132 0 : mpImgSel[3] = maSelSpacing2;
133 :
134 0 : mpStr = new OUString[4];
135 0 : mpStr[0] = SVX_RESSTR(STR_SPACING1);
136 0 : mpStr[1] = SVX_RESSTR(STR_SPACING115);
137 0 : mpStr[2] = SVX_RESSTR(STR_SPACING15);
138 0 : mpStr[3] = SVX_RESSTR(STR_SPACING2);
139 :
140 0 : mpStrTip = new OUString[4];
141 0 : mpStrTip[0] = SVX_RESSTR(STR_LS_SINGLE);
142 0 : mpStrTip[1] = SVX_RESSTR(STR_LS_115);
143 0 : mpStrTip[2] = SVX_RESSTR(STR_LS_15);
144 0 : mpStrTip[3] = SVX_RESSTR(STR_LS_DOUBLE);
145 0 : for (int i=0;i<4;i++)
146 0 : maLineSpacing.AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]);
147 :
148 0 : maLineSpacing.AddItem( maImgCus, 0, maStrCus, 0 );
149 :
150 0 : SetAllNoSel();
151 0 : Link aLink = LINK(this, ParaLineSpacingControl,VSSelHdl );
152 0 : maLineSpacing.SetSelectHdl(aLink);
153 0 : maLineSpacing.StartSelection();
154 0 : maLineSpacing.Show();
155 :
156 0 : aLink = LINK( this, ParaLineSpacingControl, LineSPDistHdl_Impl );
157 0 : aLineDist.SetSelectHdl(aLink);
158 0 : aLineDist.SelectEntryPos( LLINESPACE_1 ) ;
159 0 : aLink = LINK( this, ParaLineSpacingControl, LineSPDistAtHdl_Impl );
160 0 : aLineDistAtPercentBox.SetModifyHdl( aLink );
161 0 : aLineDistAtMetricBox.SetModifyHdl( aLink );
162 0 : }
163 :
164 :
165 0 : void ParaLineSpacingControl::PopupModeEndCallback()
166 : {
167 0 : if( mbUseLineSPCustom )
168 : {
169 : //maLinePos = mpLineSPPage->maPos;
170 : //maLineValue = mpLineSPPage->maValue;
171 :
172 0 : SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
173 0 : ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq(1);
174 0 : aSeq[0].Name = "maLinePos";
175 0 : aSeq[0].Value <<= ::rtl::OUString::number(maPos);
176 0 : aWinOpt.SetUserData( aSeq );
177 :
178 0 : SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
179 0 : aSeq[0].Name = "maLineValue";
180 0 : aSeq[0].Value <<= ::rtl::OUString::number(maValue);
181 0 : aWinOpt2.SetUserData( aSeq );
182 : }
183 0 : }
184 :
185 0 : void ParaLineSpacingControl::Rearrange(SfxItemState currSPState,FieldUnit currMetricUnit,SvxLineSpacingItem* currSPItem,const ::sfx2::sidebar::EnumContext currentContext)
186 : {
187 0 : SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
188 0 : if ( aWinOpt.Exists() )
189 : {
190 0 : ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData();
191 0 : ::rtl::OUString aTmp;
192 0 : if ( aSeq.getLength())
193 0 : aSeq[0].Value >>= aTmp;
194 :
195 0 : OUString aWinData( aTmp );
196 0 : maPos = (sal_uInt16)aWinData.toInt32();
197 : }
198 :
199 0 : SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
200 0 : if ( aWinOpt2.Exists() )
201 : {
202 0 : ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData();
203 0 : ::rtl::OUString aTmp;
204 0 : if ( aSeq.getLength())
205 0 : aSeq[0].Value >>= aTmp;
206 :
207 0 : OUString aWinData( aTmp );
208 0 : maValue = (sal_uInt16)aWinData.toInt32();
209 : }
210 0 : OUString sHelpText;
211 0 : switch(maPos)
212 : {
213 : case LLINESPACE_1:
214 0 : sHelpText += mpStrTip[0];
215 0 : break;
216 : case LLINESPACE_15:
217 0 : sHelpText += mpStrTip[2];
218 0 : break;
219 : case LLINESPACE_2:
220 0 : sHelpText += mpStrTip[3];
221 0 : break;
222 : case LLINESPACE_PROP:
223 0 : sHelpText +=maLine;
224 0 : sHelpText += "Proportion: ";
225 0 : sHelpText += maOf;
226 0 : sHelpText += OUString::number( maValue );
227 0 : break;
228 : case LLINESPACE_MIN:
229 0 : sHelpText += maLine;
230 0 : sHelpText += "At Least: ";
231 0 : sHelpText += maOf;
232 0 : sHelpText += OUString::number( maValue );
233 0 : break;
234 : case LLINESPACE_DURCH:
235 0 : sHelpText += maLine;
236 0 : sHelpText += "Leading: ";
237 0 : sHelpText += maOf;
238 0 : sHelpText += OUString::number( maValue );
239 0 : break;
240 : case LLINESPACE_FIX:
241 0 : sHelpText += maLine;
242 0 : sHelpText += "Fixed: ";
243 0 : sHelpText += maOf;
244 0 : sHelpText += OUString::number( maValue );
245 0 : break;
246 : }
247 0 : if( !aWinOpt.Exists() && !aWinOpt2.Exists() )
248 0 : mbLineSPDisable = true;
249 : else
250 0 : mbLineSPDisable = false;
251 :
252 0 : if( mbLineSPDisable )
253 0 : maLineSpacing.ReplaceItemImages(5, maImgCusGrey,0);
254 : else
255 : {
256 0 : maLineSpacing.ReplaceItemImages(5, maImgCus,0);
257 0 : maLineSpacing.SetItemText(5,sHelpText);
258 : }
259 :
260 0 : SfxItemState eState = currSPState;
261 :
262 0 : SetFieldUnit( aLineDistAtMetricBox, currMetricUnit );
263 :
264 : // mpLineSPPage->SetAllNoSel();
265 0 : aLineDist.Enable();
266 0 : pActLineDistFld->Enable();
267 0 : pActLineDistFld->SetText( "" );
268 : //bool bValueSetFocus = sal_False; //wj
269 :
270 0 : if( eState >= SfxItemState::DEFAULT )
271 : {
272 : // SfxMapUnit eUnit = maLNSpaceControl.GetCoreMetric();
273 0 : SfxMapUnit eUnit = SFX_MAPUNIT_100TH_MM;
274 0 : m_eLNSpaceUnit = eUnit;
275 :
276 0 : switch( currSPItem->GetLineSpaceRule() )
277 : {
278 : case SVX_LINE_SPACE_AUTO:
279 : {
280 0 : SvxInterLineSpace eInter = currSPItem->GetInterLineSpaceRule();
281 :
282 0 : switch( eInter )
283 : {
284 : case SVX_INTER_LINE_SPACE_OFF:
285 : {
286 0 : aLineDist.SelectEntryPos( LLINESPACE_1 );
287 0 : pActLineDistFld->Disable();
288 0 : pActLineDistFld->SetText( "" );
289 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
290 0 : if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
291 : {
292 0 : maLineSpacing.SelectItem(1);
293 : //bValueSetFocus = sal_True; //wj
294 : }
295 : }
296 0 : break;
297 :
298 : case SVX_INTER_LINE_SPACE_PROP:
299 : {
300 0 : if ( LINESPACE_1 == currSPItem->GetPropLineSpace() )
301 : {
302 0 : aLineDist.SelectEntryPos( LLINESPACE_1 );
303 0 : pActLineDistFld->Disable();
304 0 : pActLineDistFld->SetText( "" );
305 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
306 0 : maLineSpacing.SelectItem(1);
307 : //bValueSetFocus = sal_True; //wj
308 0 : break;
309 : }
310 0 : if ( LINESPACE_15 == currSPItem->GetPropLineSpace() )
311 : {
312 0 : aLineDist.SelectEntryPos( LLINESPACE_15 );
313 0 : pActLineDistFld->Disable();
314 0 : pActLineDistFld->SetText( "" );
315 :
316 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
317 0 : maLineSpacing.SelectItem(3);
318 : //bValueSetFocus = sal_True; //wj
319 0 : break;
320 : }
321 0 : if ( LINESPACE_2 == currSPItem->GetPropLineSpace() )
322 : {
323 0 : aLineDist.SelectEntryPos( LLINESPACE_2 );
324 0 : pActLineDistFld->Disable();
325 0 : pActLineDistFld->SetText( "" );
326 :
327 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
328 0 : maLineSpacing.SelectItem(4);
329 : //bValueSetFocus = sal_True; //wj
330 0 : break;
331 : }
332 :
333 0 : aLineDist.SelectEntryPos( LLINESPACE_PROP );
334 0 : if(pActLineDistFld != &(aLineDistAtPercentBox))
335 : {
336 0 : pActLineDistFld->Disable();
337 0 : pActLineDistFld->Hide();
338 0 : pActLineDistFld = &(aLineDistAtPercentBox);
339 : }
340 : else
341 : {
342 0 : pActLineDistFld = &(aLineDistAtMetricBox);
343 0 : pActLineDistFld->Disable();
344 0 : pActLineDistFld->Hide();
345 0 : pActLineDistFld = &(aLineDistAtPercentBox);
346 : }
347 0 : pActLineDistFld->Enable();
348 0 : pActLineDistFld->Show();
349 : aLineDistAtPercentBox.
350 : SetValue( aLineDistAtPercentBox.Normalize(
351 0 : currSPItem->GetPropLineSpace() ) );
352 :
353 0 : if( currSPItem->GetPropLineSpace() == LINESPACE_115 )
354 : {
355 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
356 0 : maLineSpacing.SelectItem(2);
357 : //bValueSetFocus = sal_True; //wj
358 : }
359 : else
360 : {
361 0 : mbUseLineSPCustom = USE_CUSTOM;
362 0 : maLineSpacing.SetNoSelection();
363 0 : maLineSpacing.SelectItem(0);
364 : }
365 : }
366 0 : break;
367 :
368 : case SVX_INTER_LINE_SPACE_FIX:
369 : {
370 0 : if(pActLineDistFld != &(aLineDistAtMetricBox))
371 : {
372 0 : pActLineDistFld->Disable();
373 0 : pActLineDistFld->Hide();
374 0 : pActLineDistFld = &(aLineDistAtMetricBox);
375 : }
376 : else
377 : {
378 0 : pActLineDistFld = &(aLineDistAtPercentBox);
379 0 : pActLineDistFld->Disable();
380 0 : pActLineDistFld->Hide();
381 0 : pActLineDistFld = &(aLineDistAtMetricBox);
382 : }
383 0 : pActLineDistFld->Enable();
384 0 : pActLineDistFld->Show();
385 0 : maLineSpacing.SetNoSelection();
386 0 : maLineSpacing.SelectItem(0);
387 :
388 : SetMetricValue( aLineDistAtMetricBox,
389 0 : currSPItem->GetInterLineSpace(), eUnit );
390 0 : aLineDist.SelectEntryPos( LLINESPACE_DURCH );
391 :
392 0 : mbUseLineSPCustom = USE_CUSTOM;
393 : }
394 0 : break;
395 : default:
396 0 : break;
397 : }
398 : }
399 0 : break;
400 : case SVX_LINE_SPACE_FIX:
401 : {
402 0 : if(pActLineDistFld != &(aLineDistAtMetricBox))
403 : {
404 0 : pActLineDistFld->Disable();
405 0 : pActLineDistFld->Hide();
406 0 : pActLineDistFld = &(aLineDistAtMetricBox);
407 : }
408 : else
409 : {
410 0 : pActLineDistFld = &(aLineDistAtPercentBox);
411 0 : pActLineDistFld->Disable();
412 0 : pActLineDistFld->Hide();
413 0 : pActLineDistFld = &(aLineDistAtMetricBox);
414 : }
415 0 : pActLineDistFld->Enable();
416 0 : pActLineDistFld->Show();
417 0 : maLineSpacing.SetNoSelection();
418 0 : maLineSpacing.SelectItem(0);
419 :
420 0 : SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
421 0 : aLineDist.SelectEntryPos( LLINESPACE_FIX );
422 :
423 0 : mbUseLineSPCustom = USE_CUSTOM;
424 : }
425 0 : break;
426 :
427 : case SVX_LINE_SPACE_MIN:
428 : {
429 0 : if(pActLineDistFld != &(aLineDistAtMetricBox))
430 : {
431 0 : pActLineDistFld->Disable();
432 0 : pActLineDistFld->Hide();
433 0 : pActLineDistFld = &(aLineDistAtMetricBox);
434 : }
435 : else
436 : {
437 0 : pActLineDistFld = &(aLineDistAtPercentBox);
438 0 : pActLineDistFld->Disable();
439 0 : pActLineDistFld->Hide();
440 0 : pActLineDistFld = &(aLineDistAtMetricBox);
441 : }
442 0 : pActLineDistFld->Enable();
443 0 : pActLineDistFld->Show();
444 0 : maLineSpacing.SetNoSelection();
445 0 : maLineSpacing.SelectItem(0);
446 :
447 0 : SetMetricValue(aLineDistAtMetricBox, currSPItem->GetLineHeight(), eUnit);
448 0 : aLineDist.SelectEntryPos( LLINESPACE_MIN );
449 0 : mbUseLineSPCustom = USE_CUSTOM;
450 : }
451 0 : break;
452 : default:
453 0 : break;
454 : }
455 : }
456 0 : else if( eState == SfxItemState::DISABLED )
457 : {
458 0 : aLineDist.Disable();
459 0 : pActLineDistFld->Enable(false);
460 0 : pActLineDistFld->SetText( "" );
461 0 : maLineSpacing.SetNoSelection();
462 0 : maLineSpacing.SelectItem(0);
463 :
464 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
465 : }
466 : else
467 : {
468 0 : pActLineDistFld->Enable(false);
469 0 : pActLineDistFld->SetText( "" );
470 0 : aLineDist.SetNoSelection();
471 0 : maLineSpacing.SetNoSelection();
472 0 : maLineSpacing.SelectItem(0);
473 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
474 : }
475 :
476 0 : aLineDist.SaveValue();
477 :
478 0 : const sal_uInt16 uCount = aLineDist.GetEntryCount();
479 0 : if( uCount == LLINESPACE_FIX + 1 )
480 : {
481 0 : switch (currentContext.GetCombinedContext_DI())
482 : {
483 : case CombinedEnumContext(Application_DrawImpress, Context_Table):
484 : case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
485 : case CombinedEnumContext(Application_DrawImpress, Context_Draw):
486 : case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
487 : case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
488 : case CombinedEnumContext(Application_Calc, Context_DrawText):
489 : case CombinedEnumContext(Application_WriterVariants, Context_DrawText):
490 : case CombinedEnumContext(Application_WriterVariants, Context_Annotation):
491 : {
492 0 : aLineDist.RemoveEntry(LLINESPACE_FIX);
493 : }
494 : }
495 : }
496 0 : else if( uCount == LLINESPACE_FIX)
497 : {
498 0 : switch (currentContext.GetCombinedContext_DI())
499 : {
500 : case CombinedEnumContext(Application_WriterVariants, Context_Default):
501 : case CombinedEnumContext(Application_WriterVariants, Context_Text):
502 : case CombinedEnumContext(Application_WriterVariants, Context_Table):
503 : {
504 0 : aLineDist.InsertEntry(OUString("Fixed"), LLINESPACE_FIX);
505 : }
506 : }
507 : }
508 0 : maLineSpacing.Format();
509 0 : maLineSpacing.StartSelection();
510 0 : }
511 :
512 0 : void ParaLineSpacingControl::SetAllNoSel()
513 : {
514 0 : maLineSpacing.SelectItem(1);
515 0 : maLineSpacing.SetNoSelection();
516 0 : }
517 :
518 0 : IMPL_LINK( ParaLineSpacingControl, LineSPDistHdl_Impl, ListBox*, pBox )
519 : {
520 0 : maLineSpacing.SetNoSelection();
521 0 : maLineSpacing.SelectItem(0);
522 0 : maLineSpacing.Format();
523 0 : maLineSpacing.StartSelection();
524 :
525 0 : switch( pBox->GetSelectEntryPos() )
526 : {
527 : case LLINESPACE_1:
528 : case LLINESPACE_15:
529 : case LLINESPACE_2:
530 0 : pActLineDistFld->Enable(false);
531 0 : pActLineDistFld->SetText( "" );
532 0 : break;
533 :
534 : case LLINESPACE_DURCH:
535 0 : aLineDistAtPercentBox.Hide();
536 0 : pActLineDistFld = &aLineDistAtMetricBox;
537 0 : aLineDistAtMetricBox.SetMin(0);
538 :
539 :
540 0 : if ( aLineDistAtMetricBox.GetText().isEmpty() )
541 : aLineDistAtMetricBox.SetValue(
542 0 : aLineDistAtMetricBox.Normalize( 0 ) );
543 0 : aLineDistAtPercentBox.Hide();
544 0 : pActLineDistFld->Show();
545 0 : pActLineDistFld->Enable();
546 0 : break;
547 :
548 : case LLINESPACE_MIN:
549 0 : aLineDistAtPercentBox.Hide();
550 0 : pActLineDistFld = &aLineDistAtMetricBox;
551 0 : aLineDistAtMetricBox.SetMin(0);
552 :
553 0 : if ( aLineDistAtMetricBox.GetText().isEmpty() )
554 : aLineDistAtMetricBox.SetValue(
555 0 : aLineDistAtMetricBox.Normalize( 0 ), FUNIT_TWIP );
556 0 : aLineDistAtPercentBox.Hide();
557 0 : pActLineDistFld->Show();
558 0 : pActLineDistFld->Enable();
559 0 : break;
560 :
561 : case LLINESPACE_PROP:
562 0 : aLineDistAtMetricBox.Hide();
563 0 : pActLineDistFld = &aLineDistAtPercentBox;
564 :
565 0 : if ( aLineDistAtPercentBox.GetText().isEmpty() )
566 : aLineDistAtPercentBox.SetValue(
567 0 : aLineDistAtPercentBox.Normalize( 100 ), FUNIT_TWIP );
568 0 : aLineDistAtMetricBox.Hide();
569 0 : pActLineDistFld->Show();
570 0 : pActLineDistFld->Enable();
571 0 : break;
572 : case LLINESPACE_FIX:
573 : {
574 0 : aLineDistAtPercentBox.Hide();
575 0 : pActLineDistFld = &aLineDistAtMetricBox;
576 0 : sal_Int64 nTemp = aLineDistAtMetricBox.GetValue();
577 0 : aLineDistAtMetricBox.SetMin(aLineDistAtMetricBox.Normalize(nMinFixDist), FUNIT_TWIP);
578 :
579 0 : if ( aLineDistAtMetricBox.GetValue() != nTemp )
580 : SetMetricValue( aLineDistAtMetricBox,
581 0 : FIX_DIST_DEF, SFX_MAPUNIT_TWIP );
582 0 : aLineDistAtPercentBox.Hide();
583 0 : pActLineDistFld->Show();
584 0 : pActLineDistFld->Enable();
585 : }
586 0 : break;
587 : }
588 0 : ExecuteLineSpace();
589 0 : return 0;
590 : }
591 :
592 0 : IMPL_LINK_NOARG( ParaLineSpacingControl, LineSPDistAtHdl_Impl )
593 : {
594 0 : ExecuteLineSpace();
595 0 : return (0L);
596 : }
597 :
598 0 : void ParaLineSpacingControl::ExecuteLineSpace()
599 : {
600 0 : aLineDist.SaveValue();
601 0 : maLineSpacing.SetNoSelection();
602 :
603 0 : SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
604 0 : sal_uInt16 nPos = aLineDist.GetSelectEntryPos();
605 :
606 0 : switch ( nPos )
607 : {
608 : case LLINESPACE_1:
609 : case LLINESPACE_15:
610 : case LLINESPACE_2:
611 : {
612 0 : SetLineSpace( aSpacing, nPos );
613 0 : maPos = nPos;
614 : }
615 0 : break;
616 :
617 : case LLINESPACE_PROP:
618 : {
619 : SetLineSpace( aSpacing, nPos,
620 : aLineDistAtPercentBox.Denormalize(
621 0 : (long)aLineDistAtPercentBox.GetValue() ) );
622 0 : maPos = nPos;
623 0 : maValue =aLineDistAtPercentBox.GetValue();
624 : }
625 0 : break;
626 :
627 : case LLINESPACE_MIN:
628 : case LLINESPACE_DURCH:
629 : case LLINESPACE_FIX:
630 : {
631 : SetLineSpace( aSpacing, nPos,
632 0 : GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit ) );
633 0 : maPos = nPos;
634 0 : maValue = GetCoreValue( aLineDistAtMetricBox, m_eLNSpaceUnit );
635 : }
636 0 : break;
637 :
638 : default:
639 : OSL_ENSURE(false, "error!!");
640 0 : break;
641 : }
642 :
643 : mpBindings->GetDispatcher()->Execute(
644 0 : SID_ATTR_PARA_LINESPACE, SfxCallMode::RECORD, &aSpacing, 0L);
645 :
646 0 : mbUseLineSPCustom = USE_CUSTOM;
647 0 : }
648 :
649 0 : void ParaLineSpacingControl::SetLineSpace( SvxLineSpacingItem& rLineSpace,
650 : int eSpace, long lValue )
651 : {
652 0 : switch ( eSpace )
653 : {
654 : case LLINESPACE_1:
655 0 : rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
656 0 : rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
657 0 : break;
658 :
659 : case LLINESPACE_15:
660 0 : rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
661 0 : rLineSpace.SetPropLineSpace( LINESPACE_15 );
662 0 : break;
663 :
664 : case LLINESPACE_2:
665 0 : rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
666 0 : rLineSpace.SetPropLineSpace( LINESPACE_2 );
667 0 : break;
668 :
669 : case LLINESPACE_PROP:
670 0 : rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
671 0 : rLineSpace.SetPropLineSpace( (sal_uInt8)lValue );
672 0 : break;
673 :
674 : case LLINESPACE_MIN:
675 0 : rLineSpace.SetLineHeight( (sal_uInt16)lValue );
676 0 : rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
677 0 : break;
678 :
679 : case LLINESPACE_DURCH:
680 0 : rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
681 0 : rLineSpace.SetInterLineSpace( (sal_uInt16)lValue );
682 0 : break;
683 :
684 : case LLINESPACE_FIX:
685 0 : rLineSpace.SetLineHeight((sal_uInt16)lValue);
686 0 : rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_FIX;
687 0 : rLineSpace.GetInterLineSpaceRule() = SVX_INTER_LINE_SPACE_OFF;
688 0 : break;
689 : }
690 0 : }
691 :
692 0 : IMPL_LINK(ParaLineSpacingControl, VSSelHdl, void *, pControl)
693 : {
694 0 : maLineSpacing.SetNoSelection();
695 0 : bool bClosePop = true;
696 0 : if(pControl == &maLineSpacing)
697 : {
698 0 : sal_uInt16 iPos = maLineSpacing.GetSelectItemId();
699 0 : switch ( iPos )
700 : {
701 : case 1:
702 0 : ExecuteLineSpacing( false, 0 );
703 0 : break;
704 : case 2:
705 0 : ExecuteLineSpacing( false, 3 );
706 0 : break;
707 : case 3:
708 0 : ExecuteLineSpacing( false, 1 );
709 0 : break;
710 : case 4:
711 0 : ExecuteLineSpacing( false, 2 );
712 0 : break;
713 : case 5:
714 : {
715 0 : if(!(mbLineSPDisable))
716 : {
717 : //maPos = mrParaPropertyPanel.maLinePos;
718 0 : aLineDist.SelectEntryPos( maPos ) ;
719 0 : aLineDist.SaveValue();
720 : //maValue = mrParaPropertyPanel.maLineValue;
721 :
722 0 : SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
723 0 : switch(maPos)
724 : {
725 : case LLINESPACE_1:
726 : case LLINESPACE_15:
727 : case LLINESPACE_2:
728 0 : SetLineSpace( aSpacing, maPos );
729 0 : break;
730 :
731 : case LLINESPACE_PROP:
732 : SetLineSpace( aSpacing, maPos,
733 0 : aLineDistAtPercentBox.Denormalize( (long)maValue ) );
734 0 : break;
735 :
736 : case LLINESPACE_MIN:
737 : case LLINESPACE_DURCH:
738 : case LLINESPACE_FIX:
739 0 : SetLineSpace( aSpacing, maPos, (long)maValue );
740 0 : break;
741 : }
742 :
743 : mpBindings->GetDispatcher()->Execute(
744 0 : SID_ATTR_PARA_LINESPACE, SfxCallMode::RECORD, &aSpacing, 0L);
745 :
746 0 : ExecuteLineSpacing( USE_CUSTOM, 0 );
747 : }
748 : else
749 0 : bClosePop = false;
750 : }
751 0 : break;
752 : }
753 : }
754 0 : if(bClosePop)
755 0 : mrParaPropertyPanel.EndSpacingPopupMode();
756 0 : return 0;
757 : }
758 :
759 0 : void ParaLineSpacingControl::ExecuteLineSpacing( bool aIsCustom, sal_uInt16 aEntry )
760 : {
761 0 : if( !aIsCustom )
762 : {
763 0 : aLineDist.SelectEntryPos( aEntry ) ;
764 0 : aLineDist.SaveValue();
765 0 : SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
766 0 : sal_uInt16 nPos = aEntry;
767 0 : if( aEntry == LLINESPACE_PROP )
768 0 : SetLineSpace( aSpacing, nPos, aLineDistAtPercentBox.Denormalize( (long)115 ) );
769 : else
770 0 : SetLineSpace( aSpacing, nPos );
771 :
772 : mpBindings->GetDispatcher()->Execute(
773 0 : SID_ATTR_PARA_LINESPACE, SfxCallMode::RECORD, &aSpacing, 0L);
774 : }
775 :
776 0 : if( !aIsCustom )
777 : {
778 0 : mbUseLineSPCustom = DO_NOT_CUSTOM;
779 0 : mrParaPropertyPanel.EndSpacingPopupMode();
780 : }
781 0 : maLineSpacing.SetNoSelection();
782 594 : }
783 :
784 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|