xref: /trunk/main/svx/source/sidebar/paragraph/ParaPropertyPanel.cxx (revision 4e8031e0a9bc16df402a00dc593d120d34289fa7)
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 {
123     if (pParent == NULL)
124         throw lang::IllegalArgumentException(A2S("no parent Window given to ParaPropertyPanel::Create"), NULL, 0);
125     if ( ! rxFrame.is())
126         throw lang::IllegalArgumentException(A2S("no XFrame given to ParaPropertyPanel::Create"), NULL, 1);
127     if (pBindings == NULL)
128         throw lang::IllegalArgumentException(A2S("no SfxBindings given to ParaPropertyPanel::Create"), NULL, 2);
129 
130     return new ParaPropertyPanel(
131         pParent,
132         rxFrame,
133         pBindings);
134 }
135 
136 void ParaPropertyPanel::HandleContextChange (
137     const ::sfx2::sidebar::EnumContext aContext)
138 {
139     if (maContext == aContext)
140     {
141         // Nothing to do.
142         return;
143     }
144 
145     maContext = aContext;
146     switch (maContext.GetCombinedContext())
147     {
148         case CombinedEnumContext(Application_Calc, Context_DrawText):
149     {
150         maTBxVertAlign->Show();
151         maTBxVertAlignBackground->Show();
152         maTBxBackColor->Hide();
153         maTBxBackColorBackground->Hide();
154         maTBxNumBullet->Hide();
155         maTBxNumBulletBackground->Hide();
156         ReSize(0);
157         maTbxIndent_IncDec->Show();
158         maTbxIndent_IncDecBackground->Show();
159         maTbxProDemote->Hide();
160         maTbxProDemoteBackground->Hide();
161     }
162     break;
163         case CombinedEnumContext(Application_Draw, Context_Draw):
164         case CombinedEnumContext(Application_Draw, Context_TextObject):
165         case CombinedEnumContext(Application_Draw, Context_Graphic):
166         case CombinedEnumContext(Application_Impress, Context_Draw):
167         case CombinedEnumContext(Application_Impress, Context_TextObject):
168         case CombinedEnumContext(Application_Impress, Context_Graphic):
169     {
170         maTBxVertAlign->Hide();
171         maTBxVertAlignBackground->Hide();
172         maTBxBackColor->Hide();
173         maTBxBackColorBackground->Hide();
174         maTBxNumBullet->Show();
175         maTBxNumBulletBackground->Show();
176         ReSize(1);
177         maTbxIndent_IncDec->Hide();
178         maTbxIndent_IncDecBackground->Hide();
179         maTbxProDemote->Show();
180         maTbxProDemoteBackground->Show();
181     }
182     break;
183         case CombinedEnumContext(Application_Draw, Context_DrawText):
184         case CombinedEnumContext(Application_Impress, Context_DrawText):
185     {
186         maTBxVertAlign->Show();
187         maTBxVertAlignBackground->Show();
188         maTBxBackColor->Hide();
189         maTBxBackColorBackground->Hide();
190         maTBxNumBullet->Show();
191         maTBxNumBulletBackground->Show();
192         ReSize(1);
193         maTbxIndent_IncDec->Hide();
194         maTbxIndent_IncDecBackground->Hide();
195         maTbxProDemote->Show();
196         maTbxProDemoteBackground->Show();
197     }
198     break;
199         case CombinedEnumContext(Application_Impress, Context_Table):
200         case CombinedEnumContext(Application_Draw, Context_Table):
201     {
202         maTBxVertAlign->Show();
203         maTBxVertAlignBackground->Show();
204         maTBxBackColor->Hide();
205         maTBxBackColorBackground->Hide();
206         maTBxNumBullet->Show();
207         maTBxNumBulletBackground->Show();
208         ReSize(1);
209         maTbxIndent_IncDec->Hide();
210         maTbxIndent_IncDecBackground->Hide();
211         maTbxProDemote->Show();
212         maTbxProDemoteBackground->Show();
213     }
214     break;
215     case CombinedEnumContext(Application_Writer, Context_Default):
216         case CombinedEnumContext(Application_Writer, Context_Text):
217     {
218         maTBxVertAlign->Hide();
219         maTBxVertAlignBackground->Hide();
220         maTBxBackColor->Show();
221         maTBxBackColorBackground->Show();
222         maTBxNumBullet->Show();
223 
224         maTBxNumBulletBackground->Show();
225         ReSize(1);
226         maTbxIndent_IncDec->Show();
227         maTbxIndent_IncDecBackground->Show();
228         maTbxProDemote->Hide();
229         maTbxProDemoteBackground->Hide();
230     }
231     break;
232         case CombinedEnumContext(Application_Writer, Context_Table):
233         {
234         maTBxVertAlign->Show();
235         maTBxVertAlignBackground->Show();
236         maTBxBackColor->Show();
237         maTBxBackColorBackground->Show();
238         maTBxNumBullet->Show();
239         maTBxNumBulletBackground->Show();
240         ReSize(1);
241         maTbxIndent_IncDec->Show();
242         maTbxIndent_IncDecBackground->Show();
243         maTbxProDemote->Hide();
244         maTbxProDemoteBackground->Hide();
245         }
246     break;
247         case CombinedEnumContext(Application_Writer, Context_DrawText):
248     {
249         maTBxVertAlign->Show();
250         maTBxVertAlignBackground->Show();
251         maTBxBackColor->Hide();
252         maTBxBackColorBackground->Hide();
253         maTBxNumBullet->Hide();
254         maTBxNumBulletBackground->Hide();
255         ReSize(0);
256         maTbxIndent_IncDec->Show();
257         maTbxIndent_IncDecBackground->Show();
258         maTbxProDemote->Hide();
259         maTbxProDemoteBackground->Hide();
260     }
261     break;
262         case CombinedEnumContext(Application_Writer, Context_Annotation):
263         {
264         maTBxVertAlign->Hide();
265         maTBxVertAlignBackground->Hide();
266         maTBxBackColor->Hide();
267         maTBxBackColorBackground->Hide();
268         maTBxNumBullet->Hide();
269         maTBxNumBulletBackground->Hide();
270         ReSize(0);
271         maTbxIndent_IncDec->Show();
272         maTbxIndent_IncDecBackground->Show();
273         maTbxProDemote->Hide();
274         maTbxProDemoteBackground->Hide();
275         }
276     break;
277         case CombinedEnumContext(Application_Calc, Context_EditCell):
278         case CombinedEnumContext(Application_Draw, Context_Text):
279         case CombinedEnumContext(Application_Draw, Context_OutlineText):
280         case CombinedEnumContext(Application_Calc, Context_Cell):
281         case CombinedEnumContext(Application_Calc, Context_Pivot):
282         case CombinedEnumContext(Application_Impress, Context_Text):
283         case CombinedEnumContext(Application_Impress, Context_OutlineText):
284         /*{
285             mpToolBoxScriptSw->Hide();
286             mpToolBoxScript->Show();
287             mpToolBoxSpacing->Show();
288             mpToolBoxHighlight->Hide();
289 
290             Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT);
291             aSize = LogicToPixel( aSize,MapMode(MAP_APPFONT) );
292             aSize.setWidth(GetOutputSizePixel().Width());
293             SetSizePixel(aSize);
294             break;
295         }*/
296 
297         default:
298             break;
299     }
300 }
301 
302 SfxBindings* ParaPropertyPanel::GetBindings()
303 {
304     return mpBindings;
305 }
306 
307 void ParaPropertyPanel::SetupIcons (void)
308 {
309     if (Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
310     {
311     }
312     else
313     {
314     }
315 }
316 
317 void ParaPropertyPanel::DataChanged (const DataChangedEvent& rEvent)
318 {
319     (void)rEvent;
320 
321     SetupIcons();
322 }
323 
324 ParaPropertyPanel::~ParaPropertyPanel()
325 {
326     delete mpLnSPItem;
327 }
328 
329 void ParaPropertyPanel::ReSize(bool bSize)
330 {
331     if(bSize)
332     {
333         //Paragraph spacing
334         maFTUL->SetPosPixel(POS_FT_PARA_SPACE);
335         maTbxUL_IncDec->SetPosPixel(POS_TBX_PARA_SPACE_INC_DEC);
336         maTopDist->SetPosPixel(POS_MBX_TOP_DIST);
337         maBottomDist->SetPosPixel(POS_MBX_BOT_DIST);
338         //Indent
339         maFTIndent->SetPosPixel(POS_FT_PARA_INDENT);
340         maTbxIndent_IncDec->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC);
341         maTbxProDemote->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC);
342         maLeftIndent->SetPosPixel(POS_MBX_LEFT_DIST);
343         maRightIndent->SetPosPixel(POS_MBX_RIGHT_DIST);
344         maFLineIndent->SetPosPixel(POS_MBX_FLINE_DIST);
345         //Line spacing
346         maLineSPTbx->SetPosPixel(TBX_LINE_SPACE);
347         //image
348         maFISpace1.SetPosPixel(POS_IMG_SPACE1);
349         maFISpace2.SetPosPixel(POS_IMG_SPACE2);
350         maFIndent1.SetPosPixel(POS_IMG_INDENT1);
351         maFIndent2.SetPosPixel(POS_IMG_INDENT2);
352         maFIndent3.SetPosPixel(POS_IMG_INDENT3);
353         Size aSize(GetOutputSizePixel().Width(),PARA_SECTIONPAGE_HEIGHT);
354         aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
355         aSize.setWidth(GetOutputSizePixel().Width());
356         SetSizePixel(aSize);
357     }
358     else
359     {
360         //Paragraph spacing
361         maFTUL->SetPosPixel(POS_FT_PARA_SPACE2);
362         maTbxUL_IncDec->SetPosPixel(POS_TBX_PARA_SPACE_INC_DEC2);
363         maTopDist->SetPosPixel(POS_MBX_TOP_DIST2);
364         maBottomDist->SetPosPixel(POS_MBX_BOT_DIST2);
365         //Indent
366         maFTIndent->SetPosPixel(POS_FT_PARA_INDENT2);
367         maTbxIndent_IncDec->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC2);
368         maTbxProDemote->SetPosPixel(POS_TBX_PARA_INDENT_INC_DEC2);
369         maLeftIndent->SetPosPixel(POS_MBX_LEFT_DIST2);
370         maRightIndent->SetPosPixel(POS_MBX_RIGHT_DIST2);
371         maFLineIndent->SetPosPixel(POS_MBX_FLINE_DIST2);
372         //Line spacing
373         maLineSPTbx->SetPosPixel(TBX_LINE_SPACE2);
374         //image
375         maFISpace1.SetPosPixel(POS_IMG_SPACE12);
376         maFISpace2.SetPosPixel(POS_IMG_SPACE22);
377         maFIndent1.SetPosPixel(POS_IMG_INDENT12);
378         maFIndent2.SetPosPixel(POS_IMG_INDENT22);
379         maFIndent3.SetPosPixel(POS_IMG_INDENT32);
380         Size aSize(GetOutputSizePixel().Width(),PARA_SECTIONPAGE_HEIGHT_2);
381         aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
382         aSize.setWidth(GetOutputSizePixel().Width());
383         SetSizePixel(aSize);
384     }
385 }
386 
387 void ParaPropertyPanel::EndSpacingPopupMode (void)
388 {
389     maLineSpacePopup.Hide();
390 }
391 
392 void ParaPropertyPanel::EndBulletsPopupMode (void)
393 {
394     //maUnderlinePopup.Hide();
395 }
396 
397 void ParaPropertyPanel::EndNumberingPopupMode (void)
398 {
399     //maUnderlinePopup.Hide();
400 }
401 
402 
403 void ParaPropertyPanel::InitToolBoxAlign()
404 {
405     maAlignToolBox->SetItemImage(TOOLBOX_ITEM1,maLeftPara);
406     maAlignToolBox->SetItemImage(TOOLBOX_ITEM2,maCentPara);
407     maAlignToolBox->SetItemImage(TOOLBOX_ITEM3,maRightPara);
408     maAlignToolBox->SetItemImage(TOOLBOX_ITEM4,maJusPara);
409     Link aLink = LINK( this, ParaPropertyPanel, AlignStyleModifyHdl_Impl );
410     maAlignToolBox->SetSelectHdl( aLink );
411     Size aTbxSize (maAlignToolBox->CalcWindowSizePixel());
412     maAlignToolBox->SetOutputSizePixel( aTbxSize );
413 }
414 
415 void ParaPropertyPanel::InitToolBoxVertAlign()
416 {
417     InitImageList(maTBxVertAlign, maVertImageList, maVertImageListH);
418     maTBxVertAlign->SetSelectHdl(LINK(this,ParaPropertyPanel,VertTbxSelectHandler));
419     Size aTbxSize (maTBxVertAlign->CalcWindowSizePixel());
420     maTBxVertAlign->SetOutputSizePixel( aTbxSize );
421 }
422 
423 
424 void ParaPropertyPanel::InitToolBoxIndent()
425 {
426     Link aLink = LINK( this, ParaPropertyPanel, ModifyIndentHdl_Impl );
427     maLeftIndent->SetModifyHdl( aLink );
428     maRightIndent->SetModifyHdl( aLink );
429     maFLineIndent->SetModifyHdl( aLink );
430 
431     if( Application::GetSettings().GetLayoutRTL())
432     {
433         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM1,maIndInc_BD);
434         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM2,maIndDec_BD);
435     }
436     else
437     {
438         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM1,maIndInc);
439         maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM2,maIndDec);
440     }
441     maTbxIndent_IncDec->SetItemImage(TOOLBOX_ITEM3,maIndHang);
442     aLink = LINK( this, ParaPropertyPanel, ClickIndent_IncDec_Hdl_Impl );
443     maTbxIndent_IncDec->SetSelectHdl(aLink);
444     m_eLRSpaceUnit = maLRSpaceControl.GetCoreMetric();
445     Size aTbxSize = maTbxIndent_IncDec->CalcWindowSizePixel();
446     maTbxIndent_IncDec->SetOutputSizePixel( aTbxSize );
447 
448     if( Application::GetSettings().GetLayoutRTL())
449     {
450         maTbxProDemote->SetItemImage(TOOLBOX_ITEM1,maIndInc_BD);
451         maTbxProDemote->SetItemImage(TOOLBOX_ITEM2,maIndDec_BD);
452     }
453     else
454     {
455         maTbxProDemote->SetItemImage(TOOLBOX_ITEM1,maIndInc);
456         maTbxProDemote->SetItemImage(TOOLBOX_ITEM2,maIndDec);
457     }
458     maTbxProDemote->SetItemImage(TOOLBOX_ITEM3,maIndHang);
459     aLink = LINK( this, ParaPropertyPanel, ClickProDemote_Hdl_Impl );
460     maTbxProDemote->SetSelectHdl(aLink);
461     m_eLRSpaceUnit = maLRSpaceControl.GetCoreMetric();
462     aTbxSize = maTbxProDemote->CalcWindowSizePixel();
463     maTbxProDemote->SetOutputSizePixel( aTbxSize );
464 }
465 
466 void ParaPropertyPanel::InitToolBoxBGColor()
467 {
468     mpColorUpdater.reset(new ::svx::ToolboxButtonColorUpdater(SID_BACKGROUND_COLOR, TBI_BACK_COLOR, maTBxBackColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW ));
469 
470     maTBxBackColor->SetItemImage(TBI_BACK_COLOR, GetDisplayBackground().GetColor().IsDark()? maImgBackColorHigh : maImgBackColor);
471     maTBxBackColor->SetItemBits( TBI_BACK_COLOR, maTBxBackColor->GetItemBits( TBI_BACK_COLOR ) | TIB_DROPDOWNONLY );
472 
473     Link aLink = LINK(this, ParaPropertyPanel, ToolBoxBackColorDDHandler);
474     maTBxBackColor->SetDropdownClickHdl ( aLink );
475     maTBxBackColor->SetSelectHdl ( aLink );
476     Size aTbxSize (maTBxBackColor->CalcWindowSizePixel());
477     maTBxBackColor->SetOutputSizePixel( aTbxSize );
478 }
479 
480 void ParaPropertyPanel::InitToolBoxBulletsNumbering()
481 {
482     if( Application::GetSettings().GetLayoutRTL())//sym2_7380
483     {
484         maTBxNumBullet->SetItemImage( IID_BULLET, maNumBImageListRTL.GetImage( IID_BULLET ) );
485         maTBxNumBullet->SetItemImage( IID_NUMBER, maNumBImageListRTL.GetImage( IID_NUMBER ) );
486     }
487     else
488         InitImageList(maTBxNumBullet, maNumBImageList, maNumBImageListH);
489 
490     maTBxNumBullet->SetDropdownClickHdl(LINK(this,ParaPropertyPanel,NumBTbxDDHandler));
491     maTBxNumBullet->SetSelectHdl(LINK(this,ParaPropertyPanel,NumBTbxSelectHandler));
492     Size aTbxSize (maTBxNumBullet->CalcWindowSizePixel());
493     maTBxNumBullet->SetOutputSizePixel( aTbxSize );
494 }
495 void ParaPropertyPanel::InitToolBoxSpacing()
496 {
497     Link aLink = LINK( this, ParaPropertyPanel, ULSpaceHdl_Impl );
498     maTopDist->SetModifyHdl(aLink);
499     maBottomDist->SetModifyHdl( aLink );
500 
501     maTbxUL_IncDec->SetItemImage(TOOLBOX_ITEM1,maParInc);
502     maTbxUL_IncDec->SetItemImage(TOOLBOX_ITEM2,maParDec);
503     aLink = LINK( this, ParaPropertyPanel, ClickUL_IncDec_Hdl_Impl );
504     maTbxUL_IncDec->SetSelectHdl(aLink);
505     m_eULSpaceUnit = maULSpaceControl.GetCoreMetric();
506     Size aTbxSize = maTbxUL_IncDec->CalcWindowSizePixel();
507     maTbxUL_IncDec->SetOutputSizePixel( aTbxSize );
508 }
509 void ParaPropertyPanel::InitToolBoxLineSpacing()
510 {
511     Link aLink = LINK( this, ParaPropertyPanel, ClickLineSPDropDownHdl_Impl );
512     maLineSPTbx->SetDropdownClickHdl( aLink );
513     maLineSPTbx->SetSelectHdl( aLink );     //support keyinput "ENTER"
514     maLineSPTbx->SetItemBits( TOOLBOX_ITEM1, maLineSPTbx->GetItemBits( TOOLBOX_ITEM1 ) | TIB_DROPDOWNONLY );
515     maLineSPTbx->SetItemImage(TOOLBOX_ITEM1,maSpace3);
516     Size aTbxSize = maLineSPTbx->CalcWindowSizePixel();
517     maLineSPTbx->SetOutputSizePixel( aTbxSize );
518 }
519 
520 void ParaPropertyPanel::initial()
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(SvxBrushItem))
758     {
759         const SvxBrushItem* pItem =  (const SvxBrushItem*)pState;
760         maColor = pItem->GetColor();
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 Color ParaPropertyPanel::GetBGColor (void) const
773 {
774     return maColor;
775 }
776 
777 void ParaPropertyPanel::SetBGColor (
778     const String& rsColorName,
779     const Color aColor)
780 {
781     SvxColorItem aColorItem(aColor, SID_BACKGROUND_COLOR);
782     mpBindings->GetDispatcher()->Execute(SID_BACKGROUND_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L);
783     maColor = aColor;
784 }
785 
786 //==================================for Paragraph Alignment=====================
787 IMPL_LINK( ParaPropertyPanel, AlignStyleModifyHdl_Impl, ToolBox*, pBox )
788 {
789     switch (pBox->GetCurItemId())
790     {
791     case BT_SUBSTLEFT:
792         {
793             pBox->SetItemState(BT_SUBSTLEFT,STATE_CHECK);
794             pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
795             pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
796             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
797             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_LEFT,  sal_True );
798             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_LEFT, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
799         }
800         break;
801     case BT_SUBSTCENTER:
802         {
803             pBox->SetItemState(BT_SUBSTCENTER,STATE_CHECK);
804             pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
805             pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
806             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
807             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_CENTER, sal_True );
808             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_CENTER, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
809         }
810         break;
811     case BT_SUBSTRIGHT:
812         {
813             pBox->SetItemState(BT_SUBSTRIGHT,STATE_CHECK);
814             pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
815             pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
816             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
817             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_RIGHT, sal_True );
818             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_RIGHT, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
819         }
820         break;
821     case BT_SUBSTJUSTIFY:
822         {
823             pBox->SetItemState(BT_SUBSTJUSTIFY,STATE_CHECK);
824             pBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
825             pBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
826             pBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
827             SfxBoolItem aBoolItem( SID_ATTR_PARA_ADJUST_BLOCK, sal_True );
828             GetBindings()->GetDispatcher()->Execute(SID_ATTR_PARA_ADJUST_BLOCK, SFX_CALLMODE_RECORD, &aBoolItem, 0L);
829         }
830         break;
831     }
832 
833     return 0;
834 }
835 //==================================for Paragraph Indent=====================
836 IMPL_LINK( ParaPropertyPanel, ModifyIndentHdl_Impl, SvxRelativeField*, pBox )
837 {
838     SvxLRSpaceItem aMargin( SID_ATTR_LRSPACE );
839     aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) );
840     aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
841     aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
842 
843     GetBindings()->GetDispatcher()->Execute(
844         SID_ATTR_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
845     return 0;
846 }
847 
848 IMPL_LINK(ParaPropertyPanel, ClickIndent_IncDec_Hdl_Impl, ToolBox *, pControl)
849 {
850     switch (pControl->GetCurItemId())
851     {
852         case INDENT_INCREMENT:
853         {
854             switch (maContext.GetCombinedContext())
855             {
856                 case CombinedEnumContext(Application_Writer, Context_Default):
857                 case CombinedEnumContext(Application_Writer, Context_Text):
858                 case CombinedEnumContext(Application_Writer, Context_Table):
859                 {
860                     SfxBoolItem aMargin( SID_INC_INDENT, sal_True );
861                     GetBindings()->GetDispatcher()->Execute(
862                         SID_INC_INDENT, SFX_CALLMODE_RECORD, &aMargin, 0L);
863                 }
864                 break;
865                 default:
866                 {
867                     SvxLRSpaceItem aMargin( SID_ATTR_LRSPACE );
868 
869                     maTxtLeft += INDENT_STEP;
870                     sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
871                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
872                     aMargin.SetTxtLeft( (const long)nVal );
873                     aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
874                     aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
875 
876                     GetBindings()->GetDispatcher()->Execute(
877                         SID_ATTR_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
878                 }
879             }
880         }
881         break;
882         case INDENT_DECREMENT:
883         {
884             switch (maContext.GetCombinedContext())
885             {
886                 case CombinedEnumContext(Application_Writer, Context_Default):
887                 case CombinedEnumContext(Application_Writer, Context_Text):
888                 case CombinedEnumContext(Application_Writer, Context_Table):
889                 {
890                     SfxBoolItem aMargin( SID_DEC_INDENT, sal_True );
891                     GetBindings()->GetDispatcher()->Execute(
892                         SID_DEC_INDENT, SFX_CALLMODE_RECORD, &aMargin, 0L);
893                 }
894                 break;
895                 default:
896                 {
897                     if((maTxtLeft - INDENT_STEP) < 0)
898                         maTxtLeft = DEFAULT_VALUE;
899                     else
900                         maTxtLeft -= INDENT_STEP;
901 
902                     SvxLRSpaceItem aMargin( SID_ATTR_LRSPACE );
903 
904                     sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
905                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
906 
907                     aMargin.SetTxtLeft( (const long)nVal );
908                     aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
909                     aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
910 
911                     GetBindings()->GetDispatcher()->Execute(
912                         SID_ATTR_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
913                 }
914             }
915         }
916         break;
917         case ID_HANGING_INDENT:
918         {
919             SvxLRSpaceItem aMargin( SID_ATTR_LRSPACE );
920             aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) + (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
921             aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
922             aMargin.SetTxtFirstLineOfst( ((const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ))*(-1) );
923 
924             GetBindings()->GetDispatcher()->Execute(
925                 SID_ATTR_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
926         }
927         break;
928     }
929     return( 0L );
930 }
931 
932 IMPL_LINK(ParaPropertyPanel, ClickProDemote_Hdl_Impl, ToolBox *, pControl)
933 {
934     switch (pControl->GetCurItemId())
935     {
936         case BT_TBX_INDENT_PROMOTE:
937         {
938             SvxLRSpaceItem aMargin( SID_ATTR_PARA_RIGHT );
939 
940             maTxtLeft += INDENT_STEP;
941             sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
942             nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
943             aMargin.SetTxtLeft( (const long)nVal );
944             aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
945             aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
946 
947             GetBindings()->GetDispatcher()->Execute(
948                 SID_ATTR_PARA_RIGHT, SFX_CALLMODE_RECORD, &aMargin, 0L);
949         }
950         break;
951         case BT_TBX_INDENT_DEMOTE:
952         {
953             if((maTxtLeft - INDENT_STEP) < 0)
954                 maTxtLeft = DEFAULT_VALUE;
955             else
956                 maTxtLeft -= INDENT_STEP;
957 
958             SvxLRSpaceItem aMargin( SID_ATTR_PARA_LEFT );
959 
960             sal_Int64 nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
961             nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
962 
963             aMargin.SetTxtLeft( (const long)nVal );
964             aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
965             aMargin.SetTxtFirstLineOfst( (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
966 
967             GetBindings()->GetDispatcher()->Execute(
968                 SID_ATTR_PARA_LEFT, SFX_CALLMODE_RECORD, &aMargin, 0L);
969         }
970         break;
971         case SD_HANGING_INDENT:
972         {
973             SvxLRSpaceItem aMargin( SID_ATTR_LRSPACE );
974             aMargin.SetTxtLeft( (const long)GetCoreValue( *maLeftIndent.get(), m_eLRSpaceUnit ) + (const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ) );
975             aMargin.SetRight( (const long)GetCoreValue( *maRightIndent.get(), m_eLRSpaceUnit ) );
976             aMargin.SetTxtFirstLineOfst( ((const short)GetCoreValue( *maFLineIndent.get(), m_eLRSpaceUnit ))*(-1) );
977 
978             GetBindings()->GetDispatcher()->Execute(
979                 SID_ATTR_LRSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
980         }
981         break;
982     }
983     return( 0L );
984 }
985 //==================================for Paragraph Line Spacing=====================
986 
987 IMPL_LINK( ParaPropertyPanel, ClickLineSPDropDownHdl_Impl, ToolBox*, pBox )
988 {
989 
990     const sal_uInt16 nId = pBox->GetCurItemId();
991     OSL_ASSERT(nId == TOOLBOX_ITEM1);
992     if(nId == TOOLBOX_ITEM1)
993     {
994         pBox->SetItemDown( nId, true );
995         maLineSpacePopup.Rearrange(meLnSpState,m_eMetricUnit,mpLnSPItem,maContext);
996         maLineSpacePopup.Show(*pBox);
997 
998     }
999     return (0L);
1000 }
1001 
1002 //==================================for Paragraph Spacing=====================
1003 IMPL_LINK( ParaPropertyPanel, ULSpaceHdl_Impl, SvxRelativeField*, pBox )
1004 {
1005     SvxULSpaceItem aMargin( SID_ATTR_ULSPACE );
1006     aMargin.SetUpper( (sal_uInt16)GetCoreValue( *maTopDist.get(), m_eULSpaceUnit ) );
1007     aMargin.SetLower( (sal_uInt16)GetCoreValue( *maBottomDist.get(), m_eULSpaceUnit ) );
1008 
1009     GetBindings()->GetDispatcher()->Execute(
1010         SID_ATTR_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
1011     return 0L;
1012 }
1013 
1014 IMPL_LINK(ParaPropertyPanel, ClickUL_IncDec_Hdl_Impl, ToolBox *, pControl)
1015 {
1016     switch (pControl->GetCurItemId())
1017         {
1018         case UL_INCREMENT:
1019              {
1020                  SvxULSpaceItem aMargin( SID_ATTR_ULSPACE );
1021 
1022                  maUpper += UL_STEP;
1023                  sal_Int64 nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1024                  nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
1025                  aMargin.SetUpper( (const sal_uInt16)nVal );
1026 
1027                  maLower += UL_STEP;
1028                  nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1029                  nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
1030                  aMargin.SetLower( (const sal_uInt16)nVal );
1031 
1032                  GetBindings()->GetDispatcher()->Execute(
1033                      SID_ATTR_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
1034              }
1035              break;
1036         case UL_DECREMENT:
1037             {
1038                  SvxULSpaceItem aMargin( SID_ATTR_ULSPACE );
1039 
1040                  if( maUpper >= UL_STEP )
1041                  {
1042                     maUpper -= UL_STEP;
1043                     sal_Int64   nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1044                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
1045                     aMargin.SetUpper( (const sal_uInt16)nVal );
1046                  }
1047                  else
1048                     aMargin.SetUpper( DEFAULT_VALUE );
1049                  if( maLower >= UL_STEP )
1050                  {
1051                     maLower -= UL_STEP;
1052                     sal_Int64   nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1053                     nVal = OutputDevice::LogicToLogic( (long)nVal, MAP_100TH_MM, (MapUnit)m_eLRSpaceUnit );
1054                     aMargin.SetLower( (const sal_uInt16)nVal );
1055                  }
1056                  else
1057                     aMargin.SetLower( DEFAULT_VALUE );
1058 
1059                  GetBindings()->GetDispatcher()->Execute(
1060                      SID_ATTR_ULSPACE, SFX_CALLMODE_RECORD, &aMargin, 0L);
1061             }
1062             break;
1063         }
1064     return( 0L );
1065 }
1066 
1067 //==================================for Paragraph State change=====================
1068 void ParaPropertyPanel::NotifyItemUpdate( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1069 {
1070     if( nSID == SID_ATTR_METRIC )
1071     {
1072         m_eMetricUnit = GetCurrentUnit(eState,pState);
1073         if( m_eMetricUnit!=m_last_eMetricUnit )
1074         {
1075             SetFieldUnit( *maLeftIndent.get(), m_eMetricUnit );
1076             SetFieldUnit( *maRightIndent.get(), m_eMetricUnit );
1077             SetFieldUnit( *maFLineIndent.get(), m_eMetricUnit );
1078             SetFieldUnit( *maTopDist.get(), m_eMetricUnit );
1079             SetFieldUnit( *maBottomDist.get(), m_eMetricUnit );
1080         }
1081         m_last_eMetricUnit = m_eMetricUnit;
1082     }
1083 
1084     if( nSID == SID_ATTR_PARA_LRSPACE )
1085         StateChangedIndentImpl( nSID, eState, pState );
1086 
1087     if( nSID == SID_ATTR_PARA_LINESPACE )
1088         StateChangedLnSPImpl( nSID, eState, pState );
1089 
1090     if( nSID == SID_ATTR_PARA_ULSPACE)
1091         StateChangedULImpl( nSID, eState, pState );
1092 
1093     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)
1094         StateChangedAlignmentImpl( nSID, eState, pState );
1095 
1096     if (nSID==SID_OUTLINE_LEFT || nSID==SID_OUTLINE_RIGHT)
1097         StateChangeOutLineImpl( nSID, eState, pState );
1098 
1099     if (nSID==SID_INC_INDENT || nSID==SID_DEC_INDENT)
1100         StateChangeIncDecImpl( nSID, eState, pState );
1101     //Sym3_1093. Add toggle state for numbering and bullet icons
1102     if (nSID==FN_NUM_NUMBERING_ON || nSID==FN_NUM_BULLET_ON)
1103         StateChangeBulletNumImpl( nSID, eState, pState );
1104 
1105     //Modified for Numbering&Bullets Dialog UX Enh(Story 992) by chengjh,2011.7.5
1106     //Get the num rule index data of the current selection
1107     if ( nSID == FN_BUL_NUM_RULE_INDEX ||nSID == FN_NUM_NUM_RULE_INDEX)
1108         StateChangeBulletNumRuleImpl( nSID, eState, pState );
1109     //End
1110 
1111     if ((nSID == SID_TABLE_VERT_NONE)||(nSID == SID_TABLE_VERT_CENTER)||(nSID == SID_TABLE_VERT_BOTTOM))
1112     {
1113         VertStateChanged( nSID, eState, pState);
1114     }
1115     else if (nSID == SID_BACKGROUND_COLOR)
1116     {
1117         ParaBKGStateChanged(nSID, eState, pState);
1118     }
1119 }
1120 
1121 void ParaPropertyPanel::StateChangedAlignmentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1122 {
1123     if( eState >= SFX_ITEM_AVAILABLE )
1124     {
1125         const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
1126         bool IsChecked = (bool)pItem->GetValue();
1127         switch (nSID)
1128         {
1129         case SID_ATTR_PARA_ADJUST_LEFT:
1130             {
1131                 if(IsChecked)
1132                 {
1133                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_CHECK);
1134                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1135                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1136                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1137                 }
1138                 else
1139                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1140             }
1141             break;
1142         case SID_ATTR_PARA_ADJUST_CENTER:
1143             {
1144                 if(IsChecked)
1145                 {
1146                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_CHECK);
1147                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1148                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1149                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1150                 }
1151                 else
1152                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1153             }
1154             break;
1155         case SID_ATTR_PARA_ADJUST_RIGHT:
1156             {
1157                 if(IsChecked)
1158                 {
1159                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_CHECK);
1160                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1161                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1162                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1163                 }
1164                 else
1165                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1166             }
1167             break;
1168         case SID_ATTR_PARA_ADJUST_BLOCK:
1169             {
1170                 if(IsChecked)
1171                 {
1172                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_CHECK);
1173                     maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1174                     maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1175                     maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1176                 }
1177                 else
1178                     maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1179             }
1180             break;
1181         }
1182     }
1183     else if( eState == SFX_ITEM_DISABLED )
1184     {
1185     }
1186     else if ( eState == SFX_ITEM_DONTCARE )
1187     {
1188         switch (nSID)
1189         {
1190         case SID_ATTR_PARA_ADJUST_LEFT:
1191             maAlignToolBox->SetItemState(BT_SUBSTLEFT,STATE_NOCHECK);
1192             break;
1193         case SID_ATTR_PARA_ADJUST_CENTER:
1194             maAlignToolBox->SetItemState(BT_SUBSTCENTER,STATE_NOCHECK);
1195             break;
1196         case SID_ATTR_PARA_ADJUST_RIGHT:
1197             maAlignToolBox->SetItemState(BT_SUBSTRIGHT,STATE_NOCHECK);
1198             break;
1199         case SID_ATTR_PARA_ADJUST_BLOCK:
1200             maAlignToolBox->SetItemState(BT_SUBSTJUSTIFY,STATE_NOCHECK);
1201             break;
1202         }
1203     }
1204 }
1205 
1206 void ParaPropertyPanel::StateChangedIndentImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1207 {
1208     switch (maContext.GetCombinedContext())
1209     {
1210 
1211         case CombinedEnumContext(Application_Writer, Context_DrawText):
1212         case CombinedEnumContext(Application_Calc, Context_DrawText):
1213         case CombinedEnumContext(Application_Writer, Context_Annotation):
1214         {
1215             maLeftIndent->SetMin( DEFAULT_VALUE );
1216             maRightIndent->SetMin( DEFAULT_VALUE );
1217             maFLineIndent->SetMin( DEFAULT_VALUE );
1218             maTbxIndent_IncDec->Show();
1219             maTbxProDemote->Hide();
1220         }
1221         break;
1222         case CombinedEnumContext(Application_Draw, Context_DrawText):
1223             case CombinedEnumContext(Application_Impress, Context_DrawText):
1224         case CombinedEnumContext(Application_Draw, Context_Draw):
1225         case CombinedEnumContext(Application_Draw, Context_TextObject):
1226         case CombinedEnumContext(Application_Draw, Context_Graphic):
1227         case CombinedEnumContext(Application_Impress, Context_Draw):
1228         case CombinedEnumContext(Application_Impress, Context_TextObject):
1229         case CombinedEnumContext(Application_Impress, Context_Graphic):
1230         case CombinedEnumContext(Application_Impress, Context_Table):
1231             case CombinedEnumContext(Application_Draw, Context_Table):
1232         {
1233             maLeftIndent->SetMin( DEFAULT_VALUE );
1234             maRightIndent->SetMin( DEFAULT_VALUE );
1235             maFLineIndent->SetMin( DEFAULT_VALUE );
1236             maTbxIndent_IncDec->Hide();
1237             maTbxProDemote->Show();
1238         }
1239         break;
1240         case CombinedEnumContext(Application_Writer, Context_Default):
1241         case CombinedEnumContext(Application_Writer, Context_Text):
1242         case CombinedEnumContext(Application_Writer, Context_Table):
1243         {
1244             maLeftIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM );
1245             maRightIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM );
1246             maFLineIndent->SetMin( NEGA_MAXVALUE, FUNIT_100TH_MM );
1247             maTbxIndent_IncDec->Show();
1248             maTbxProDemote->Hide();
1249         }
1250         break;
1251     }
1252 
1253     if( pState && eState >= SFX_ITEM_AVAILABLE )
1254     {
1255         SvxLRSpaceItem* pSpace = ( SvxLRSpaceItem*)pState;
1256         maTxtLeft = pSpace->GetTxtLeft();
1257         maTxtLeft = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM );
1258         maTxtLeft = OutputDevice::LogicToLogic( maTxtLeft, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1259 
1260         long aTxtRight = pSpace->GetRight();
1261         aTxtRight = OutputDevice::LogicToLogic( aTxtRight, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM );
1262         aTxtRight = OutputDevice::LogicToLogic( aTxtRight, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1263 
1264         long aTxtFirstLineOfst = pSpace->GetTxtFirstLineOfst();
1265         aTxtFirstLineOfst = OutputDevice::LogicToLogic( aTxtFirstLineOfst, (MapUnit)m_eLRSpaceUnit, MAP_100TH_MM );
1266         aTxtFirstLineOfst = OutputDevice::LogicToLogic( aTxtFirstLineOfst, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1267 
1268         long nVal = OutputDevice::LogicToLogic( maTxtLeft, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1269         nVal = (long)maLeftIndent->Normalize( (long)nVal );
1270         maLeftIndent->SetValue( nVal, FUNIT_100TH_MM );
1271 
1272         if(maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text) &&
1273             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1274             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table))
1275         {
1276             maFLineIndent->SetMin( nVal*(-1), FUNIT_100TH_MM );
1277         }
1278 
1279         long nrVal = OutputDevice::LogicToLogic( aTxtRight, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1280         nrVal = (long)maRightIndent->Normalize( (long)nrVal );
1281         maRightIndent->SetValue( nrVal, FUNIT_100TH_MM );
1282 
1283         long nfVal = OutputDevice::LogicToLogic( aTxtFirstLineOfst, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1284         nfVal = (long)maFLineIndent->Normalize( (long)nfVal );
1285         maFLineIndent->SetValue( nfVal, FUNIT_100TH_MM );
1286 
1287         switch (maContext.GetCombinedContext())
1288         {
1289             case CombinedEnumContext(Application_Writer, Context_DrawText):
1290             case CombinedEnumContext(Application_Writer, Context_Text):
1291             case CombinedEnumContext(Application_Writer, Context_Default):
1292             case CombinedEnumContext(Application_Writer, Context_Table):
1293             case CombinedEnumContext(Application_Writer, Context_Annotation):
1294             {
1295                 maLeftIndent->SetMax( MAX_SW - nrVal, FUNIT_100TH_MM );
1296                 maRightIndent->SetMax( MAX_SW - nVal, FUNIT_100TH_MM );
1297                 maFLineIndent->SetMax( MAX_SW - nVal - nrVal, FUNIT_100TH_MM );
1298             }
1299             break;
1300             case CombinedEnumContext(Application_Draw, Context_DrawText):
1301             case CombinedEnumContext(Application_Draw, Context_Draw):
1302                 case CombinedEnumContext(Application_Draw, Context_Table):
1303             case CombinedEnumContext(Application_Draw, Context_TextObject):
1304             case CombinedEnumContext(Application_Draw, Context_Graphic):
1305             case CombinedEnumContext(Application_Impress, Context_TextObject):
1306                 case CombinedEnumContext(Application_Impress, Context_DrawText):
1307             case CombinedEnumContext(Application_Impress, Context_Table):
1308             case CombinedEnumContext(Application_Impress, Context_Draw):
1309             case CombinedEnumContext(Application_Impress, Context_Graphic):
1310             {
1311                 maLeftIndent->SetMax( MAX_SC_SD - nrVal, FUNIT_100TH_MM );
1312                 maRightIndent->SetMax( MAX_SC_SD - nVal, FUNIT_100TH_MM );
1313                 maFLineIndent->SetMax( MAX_SC_SD - nVal - nrVal, FUNIT_100TH_MM );
1314             }
1315         }
1316 
1317         maTbxIndent_IncDec->Enable();
1318         maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_True);
1319         if(maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)
1320             && maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default)
1321             && maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Table))
1322         {
1323             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_True);
1324             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_True);
1325         }
1326 
1327 //      maTbxProDemote->Enable();
1328 //      if( !mbOutLineRight && !mbOutLineLeft )
1329 //          maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True);
1330         maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True);
1331     }
1332     else if( eState == SFX_ITEM_DISABLED )
1333     {
1334         maLeftIndent-> Disable();
1335         maRightIndent->Disable();
1336         maFLineIndent->Disable();
1337         maTbxIndent_IncDec->Disable();
1338         if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1339             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1340             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1341             maTbxIndent_IncDec->Disable();
1342         else
1343             maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_False);
1344 
1345 //      maTbxProDemote->Disable();
1346         maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False);
1347     }
1348     else
1349     {
1350         maLeftIndent->SetEmptyFieldValue();
1351         maRightIndent->SetEmptyFieldValue();
1352         maFLineIndent->SetEmptyFieldValue();
1353         if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1354             maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1355             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1356             maTbxIndent_IncDec->Disable();
1357         else
1358             maTbxIndent_IncDec->EnableItem(ID_HANGING_INDENT, sal_False);
1359 //      maTbxProDemote->Disable();
1360         maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False);
1361     }
1362 }
1363 
1364 void ParaPropertyPanel::StateChangedLnSPImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1365 {
1366     meLnSpState = eState;
1367 
1368     if( pState && eState >= SFX_ITEM_AVAILABLE )
1369     {
1370         if(mpLnSPItem)
1371             delete mpLnSPItem;
1372         mpLnSPItem = ( SvxLineSpacingItem *)pState->Clone();
1373     }
1374 }
1375 
1376 void ParaPropertyPanel::StateChangedULImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1377 {
1378     maTopDist->SetMax( maTopDist->Normalize( MAX_DURCH ), MapToFieldUnit(m_eULSpaceUnit) );
1379     maBottomDist->SetMax( maBottomDist->Normalize( MAX_DURCH ), MapToFieldUnit(m_eULSpaceUnit) );
1380 
1381     if( pState && eState >= SFX_ITEM_AVAILABLE )
1382     {
1383         SvxULSpaceItem* pOldItem = (SvxULSpaceItem*)pState;
1384 
1385         maUpper = pOldItem->GetUpper();
1386         maUpper = OutputDevice::LogicToLogic( maUpper, (MapUnit)m_eULSpaceUnit, MAP_100TH_MM );
1387         maUpper = OutputDevice::LogicToLogic( maUpper, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1388 
1389         maLower = pOldItem->GetLower();
1390         maLower = OutputDevice::LogicToLogic( maLower, (MapUnit)m_eULSpaceUnit, MAP_100TH_MM );
1391         maLower = OutputDevice::LogicToLogic( maLower, MAP_100TH_MM, (MapUnit)(SFX_MAPUNIT_TWIP) );
1392 
1393         sal_Int64 nVal = OutputDevice::LogicToLogic( maUpper, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1394         nVal = maTopDist->Normalize( nVal );
1395         maTopDist->SetValue( nVal, FUNIT_100TH_MM );
1396 
1397         nVal = OutputDevice::LogicToLogic( maLower, (MapUnit)(SFX_MAPUNIT_TWIP), MAP_100TH_MM );
1398         nVal = maBottomDist->Normalize( nVal );
1399         maBottomDist->SetValue( nVal, FUNIT_100TH_MM );
1400         maTbxUL_IncDec->Enable();
1401     }
1402     else if(nSID == SID_ATTR_ULSPACE && eState == SFX_ITEM_DISABLED )
1403     {
1404         maTopDist->Disable();
1405         maBottomDist->Disable();
1406         maTbxUL_IncDec->Disable();
1407     }
1408     else if (nSID == SID_ATTR_ULSPACE)
1409     {
1410         maTopDist->SetEmptyFieldValue();
1411         maBottomDist->SetEmptyFieldValue();
1412         maTbxUL_IncDec->Disable();
1413     }
1414 }
1415 
1416 void ParaPropertyPanel::StateChangeOutLineImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1417 {
1418     if (nSID==SID_OUTLINE_LEFT)
1419     {
1420         if( pState && eState == SFX_ITEM_UNKNOWN )
1421             mbOutLineLeft = 1;
1422         else
1423             mbOutLineLeft = 0;
1424     }
1425     if (nSID==SID_OUTLINE_RIGHT)
1426     {
1427         if( pState && eState == SFX_ITEM_UNKNOWN )
1428             mbOutLineRight = 1;
1429         else
1430             mbOutLineRight = 0;
1431     }
1432     if(mbOutLineLeft)
1433         maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_True);
1434     else
1435         maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_False);
1436 
1437     if(mbOutLineRight)
1438         maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_True);
1439     else
1440         maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_False);
1441 
1442 //  if( !mbOutLineRight && !mbOutLineLeft )
1443 //  {
1444 //      maTbxProDemote->EnableItem(BT_TBX_INDENT_PROMOTE, sal_True);
1445 //      maTbxProDemote->EnableItem(BT_TBX_INDENT_DEMOTE, sal_True);
1446 //      maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_True);
1447 //  }
1448 //  else
1449 //      maTbxProDemote->EnableItem(SD_HANGING_INDENT, sal_False);
1450 }
1451 
1452 void ParaPropertyPanel::StateChangeIncDecImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1453 {
1454     if (nSID==SID_INC_INDENT)
1455     {
1456         if( pState && eState == SFX_ITEM_UNKNOWN )
1457             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_True);
1458         else
1459             if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1460                 maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1461             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1462                 maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_INC, sal_False);
1463     }
1464     if (nSID==SID_DEC_INDENT)
1465     {
1466         if( pState && eState == SFX_ITEM_UNKNOWN )
1467             maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_True);
1468         else
1469             if( maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Text)  &&
1470                 maContext.GetCombinedContext() != CombinedEnumContext(Application_Writer, Context_Default) &&
1471             maContext.GetCombinedContext() !=  CombinedEnumContext(Application_Writer, Context_Table) )
1472                 maTbxIndent_IncDec->EnableItem(BT_TBX_INDENT_DEC, sal_False);
1473     }
1474 }
1475 //Sym3_1093. Add toggle state for numbering and bullet icons
1476 void ParaPropertyPanel::StateChangeBulletNumImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1477 {
1478     if (nSID==FN_NUM_NUMBERING_ON)
1479     {
1480         if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem)))
1481         {
1482             const SfxBoolItem* pItem= (const SfxBoolItem*)pState;
1483             sal_Bool aBool = (sal_Bool)pItem->GetValue();
1484             if (aBool) {
1485                 maTBxNumBullet->SetItemState(IID_NUMBER,    STATE_CHECK);
1486             } else {
1487                 maTBxNumBullet->SetItemState(IID_NUMBER,    STATE_NOCHECK);
1488             }
1489         }
1490     }
1491     if (nSID==FN_NUM_BULLET_ON)
1492     {
1493         if ( (eState >= SFX_ITEM_DEFAULT) && (pState->ISA(SfxBoolItem)))
1494         {
1495             const SfxBoolItem* pItem= (const SfxBoolItem*)pState;
1496             sal_Bool aBool = (sal_Bool)pItem->GetValue();
1497             if (aBool) {
1498                 maTBxNumBullet->SetItemState(IID_BULLET,    STATE_CHECK);
1499             } else {
1500                 maTBxNumBullet->SetItemState(IID_BULLET,    STATE_NOCHECK);
1501             }
1502         }
1503     }
1504 }
1505 //Modified for Numbering&Bullets Dialog UX Enh(Story 992) by chengjh,2011.7.5
1506 //Handing the transferred the num rule index data of the current selection
1507 void ParaPropertyPanel::StateChangeBulletNumRuleImpl( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
1508 {
1509 
1510     const SfxUInt16Item* pIt = (const SfxUInt16Item*)pState;
1511     sal_uInt16 nValue = (sal_uInt16)0xFFFF;
1512     if ( pIt )
1513         nValue = pIt->GetValue();
1514 
1515     if ( nSID == FN_BUL_NUM_RULE_INDEX )
1516     {
1517         nBulletTypeIndex = nValue;
1518     }else if ( nSID == FN_NUM_NUM_RULE_INDEX )
1519     {
1520         nNumTypeIndex = nValue;
1521     }
1522 }
1523 //End
1524 FieldUnit ParaPropertyPanel::GetCurrentUnit( SfxItemState eState, const SfxPoolItem* pState )
1525 {
1526     FieldUnit eUnit = FUNIT_NONE;
1527 
1528     if ( pState && eState >= SFX_ITEM_DEFAULT )
1529         eUnit = (FieldUnit)( (const SfxUInt16Item*)pState )->GetValue();
1530     else
1531     {
1532         SfxViewFrame* pFrame = SfxViewFrame::Current();
1533         SfxObjectShell* pSh = NULL;
1534         if ( pFrame )
1535             pSh = pFrame->GetObjectShell();
1536         if ( pSh )  //the object shell is not always available during reload
1537         {
1538             SfxModule* pModule = pSh->GetModule();
1539             if ( pModule )
1540             {
1541                 const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC );
1542                 if ( pItem )
1543                     eUnit = (FieldUnit)( (SfxUInt16Item*)pItem )->GetValue();
1544             }
1545             else
1546             {
1547                 DBG_ERRORFILE( "GetModuleFieldUnit(): no module found" );
1548             }
1549         }
1550     }
1551 
1552     return eUnit;
1553 }
1554 //new FixedText(this, SVX_RES(FT_COLOR))
1555 
1556 PopupControl* ParaPropertyPanel::CreateLineSpacingControl (PopupContainer* pParent)
1557 {
1558     return new ParaLineSpacingControl(pParent, *this);
1559 }
1560 
1561 PopupControl* ParaPropertyPanel::CreateBulletsPopupControl (PopupContainer* pParent)
1562 {
1563     return new ParaBulletsControl(pParent, *this);
1564 }
1565 
1566 PopupControl* ParaPropertyPanel::CreateNumberingPopupControl (PopupContainer* pParent)
1567 {
1568     return new ParaNumberingControl(pParent, *this);
1569 }
1570 
1571 PopupControl* ParaPropertyPanel::CreateBGColorPopupControl (PopupContainer* pParent)
1572 {
1573     return new ColorControl(
1574         pParent,
1575         mpBindings,
1576         SVX_RES(RID_POPUPPANEL_TEXTPAGE_FONT_COLOR),
1577         SVX_RES(VS_FONT_COLOR),
1578         ::boost::bind(&ParaPropertyPanel::GetBGColor, this),
1579         ::boost::bind(&ParaPropertyPanel::SetBGColor, this, _1,_2),
1580         pParent,
1581         0);
1582 }
1583 
1584 
1585 ParaPropertyPanel::ParaPropertyPanel(Window* pParent,
1586     const cssu::Reference<css::frame::XFrame>& rxFrame,
1587     SfxBindings* pBindings)
1588 :   Control(pParent, SVX_RES(RID_SIDEBAR_PARA_PANEL))
1589 //, mnContextId         (PROPERTY_CONTEXT_NOT_SUPPORT)
1590 //Alignment
1591 ,maAlignToolBoxBackground(ControlFactory::CreateToolBoxBackground(this))
1592 , maAlignToolBox          (ControlFactory::CreateToolBox(maAlignToolBoxBackground.get(),SVX_RES(TBX_HORIZONTALALIGNMENT)))
1593 ,maTBxVertAlignBackground(ControlFactory::CreateToolBoxBackground(this))
1594 , maTBxVertAlign    (ControlFactory::CreateToolBox(maTBxVertAlignBackground.get(),SVX_RES(TBX_VERT_ALIGN)))
1595 , maLeftPara              (SVX_RES(IMG_LEFT_PARA))
1596 , maCentPara              (SVX_RES(IMG_CENTER_PARA))
1597 , maRightPara             (SVX_RES(IMG_RIGHT_PARA))
1598 , maJusPara               (SVX_RES(IMG_JUSTIFY_PARA))
1599 , maVertImageList         (SVX_RES(IL_VERT_ALIGN))
1600 , maVertImageListH        (SVX_RES(IL_VERT_ALIGN))
1601 //Num&Backcolor
1602 ,maTBxNumBulletBackground(ControlFactory::CreateToolBoxBackground(this))
1603 , maTBxNumBullet          (ControlFactory::CreateToolBox(maTBxNumBulletBackground.get(),SVX_RES(TBX_NUM_BULLET)))
1604 ,maTBxBackColorBackground(ControlFactory::CreateToolBoxBackground(this))
1605 , maTBxBackColor          (ControlFactory::CreateToolBox(maTBxBackColorBackground.get(),SVX_RES(TBX_BACK_COLOR)))
1606 , maNumBImageList         (SVX_RES(IL_NUM_BULLET))
1607 , maNumBImageListH        (SVX_RES(ILH_NUM_BULLET))
1608 , maNumBImageListRTL      (SVX_RES(IL_NUM_BULLET_RTL))  //wj sym2_7380
1609 , maImgBackColorHigh      (SVX_RES(IMG_BACK_COLOR_H))
1610 , maImgBackColor          (SVX_RES(IMG_BACK_COLOR))
1611 , mpColorUpdater          ()
1612 , maColor                 (COL_AUTO)
1613 , mbColorAvailable        (sal_True)
1614 //Paragraph spacing
1615 , maFTUL                  (new FixedText(this, SVX_RES(FT_SPACING)))
1616 ,maTbxUL_IncDecBackground(ControlFactory::CreateToolBoxBackground(this))
1617 , maTbxUL_IncDec          (ControlFactory::CreateToolBox(maTbxUL_IncDecBackground.get(),SVX_RES(TBX_UL_INC_DEC)))
1618 , maParInc                (SVX_RES(IMG_PARA_INC))
1619 , maParDec                (SVX_RES(IMG_PARA_DEC))
1620 , maTopDist               (new SvxRelativeField(this, SVX_RES(MF_ABOVE_PARASPACING)))
1621 , maBottomDist            (new SvxRelativeField(this, SVX_RES(MF_BELOW_PARASPACING)))
1622 //Indent
1623 , maFTIndent              (new FixedText(this, SVX_RES(FT_INDENT)))
1624 ,maTbxIndent_IncDecBackground(ControlFactory::CreateToolBoxBackground(this))
1625 , maTbxIndent_IncDec      (ControlFactory::CreateToolBox(maTbxIndent_IncDecBackground.get(),SVX_RES(TBX_INDENT_INC_DEC)))
1626 ,maTbxProDemoteBackground(ControlFactory::CreateToolBoxBackground(this))
1627 , maTbxProDemote          (ControlFactory::CreateToolBox(maTbxProDemoteBackground.get(),SVX_RES(TBX_INDENT_PRO_DEMOTE)))
1628 , maLeftIndent            (new SvxRelativeField(this, SVX_RES(MF_BEFORE_INDENT)))
1629 , maRightIndent           (new SvxRelativeField(this, SVX_RES(MF_AFTER_INDENT)))
1630 , maFLineIndent           (new SvxRelativeField(this, SVX_RES(MF_FL_INDENT)))
1631 , maIndInc                (SVX_RES(IMG_INDENT_INC))
1632 , maIndDec                (SVX_RES(IMG_INDENT_DEC))
1633 , maIndInc_BD             (SVX_RES(IMG_INDENT_INC_BD))
1634 , maIndDec_BD             (SVX_RES(IMG_INDENT_DEC_BD))
1635 , maIndHang               (SVX_RES(IMG_INDENT_HANG))
1636 , maTxtLeft               (0)
1637 //Line spacing
1638 ,maLineSPTbxBackground(ControlFactory::CreateToolBoxBackground(this))
1639 , maLineSPTbx             (ControlFactory::CreateToolBox(maLineSPTbxBackground.get(),SVX_RES(TBX_LINESP)))
1640 , maSpace1                (SVX_RES(IMG_SPACE1))
1641 , maSpace2                (SVX_RES(IMG_SPACE2))
1642 , maSpace3                (SVX_RES(IMG_SPACE3))
1643 , maIndent1               (SVX_RES(IMG_INDENT1))
1644 , maIndent2               (SVX_RES(IMG_INDENT2))
1645 , maIndent3               (SVX_RES(IMG_INDENT3))
1646 , maLineSpacePopup(this, ::boost::bind(&ParaPropertyPanel::CreateLineSpacingControl, this, _1))
1647 , maBulletsPopup(this, ::boost::bind(&ParaPropertyPanel::CreateBulletsPopupControl, this, _1))
1648 , maNumberingPopup(this, ::boost::bind(&ParaPropertyPanel::CreateNumberingPopupControl, this, _1))
1649 , maBGColorPopup(this, ::boost::bind(&ParaPropertyPanel::CreateBGColorPopupControl, this, _1))
1650 //Controller
1651 , maLeftAlignControl      (SID_ATTR_PARA_ADJUST_LEFT, *pBindings,*this)
1652 , maCenterAlignControl    (SID_ATTR_PARA_ADJUST_CENTER, *pBindings,*this)
1653 , maRightAlignControl     (SID_ATTR_PARA_ADJUST_RIGHT, *pBindings,*this)
1654 , maJustifyAlignControl   (SID_ATTR_PARA_ADJUST_BLOCK, *pBindings,*this)
1655 , maLRSpaceControl        (SID_ATTR_PARA_LRSPACE,*pBindings,*this)
1656 , maLNSpaceControl        (SID_ATTR_PARA_LINESPACE, *pBindings,*this)
1657 , maULSpaceControl        (SID_ATTR_PARA_ULSPACE, *pBindings,*this)
1658 , maOutLineLeftControl    (SID_OUTLINE_LEFT, *pBindings,*this)
1659 , maOutLineRightControl   (SID_OUTLINE_RIGHT, *pBindings,*this)
1660 , maIncIndentControl      (SID_INC_INDENT, *pBindings,*this)
1661 , maDecIndentControl      (SID_DEC_INDENT, *pBindings,*this)
1662 , maVertTop               (SID_TABLE_VERT_NONE, *pBindings,*this)
1663 , maVertCenter            (SID_TABLE_VERT_CENTER, *pBindings,*this)
1664 , maVertBottom            (SID_TABLE_VERT_BOTTOM,*pBindings,*this)
1665 , maBulletOnOff           (FN_NUM_BULLET_ON, *pBindings,*this)
1666 , maNumberOnOff           (FN_NUM_NUMBERING_ON, *pBindings,*this)
1667 //Modified for Numbering&Bullets Dialog UX Enh(Story 992) by chengjh,2011.7.5
1668 //Add entry to transfer number rule index data
1669 ,maBulletNumRuleIndex       (FN_BUL_NUM_RULE_INDEX, *pBindings,*this)
1670 ,maNumNumRuleIndex      (FN_NUM_NUM_RULE_INDEX, *pBindings,*this)
1671 //End
1672 , maBackColorControl      (SID_BACKGROUND_COLOR,    *pBindings,*this)
1673 , m_aMetricCtl            (SID_ATTR_METRIC, *pBindings,*this)
1674 //, m_eMetricUnit             (FUNIT_INCH)
1675 //, m_last_eMetricUnit      (FUNIT_INCH)
1676 //internal var
1677 , maUpper                       (0)
1678 , maLower                       (0)
1679 , mpLnSPItem                    (NULL)
1680 , meLnSpState                   (SFX_ITEM_DONTCARE)
1681 , maFISpace1                    ( this, SVX_RES( FI_SPACE1))
1682 , maFISpace2                    ( this, SVX_RES( FI_SPACE2))
1683 , maFIndent1                    ( this, SVX_RES( FI_INDENT1))
1684 , maFIndent2                    ( this, SVX_RES( FI_INDENT2))
1685 , maFIndent3                    ( this, SVX_RES( FI_INDENT3))
1686 , mbOutLineRight                (0)
1687 , mbOutLineLeft                 (0)
1688 ,nBulletTypeIndex ((sal_uInt16)0xFFFF)
1689 ,nNumTypeIndex ((sal_uInt16)0xFFFF)
1690 //End
1691 ,mpBindings(pBindings)
1692 {
1693     initial();
1694     FreeResource();
1695 }
1696 
1697 }}
1698