Line data Source code
1 : /*
2 : * This file is part of the LibreOffice project.
3 : *
4 : * This Source Code Form is subject to the terms of the Mozilla Public
5 : * License, v. 2.0. If a copy of the MPL was not distributed with this
6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 : *
8 : * This file incorporates work covered by the following license notice:
9 : *
10 : * Licensed to the Apache Software Foundation (ASF) under one or more
11 : * contributor license agreements. See the NOTICE file distributed
12 : * with this work for additional information regarding copyright
13 : * ownership. The ASF licenses this file to you under the Apache
14 : * License, Version 2.0 (the "License"); you may not use this file
15 : * except in compliance with the License. You may obtain a copy of
16 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
17 : */
18 :
19 : #include "TextPropertyPanel.hrc"
20 : #include "TextPropertyPanel.hxx"
21 : #include "SvxSBFontNameBox.hxx"
22 :
23 : #include "svx/dialmgr.hxx"
24 :
25 : #include <editeng/brushitem.hxx>
26 : #include <editeng/colritem.hxx>
27 : #include <editeng/crossedoutitem.hxx>
28 : #include <editeng/escapementitem.hxx>
29 : #include <editeng/flstitem.hxx>
30 : #include <editeng/fontitem.hxx>
31 : #include <editeng/kernitem.hxx>
32 : #include <editeng/postitem.hxx>
33 : #include <editeng/shdditem.hxx>
34 : #include <editeng/udlnitem.hxx>
35 : #include <editeng/wghtitem.hxx>
36 : #include <rtl/ref.hxx>
37 : #include <sfx2/dispatch.hxx>
38 : #include <sfx2/objsh.hxx>
39 : #include <sfx2/viewsh.hxx>
40 : #include <sfx2/sidebar/ResourceDefinitions.hrc>
41 : #include <sfx2/sidebar/ControlFactory.hxx>
42 : #include <sfx2/sidebar/ControllerFactory.hxx>
43 : #include <sfx2/sidebar/Theme.hxx>
44 : #include <sfx2/sidebar/SidebarToolBox.hxx>
45 : #include "sfx2/imagemgr.hxx"
46 : #include <svtools/ctrltool.hxx>
47 : #include <svtools/unitconv.hxx>
48 :
49 : #include <vcl/gradient.hxx>
50 : #include <vcl/svapp.hxx>
51 : #include <vcl/toolbox.hxx>
52 : #include "TextCharacterSpacingControl.hxx"
53 : #include "TextCharacterSpacingPopup.hxx"
54 : #include "TextUnderlineControl.hxx"
55 : #include "TextUnderlinePopup.hxx"
56 : #include <svx/sidebar/ColorControl.hxx>
57 : #include <svx/sidebar/PopupContainer.hxx>
58 :
59 : #include <boost/bind.hpp>
60 :
61 : using namespace css;
62 : using namespace cssu;
63 : using ::sfx2::sidebar::Theme;
64 : using ::sfx2::sidebar::ControlFactory;
65 :
66 : const char UNO_BACKCOLOR[] = ".uno:BackColor";
67 : const char UNO_BOLD[] = ".uno:Bold";
68 : const char UNO_COLOR[] = ".uno:Color";
69 : const char UNO_FONTCOLOR[] = ".uno:FontColor";
70 : const char UNO_GROW[] = ".uno:Grow";
71 : const char UNO_ITALIC[] = ".uno:Italic";
72 : const char UNO_STRIKEOUT[] = ".uno:Strikeout";
73 : const char UNO_SHADOWED[] = ".uno:Shadowed";
74 : const char UNO_SHRINK[] = ".uno:Shrink";
75 : const char UNO_SPACING[] = ".uno:Spacing";
76 : const char UNO_SUBSCRIPT[] = ".uno:SubScript";
77 : const char UNO_SUPERSCRIPT[] = ".uno:SuperScript";
78 : const char UNO_UNDERLINE[] = ".uno:Underline";
79 :
80 : #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
81 :
82 : namespace svx { namespace sidebar {
83 :
84 : #undef HAS_IA2
85 :
86 :
87 0 : PopupControl* TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent)
88 : {
89 0 : return new TextCharacterSpacingControl(pParent, *this, mpBindings);
90 : }
91 :
92 0 : PopupControl* TextPropertyPanel::CreateUnderlinePopupControl (PopupContainer* pParent)
93 : {
94 0 : return new TextUnderlineControl(pParent, *this, mpBindings);
95 : }
96 :
97 0 : long TextPropertyPanel::GetSelFontSize()
98 : {
99 0 : long nH = 240;
100 0 : SfxMapUnit eUnit = maSpacingControl.GetCoreMetric();
101 0 : if (mpHeightItem)
102 0 : nH = LogicToLogic( mpHeightItem->GetHeight(), (MapUnit)eUnit, MAP_TWIP );
103 0 : return nH;
104 : }
105 :
106 :
107 0 : TextPropertyPanel* TextPropertyPanel::Create (
108 : Window* pParent,
109 : const cssu::Reference<css::frame::XFrame>& rxFrame,
110 : SfxBindings* pBindings,
111 : const ::sfx2::sidebar::EnumContext& rContext)
112 : {
113 0 : if (pParent == NULL)
114 0 : throw lang::IllegalArgumentException(A2S("no parent Window given to TextPropertyPanel::Create"), NULL, 0);
115 0 : if ( ! rxFrame.is())
116 0 : throw lang::IllegalArgumentException(A2S("no XFrame given to TextPropertyPanel::Create"), NULL, 1);
117 0 : if (pBindings == NULL)
118 0 : throw lang::IllegalArgumentException(A2S("no SfxBindings given to TextPropertyPanel::Create"), NULL, 2);
119 :
120 : return new TextPropertyPanel(
121 : pParent,
122 : rxFrame,
123 : pBindings,
124 0 : rContext);
125 : }
126 :
127 :
128 0 : ::sfx2::sidebar::ControllerItem& TextPropertyPanel::GetSpaceController()
129 : {
130 0 : return maSpacingControl;
131 : }
132 :
133 0 : TextPropertyPanel::TextPropertyPanel ( Window* pParent, const cssu::Reference<css::frame::XFrame>& rxFrame, SfxBindings* pBindings, const ::sfx2::sidebar::EnumContext& rContext )
134 : : PanelLayout(pParent, "SidebarTextPanel", "svx/ui/sidebartextpanel.ui", rxFrame),
135 0 : maFontNameControl (SID_ATTR_CHAR_FONT, *pBindings, *this, A2S("CharFontName"), rxFrame),
136 0 : maFontSizeControl (SID_ATTR_CHAR_FONTHEIGHT, *pBindings, *this, A2S("FontHeight"), rxFrame),
137 0 : maWeightControl (SID_ATTR_CHAR_WEIGHT, *pBindings, *this, A2S("Bold"), rxFrame),
138 0 : maItalicControl (SID_ATTR_CHAR_POSTURE, *pBindings, *this, A2S("Italic"), rxFrame),
139 0 : maUnderlineControl (SID_ATTR_CHAR_UNDERLINE, *pBindings, *this, A2S("Underline"), rxFrame),
140 0 : maStrikeControl (SID_ATTR_CHAR_STRIKEOUT, *pBindings, *this, A2S("Strikeout"), rxFrame),
141 0 : maShadowControl (SID_ATTR_CHAR_SHADOWED, *pBindings, *this, A2S("Shadowed"), rxFrame),
142 0 : maScriptControlSw (SID_ATTR_CHAR_ESCAPEMENT, *pBindings, *this, A2S("Escapement"), rxFrame),
143 0 : maSuperScriptControl(SID_SET_SUPER_SCRIPT, *pBindings, *this, A2S("SuperScript"), rxFrame),
144 0 : maSubScriptControl (SID_SET_SUB_SCRIPT, *pBindings, *this, A2S("SubScript"), rxFrame),
145 0 : maSpacingControl (SID_ATTR_CHAR_KERNING, *pBindings, *this, A2S("Spacing"), rxFrame),
146 0 : maSDFontGrow (SID_GROW_FONT_SIZE, *pBindings, *this, A2S("Grow"), rxFrame),
147 0 : maSDFontShrink (SID_SHRINK_FONT_SIZE, *pBindings, *this, A2S("Shrink"), rxFrame),
148 :
149 : mpFontList (NULL),
150 : mbMustDelete (false),
151 : mbFocusOnFontSizeCtrl(false),
152 :
153 : maCharSpacePopup(this, ::boost::bind(&TextPropertyPanel::CreateCharacterSpacingControl, this, _1)),
154 : maUnderlinePopup(this, ::boost::bind(&TextPropertyPanel::CreateUnderlinePopupControl, this, _1)),
155 : maContext(),
156 0 : mpBindings(pBindings)
157 : {
158 0 : get(mpFontNameBox, "font");
159 0 : get(mpFontSizeBox, "fontsize");
160 0 : get(mpToolBoxFont, "fonteffects");
161 0 : get(mpToolBoxIncDec, "fontadjust");
162 0 : get(mpToolBoxScript, "position");
163 0 : get(mpToolBoxSpacing, "spacingbar");
164 0 : get(mpToolBoxFontColor, "colorbar");
165 :
166 0 : Initialize();
167 :
168 0 : UpdateFontColorToolbox(rContext);
169 0 : }
170 :
171 :
172 :
173 :
174 0 : TextPropertyPanel::~TextPropertyPanel (void)
175 : {
176 0 : if(mbMustDelete)
177 0 : delete mpFontList;
178 0 : }
179 :
180 :
181 :
182 :
183 0 : void TextPropertyPanel::SetSpacing(long nKern)
184 : {
185 0 : mlKerning = nKern;
186 0 : }
187 :
188 :
189 0 : void TextPropertyPanel::HandleContextChange (
190 : const ::sfx2::sidebar::EnumContext aContext)
191 : {
192 0 : if (maContext == aContext)
193 : {
194 : // Nothing to do.
195 0 : return;
196 : }
197 :
198 0 : maContext = aContext;
199 0 : switch (maContext.GetCombinedContext_DI())
200 : {
201 : case CombinedEnumContext(Application_Calc, Context_Cell):
202 : case CombinedEnumContext(Application_Calc, Context_Pivot):
203 0 : mpToolBoxFontColor->HideItem(mpToolBoxFontColor->GetItemId(UNO_BACKCOLOR));
204 0 : mpToolBoxScript->Disable();
205 0 : mpToolBoxSpacing->Disable();
206 0 : break;
207 :
208 : case CombinedEnumContext(Application_Calc, Context_EditCell):
209 : case CombinedEnumContext(Application_Calc, Context_DrawText):
210 0 : mpToolBoxFontColor->HideItem(mpToolBoxFontColor->GetItemId(UNO_BACKCOLOR));
211 0 : mpToolBoxScript->Enable();
212 0 : mpToolBoxSpacing->Enable();
213 0 : break;
214 :
215 : case CombinedEnumContext(Application_WriterVariants, Context_Text):
216 : case CombinedEnumContext(Application_WriterVariants, Context_Table):
217 0 : mpToolBoxFontColor->ShowItem(mpToolBoxFontColor->GetItemId(UNO_BACKCOLOR));
218 0 : mpToolBoxScript->Enable();
219 0 : mpToolBoxSpacing->Show();
220 0 : break;
221 :
222 : case CombinedEnumContext(Application_WriterVariants, Context_DrawText):
223 : case CombinedEnumContext(Application_WriterVariants, Context_Annotation):
224 0 : mpToolBoxFontColor->HideItem(mpToolBoxFontColor->GetItemId(UNO_BACKCOLOR));
225 0 : mpToolBoxScript->Enable();
226 0 : mpToolBoxSpacing->Show();
227 0 : break;
228 :
229 : case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
230 : case CombinedEnumContext(Application_DrawImpress, Context_Text):
231 : case CombinedEnumContext(Application_DrawImpress, Context_Table):
232 : case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
233 : case CombinedEnumContext(Application_DrawImpress, Context_Draw):
234 : case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
235 : case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
236 0 : mpToolBoxFontColor->HideItem(mpToolBoxFontColor->GetItemId(UNO_BACKCOLOR));
237 0 : mpToolBoxScript->Enable();
238 0 : mpToolBoxSpacing->Show();
239 0 : break;
240 :
241 : default:
242 0 : break;
243 : }
244 :
245 0 : UpdateFontColorToolbox(aContext);
246 : }
247 :
248 :
249 :
250 :
251 0 : void TextPropertyPanel::UpdateFontColorToolbox (
252 : const ::sfx2::sidebar::EnumContext /* aContext */)
253 : {
254 0 : bool bIsWriterFontColor (false);
255 0 : if (maContext.GetApplication_DI() == sfx2::sidebar::EnumContext::Application_WriterVariants)
256 0 : if (maContext.GetContext() != sfx2::sidebar::EnumContext::Context_DrawText)
257 0 : bIsWriterFontColor = true;
258 0 : if (bIsWriterFontColor)
259 : {
260 0 : mpToolBoxFontColor->HideItem(mpToolBoxFontColor->GetItemId(UNO_COLOR));
261 0 : mpToolBoxFontColor->ShowItem(mpToolBoxFontColor->GetItemId(UNO_FONTCOLOR));
262 : }
263 : else
264 : {
265 0 : mpToolBoxFontColor->ShowItem(mpToolBoxFontColor->GetItemId(UNO_COLOR));
266 0 : mpToolBoxFontColor->HideItem(mpToolBoxFontColor->GetItemId(UNO_FONTCOLOR));
267 : }
268 0 : }
269 :
270 :
271 :
272 :
273 0 : void TextPropertyPanel::DataChanged (const DataChangedEvent& rEvent)
274 : {
275 : (void)rEvent;
276 :
277 0 : SetupToolboxItems();
278 0 : }
279 :
280 :
281 :
282 :
283 0 : void TextPropertyPanel::Initialize (void)
284 : {
285 : //<<modify fill font list
286 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
287 0 : const SfxPoolItem* pItem = NULL;
288 :
289 0 : if (pDocSh != NULL)
290 0 : pItem = pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST );
291 0 : if (pItem != NULL)
292 0 : mpFontList = ( (SvxFontListItem*)pItem )->GetFontList();
293 : else
294 : {
295 0 : mpFontList = new FontList( Application::GetDefaultDevice() );
296 0 : mbMustDelete = true;
297 : }
298 :
299 0 : mpFontNameBox->SetAccessibleName(mpFontNameBox->GetQuickHelpText());
300 0 : const FontInfo aFontInfo (mpFontList->Get( OUString( "" ), OUString( "" )));
301 0 : mpFontSizeBox->Fill(&aFontInfo,mpFontList);
302 0 : mpFontSizeBox->SetAccessibleName(mpFontSizeBox->GetQuickHelpText());
303 :
304 : //toolbox
305 0 : SetupToolboxItems();
306 0 : InitToolBoxIncDec();
307 0 : InitToolBoxFont();
308 0 : InitToolBoxScript();
309 0 : InitToolBoxSpacing();
310 :
311 : #ifdef HAS_IA2
312 : mpFontNameBox->SetAccRelationLabeledBy(mpFontNameBox);
313 : mpFontNameBox->SetMpSubEditAccLableBy(mpFontNameBox);
314 : mpFontSizeBox->SetAccRelationLabeledBy(mpFontSizeBox);
315 : mpFontSizeBox->SetMpSubEditAccLableBy(mpFontSizeBox);
316 : mpToolBoxFont->SetAccRelationLabeledBy(mpToolBoxFont);
317 : mpToolBoxIncDec->SetAccRelationLabeledBy(mpToolBoxIncDec);
318 : mpToolBoxFontColor->SetAccRelationLabeledBy(mpToolBoxFontColor);
319 : mpToolBoxScriptSetAccRelationLabeledBy(mpToolBoxScript);
320 : mpToolBoxSpacing->SetAccRelationLabeledBy(mpToolBoxSpacing);
321 : #endif
322 :
323 : //init state
324 0 : mpHeightItem = NULL;
325 0 : meWeight = WEIGHT_NORMAL;
326 0 : meItalic = ITALIC_NONE;
327 0 : mbShadow = false;
328 0 : meStrike = STRIKEOUT_NONE;
329 0 : mbPostureAvailable = true;
330 0 : mbWeightAvailable = true;
331 0 : meUnderline = UNDERLINE_NONE;
332 0 : meUnderlineColor = COL_AUTO;
333 0 : meEscape = SVX_ESCAPEMENT_OFF;
334 0 : mbSuper = false;
335 0 : mbSub = false;
336 0 : mbKernAvailable = true;
337 0 : mbKernLBAvailable = true;
338 0 : mlKerning = 0;
339 :
340 : //set handler
341 0 : mpFontNameBox->SetBindings(mpBindings);
342 0 : Link aLink = LINK(this, TextPropertyPanel, FontSelHdl);
343 0 : mpFontNameBox->SetSelectHdl(aLink);
344 0 : aLink = LINK(this, TextPropertyPanel, FontSizeModifyHdl);
345 0 : mpFontSizeBox->SetModifyHdl(aLink);
346 0 : aLink = LINK(this, TextPropertyPanel, FontSizeSelHdl);
347 0 : mpFontSizeBox->SetSelectHdl(aLink);
348 0 : aLink = LINK(this, TextPropertyPanel, FontSizeLoseFocus);
349 0 : mpFontSizeBox->SetLoseFocusHdl(aLink);
350 0 : }
351 :
352 0 : void TextPropertyPanel::EndSpacingPopupMode (void)
353 : {
354 0 : maCharSpacePopup.Hide();
355 0 : }
356 :
357 0 : void TextPropertyPanel::EndUnderlinePopupMode (void)
358 : {
359 0 : maUnderlinePopup.Hide();
360 0 : }
361 :
362 :
363 0 : void TextPropertyPanel::InitToolBoxFont()
364 : {
365 0 : Link aLink = LINK(this, TextPropertyPanel, ToolboxFontSelectHandler);
366 0 : mpToolBoxFont->SetSelectHdl ( aLink );
367 :
368 0 : aLink = LINK(this, TextPropertyPanel, ToolBoxUnderlineClickHdl);
369 0 : mpToolBoxFont->SetDropdownClickHdl(aLink);
370 0 : }
371 :
372 :
373 :
374 :
375 0 : void TextPropertyPanel::InitToolBoxIncDec()
376 : {
377 0 : Link aLink = LINK(this, TextPropertyPanel, ToolboxIncDecSelectHdl);
378 0 : mpToolBoxIncDec->SetSelectHdl ( aLink );
379 0 : }
380 :
381 :
382 :
383 :
384 0 : void TextPropertyPanel::InitToolBoxScript()
385 : {
386 0 : Link aLink = LINK(this, TextPropertyPanel, ToolBoxScriptSelectHdl);
387 0 : mpToolBoxScript->SetSelectHdl ( aLink );
388 0 : }
389 :
390 0 : void TextPropertyPanel::InitToolBoxSpacing()
391 : {
392 0 : const sal_uInt16 nId = mpToolBoxSpacing->GetItemId(UNO_SPACING);
393 0 : mpToolBoxSpacing->SetItemBits(nId, mpToolBoxSpacing->GetItemBits(nId) | TIB_DROPDOWNONLY);
394 :
395 0 : Link aLink = LINK(this, TextPropertyPanel, SpacingClickHdl);
396 0 : mpToolBoxSpacing->SetDropdownClickHdl ( aLink );
397 0 : mpToolBoxSpacing->SetSelectHdl( aLink );
398 0 : }
399 :
400 :
401 :
402 :
403 0 : void TextPropertyPanel::SetupToolboxItems (void)
404 : {
405 0 : maSDFontGrow.SetupToolBoxItem(*mpToolBoxIncDec, mpToolBoxIncDec->GetItemId(UNO_GROW));
406 0 : maSDFontShrink.SetupToolBoxItem(*mpToolBoxIncDec, mpToolBoxIncDec->GetItemId(UNO_SHRINK));
407 :
408 0 : maWeightControl.SetupToolBoxItem(*mpToolBoxFont, mpToolBoxFont->GetItemId(UNO_BOLD));
409 0 : maItalicControl.SetupToolBoxItem(*mpToolBoxFont, mpToolBoxFont->GetItemId(UNO_ITALIC));
410 0 : maUnderlineControl.SetupToolBoxItem(*mpToolBoxFont, mpToolBoxFont->GetItemId(UNO_UNDERLINE));
411 0 : maStrikeControl.SetupToolBoxItem(*mpToolBoxFont, mpToolBoxFont->GetItemId(UNO_STRIKEOUT));
412 0 : maShadowControl.SetupToolBoxItem(*mpToolBoxFont, mpToolBoxFont->GetItemId(UNO_SHADOWED));
413 :
414 0 : maSuperScriptControl.SetupToolBoxItem(*mpToolBoxScript, mpToolBoxScript->GetItemId(UNO_SUPERSCRIPT));
415 0 : maSubScriptControl.SetupToolBoxItem(*mpToolBoxScript, mpToolBoxScript->GetItemId(UNO_SUBSCRIPT));
416 :
417 0 : maSpacingControl.SetupToolBoxItem(*mpToolBoxSpacing, mpToolBoxSpacing->GetItemId(UNO_SPACING));
418 0 : }
419 :
420 :
421 :
422 :
423 0 : IMPL_LINK( TextPropertyPanel, FontSelHdl, FontNameBox*, pBox )
424 : {
425 0 : if ( !pBox->IsTravelSelect() )
426 : {
427 0 : if( SfxViewShell::Current() )
428 : {
429 0 : Window* pShellWnd = SfxViewShell::Current()->GetWindow();
430 :
431 0 : if ( pShellWnd )
432 0 : pShellWnd->GrabFocus();
433 : }
434 : }
435 0 : return 0;
436 : }
437 :
438 0 : IMPL_LINK( TextPropertyPanel, FontSizeModifyHdl, FontSizeBox*, pSizeBox )
439 : {
440 0 : if (pSizeBox == mpFontSizeBox)
441 : {
442 0 : long nSize = pSizeBox->GetValue();
443 0 : mbFocusOnFontSizeCtrl = true;
444 :
445 0 : float fSize = (float)nSize / 10;
446 0 : SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
447 0 : SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ;
448 :
449 0 : mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L );
450 0 : mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false);
451 : }
452 0 : return 0;
453 : }
454 :
455 0 : IMPL_LINK( TextPropertyPanel, FontSizeSelHdl, FontSizeBox*, pSizeBox )
456 : {
457 0 : if ( !pSizeBox->IsTravelSelect() )
458 : {
459 0 : if( SfxViewShell::Current() )
460 : {
461 0 : Window* pShellWnd = SfxViewShell::Current()->GetWindow();
462 :
463 0 : if ( pShellWnd )
464 0 : pShellWnd->GrabFocus();
465 : }
466 : }
467 :
468 0 : return 0;
469 : }
470 :
471 0 : IMPL_LINK(TextPropertyPanel, FontSizeLoseFocus, FontSizeBox*, pSizeBox)
472 : {
473 0 : if(pSizeBox == mpFontSizeBox)
474 : {
475 0 : mbFocusOnFontSizeCtrl = false;
476 : }
477 0 : return 0;
478 : }
479 :
480 0 : IMPL_LINK(TextPropertyPanel, ToolboxFontSelectHandler, ToolBox*, pToolBox)
481 : {
482 0 : const sal_uInt16 nId = pToolBox->GetCurItemId();
483 0 : const OUString aCommand(pToolBox->GetItemCommand(nId));
484 :
485 0 : if (aCommand == UNO_BOLD)
486 : {
487 0 : EndTracking();
488 0 : if(meWeight != WEIGHT_BOLD)
489 0 : meWeight = WEIGHT_BOLD;
490 : else
491 0 : meWeight = WEIGHT_NORMAL;
492 0 : SvxWeightItem aWeightItem(meWeight, SID_ATTR_CHAR_WEIGHT);
493 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_WEIGHT, SFX_CALLMODE_RECORD, &aWeightItem, 0L);
494 0 : UpdateItem(SID_ATTR_CHAR_WEIGHT);
495 : }
496 0 : else if (aCommand == UNO_ITALIC)
497 : {
498 0 : EndTracking();
499 0 : if(meItalic != ITALIC_NORMAL)
500 0 : meItalic = ITALIC_NORMAL;
501 : else
502 0 : meItalic = ITALIC_NONE;
503 0 : SvxPostureItem aPostureItem(meItalic, SID_ATTR_CHAR_POSTURE);
504 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_POSTURE, SFX_CALLMODE_RECORD, &aPostureItem, 0L);
505 0 : UpdateItem(SID_ATTR_CHAR_POSTURE);
506 : }
507 0 : else if (aCommand == UNO_UNDERLINE)
508 : {
509 0 : EndTracking();
510 0 : if(meUnderline == UNDERLINE_NONE)
511 : {
512 0 : meUnderline = UNDERLINE_SINGLE;
513 0 : SvxUnderlineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE);
514 0 : aLineItem.SetColor(meUnderlineColor);
515 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L);
516 : }
517 : else
518 : {
519 0 : meUnderline = UNDERLINE_NONE;
520 0 : SvxUnderlineItem aLineItem(meUnderline, SID_ATTR_CHAR_UNDERLINE);
521 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L);
522 : }
523 0 : UpdateItem(SID_ATTR_CHAR_UNDERLINE);
524 : }
525 0 : else if (aCommand == UNO_STRIKEOUT)
526 : {
527 0 : EndTracking();
528 0 : if(meStrike != STRIKEOUT_NONE && meStrike != STRIKEOUT_DONTKNOW)
529 0 : meStrike = STRIKEOUT_NONE;
530 : else
531 0 : meStrike = STRIKEOUT_SINGLE;
532 0 : SvxCrossedOutItem aStrikeItem(meStrike,SID_ATTR_CHAR_STRIKEOUT);
533 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_STRIKEOUT, SFX_CALLMODE_RECORD, &aStrikeItem, 0L);
534 0 : UpdateItem(SID_ATTR_CHAR_STRIKEOUT);
535 : }
536 0 : else if (aCommand == UNO_SHADOWED)
537 : {
538 0 : EndTracking();
539 0 : mbShadow = !mbShadow;
540 0 : SvxShadowedItem aShadowItem(mbShadow, SID_ATTR_CHAR_SHADOWED);
541 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_SHADOWED, SFX_CALLMODE_RECORD, &aShadowItem, 0L);
542 0 : UpdateItem(SID_ATTR_CHAR_SHADOWED);
543 : }
544 :
545 0 : return 0;
546 : }
547 :
548 :
549 :
550 :
551 0 : IMPL_LINK(TextPropertyPanel, ToolboxIncDecSelectHdl, ToolBox*, pToolBox)
552 : {
553 0 : const sal_uInt16 nId = pToolBox->GetCurItemId();
554 0 : const OUString aCommand(pToolBox->GetItemCommand(nId));
555 :
556 : // font size +/- enhancement in sd
557 0 : switch (maContext.GetCombinedContext_DI())
558 : {
559 : case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
560 : case CombinedEnumContext(Application_DrawImpress, Context_Text):
561 : case CombinedEnumContext(Application_DrawImpress, Context_Table):
562 : case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
563 : case CombinedEnumContext(Application_DrawImpress, Context_Draw):
564 : case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
565 : case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
566 0 : if(aCommand == UNO_GROW)
567 : {
568 0 : EndTracking();
569 0 : SfxVoidItem aItem(SID_GROW_FONT_SIZE);
570 0 : mpBindings->GetDispatcher()->Execute( SID_GROW_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
571 : }
572 0 : else if(aCommand == UNO_SHRINK)
573 : {
574 0 : EndTracking();
575 0 : SfxVoidItem aItem(SID_SHRINK_FONT_SIZE);
576 0 : mpBindings->GetDispatcher()->Execute( SID_SHRINK_FONT_SIZE, SFX_CALLMODE_RECORD, &aItem, 0L );
577 : }
578 0 : break;
579 :
580 : default:
581 0 : if(aCommand == UNO_GROW)
582 : {
583 0 : EndTracking();
584 0 : mbFocusOnFontSizeCtrl = false;
585 0 : sal_Int64 iValue = mpFontSizeBox->GetValue();
586 0 : int iPos = mpFontSizeBox->GetValuePos(iValue, FUNIT_NONE);
587 0 : long nSize = iValue;
588 0 : if(iPos != LISTBOX_ENTRY_NOTFOUND)
589 0 : nSize = mpFontSizeBox->GetValue(iPos+1 , FUNIT_NONE);
590 0 : else if(iValue >= 100 && iValue < 105)
591 0 : nSize = 105;
592 0 : else if(iValue >= 105 && iValue < 110)
593 0 : nSize = 110;
594 0 : else if(iValue < 960)
595 : {
596 0 : nSize = (nSize / 10) * 10 + 10;
597 0 : while(nSize < 960 && mpFontSizeBox->GetValuePos(nSize, FUNIT_NONE) == LISTBOX_ENTRY_NOTFOUND)
598 0 : nSize += 10;
599 : }
600 : else
601 : {
602 0 : nSize = iValue;
603 : }
604 :
605 0 : float fSize = (float)nSize / 10;
606 :
607 0 : SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
608 0 : SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ;
609 :
610 0 : mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L );
611 0 : mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false);
612 0 : mpFontSizeBox->SetValue( nSize );
613 : }
614 0 : else if(aCommand == UNO_SHRINK)
615 : {
616 0 : EndTracking();
617 0 : mbFocusOnFontSizeCtrl = false;
618 0 : sal_Int64 iValue = mpFontSizeBox->GetValue();
619 0 : int iPos = mpFontSizeBox->GetValuePos(iValue, FUNIT_NONE);
620 0 : long nSize = iValue;
621 0 : if(iPos != LISTBOX_ENTRY_NOTFOUND)
622 0 : nSize = mpFontSizeBox->GetValue(iPos-1, FUNIT_NONE);
623 0 : else if(iValue > 100 && iValue <= 105)
624 0 : nSize = 100;
625 0 : else if(iValue > 105 && iValue <= 110)
626 0 : nSize = 105;
627 0 : else if(iValue > 960)
628 : {
629 0 : nSize = 960;
630 : }
631 0 : else if(iValue > 60)
632 : {
633 0 : nSize = (nSize / 10) * 10 ;
634 0 : while(nSize > 60 && mpFontSizeBox->GetValuePos(nSize, FUNIT_NONE) == LISTBOX_ENTRY_NOTFOUND)
635 0 : nSize -= 10;
636 : }
637 : else
638 : {
639 0 : nSize = iValue;
640 : }
641 :
642 0 : float fSize = (float)nSize / 10;
643 :
644 0 : SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
645 0 : SvxFontHeightItem aItem( CalcToUnit( fSize, eUnit ), 100, SID_ATTR_CHAR_FONTHEIGHT ) ;
646 :
647 0 : mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_FONTHEIGHT, SFX_CALLMODE_RECORD, &aItem, 0L );
648 0 : mpBindings->Invalidate(SID_ATTR_CHAR_FONTHEIGHT,true,false);
649 0 : mpFontSizeBox->SetValue( nSize );
650 : }
651 : }
652 0 : UpdateItem(SID_ATTR_CHAR_FONTHEIGHT);
653 :
654 0 : return 0;
655 : }
656 :
657 :
658 :
659 0 : IMPL_LINK(TextPropertyPanel, ToolBoxUnderlineClickHdl, ToolBox*, pToolBox)
660 : {
661 0 : const sal_uInt16 nId = pToolBox->GetCurItemId();
662 0 : const OUString aCommand(pToolBox->GetItemCommand(nId));
663 :
664 0 : if (aCommand == UNO_UNDERLINE)
665 : {
666 0 : pToolBox->SetItemDown( nId, true );
667 0 : maUnderlinePopup.Rearrange(meUnderline);
668 0 : maUnderlinePopup.Show(*pToolBox);
669 : }
670 :
671 0 : return 0L;
672 : }
673 :
674 :
675 :
676 :
677 0 : IMPL_LINK(TextPropertyPanel, ToolBoxScriptSelectHdl, ToolBox*, pToolBox)
678 : {
679 0 : const sal_uInt16 nId = pToolBox->GetCurItemId();
680 0 : const OUString aCommand(pToolBox->GetItemCommand(nId));
681 :
682 0 : if (isWriter() && aCommand == UNO_SUPERSCRIPT)
683 : {
684 0 : if(meEscape != SVX_ESCAPEMENT_SUPERSCRIPT)
685 : {
686 0 : meEscape = SVX_ESCAPEMENT_SUPERSCRIPT;
687 0 : SvxEscapementItem aSupItem(DFLT_ESC_SUPER, DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT);
688 0 : mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aSupItem, 0L );
689 : }
690 : else
691 : {
692 0 : meEscape = SVX_ESCAPEMENT_OFF;
693 0 : SvxEscapementItem aNoneItem(0, 100, SID_ATTR_CHAR_ESCAPEMENT);
694 0 : mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aNoneItem, 0L );
695 : }
696 0 : UpdateItem(SID_ATTR_CHAR_ESCAPEMENT);
697 : }
698 0 : else if (isWriter() && aCommand == UNO_SUBSCRIPT)
699 : {
700 0 : if(meEscape != SVX_ESCAPEMENT_SUBSCRIPT)
701 : {
702 0 : meEscape = (SvxEscapement)SVX_ESCAPEMENT_SUBSCRIPT;
703 0 : SvxEscapementItem aSubItem(DFLT_ESC_SUB, DFLT_ESC_PROP, SID_ATTR_CHAR_ESCAPEMENT);
704 0 : mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aSubItem, 0L );
705 : }
706 : else
707 : {
708 0 : meEscape = SVX_ESCAPEMENT_OFF;
709 0 : SvxEscapementItem aNoneItem(0, 100, SID_ATTR_CHAR_ESCAPEMENT);
710 0 : mpBindings->GetDispatcher()->Execute( SID_ATTR_CHAR_ESCAPEMENT, SFX_CALLMODE_RECORD, &aNoneItem, 0L );
711 : }
712 0 : UpdateItem(SID_ATTR_CHAR_ESCAPEMENT);
713 : }
714 0 : else if (!isWriter() && aCommand == UNO_SUPERSCRIPT)
715 : {
716 0 : mbSuper = !mbSuper;
717 0 : SfxBoolItem aSupItem(SID_SET_SUPER_SCRIPT, mbSuper);
718 0 : mpBindings->GetDispatcher()->Execute( SID_SET_SUPER_SCRIPT, SFX_CALLMODE_RECORD, &aSupItem, 0L );
719 0 : UpdateItem(SID_SET_SUPER_SCRIPT);
720 : }
721 0 : else if (!isWriter() && aCommand == UNO_SUBSCRIPT)
722 : {
723 :
724 0 : mbSub = !mbSub;
725 0 : SfxBoolItem aSubItem(SID_SET_SUB_SCRIPT, mbSub );
726 0 : mpBindings->GetDispatcher()->Execute( SID_SET_SUB_SCRIPT, SFX_CALLMODE_RECORD, &aSubItem, 0L );
727 0 : UpdateItem(SID_SET_SUB_SCRIPT);
728 : }
729 :
730 0 : return 0;
731 : }
732 :
733 :
734 :
735 :
736 0 : IMPL_LINK(TextPropertyPanel, SpacingClickHdl, ToolBox*, pToolBox)
737 : {
738 0 : const sal_uInt16 nId = pToolBox->GetCurItemId();
739 0 : const OUString aCommand(pToolBox->GetItemCommand(nId));
740 :
741 0 : if (aCommand == UNO_SPACING)
742 : {
743 0 : pToolBox->SetItemDown( nId, true );
744 0 : maCharSpacePopup.Rearrange(mbKernLBAvailable,mbKernAvailable,mlKerning);
745 0 : maCharSpacePopup.Show(*pToolBox);
746 : }
747 :
748 0 : return 0L;
749 : }
750 :
751 :
752 :
753 :
754 0 : void TextPropertyPanel::NotifyItemUpdate (
755 : const sal_uInt16 nSID,
756 : const SfxItemState eState,
757 : const SfxPoolItem* pState,
758 : const bool bIsEnabled)
759 : {
760 0 : switch(nSID)
761 : {
762 : case SID_ATTR_CHAR_FONT:
763 : {
764 0 : bool bIsControlEnabled (bIsEnabled);
765 0 : if ( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxFontItem) )
766 : {
767 0 : const SvxFontItem* pFontItem = (const SvxFontItem*)pState;
768 0 : mpFontNameBox->SetText( pFontItem->GetFamilyName() );
769 : }
770 : else
771 : {
772 0 : mpFontNameBox->SetText( String() );
773 0 : if (SFX_ITEM_DISABLED == eState)
774 0 : bIsControlEnabled = false;
775 : }
776 0 : mpFontNameBox->Enable(bIsControlEnabled);
777 : }
778 0 : break;
779 : case SID_ATTR_CHAR_FONTHEIGHT:
780 : {
781 0 : const sal_uInt16 nIncreaseId = mpToolBoxIncDec->GetItemId(UNO_GROW);
782 0 : const sal_uInt16 nDecreaseId = mpToolBoxIncDec->GetItemId(UNO_SHRINK);
783 0 : bool bIsControlEnabled (bIsEnabled);
784 0 : if ( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxFontHeightItem) )
785 : {
786 0 : mpHeightItem = (SvxFontHeightItem*)pState;//const SvxFontHeightItem*
787 0 : SfxMapUnit eUnit = maFontSizeControl.GetCoreMetric();
788 0 : const sal_Int64 nValue (CalcToPoint(mpHeightItem->GetHeight(), eUnit, 10 ));
789 0 : mpToolBoxIncDec->Enable();
790 :
791 0 : mpToolBoxIncDec->SetItemState(nIncreaseId, STATE_NOCHECK);
792 0 : mpToolBoxIncDec->SetItemState(nDecreaseId, STATE_NOCHECK);
793 :
794 : // For Writer we have to update the states of the
795 : // increase and decrease buttons here, because we have
796 : // no access to the slots used by Writer.
797 0 : switch(maContext.GetCombinedContext_DI())
798 : {
799 : case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
800 : case CombinedEnumContext(Application_DrawImpress, Context_Text):
801 : case CombinedEnumContext(Application_DrawImpress, Context_Table):
802 : case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
803 : case CombinedEnumContext(Application_DrawImpress, Context_Draw):
804 : case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
805 : case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
806 0 : break;
807 :
808 : default:
809 : {
810 0 : mpToolBoxIncDec->EnableItem(nIncreaseId, bIsEnabled && nValue<960);
811 0 : mpToolBoxIncDec->EnableItem(nDecreaseId, bIsEnabled && nValue>60);
812 0 : break;
813 : }
814 : }
815 :
816 0 : if( mbFocusOnFontSizeCtrl )
817 0 : return;
818 :
819 0 : mpFontSizeBox->SetValue(nValue);
820 0 : mpFontSizeBox->LoseFocus();
821 :
822 0 : UpdateItem(SID_SHRINK_FONT_SIZE);
823 0 : UpdateItem(SID_GROW_FONT_SIZE);
824 : }
825 : else
826 : {
827 0 : mpHeightItem = NULL;
828 0 : mpFontSizeBox->SetText( String() );
829 : //increase decrease diabled when multi-seletion have different font size
830 :
831 : // font size +/- enhancement in sd
832 0 : switch(maContext.GetCombinedContext_DI())
833 : {
834 : case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
835 : case CombinedEnumContext(Application_DrawImpress, Context_Text):
836 : case CombinedEnumContext(Application_DrawImpress, Context_Table):
837 : case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
838 : case CombinedEnumContext(Application_DrawImpress, Context_Draw):
839 : case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
840 : case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
841 0 : break;
842 :
843 : default:
844 0 : mpToolBoxIncDec->Disable();
845 : }
846 0 : if ( eState <= SFX_ITEM_READONLY )
847 0 : bIsControlEnabled = false;
848 : }
849 0 : mpFontSizeBox->Enable(bIsControlEnabled);
850 : }
851 0 : break;
852 : case SID_ATTR_CHAR_WEIGHT:
853 : {
854 0 : mbWeightAvailable = (eState >= SFX_ITEM_DONTCARE);
855 0 : if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxWeightItem))
856 : {
857 0 : const SvxWeightItem* pItem = (const SvxWeightItem*)pState;
858 0 : meWeight = (FontWeight)pItem->GetValue();
859 : }
860 : else
861 : {
862 0 : meWeight = WEIGHT_NORMAL;
863 : }
864 0 : const sal_uInt16 nId = mpToolBoxFont->GetItemId(UNO_BOLD);
865 0 : mpToolBoxFont->EnableItem(nId, mbWeightAvailable && bIsEnabled);
866 0 : mpToolBoxFont->SetItemState(nId, meWeight==WEIGHT_BOLD ? STATE_CHECK : STATE_NOCHECK);
867 : }
868 0 : break;
869 : case SID_ATTR_CHAR_POSTURE:
870 : {
871 0 : mbPostureAvailable = (eState >= SFX_ITEM_DONTCARE);
872 0 : if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxPostureItem))
873 : {
874 0 : const SvxPostureItem* pItem = (const SvxPostureItem*)pState;
875 0 : meItalic = (FontItalic)pItem->GetValue();
876 : }
877 : else
878 : {
879 0 : meItalic = ITALIC_NONE;
880 : }
881 0 : const sal_uInt16 nId = mpToolBoxFont->GetItemId(UNO_ITALIC);
882 0 : mpToolBoxFont->EnableItem(nId, mbPostureAvailable && bIsEnabled);
883 0 : mpToolBoxFont->SetItemState(nId, meItalic==ITALIC_NORMAL ? STATE_CHECK : STATE_NOCHECK);
884 : }
885 0 : break;
886 : case SID_ATTR_CHAR_UNDERLINE:
887 : {
888 0 : if( eState >= SFX_ITEM_DEFAULT)
889 : {
890 0 : if(pState->ISA(SvxUnderlineItem))
891 : {
892 0 : const SvxUnderlineItem* pItem = (const SvxUnderlineItem*)pState;
893 0 : meUnderline = (FontUnderline)pItem->GetValue();
894 0 : meUnderlineColor = pItem->GetColor();
895 : }
896 : }
897 : else
898 : {
899 0 : meUnderline = UNDERLINE_NONE;
900 : }
901 0 : const sal_uInt16 nId = mpToolBoxFont->GetItemId(UNO_UNDERLINE);
902 0 : mpToolBoxFont->EnableItem(nId, bIsEnabled);
903 0 : mpToolBoxFont->SetItemState(nId, meUnderline==UNDERLINE_NONE ? STATE_NOCHECK : STATE_CHECK);
904 : }
905 0 : break;
906 : case SID_ATTR_CHAR_SHADOWED:
907 : {
908 0 : if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxShadowedItem))
909 : {
910 0 : const SvxShadowedItem* pItem = (const SvxShadowedItem*)pState;
911 0 : mbShadow = pItem->GetValue();
912 : }
913 : else
914 : {
915 0 : mbShadow = false;
916 : }
917 0 : const sal_uInt16 nId = mpToolBoxFont->GetItemId(UNO_SHADOWED);
918 0 : mpToolBoxFont->EnableItem(nId, bIsEnabled);
919 0 : mpToolBoxFont->SetItemState(nId, mbShadow ? STATE_CHECK : STATE_NOCHECK);
920 : }
921 0 : break;
922 : case SID_ATTR_CHAR_STRIKEOUT:
923 : {
924 0 : if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SvxCrossedOutItem))
925 : {
926 0 : const SvxCrossedOutItem* pItem = (const SvxCrossedOutItem*)pState;
927 0 : meStrike = (FontStrikeout)pItem->GetValue();
928 : }
929 : else
930 : {
931 0 : meStrike = STRIKEOUT_NONE;
932 : }
933 0 : const sal_uInt16 nId = mpToolBoxFont->GetItemId(UNO_STRIKEOUT);
934 0 : mpToolBoxFont->EnableItem(nId, bIsEnabled);
935 : mpToolBoxFont->SetItemState(nId,
936 0 : meStrike!=STRIKEOUT_NONE && meStrike!=STRIKEOUT_DONTKNOW
937 : ? STATE_CHECK
938 0 : : STATE_NOCHECK);
939 : }
940 0 : break;
941 : case SID_ATTR_CHAR_ESCAPEMENT:
942 0 : if (isWriter())
943 : {
944 0 : bool bIsItemEnabled (true);
945 0 : const sal_uInt16 nSuperscriptId = mpToolBoxScript->GetItemId(UNO_SUPERSCRIPT);
946 0 : const sal_uInt16 nSubscriptId = mpToolBoxScript->GetItemId(UNO_SUBSCRIPT);
947 0 : if (eState == SFX_ITEM_AVAILABLE)
948 : {
949 0 : if (pState->ISA(SvxEscapementItem))
950 : {
951 0 : const SvxEscapementItem* pItem = (const SvxEscapementItem *)pState;
952 0 : short nEsc = pItem->GetEsc();
953 0 : if(nEsc == 0)
954 : {
955 0 : meEscape = SVX_ESCAPEMENT_OFF;
956 0 : mpToolBoxScript->SetItemState(nSuperscriptId, STATE_NOCHECK);
957 0 : mpToolBoxScript->SetItemState(nSubscriptId, STATE_NOCHECK);
958 : }
959 0 : else if(nEsc > 0)
960 : {
961 0 : meEscape = SVX_ESCAPEMENT_SUPERSCRIPT;
962 0 : mpToolBoxScript->SetItemState(nSuperscriptId, STATE_CHECK);
963 0 : mpToolBoxScript->SetItemState(nSubscriptId, STATE_NOCHECK);
964 : }
965 : else
966 : {
967 0 : meEscape = SVX_ESCAPEMENT_SUBSCRIPT;
968 0 : mpToolBoxScript->SetItemState(nSuperscriptId, STATE_NOCHECK);
969 0 : mpToolBoxScript->SetItemState(nSubscriptId, STATE_CHECK);
970 : }
971 : }
972 : else
973 : {
974 0 : meEscape = SVX_ESCAPEMENT_OFF;
975 0 : mpToolBoxScript->SetItemState(nSuperscriptId, STATE_NOCHECK);
976 0 : mpToolBoxScript->SetItemState(nSubscriptId, STATE_NOCHECK);
977 : }
978 : }
979 0 : else if (eState == SFX_ITEM_DISABLED)
980 : {
981 0 : bIsItemEnabled = false;
982 : }
983 : else
984 : {
985 0 : meEscape = SVX_ESCAPEMENT_OFF;
986 : }
987 0 : mpToolBoxScript->EnableItem(nSuperscriptId, bIsItemEnabled && bIsEnabled);
988 0 : mpToolBoxScript->EnableItem(nSubscriptId, bIsItemEnabled && bIsEnabled);
989 : }
990 0 : break;
991 : case SID_SET_SUB_SCRIPT:
992 0 : if (!isWriter())
993 : {
994 0 : if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SfxBoolItem))
995 : {
996 0 : const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
997 0 : mbSub = pItem->GetValue();
998 : }
999 : else
1000 : {
1001 0 : mbSub = false;
1002 : }
1003 0 : const sal_uInt16 nSubscriptId = mpToolBoxScript->GetItemId(UNO_SUBSCRIPT);
1004 0 : mpToolBoxScript->EnableItem(nSubscriptId, bIsEnabled);
1005 0 : mpToolBoxScript->SetItemState(nSubscriptId, mbSub ? STATE_CHECK : STATE_NOCHECK);
1006 : }
1007 0 : break;
1008 : case SID_SET_SUPER_SCRIPT:
1009 0 : if (!isWriter())
1010 : {
1011 0 : if( eState >= SFX_ITEM_DEFAULT && pState->ISA(SfxBoolItem))
1012 : {
1013 0 : const SfxBoolItem* pItem = (const SfxBoolItem*)pState;
1014 0 : mbSuper = pItem->GetValue();
1015 : }
1016 : else
1017 : {
1018 0 : mbSuper = false;
1019 : }
1020 0 : const sal_uInt16 nSuperscriptId = mpToolBoxScript->GetItemId(UNO_SUPERSCRIPT);
1021 0 : mpToolBoxScript->EnableItem(nSuperscriptId, bIsEnabled);
1022 0 : mpToolBoxScript->SetItemState(nSuperscriptId, mbSuper ? STATE_CHECK : STATE_NOCHECK);
1023 : }
1024 0 : break;
1025 : case SID_ATTR_CHAR_KERNING:
1026 : {
1027 0 : if ( SFX_ITEM_AVAILABLE == eState )
1028 : {
1029 0 : mbKernLBAvailable = true;
1030 :
1031 0 : if(pState->ISA(SvxKerningItem))
1032 : {
1033 0 : const SvxKerningItem* pKerningItem = (const SvxKerningItem*)pState;
1034 0 : mlKerning = (long)pKerningItem->GetValue();
1035 0 : mbKernAvailable = true;
1036 : }
1037 : else
1038 : {
1039 0 : mlKerning = 0;
1040 0 : mbKernAvailable =false;
1041 : }
1042 : }
1043 0 : else if (SFX_ITEM_DISABLED == eState)
1044 : {
1045 0 : mbKernLBAvailable = false;
1046 0 : mbKernAvailable = false;
1047 0 : mlKerning = 0;
1048 : }
1049 : else
1050 : {
1051 0 : mbKernLBAvailable = true;
1052 0 : mbKernAvailable = false;
1053 0 : mlKerning = 0;
1054 : }
1055 0 : mpToolBoxSpacing->EnableItem(mpToolBoxSpacing->GetItemId(UNO_SPACING), bIsEnabled);
1056 : }
1057 0 : break;
1058 : case SID_SHRINK_FONT_SIZE:
1059 : case SID_GROW_FONT_SIZE:
1060 : {
1061 0 : switch(maContext.GetCombinedContext_DI())
1062 : {
1063 : case CombinedEnumContext(Application_DrawImpress, Context_DrawText):
1064 : case CombinedEnumContext(Application_DrawImpress, Context_Text):
1065 : case CombinedEnumContext(Application_DrawImpress, Context_Table):
1066 : case CombinedEnumContext(Application_DrawImpress, Context_OutlineText):
1067 : case CombinedEnumContext(Application_DrawImpress, Context_Draw):
1068 : case CombinedEnumContext(Application_DrawImpress, Context_TextObject):
1069 : case CombinedEnumContext(Application_DrawImpress, Context_Graphic):
1070 : {
1071 0 : if(eState == SFX_ITEM_DISABLED)
1072 0 : mpToolBoxIncDec->Disable();
1073 : else
1074 0 : mpToolBoxIncDec->Enable();
1075 0 : const sal_Int64 nSize (mpFontSizeBox->GetValue());
1076 0 : if(nSID == SID_GROW_FONT_SIZE)
1077 : {
1078 0 : mpToolBoxIncDec->EnableItem(mpToolBoxIncDec->GetItemId(UNO_GROW), bIsEnabled && nSize<960);
1079 : }
1080 0 : else if (nSID == SID_SHRINK_FONT_SIZE)
1081 : {
1082 0 : mpToolBoxIncDec->EnableItem(mpToolBoxIncDec->GetItemId(UNO_SHRINK), bIsEnabled && nSize>60);
1083 : }
1084 : }
1085 : }
1086 : }
1087 0 : break;
1088 : }
1089 : }
1090 :
1091 :
1092 :
1093 :
1094 0 : void TextPropertyPanel::UpdateItem (const sal_uInt16 nSlotId)
1095 : {
1096 0 : switch (nSlotId)
1097 : {
1098 : case SID_ATTR_CHAR_FONT:
1099 0 : maFontNameControl.RequestUpdate();
1100 0 : break;
1101 : case SID_ATTR_CHAR_FONTHEIGHT:
1102 0 : maFontSizeControl.RequestUpdate();
1103 0 : break;
1104 : case SID_ATTR_CHAR_WEIGHT:
1105 0 : maWeightControl.RequestUpdate();
1106 0 : break;
1107 : case SID_ATTR_CHAR_POSTURE:
1108 0 : maItalicControl.RequestUpdate();
1109 0 : break;
1110 : case SID_ATTR_CHAR_UNDERLINE:
1111 0 : maUnderlineControl.RequestUpdate();
1112 0 : break;
1113 : case SID_ATTR_CHAR_STRIKEOUT:
1114 0 : maStrikeControl.RequestUpdate();
1115 0 : break;
1116 : case SID_ATTR_CHAR_SHADOWED:
1117 0 : maShadowControl.RequestUpdate();
1118 0 : break;
1119 : case SID_ATTR_CHAR_ESCAPEMENT:
1120 0 : maScriptControlSw.RequestUpdate();
1121 0 : break;
1122 : case SID_SET_SUPER_SCRIPT:
1123 0 : maSuperScriptControl.RequestUpdate();
1124 0 : break;
1125 : case SID_SET_SUB_SCRIPT:
1126 0 : maSubScriptControl.RequestUpdate();
1127 0 : break;
1128 : case SID_ATTR_CHAR_KERNING:
1129 0 : maSpacingControl.RequestUpdate();
1130 0 : break;
1131 : case SID_GROW_FONT_SIZE:
1132 0 : maSDFontGrow.RequestUpdate();
1133 0 : break;
1134 : case SID_SHRINK_FONT_SIZE:
1135 0 : maSDFontShrink.RequestUpdate();
1136 0 : break;
1137 : }
1138 0 : }
1139 :
1140 :
1141 :
1142 :
1143 :
1144 0 : Color& TextPropertyPanel::GetUnderlineColor()
1145 : {
1146 0 : return meUnderlineColor;
1147 : }
1148 :
1149 0 : void TextPropertyPanel::SetUnderline(FontUnderline eUnderline)
1150 : {
1151 0 : meUnderline = eUnderline;
1152 0 : }
1153 :
1154 0 : bool TextPropertyPanel::isWriter()
1155 : {
1156 0 : switch (maContext.GetCombinedContext_DI())
1157 : {
1158 : case CombinedEnumContext(Application_WriterVariants, Context_Text):
1159 : case CombinedEnumContext(Application_WriterVariants, Context_Table):
1160 : case CombinedEnumContext(Application_WriterVariants, Context_DrawText):
1161 : case CombinedEnumContext(Application_WriterVariants, Context_Annotation):
1162 0 : return true;
1163 : default:
1164 0 : return false;
1165 : }
1166 : }
1167 :
1168 216 : } } // end of namespace svx::sidebar
|