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