xref: /trunk/main/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx (revision a68b38df8f36d7e7f7b866ad7a09436e835bfe07)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include "precompiled_svx.hxx"
23 #include <svx/sidebar/ColorControl.hxx>
24 
25 #include "ParaPropertyPanel.hxx"
26 #include "ParaPropertyPanel.hrc"
27 
28 #include "ParaLineSpacingPopup.hxx"
29 #include "ParaLineSpacingControl.hxx"
30 #include "ParaBulletsPopup.hxx"
31 #include "ParaBulletsControl.hxx"
32 #include "ParaNumberingPopup.hxx"
33 #include "ParaNumberingControl.hxx"
34 #include <sfx2/sidebar/Theme.hxx>
35 #include <sfx2/sidebar/propertypanel.hrc>
36 #include <sfx2/sidebar/ControlFactory.hxx>
37 #include <svx/sidebar/PopupContainer.hxx>
38 #include <sfx2/dispatch.hxx>
39 #include <editeng/colritem.hxx>
40 #include <editeng/brshitem.hxx>
41 #include <editeng/lrspitem.hxx>
42 #include <editeng/ulspitem.hxx>
43 #include <vcl/toolbox.hxx>
44 #include <vcl/fixed.hxx>
45 #include <vcl/svapp.hxx>
46 #include <svx/svxids.hrc>
47 #include <svl/intitem.hxx>
48 #include "svx/dialmgr.hxx"
49 #include <sfx2/objsh.hxx>
50 #include <svtools/unitconv.hxx>
51 #include <boost/bind.hpp>
52 using namespace css;
53 using namespace cssu;
54 using ::sfx2::sidebar::Theme;
55 using ::sfx2::sidebar::ControlFactory;
56 
57 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
58 
59 
60 namespace svx {namespace sidebar {
61 #define DEFAULT_VALUE          0
62 #define TOOLBOX_ITEM1          1
63 #define TOOLBOX_ITEM2          2
64 #define TOOLBOX_ITEM3          3
65 #define TOOLBOX_ITEM4          4
66 
67 #define MAX_DURCH             5670
68 
69 #define INDENT_INCREMENT       1
70 #define INDENT_DECREMENT       2
71 #define INDENT_STEP            706
72 #define UL_STEP                58
73 #define UL_INCREMENT           1
74 #define UL_DECREMENT           2
75 
76 #define NEGATIVE_MAX_VALUE              -9999
77 #define BEGIN_VALUE            28
78 #define MAX_SW                  1709400
79 #define MAX_SC_SD               116220200
80 #define NEGA_MAXVALUE          -10000000
81 
82 #define POS_FT_PARA_SPACE                               Point(LogicToPixel(Point(FT_PARA_SPACE_X,FT_PARA_SPACE_Y), MAP_APPFONT))
83 #define POS_FT_PARA_SPACE2                              Point(LogicToPixel(Point(FT_PARA_SPACE_X,FT_PARA_SPACE_Y2), MAP_APPFONT))
84 #define POS_TBX_PARA_SPACE_INC_DEC                      Point(LogicToPixel(Point(TBX_PARA_SPACE_INC_DEC_X,TBX_PARA_SPACE_INC_DEC_Y), MAP_APPFONT))
85 #define POS_TBX_PARA_SPACE_INC_DEC2                     Point(LogicToPixel(Point(TBX_PARA_SPACE_INC_DEC_X,TBX_PARA_SPACE_INC_DEC_Y2), MAP_APPFONT))
86 #define POS_FT_PARA_INDENT                              Point(LogicToPixel(Point(FT_PARA_INDENT_X,FT_PARA_INDENT_Y), MAP_APPFONT))
87 #define POS_FT_PARA_INDENT2                             Point(LogicToPixel(Point(FT_PARA_INDENT_X,FT_PARA_INDENT_Y2), MAP_APPFONT))
88 #define POS_TBX_PARA_INDENT_INC_DEC                     Point(LogicToPixel(Point(TBX_PARA_INDENT_INC_DEC_X,TBX_PARA_INDENT_INC_DEC_Y), MAP_APPFONT))
89 #define POS_TBX_PARA_INDENT_INC_DEC2                    Point(LogicToPixel(Point(TBX_PARA_INDENT_INC_DEC_X,TBX_PARA_INDENT_INC_DEC_Y2), MAP_APPFONT))
90 #define POS_MBX_TOP_DIST                                Point(LogicToPixel(Point(MBX_TOP_DIST_X,MBX_TOP_DIST_Y), MAP_APPFONT))
91 #define POS_MBX_TOP_DIST2                               Point(LogicToPixel(Point(MBX_TOP_DIST_X,MBX_TOP_DIST_Y2), MAP_APPFONT))
92 #define POS_MBX_BOT_DIST                                Point(LogicToPixel(Point(MBX_BOT_DIST_X,MBX_BOT_DIST_Y), MAP_APPFONT))
93 #define POS_MBX_BOT_DIST2                               Point(LogicToPixel(Point(MBX_BOT_DIST_X,MBX_BOT_DIST_Y2), MAP_APPFONT))
94 #define POS_MBX_LEFT_DIST                               Point(LogicToPixel(Point(MBX_LEFT_DIST_X,MBX_LEFT_DIST_Y), MAP_APPFONT))
95 #define POS_MBX_LEFT_DIST2                              Point(LogicToPixel(Point(MBX_LEFT_DIST_X,MBX_LEFT_DIST_Y2), MAP_APPFONT))
96 #define POS_MBX_RIGHT_DIST                              Point(LogicToPixel(Point(MBX_RIGHT_DIST_X,MBX_RIGHT_DIST_Y), MAP_APPFONT))
97 #define POS_MBX_RIGHT_DIST2                             Point(LogicToPixel(Point(MBX_RIGHT_DIST_X,MBX_RIGHT_DIST_Y2), MAP_APPFONT))
98 #define POS_MBX_FLINE_DIST                              Point(LogicToPixel(Point(MBX_FLINE_DIST_X,MBX_FLINE_DIST_Y), MAP_APPFONT))
99 #define POS_MBX_FLINE_DIST2                             Point(LogicToPixel(Point(MBX_FLINE_DIST_X,MBX_FLINE_DIST_Y2), MAP_APPFONT))
100 #define POS_IMG_SPACE1                                  Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE1_Y), MAP_APPFONT))
101 #define POS_IMG_SPACE12                                 Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE1_Y2), MAP_APPFONT))
102 #define POS_IMG_SPACE2                                  Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE2_Y), MAP_APPFONT))
103 #define POS_IMG_SPACE22                                 Point(LogicToPixel(Point(IMG_SPACE_X,IMG_SPACE2_Y2), MAP_APPFONT))
104 #define POS_IMG_INDENT1                                 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT1_Y), MAP_APPFONT))
105 #define POS_IMG_INDENT12                                Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT1_Y2), MAP_APPFONT))
106 #define POS_IMG_INDENT2                                 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT2_Y), MAP_APPFONT))
107 #define POS_IMG_INDENT22                                Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT2_Y2), MAP_APPFONT))
108 #define POS_IMG_INDENT3                                 Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT3_Y), MAP_APPFONT))
109 #define POS_IMG_INDENT32                                Point(LogicToPixel(Point(IMG_INDENT_X,IMG_INDENT3_Y2), MAP_APPFONT))
110 #define TBX_LINE_SPACE                                  Point(LogicToPixel(Point(TBX_LINE_SPACE_X,TBX_LINE_SPACE_Y), MAP_APPFONT))
111 #define TBX_LINE_SPACE2                                 Point(LogicToPixel(Point(TBX_LINE_SPACE_X,TBX_LINE_SPACE_Y2), MAP_APPFONT))
112 
113 #define LINE_POINT1_WHITE                               Point(LogicToPixel(Point(LINE_X_WHITE,LINE_TOP_Y), MAP_APPFONT))
114 #define LINE_POINT2_WHITE                               Point(LogicToPixel(Point(LINE_X_WHITE,LINE_BOT_Y), MAP_APPFONT))
115 #define LINE_POINT3_WHITE                               Point(LogicToPixel(Point(LINE_X_WHITE,LINE_TOP_Y2), MAP_APPFONT))
116 #define LINE_POINT4_WHITE                               Point(LogicToPixel(Point(LINE_X_WHITE,LINE_BOT_Y2), MAP_APPFONT))
117 
118 ParaPropertyPanel* ParaPropertyPanel::Create (
119     Window* pParent,
120     const cssu::Reference<css::frame::XFrame>& rxFrame,
121     SfxBindings* pBindings,
122     const cssu::Reference<css::ui::XSidebar>& rxSidebar)
123 {
124     if (pParent == NULL)
125         throw lang::IllegalArgumentException(A2S("no parent Window given to ParaPropertyPanel::Create"), NULL, 0);
126     if ( ! rxFrame.is())
127         throw lang::IllegalArgumentException(A2S("no XFrame given to ParaPropertyPanel::Create"), NULL, 1);
128     if (pBindings == NULL)
129         throw lang::IllegalArgumentException(A2S("no SfxBindings given to ParaPropertyPanel::Create"), NULL, 2);
130 
131     return new ParaPropertyPanel(
132         pParent,
133         rxFrame,
134         pBindings,
135         rxSidebar);
136 }
137 
138 void ParaPropertyPanel::HandleContextChange (
139     const ::sfx2::sidebar::EnumContext aContext)
140 {
141     if (maContext == aContext)
142     {
143         // Nothing to do.
144         return;
145     }
146 
147     maContext = aContext;
148     switch (maContext.GetCombinedContext_DI())
149     {
150         case CombinedEnumContext(Application_Calc, Context_DrawText):
151             maTBxVertAlign->Show();
152             maTBxVertAlignBackground->Show();
153             maTBxBackColor->Hide();
154             maTBxBackColorBackground->Hide();
155             maTBxNumBullet->Hide();
156             maTBxNumBulletBackground->Hide();
157             ReSize(false);
158             maTbxIndent_IncDec->Show();
159             maTbxIndent_IncDecBackground->Show();
160             maTbxProDemote->Hide();
161             maTbxProDemoteBackground->Hide();
162             break;
163 
164         case CombinedEnumContext(Application_DrawImpress, Context_Draw):
165         case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
166         case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
167             maTBxVertAlign->Hide();
168             maTBxVertAlignBackground->Hide();
169             maTBxBackColor->Hide();
170             maTBxBackColorBackground->Hide();
171             maTBxNumBullet->Show();
172             maTBxNumBulletBackground->Show();
173             ReSize(true);
174             maTbxIndent_IncDec->Hide();
175             maTbxIndent_IncDecBackground->Hide();
176             maTbxProDemote->Show();
177             maTbxProDemoteBackground->Show();
178             break;
179 
180         case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
181             maTBxVertAlign->Show();
182             maTBxVertAlignBackground->Show();
183             maTBxBackColor->Hide();
184             maTBxBackColorBackground->Hide();
185             maTBxNumBullet->Show();
186             maTBxNumBulletBackground->Show();
187             ReSize(true);
188             maTbxIndent_IncDec->Hide();
189             maTbxIndent_IncDecBackground->Hide();
190             maTbxProDemote->Show();
191             maTbxProDemoteBackground->Show();
192             break;
193 
194         case CombinedEnumContext(Application_DrawImpress, Context_Table):
195             maTBxVertAlign->Show();
196             maTBxVertAlignBackground->Show();
197             maTBxBackColor->Hide();
198             maTBxBackColorBackground->Hide();
199             maTBxNumBullet->Show();
200             maTBxNumBulletBackground->Show();
201             ReSize(true);
202             maTbxIndent_IncDec->Hide();
203             maTbxIndent_IncDecBackground->Hide();
204             maTbxProDemote->Show();
205             maTbxProDemoteBackground->Show();
206             break;
207 
208         case CombinedEnumContext(Application_WriterAndWeb, Context_Default):
209         case CombinedEnumContext(Application_WriterAndWeb, Context_Text):
210             maTBxVertAlign->Hide();
211             maTBxVertAlignBackground->Hide();
212             maTBxBackColor->Show();
213             maTBxBackColorBackground->Show();
214             maTBxNumBullet->Show();
215 
216             maTBxNumBulletBackground->Show();
217             ReSize(true);
218             maTbxIndent_IncDec->Show();
219             maTbxIndent_IncDecBackground->Show();
220             maTbxProDemote->Hide();
221             maTbxProDemoteBackground->Hide();
222             break;
223 
224         case CombinedEnumContext(Application_WriterAndWeb, Context_Table):
225             maTBxVertAlign->Show();
226             maTBxVertAlignBackground->Show();
227             maTBxBackColor->Show();
228             maTBxBackColorBackground->Show();
229             maTBxNumBullet->Show();
230             maTBxNumBulletBackground->Show();
231             ReSize(true);
232             maTbxIndent_IncDec->Show();
233             maTbxIndent_IncDecBackground->Show();
234             maTbxProDemote->Hide();
235             maTbxProDemoteBackground->Hide();
236             break;
237 
238         case CombinedEnumContext(Application_WriterAndWeb, Context_DrawText):
239             maTBxVertAlign->Show();
240             maTBxVertAlignBackground->Show();
241             maTBxBackColor->Hide();
242             maTBxBackColorBackground->Hide();
243             maTBxNumBullet->Hide();
244             maTBxNumBulletBackground->Hide();
245             ReSize(false);
246             maTbxIndent_IncDec->Show();
247             maTbxIndent_IncDecBackground->Show();
248             maTbxProDemote->Hide();
249             maTbxProDemoteBackground->Hide();
250             break;
251 
252         case CombinedEnumContext(Application_WriterAndWeb, Context_Annotation):
253             maTBxVertAlign->Hide();
254             maTBxVertAlignBackground->Hide();
255             maTBxBackColor->Hide();
256             maTBxBackColorBackground->Hide();
257             maTBxNumBullet->Hide();
258             maTBxNumBulletBackground->Hide();
259             ReSize(false);
260             maTbxIndent_IncDec->Show();
261             maTbxIndent_IncDecBackground->Show();
262             maTbxProDemote->Hide();
263             maTbxProDemoteBackground->Hide();
264             break;
265 
266         case CombinedEnumContext(Application_Calc, Context_EditCell):
267         case CombinedEnumContext(Application_Calc, Context_Cell):
268         case CombinedEnumContext(Application_Calc, Context_Pivot):
269         case CombinedEnumContext(Application_DrawImpress, Context_Text):
270         case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
271         /*{
272             mpToolBoxScriptSw->Hide();
273             mpToolBoxScript->Show();
274             mpToolBoxSpacing->Show();
275             mpToolBoxHighlight->Hide();
276 
277             Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT);
278             aSize = LogicToPixel( aSize,MapMode(MAP_APPFONT) );
279             aSize.setWidth(GetOutputSizePixel().Width());
280             SetSizePixel(aSize);
281         }*/
282             break;
283 
284         default:
285             break;
286     }
287 }
288 
289 SfxBindings* ParaPropertyPanel::GetBindings()
290 {
291     return mpBindings;
292 }
293 
294 void ParaPropertyPanel::SetupIcons (void)
295 {
296     if (Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
297     {
298     }
299     else
300     {
301     }
302 }
303 
304 void ParaPropertyPanel::DataChanged (const DataChangedEvent& rEvent)
305 {
306     (void)rEvent;
307 
308     SetupIcons();
309 }
310 
311 ParaPropertyPanel::~ParaPropertyPanel()
312 {
313     delete mpLnSPItem;
314 }
315 
316 void ParaPropertyPanel::ReSize(bool bSize)
317 {
318     if(bSize)
319     {
320         //Paragraph spacing
321         maFTUL->SetPosPixel(POS_FT_PARA_SPACE);
322         maTbxUL_IncDec->SetPosPixel(POS_TBX_PARA_SPACE_INC_DEC);
323         maTopDist->SetPosPixel(POS_MBX_TOP_DIST);
324         maBottomDist->SetPosPixel(POS_MBX_BOT_DIST);
325         //Indent
326         maFTIndent->SetPosPixel(POS_FT_PARA_INDENT);
327         maTbxIndent_IncDec->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC);
328         maTbxProDemote->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC);
329         maLeftIndent->SetPosPixel(POS_MBX_LEFT_DIST);
330         maRightIndent->SetPosPixel(POS_MBX_RIGHT_DIST);
331         maFLineIndent->SetPosPixel(POS_MBX_FLINE_DIST);
332         //Line spacing
333         maLineSPTbx->SetPosPixel(TBX_LINE_SPACE);
334         //image
335         maFISpace1.SetPosPixel(POS_IMG_SPACE1);
336         maFISpace2.SetPosPixel(POS_IMG_SPACE2);
337         maFIndent1.SetPosPixel(POS_IMG_INDENT1);
338         maFIndent2.SetPosPixel(POS_IMG_INDENT2);
339         maFIndent3.SetPosPixel(POS_IMG_INDENT3);
340         Size aSize(GetOutputSizePixel().Width(),PARA_SECTIONPAGE_HEIGHT);
341         aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
342         aSize.setWidth(GetOutputSizePixel().Width());
343         SetSizePixel(aSize);
344     }
345     else
346     {
347         //Paragraph spacing
348         maFTUL->SetPosPixel(POS_FT_PARA_SPACE2);
349         maTbxUL_IncDec->SetPosPixel(POS_TBX_PARA_SPACE_INC_DEC2);
350         maTopDist->SetPosPixel(POS_MBX_TOP_DIST2);
351         maBottomDist->SetPosPixel(POS_MBX_BOT_DIST2);
352         //Indent
353         maFTIndent->SetPosPixel(POS_FT_PARA_INDENT2);
354         maTbxIndent_IncDec->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC2);
355         maTbxProDemote->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC2);
356         maLeftIndent->SetPosPixel(POS_MBX_LEFT_DIST2);
357         maRightIndent->SetPosPixel(POS_MBX_RIGHT_DIST2);
358         maFLineIndent->SetPosPixel(POS_MBX_FLINE_DIST2);
359         //Line spacing
360         maLineSPTbx->SetPosPixel(TBX_LINE_SPACE2);
361         //image
362         maFISpace1.SetPosPixel(POS_IMG_SPACE12);
363         maFISpace2.SetPosPixel(POS_IMG_SPACE22);
364         maFIndent1.SetPosPixel(POS_IMG_INDENT12);
365         maFIndent2.SetPosPixel(POS_IMG_INDENT22);
366         maFIndent3.SetPosPixel(POS_IMG_INDENT32);
367         Size aSize(GetOutputSizePixel().Width(),PARA_SECTIONPAGE_HEIGHT_2);
368         aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
369         aSize.setWidth(GetOutputSizePixel().Width());
370         SetSizePixel(aSize);
371     }
372 
373     if (mxSidebar.is())
374         mxSidebar->requestLayout();
375 }
376 
377 void ParaPropertyPanel::EndSpacingPopupMode (void)
378 {
379     maLineSpacePopup.Hide();
380 }
381 
382 void ParaPropertyPanel::EndBulletsPopupMode (void)
383 {
384     //i122054, Missed following line, for collapse the bullets popup
385     maBulletsPopup.Hide();
386 }
387 
388 void ParaPropertyPanel::EndNumberingPopupMode (void)
389 {
390     //i122054, Missed following line, for collapse the numbering popup
391     maNumberingPopup.Hide();
392 }
393 
394 
395 void ParaPropertyPanel::InitToolBoxAlign()
396 {
397     maAlignToolBox->SetItemImage(TOOLBOX_ITEM1,maLeftPara);
398     maAlignToolBox->SetItemImage(TOOLBOX_ITEM2,maCentPara);
399     maAlignToolBox->SetItemImage(TOOLBOX_ITEM3,maRightPara);
400     maAlignToolBox->SetItemImage(TOOLBOX_ITEM4,maJusPara);
401     Link aLink = LINK( this, ParaPropertyPanel, AlignStyleModifyHdl_Impl );
402     maAlignToolBox->SetSelectHdl( aLink );
403     Size aTbxSize (maAlignToolBox->CalcWindowSizePixel());
404     maAlignToolBox->SetOutputSizePixel( aTbxSize );
405 }
406 
407 void ParaPropertyPanel::InitToolBoxVertAlign()
408 {
409     InitImageList(maTBxVertAlign, maVertImageList, maVertImageListH);
410     maTBxVertAlign->SetSelectHdl(LINK(this,ParaPropertyPanel,VertTbxSelectHandler));
411     Size aTbxSize (maTBxVertAlign->CalcWindowSizePixel());
412     maTBxVertAlign->SetOutputSizePixel( aTbxSize );
413 }
414 
415 
416 void ParaPropertyPanel::InitToolBoxIndent()
417 {
418     Link aLink = LINK( this, ParaPropertyPanel, ModifyIndentHdl_Impl );
419     maLeftIndent->SetModifyHdl( aLink );
420     maRightIndent->SetModifyHdl( aLink );
421     maFLineIndent->SetModifyHdl( aLink );
422 
423     if( Application::GetSettings().GetLayoutRTL())
424     {
425         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM1,maIndInc_BD);
426         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM2,maIndDec_BD);
427     }
428     else
429     {
430         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM1,maIndInc);
431         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM2,maIndDec);
432     }
433     maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM3,maIndHang);
434     aLink = LINK( this, ParaPropertyPanel, ClickIndent_IncDec_Hdl_Impl );
435     maTbxIndent_IncDec->SetSelectHdl(aLink);
436     m_eLRSpaceUnit = maLRSpaceControl.GetCoreMetric();
437     Size aTbxSize = maTbxIndent_IncDec->CalcWindowSizePixel();
438     maTbxIndent_IncDec->SetOutputSizePixel( aTbxSize );
439 
440     if( Application::GetSettings().GetLayoutRTL())
441     {
442         maTbxProDemote->SetItemImage(TOOLBOX_ITEM1,maIndInc_BD);
443         maTbxProDemote->SetItemImage(TOOLBOX_ITEM2,maIndDec_BD);
444     }
445     else
446     {
447         maTbxProDemote->SetItemImage(TOOLBOX_ITEM1,maIndInc);
448         maTbxProDemote->SetItemImage(TOOLBOX_ITEM2,maIndDec);
449     }
450     maTbxProDemote->SetItemImage(TOOLBOX_ITEM3,maIndHang);
451     aLink = LINK( this, ParaPropertyPanel, ClickProDemote_Hdl_Impl );
452     maTbxProDemote->SetSelectHdl(aLink);
453     m_eLRSpaceUnit = maLRSpaceControl.GetCoreMetric();
454     aTbxSize = maTbxProDemote->CalcWindowSizePixel();
455     maTbxProDemote->SetOutputSizePixel( aTbxSize );
456 }
457 
458 void ParaPropertyPanel::InitToolBoxBGColor()
459 {
460     mpColorUpdater.reset(new ::svx::ToolboxButtonColorUpdater(SID_BACKGROUND_COLOR, TBI_BACK_COLOR, maTBxBackColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW ));
461 
462     maTBxBackColor->SetItemImage(TBI_BACK_COLOR, GetDisplayBackground().GetColor().IsDark()? maImgBackColorHigh : maImgBackColor);
463     maTBxBackColor->SetItemBits( TBI_BACK_COLOR, maTBxBackColor->GetItemBits( TBI_BACK_COLOR ) | TIB_DROPDOWNONLY );
464 
465     Link aLink = LINK(this, ParaPropertyPanel, ToolBoxBackColorDDHandler);
466     maTBxBackColor->SetDropdownClickHdl ( aLink );
467     maTBxBackColor->SetSelectHdl ( aLink );
468     Size aTbxSize (maTBxBackColor->CalcWindowSizePixel());
469     maTBxBackColor->SetOutputSizePixel( aTbxSize );
470 }
471 
472 void ParaPropertyPanel::InitToolBoxBulletsNumbering()
473 {
474     if( Application::GetSettings().GetLayoutRTL())
475     {
476         maTBxNumBullet->SetItemImage( IID_BULLET, maNumBImageListRTL.GetImage( IID_BULLET ) );
477         maTBxNumBullet->SetItemImage( IID_NUMBER, maNumBImageListRTL.GetImage( IID_NUMBER ) );
478     }
479     else
480         InitImageList(maTBxNumBullet, maNumBImageList, maNumBImageListH);
481 
482     maTBxNumBullet->SetDropdownClickHdl(LINK(this,ParaPropertyPanel,NumBTbxDDHandler));
483     maTBxNumBullet->SetSelectHdl(LINK(this,ParaPropertyPanel,NumBTbxSelectHandler));
484     Size aTbxSize (maTBxNumBullet->CalcWindowSizePixel());
485     maTBxNumBullet->SetOutputSizePixel( aTbxSize );
486 }
487 void ParaPropertyPanel::InitToolBoxSpacing()
488 {
489     Link aLink = LINK( this, ParaPropertyPanel, ULSpaceHdl_Impl );
490     maTopDist->SetModifyHdl(aLink);
491     maBottomDist->SetModifyHdl( aLink );
492 
493     maTbxUL_IncDec->SetItemImage(TOOLBOX_ITEM1,maParInc);
494     maTbxUL_IncDec->SetItemImage(TOOLBOX_ITEM2,maParDec);
495     aLink = LINK( this, ParaPropertyPanel, ClickUL_IncDec_Hdl_Impl );
496     maTbxUL_IncDec->SetSelectHdl(aLink);
497     m_eULSpaceUnit = maULSpaceControl.GetCoreMetric();
498     Size aTbxSize = maTbxUL_IncDec->CalcWindowSizePixel();
499     maTbxUL_IncDec->SetOutputSizePixel( aTbxSize );
500 }
501 void ParaPropertyPanel::InitToolBoxLineSpacing()
502 {
503     Link aLink = LINK( this, ParaPropertyPanel, ClickLineSPDropDownHdl_Impl );
504     maLineSPTbx->SetDropdownClickHdl( aLink );
505     maLineSPTbx->SetSelectHdl( aLink );     //support keyinput "ENTER"
506     maLineSPTbx->SetItemBits( TOOLBOX_ITEM1, maLineSPTbx->GetItemBits( TOOLBOX_ITEM1 ) | TIB_DROPDOWNONLY );
507     maLineSPTbx->SetItemImage(TOOLBOX_ITEM1,maSpace3);
508     Size aTbxSize = maLineSPTbx->CalcWindowSizePixel();
509     maLineSPTbx->SetOutputSizePixel( aTbxSize );
510 }
511 
512 void ParaPropertyPanel::initial()
513 {
514     maFTUL->SetBackground(Wallpaper());
515     maFTIndent->SetBackground(Wallpaper());
516     maFISpace1.SetBackground(Wallpaper());
517     maFISpace2.SetBackground(Wallpaper());
518     maFIndent1.SetBackground(Wallpaper());
519     maFIndent2.SetBackground(Wallpaper());
520     maFIndent3.SetBackground(Wallpaper());
521 
522     maFISpace1.SetImage(maSpace1);
523     maFISpace2.SetImage(maSpace2);
524     maFIndent1.SetImage(maIndent3);
525     maFIndent2.SetImage(maIndent2);
526     maFIndent3.SetImage(maIndent1);
527 
528     GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_LEFT,sal_True,sal_False);
529     GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_CENTER,sal_True,sal_False);
530     GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_RIGHT,sal_True,sal_False);
531     GetBindings()->Invalidate(SID_ATTR_PARA_ADJUST_BLOCK,sal_True,sal_False);
532 
533     //toolbox
534     SetupIcons();
535     InitToolBoxAlign();
536     InitToolBoxVertAlign();
537     InitToolBoxIndent();
538     InitToolBoxBGColor();
539     InitToolBoxBulletsNumbering();
540     InitToolBoxSpacing();
541     InitToolBoxLineSpacing();
542 
543 #ifdef HAS_IA2
544     maAlignToolBox->SetAccRelationLabeledBy(&maAlignToolBox);
545     maTBxVertAlign->SetMpSubEditAccLableBy(&maTBxVertAlign);
546     maTBxNumBullet->SetAccRelationLabeledBy(&maTBxNumBullet);
547     maTBxBackColor->SetMpSubEditAccLableBy(&maTBxBackColor);
548     maFTUL->SetAccRelationLabeledBy(&maFTUL);
549     maTbxUL_IncDec->SetAccRelationLabeledBy(&maTbxUL_IncDec);
550     maTopDist->SetAccRelationLabeledBy(&maTopDist);
551     maBottomDist->SetAccRelationLabeledBy(&maBottomDist);
552     maLineSPTbx->SetAccRelationLabeledBy(&maLineSPTbx);
553     maFTIndent->SetAccRelationLabeledBy(&maFTIndent);
554     maTbxIndent_IncDec->SetAccRelationLabeledBy(&maTbxIndent_IncDec);
555     maTbxProDemote->SetAccRelationLabeledBy(&maTbxProDemote);
556     maLeftIndent->SetAccRelationLabeledBy(&maLeftIndent);
557     maRightIndent->SetAccRelationLabeledBy(&maRightIndent);
558     maFLineIndent->SetAccRelationLabeledBy(&maFLineIndent);
559     mpColorUpdater->SetAccRelationLabeledBy(&mpColorUpdater);
560 #endif
561 }
562 
563 void ParaPropertyPanel::InitImageList(::boost::scoped_ptr<ToolBox>& rTbx, ImageList& rImglst, ImageList& rImgHlst)
564 {
565     sal_Bool bHighContrast = GetDisplayBackground().GetColor().IsDark();
566 
567     ImageList& rImgLst = bHighContrast ? rImgHlst : rImglst;
568 
569     sal_uInt16 nCount = rTbx->GetItemCount();
570     for (sal_uInt16 i = 0; i < nCount; i++)
571     {
572         sal_uInt16 nId = rTbx->GetItemId(i);
573         rTbx->SetItemImage( nId, rImgLst.GetImage( nId ) );
574     }
575 }
576 
577 //===========================for Numbering & Bullet================================================
578 
579 
580 
581 IMPL_LINK(ParaPropertyPanel, NumBTbxDDHandler, ToolBox*, pToolBox)
582 {
583     sal_uInt16 nId = pToolBox->GetCurItemId();
584 
585     EndTracking();
586     pToolBox->SetItemDown( nId, sal_True );
587 
588     if (nId == 1)
589     {
590         maBulletsPopup.UpdateValueSet();
591         maBulletsPopup.Show(*pToolBox);
592     }
593     else if (nId == 2)
594     {
595         maNumberingPopup.UpdateValueSet();
596         maNumberingPopup.Show(*pToolBox);
597     }
598     pToolBox->SetItemDown( nId, sal_False );
599     return 0;
600 }
601 
602 IMPL_LINK(ParaPropertyPanel, NumBTbxSelectHandler, ToolBox*, pToolBox)
603 {
604     sal_uInt16 nId = pToolBox->GetCurItemId();
605     sal_uInt16 nSID = SID_TABLE_VERT_NONE;
606 
607     EndTracking();
608     if (nId == 1)
609     {
610         nSID = FN_NUM_BULLET_ON;
611     }
612     else if ( nId == 2)
613     {
614         nSID = FN_NUM_NUMBERING_ON;
615     }
616     SfxBoolItem aBoolItem(nSID, sal_True);
617     GetBindings()->GetDispatcher()->Execute(nSID, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
618 
619     return 0;
620 }
621 
622 
623 //================================for Vertical Alignment========================================
624 
625 
626 
627 IMPL_LINK(ParaPropertyPanel, VertTbxSelectHandler, ToolBox*, pToolBox)
628 {
629     sal_uInt16 nId = pToolBox->GetCurItemId();
630     sal_uInt16 nSID = SID_TABLE_VERT_NONE;
631     EndTracking();
632     if (nId == 1)
633     {
634         nSID = SID_TABLE_VERT_NONE;
635         maTBxVertAlign->SetItemState(1, STATE_CHECK);
636         maTBxVertAlign->SetItemState(2, STATE_NOCHECK);
637         maTBxVertAlign->SetItemState(3, STATE_NOCHECK);
638     }
639     else if (nId == 2)
640     {
641         nSID = SID_TABLE_VERT_CENTER;
642         maTBxVertAlign->SetItemState(1, STATE_NOCHECK);
643         maTBxVertAlign->SetItemState(2, STATE_CHECK);
644         maTBxVertAlign->SetItemState(3, STATE_NOCHECK);
645     }
646     else if (nId == 3)
647     {
648         nSID = SID_TABLE_VERT_BOTTOM;
649         maTBxVertAlign->SetItemState(1, STATE_NOCHECK);
650         maTBxVertAlign->SetItemState(2, STATE_NOCHECK);
651         maTBxVertAlign->SetItemState(3, STATE_CHECK);
652     }
653     SfxBoolItem aBoolItem(nSID, sal_True);
654     GetBindings()->GetDispatcher()->Execute(nSID, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
655 
656     return 0;
657 }
658 
659 void ParaPropertyPanel::VertStateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState)
660 {
661     if (eState < SFX_ITEM_DONTCARE)
662     {
663         maTBxVertAlign->SetItemState(1, STATE_NOCHECK);
664         maTBxVertAlign->SetItemState(2, STATE_NOCHECK);
665         maTBxVertAlign->SetItemState(3, STATE_NOCHECK);
666         maTBxVertAlign->EnableItem(1, sal_False);
667         maTBxVertAlign->EnableItem(2, sal_False);
668         maTBxVertAlign->EnableItem(3, sal_False);
669     }
670     else
671     {
672         maTBxVertAlign->EnableItem(1, sal_True);
673         maTBxVertAlign->EnableItem(2, sal_True);
674         maTBxVertAlign->EnableItem(3, sal_True);
675         if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem)))
676         {
677             const SfxBoolItem* pItem= (const SfxBoolItem*)pState;
678             sal_Bool aBool = (sal_Bool)pItem->GetValue();
679 
680             if (aBool)
681             {
682                 if (nSID == SID_TABLE_VERT_NONE)
683                 {
684                     maTBxVertAlign->SetItemState(1, STATE_CHECK);
685                     maTBxVertAlign->SetItemState(2, STATE_NOCHECK);
686                     maTBxVertAlign->SetItemState(3, STATE_NOCHECK);
687                 }
688                 else if (nSID == SID_TABLE_VERT_CENTER)
689                 {
690                     maTBxVertAlign->SetItemState(1, STATE_NOCHECK);
691                     maTBxVertAlign->SetItemState(2, STATE_CHECK);
692                     maTBxVertAlign->SetItemState(3, STATE_NOCHECK);
693                 }
694                 else if (nSID == SID_TABLE_VERT_BOTTOM)
695                 {
696                     maTBxVertAlign->SetItemState(1, STATE_NOCHECK);
697                     maTBxVertAlign->SetItemState(2, STATE_NOCHECK);
698                     maTBxVertAlign->SetItemState(3, STATE_CHECK);
699                 }
700             }
701             else
702             {
703                 if (nSID == SID_TABLE_VERT_NONE)
704                 {
705                     maTBxVertAlign->SetItemState(1, STATE_NOCHECK);
706                 }
707                 else if (nSID == SID_TABLE_VERT_CENTER)
708                 {
709                     maTBxVertAlign->SetItemState(2, STATE_NOCHECK);
710                 }
711                 else if (nSID == SID_TABLE_VERT_BOTTOM)
712                 {
713                     maTBxVertAlign->SetItemState(3, STATE_NOCHECK);
714                 }
715             }
716         }
717         else
718         {
719             maTBxVertAlign->SetItemState(1, STATE_NOCHECK);
720             maTBxVertAlign->SetItemState(2, STATE_NOCHECK);
721             maTBxVertAlign->SetItemState(3, STATE_NOCHECK);
722         }
723     }
724 }
725 //==================================for Background color=====================
726 
727 IMPL_LINK(ParaPropertyPanel, ToolBoxBackColorDDHandler,ToolBox*, pToolBox)
728 {
729     sal_uInt16 nId = pToolBox->GetCurItemId();
730     OSL_ASSERT(nId == TBI_BACK_COLOR);
731     if(nId == TBI_BACK_COLOR)
732     {
733         pToolBox->SetItemDown( nId, true );
734         maBGColorPopup.Show(*pToolBox);
735         maBGColorPopup.SetCurrentColor(maColor, mbColorAvailable);
736     }
737     return 0;
738 }
739 
740 IMPL_LINK( ParaPropertyPanel, ImplPopupModeEndHdl, FloatingWindow*, EMPTYARG )
741 {
742     return 0;
743 }
744 
745 void ParaPropertyPanel::ShowMenu (void)
746 {
747     if (mpBindings != NULL)
748     {
749         SfxDispatcher* pDispatcher = mpBindings->GetDispatcher();
750         if (pDispatcher != NULL)
751             pDispatcher->Execute(SID_PARA_DLG, SFX_CALLMODE_ASYNCHRON);
752     }
753 }
754 
755 void ParaPropertyPanel::ParaBKGStateChanged(sal_uInt16 /* nSID */, SfxItemState eState, const SfxPoolItem* pState)
756 {
757     if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxColorItem))
758     {
759         const SvxColorItem* pItem =  (const SvxColorItem*)pState;
760         maColor = pItem->GetValue();
761         mbColorAvailable = sal_True;
762         mpColorUpdater->Update(maColor);
763     }
764     else
765     {
766         mbColorAvailable = sal_False;
767         maColor.SetColor(COL_AUTO);
768         mpColorUpdater->Update(maColor);
769     }
770 }
771 
772 void ParaPropertyPanel::SetBGColor (
773     const String& /* rsColorName */,
774     const Color aColor)
775 {
776     SvxColorItem aColorItem(aColor, SID_BACKGROUND_COLOR);
777     mpBindings->GetDispatcher()->Execute(SID_BACKGROUND_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L);
778     maColor = aColor;
779 }
780 
781 //==================================for Paragraph Alignment=====================
782 IMPL_LINK( ParaPropertyPanel, AlignStyleModifyHdl_Impl, ToolBox*, pBox )
783 {
784     switch (pBox->GetCurItemId())
785     {
786     case BT_SUBSTLEFT:
787         {
788             pBox->SetItemState(BT_SUBSTLEFT,STATE_CHECK);
789             pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
790             pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
791             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
792             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_LEFT,  sal_True );
793             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_LEFT, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
794         }
795         break;
796     case BT_SUBSTCENTER:
797         {
798             pBox->SetItemState(BT_SUBSTCENTER,STATE_CHECK);
799             pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
800             pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
801             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
802             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True );
803             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_CENTER, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
804         }
805         break;
806     case BT_SUBSTRIGHT:
807         {
808             pBox->SetItemState(BT_SUBSTRIGHT,STATE_CHECK);
809             pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
810             pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
811             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
812             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True );
813             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_RIGHT, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
814         }
815         break;
816     case BT_SUBSTJUSTIFY:
817         {
818             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_CHECK);
819             pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
820             pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
821             pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
822             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True );
823             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_BLOCK, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
824         }
825         break;
826     }
827 
828     return 0;
829 }
830 //==================================for Paragraph Indent=====================
831 IMPL_LINK( ParaPropertyPanel, ModifyIndentHdl_Impl, SvxRelativeField*, /* pBox */ )
832 {
833     SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE );
834     aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) );
835     aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
836     aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
837 
838     GetBindings()->GetDispatcher()->Execute(
839         SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
840     return 0;
841 }
842 
843 IMPL_LINK(ParaPropertyPanel, ClickIndent_IncDec_Hdl_Impl, ToolBox *, pControl)
844 {
845     switch (pControl->GetCurItemId())
846     {
847         case INDENT_INCREMENT:
848         {
849             switch (maContext.GetCombinedContext())
850             {
851                 case CombinedEnumContext(Application_Writer, Context_Default):
852                 case CombinedEnumContext(Application_Writer, Context_Text):
853                 case CombinedEnumContext(Application_Writer, Context_Table):
854                 {
855                     SfxBoolItem aMargin( SID_INC_INDENT, sal_True );
856                     GetBindings()->GetDispatcher()->Execute(
857                         SID_INC_INDENT, SFX_CALLMODE_RECORD, &aMargin, 0L);
858                 }
859                 break;
860                 default:
861                 {
862                     SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE );
863 
864                     maTxtLeft += INDENT_STEP;
865                     sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
866                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
867                     aMargin.SetTxtLeft( (const long)nVal );
868                     aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
869                     aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
870 
871                     GetBindings()->GetDispatcher()->Execute(
872                         SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
873                 }
874             }
875         }
876         break;
877         case INDENT_DECREMENT:
878         {
879             switch (maContext.GetCombinedContext())
880             {
881                 case CombinedEnumContext(Application_Writer, Context_Default):
882                 case CombinedEnumContext(Application_Writer, Context_Text):
883                 case CombinedEnumContext(Application_Writer, Context_Table):
884                 {
885                     SfxBoolItem aMargin( SID_DEC_INDENT, sal_True );
886                     GetBindings()->GetDispatcher()->Execute(
887                         SID_DEC_INDENT, SFX_CALLMODE_RECORD, &aMargin, 0L);
888                 }
889                 break;
890                 default:
891                 {
892                     if((maTxtLeft - INDENT_STEP) < 0)
893                         maTxtLeft = DEFAULT_VALUE;
894                     else
895                         maTxtLeft -= INDENT_STEP;
896 
897                     SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE );
898 
899                     sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
900                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
901 
902                     aMargin.SetTxtLeft( (const long)nVal );
903                     aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
904                     aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
905 
906                     GetBindings()->GetDispatcher()->Execute(
907                         SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
908                 }
909             }
910         }
911         break;
912         case ID_HANGING_INDENT:
913         {
914             SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE );
915             aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) + (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
916             aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
917             aMargin.SetTxtFirstLineOfst( ((const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ))*(-1) );
918 
919             GetBindings()->GetDispatcher()->Execute(
920                 SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
921         }
922         break;
923     }
924     return( 0L );
925 }
926 
927 IMPL_LINK(ParaPropertyPanel, ClickProDemote_Hdl_Impl, ToolBox *, pControl)
928 {
929     switch (pControl->GetCurItemId())
930     {
931         case BT_TBX_INDENT_PROMOTE:
932         {
933             GetBindings()->GetDispatcher()->Execute( SID_OUTLINE_RIGHT, SFX_CALLMODE_RECORD );
934         }
935         break;
936         case BT_TBX_INDENT_DEMOTE:
937         {
938             GetBindings()->GetDispatcher()->Execute( SID_OUTLINE_LEFT, SFX_CALLMODE_RECORD );
939         }
940         break;
941         case SD_HANGING_INDENT:
942         {
943             SvxLRSpaceItem aMargin( SID_ATTR_PARA_LRSPACE );
944             aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) + (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
945             aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
946             aMargin.SetTxtFirstLineOfst( ((const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ))*(-1) );
947 
948             GetBindings()->GetDispatcher()->Execute( SID_ATTR_PARA_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
949         }
950         break;
951     }
952     return( 0L );
953 }
954 //==================================for Paragraph Line Spacing=====================
955 
956 IMPL_LINK( ParaPropertyPanel, ClickLineSPDropDownHdl_Impl, ToolBox*, pBox )
957 {
958 
959     const sal_uInt16 nId = pBox->GetCurItemId();
960     OSL_ASSERT(nId == TOOLBOX_ITEM1);
961     if(nId == TOOLBOX_ITEM1)
962     {
963         pBox->SetItemDown( nId, true );
964         maLineSpacePopup.Rearrange(meLnSpState,m_eMetricUnit,mpLnSPItem,maContext);
965         maLineSpacePopup.Show(*pBox);
966 
967     }
968     return (0L);
969 }
970 
971 //==================================for Paragraph Spacing=====================
972 IMPL_LINK( ParaPropertyPanel, ULSpaceHdl_Impl, SvxRelativeField*, /* pBox */)
973 {
974     SvxULSpaceItem aMargin( SID_ATTR_PARA_ULSPACE );
975     aMargin.SetUpper( (sal_uInt16)GetCoreValue( *maTopDist.get(), m_eULSpaceUnit ) );
976     aMargin.SetLower( (sal_uInt16)GetCoreValue( *maBottomDist.get(), m_eULSpaceUnit ) );
977 
978     GetBindings()->GetDispatcher()->Execute(
979         SID_ATTR_PARA_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
980     return 0L;
981 }
982 
983 IMPL_LINK(ParaPropertyPanel, ClickUL_IncDec_Hdl_Impl, ToolBox *, pControl)
984 {
985     switch (pControl->GetCurItemId())
986         {
987         case UL_INCREMENT:
988              {
989                  SvxULSpaceItem aMargin( SID_ATTR_PARA_ULSPACE );
990 
991                  maUpper += UL_STEP;
992                  sal_Int64 nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
993                  nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
994                  aMargin.SetUpper( (const sal_uInt16)nVal );
995 
996                  maLower += UL_STEP;
997                  nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
998                  nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
999                  aMargin.SetLower( (const sal_uInt16)nVal );
1000 
1001                  GetBindings()->GetDispatcher()->Execute(
1002                      SID_ATTR_PARA_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
1003              }
1004              break;
1005         case UL_DECREMENT:
1006             {
1007                  SvxULSpaceItem aMargin( SID_ATTR_PARA_ULSPACE );
1008 
1009                  if( maUpper >= UL_STEP )
1010                  {
1011                     maUpper -= UL_STEP;
1012                     sal_Int64   nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1013                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
1014                     aMargin.SetUpper( (const sal_uInt16)nVal );
1015                  }
1016                  else
1017                     aMargin.SetUpper( DEFAULT_VALUE );
1018                  if( maLower >= UL_STEP )
1019                  {
1020                     maLower -= UL_STEP;
1021                     sal_Int64   nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1022                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
1023                     aMargin.SetLower( (const sal_uInt16)nVal );
1024                  }
1025                  else
1026                     aMargin.SetLower( DEFAULT_VALUE );
1027 
1028                  GetBindings()->GetDispatcher()->Execute(
1029                      SID_ATTR_PARA_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
1030             }
1031             break;
1032         }
1033     return( 0L );
1034 }
1035 
1036 //==================================for Paragraph State change=====================
1037 void ParaPropertyPanel::NotifyItemUpdate(
1038     sal_uInt16 nSID,
1039     SfxItemState eState,
1040     const SfxPoolItem* pState,
1041     const bool bIsEnabled)
1042 {
1043     (void)bIsEnabled;
1044 
1045     if( nSID == SID_ATTR_METRIC )
1046     {
1047         m_eMetricUnit = GetCurrentUnit(eState,pState);
1048         if( m_eMetricUnit!=m_last_eMetricUnit )
1049         {
1050             SetFieldUnit( *maLeftIndent.get(), m_eMetricUnit );
1051             SetFieldUnit( *maRightIndent.get(), m_eMetricUnit );
1052             SetFieldUnit( *maFLineIndent.get(), m_eMetricUnit );
1053             SetFieldUnit( *maTopDist.get(), m_eMetricUnit );
1054             SetFieldUnit( *maBottomDist.get(), m_eMetricUnit );
1055         }
1056         m_last_eMetricUnit = m_eMetricUnit;
1057     }
1058 
1059     if( nSID == SID_ATTR_PARA_LRSPACE )
1060         StateChangedIndentImpl( nSID, eState, pState );
1061 
1062     if( nSID == SID_ATTR_PARA_LINESPACE )
1063         StateChangedLnSPImpl( nSID, eState, pState );
1064 
1065     if( nSID == SID_ATTR_PARA_ULSPACE)
1066         StateChangedULImpl( nSID, eState, pState );
1067 
1068     if (nSID==SID_ATTR_PARA_ADJUST_LEFT || nSID==SID_ATTR_PARA_ADJUST_CENTER || nSID==SID_ATTR_PARA_ADJUST_RIGHT || nSID==SID_ATTR_PARA_ADJUST_BLOCK)
1069         StateChangedAlignmentImpl( nSID, eState, pState );
1070 
1071     if (nSID==SID_OUTLINE_LEFT || nSID==SID_OUTLINE_RIGHT)
1072         StateChangeOutLineImpl( nSID, eState, pState );
1073 
1074     if (nSID==SID_INC_INDENT || nSID==SID_DEC_INDENT)
1075         StateChangeIncDecImpl( nSID, eState, pState );
1076     // Add toggle state for numbering and bullet icons
1077     if (nSID==FN_NUM_NUMBERING_ON || nSID==FN_NUM_BULLET_ON)
1078         StateChangeBulletNumImpl( nSID, eState, pState );
1079 
1080     //Get the num rule index data of the current selection
1081     if ( nSID == FN_BUL_NUM_RULE_INDEX ||nSID == FN_NUM_NUM_RULE_INDEX)
1082         StateChangeBulletNumRuleImpl( nSID, eState, pState );
1083 
1084     if ((nSID == SID_TABLE_VERT_NONE)||(nSID == SID_TABLE_VERT_CENTER)||(nSID == SID_TABLE_VERT_BOTTOM))
1085     {
1086         VertStateChanged( nSID, eState, pState);
1087     }
1088     else if (nSID == SID_BACKGROUND_COLOR)
1089     {
1090         ParaBKGStateChanged(nSID, eState, pState);
1091     }
1092 }
1093 
1094 
1095 
1096 
1097 void ParaPropertyPanel::StateChangedAlignmentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1098 {
1099     if( eState >= SFX_ITEM_AVAILABLE )
1100     {
1101         const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
1102         bool IsChecked = (bool)pItem->GetValue();
1103         switch (nSID)
1104         {
1105         case SID_ATTR_PARA_ADJUST_LEFT:
1106             {
1107                 if(IsChecked)
1108                 {
1109                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_CHECK);
1110                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1111                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1112                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1113                 }
1114                 else
1115                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1116             }
1117             break;
1118         case SID_ATTR_PARA_ADJUST_CENTER:
1119             {
1120                 if(IsChecked)
1121                 {
1122                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_CHECK);
1123                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1124                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1125                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1126                 }
1127                 else
1128                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1129             }
1130             break;
1131         case SID_ATTR_PARA_ADJUST_RIGHT:
1132             {
1133                 if(IsChecked)
1134                 {
1135                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_CHECK);
1136                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1137                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1138                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1139                 }
1140                 else
1141                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1142             }
1143             break;
1144         case SID_ATTR_PARA_ADJUST_BLOCK:
1145             {
1146                 if(IsChecked)
1147                 {
1148                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_CHECK);
1149                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1150                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1151                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1152                 }
1153                 else
1154                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1155             }
1156             break;
1157         }
1158     }
1159     else if( eState == SFX_ITEM_DISABLED )
1160     {
1161     }
1162     else if ( eState == SFX_ITEM_DONTCARE )
1163     {
1164         switch (nSID)
1165         {
1166         case SID_ATTR_PARA_ADJUST_LEFT:
1167             maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1168             break;
1169         case SID_ATTR_PARA_ADJUST_CENTER:
1170             maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1171             break;
1172         case SID_ATTR_PARA_ADJUST_RIGHT:
1173             maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1174             break;
1175         case SID_ATTR_PARA_ADJUST_BLOCK:
1176             maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1177             break;
1178         }
1179     }
1180 }
1181 
1182 void ParaPropertyPanel::StateChangedIndentImpl( sal_uInt16 /* nSID */, SfxItemState eState, const SfxPoolItem* pState )
1183 {
1184     switch (maContext.GetCombinedContext())
1185     {
1186 
1187         case CombinedEnumContext(Application_Writer, Context_DrawText):
1188         case CombinedEnumContext(Application_Calc, Context_DrawText):
1189         case CombinedEnumContext(Application_Writer, Context_Annotation):
1190         {
1191             maLeftIndent->SetMin( DEFAULT_VALUE );
1192             maRightIndent->SetMin( DEFAULT_VALUE );
1193             maFLineIndent->SetMin( DEFAULT_VALUE );
1194             maTbxIndent_IncDec->Show();
1195             maTbxProDemote->Hide();
1196         }
1197         break;
1198         case CombinedEnumContext(Application_Draw, Context_DrawText):
1199             case CombinedEnumContext(Application_Impress, Context_DrawText):
1200         case CombinedEnumContext(Application_Draw, Context_Draw):
1201         case CombinedEnumContext(Application_Draw, Context_TextObject):
1202         case CombinedEnumContext(Application_Draw, Context_Graphic):
1203         case CombinedEnumContext(Application_Impress, Context_Draw):
1204         case CombinedEnumContext(Application_Impress, Context_TextObject):
1205         case CombinedEnumContext(Application_Impress, Context_Graphic):
1206         case CombinedEnumContext(Application_Impress, Context_Table):
1207             case CombinedEnumContext(Application_Draw, Context_Table):
1208         {
1209             maLeftIndent->SetMin( DEFAULT_VALUE );
1210             maRightIndent->SetMin( DEFAULT_VALUE );
1211             maFLineIndent->SetMin( DEFAULT_VALUE );
1212             maTbxIndent_IncDec->Hide();
1213             maTbxProDemote->Show();
1214         }
1215         break;
1216         case CombinedEnumContext(Application_Writer, Context_Default):
1217         case CombinedEnumContext(Application_Writer, Context_Text):
1218         case CombinedEnumContext(Application_Writer, Context_Table):
1219         {
1220             maLeftIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM );
1221             maRightIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM );
1222             maFLineIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM );
1223             maTbxIndent_IncDec->Show();
1224             maTbxProDemote->Hide();
1225         }
1226         break;
1227     }
1228 
1229     if( pState && eState >= SFX_ITEM_AVAILABLE )
1230     {
1231         SvxLRSpaceItem* pSpace = ( SvxLRSpaceItem*)pState;
1232         maTxtLeft = pSpace->GetTxtLeft();
1233         maTxtLeft = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM );
1234         maTxtLeft = OutputDevice::LogicToLogic( maTxtLeft, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1235 
1236         long aTxtRight = pSpace->GetRight();
1237         aTxtRight = OutputDevice::LogicToLogic( aTxtRight, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM );
1238         aTxtRight = OutputDevice::LogicToLogic( aTxtRight, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1239 
1240         long aTxtFirstLineOfst = pSpace->GetTxtFirstLineOfst();
1241         aTxtFirstLineOfst = OutputDevice::LogicToLogic( aTxtFirstLineOfst, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM );
1242         aTxtFirstLineOfst = OutputDevice::LogicToLogic( aTxtFirstLineOfst, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1243 
1244         long nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1245         nVal = (long)maLeftIndent->Normalize( (long)nVal );
1246         maLeftIndent->SetValue( nVal, FUNIT_100TH_MM );
1247 
1248         if(maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) &&
1249             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1250             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table))
1251         {
1252             maFLineIndent->SetMin( nVal*(-1), FUNIT_100TH_MM );
1253         }
1254 
1255         long nrVal = OutputDevice::LogicToLogic( aTxtRight, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1256         nrVal = (long)maRightIndent->Normalize( (long)nrVal );
1257         maRightIndent->SetValue( nrVal, FUNIT_100TH_MM );
1258 
1259         long nfVal = OutputDevice::LogicToLogic( aTxtFirstLineOfst, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1260         nfVal = (long)maFLineIndent->Normalize( (long)nfVal );
1261         maFLineIndent->SetValue( nfVal, FUNIT_100TH_MM );
1262 
1263         switch (maContext.GetCombinedContext())
1264         {
1265             case CombinedEnumContext(Application_Writer, Context_DrawText):
1266             case CombinedEnumContext(Application_Writer, Context_Text):
1267             case CombinedEnumContext(Application_Writer, Context_Default):
1268             case CombinedEnumContext(Application_Writer, Context_Table):
1269             case CombinedEnumContext(Application_Writer, Context_Annotation):
1270             {
1271                 maLeftIndent->SetMax( MAX_SW - nrVal, FUNIT_100TH_MM );
1272                 maRightIndent->SetMax( MAX_SW - nVal, FUNIT_100TH_MM );
1273                 maFLineIndent->SetMax( MAX_SW - nVal - nrVal, FUNIT_100TH_MM );
1274             }
1275             break;
1276             case CombinedEnumContext(Application_Draw, Context_DrawText):
1277             case CombinedEnumContext(Application_Draw, Context_Draw):
1278                 case CombinedEnumContext(Application_Draw, Context_Table):
1279             case CombinedEnumContext(Application_Draw, Context_TextObject):
1280             case CombinedEnumContext(Application_Draw, Context_Graphic):
1281             case CombinedEnumContext(Application_Impress, Context_TextObject):
1282                 case CombinedEnumContext(Application_Impress, Context_DrawText):
1283             case CombinedEnumContext(Application_Impress, Context_Table):
1284             case CombinedEnumContext(Application_Impress, Context_Draw):
1285             case CombinedEnumContext(Application_Impress, Context_Graphic):
1286             {
1287                 maLeftIndent->SetMax( MAX_SC_SD - nrVal, FUNIT_100TH_MM );
1288                 maRightIndent->SetMax( MAX_SC_SD - nVal, FUNIT_100TH_MM );
1289                 maFLineIndent->SetMax( MAX_SC_SD - nVal - nrVal, FUNIT_100TH_MM );
1290             }
1291         }
1292 
1293         maTbxIndent_IncDec->Enable();
1294         maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_True);
1295         if(maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)
1296             && maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default)
1297             && maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table))
1298         {
1299             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_True);
1300             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_True);
1301         }
1302 
1303 //      maTbxProDemote->Enable();
1304 //      if( !mbOutLineRight && !mbOutLineLeft )
1305 //          maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True);
1306         maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True);
1307     }
1308     else if( eState == SFX_ITEM_DISABLED )
1309     {
1310         maLeftIndent-> Disable();
1311         maRightIndent->Disable();
1312         maFLineIndent->Disable();
1313         maTbxIndent_IncDec->Disable();
1314         if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1315             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1316             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1317             maTbxIndent_IncDec->Disable();
1318         else
1319             maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_False);
1320 
1321 //      maTbxProDemote->Disable();
1322         maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False);
1323     }
1324     else
1325     {
1326         maLeftIndent->SetEmptyFieldValue();
1327         maRightIndent->SetEmptyFieldValue();
1328         maFLineIndent->SetEmptyFieldValue();
1329         if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1330             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1331             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1332             maTbxIndent_IncDec->Disable();
1333         else
1334             maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_False);
1335 //      maTbxProDemote->Disable();
1336         maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False);
1337     }
1338 }
1339 
1340 void ParaPropertyPanel::StateChangedLnSPImpl( sal_uInt16 /* nSID */, SfxItemState eState, const SfxPoolItem* pState )
1341 {
1342     meLnSpState = eState;
1343 
1344     if( pState && eState >= SFX_ITEM_AVAILABLE )
1345     {
1346         if(mpLnSPItem)
1347             delete mpLnSPItem;
1348         mpLnSPItem = ( SvxLineSpacingItem *)pState->Clone();
1349     }
1350 }
1351 
1352 void ParaPropertyPanel::StateChangedULImpl( sal_uInt16 /* nSID */, SfxItemState eState, const SfxPoolItem* pState )
1353 {
1354     maTopDist->SetMax( maTopDist->Normalize( MAX_DURCH ), MapToFieldUnit(m_eULSpaceUnit) );
1355     maBottomDist->SetMax( maBottomDist->Normalize( MAX_DURCH ), MapToFieldUnit(m_eULSpaceUnit) );
1356 
1357     if( pState && eState >= SFX_ITEM_AVAILABLE )
1358     {
1359         SvxULSpaceItem* pOldItem = (SvxULSpaceItem*)pState;
1360 
1361         maUpper = pOldItem->GetUpper();
1362         maUpper = OutputDevice::LogicToLogic( maUpper, (MapUnit)m_eULSpaceUnit, MAP_100TH_MM );
1363         maUpper = OutputDevice::LogicToLogic( maUpper, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1364 
1365         maLower = pOldItem->GetLower();
1366         maLower = OutputDevice::LogicToLogic( maLower, (MapUnit)m_eULSpaceUnit, MAP_100TH_MM );
1367         maLower = OutputDevice::LogicToLogic( maLower, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1368 
1369         sal_Int64 nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1370         nVal = maTopDist->Normalize( nVal );
1371         maTopDist->SetValue( nVal, FUNIT_100TH_MM );
1372 
1373         nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1374         nVal = maBottomDist->Normalize( nVal );
1375         maBottomDist->SetValue( nVal, FUNIT_100TH_MM );
1376         maTbxUL_IncDec->Enable();
1377     }
1378     else if(eState == SFX_ITEM_DISABLED )
1379     {
1380         maTopDist->Disable();
1381         maBottomDist->Disable();
1382         maTbxUL_IncDec->Disable();
1383     }
1384     else
1385     {
1386         maTopDist->SetEmptyFieldValue();
1387         maBottomDist->SetEmptyFieldValue();
1388         maTbxUL_IncDec->Disable();
1389     }
1390 }
1391 
1392 void ParaPropertyPanel::StateChangeOutLineImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1393 {
1394     if (nSID==SID_OUTLINE_LEFT)
1395     {
1396         if( pState && eState == SFX_ITEM_UNKNOWN )
1397             mbOutLineLeft = 1;
1398         else
1399             mbOutLineLeft = 0;
1400     }
1401     if (nSID==SID_OUTLINE_RIGHT)
1402     {
1403         if( pState && eState == SFX_ITEM_UNKNOWN )
1404             mbOutLineRight = 1;
1405         else
1406             mbOutLineRight = 0;
1407     }
1408     if(mbOutLineLeft)
1409         maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_True);
1410     else
1411         maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_False);
1412 
1413     if(mbOutLineRight)
1414         maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_True);
1415     else
1416         maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_False);
1417 
1418 //  if( !mbOutLineRight && !mbOutLineLeft )
1419 //  {
1420 //      maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_True);
1421 //      maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_True);
1422 //      maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True);
1423 //  }
1424 //  else
1425 //      maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False);
1426 }
1427 
1428 void ParaPropertyPanel::StateChangeIncDecImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1429 {
1430     if (nSID==SID_INC_INDENT)
1431     {
1432         if( pState && eState == SFX_ITEM_UNKNOWN )
1433             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_True);
1434         else
1435             if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1436                 maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1437             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1438                 maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_False);
1439     }
1440     if (nSID==SID_DEC_INDENT)
1441     {
1442         if( pState && eState == SFX_ITEM_UNKNOWN )
1443             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_True);
1444         else
1445             if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1446                 maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1447             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1448                 maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_False);
1449     }
1450 }
1451 // Add toggle state for numbering and bullet icons
1452 void ParaPropertyPanel::StateChangeBulletNumImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1453 {
1454     if (nSID==FN_NUM_NUMBERING_ON)
1455     {
1456         if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem)))
1457         {
1458             const SfxBoolItem* pItem= (const SfxBoolItem*)pState;
1459             sal_Bool aBool = (sal_Bool)pItem->GetValue();
1460             if (aBool) {
1461                 maTBxNumBullet->SetItemState(IID_NUMBER,    STATE_CHECK);
1462             } else {
1463                 maTBxNumBullet->SetItemState(IID_NUMBER,    STATE_NOCHECK);
1464             }
1465         }
1466     }
1467     if (nSID==FN_NUM_BULLET_ON)
1468     {
1469         if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem)))
1470         {
1471             const SfxBoolItem* pItem= (const SfxBoolItem*)pState;
1472             sal_Bool aBool = (sal_Bool)pItem->GetValue();
1473             if (aBool) {
1474                 maTBxNumBullet->SetItemState(IID_BULLET,    STATE_CHECK);
1475             } else {
1476                 maTBxNumBullet->SetItemState(IID_BULLET,    STATE_NOCHECK);
1477             }
1478         }
1479     }
1480 }
1481 //Modified for Numbering&Bullets Dialog UX Enh(Story 992) by chengjh,2011.7.5
1482 //Handing the transferred the num rule index data of the current selection
1483 void ParaPropertyPanel::StateChangeBulletNumRuleImpl( sal_uInt16 nSID, SfxItemState /* eState */, const SfxPoolItem* pState )
1484 {
1485 
1486     const SfxUInt16Item* pIt = (const SfxUInt16Item*)pState;
1487     sal_uInt16 nValue = (sal_uInt16)0xFFFF;
1488     if ( pIt )
1489         nValue = pIt->GetValue();
1490 
1491     if ( nSID == FN_BUL_NUM_RULE_INDEX )
1492     {
1493         mnBulletTypeIndex = nValue;
1494     }else if ( nSID == FN_NUM_NUM_RULE_INDEX )
1495     {
1496         mnNumTypeIndex = nValue;
1497     }
1498 }
1499 //End
1500 FieldUnit ParaPropertyPanel::GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState )
1501 {
1502     FieldUnit eUnit = FUNIT_NONE;
1503 
1504     if ( pState && eState >= SFX_ITEM_DEFAULT )
1505         eUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue();
1506     else
1507     {
1508         SfxViewFrame* pFrame = SfxViewFrame::Current();
1509         SfxObjectShell* pSh = NULL;
1510         if ( pFrame )
1511             pSh = pFrame->GetObjectShell();
1512         if ( pSh )  //the object shell is not always available during reload
1513         {
1514             SfxModule* pModule = pSh->GetModule();
1515             if ( pModule )
1516             {
1517                 const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC );
1518                 if ( pItem )
1519                     eUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue();
1520             }
1521             else
1522             {
1523                 DBG_ERRORFILE( "GetModuleFieldUnit(): no module found" );
1524             }
1525         }
1526     }
1527 
1528     return eUnit;
1529 }
1530 //new FixedText(this, SVX_RES(FT_COLOR))
1531 
1532 PopupControl* ParaPropertyPanel::CreateLineSpacingControl (PopupContainer* pParent)
1533 {
1534     return new ParaLineSpacingControl(pParent, *this);
1535 }
1536 
1537 PopupControl* ParaPropertyPanel::CreateBulletsPopupControl (PopupContainer* pParent)
1538 {
1539     return new ParaBulletsControl(pParent, *this);
1540 }
1541 
1542 PopupControl* ParaPropertyPanel::CreateNumberingPopupControl (PopupContainer* pParent)
1543 {
1544     return new ParaNumberingControl(pParent, *this);
1545 }
1546 
1547 namespace
1548 {
1549     Color GetNoBackgroundColor(void)
1550     {
1551         return COL_TRANSPARENT;
1552     }
1553 } // end of anonymous namespace
1554 
1555 PopupControl* ParaPropertyPanel::CreateBGColorPopupControl (PopupContainer* pParent)
1556 {
1557     const ResId aResId(SVX_RES(STR_NOFILL));
1558 
1559     return new ColorControl(
1560         pParent,
1561         mpBindings,
1562         SVX_RES(RID_POPUPPANEL_PARAPAGE_BACK_COLOR),
1563         SVX_RES(VS_FONT_COLOR),
1564         ::boost::bind(GetNoBackgroundColor),
1565         ::boost::bind(&ParaPropertyPanel::SetBGColor, this, _1,_2),
1566         pParent,
1567         &aResId);
1568 }
1569 
1570 
1571 ParaPropertyPanel::ParaPropertyPanel(Window* pParent,
1572     const cssu::Reference<css::frame::XFrame>& /* rxFrame */,
1573     SfxBindings* pBindings,
1574     const cssu::Reference<css::ui::XSidebar>& rxSidebar)
1575     : Control(pParent, SVX_RES(RID_SIDEBAR_PARA_PANEL)),
1576       maAlignToolBoxBackground(ControlFactory::CreateToolBoxBackground(this)),
1577       maAlignToolBox (ControlFactory::CreateToolBox(maAlignToolBoxBackground.get(),SVX_RES(TBX_HORIZONTALALIGNMENT))),
1578       maTBxVertAlignBackground(ControlFactory::CreateToolBoxBackground(this)),
1579       maTBxVertAlign (ControlFactory::CreateToolBox(maTBxVertAlignBackground.get(),SVX_RES(TBX_VERT_ALIGN))),
1580       maTBxNumBulletBackground(ControlFactory::CreateToolBoxBackground(this)),
1581       maTBxNumBullet (ControlFactory::CreateToolBox(maTBxNumBulletBackground.get(),SVX_RES(TBX_NUM_BULLET))),
1582       maTBxBackColorBackground(ControlFactory::CreateToolBoxBackground(this)),
1583       maTBxBackColor (ControlFactory::CreateToolBox(maTBxBackColorBackground.get(),SVX_RES(TBX_BACK_COLOR))),
1584       maFTUL (new FixedText(this, SVX_RES(FT_SPACING))),
1585       maTbxUL_IncDecBackground(ControlFactory::CreateToolBoxBackground(this)),
1586       maTbxUL_IncDec (ControlFactory::CreateToolBox(maTbxUL_IncDecBackground.get(),SVX_RES(TBX_UL_INC_DEC))),
1587       maTopDist (new SvxRelativeField(this, SVX_RES(MF_ABOVE_PARASPACING))),
1588       maBottomDist (new SvxRelativeField(this, SVX_RES(MF_BELOW_PARASPACING))),
1589       maLineSPTbxBackground(ControlFactory::CreateToolBoxBackground(this)),
1590       maLineSPTbx (ControlFactory::CreateToolBox(maLineSPTbxBackground.get(),SVX_RES(TBX_LINESP))),
1591       maFTIndent (new FixedText(this, SVX_RES(FT_INDENT))),
1592       maTbxIndent_IncDecBackground(ControlFactory::CreateToolBoxBackground(this)),
1593       maTbxIndent_IncDec (ControlFactory::CreateToolBox(maTbxIndent_IncDecBackground.get(),SVX_RES(TBX_INDENT_INC_DEC))),
1594       maTbxProDemoteBackground(ControlFactory::CreateToolBoxBackground(this)),
1595       maTbxProDemote (ControlFactory::CreateToolBox(maTbxProDemoteBackground.get(),SVX_RES(TBX_INDENT_PRO_DEMOTE))),
1596       maLeftIndent (new SvxRelativeField(this, SVX_RES(MF_BEFORE_INDENT))),
1597       maRightIndent (new SvxRelativeField(this, SVX_RES(MF_AFTER_INDENT))),
1598       maFLineIndent (new SvxRelativeField(this, SVX_RES(MF_FL_INDENT))),
1599       mpColorUpdater (),
1600       maFISpace1 ( this, SVX_RES( FI_SPACE1)),
1601       maFISpace2 ( this, SVX_RES( FI_SPACE2)),
1602       maFIndent1 ( this, SVX_RES( FI_INDENT1)),
1603       maFIndent2 ( this, SVX_RES( FI_INDENT2)),
1604       maFIndent3 ( this, SVX_RES( FI_INDENT3)),
1605       maSpace1 (SVX_RES(IMG_SPACE1)),
1606       maSpace2 (SVX_RES(IMG_SPACE2)),
1607       maSpace3 (SVX_RES(IMG_SPACE3)),
1608       maIndent1 (SVX_RES(IMG_INDENT1)),
1609       maIndent2 (SVX_RES(IMG_INDENT2)),
1610       maIndent3 (SVX_RES(IMG_INDENT3)),
1611       maLeftPara (SVX_RES(IMG_LEFT_PARA)),
1612       maCentPara (SVX_RES(IMG_CENTER_PARA)),
1613       maRightPara (SVX_RES(IMG_RIGHT_PARA)),
1614       maJusPara (SVX_RES(IMG_JUSTIFY_PARA)),
1615       maIndInc (SVX_RES(IMG_INDENT_INC)),
1616       maIndDec (SVX_RES(IMG_INDENT_DEC)),
1617       maIndInc_BD (SVX_RES(IMG_INDENT_INC_BD)),
1618       maIndDec_BD (SVX_RES(IMG_INDENT_DEC_BD)),
1619       maIndHang (SVX_RES(IMG_INDENT_HANG)),
1620       maParInc (SVX_RES(IMG_PARA_INC)),
1621       maParDec (SVX_RES(IMG_PARA_DEC)),
1622       maVertImageList (SVX_RES(IL_VERT_ALIGN)),
1623       maVertImageListH (SVX_RES(IL_VERT_ALIGN)),
1624       maNumBImageList (SVX_RES(IL_NUM_BULLET)),
1625       maNumBImageListH (SVX_RES(ILH_NUM_BULLET)),
1626       maNumBImageListRTL (SVX_RES(IL_NUM_BULLET_RTL)),
1627       maImgBackColorHigh (SVX_RES(IMG_BACK_COLOR_H)),
1628       maImgBackColor (SVX_RES(IMG_BACK_COLOR)),
1629       maTxtLeft (0),
1630       mpLnSPItem (NULL),
1631       meLnSpState (SFX_ITEM_DONTCARE),
1632       mbOutLineLeft (false),
1633       mbOutLineRight (false),
1634       maUpper (0),
1635       maLower (0),
1636       mnBulletTypeIndex ((sal_uInt16)0xFFFF),
1637       mnNumTypeIndex ((sal_uInt16)0xFFFF),
1638       maColor (COL_AUTO),
1639       mbColorAvailable (true),
1640  //, m_eMetricUnit            (FUNIT_INCH)
1641 //, m_last_eMetricUnit      (FUNIT_INCH)
1642       m_eLRSpaceUnit(),
1643       m_eULSpaceUnit(),
1644       maLeftAlignControl (SID_ATTR_PARA_ADJUST_LEFT, *pBindings,*this),
1645       maCenterAlignControl (SID_ATTR_PARA_ADJUST_CENTER, *pBindings,*this),
1646       maRightAlignControl (SID_ATTR_PARA_ADJUST_RIGHT, *pBindings,*this),
1647       maJustifyAlignControl (SID_ATTR_PARA_ADJUST_BLOCK, *pBindings,*this),
1648       maLRSpaceControl (SID_ATTR_PARA_LRSPACE,*pBindings,*this),
1649       maLNSpaceControl (SID_ATTR_PARA_LINESPACE, *pBindings,*this),
1650       maULSpaceControl (SID_ATTR_PARA_ULSPACE, *pBindings,*this),
1651       maOutLineLeftControl (SID_OUTLINE_LEFT, *pBindings,*this),
1652       maOutLineRightControl (SID_OUTLINE_RIGHT, *pBindings,*this),
1653       maDecIndentControl (SID_DEC_INDENT, *pBindings,*this),
1654       maIncIndentControl (SID_INC_INDENT, *pBindings,*this),
1655       maVertTop (SID_TABLE_VERT_NONE, *pBindings,*this),
1656       maVertCenter (SID_TABLE_VERT_CENTER, *pBindings,*this),
1657       maVertBottom (SID_TABLE_VERT_BOTTOM,*pBindings,*this),
1658       maBulletOnOff (FN_NUM_BULLET_ON, *pBindings,*this),
1659       maNumberOnOff (FN_NUM_NUMBERING_ON, *pBindings,*this),
1660       maBackColorControl (SID_BACKGROUND_COLOR, *pBindings,*this),
1661       m_aMetricCtl (SID_ATTR_METRIC, *pBindings,*this),
1662       maBulletNumRuleIndex (FN_BUL_NUM_RULE_INDEX, *pBindings,*this),
1663       maNumNumRuleIndex (FN_NUM_NUM_RULE_INDEX, *pBindings,*this),
1664       maContext(),
1665       mpBindings(pBindings),
1666       maLineSpacePopup(this, ::boost::bind(&ParaPropertyPanel::CreateLineSpacingControl, this, _1)),
1667       maBulletsPopup(this, ::boost::bind(&ParaPropertyPanel::CreateBulletsPopupControl, this, _1)),
1668       maNumberingPopup(this, ::boost::bind(&ParaPropertyPanel::CreateNumberingPopupControl, this, _1)),
1669       maBGColorPopup(this, ::boost::bind(&ParaPropertyPanel::CreateBGColorPopupControl, this, _1)),
1670       mxSidebar(rxSidebar)
1671 {
1672     initial();
1673     FreeResource();
1674 }
1675 
1676 } } // end of namespace svx::sidebar
1677