xref: /trunk/main/svx/source/sidebar/text/TextPropertyPanel.cxx (revision a7d1eb6f28864b439f9fc46032b1706d2d68987c)
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 
24 #include "TextPropertyPanel.hrc"
25 #include "TextPropertyPanel.hxx"
26 #include "SvxSBFontNameBox.hxx"
27 
28 #include "svx/dialmgr.hxx"
29 
30 #include <editeng/brshitem.hxx>
31 #include <editeng/colritem.hxx>
32 #include <editeng/crsditem.hxx>
33 #include <editeng/escpitem.hxx>
34 #include <editeng/flstitem.hxx>
35 #include <editeng/fontitem.hxx>
36 #include <editeng/kernitem.hxx>
37 #include <editeng/postitem.hxx>
38 #include <editeng/shdditem.hxx>
39 #include <editeng/udlnitem.hxx>
40 #include <editeng/wghtitem.hxx>
41 #include <rtl/ref.hxx>
42 #include <sfx2/dispatch.hxx>
43 #include <sfx2/objsh.hxx>
44 #include <sfx2/viewsh.hxx>
45 #include <sfx2/sidebar/propertypanel.hrc>
46 #include <sfx2/sidebar/ControlFactory.hxx>
47 #include <sfx2/sidebar/Theme.hxx>
48 #include "sfx2/imagemgr.hxx"
49 #include <svtools/ctrltool.hxx>
50 #include <svtools/unitconv.hxx>
51 
52 #include <vcl/gradient.hxx>
53 #include <vcl/svapp.hxx>
54 #include <vcl/toolbox.hxx>
55 #include "TextCharacterSpacingControl.hxx"
56 #include "TextCharacterSpacingPopup.hxx"
57 #include "TextUnderlineControl.hxx"
58 #include "TextUnderlinePopup.hxx"
59 #include <svx/sidebar/ColorControl.hxx>
60 #include <svx/sidebar/PopupContainer.hxx>
61 
62 
63 #include <boost/bind.hpp>
64 
65 using namespace css;
66 using namespace cssu;
67 using ::sfx2::sidebar::Theme;
68 using ::sfx2::sidebar::ControlFactory;
69 
70 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
71 
72 namespace svx { namespace sidebar {
73 
74 #undef HAS_IA2
75 
76 
77 #define FONT_CONTROL_WIDTH      160
78 #define SIZE_CONTROL_WIDTH      80
79 #define CONTROL_COMBOX_HEIGHT   20
80 #define CONTROL_HEIGHT_5X       120
81 
82 
83 #define TEXT_SECTIONPAGE_HEIGHT_S   SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT  + ( TOOLBOX_ITEM_HEIGHT + 2 ) + CONTROL_SPACING_VERTICAL * 1 + SECTIONPAGE_MARGIN_VERTICAL_BOT
84 #define TEXT_SECTIONPAGE_HEIGHT     SECTIONPAGE_MARGIN_VERTICAL_TOP + CBOX_HEIGHT  + ( TOOLBOX_ITEM_HEIGHT + 2 ) * 2 + CONTROL_SPACING_VERTICAL * 2 + SECTIONPAGE_MARGIN_VERTICAL_BOT
85 
86 //
87 
88 //end
89 PopupControl* TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent)
90 {
91     return new TextCharacterSpacingControl(pParent, *this);
92 }
93 
94 PopupControl* TextPropertyPanel::CreateUnderlinePopupControl (PopupContainer* pParent)
95 {
96     return new TextUnderlineControl(pParent, *this);
97 }
98 
99 PopupControl* TextPropertyPanel::CreateFontColorPopupControl (PopupContainer* pParent)
100 {
101     return new ColorControl(
102         pParent,
103         mpBindings,
104         SVX_RES(RID_POPUPPANEL_TEXTPAGE_FONT_COLOR),
105         SVX_RES(VS_FONT_COLOR),
106         ::boost::bind(&TextPropertyPanel::GetFontColor, this),
107         ::boost::bind(&TextPropertyPanel::SetFontColor, this, _1,_2),
108         pParent,
109         0);
110 }
111 
112 PopupControl* TextPropertyPanel::CreateBrushColorPopupControl (PopupContainer* pParent)
113 {
114     return new ColorControl(
115         pParent,
116         mpBindings,
117         SVX_RES(RID_POPUPPANEL_TEXTPAGE_FONT_COLOR),
118         SVX_RES(VS_FONT_COLOR),
119         ::boost::bind(&TextPropertyPanel::GetBrushColor, this),
120         ::boost::bind(&TextPropertyPanel::SetBrushColor, this, _1,_2),
121         pParent,
122         0);
123 }
124 
125 long TextPropertyPanel::GetSelFontSize()
126 {
127     long nH = 240;
128     SfxMapUnit eUnit = maSpacingControl.GetCoreMetric();
129     if (mpHeightItem)
130         nH = LogicToLogic(  mpHeightItem->GetHeight(), (MapUnit)eUnit, MAP_TWIP );
131     return nH;
132 }
133 
134 
135 TextPropertyPanel* TextPropertyPanel::Create (
136     Window* pParent,
137     const cssu::Reference<css::frame::XFrame>& rxFrame,
138     SfxBindings* pBindings,
139     const cssu::Reference<css::ui::XSidebar>& rxSidebar)
140 {
141     if (pParent == NULL)
142         throw lang::IllegalArgumentException(A2S("no parent Window given to TextPropertyPanel::Create"), NULL, 0);
143     if ( ! rxFrame.is())
144         throw lang::IllegalArgumentException(A2S("no XFrame given to TextPropertyPanel::Create"), NULL, 1);
145     if (pBindings == NULL)
146         throw lang::IllegalArgumentException(A2S("no SfxBindings given to TextPropertyPanel::Create"), NULL, 2);
147 
148     return new TextPropertyPanel(
149         pParent,
150         rxFrame,
151         pBindings,
152         rxSidebar);
153 }
154 
155 
156 ::sfx2::sidebar::ControllerItem& TextPropertyPanel::GetSpaceController()
157 {
158     return maSpacingControl;
159 }
160 
161 TextPropertyPanel::TextPropertyPanel (
162     Window* pParent,
163     const cssu::Reference<css::frame::XFrame>& rxFrame,
164     SfxBindings* pBindings,
165     const cssu::Reference<css::ui::XSidebar>& rxSidebar)
166     :   Control(pParent, SVX_RES(RID_SIDEBAR_TEXT_PANEL)),
167         mpFontNameBox (new SvxSBFontNameBox(this, SVX_RES(CB_SBFONT_FONT))),
168         maFontSizeBox       (this, SVX_RES(MB_SBFONT_FONTSIZE)),
169         mpToolBoxIncDecBackground(ControlFactory::CreateToolBoxBackground(this)),
170         mpToolBoxIncDec(ControlFactory::CreateToolBox(
171                 mpToolBoxIncDecBackground.get(),
172                 SVX_RES(TB_INCREASE_DECREASE))),
173         mpToolBoxFontBackground(ControlFactory::CreateToolBoxBackground(this)),
174         mpToolBoxFont(ControlFactory::CreateToolBox(
175                 mpToolBoxFontBackground.get(),
176                 SVX_RES(TB_FONT))),
177         mpToolBoxFontColorBackground(ControlFactory::CreateToolBoxBackground(this)),
178         mpToolBoxFontColor(ControlFactory::CreateToolBox(
179                 mpToolBoxFontColorBackground.get(),
180                 SVX_RES(TB_FONTCOLOR))),
181         mpToolBoxScriptBackground(ControlFactory::CreateToolBoxBackground(this)),
182         mpToolBoxScript(ControlFactory::CreateToolBox(
183                 mpToolBoxScriptBackground.get(),
184                 SVX_RES(TB_SCRIPT))),
185         mpToolBoxScriptSwBackground(ControlFactory::CreateToolBoxBackground(this)),
186         mpToolBoxScriptSw(ControlFactory::CreateToolBox(
187                 mpToolBoxScriptSwBackground.get(),
188                 SVX_RES(TB_SCRIPT_SW))),
189         mpToolBoxSpacingBackground(ControlFactory::CreateToolBoxBackground(this)),
190         mpToolBoxSpacing(ControlFactory::CreateToolBox(
191                 mpToolBoxSpacingBackground.get(),
192                 SVX_RES(TB_SPACING))),
193         mpToolBoxHighlightBackground(ControlFactory::CreateToolBoxBackground(this)),
194         mpToolBoxHighlight(ControlFactory::CreateToolBox(
195                 mpToolBoxHighlightBackground.get(),
196                 SVX_RES(TB_HIGHLIGHT))),
197         mpFontColorUpdater(),
198         mpHighlightUpdater(),
199 
200         maFontNameControl   (SID_ATTR_CHAR_FONT,        *pBindings, *this),
201         maFontSizeControl   (SID_ATTR_CHAR_FONTHEIGHT,  *pBindings, *this),
202         maWeightControl     (SID_ATTR_CHAR_WEIGHT,      *pBindings, *this),
203         maItalicControl     (SID_ATTR_CHAR_POSTURE,     *pBindings, *this),
204         maUnderlineControl  (SID_ATTR_CHAR_UNDERLINE,   *pBindings, *this),
205         maStrikeControl     (SID_ATTR_CHAR_STRIKEOUT,   *pBindings, *this),
206         maShadowControl     (SID_ATTR_CHAR_SHADOWED,    *pBindings, *this),
207         maFontColorControl  (SID_ATTR_CHAR_COLOR,       *pBindings, *this),
208         maScriptControlSw   (SID_ATTR_CHAR_ESCAPEMENT,  *pBindings, *this),  //for sw
209         maSuperScriptControl (SID_SET_SUPER_SCRIPT,     *pBindings, *this),
210         maSubScriptControl  (SID_SET_SUB_SCRIPT,        *pBindings, *this),
211         maSpacingControl    (SID_ATTR_CHAR_KERNING,     *pBindings, *this),
212         maHighlightControl  (SID_ATTR_BRUSH_CHAR,       *pBindings, *this),
213         maSDFontGrow        (SID_GROW_FONT_SIZE,        *pBindings, *this),
214         maSDFontShrink      (SID_SHRINK_FONT_SIZE,      *pBindings, *this),
215 
216         maImgIncrease       (SVX_RES( IMG_INCREASE)),
217         maImgDecrease       (SVX_RES( IMG_DECREASE)),
218         maImgBold           (SVX_RES( IMG_BOLD )),
219         maImgItalic         (SVX_RES( IMG_ITALIC )),
220         maImgUnderline      (SVX_RES( IMG_UNDERLINE )),
221         maImgStrike         (SVX_RES( IMG_STRIKEOUT )),
222         maImgShadow         (SVX_RES( IMG_SHADOWED )),
223         maImgFontColor      (SVX_RES( IMG_FONTCOLOR)),
224         maImgSupScript      (SVX_RES( IMG_SUPSCRIPT)),
225         maImgSubScript      (SVX_RES( IMG_SUBSCRIPT)),
226         maImgHighlight      (SVX_RES( IMG_HIGHLIGHT)),
227 
228         maImgNormalIcon     (SVX_RES(IMG_SPACING_D)),
229 
230         maImgIncreaseHigh   (SVX_RES( IMG_INCREASE_H )),
231         maImgDecreaseHigh   (SVX_RES( IMG_DECREASE_H )),
232         maImgBoldHigh       (SVX_RES( IMG_BOLD_H )),
233         maImgItalicHigh     (SVX_RES( IMG_ITALIC_H )),
234         maImgUnderlineHigh  (SVX_RES( IMG_UNDERLINE_H )),
235         maImgStrikeHigh     (SVX_RES( IMG_STRIKEOUT_H )),
236         maImgShadowHigh     (SVX_RES( IMG_SHADOWED_H )),
237         maImgFontColorHigh  (SVX_RES( IMG_FONTCOLOR_H)),
238         maImgSupScriptHigh  (SVX_RES( IMG_SUPSCRIPT_H)),
239         maImgSubScriptHigh  (SVX_RES( IMG_SUBSCRIPT_H)),
240         maImgHighlightHigh  (SVX_RES( IMG_HIGHLIGHT_H)),
241 
242         mpFontList          (NULL),
243         mbMustDelete        (false),
244         mbFocusOnFontSizeCtrl(false),
245     maCharSpacePopup(this, ::boost::bind(&TextPropertyPanel::CreateCharacterSpacingControl, this, _1)),
246     maUnderlinePopup(this, ::boost::bind(&TextPropertyPanel::CreateUnderlinePopupControl, this, _1)),
247     maFontColorPopup(this, ::boost::bind(&TextPropertyPanel::CreateFontColorPopupControl, this, _1)),
248     maBrushColorPopup(this, ::boost::bind(&TextPropertyPanel::CreateBrushColorPopupControl, this, _1)),
249         mxFrame(rxFrame),
250         maContext(),
251         mpBindings(pBindings),
252         mxSidebar(rxSidebar)
253 {
254     Initialize();
255     FreeResource();
256 }
257 
258 
259 
260 
261 TextPropertyPanel::~TextPropertyPanel (void)
262 {
263     if(mbMustDelete)
264         delete mpFontList;
265 
266     // Destroy the toolbox windows.
267     mpToolBoxIncDec.reset();
268     mpToolBoxFont.reset();
269     mpToolBoxFontColor.reset();
270     mpToolBoxScript.reset();
271     mpToolBoxScriptSw.reset();
272     mpToolBoxSpacing.reset();
273     mpToolBoxHighlight.reset();
274 
275     // Destroy the background windows of the toolboxes.
276     mpToolBoxIncDecBackground.reset();
277     mpToolBoxFontBackground.reset();
278     mpToolBoxFontColorBackground.reset();
279     mpToolBoxScriptBackground.reset();
280     mpToolBoxScriptSwBackground.reset();
281     mpToolBoxSpacingBackground.reset();
282     mpToolBoxHighlightBackground.reset();
283 }
284 
285 
286 
287 
288 Image TextPropertyPanel::GetIcon (const ::rtl::OUString& rsURL)
289 {
290     return GetImage(mxFrame, rsURL, sal_False, Theme::IsHighContrastMode());
291 }
292 
293 
294 void TextPropertyPanel::SetSpacing(long nKern)
295 {
296     mlKerning = nKern;
297 }
298 
299 
300 void TextPropertyPanel::HandleContextChange (
301     const ::sfx2::sidebar::EnumContext aContext)
302 {
303     if (maContext == aContext)
304     {
305         // Nothing to do.
306         return;
307     }
308 
309     maContext = aContext;
310     switch (maContext.GetCombinedContext_DI())
311     {
312         case CombinedEnumContext(Application_Calc, Context_Cell):
313         case CombinedEnumContext(Application_Calc, Context_Pivot):
314         {
315             mpToolBoxScript->Hide();
316             mpToolBoxScriptSw->Hide();
317             mpToolBoxSpacing->Hide();
318             mpToolBoxHighlight->Hide();
319 
320             Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT_S);
321             aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
322             aSize.setWidth(GetOutputSizePixel().Width());
323             SetSizePixel(aSize);
324             if (mxSidebar.is())
325                 mxSidebar->requestLayout();
326             break;
327         }
328 
329         case CombinedEnumContext(Application_WriterAndWeb, Context_Text):
330         case CombinedEnumContext(Application_WriterAndWeb, Context_Table):
331         {
332             mpToolBoxScriptSw->Show();
333             mpToolBoxScript->Hide();
334             mpToolBoxHighlight->Show();
335             mpToolBoxSpacing->Show();
336 
337             Size aSize(PROPERTYPAGE_WIDTH, TEXT_SECTIONPAGE_HEIGHT);
338             aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
339             aSize.setWidth(GetOutputSizePixel().Width());
340             SetSizePixel(aSize);
341             if (mxSidebar.is())
342                 mxSidebar->requestLayout();
343             break;
344         }
345 
346         case CombinedEnumContext(Application_Writer, Context_DrawText):
347         case CombinedEnumContext(Application_Writer, Context_Annotation):
348         {
349             mpToolBoxScriptSw->Show();
350             mpToolBoxScript->Hide();
351             mpToolBoxSpacing->Show();
352             mpToolBoxHighlight->Hide();
353 
354             Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT);
355             aSize = LogicToPixel( aSize, MapMode(MAP_APPFONT) );
356             aSize.setWidth(GetOutputSizePixel().Width());
357             SetSizePixel(aSize);
358             if (mxSidebar.is())
359                 mxSidebar->requestLayout();
360             break;
361         }
362 
363         case CombinedEnumContext(Application_Calc, Context_EditCell):
364         case CombinedEnumContext(Application_Calc, Context_DrawText):
365         case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
366         case CombinedEnumContext(Application_DrawImpress, Context_Text):
367         case CombinedEnumContext(Application_DrawImpress, Context_Table):
368         case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
369         case CombinedEnumContext(Application_DrawImpress, Context_Draw):
370         case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
371         case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
372         {
373             mpToolBoxScriptSw->Hide();
374             mpToolBoxScript->Show();
375             mpToolBoxSpacing->Show();
376             mpToolBoxHighlight->Hide();
377 
378             Size aSize(PROPERTYPAGE_WIDTH,TEXT_SECTIONPAGE_HEIGHT);
379             aSize = LogicToPixel( aSize,MapMode(MAP_APPFONT) );
380             aSize.setWidth(GetOutputSizePixel().Width());
381             SetSizePixel(aSize);
382             if (mxSidebar.is())
383                 mxSidebar->requestLayout();
384             break;
385         }
386 
387         default:
388             break;
389     }
390 }
391 
392 SfxBindings* TextPropertyPanel::GetBindings()
393 {
394     return mpBindings;
395 }
396 
397 
398 void TextPropertyPanel::DataChanged (const DataChangedEvent& rEvent)
399 {
400     (void)rEvent;
401 
402     SetupIcons();
403 }
404 
405 
406 
407 void TextPropertyPanel::Initialize (void)
408 {
409     //<<modify fill font list
410     SfxObjectShell* pDocSh = SfxObjectShell::Current();
411     const SfxPoolItem* pItem = NULL;
412 
413     if (pDocSh != NULL)
414         pItem = pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST );
415     if (pItem != NULL)
416         mpFontList = ( (SvxFontListItem*)pItem )->GetFontList();
417     else
418     {
419         mpFontList = new FontList( Application::GetDefaultDevice() );
420         mbMustDelete = 1;
421     }
422 
423     mpFontNameBox->SetAccessibleName(mpFontNameBox->GetQuickHelpText());
424     const FontInfo aFontInfo (mpFontList->Get( String::CreateFromAscii( "" ), String::CreateFromAscii( "" )));
425     maFontSizeBox.Fill(&aFontInfo,mpFontList);
426     maFontSizeBox.SetAccessibleName(maFontSizeBox.GetQuickHelpText());
427 
428     //toolbox
429     SetupIcons();
430     InitToolBoxIncDec();
431     InitToolBoxFont();
432     InitToolBoxFontColor();
433     InitToolBoxScript();
434     InitToolBoxSpacing();
435     InitToolBoxHighlight();
436 
437 #ifdef HAS_IA2
438     mpFontNameBox->SetAccRelationLabeledBy(&mpFontNameBox);
439     mpFontNameBox->SetMpSubEditAccLableBy(&mpFontNameBox);
440     maFontSizeBox.SetAccRelationLabeledBy(&maFontSizeBox);
441     maFontSizeBox.SetMpSubEditAccLableBy(&maFontSizeBox);
442     mpToolBoxFont.SetAccRelationLabeledBy(&mpToolBoxFont);
443     mpToolBoxIncDec.SetAccRelationLabeledBy(&mpToolBoxIncDec);
444     mpToolBoxFontColor.SetAccRelationLabeledBy(&mpToolBoxFontColor);
445     mpToolBoxScript.SetAccRelationLabeledBy(&mpToolBoxScript);
446     mpToolBoxScriptSw.SetAccRelationLabeledBy(&mpToolBoxScriptSw);
447     mpToolBoxSpacing.SetAccRelationLabeledBy(&mpToolBoxSpacing);
448     mpToolBoxHighlight.SetAccRelationLabeledBy(&mpToolBoxHighlight);
449 #endif
450 
451     //init state
452     mpHeightItem = NULL;
453     meWeight = WEIGHT_NORMAL;
454     meItalic = ITALIC_NONE;
455     mbShadow = false;
456     meStrike = STRIKEOUT_NONE;
457     mbPostureAvailable = true;
458     mbWeightAvailable = true;
459     meUnderline = UNDERLINE_NONE;
460     meUnderlineColor = COL_AUTO;   //
461     maColor = COL_BLACK;
462     mbColorAvailable = true;
463     maBackColor = COL_AUTO;
464     mbBackColorAvailable = true;
465     meColorType = FONT_COLOR;
466     meEscape = SVX_ESCAPEMENT_OFF;
467     mbSuper = false;
468     mbSub = false;
469     mbKernAvailable = true;
470     mbKernLBAvailable = true;
471     mlKerning = 0;
472     mpFontColorUpdater.reset(new ToolboxButtonColorUpdater(
473             SID_ATTR_CHAR_COLOR,
474             TBI_FONTCOLOR,
475             mpToolBoxFontColor.get(),
476             TBX_UPDATER_MODE_CHAR_COLOR_NEW));
477     mpHighlightUpdater.reset(new ToolboxButtonColorUpdater(
478             SID_ATTR_BRUSH_CHAR,
479             TBI_HIGHLIGHT,
480             mpToolBoxHighlight.get(),
481             TBX_UPDATER_MODE_CHAR_COLOR_NEW));
482 
483     //set handler
484     mpFontNameBox->SetBindings(mpBindings);
485     //add
486     Link aLink = LINK(this, TextPropertyPanel, FontSelHdl);
487     mpFontNameBox->SetSelectHdl(aLink);
488     //add end
489 
490     aLink = LINK(this, TextPropertyPanel, FontSizeModifyHdl);
491     maFontSizeBox.SetModifyHdl(aLink);
492     //add
493     aLink = LINK(this, TextPropertyPanel, FontSizeSelHdl);
494     maFontSizeBox.SetSelectHdl(aLink);
495     //add end
496     aLink = LINK(this, TextPropertyPanel, FontSizeLoseFocus);
497     maFontSizeBox.SetLoseFocusHdl(aLink);
498 
499     // add
500     long aSizeBoxHeight = maFontSizeBox.GetSizePixel().getHeight();;
501     Point aPosFontSize = maFontSizeBox.GetPosPixel();
502     long aPosY = aPosFontSize.getY();
503     Point pTBIncDec = mpToolBoxIncDec->GetPosPixel();
504     long aIncDecHeight = mpToolBoxIncDec->GetSizePixel().getHeight();
505     pTBIncDec.setY(aPosY+aSizeBoxHeight/2-aIncDecHeight/2);
506     mpToolBoxIncDec->SetPosPixel(pTBIncDec);
507     //end
508 }
509 
510 void TextPropertyPanel::EndSpacingPopupMode (void)
511 {
512     maCharSpacePopup.Hide();
513 }
514 
515 void TextPropertyPanel::EndUnderlinePopupMode (void)
516 {
517     maUnderlinePopup.Hide();
518 }
519 
520 
521 void TextPropertyPanel::InitToolBoxFont()
522 {
523     mpToolBoxFont->SetQuickHelpText(TBI_BOLD,String(SVX_RES(STR_QH_BOLD))); //Add
524     mpToolBoxFont->SetQuickHelpText(TBI_ITALIC,String(SVX_RES(STR_QH_ITALIC))); //Add
525     mpToolBoxFont->SetQuickHelpText(TBI_UNDERLINE,String(SVX_RES(STR_QH_UNDERLINE))); //Add
526     mpToolBoxFont->SetBackground(Wallpaper());
527     mpToolBoxFont->SetPaintTransparent(true);
528 
529     Size aTbxSize( mpToolBoxFont->CalcWindowSizePixel() );
530     mpToolBoxFont->SetOutputSizePixel( aTbxSize );
531 
532     Link aLink  = LINK(this, TextPropertyPanel, ToolboxFontSelectHandler);
533     mpToolBoxFont->SetSelectHdl ( aLink );
534     aLink = LINK(this, TextPropertyPanel, ToolBoxUnderlineClickHdl);
535     mpToolBoxFont->SetDropdownClickHdl(aLink);
536 }
537 
538 
539 
540 
541 void TextPropertyPanel::InitToolBoxIncDec()
542 {
543     Size aTbxSize( mpToolBoxIncDec->CalcWindowSizePixel() );
544     mpToolBoxIncDec->SetOutputSizePixel( aTbxSize );
545 
546     Link aLink = LINK(this, TextPropertyPanel, ToolboxIncDecSelectHdl);
547     mpToolBoxIncDec->SetSelectHdl ( aLink );
548 }
549 
550 
551 
552 
553 void TextPropertyPanel::InitToolBoxFontColor()
554 {
555     Size aTbxSize( mpToolBoxFontColor->CalcWindowSizePixel() );
556     mpToolBoxFontColor->SetOutputSizePixel( aTbxSize );
557     mpToolBoxFontColor->SetItemBits( TBI_FONTCOLOR, mpToolBoxFontColor->GetItemBits( TBI_FONTCOLOR ) | TIB_DROPDOWNONLY );
558 
559     Link aLink = LINK(this, TextPropertyPanel, ToolBoxFontColorDropHdl);
560     mpToolBoxFontColor->SetDropdownClickHdl ( aLink );
561     mpToolBoxFontColor->SetSelectHdl ( aLink );
562 
563 }
564 void TextPropertyPanel::InitToolBoxScript()
565 {
566     Size aTbxSize( mpToolBoxScriptSw->CalcWindowSizePixel() );
567     mpToolBoxScriptSw->SetOutputSizePixel( aTbxSize );
568 
569     Link aLink = LINK(this, TextPropertyPanel, ToolBoxSwScriptSelectHdl);
570     mpToolBoxScriptSw->SetSelectHdl ( aLink );
571 
572     aTbxSize = mpToolBoxScript->CalcWindowSizePixel() ;
573     mpToolBoxScript->SetOutputSizePixel( aTbxSize );
574 
575     aLink = LINK(this, TextPropertyPanel, ToolBoxScriptSelectHdl);
576     mpToolBoxScript->SetSelectHdl ( aLink );
577 }
578 void TextPropertyPanel::InitToolBoxSpacing()
579 {
580     Size aTbxSize( mpToolBoxSpacing->CalcWindowSizePixel() );
581     mpToolBoxSpacing->SetOutputSizePixel( aTbxSize );
582     mpToolBoxSpacing->SetItemBits( TBI_SPACING, mpToolBoxSpacing->GetItemBits( TBI_SPACING ) | TIB_DROPDOWNONLY );
583 
584     Link aLink = LINK(this, TextPropertyPanel, SpacingClickHdl);
585     mpToolBoxSpacing->SetDropdownClickHdl ( aLink );
586     mpToolBoxSpacing->SetSelectHdl( aLink );
587 }
588 void TextPropertyPanel::InitToolBoxHighlight()
589 {
590     Size aTbxSize( mpToolBoxHighlight->CalcWindowSizePixel() );
591     mpToolBoxHighlight->SetOutputSizePixel( aTbxSize );
592     mpToolBoxHighlight->SetItemBits( TBI_HIGHLIGHT, mpToolBoxHighlight->GetItemBits( TBI_HIGHLIGHT ) | TIB_DROPDOWNONLY );
593 
594     Link aLink = LINK(this, TextPropertyPanel, ToolBoxHighlightDropHdl);
595     mpToolBoxHighlight->SetDropdownClickHdl ( aLink );
596     mpToolBoxHighlight->SetSelectHdl( aLink );
597 }
598 
599 
600 
601 
602 void TextPropertyPanel::SetupIcons (void)
603 {
604     if (Theme::GetBoolean(Theme::Bool_UseSymphonyIcons))
605     {
606         mpToolBoxIncDec->SetItemImage(TBI_INCREASE, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgIncreaseHigh : maImgIncrease);
607         mpToolBoxIncDec->SetItemImage(TBI_DECREASE, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgDecreaseHigh : maImgDecrease);
608         mpToolBoxFont->SetItemImage(TBI_BOLD, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgBoldHigh : maImgBold);
609         mpToolBoxFont->SetItemImage(TBI_ITALIC, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgItalicHigh : maImgItalic);
610         mpToolBoxFont->SetItemImage(TBI_UNDERLINE, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgUnderlineHigh : maImgUnderline);
611         mpToolBoxFont->SetItemImage(TBI_STRIKEOUT, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgStrikeHigh : maImgStrike);
612         mpToolBoxFont->SetItemImage(TBI_SHADOWED, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgShadowHigh : maImgShadow);
613 
614         mpToolBoxFontColor->SetItemImage(TBI_FONTCOLOR, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgFontColorHigh : maImgFontColor);
615         //for sw
616         mpToolBoxScriptSw->SetItemImage(TBI_SUPER_SW, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSupScriptHigh : maImgSupScript);
617         mpToolBoxScriptSw->SetItemImage(TBI_SUB_SW, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSubScriptHigh : maImgSubScript);
618         //for sc and sd
619         mpToolBoxScript->SetItemImage(TBI_SUPER, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSupScriptHigh : maImgSupScript);
620         mpToolBoxScript->SetItemImage(TBI_SUB, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSubScriptHigh : maImgSubScript);
621         mpToolBoxSpacing->SetItemImage(TBI_SPACING,  maImgNormalIcon);
622         mpToolBoxHighlight->SetItemImage(TBI_HIGHLIGHT, Application::GetSettings().GetStyleSettings().GetHighContrastMode()? maImgHighlightHigh : maImgHighlight);
623     }
624     else
625     {
626         mpToolBoxIncDec->SetItemImage(TBI_INCREASE, GetIcon(A2S(".uno:Grow")));
627         mpToolBoxIncDec->SetItemImage(TBI_DECREASE, GetIcon(A2S(".uno:Shrink")));
628         mpToolBoxFont->SetItemImage(TBI_BOLD, GetIcon(A2S(".uno:Bold")));
629         mpToolBoxFont->SetItemImage(TBI_ITALIC, GetIcon(A2S(".uno:Italic")));
630         mpToolBoxFont->SetItemImage(TBI_UNDERLINE, GetIcon(A2S(".uno:Underline")));
631         mpToolBoxFont->SetItemImage(TBI_STRIKEOUT, GetIcon(A2S(".uno:Strikeout")));
632         mpToolBoxFont->SetItemImage(TBI_SHADOWED, GetIcon(A2S(".uno:Shadowed")));
633 
634         mpToolBoxFontColor->SetItemImage(TBI_FONTCOLOR, GetIcon(A2S(".uno:FontColor")));
635         //for sw
636         mpToolBoxScriptSw->SetItemImage(TBI_SUPER_SW, GetIcon(A2S(".uno:SuperScript")));
637         mpToolBoxScriptSw->SetItemImage(TBI_SUB_SW, GetIcon(A2S(".uno:SubScript")));
638         //for sc and sd
639         mpToolBoxScript->SetItemImage(TBI_SUPER, GetIcon(A2S(".uno:SuperScript")));
640         mpToolBoxScript->SetItemImage(TBI_SUB, GetIcon(A2S(".uno:SubScript")));
641         mpToolBoxSpacing->SetItemImage(TBI_SPACING,  GetIcon(A2S(".uno:FontworkCharacterSpacingFloater")));
642         mpToolBoxHighlight->SetItemImage(TBI_HIGHLIGHT, GetIcon(A2S(".uno:BackColor")));
643     }
644 }
645 
646 
647 
648 
649 IMPL_LINK( TextPropertyPanel, FontSelHdl, FontNameBox*, pBox )
650 {
651     if ( !pBox->IsTravelSelect() )
652     {
653         if( SfxViewShell::Current() )
654         {
655             Window* pShellWnd = SfxViewShell::Current()->GetWindow();
656 
657             if ( pShellWnd )
658                 pShellWnd->GrabFocus();
659         }
660     }
661     return 0;
662 }
663 //add end
664 IMPL_LINK( TextPropertyPanel, FontSizeModifyHdl, FontSizeBox*, pSizeBox )
665 {
666     if (pSizeBox == &maFontSizeBox)
667     {
668         long nSize = pSizeBox->GetValue();
669         mbFocusOnFontSizeCtrl = true;
670 
671         float fSize = (float)nSize / 10;
672         SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
673         SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ;
674 
675         mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L );
676         mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false);
677     }
678     return 0;
679 }
680 //add
681 IMPL_LINK( TextPropertyPanel, FontSizeSelHdl, FontSizeBox*, pSizeBox )
682 {
683     if ( !pSizeBox->IsTravelSelect() )
684     {
685         if( SfxViewShell::Current() )
686         {
687             Window* pShellWnd = SfxViewShell::Current()->GetWindow();
688 
689             if ( pShellWnd )
690                 pShellWnd->GrabFocus();
691         }
692     }
693 
694     return 0;
695 }
696 //add end
697 IMPL_LINK(TextPropertyPanel, FontSizeLoseFocus, FontSizeBox*, pSizeBox)
698 {
699     if(pSizeBox == &maFontSizeBox)
700     {
701         mbFocusOnFontSizeCtrl = false;
702     }
703     return 0;
704 }
705 
706 IMPL_LINK(TextPropertyPanel, ToolboxFontSelectHandler, ToolBox*, pToolBox)
707 {
708     const sal_uInt16 nId = pToolBox->GetCurItemId();
709 
710     //Bold
711     if(nId == TBI_BOLD)
712     {
713         EndTracking();
714         if(meWeight != WEIGHT_BOLD)
715             meWeight = WEIGHT_BOLD;
716         else
717             meWeight = WEIGHT_NORMAL;
718         SvxWeightItem aWeightItem(meWeight, SID_ATTR_CHAR_WEIGHT);
719         mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_WEIGHT, SFX_CALLMODE_RECORD, &aWeightItem, 0L);
720         UpdateFontBold();
721     }
722     //Italic
723     else if(nId == TBI_ITALIC)
724     {
725         EndTracking();
726         if(meItalic != ITALIC_NORMAL)
727             meItalic = ITALIC_NORMAL;
728         else
729             meItalic = ITALIC_NONE;
730         SvxPostureItem aPostureItem(meItalic, SID_ATTR_CHAR_POSTURE);
731         mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_POSTURE, SFX_CALLMODE_RECORD, &aPostureItem, 0L);
732         UpdateFontItalic();
733     }
734     //underline
735     else if(nId == TBI_UNDERLINE)
736     {
737         EndTracking();
738         //add , keep underline's color
739         if(meUnderline == UNDERLINE_NONE)
740         {
741             //AF: meUnderline = GetDefaultUnderline();
742             meUnderline = UNDERLINE_SINGLE;
743             //<<modify
744             //SvxTextLineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE);
745             SvxUnderlineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE);
746             //modify end>>
747             aLineItem.SetColor(meUnderlineColor);
748             mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L);
749         }
750         else
751         {
752             meUnderline = UNDERLINE_NONE;
753             //<<modify
754             //SvxTextLineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE);
755             SvxUnderlineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE);
756             //modify end>>
757             mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L);
758         }
759         UpdateFontUnderline();
760         //add end
761     }
762     //strike out
763     else if(nId == TBI_STRIKEOUT)
764     {
765         EndTracking();
766         if(meStrike !=  STRIKEOUT_NONE && meStrike != STRIKEOUT_DONTKNOW)
767             meStrike = STRIKEOUT_NONE;
768         else
769             meStrike = STRIKEOUT_SINGLE;
770         SvxCrossedOutItem aStrikeItem(meStrike,SID_ATTR_CHAR_STRIKEOUT);
771         mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_STRIKEOUT, SFX_CALLMODE_RECORD, &aStrikeItem, 0L);
772         UpdateFontStrikeOut();
773     }
774     //shadowed
775     else if(nId == TBI_SHADOWED)
776     {
777         EndTracking();
778         mbShadow = !mbShadow;
779         SvxShadowedItem aShadowItem(mbShadow, SID_ATTR_CHAR_SHADOWED);
780         mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_SHADOWED, SFX_CALLMODE_RECORD, &aShadowItem, 0L);
781         UpdateFontShadowed();
782     }
783     return 0;
784 }
785 
786 
787 
788 
789 IMPL_LINK(TextPropertyPanel, ToolboxIncDecSelectHdl, ToolBox*, pToolBox)
790 {
791     const sal_uInt16 nId = pToolBox->GetCurItemId();
792 
793     // font size +/- enhancement in sd
794     switch (maContext.GetCombinedContext())
795     {
796         case CombinedEnumContext(Application_Draw, Context_DrawText):
797         case CombinedEnumContext(Application_Draw, Context_Text):
798         case CombinedEnumContext(Application_Draw, Context_Table):
799         case CombinedEnumContext(Application_Draw, Context_OutlineText):
800         case CombinedEnumContext(Application_Draw, Context_Draw):
801         case CombinedEnumContext(Application_Draw, Context_TextObject):
802         case CombinedEnumContext(Application_Draw, Context_Graphic):
803         case CombinedEnumContext(Application_Impress, Context_DrawText):
804         case CombinedEnumContext(Application_Impress, Context_Text):
805         case CombinedEnumContext(Application_Impress, Context_Table):
806         case CombinedEnumContext(Application_Impress, Context_OutlineText):
807         case CombinedEnumContext(Application_Impress, Context_Draw):
808         case CombinedEnumContext(Application_Impress, Context_TextObject):
809         case CombinedEnumContext(Application_Impress, Context_Graphic):
810             if(nId == TBI_INCREASE)
811             {
812                 EndTracking();
813                 SfxVoidItem aItem(SID_GROW_FONT_SIZE);
814                 mpBindings->GetDispatcher()->Execute( SID_GROW_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
815             }
816             else if(nId == TBI_DECREASE)
817             {
818                 EndTracking();
819                 SfxVoidItem aItem(SID_SHRINK_FONT_SIZE);
820                 mpBindings->GetDispatcher()->Execute( SID_SHRINK_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
821             }
822             break;
823 
824         default:
825             if(nId == TBI_INCREASE)
826             {
827                 EndTracking();
828                 mbFocusOnFontSizeCtrl = false;
829                 sal_Int64 iValue = maFontSizeBox.GetValue();
830                 int iPos = maFontSizeBox.GetValuePos(iValue, FUNIT_NONE);
831                 long nSize = iValue;
832                 if(iPos != LISTBOX_ENTRY_NOTFOUND)
833                     nSize = maFontSizeBox.GetValue(iPos+1 , FUNIT_NONE);
834                 else if(iValue >= 100 && iValue < 105)
835                     nSize = 105;
836                 else if(iValue >= 105 && iValue < 110)
837                     nSize = 110;
838                 else if(iValue < 960)
839                 {
840                     nSize = (nSize / 10) * 10 + 10;
841                     while(maFontSizeBox.GetValuePos(nSize, FUNIT_NONE) == LISTBOX_ENTRY_NOTFOUND)
842                         nSize += 10;
843                 }
844                 else
845                 {
846                     nSize = iValue;
847                 }
848 
849                 float fSize = (float)nSize / 10;
850 
851                 SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
852                 SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ;
853 
854                 mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L );
855                 mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false);
856                 //add  , update ASAP
857                 maFontSizeBox.SetValue( nSize );
858                 if(nSize >= 960)
859                 {
860                     mpToolBoxIncDec->EnableItem(TBI_INCREASE,false);
861                     mpToolBoxIncDec->EnableItem(TBI_DECREASE,true);
862                 }
863                 else if(nSize <= 60)
864                 {
865                     mpToolBoxIncDec->EnableItem(TBI_INCREASE,true);
866                     mpToolBoxIncDec->EnableItem(TBI_DECREASE,false);
867                 }
868                 else
869                 {
870                     mpToolBoxIncDec->EnableItem(TBI_INCREASE,true);
871                     mpToolBoxIncDec->EnableItem(TBI_DECREASE,true);
872                 }
873                 //add end
874             }
875             else if(nId == TBI_DECREASE)
876             {
877                 EndTracking();
878                 mbFocusOnFontSizeCtrl = false;
879                 sal_Int64 iValue = maFontSizeBox.GetValue();
880                 int iPos = maFontSizeBox.GetValuePos(iValue, FUNIT_NONE);
881                 long nSize = iValue;
882                 if(iPos != LISTBOX_ENTRY_NOTFOUND)
883                     nSize = maFontSizeBox.GetValue(iPos-1 , FUNIT_NONE);
884                 else if(iValue > 100 && iValue <= 105)
885                     nSize = 100;
886                 else if(iValue > 105 && iValue <= 110)
887                     nSize = 105;
888                 else if(iValue > 960)
889                 {
890                     nSize = 960;
891                 }
892                 else if(iValue > 60)
893                 {
894                     nSize = (nSize / 10) * 10 ;
895                     while(maFontSizeBox.GetValuePos(nSize, FUNIT_NONE) == LISTBOX_ENTRY_NOTFOUND)
896                         nSize -= 10;
897                 }
898                 else
899                 {
900                     nSize = iValue;
901                 }
902 
903                 float fSize = (float)nSize / 10;
904 
905                 SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
906                 SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ;
907 
908                 mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L );
909                 mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false);
910                 //add
911                 maFontSizeBox.SetValue( nSize );
912                 if(nSize >= 960)
913                 {
914                     mpToolBoxIncDec->EnableItem(TBI_INCREASE,false);
915                     mpToolBoxIncDec->EnableItem(TBI_DECREASE,true);
916                 }
917                 else if(nSize <= 60)
918                 {
919                     mpToolBoxIncDec->EnableItem(TBI_INCREASE,true);
920                     mpToolBoxIncDec->EnableItem(TBI_DECREASE,false);
921                 }
922                 else
923                 {
924                     mpToolBoxIncDec->EnableItem(TBI_INCREASE,true);
925                     mpToolBoxIncDec->EnableItem(TBI_DECREASE,true);
926                 }
927                 //add end
928             }
929     }
930     return 0;
931 }
932 
933 
934 
935 IMPL_LINK(TextPropertyPanel, ToolBoxUnderlineClickHdl, ToolBox*, pToolBox)
936 {
937     const sal_uInt16 nId = pToolBox->GetCurItemId();
938     OSL_ASSERT(nId == TBI_UNDERLINE);
939     if(nId == TBI_UNDERLINE)
940     {
941         pToolBox->SetItemDown( nId, true );
942         maUnderlinePopup.Rearrange(meUnderline);
943         maUnderlinePopup.Show(*pToolBox);
944 
945     }
946     return 0L;
947 }
948 
949 
950 
951 
952 IMPL_LINK(TextPropertyPanel, ToolBoxFontColorDropHdl,ToolBox*, pToolBox)
953 {
954     const sal_uInt16 nId = pToolBox->GetCurItemId();
955     if(nId == TBI_FONTCOLOR)
956     {
957         meColorType = FONT_COLOR;
958 
959         pToolBox->SetItemDown( nId, true );
960 
961         maFontColorPopup.Show(*pToolBox);
962         maFontColorPopup.SetCurrentColor(maColor, mbColorAvailable);
963     }
964     return 0;
965 }
966 
967 
968 
969 
970 IMPL_LINK(TextPropertyPanel, ToolBoxSwScriptSelectHdl, ToolBox*, pToolBox)
971 {
972     const sal_uInt16 nId = pToolBox->GetCurItemId();
973     if( nId == TBI_SUPER_SW )
974     {
975         if(meEscape != SVX_ESCAPEMENT_SUPERSCRIPT)
976         {
977             meEscape = SVX_ESCAPEMENT_SUPERSCRIPT;
978             SvxEscapementItem aSupItem(DFLT_ESC_SUPER, DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT);
979             mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aSupItem, 0L );
980         }
981         else
982         {
983             meEscape = SVX_ESCAPEMENT_OFF;
984             SvxEscapementItem aNoneItem(0, 100, SID_ATTR_CHAR_ESCAPEMENT);
985             mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aNoneItem, 0L );
986         }
987     }
988     else if(TBI_SUB_SW == nId)
989     {
990         if(meEscape != SVX_ESCAPEMENT_SUBSCRIPT)
991         {
992             meEscape = (SvxEscapement)SVX_ESCAPEMENT_SUBSCRIPT;
993             SvxEscapementItem aSubItem(DFLT_ESC_SUB, DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT);
994             mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aSubItem, 0L );
995         }
996         else
997         {
998             meEscape = SVX_ESCAPEMENT_OFF;
999             SvxEscapementItem aNoneItem(0, 100, SID_ATTR_CHAR_ESCAPEMENT);
1000             mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aNoneItem, 0L );
1001         }
1002     }
1003     UpdateFontScript();
1004 
1005     return 0;
1006 }
1007 
1008 
1009 
1010 
1011 IMPL_LINK(TextPropertyPanel, ToolBoxScriptSelectHdl, ToolBox*, pToolBox)
1012 {
1013     const sal_uInt16 nId = pToolBox->GetCurItemId();
1014     if( nId == TBI_SUPER )
1015     {
1016         mbSuper = !mbSuper;
1017         SfxBoolItem aSupItem(SID_SET_SUPER_SCRIPT, mbSuper);
1018         mpBindings->GetDispatcher()->Execute( SID_SET_SUPER_SCRIPT, SFX_CALLMODE_RECORD, &aSupItem, 0L );
1019     }
1020     else if(TBI_SUB == nId)
1021     {
1022 
1023         mbSub = !mbSub;
1024         SfxBoolItem aSubItem(SID_SET_SUB_SCRIPT, mbSub );
1025         mpBindings->GetDispatcher()->Execute( SID_SET_SUB_SCRIPT, SFX_CALLMODE_RECORD, &aSubItem, 0L );
1026     }
1027     UpdateFontScript();
1028     return 0;
1029 }
1030 
1031 
1032 
1033 
1034 IMPL_LINK(TextPropertyPanel, ToolBoxHighlightDropHdl, ToolBox*, pToolBox)
1035 {
1036     const sal_uInt16 nId = pToolBox->GetCurItemId();
1037     if(nId == TBI_HIGHLIGHT)
1038     {
1039         meColorType = BACK_COLOR;
1040 
1041         pToolBox->SetItemDown( nId, true );
1042         maBrushColorPopup.Show(*pToolBox);
1043         maBrushColorPopup.SetCurrentColor(maBackColor, mbBackColorAvailable);
1044 
1045     }
1046     return 0;
1047 }
1048 
1049 
1050 
1051 IMPL_LINK(TextPropertyPanel, SpacingClickHdl, ToolBox*, pToolBox)
1052 {
1053     const sal_uInt16 nId = pToolBox->GetCurItemId();
1054     OSL_ASSERT(nId == TBI_SPACING);
1055     if(nId == TBI_SPACING)
1056     {
1057         pToolBox->SetItemDown( nId, true );
1058         maCharSpacePopup.Rearrange(mbKernLBAvailable,mbKernAvailable,mlKerning);
1059         maCharSpacePopup.Show(*pToolBox);
1060 
1061     }
1062     return 0L;
1063 }
1064 
1065 
1066 
1067 
1068 IMPL_LINK( TextPropertyPanel, ImplPopupModeEndHdl, FloatingWindow*, EMPTYARG )
1069 {
1070     return 0;
1071 }
1072 
1073 
1074 
1075 
1076 
1077 
1078 
1079 
1080 void TextPropertyPanel::NotifyItemUpdate (
1081     const sal_uInt16 nSID,
1082     const SfxItemState eState,
1083     const SfxPoolItem* pState)
1084 {
1085     switch(nSID)
1086     {
1087         case SID_ATTR_CHAR_FONT:
1088             if (  eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxFontItem) )
1089             {
1090                 mpFontNameBox->Enable();
1091                 const SvxFontItem* pFontItem = (const SvxFontItem*)pState;
1092                 mpFontNameBox->SetText( pFontItem->GetFamilyName() );
1093             }
1094             else
1095             {
1096                 mpFontNameBox->SetText( String() );
1097                 if (SFX_ITEM_DISABLED == eState)
1098                 {
1099                     mpFontNameBox->Disable();
1100                 }
1101             }
1102             break;
1103         case SID_ATTR_CHAR_FONTHEIGHT:
1104             if (  eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxFontHeightItem) )
1105             {
1106                 mpHeightItem = (SvxFontHeightItem*)pState;//const SvxFontHeightItem*
1107                 SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
1108                 long iValue = (long)CalcToPoint( mpHeightItem->GetHeight(), eUnit, 10 );
1109                 mpToolBoxIncDec->Enable();
1110 
1111                 // font size +/- enhancement in sd
1112                 switch(maContext.GetCombinedContext())
1113                 {
1114                     case CombinedEnumContext(Application_Draw, Context_DrawText):
1115                     case CombinedEnumContext(Application_Draw, Context_Text):
1116                     case CombinedEnumContext(Application_Draw, Context_Table):
1117                     case CombinedEnumContext(Application_Draw, Context_OutlineText):
1118                     case CombinedEnumContext(Application_Draw, Context_Draw):
1119                     case CombinedEnumContext(Application_Draw, Context_TextObject):
1120                     case CombinedEnumContext(Application_Draw, Context_Graphic):
1121                     case CombinedEnumContext(Application_Impress, Context_DrawText):
1122                     case CombinedEnumContext(Application_Impress, Context_Text):
1123                     case CombinedEnumContext(Application_Impress, Context_Table):
1124                     case CombinedEnumContext(Application_Impress, Context_OutlineText):
1125                     case CombinedEnumContext(Application_Impress, Context_Draw):
1126                     case CombinedEnumContext(Application_Impress, Context_TextObject):
1127                     case CombinedEnumContext(Application_Impress, Context_Graphic):
1128                         break;
1129 
1130                     default:
1131                         if(iValue > 60 && iValue < 960 )
1132                         {
1133                             mpToolBoxIncDec->EnableItem(TBI_INCREASE,true);
1134                             mpToolBoxIncDec->EnableItem(TBI_DECREASE,true);
1135                         }
1136                         else if (iValue <= 60)
1137                         {
1138                             mpToolBoxIncDec->EnableItem(TBI_INCREASE,true);
1139                             mpToolBoxIncDec->EnableItem(TBI_DECREASE,false);
1140                         }
1141                         else if (iValue >= 960)
1142                         {
1143                             mpToolBoxIncDec->EnableItem(TBI_INCREASE,false);
1144                             mpToolBoxIncDec->EnableItem(TBI_DECREASE,true);
1145                         }
1146                 }
1147                 mpToolBoxIncDec->SetItemState(TBI_INCREASE, STATE_NOCHECK);
1148                 mpToolBoxIncDec->SetItemState(TBI_DECREASE, STATE_NOCHECK);
1149 
1150                 if( mbFocusOnFontSizeCtrl )
1151                     return;
1152 
1153                 maFontSizeBox.Enable( );
1154                 maFontSizeBox.SetValue( iValue );
1155                 maFontSizeBox.LoseFocus();
1156             }
1157             else
1158             {
1159                 mpHeightItem = NULL;
1160                 maFontSizeBox.SetText( String() );
1161                 //increase decrease diabled when multi-seletion have different font size
1162 
1163                 // font size +/- enhancement in sd
1164                 switch(maContext.GetCombinedContext())
1165                 {
1166                     case CombinedEnumContext(Application_Draw, Context_DrawText):
1167                     case CombinedEnumContext(Application_Draw, Context_Text):
1168                     case CombinedEnumContext(Application_Draw, Context_Table):
1169                     case CombinedEnumContext(Application_Draw, Context_OutlineText):
1170                     case CombinedEnumContext(Application_Draw, Context_Draw):
1171                     case CombinedEnumContext(Application_Draw, Context_TextObject):
1172                     case CombinedEnumContext(Application_Draw, Context_Graphic):
1173                     case CombinedEnumContext(Application_Impress, Context_DrawText):
1174                     case CombinedEnumContext(Application_Impress, Context_Text):
1175                     case CombinedEnumContext(Application_Impress, Context_Table):
1176                     case CombinedEnumContext(Application_Impress, Context_OutlineText):
1177                     case CombinedEnumContext(Application_Impress, Context_Draw):
1178                     case CombinedEnumContext(Application_Impress, Context_TextObject):
1179                     case CombinedEnumContext(Application_Impress, Context_Graphic):
1180                         break;
1181 
1182                     default:
1183                         mpToolBoxIncDec->Disable();
1184                 }
1185                 if ( eState <= SFX_ITEM_READONLY )
1186                 {
1187                     maFontSizeBox.Disable( );
1188                 }
1189             }
1190             break;
1191         case SID_ATTR_CHAR_WEIGHT:
1192             mbWeightAvailable = (eState >= SFX_ITEM_DONTCARE);
1193             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxWeightItem))
1194             {
1195                 const SvxWeightItem* pItem = (const SvxWeightItem*)pState;
1196                 meWeight = (FontWeight)pItem->GetValue();
1197                 TextStyleChanged();
1198             }
1199             else
1200             {
1201                 meWeight = WEIGHT_NORMAL;
1202                 TextStyleChanged();
1203             }
1204             break;
1205         case SID_ATTR_CHAR_POSTURE:
1206             mbPostureAvailable = (eState >= SFX_ITEM_DONTCARE);
1207             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxPostureItem))
1208             {
1209                 const SvxPostureItem* pItem = (const SvxPostureItem*)pState;
1210                 meItalic = (FontItalic)pItem->GetValue();
1211                 TextStyleChanged();
1212             }
1213             else
1214             {
1215                 meItalic = ITALIC_NONE;
1216                 TextStyleChanged();
1217             }
1218             break;
1219         case SID_ATTR_CHAR_UNDERLINE:
1220             if( eState >= SFX_ITEM_DEFAULT) //SvxUnderlineItem
1221             {
1222                 //<<delete
1223                 //if(pState->ISA(SvxTextLineItem))
1224                 //{
1225                 //  const SvxTextLineItem* pItem = (const SvxTextLineItem*)pState;
1226                 //  meUnderline = (FontUnderline)pItem->GetValue();
1227                 //   //add , need to record the underline's color, if not the color will turn to auto
1228                 //  meUnderlineColor = pItem->GetColor();
1229                 //  //add end
1230                 //}
1231                 //else
1232                 //delete end>>
1233                 if(pState->ISA(SvxUnderlineItem))
1234                 {
1235                     const SvxUnderlineItem* pItem = (const SvxUnderlineItem*)pState;
1236                     meUnderline = (FontUnderline)pItem->GetValue();
1237                     //add
1238                     meUnderlineColor = pItem->GetColor();
1239                     //add end
1240                 }
1241                 TextStyleChanged();
1242             }
1243             else
1244             {
1245                 meUnderline = UNDERLINE_NONE;
1246                 TextStyleChanged();
1247             }
1248             break;
1249         case SID_ATTR_CHAR_SHADOWED:
1250             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxShadowedItem))
1251             {
1252                 const SvxShadowedItem* pItem = (const SvxShadowedItem*)pState;
1253                 mbShadow = pItem->GetValue();
1254                 TextStyleChanged();
1255             }
1256             else
1257             {
1258                 mbShadow = false;
1259                 TextStyleChanged();
1260             }
1261             break;
1262         case SID_ATTR_CHAR_STRIKEOUT:
1263             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxCrossedOutItem))
1264             {
1265                 const SvxCrossedOutItem* pItem = (const SvxCrossedOutItem*)pState;
1266                 meStrike = (FontStrikeout)pItem->GetValue();
1267 
1268                 TextStyleChanged();
1269             }
1270             else
1271             {
1272                 meStrike = STRIKEOUT_NONE;
1273                 TextStyleChanged();
1274             }
1275             break;
1276         case SID_ATTR_CHAR_COLOR:
1277             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxColorItem))
1278             {
1279                 const SvxColorItem* pItem =  (const SvxColorItem*)pState;
1280                 maColor = pItem->GetValue();
1281                 mbColorAvailable = true;
1282                 if (mpFontColorUpdater)
1283                     mpFontColorUpdater->Update(maColor);
1284             }
1285             else
1286             {
1287                 mbColorAvailable = false;
1288                 maColor.SetColor(COL_AUTO);
1289                 if (mpFontColorUpdater)
1290                     mpFontColorUpdater->Update(maColor);
1291             }
1292             break;
1293         case SID_ATTR_BRUSH_CHAR:
1294             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxBrushItem))
1295             {
1296                 const SvxBrushItem* pItem =  (const SvxBrushItem*)pState;
1297                 maBackColor = pItem->GetColor();
1298                 mbBackColorAvailable = true;
1299                 if (mpHighlightUpdater)
1300                     mpHighlightUpdater->Update(maBackColor);
1301             }
1302             else
1303             {
1304                 mbBackColorAvailable = false;
1305                 maBackColor.SetColor(COL_AUTO);
1306                 if (mpHighlightUpdater)
1307                     mpHighlightUpdater->Update(maBackColor);
1308             }
1309             break;
1310         case SID_ATTR_CHAR_ESCAPEMENT:
1311             if( eState == SFX_ITEM_AVAILABLE)
1312             {
1313                 if( pState->ISA(SvxEscapementItem))
1314                 {
1315                     const SvxEscapementItem* pItem = (const SvxEscapementItem *)pState;
1316                     short nEsc = pItem->GetEsc();
1317                     if(nEsc == 0)
1318                         meEscape = SVX_ESCAPEMENT_OFF;
1319                     else if(nEsc > 0)
1320                         meEscape = SVX_ESCAPEMENT_SUPERSCRIPT;
1321                     else
1322                         meEscape = SVX_ESCAPEMENT_SUBSCRIPT;
1323                 }
1324                 else
1325                 {
1326                     meEscape = SVX_ESCAPEMENT_OFF;
1327                 }
1328                 TextStyleChanged();
1329             }
1330             else if(eState == SFX_ITEM_DISABLED)
1331             {
1332                 mpToolBoxScriptSw->EnableItem(TBI_SUPER,false);
1333                 mpToolBoxScriptSw->EnableItem(TBI_SUB,false);
1334             }
1335             else
1336             {
1337                 meEscape = SVX_ESCAPEMENT_OFF;
1338                 TextStyleChanged();
1339             }
1340             break;
1341         case SID_SET_SUB_SCRIPT:
1342             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SfxBoolItem))
1343             {
1344                 const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
1345                 mbSub = pItem->GetValue();
1346                 TextStyleChanged();
1347             }
1348             else
1349             {
1350                 mbSub = false;
1351                 TextStyleChanged();
1352             }
1353             break;
1354         case SID_SET_SUPER_SCRIPT:
1355             if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SfxBoolItem))
1356             {
1357                 const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
1358                 mbSuper = pItem->GetValue();
1359                 TextStyleChanged();
1360             }
1361             else
1362             {
1363                 mbSuper = false;
1364                 TextStyleChanged();
1365             }
1366             break;
1367         case SID_ATTR_CHAR_KERNING:
1368             if ( SFX_ITEM_AVAILABLE == eState )
1369             {
1370                 mbKernLBAvailable = true;
1371 
1372                 if(pState->ISA(SvxKerningItem))
1373                 {
1374                     const SvxKerningItem* pKerningItem  = (const SvxKerningItem*)pState;
1375                     mlKerning = (long)pKerningItem->GetValue();
1376                     mbKernAvailable = true;
1377                 }
1378                 else
1379                 {
1380                     mlKerning = 0;
1381                     mbKernAvailable =false;
1382                 }
1383             }
1384             else if (SFX_ITEM_DISABLED == eState)
1385             {
1386                 mbKernLBAvailable = false;
1387                 mbKernAvailable = false;
1388                 mlKerning = 0;
1389             }
1390             else
1391             {
1392                 mbKernLBAvailable = true;
1393                 mbKernAvailable = false;
1394                 mlKerning = 0;
1395             }
1396             break;
1397 
1398             // font size +/- enhancement in sd
1399         case SID_SHRINK_FONT_SIZE:
1400         case SID_GROW_FONT_SIZE:
1401                 switch(maContext.GetCombinedContext())
1402                 {
1403                     case CombinedEnumContext(Application_Draw, Context_DrawText):
1404                     case CombinedEnumContext(Application_Draw, Context_Text):
1405                     case CombinedEnumContext(Application_Draw, Context_Table):
1406                     case CombinedEnumContext(Application_Draw, Context_OutlineText):
1407                     case CombinedEnumContext(Application_Draw, Context_Draw):
1408                     case CombinedEnumContext(Application_Draw, Context_TextObject):
1409                     case CombinedEnumContext(Application_Draw, Context_Graphic):
1410                     case CombinedEnumContext(Application_Impress, Context_DrawText):
1411                     case CombinedEnumContext(Application_Impress, Context_Text):
1412                     case CombinedEnumContext(Application_Impress, Context_Table):
1413                     case CombinedEnumContext(Application_Impress, Context_OutlineText):
1414                     case CombinedEnumContext(Application_Impress, Context_Draw):
1415                     case CombinedEnumContext(Application_Impress, Context_TextObject):
1416                     case CombinedEnumContext(Application_Impress, Context_Graphic):
1417                         if(eState == SFX_ITEM_DISABLED)
1418                         {
1419                             mpToolBoxIncDec->Disable();
1420                         }
1421                         else
1422                         {
1423                             mpToolBoxIncDec->Enable();
1424                         }
1425                     break;
1426                 }
1427                 break;
1428     }
1429 }
1430 
1431 
1432 
1433 
1434 void TextPropertyPanel::TextStyleChanged()
1435 {
1436     if( !mbWeightAvailable )
1437         mpToolBoxFont->EnableItem(TBI_BOLD,false);
1438     else
1439         mpToolBoxFont->EnableItem(TBI_BOLD,true);
1440 
1441     if(!mbPostureAvailable )
1442         mpToolBoxFont->EnableItem(TBI_ITALIC,false);
1443     else
1444         mpToolBoxFont->EnableItem(TBI_ITALIC,true);
1445 
1446     UpdateFontBold();
1447     UpdateFontItalic();
1448     UpdateFontUnderline();
1449     UpdateFontStrikeOut();
1450     UpdateFontShadowed();
1451     UpdateFontScript();
1452 }
1453 
1454 
1455 
1456 
1457 void TextPropertyPanel::UpdateFontBold()
1458 {
1459     if( meWeight == WEIGHT_BOLD )
1460     {
1461         mpToolBoxFont->SetItemState(TBI_BOLD,   STATE_CHECK);
1462     }
1463     else
1464     {
1465         mpToolBoxFont->SetItemState(TBI_BOLD,   STATE_NOCHECK);
1466     }
1467 }
1468 void TextPropertyPanel::UpdateFontItalic()
1469 {
1470     if(meItalic == ITALIC_NORMAL)
1471     {
1472         mpToolBoxFont->SetItemState(TBI_ITALIC, STATE_CHECK);
1473     }
1474     else
1475     {
1476         mpToolBoxFont->SetItemState(TBI_ITALIC, STATE_NOCHECK);
1477     }
1478 }
1479 void TextPropertyPanel::UpdateFontUnderline()
1480 {
1481     if(meUnderline == UNDERLINE_NONE)
1482     {
1483         mpToolBoxFont->SetItemState(TBI_UNDERLINE,  STATE_NOCHECK);
1484     }
1485     else
1486     {
1487         mpToolBoxFont->SetItemState(TBI_UNDERLINE,  STATE_CHECK);
1488     }
1489 }
1490 void TextPropertyPanel::UpdateFontStrikeOut()
1491 {
1492     if(meStrike !=  STRIKEOUT_NONE && meStrike != STRIKEOUT_DONTKNOW)
1493     {
1494         mpToolBoxFont->SetItemState(TBI_STRIKEOUT,  STATE_CHECK);
1495     }
1496     else
1497     {
1498         mpToolBoxFont->SetItemState(TBI_STRIKEOUT,  STATE_NOCHECK);
1499     }
1500 }
1501 void TextPropertyPanel::UpdateFontShadowed()
1502 {
1503     if(mbShadow)
1504     {
1505         mpToolBoxFont->SetItemState(TBI_SHADOWED,   STATE_CHECK);
1506     }
1507     else
1508     {
1509         mpToolBoxFont->SetItemState(TBI_SHADOWED,   STATE_NOCHECK);
1510     }
1511 }
1512 void  TextPropertyPanel::UpdateFontScript()
1513 {
1514     //script for sw
1515     mpToolBoxScriptSw->EnableItem(TBI_SUPER,true);
1516     mpToolBoxScriptSw->EnableItem(TBI_SUB,true);
1517     if(meEscape == SVX_ESCAPEMENT_SUPERSCRIPT)
1518     {
1519         mpToolBoxScriptSw->SetItemState(TBI_SUPER_SW,   STATE_CHECK);
1520         mpToolBoxScriptSw->SetItemState(TBI_SUB_SW, STATE_NOCHECK);
1521     }
1522     else if(meEscape == SVX_ESCAPEMENT_SUBSCRIPT)
1523     {
1524         mpToolBoxScriptSw->SetItemState(TBI_SUPER_SW,   STATE_NOCHECK);
1525         mpToolBoxScriptSw->SetItemState(TBI_SUB_SW, STATE_CHECK);
1526     }
1527     else
1528     {
1529         mpToolBoxScriptSw->SetItemState(TBI_SUPER_SW,   STATE_NOCHECK);
1530         mpToolBoxScriptSw->SetItemState(TBI_SUB_SW, STATE_NOCHECK);
1531     }
1532 
1533     //script for sc sd
1534     mpToolBoxScript->EnableItem(TBI_SUPER,true);
1535     mpToolBoxScript->EnableItem(TBI_SUB,true);
1536     if(mbSuper)
1537     {
1538         mpToolBoxScript->SetItemState(TBI_SUPER,    STATE_CHECK);
1539         mpToolBoxScript->SetItemState(TBI_SUB,  STATE_NOCHECK);
1540     }
1541     else if(mbSub)
1542     {
1543         mpToolBoxScript->SetItemState(TBI_SUPER,    STATE_NOCHECK);
1544         mpToolBoxScript->SetItemState(TBI_SUB,  STATE_CHECK);
1545     }
1546     else
1547     {
1548         mpToolBoxScript->SetItemState(TBI_SUPER,    STATE_NOCHECK);
1549         mpToolBoxScript->SetItemState(TBI_SUB,  STATE_NOCHECK);
1550     }
1551 }
1552 
1553 Color TextPropertyPanel::GetFontColor (void) const
1554 {
1555     return maColor;
1556 }
1557 
1558 void TextPropertyPanel::SetFontColor (
1559     const String& /* rsColorName */,
1560     const Color aColor)
1561 {
1562     SvxColorItem aColorItem(aColor, SID_ATTR_CHAR_COLOR);
1563     mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L);
1564     maColor = aColor;
1565 }
1566 
1567 Color TextPropertyPanel::GetBrushColor (void) const
1568 {
1569     return maBackColor;
1570 }
1571 
1572 void TextPropertyPanel::SetBrushColor (
1573     const String& /* rsColorName */,
1574     const Color aColor)
1575 {
1576     SvxBrushItem aBrushItem(aColor, SID_ATTR_BRUSH_CHAR);
1577     mpBindings->GetDispatcher()->Execute(SID_ATTR_BRUSH_CHAR, SFX_CALLMODE_RECORD, &aBrushItem, 0L);
1578     maBackColor = aColor;
1579 }
1580 
1581 Color& TextPropertyPanel::GetUnderlineColor()
1582 {
1583     return meUnderlineColor;
1584 }
1585 
1586 void TextPropertyPanel::SetUnderline(FontUnderline  eUnderline)
1587 {
1588     meUnderline = eUnderline;
1589 }
1590 
1591 } } // end of namespace svx::sidebar
1592