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 23 24 #include "svx/sidebar/PopupContainer.hxx" 25 #include "AreaTransparencyGradientControl.hxx" 26 27 #include <sfx2/sidebar/ResourceDefinitions.hrc> 28 #include <sfx2/sidebar/Theme.hxx> 29 #include <sfx2/sidebar/ControlFactory.hxx> 30 #include <sfx2/sidebar/Layouter.hxx> 31 #include <AreaPropertyPanel.hxx> 32 #include <AreaPropertyPanel.hrc> 33 #include <svx/dialogs.hrc> 34 #include <svx/dialmgr.hxx> 35 #include <sfx2/objsh.hxx> 36 #include <svx/xfltrit.hxx> 37 #include <svx/xflftrit.hxx> 38 #include <svx/xtable.hxx> 39 #include <sfx2/dispatch.hxx> 40 #include <sfx2/bindings.hxx> 41 #include <helpid.hrc> 42 #include <svtools/valueset.hxx> 43 #include <unotools/pathoptions.hxx> 44 #include <svx/svxitems.hrc> 45 #include <vcl/toolbox.hxx> 46 #include <svtools/toolbarmenu.hxx> 47 #include <svx/sidebar/ColorControl.hxx> 48 49 #include <boost/bind.hpp> 50 51 using namespace css; 52 using namespace cssu; 53 using ::sfx2::sidebar::Layouter; 54 using ::sfx2::sidebar::Theme; 55 56 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) 57 58 59 60 61 namespace svx { namespace sidebar { 62 63 const sal_Int32 AreaPropertyPanel::DEFAULT_CENTERX = 50; 64 const sal_Int32 AreaPropertyPanel::DEFAULT_CENTERY = 50; 65 const sal_Int32 AreaPropertyPanel::DEFAULT_ANGLE = 0; 66 const sal_Int32 AreaPropertyPanel::DEFAULT_STARTVALUE = 0; 67 const sal_Int32 AreaPropertyPanel::DEFAULT_ENDVALUE = 16777215; 68 const sal_Int32 AreaPropertyPanel::DEFAULT_BORDER = 0; 69 70 71 AreaPropertyPanel::AreaPropertyPanel( 72 Window* pParent, 73 const cssu::Reference<css::frame::XFrame>& rxFrame, 74 SfxBindings* pBindings) 75 : Control(pParent, SVX_RES(RID_SIDEBAR_AREA_PANEL)), 76 meLastXFS(-1), 77 maLastColor(Color(COL_DEFAULT_SHAPE_FILLING)), 78 mnLastPosGradient(0), 79 mnLastPosHatch(0), 80 mnLastPosBitmap(0), 81 mnLastTransSolid(50), 82 maGradientLinear(), 83 maGradientAxial(), 84 maGradientRadial(), 85 maGradientElliptical(), 86 maGradientSquare(), 87 maGradientRect(), 88 mpColorTextFT(new FixedText(this, SVX_RES(FT_COLOR_LIST))), 89 mpLbFillType(new SvxFillTypeBox(this)), 90 mpLbFillAttr(new SvxFillAttrBox(this)), 91 mpToolBoxColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), 92 mpToolBoxColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpToolBoxColorBackground.get(), SVX_RES(TB_COLOR))), 93 mpTrspTextFT(new FixedText(this, SVX_RES(FL_TRSP_TEXT))), 94 mpLBTransType(new ListBox(this, SVX_RES(LB_TRGR_TYPES))), 95 mpMTRTransparent(new MetricField(this, SVX_RES(MTR_TRANSPARENT))), 96 mpBTNGradientBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), 97 mpBTNGradient(sfx2::sidebar::ControlFactory::CreateToolBox(mpBTNGradientBackground.get(), SVX_RES(BTN_GRADIENT))), 98 mpColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_FILL_COLOR, TBI_COLOR, mpToolBoxColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)), 99 mpStyleItem(), 100 mpColorItem(), 101 mpFillGradientItem(), 102 mpHatchItem(), 103 mpBitmapItem(), 104 maStyleControl(SID_ATTR_FILL_STYLE, *pBindings, *this), 105 maColorControl(SID_ATTR_FILL_COLOR, *pBindings, *this), 106 maGradientControl(SID_ATTR_FILL_GRADIENT, *pBindings, *this), 107 maHatchControl(SID_ATTR_FILL_HATCH, *pBindings, *this), 108 maBitmapControl(SID_ATTR_FILL_BITMAP, *pBindings, *this), 109 maColorTableControl(SID_COLOR_TABLE, *pBindings, *this), 110 maGradientListControl(SID_GRADIENT_LIST, *pBindings, *this), 111 maHatchListControl(SID_HATCH_LIST, *pBindings, *this), 112 maBitmapListControl(SID_BITMAP_LIST, *pBindings, *this), 113 maFillTransparenceController(SID_ATTR_FILL_TRANSPARENCE, *pBindings, *this), 114 maFillFloatTransparenceController(SID_ATTR_FILL_FLOATTRANSPARENCE, *pBindings, *this), 115 maImgAxial(SVX_RES(IMG_AXIAL)), 116 maImgElli(SVX_RES(IMG_ELLI)), 117 maImgQuad(SVX_RES(IMG_QUAD)), 118 maImgRadial(SVX_RES(IMG_RADIAL)), 119 maImgSquare(SVX_RES(IMG_SQUARE)), 120 maImgLinear(SVX_RES(IMG_LINEAR)), 121 maImgColor(SVX_RES(IMG_COLOR)), 122 maImgAxialH(SVX_RES(IMG_AXIAL_H)), 123 maImgElliH(SVX_RES(IMG_ELLI_H)), 124 maImgQuadH(SVX_RES(IMG_QUAD_H)), 125 maImgRadialH(SVX_RES(IMG_RADIAL_H)), 126 maImgSquareH(SVX_RES(IMG_SQUARE_H)), 127 maImgLinearH(SVX_RES(IMG_LINEAR_H)), 128 maImgColorH(SVX_RES(IMG_COLOR_H)), 129 msHelpFillType(SVX_RES(STR_HELP_TYPE)), 130 msHelpFillAttr(SVX_RES(STR_HELP_ATTR)), 131 maTrGrPopup(this, ::boost::bind(&AreaPropertyPanel::CreateTransparencyGradientControl, this, _1)), 132 maColorPopup(this, ::boost::bind(&AreaPropertyPanel::CreateColorPopupControl, this, _1)), 133 mpFloatTransparenceItem(), 134 mpTransparanceItem(), 135 mxFrame(rxFrame), 136 mpBindings(pBindings), 137 mbColorAvail(true), 138 maLayouter(*this) 139 { 140 Initialize(); 141 FreeResource(); 142 143 // Setup the grid layouter. 144 const sal_Int32 nMappedMboxWidth (Layouter::MapWidth(*this, MBOX_WIDTH)); 145 146 maLayouter.GetCell(0,0).SetControl(*mpColorTextFT).SetGridWidth(3); 147 maLayouter.GetCell(1,0).SetControl(*mpLbFillType); 148 maLayouter.GetCell(1,2,0).SetControl(*mpToolBoxColorBackground).SetFixedWidth(); 149 maLayouter.GetCell(1,2,1).SetControl(*mpLbFillAttr); 150 151 maLayouter.GetCell(2,0).SetControl(*mpTrspTextFT).SetGridWidth(3); 152 maLayouter.GetCell(3,0).SetControl(*mpLBTransType); 153 maLayouter.GetCell(3,2,0).SetControl(*mpMTRTransparent); 154 maLayouter.GetCell(3,2,1).SetControl(*mpBTNGradient); 155 156 maLayouter.GetColumn(0) 157 .SetWeight(1) 158 .SetLeftPadding(Layouter::MapWidth(*this,SECTIONPAGE_MARGIN_HORIZONTAL)) 159 .SetMinimumWidth(nMappedMboxWidth); 160 maLayouter.GetColumn(1) 161 .SetWeight(0) 162 .SetMinimumWidth(Layouter::MapWidth(*this, CONTROL_SPACING_HORIZONTAL)); 163 maLayouter.GetColumn(2) 164 .SetWeight(1) 165 .SetMinimumWidth(nMappedMboxWidth) 166 .SetRightPadding(Layouter::MapWidth(*this,SECTIONPAGE_MARGIN_HORIZONTAL)); 167 168 // Make controls that display text handle short widths more 169 // graceful. 170 Layouter::PrepareForLayouting(*mpColorTextFT); 171 Layouter::PrepareForLayouting(*mpTrspTextFT); 172 } 173 174 175 176 AreaPropertyPanel::~AreaPropertyPanel() 177 { 178 // Destroy the toolboxes, then their background windows. 179 mpToolBoxColor.reset(); 180 mpBTNGradient.reset(); 181 mpToolBoxColorBackground.reset(); 182 mpBTNGradientBackground.reset(); 183 } 184 185 186 187 void AreaPropertyPanel::Initialize() 188 { 189 mpColorTextFT->SetBackground(Wallpaper()); 190 mpTrspTextFT->SetBackground(Wallpaper()); 191 192 maGradientLinear.SetXOffset(DEFAULT_CENTERX); 193 maGradientLinear.SetYOffset(DEFAULT_CENTERY); 194 maGradientLinear.SetAngle(DEFAULT_ANGLE); 195 maGradientLinear.SetStartColor(Color(DEFAULT_STARTVALUE)); 196 maGradientLinear.SetEndColor(Color(DEFAULT_ENDVALUE)); 197 maGradientLinear.SetBorder(DEFAULT_BORDER); 198 maGradientLinear.SetGradientStyle(XGRAD_LINEAR); 199 200 maGradientAxial = maGradientLinear; 201 maGradientAxial.SetGradientStyle(XGRAD_AXIAL); 202 203 maGradientRadial = maGradientLinear; 204 maGradientRadial.SetGradientStyle(XGRAD_RADIAL); 205 206 maGradientElliptical = maGradientLinear; 207 maGradientElliptical.SetGradientStyle(XGRAD_ELLIPTICAL); 208 209 maGradientSquare = maGradientLinear; 210 maGradientSquare.SetGradientStyle(XGRAD_SQUARE); 211 212 maGradientRect = maGradientLinear; 213 maGradientRect.SetGradientStyle(XGRAD_RECT); 214 215 Size aLogicalFillSize(MBOX_WIDTH,LISTBOX_HEIGHT); 216 Size aLogicalAttrSize(MBOX_WIDTH + 1,LISTBOX_HEIGHT); 217 218 Point aPoint(SECTIONPAGE_MARGIN_HORIZONTAL,SECTIONPAGE_MARGIN_VERTICAL_TOP + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL); 219 Point aPoint_Picker(SECTIONPAGE_MARGIN_HORIZONTAL + MBOX_WIDTH + CONTROL_SPACING_HORIZONTAL,SECTIONPAGE_MARGIN_VERTICAL_TOP + FIXED_TEXT_HEIGHT + TEXT_CONTROL_SPACING_VERTICAL); 220 221 Size aTypeSize(LogicToPixel(aLogicalFillSize, MAP_APPFONT)); 222 Size aAttrSize(LogicToPixel(aLogicalAttrSize, MAP_APPFONT)); 223 224 Point aTypePoint(LogicToPixel(aPoint, MAP_APPFONT)); 225 Point aAttrPoint(LogicToPixel(aPoint_Picker, MAP_APPFONT)); 226 227 mpLbFillType->SetPosSizePixel(aTypePoint,aTypeSize); 228 mpLbFillAttr->SetPosSizePixel(aAttrPoint,aAttrSize); 229 230 mpLbFillType->SetHelpId(HID_PPROPERTYPANEL_AREA_LB_FILL_TYPES); 231 mpLbFillAttr->SetHelpId(HID_PPROPERTYPANEL_AREA_LB_FILL_ATTR); 232 233 mpLbFillType->SetQuickHelpText(msHelpFillType); 234 mpLbFillAttr->SetQuickHelpText(msHelpFillAttr); 235 236 mpLbFillType->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Fill"))); // wj acc 237 mpLbFillAttr->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Fill"))); // wj acc 238 239 Link aLink = LINK( this, AreaPropertyPanel, SelectFillTypeHdl ); 240 mpLbFillType->SetSelectHdl( aLink ); 241 242 aLink = LINK( this, AreaPropertyPanel, SelectFillAttrHdl ); 243 mpLbFillAttr->SetSelectHdl( aLink ); 244 245 // add for new color picker 246 mpLbFillAttr->Hide(); 247 mpToolBoxColor->SetItemImage(TBI_COLOR, GetDisplayBackground().GetColor().IsDark()? maImgColorH : maImgColor); 248 Size aTbxSize( mpToolBoxColor->CalcWindowSizePixel() ); 249 mpToolBoxColor->SetOutputSizePixel( aTbxSize ); 250 mpToolBoxColor->SetItemBits( TBI_COLOR, mpToolBoxColor->GetItemBits( TBI_COLOR ) | TIB_DROPDOWNONLY ); 251 mpToolBoxColor->SetBackground(Wallpaper()); 252 mpToolBoxColor->SetPaintTransparent(true); 253 mpToolBoxColor->SetQuickHelpText(TBI_COLOR, String(SVX_RES(STR_HELP_COLOR))); // wj acc 254 //mpToolBoxColor->SetItemText(TBI_COLOR, msHelpFillAttr); 255 256 long aHeightLBStyle = mpLbFillType->GetSizePixel().getHeight(); 257 long aLBPosY = mpLbFillType->GetPosPixel().getY(); 258 long aHeightTBAttr = mpToolBoxColor->GetSizePixel().getHeight(); 259 Point aPointTBAttr = mpToolBoxColor->GetPosPixel(); 260 aPointTBAttr.setY( aLBPosY + aHeightLBStyle / 2 - aHeightTBAttr / 2); 261 mpToolBoxColor->SetPosPixel(aPointTBAttr); 262 263 aLink = LINK(this, AreaPropertyPanel, ToolBoxColorDropHdl); 264 mpToolBoxColor->SetDropdownClickHdl ( aLink ); 265 mpToolBoxColor->SetSelectHdl ( aLink ); 266 267 // add end 268 mpLBTransType->SetSelectHdl(LINK(this, AreaPropertyPanel, ChangeTrgrTypeHdl_Impl)); 269 mpLBTransType->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); // wj acc 270 271 mpMTRTransparent->SetValue( 50 ); 272 mpMTRTransparent->SetModifyHdl(LINK(this, AreaPropertyPanel, ModifyTransparentHdl_Impl)); 273 mpMTRTransparent->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); // wj acc 274 275 mpBTNGradient->SetItemBits( TBI_BTX_GRADIENT, mpBTNGradient->GetItemBits( TBI_BTX_GRADIENT ) | TIB_DROPDOWNONLY ); 276 aLink = LINK( this, AreaPropertyPanel, ClickTrGrHdl_Impl ); 277 mpBTNGradient->SetDropdownClickHdl( aLink ); 278 mpBTNGradient->SetSelectHdl( aLink ); 279 aTbxSize = mpBTNGradient->CalcWindowSizePixel(); 280 mpBTNGradient->SetOutputSizePixel( aTbxSize ); 281 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,maImgLinear); 282 mpBTNGradient->SetQuickHelpText(TBI_BTX_GRADIENT, String(SVX_RES(STR_HELP_GRADIENT))); // wj acc 283 mpBTNGradient->Hide(); 284 285 long aHeightLBTrans = mpLBTransType->GetSizePixel().getHeight(); 286 Point aPointLB = mpLBTransType->GetPosPixel(); 287 long aPosY = aPointLB.getY(); 288 289 Point aPointMetric = mpMTRTransparent->GetPosPixel(); 290 Point aPointTB = mpMTRTransparent->GetPosPixel(); 291 long aHeightMetric = mpMTRTransparent->GetSizePixel().getHeight(); 292 long aHeightTool = mpBTNGradient->GetSizePixel().getHeight(); 293 aPointMetric.setY(aPosY+aHeightLBTrans/2-aHeightMetric/2); 294 aPointTB.setY(aPosY+aHeightLBTrans/2-aHeightTool/2); 295 aPointTB.setX(aPointTB.getX()+3); 296 mpMTRTransparent->SetPosPixel(aPointMetric); 297 mpBTNGradient->SetPosPixel(aPointTB); 298 299 mpLbFillType->SetAccessibleRelationLabeledBy(mpColorTextFT.get()); 300 mpLbFillAttr->SetAccessibleRelationLabeledBy(mpLbFillAttr.get()); 301 mpToolBoxColor->SetAccessibleRelationLabeledBy(mpToolBoxColor.get()); 302 mpLBTransType->SetAccessibleRelationLabeledBy(mpTrspTextFT.get()); 303 mpMTRTransparent->SetAccessibleRelationLabeledBy(mpMTRTransparent.get()); 304 mpBTNGradient->SetAccessibleRelationLabeledBy(mpBTNGradient.get()); 305 306 SetupIcons(); 307 } 308 309 310 311 IMPL_LINK( AreaPropertyPanel, SelectFillTypeHdl, ListBox *, pToolBox ) 312 { 313 const XFillStyle eXFS = (XFillStyle)mpLbFillType->GetSelectEntryPos(); 314 315 if((XFillStyle)meLastXFS != eXFS) 316 { 317 mpLbFillAttr->Clear(); 318 SfxObjectShell* pSh = SfxObjectShell::Current(); 319 const XFillStyleItem aXFillStyleItem(eXFS); 320 321 // #122676# Do no longer trigger two Execute calls, one for SID_ATTR_FILL_STYLE 322 // and one for setting the fill attribute itself, but add two SfxPoolItems to the 323 // call to get just one action at the SdrObject and to create only one Undo action, too. 324 // Checked that this works in all apps. 325 switch( eXFS ) 326 { 327 case XFILL_NONE: 328 { 329 mpLbFillAttr->Show(); 330 mpToolBoxColor->Hide(); 331 mpLbFillType->Selected(); 332 mpLbFillAttr->Disable(); 333 334 // #122676# need to call a single SID_ATTR_FILL_STYLE change 335 GetBindings()->GetDispatcher()->Execute( 336 SID_ATTR_FILL_STYLE, SFX_CALLMODE_RECORD, &aXFillStyleItem, 0L); 337 break; 338 } 339 case XFILL_SOLID: 340 { 341 mpLbFillAttr->Hide(); 342 mpToolBoxColor->Show(); 343 const String aTmpStr; 344 const Color aColor = maLastColor; 345 const XFillColorItem aXFillColorItem( aTmpStr, aColor ); 346 347 // #122676# change FillStyle and Color in one call 348 GetBindings()->GetDispatcher()->Execute( 349 SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, &aXFillStyleItem, 0L); 350 break; 351 } 352 case XFILL_GRADIENT: 353 { 354 mpLbFillAttr->Show(); 355 mpToolBoxColor->Hide(); 356 357 if(pSh && pSh->GetItem(SID_GRADIENT_LIST)) 358 { 359 if(!mpLbFillAttr->GetEntryCount()) 360 { 361 const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST))); 362 mpLbFillAttr->Enable(); 363 mpLbFillAttr->Clear(); 364 mpLbFillAttr->Fill(aItem.GetGradientList()); 365 } 366 367 mpLbFillAttr->AdaptDropDownLineCountToMaximum(); 368 369 if(LISTBOX_ENTRY_NOTFOUND != mnLastPosGradient) 370 { 371 const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST))); 372 373 if(mnLastPosGradient < aItem.GetGradientList()->Count()) 374 { 375 const XGradient aGradient = aItem.GetGradientList()->GetGradient(mnLastPosGradient)->GetGradient(); 376 const XFillGradientItem aXFillGradientItem(mpLbFillAttr->GetEntry(mnLastPosGradient), aGradient); 377 378 // #122676# change FillStyle and Gradient in one call 379 GetBindings()->GetDispatcher()->Execute( 380 SID_ATTR_FILL_GRADIENT, SFX_CALLMODE_RECORD, &aXFillGradientItem, &aXFillStyleItem, 0L); 381 mpLbFillAttr->SelectEntryPos(mnLastPosGradient); 382 } 383 } 384 } 385 else 386 { 387 mpLbFillAttr->Disable(); 388 } 389 break; 390 } 391 case XFILL_HATCH: 392 { 393 mpLbFillAttr->Show(); 394 mpToolBoxColor->Hide(); 395 396 if(pSh && pSh->GetItem(SID_HATCH_LIST)) 397 { 398 if(!mpLbFillAttr->GetEntryCount()) 399 { 400 const SvxHatchListItem aItem( *(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST))); 401 mpLbFillAttr->Enable(); 402 mpLbFillAttr->Clear(); 403 mpLbFillAttr->Fill(aItem.GetHatchList()); 404 } 405 406 mpLbFillAttr->AdaptDropDownLineCountToMaximum(); 407 408 if(LISTBOX_ENTRY_NOTFOUND != mnLastPosHatch) 409 { 410 const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST))); 411 412 if(mnLastPosHatch < aItem.GetHatchList()->Count()) 413 { 414 const XHatch aHatch = aItem.GetHatchList()->GetHatch(mnLastPosHatch)->GetHatch(); 415 const XFillHatchItem aXFillHatchItem(mpLbFillAttr->GetSelectEntry(), aHatch); 416 417 // #122676# change FillStyle and Hatch in one call 418 GetBindings()->GetDispatcher()->Execute( 419 SID_ATTR_FILL_HATCH, SFX_CALLMODE_RECORD, &aXFillHatchItem, &aXFillStyleItem, 0L); 420 mpLbFillAttr->SelectEntryPos(mnLastPosHatch); 421 } 422 } 423 } 424 else 425 { 426 mpLbFillAttr->Disable(); 427 } 428 break; 429 } 430 case XFILL_BITMAP: 431 { 432 mpLbFillAttr->Show(); 433 mpToolBoxColor->Hide(); 434 435 if(pSh && pSh->GetItem(SID_BITMAP_LIST)) 436 { 437 if(!mpLbFillAttr->GetEntryCount()) 438 { 439 const SvxBitmapListItem aItem( *(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST))); 440 mpLbFillAttr->Enable(); 441 mpLbFillAttr->Clear(); 442 mpLbFillAttr->Fill(aItem.GetBitmapList()); 443 } 444 445 mpLbFillAttr->AdaptDropDownLineCountToMaximum(); 446 447 if(LISTBOX_ENTRY_NOTFOUND != mnLastPosBitmap) 448 { 449 const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST))); 450 451 if(mnLastPosBitmap < aItem.GetBitmapList()->Count()) 452 { 453 const XBitmapEntry* pXBitmapEntry = aItem.GetBitmapList()->GetBitmap(mnLastPosBitmap); 454 const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectEntry(), pXBitmapEntry->GetGraphicObject()); 455 456 // #122676# change FillStyle and Bitmap in one call 457 GetBindings()->GetDispatcher()->Execute( 458 SID_ATTR_FILL_BITMAP, SFX_CALLMODE_RECORD, &aXFillBitmapItem, &aXFillStyleItem, 0L); 459 mpLbFillAttr->SelectEntryPos(mnLastPosBitmap); 460 } 461 } 462 } 463 else 464 { 465 mpLbFillAttr->Disable(); 466 } 467 break; 468 } 469 } 470 471 meLastXFS = (sal_uInt16)eXFS; 472 473 if(XFILL_NONE != eXFS) 474 { 475 if(pToolBox) 476 { 477 mpLbFillType->Selected(); 478 } 479 } 480 481 maLayouter.Layout(); 482 } 483 484 return 0; 485 } 486 487 488 489 IMPL_LINK( AreaPropertyPanel, SelectFillAttrHdl, ListBox*, pToolBox ) 490 { 491 const XFillStyle eXFS = (XFillStyle)mpLbFillType->GetSelectEntryPos(); 492 const XFillStyleItem aXFillStyleItem(eXFS); 493 SfxObjectShell* pSh = SfxObjectShell::Current(); 494 495 if(pToolBox) 496 { 497 // #122676# dependent from bFillStyleChange, do execute a single or two 498 // changes in one Execute call 499 const bool bFillStyleChange((XFillStyle) meLastXFS != eXFS); 500 501 switch(eXFS) 502 { 503 case XFILL_SOLID: 504 { 505 if(bFillStyleChange) 506 { 507 // #122676# Single FillStyle change call needed here 508 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_STYLE, SFX_CALLMODE_RECORD, &aXFillStyleItem, 0L); 509 } 510 break; 511 } 512 case XFILL_GRADIENT: 513 { 514 sal_uInt16 nPos = mpLbFillAttr->GetSelectEntryPos(); 515 516 if(LISTBOX_ENTRY_NOTFOUND == nPos) 517 { 518 nPos = mnLastPosGradient; 519 } 520 521 if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_GRADIENT_LIST)) 522 { 523 const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST))); 524 525 if(nPos < aItem.GetGradientList()->Count()) 526 { 527 const XGradient aGradient = aItem.GetGradientList()->GetGradient(nPos)->GetGradient(); 528 const XFillGradientItem aXFillGradientItem(mpLbFillAttr->GetSelectEntry(), aGradient); 529 530 // #122676# Change FillStyle and Gradient in one call 531 GetBindings()->GetDispatcher()->Execute( 532 SID_ATTR_FILL_GRADIENT, SFX_CALLMODE_RECORD, &aXFillGradientItem, 533 bFillStyleChange ? &aXFillStyleItem : 0L, 0L); 534 } 535 } 536 537 if(LISTBOX_ENTRY_NOTFOUND != nPos) 538 { 539 mnLastPosGradient = nPos; 540 } 541 break; 542 } 543 case XFILL_HATCH: 544 { 545 sal_uInt16 nPos = mpLbFillAttr->GetSelectEntryPos(); 546 547 if(LISTBOX_ENTRY_NOTFOUND == nPos) 548 { 549 nPos = mnLastPosHatch; 550 } 551 552 if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_HATCH_LIST)) 553 { 554 const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST))); 555 556 if(nPos < aItem.GetHatchList()->Count()) 557 { 558 const XHatch aHatch = aItem.GetHatchList()->GetHatch(nPos)->GetHatch(); 559 const XFillHatchItem aXFillHatchItem( mpLbFillAttr->GetSelectEntry(), aHatch); 560 561 // #122676# Change FillStyle and Hatch in one call 562 GetBindings()->GetDispatcher()->Execute( 563 SID_ATTR_FILL_HATCH, SFX_CALLMODE_RECORD, &aXFillHatchItem, 564 bFillStyleChange ? &aXFillStyleItem : 0L, 0L); 565 } 566 } 567 568 if(LISTBOX_ENTRY_NOTFOUND != nPos) 569 { 570 mnLastPosHatch = nPos; 571 } 572 break; 573 } 574 case XFILL_BITMAP: 575 { 576 sal_uInt16 nPos = mpLbFillAttr->GetSelectEntryPos(); 577 578 if(LISTBOX_ENTRY_NOTFOUND == nPos) 579 { 580 nPos = mnLastPosBitmap; 581 } 582 583 if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_BITMAP_LIST)) 584 { 585 const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST))); 586 587 if(nPos < aItem.GetBitmapList()->Count()) 588 { 589 const XBitmapEntry* pXBitmapEntry = aItem.GetBitmapList()->GetBitmap(nPos); 590 const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectEntry(), pXBitmapEntry->GetGraphicObject()); 591 592 // #122676# Change FillStyle and Bitmap in one call 593 GetBindings()->GetDispatcher()->Execute( 594 SID_ATTR_FILL_BITMAP, SFX_CALLMODE_RECORD, &aXFillBitmapItem, 595 bFillStyleChange ? &aXFillStyleItem : 0L, 0L); 596 } 597 } 598 599 if(LISTBOX_ENTRY_NOTFOUND != nPos) 600 { 601 mnLastPosBitmap = nPos; 602 } 603 break; 604 } 605 default: break; 606 } 607 } 608 609 return 0; 610 } 611 612 613 IMPL_LINK(AreaPropertyPanel, ToolBoxColorDropHdl, ToolBox*, pToolBox) 614 { 615 const sal_uInt16 nId = pToolBox->GetCurItemId(); 616 617 if(TBI_COLOR == nId) 618 { 619 maColorPopup.Show(*pToolBox); 620 621 if (mpColorItem) 622 { 623 maColorPopup.SetCurrentColor(mpColorItem->GetColorValue(), mbColorAvail); 624 } 625 else 626 { 627 maColorPopup.SetCurrentColor(COL_WHITE, false); 628 } 629 } 630 631 return 0; 632 } 633 634 635 636 void AreaPropertyPanel::SetColor ( 637 const String& rsColorName, 638 const Color aColor) 639 { 640 const XFillColorItem aXFillColorItem(rsColorName, aColor); 641 mpBindings->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, 0L); 642 maLastColor = aColor; 643 } 644 645 646 647 648 PopupControl* AreaPropertyPanel::CreateTransparencyGradientControl (PopupContainer* pParent) 649 { 650 return new AreaTransparencyGradientControl(pParent, *this); 651 } 652 653 654 655 656 PopupControl* AreaPropertyPanel::CreateColorPopupControl (PopupContainer* pParent) 657 { 658 return new ColorControl( 659 pParent, 660 mpBindings, 661 SVX_RES(RID_POPUPPANEL_AERAPAGE_COLOR), 662 SVX_RES(VS_COLOR), 663 ::boost::bind(&AreaPropertyPanel::GetLastColor, this), 664 ::boost::bind(&AreaPropertyPanel::SetColor, this, _1,_2), 665 pParent, 666 0); 667 } 668 669 670 671 672 void AreaPropertyPanel::SetupIcons(void) 673 { 674 if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) 675 { 676 // todo 677 } 678 else 679 { 680 // todo 681 } 682 } 683 684 685 686 AreaPropertyPanel* AreaPropertyPanel::Create ( 687 Window* pParent, 688 const cssu::Reference<css::frame::XFrame>& rxFrame, 689 SfxBindings* pBindings) 690 { 691 if (pParent == NULL) 692 throw lang::IllegalArgumentException(A2S("no parent Window given to AreaPropertyPanel::Create"), NULL, 0); 693 if ( ! rxFrame.is()) 694 throw lang::IllegalArgumentException(A2S("no XFrame given to AreaPropertyPanel::Create"), NULL, 1); 695 if (pBindings == NULL) 696 throw lang::IllegalArgumentException(A2S("no SfxBindings given to AreaPropertyPanel::Create"), NULL, 2); 697 698 return new AreaPropertyPanel( 699 pParent, 700 rxFrame, 701 pBindings); 702 } 703 704 705 706 void AreaPropertyPanel::DataChanged( 707 const DataChangedEvent& rEvent) 708 { 709 (void)rEvent; 710 711 SetupIcons(); 712 } 713 714 715 716 void AreaPropertyPanel::ImpUpdateTransparencies() 717 { 718 if(mpTransparanceItem.get() && mpFloatTransparenceItem.get()) 719 { 720 bool bZeroValue(false); 721 722 if(mpTransparanceItem.get()) 723 { 724 const sal_uInt16 nValue(mpTransparanceItem->GetValue()); 725 726 if(!nValue) 727 { 728 bZeroValue = true; 729 } 730 else if(nValue <= 100) 731 { 732 mpLBTransType->Enable(); 733 mpTrspTextFT->Enable(); 734 mpLBTransType->SelectEntryPos(1); 735 mpBTNGradient->Hide(); 736 mpMTRTransparent->Show(); 737 mpMTRTransparent->Enable(); 738 mpMTRTransparent->SetValue(nValue); 739 } 740 741 if(!bZeroValue) 742 { 743 maTrGrPopup.Hide(); 744 } 745 } 746 747 if(bZeroValue && mpFloatTransparenceItem.get()) 748 { 749 if(mpFloatTransparenceItem->IsEnabled()) 750 { 751 const XGradient& rGradient = mpFloatTransparenceItem->GetGradientValue(); 752 const bool bHighContrast(GetSettings().GetStyleSettings().GetHighContrastMode()); 753 sal_uInt16 nEntryPos(0); 754 Image* pImage = 0; 755 756 mpLBTransType->Enable(); 757 mpTrspTextFT->Enable(); 758 mpMTRTransparent->Hide(); 759 mpBTNGradient->Enable(); 760 mpBTNGradient->Show(); 761 762 switch(rGradient.GetGradientStyle()) 763 { 764 case XGRAD_LINEAR: 765 { 766 nEntryPos = 2; 767 pImage = bHighContrast ? &maImgLinearH : &maImgLinear; 768 break; 769 } 770 case XGRAD_AXIAL: 771 { 772 nEntryPos = 3; 773 pImage = bHighContrast ? &maImgAxialH : &maImgAxial; 774 break; 775 } 776 case XGRAD_RADIAL: 777 { 778 nEntryPos = 4; 779 pImage = bHighContrast ? &maImgRadialH : &maImgRadial; 780 break; 781 } 782 case XGRAD_ELLIPTICAL: 783 { 784 nEntryPos = 5; 785 pImage = bHighContrast ? &maImgElliH : &maImgElli; 786 break; 787 } 788 case XGRAD_SQUARE: 789 { 790 nEntryPos = 6; 791 pImage = bHighContrast ? &maImgQuadH : &maImgQuad; 792 break; 793 } 794 case XGRAD_RECT: 795 { 796 nEntryPos = 7; 797 pImage = bHighContrast ? &maImgSquareH : &maImgSquare; 798 break; 799 } 800 } 801 802 mpLBTransType->SelectEntryPos(nEntryPos); 803 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT, *pImage); 804 bZeroValue = false; 805 } 806 else 807 { 808 bZeroValue = true; 809 } 810 } 811 812 if(bZeroValue) 813 { 814 mpLBTransType->Enable(); 815 mpTrspTextFT->Enable(); 816 mpLBTransType->SelectEntryPos(0); 817 mpBTNGradient->Hide(); 818 mpMTRTransparent->Enable(); 819 mpMTRTransparent->Show(); 820 mpMTRTransparent->SetValue(0); 821 } 822 } 823 else 824 { 825 // no transparency at all 826 mpLBTransType->SetNoSelection(); 827 mpLBTransType->Disable(); 828 mpTrspTextFT->Disable(); 829 mpMTRTransparent->Disable(); 830 mpMTRTransparent->Show(); 831 mpBTNGradient->Disable(); 832 mpBTNGradient->Hide(); 833 } 834 } 835 836 837 838 void AreaPropertyPanel::NotifyItemUpdate( 839 sal_uInt16 nSID, 840 SfxItemState eState, 841 const SfxPoolItem* pState, 842 const bool bIsEnabled) 843 { 844 (void)bIsEnabled; 845 const bool bDisabled(SFX_ITEM_DISABLED == eState); 846 847 switch(nSID) 848 { 849 case SID_ATTR_FILL_TRANSPARENCE: 850 case SID_ATTR_FILL_FLOATTRANSPARENCE: 851 { 852 bool bFillTransparenceChanged(false); 853 854 if(SID_ATTR_FILL_TRANSPARENCE == nSID) 855 { 856 bFillTransparenceChanged = true; 857 858 if(eState >= SFX_ITEM_AVAILABLE) 859 { 860 const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState); 861 862 if(pItem && (!mpTransparanceItem || *pItem != *mpTransparanceItem)) 863 { 864 mpTransparanceItem.reset((SfxUInt16Item*)pItem->Clone()); 865 } 866 else 867 { 868 mpTransparanceItem.reset(); 869 } 870 } 871 else 872 { 873 mpTransparanceItem.reset(); 874 } 875 } 876 else // if(SID_ATTR_FILL_FLOATTRANSPARENCE == nSID) 877 { 878 bFillTransparenceChanged = true; 879 880 if(eState >= SFX_ITEM_AVAILABLE) 881 { 882 const XFillFloatTransparenceItem* pItem = dynamic_cast< const XFillFloatTransparenceItem* >(pState); 883 884 if(pItem && (!mpFloatTransparenceItem || *pItem != *mpFloatTransparenceItem)) 885 { 886 mpFloatTransparenceItem.reset((XFillFloatTransparenceItem*)pItem->Clone()); 887 } 888 else 889 { 890 mpFloatTransparenceItem.reset(); 891 } 892 } 893 else 894 { 895 mpFloatTransparenceItem.reset(); 896 } 897 } 898 899 if(bFillTransparenceChanged) 900 { 901 // update transparency settings dependent of mpTransparanceItem and mpFloatTransparenceItem 902 ImpUpdateTransparencies(); 903 } 904 break; 905 } 906 case SID_ATTR_FILL_STYLE: 907 { 908 if(bDisabled) 909 { 910 mpLbFillType->Disable(); 911 mpColorTextFT->Disable(); 912 mpLbFillType->SetNoSelection(); 913 mpLbFillAttr->Show(); 914 mpLbFillAttr->Disable(); 915 mpLbFillAttr->SetNoSelection(); 916 mpToolBoxColor->Hide(); 917 meLastXFS = -1; 918 mpStyleItem.reset(); 919 } 920 921 if(eState >= SFX_ITEM_AVAILABLE) 922 { 923 const XFillStyleItem* pItem = dynamic_cast< const XFillStyleItem* >(pState); 924 925 if(pItem) 926 { 927 mpStyleItem.reset(dynamic_cast< XFillStyleItem* >(pItem->Clone())); 928 mpLbFillType->Enable(); 929 mpColorTextFT->Enable(); 930 XFillStyle eXFS = (XFillStyle)mpStyleItem->GetValue(); 931 meLastXFS = eXFS; 932 mpLbFillType->SelectEntryPos(sal::static_int_cast< sal_uInt16 >(eXFS)); 933 934 if(XFILL_NONE == eXFS) 935 { 936 mpLbFillAttr->SetNoSelection(); 937 mpLbFillAttr->Disable(); 938 } 939 940 Update(); 941 break; 942 } 943 } 944 945 mpLbFillType->SetNoSelection(); 946 mpLbFillAttr->Show(); 947 mpLbFillAttr->Disable(); 948 mpLbFillAttr->SetNoSelection(); 949 mpToolBoxColor->Hide(); 950 meLastXFS = -1; 951 mpStyleItem.reset(); 952 break; 953 } 954 case SID_ATTR_FILL_COLOR: 955 { 956 if(SFX_ITEM_AVAILABLE == eState) 957 { 958 mpColorItem.reset(pState ? (XFillColorItem*)pState->Clone() : 0); 959 } 960 961 if(mpStyleItem && XFILL_SOLID == (XFillStyle)mpStyleItem->GetValue()) 962 { 963 mpLbFillAttr->Hide(); 964 mpToolBoxColor->Show(); 965 966 if(SFX_ITEM_AVAILABLE == eState) 967 { 968 mpToolBoxColor->Enable(); 969 mbColorAvail = true; 970 //maLastColor = mpColorItem->GetColorValue(); 971 Update(); 972 } 973 else if(SFX_ITEM_DISABLED == eState) 974 { 975 mpToolBoxColor->Disable(); 976 mbColorAvail = false; 977 mpColorUpdater->Update(COL_WHITE); 978 } 979 else 980 { 981 mbColorAvail = false; 982 mpColorUpdater->Update(COL_WHITE); 983 } 984 } 985 break; 986 } 987 case SID_ATTR_FILL_GRADIENT: 988 { 989 if(SFX_ITEM_AVAILABLE == eState) 990 { 991 mpFillGradientItem.reset(pState ? (XFillGradientItem*)pState->Clone() : 0); 992 } 993 994 if(mpStyleItem && XFILL_GRADIENT == (XFillStyle)mpStyleItem->GetValue()) 995 { 996 mpLbFillAttr->Show(); 997 mpToolBoxColor->Hide(); 998 999 if(SFX_ITEM_AVAILABLE == eState) 1000 { 1001 mpLbFillAttr->Enable(); 1002 Update(); 1003 } 1004 else if(SFX_ITEM_DISABLED == eState ) 1005 { 1006 mpLbFillAttr->Disable(); 1007 mpLbFillAttr->SetNoSelection(); 1008 } 1009 else 1010 { 1011 mpLbFillAttr->SetNoSelection(); 1012 } 1013 } 1014 break; 1015 } 1016 case SID_ATTR_FILL_HATCH: 1017 { 1018 if(SFX_ITEM_AVAILABLE == eState) 1019 { 1020 mpHatchItem.reset(pState ? (XFillHatchItem*)pState->Clone() : 0); 1021 } 1022 1023 if(mpStyleItem && XFILL_HATCH == (XFillStyle)mpStyleItem->GetValue()) 1024 { 1025 mpLbFillAttr->Show(); 1026 mpToolBoxColor->Hide(); 1027 1028 if(SFX_ITEM_AVAILABLE == eState) 1029 { 1030 mpLbFillAttr->Enable(); 1031 Update(); 1032 } 1033 else if(SFX_ITEM_DISABLED == eState ) 1034 { 1035 mpLbFillAttr->Disable(); 1036 mpLbFillAttr->SetNoSelection(); 1037 } 1038 else 1039 { 1040 mpLbFillAttr->SetNoSelection(); 1041 } 1042 } 1043 break; 1044 } 1045 case SID_ATTR_FILL_BITMAP: 1046 { 1047 if(SFX_ITEM_AVAILABLE == eState) 1048 { 1049 mpBitmapItem.reset(pState ? (XFillBitmapItem*)pState->Clone() : 0); 1050 } 1051 1052 if(mpStyleItem && XFILL_BITMAP == (XFillStyle)mpStyleItem->GetValue()) 1053 { 1054 mpLbFillAttr->Show(); 1055 mpToolBoxColor->Hide(); 1056 1057 if(SFX_ITEM_AVAILABLE == eState) 1058 { 1059 mpLbFillAttr->Enable(); 1060 Update(); 1061 } 1062 else if(SFX_ITEM_DISABLED == eState ) 1063 { 1064 mpLbFillAttr->Disable(); 1065 mpLbFillAttr->SetNoSelection(); 1066 } 1067 else 1068 { 1069 mpLbFillAttr->SetNoSelection(); 1070 } 1071 } 1072 break; 1073 } 1074 case SID_COLOR_TABLE: 1075 { 1076 if(SFX_ITEM_AVAILABLE == eState) 1077 { 1078 if(mpStyleItem && XFILL_SOLID == (XFillStyle)mpStyleItem->GetValue()) 1079 { 1080 if(mpColorItem) 1081 { 1082 const Color aColor = mpColorItem->GetColorValue(); 1083 const SfxObjectShell* pSh = SfxObjectShell::Current(); 1084 const SvxColorTableItem aItem(*(const SvxColorTableItem*)(pSh->GetItem(SID_COLOR_TABLE))); 1085 1086 mpLbFillAttr->Clear(); 1087 mpLbFillAttr->Enable(); 1088 mpLbFillAttr->Fill(aItem.GetColorTable()); 1089 mpLbFillAttr->SelectEntry(aColor); 1090 } 1091 else 1092 { 1093 mpLbFillAttr->SetNoSelection(); 1094 } 1095 } 1096 } 1097 break; 1098 } 1099 case SID_GRADIENT_LIST: 1100 { 1101 if(SFX_ITEM_AVAILABLE == eState) 1102 { 1103 if(mpStyleItem && XFILL_GRADIENT == (XFillStyle)mpStyleItem->GetValue()) 1104 { 1105 if(mpFillGradientItem) 1106 { 1107 const String aString( mpFillGradientItem->GetName() ); 1108 const SfxObjectShell* pSh = SfxObjectShell::Current(); 1109 const SvxGradientListItem aItem( *(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST))); 1110 1111 mpLbFillAttr->Clear(); 1112 mpLbFillAttr->Enable(); 1113 mpLbFillAttr->Fill(aItem.GetGradientList()); 1114 mpLbFillAttr->SelectEntry(aString); 1115 } 1116 else 1117 { 1118 mpLbFillAttr->SetNoSelection(); 1119 } 1120 } 1121 } 1122 break; 1123 } 1124 case SID_HATCH_LIST: 1125 { 1126 if(SFX_ITEM_AVAILABLE == eState) 1127 { 1128 if(mpStyleItem && XFILL_HATCH == (XFillStyle)mpStyleItem->GetValue()) 1129 { 1130 if(mpHatchItem) 1131 { 1132 const String aString( mpHatchItem->GetName() ); 1133 const SfxObjectShell* pSh = SfxObjectShell::Current(); 1134 const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST))); 1135 1136 mpLbFillAttr->Clear(); 1137 mpLbFillAttr->Enable(); 1138 mpLbFillAttr->Fill(aItem.GetHatchList()); 1139 mpLbFillAttr->SelectEntry(aString); 1140 } 1141 else 1142 { 1143 mpLbFillAttr->SetNoSelection(); 1144 } 1145 } 1146 } 1147 break; 1148 } 1149 case SID_BITMAP_LIST: 1150 { 1151 if(SFX_ITEM_AVAILABLE == eState) 1152 { 1153 if(mpStyleItem && XFILL_BITMAP == (XFillStyle)mpStyleItem->GetValue()) 1154 { 1155 if(mpBitmapItem) 1156 { 1157 const String aString( mpBitmapItem->GetName() ); 1158 const SfxObjectShell* pSh = SfxObjectShell::Current(); 1159 const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST))); 1160 1161 mpLbFillAttr->Clear(); 1162 mpLbFillAttr->Enable(); 1163 mpLbFillAttr->Fill(aItem.GetBitmapList()); 1164 mpLbFillAttr->SelectEntry(aString); 1165 } 1166 else 1167 { 1168 mpLbFillAttr->SetNoSelection(); 1169 } 1170 } 1171 } 1172 break; 1173 } 1174 } 1175 1176 maLayouter.Layout(); 1177 } 1178 1179 1180 1181 SfxBindings* AreaPropertyPanel::GetBindings() 1182 { 1183 return mpBindings; 1184 } 1185 1186 1187 1188 void AreaPropertyPanel::Update() 1189 { 1190 if(mpStyleItem) 1191 { 1192 const XFillStyle eXFS = (XFillStyle)mpStyleItem->GetValue(); 1193 SfxObjectShell* pSh = SfxObjectShell::Current(); 1194 1195 switch( eXFS ) 1196 { 1197 case XFILL_NONE: 1198 { 1199 mpLbFillAttr->Show(); 1200 mpToolBoxColor->Hide(); 1201 break; 1202 } 1203 case XFILL_SOLID: 1204 { 1205 if(mpColorItem) 1206 { 1207 mpLbFillAttr->Hide(); 1208 mpToolBoxColor->Show(); 1209 mpColorUpdater->Update(mpColorItem->GetColorValue()); 1210 } 1211 else 1212 { 1213 mpColorUpdater->Update(COL_WHITE); 1214 } 1215 break; 1216 } 1217 case XFILL_GRADIENT: 1218 { 1219 mpLbFillAttr->Show(); 1220 mpToolBoxColor->Hide(); 1221 1222 if(pSh && pSh->GetItem(SID_GRADIENT_LIST)) 1223 { 1224 const SvxGradientListItem aItem(*(const SvxGradientListItem*)(pSh->GetItem(SID_GRADIENT_LIST))); 1225 mpLbFillAttr->Enable(); 1226 mpLbFillAttr->Clear(); 1227 mpLbFillAttr->Fill(aItem.GetGradientList()); 1228 1229 if(mpFillGradientItem) 1230 { 1231 const String aString(mpFillGradientItem->GetName()); 1232 1233 mpLbFillAttr->SelectEntry(aString); 1234 } 1235 else 1236 { 1237 mpLbFillAttr->SetNoSelection(); 1238 } 1239 } 1240 else 1241 { 1242 mpLbFillAttr->SetNoSelection(); 1243 } 1244 break; 1245 } 1246 case XFILL_HATCH: 1247 { 1248 mpLbFillAttr->Show(); 1249 mpToolBoxColor->Hide(); 1250 1251 if(pSh && pSh->GetItem(SID_HATCH_LIST)) 1252 { 1253 const SvxHatchListItem aItem(*(const SvxHatchListItem*)(pSh->GetItem(SID_HATCH_LIST))); 1254 mpLbFillAttr->Enable(); 1255 mpLbFillAttr->Clear(); 1256 mpLbFillAttr->Fill(aItem.GetHatchList()); 1257 1258 if(mpHatchItem) 1259 { 1260 const String aString(mpHatchItem->GetName()); 1261 1262 mpLbFillAttr->SelectEntry( aString ); 1263 } 1264 else 1265 { 1266 mpLbFillAttr->SetNoSelection(); 1267 } 1268 } 1269 else 1270 { 1271 mpLbFillAttr->SetNoSelection(); 1272 } 1273 break; 1274 } 1275 case XFILL_BITMAP: 1276 { 1277 mpLbFillAttr->Show(); 1278 mpToolBoxColor->Hide(); 1279 1280 if(pSh && pSh->GetItem(SID_BITMAP_LIST)) 1281 { 1282 const SvxBitmapListItem aItem(*(const SvxBitmapListItem*)(pSh->GetItem(SID_BITMAP_LIST))); 1283 mpLbFillAttr->Enable(); 1284 mpLbFillAttr->Clear(); 1285 mpLbFillAttr->Fill(aItem.GetBitmapList()); 1286 1287 if(mpBitmapItem) 1288 { 1289 const String aString(mpBitmapItem->GetName()); 1290 1291 mpLbFillAttr->SelectEntry(aString); 1292 } 1293 else 1294 { 1295 mpLbFillAttr->SetNoSelection(); 1296 } 1297 } 1298 else 1299 { 1300 mpLbFillAttr->SetNoSelection(); 1301 } 1302 break; 1303 } 1304 default: 1305 DBG_ERROR( "Non supported FillType (!)" ); 1306 break; 1307 } 1308 } 1309 } 1310 1311 1312 1313 IMPL_LINK( AreaPropertyPanel, ImplPopupModeEndHdl, FloatingWindow*, EMPTYARG ) 1314 { 1315 return 0; 1316 } 1317 1318 1319 1320 IMPL_LINK( AreaPropertyPanel, ClickTrGrHdl_Impl, ToolBox*, pToolBox ) 1321 { 1322 maTrGrPopup.Rearrange(mpFloatTransparenceItem.get()); 1323 OSL_ASSERT(pToolBox->GetCurItemId() == TBI_BTX_GRADIENT); 1324 maTrGrPopup.Show(*pToolBox); 1325 1326 return (0L); 1327 } 1328 1329 1330 1331 IMPL_LINK(AreaPropertyPanel, ChangeTrgrTypeHdl_Impl, void *, EMPTYARG) 1332 { 1333 sal_uInt16 nSelectType = mpLBTransType->GetSelectEntryPos(); 1334 bool bGradient = false; 1335 sal_uInt16 nTrans = 0; 1336 1337 if(!nSelectType) 1338 { 1339 mpBTNGradient->Hide(); 1340 mpMTRTransparent->Show(); 1341 mpMTRTransparent->Enable(); 1342 mpMTRTransparent->SetValue(0); 1343 } 1344 else if(1 == nSelectType) 1345 { 1346 mpBTNGradient->Hide(); 1347 mpMTRTransparent->Show(); 1348 nTrans = mnLastTransSolid; 1349 mpMTRTransparent->SetValue(nTrans); 1350 mpLBTransType->SelectEntryPos(1); 1351 mpMTRTransparent->Enable(); 1352 } 1353 else 1354 { 1355 mpBTNGradient->Show(); 1356 1357 switch (nSelectType) 1358 { 1359 case 2: 1360 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgLinearH : maImgLinear); 1361 break; 1362 case 3: 1363 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgAxialH : maImgAxial); 1364 break; 1365 case 4: 1366 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgRadialH : maImgRadial); 1367 break; 1368 case 5: 1369 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgElliH : maImgElli ); 1370 break; 1371 case 6: 1372 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgQuadH : maImgQuad ); 1373 break; 1374 case 7: 1375 mpBTNGradient->SetItemImage(TBI_BTX_GRADIENT,GetSettings().GetStyleSettings().GetHighContrastMode()? maImgSquareH : maImgSquare); 1376 break; 1377 } 1378 1379 mpMTRTransparent->Hide(); 1380 mpBTNGradient->Enable(); 1381 bGradient = true; 1382 } 1383 1384 const XFillTransparenceItem aLinearItem(nTrans); 1385 GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE, SFX_CALLMODE_RECORD, &aLinearItem, 0L ); 1386 1387 if(nSelectType > 1) 1388 { 1389 nSelectType -= 2; 1390 } 1391 1392 XGradient aTmpGradient; 1393 1394 switch(nSelectType) 1395 { 1396 case XGRAD_LINEAR: 1397 aTmpGradient = maGradientLinear; 1398 break; 1399 case XGRAD_AXIAL: 1400 aTmpGradient = maGradientAxial; 1401 break; 1402 case XGRAD_RADIAL: 1403 aTmpGradient = maGradientRadial; 1404 break; 1405 case XGRAD_ELLIPTICAL: 1406 aTmpGradient = maGradientElliptical; 1407 break; 1408 case XGRAD_SQUARE: 1409 aTmpGradient = maGradientSquare; 1410 break; 1411 case XGRAD_RECT: 1412 aTmpGradient = maGradientRect; 1413 break; 1414 } 1415 1416 SfxItemPool* pPool = 0; 1417 const XFillFloatTransparenceItem aGradientItem(pPool, aTmpGradient, sal_Bool(bGradient)); 1418 GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_FLOATTRANSPARENCE, SFX_CALLMODE_RECORD, &aGradientItem, 0L ); 1419 1420 return( 0L ); 1421 } 1422 1423 1424 1425 IMPL_LINK(AreaPropertyPanel, ModifyTransparentHdl_Impl, void*, EMPTYARG) 1426 { 1427 const sal_uInt16 nTrans = (sal_uInt16)mpMTRTransparent->GetValue(); 1428 mnLastTransSolid = nTrans; 1429 const sal_uInt16 nSelectType = mpLBTransType->GetSelectEntryPos(); 1430 1431 if(nTrans && !nSelectType) 1432 { 1433 mpLBTransType->SelectEntryPos(1); 1434 } 1435 1436 const XFillTransparenceItem aLinearItem(nTrans); 1437 GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE, SFX_CALLMODE_RECORD, &aLinearItem, 0L ); 1438 1439 return 0L; 1440 } 1441 1442 1443 Color AreaPropertyPanel::GetLastColor (void) const 1444 { 1445 return maLastColor; 1446 } 1447 1448 1449 1450 1451 XGradient AreaPropertyPanel::GetGradient (const XGradientStyle eStyle) const 1452 { 1453 switch (eStyle) 1454 { 1455 default: 1456 case XGRAD_LINEAR: 1457 return maGradientLinear; 1458 case XGRAD_AXIAL: 1459 return maGradientAxial; 1460 case XGRAD_RADIAL: 1461 return maGradientRadial; 1462 case XGRAD_ELLIPTICAL: 1463 return maGradientElliptical; 1464 case XGRAD_SQUARE: 1465 return maGradientSquare; 1466 case XGRAD_RECT: 1467 return maGradientRect; 1468 } 1469 } 1470 1471 1472 1473 1474 void AreaPropertyPanel::SetGradient (const XGradient& rGradient) 1475 { 1476 switch (rGradient.GetGradientStyle()) 1477 { 1478 case XGRAD_LINEAR: 1479 maGradientLinear = rGradient; 1480 break; 1481 case XGRAD_AXIAL: 1482 maGradientAxial = rGradient; 1483 break; 1484 case XGRAD_RADIAL: 1485 maGradientRadial = rGradient; 1486 break; 1487 case XGRAD_ELLIPTICAL: 1488 maGradientElliptical = rGradient; 1489 break; 1490 case XGRAD_SQUARE: 1491 maGradientSquare = rGradient; 1492 break; 1493 case XGRAD_RECT: 1494 maGradientRect = rGradient; 1495 break; 1496 } 1497 } 1498 1499 1500 1501 1502 sal_Int32 AreaPropertyPanel::GetSelectedTransparencyTypeIndex (void) const 1503 { 1504 return mpLBTransType->GetSelectEntryPos(); 1505 } 1506 1507 1508 1509 1510 void AreaPropertyPanel::Resize (void) 1511 { 1512 maLayouter.Layout(); 1513 } 1514 1515 1516 1517 } } // end of namespace svx::sidebar 1518 1519 // eof 1520