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_sc.hxx" 23 24 #include <sfx2/sidebar/ResourceDefinitions.hrc> 25 #include <sfx2/sidebar/Theme.hxx> 26 #include <sfx2/sidebar/ControlFactory.hxx> 27 #include <sfx2/sidebar/Layouter.hxx> 28 #include <CellAppearancePropertyPanel.hxx> 29 #include <CellAppearancePropertyPanel.hrc> 30 #include "sc.hrc" 31 #include "scresid.hxx" 32 #include <sfx2/bindings.hxx> 33 #include <sfx2/dispatch.hxx> 34 #include <vcl/fixed.hxx> 35 #include <svx/tbxcolorupdate.hxx> 36 #include <svl/eitem.hxx> 37 #include <editeng/bolnitem.hxx> 38 #include <editeng/boxitem.hxx> 39 #include <editeng/colritem.hxx> 40 #include <vcl/svapp.hxx> 41 #include <svx/sidebar/ColorControl.hxx> 42 #include <boost/bind.hpp> 43 #include <svx/sidebar/PopupContainer.hxx> 44 #include <CellLineStyleControl.hxx> 45 #include <CellLineStylePopup.hxx> 46 #include <CellBorderUpdater.hxx> 47 #include <CellBorderStyleControl.hxx> 48 #include <CellBorderStylePopup.hxx> 49 50 using namespace css; 51 using namespace cssu; 52 using ::sfx2::sidebar::Layouter; 53 54 55 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) 56 57 ////////////////////////////////////////////////////////////////////////////// 58 // helpers 59 60 namespace 61 { 62 Color GetTransparentColor(void) 63 { 64 return COL_TRANSPARENT; 65 } 66 } // end of anonymous namespace 67 68 ////////////////////////////////////////////////////////////////////////////// 69 // namespace open 70 71 namespace sc { namespace sidebar { 72 73 ////////////////////////////////////////////////////////////////////////////// 74 75 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateFillColorPopupControl(svx::sidebar::PopupContainer* pParent) 76 { 77 const ScResId aResId(VS_NOFILLCOLOR); 78 79 return new svx::sidebar::ColorControl( 80 pParent, 81 mpBindings, 82 ScResId(RID_POPUPPANEL_CELLAPPEARANCE_FILLCOLOR), 83 ScResId(VS_FILLCOLOR), 84 ::boost::bind(GetTransparentColor), 85 ::boost::bind(&CellAppearancePropertyPanel::SetFillColor, this, _1, _2), 86 pParent, 87 &aResId); 88 } 89 90 void CellAppearancePropertyPanel::SetFillColor( 91 const String& /*rsColorName*/, 92 const Color aColor) 93 { 94 const SvxColorItem aColorItem(aColor, SID_BACKGROUND_COLOR); 95 mpBindings->GetDispatcher()->Execute(SID_BACKGROUND_COLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L); 96 maBackColor = aColor; 97 } 98 99 ////////////////////////////////////////////////////////////////////////////// 100 101 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateLineColorPopupControl(svx::sidebar::PopupContainer* pParent) 102 { 103 return new svx::sidebar::ColorControl( 104 pParent, 105 mpBindings, 106 ScResId(RID_POPUPPANEL_CELLAPPEARANCE_LINECOLOR), 107 ScResId(VS_LINECOLOR), 108 ::boost::bind(GetTransparentColor), 109 ::boost::bind(&CellAppearancePropertyPanel::SetLineColor, this, _1, _2), 110 pParent, 111 0); 112 } 113 114 void CellAppearancePropertyPanel::SetLineColor( 115 const String& /*rsColorName*/, 116 const Color aColor) 117 { 118 const SvxColorItem aColorItem(aColor, SID_FRAME_LINECOLOR); 119 mpBindings->GetDispatcher()->Execute(SID_FRAME_LINECOLOR, SFX_CALLMODE_RECORD, &aColorItem, 0L); 120 maLineColor = aColor; 121 } 122 123 ////////////////////////////////////////////////////////////////////////////// 124 125 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellLineStylePopupControl(svx::sidebar::PopupContainer* pParent) 126 { 127 return new CellLineStyleControl(pParent, *this); 128 } 129 130 void CellAppearancePropertyPanel::EndCellLineStylePopupMode(void) 131 { 132 if(mpCellLineStylePopup.get()) 133 { 134 mpCellLineStylePopup->Hide(); 135 } 136 } 137 138 ////////////////////////////////////////////////////////////////////////////// 139 140 svx::sidebar::PopupControl* CellAppearancePropertyPanel::CreateCellBorderStylePopupControl(svx::sidebar::PopupContainer* pParent) 141 { 142 return new CellBorderStyleControl(pParent, *this); 143 } 144 145 void CellAppearancePropertyPanel::EndCellBorderStylePopupMode(void) 146 { 147 if(mpCellBorderStylePopup.get()) 148 { 149 mpCellBorderStylePopup->Hide(); 150 } 151 } 152 153 ////////////////////////////////////////////////////////////////////////////// 154 155 CellAppearancePropertyPanel::CellAppearancePropertyPanel( 156 Window* pParent, 157 const cssu::Reference<css::frame::XFrame>& rxFrame, 158 SfxBindings* pBindings) 159 : Control( 160 pParent, 161 ScResId(RID_PROPERTYPANEL_SC_APPEAR)), 162 163 mpFTFillColor(new FixedText(this, ScResId(FT_BK_COLOR))), 164 mpTBFillColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), 165 mpTBFillColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBFillColorBackground.get(), ScResId(TB_BK_COLOR))), 166 mpFillColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_BRUSH, TBI_BK_COLOR, mpTBFillColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)), 167 168 mpFTCellBorder(new FixedText(this, ScResId(FT_BORDER))), 169 mpTBCellBorderBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), 170 mpTBCellBorder(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBCellBorderBackground.get(), ScResId(TB_APP_BORDER))), 171 mpCellBorderUpdater(new CellBorderUpdater(TBI_BORDER, *mpTBCellBorder)), 172 173 mpTBLineStyleBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), 174 mpTBLineStyle(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineStyleBackground.get(), ScResId(TB_BORDER_LINE_STYLE))), 175 176 mpTBLineColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)), 177 mpTBLineColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpTBLineColorBackground.get(), ScResId(TB_BORDER_LINE_COLOR))), 178 mpLineColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_FRAME_LINECOLOR, TBI_LINE_COLOR, mpTBLineColor.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW)), 179 180 mpCBXShowGrid(new CheckBox(this, ScResId(CBX_SHOW_GRID))), 181 182 maBackColorControl(SID_BACKGROUND_COLOR, *pBindings, *this), 183 maLineColorControl(SID_FRAME_LINECOLOR, *pBindings, *this), 184 maLineStyleControl(SID_FRAME_LINESTYLE, *pBindings, *this), 185 maBorderOuterControl(SID_ATTR_BORDER_OUTER, *pBindings, *this), 186 maBorderInnerControl(SID_ATTR_BORDER_INNER, *pBindings, *this), 187 maGridShowControl(SID_SCGRIDSHOW, *pBindings, *this), 188 maBorderTLBRControl(SID_ATTR_BORDER_DIAG_TLBR, *pBindings, *this), 189 maBorderBLTRControl(SID_ATTR_BORDER_DIAG_BLTR, *pBindings, *this), 190 191 maIMGBKColor(ScResId(IMG_BK_COLOR)), 192 maIMGCellBorder(ScResId(IMG_CELL_BORDER)), 193 maIMGLineColor(ScResId(IMG_LINE_COLOR)), 194 maIMGLineStyle1(ScResId(IMG_LINE_STYLE1)), 195 maIMGLineStyle2(ScResId(IMG_LINE_STYLE2)), 196 maIMGLineStyle3(ScResId(IMG_LINE_STYLE3)), 197 maIMGLineStyle4(ScResId(IMG_LINE_STYLE4)), 198 maIMGLineStyle5(ScResId(IMG_LINE_STYLE5)), 199 maIMGLineStyle6(ScResId(IMG_LINE_STYLE6)), 200 maIMGLineStyle7(ScResId(IMG_LINE_STYLE7)), 201 maIMGLineStyle8(ScResId(IMG_LINE_STYLE8)), 202 maIMGLineStyle9(ScResId(IMG_LINE_STYLE9)), 203 204 maIMGBKColorH(ScResId(IMG_BK_COLOR_H)), 205 maIMGLineStyle1H(ScResId(IMG_LINE_STYLE1_H)), 206 maIMGLineStyle2H(ScResId(IMG_LINE_STYLE2_H)), 207 maIMGLineStyle3H(ScResId(IMG_LINE_STYLE3_H)), 208 maIMGLineStyle4H(ScResId(IMG_LINE_STYLE4_H)), 209 maIMGLineStyle5H(ScResId(IMG_LINE_STYLE5_H)), 210 maIMGLineStyle6H(ScResId(IMG_LINE_STYLE6_H)), 211 maIMGLineStyle7H(ScResId(IMG_LINE_STYLE7_H)), 212 maIMGLineStyle8H(ScResId(IMG_LINE_STYLE8_H)), 213 maIMGLineStyle9H(ScResId(IMG_LINE_STYLE9_H)), 214 215 maBackColor(COL_TRANSPARENT), 216 maLineColor(COL_BLACK), 217 maTLBRColor(COL_BLACK), 218 maBLTRColor(COL_BLACK), 219 mnIn(0), 220 mnOut(0), 221 mnDis(0), 222 mnTLBRIn(0), 223 mnTLBROut(0), 224 mnTLBRDis(0), 225 mnBLTRIn(0), 226 mnBLTROut(0), 227 mnBLTRDis(0), 228 mbBackColorAvailable(true), 229 mbLineColorAvailable(true), 230 mbBorderStyleAvailable(true), 231 mbLeft(false), 232 mbRight(false), 233 mbTop(false), 234 mbBottom(false), 235 mbVer(false), 236 mbHor(false), 237 mbOuterBorder(false), 238 mbInnerBorder(false), 239 mbTLBR(false), 240 mbBLTR(false), 241 242 maFillColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateFillColorPopupControl, this, _1)), 243 maLineColorPopup(this, ::boost::bind(&CellAppearancePropertyPanel::CreateLineColorPopupControl, this, _1)), 244 mpCellLineStylePopup(), 245 mpCellBorderStylePopup(), 246 247 mxFrame(rxFrame), 248 maContext(), 249 mpBindings(pBindings) 250 { 251 Initialize(); 252 FreeResource(); 253 254 Layouter::PrepareForLayouting(*mpFTFillColor); 255 Layouter::PrepareForLayouting(*mpFTCellBorder); 256 } 257 258 ////////////////////////////////////////////////////////////////////////////// 259 260 CellAppearancePropertyPanel::~CellAppearancePropertyPanel() 261 { 262 // Destroy the toolboxes, then their background windows. 263 mpTBFillColor.reset(); 264 mpTBCellBorder.reset(); 265 mpTBLineStyle.reset(); 266 mpTBLineColor.reset(); 267 268 mpTBFillColorBackground.reset(); 269 mpTBCellBorderBackground.reset(); 270 mpTBLineStyleBackground.reset(); 271 mpTBLineColorBackground.reset(); 272 } 273 274 ////////////////////////////////////////////////////////////////////////////// 275 276 void CellAppearancePropertyPanel::Initialize() 277 { 278 mpTBFillColor->SetItemImage(TBI_BK_COLOR, GetDisplayBackground().GetColor().IsDark() ? maIMGBKColorH : maIMGBKColor); 279 mpTBFillColor->SetItemBits( TBI_BK_COLOR, mpTBFillColor->GetItemBits( TBI_BK_COLOR ) | TIB_DROPDOWNONLY ); 280 mpTBFillColor->SetQuickHelpText(TBI_BK_COLOR,String(ScResId(STR_QH_BK_COLOR))); //Add 281 Size aTbxSize1( mpTBFillColor->CalcWindowSizePixel() ); 282 mpTBFillColor->SetOutputSizePixel( aTbxSize1 ); 283 mpTBFillColor->SetBackground(Wallpaper()); 284 mpTBFillColor->SetPaintTransparent(true); 285 Link aLink = LINK(this, CellAppearancePropertyPanel, TbxBKColorSelectHdl); 286 mpTBFillColor->SetDropdownClickHdl ( aLink ); 287 mpTBFillColor->SetSelectHdl ( aLink ); 288 289 mpTBCellBorder->SetItemImage(TBI_BORDER, maIMGCellBorder); 290 mpTBCellBorder->SetItemBits( TBI_BORDER, mpTBCellBorder->GetItemBits( TBI_BORDER ) | TIB_DROPDOWNONLY ); 291 mpTBCellBorder->SetQuickHelpText(TBI_BORDER,String(ScResId(STR_QH_BORDER))); //Add 292 Size aTbxSize2( mpTBCellBorder->CalcWindowSizePixel() ); 293 mpTBCellBorder->SetOutputSizePixel( aTbxSize2 ); 294 mpTBCellBorder->SetBackground(Wallpaper()); 295 mpTBCellBorder->SetPaintTransparent(true); 296 aLink = LINK(this, CellAppearancePropertyPanel, TbxCellBorderSelectHdl); 297 mpTBCellBorder->SetDropdownClickHdl ( aLink ); 298 mpTBCellBorder->SetSelectHdl ( aLink ); 299 300 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, maIMGLineStyle1); 301 mpTBLineStyle->SetItemBits( TBI_LINE_STYLE, mpTBLineStyle->GetItemBits( TBI_LINE_STYLE ) | TIB_DROPDOWNONLY ); 302 mpTBLineStyle->SetQuickHelpText(TBI_LINE_STYLE,String(ScResId(STR_QH_BORDER_LINE_STYLE))); //Add 303 Size aTbxSize3( mpTBLineStyle->CalcWindowSizePixel() ); 304 mpTBLineStyle->SetOutputSizePixel( aTbxSize3 ); 305 mpTBLineStyle->SetBackground(Wallpaper()); 306 mpTBLineStyle->SetPaintTransparent(true); 307 aLink = LINK(this, CellAppearancePropertyPanel, TbxLineStyleSelectHdl); 308 mpTBLineStyle->SetDropdownClickHdl ( aLink ); 309 mpTBLineStyle->SetSelectHdl ( aLink ); 310 mpTBLineStyle->Disable(); 311 312 mpTBLineColor->SetItemImage(TBI_LINE_COLOR, maIMGLineColor); 313 mpTBLineColor->SetItemBits( TBI_LINE_COLOR, mpTBLineColor->GetItemBits( TBI_LINE_COLOR ) | TIB_DROPDOWNONLY ); 314 mpTBLineColor->SetQuickHelpText(TBI_LINE_COLOR,String(ScResId(STR_QH_BORDER_LINE_COLOR))); //Add 315 Size aTbxSize4( mpTBLineColor->CalcWindowSizePixel() ); 316 mpTBLineColor->SetOutputSizePixel( aTbxSize4 ); 317 mpTBLineColor->SetBackground(Wallpaper()); 318 mpTBLineColor->SetPaintTransparent(true); 319 aLink = LINK(this, CellAppearancePropertyPanel, TbxLineColorSelectHdl); 320 mpTBLineColor->SetDropdownClickHdl ( aLink ); 321 mpTBLineColor->SetSelectHdl ( aLink ); 322 mpTBLineColor->Disable(); 323 324 aLink = LINK(this, CellAppearancePropertyPanel, CBOXGridShowClkHdl); 325 mpCBXShowGrid->SetClickHdl ( aLink ); 326 327 mpTBFillColor->SetAccessibleRelationLabeledBy(mpFTFillColor.get()); 328 mpTBLineColor->SetAccessibleRelationLabeledBy(mpTBLineColor.get()); 329 mpTBCellBorder->SetAccessibleRelationLabeledBy(mpFTCellBorder.get()); 330 mpTBLineStyle->SetAccessibleRelationLabeledBy(mpTBLineStyle.get()); 331 } 332 333 ////////////////////////////////////////////////////////////////////////////// 334 335 IMPL_LINK(CellAppearancePropertyPanel, TbxBKColorSelectHdl, ToolBox*, pToolBox) 336 { 337 sal_uInt16 nId = pToolBox->GetCurItemId(); 338 if(nId == TBI_BK_COLOR) 339 { 340 maFillColorPopup.Show(*pToolBox); 341 maFillColorPopup.SetCurrentColor(maBackColor, mbBackColorAvailable); 342 } 343 return 0; 344 } 345 346 ////////////////////////////////////////////////////////////////////////////// 347 348 IMPL_LINK(CellAppearancePropertyPanel, TbxLineColorSelectHdl, ToolBox*, pToolBox) 349 { 350 sal_uInt16 nId = pToolBox->GetCurItemId(); 351 if(nId == TBI_LINE_COLOR) 352 { 353 maLineColorPopup.Show(*pToolBox); 354 maLineColorPopup.SetCurrentColor(maLineColor, mbLineColorAvailable); 355 } 356 return 0; 357 } 358 359 ////////////////////////////////////////////////////////////////////////////// 360 361 IMPL_LINK(CellAppearancePropertyPanel, TbxCellBorderSelectHdl, ToolBox*, pToolBox) 362 { 363 sal_uInt16 nId = pToolBox->GetCurItemId(); 364 365 if(nId == TBI_BORDER) 366 { 367 // create popup on demand 368 if(!mpCellBorderStylePopup.get()) 369 { 370 mpCellBorderStylePopup.reset( 371 new CellBorderStylePopup( 372 this, 373 ::boost::bind(&CellAppearancePropertyPanel::CreateCellBorderStylePopupControl, this, _1))); 374 } 375 376 if(mpCellBorderStylePopup.get()) 377 { 378 mpCellBorderStylePopup->Show(*pToolBox); 379 } 380 } 381 return 0; 382 } 383 384 ////////////////////////////////////////////////////////////////////////////// 385 386 IMPL_LINK(CellAppearancePropertyPanel, TbxLineStyleSelectHdl, ToolBox*, pToolBox) 387 { 388 sal_uInt16 nId = pToolBox->GetCurItemId(); 389 if(nId == TBI_LINE_STYLE) 390 { 391 // create popup on demand 392 if(!mpCellLineStylePopup.get()) 393 { 394 mpCellLineStylePopup.reset( 395 new CellLineStylePopup( 396 this, 397 ::boost::bind(&CellAppearancePropertyPanel::CreateCellLineStylePopupControl, this, _1))); 398 } 399 400 if(mpCellLineStylePopup.get()) 401 { 402 mpCellLineStylePopup->SetLineStyleSelect(mnOut, mnIn, mnDis); 403 mpCellLineStylePopup->Show(*pToolBox); 404 } 405 } 406 return 0; 407 } 408 409 ////////////////////////////////////////////////////////////////////////////// 410 411 IMPL_LINK(CellAppearancePropertyPanel, CBOXGridShowClkHdl, void*, EMPTYARG) 412 { 413 bool bState = mpCBXShowGrid->IsChecked(); 414 SfxBoolItem aItem( SID_SCGRIDSHOW , bState); 415 GetBindings()->GetDispatcher()->Execute(SID_SCGRIDSHOW, SFX_CALLMODE_RECORD, &aItem, false, 0L); 416 return 0; 417 } 418 419 ////////////////////////////////////////////////////////////////////////////// 420 421 CellAppearancePropertyPanel* CellAppearancePropertyPanel::Create ( 422 Window* pParent, 423 const cssu::Reference<css::frame::XFrame>& rxFrame, 424 SfxBindings* pBindings) 425 { 426 if (pParent == NULL) 427 throw lang::IllegalArgumentException(A2S("no parent Window given to CellAppearancePropertyPanel::Create"), NULL, 0); 428 if ( ! rxFrame.is()) 429 throw lang::IllegalArgumentException(A2S("no XFrame given to CellAppearancePropertyPanel::Create"), NULL, 1); 430 if (pBindings == NULL) 431 throw lang::IllegalArgumentException(A2S("no SfxBindings given to CellAppearancePropertyPanel::Create"), NULL, 2); 432 433 return new CellAppearancePropertyPanel( 434 pParent, 435 rxFrame, 436 pBindings); 437 } 438 439 ////////////////////////////////////////////////////////////////////////////// 440 441 void CellAppearancePropertyPanel::DataChanged( 442 const DataChangedEvent& rEvent) 443 { 444 (void)rEvent; 445 } 446 447 ////////////////////////////////////////////////////////////////////////////// 448 449 void CellAppearancePropertyPanel::HandleContextChange( 450 const ::sfx2::sidebar::EnumContext aContext) 451 { 452 if(maContext == aContext) 453 { 454 // Nothing to do. 455 return; 456 } 457 458 maContext = aContext; 459 460 461 462 // todo 463 } 464 465 ////////////////////////////////////////////////////////////////////////////// 466 467 void CellAppearancePropertyPanel::NotifyItemUpdate( 468 sal_uInt16 nSID, 469 SfxItemState eState, 470 const SfxPoolItem* pState, 471 const bool bIsEnabled) 472 { 473 (void)bIsEnabled; 474 475 switch(nSID) 476 { 477 case SID_BACKGROUND_COLOR: 478 if(eState >= SFX_ITEM_DEFAULT) 479 { 480 const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState); 481 482 if(pSvxColorItem) 483 { 484 maBackColor = ((const SvxColorItem*)pState)->GetValue(); 485 mbBackColorAvailable = true; 486 mpFillColorUpdater->Update(maBackColor); 487 break; 488 } 489 } 490 491 mbBackColorAvailable = false; 492 maBackColor.SetColor(COL_TRANSPARENT); 493 mpFillColorUpdater->Update(COL_TRANSPARENT); 494 break; 495 case SID_FRAME_LINECOLOR: 496 if( eState == SFX_ITEM_DONTCARE) 497 { 498 mbLineColorAvailable = true; 499 maLineColor.SetColor( COL_TRANSPARENT ); 500 UpdateControlState(); 501 break; 502 } 503 504 if(eState >= SFX_ITEM_DEFAULT && pState && pState->ISA(SvxColorItem) ) 505 { 506 const SvxColorItem* pSvxColorItem = dynamic_cast< const SvxColorItem* >(pState); 507 508 if(pSvxColorItem) 509 { 510 maLineColor = ((const SvxColorItem*)pState)->GetValue(); 511 if(maLineColor == COL_AUTO) 512 mbLineColorAvailable = false; 513 else 514 { 515 mbLineColorAvailable = true; 516 // mpLineColorUpdater->Update(maLineColor); 517 } 518 519 UpdateControlState(); 520 break; 521 } 522 } 523 524 mbLineColorAvailable = false; 525 maLineColor.SetColor(COL_AUTO); 526 // mpLineColorUpdater->Update(maLineColor); 527 UpdateControlState(); 528 break; 529 case SID_FRAME_LINESTYLE: 530 if( eState == SFX_ITEM_DONTCARE ) 531 { 532 mbBorderStyleAvailable = true; 533 mnIn = 0; 534 mnOut = 0; 535 mnDis = 0; 536 SetStyleIcon(); 537 break; 538 } 539 540 if(eState >= SFX_ITEM_DEFAULT) 541 { 542 const SvxLineItem* pSvxLineItem = dynamic_cast< const SvxLineItem* >(pState); 543 544 if(pSvxLineItem) 545 { 546 const SvxBorderLine* mbLineItem = pSvxLineItem->GetLine(); 547 mnIn = mbLineItem->GetInWidth(); 548 mnOut = mbLineItem->GetOutWidth(); 549 mnDis = mbLineItem->GetDistance(); 550 551 if(mnIn == 0 && mnOut == 0 && mnDis == 0) 552 mbBorderStyleAvailable = false; 553 else 554 mbBorderStyleAvailable = true; 555 556 SetStyleIcon(); 557 break; 558 } 559 } 560 561 mbBorderStyleAvailable = false; 562 SetStyleIcon(); 563 break; 564 case SID_ATTR_BORDER_OUTER: 565 if(eState >= SFX_ITEM_DEFAULT) 566 { 567 const SvxBoxItem* pBoxItem = dynamic_cast< const SvxBoxItem* >(pState); 568 569 if(pBoxItem) 570 { 571 mbLeft=false, mbRight=false, mbTop=false, mbBottom=false; 572 573 if(pBoxItem->GetLeft()) 574 mbLeft = true; 575 576 if(pBoxItem->GetRight()) 577 mbRight = true; 578 579 if(pBoxItem->GetTop()) 580 mbTop = true; 581 582 if(pBoxItem->GetBottom()) 583 mbBottom = true; 584 585 if(!Application::GetSettings().GetLayoutRTL()) 586 mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbLeft, mbRight, maIMGCellBorder, mbVer, mbHor); 587 else 588 mpCellBorderUpdater->UpdateCellBorder(mbTop, mbBottom, mbRight, mbLeft, maIMGCellBorder, mbVer, mbHor); 589 590 if(mbLeft || mbRight || mbTop || mbBottom) 591 mbOuterBorder = true; 592 else 593 mbOuterBorder = false; 594 595 UpdateControlState(); 596 } 597 } 598 break; 599 case SID_ATTR_BORDER_INNER: 600 if(eState >= SFX_ITEM_DEFAULT) 601 { 602 const SvxBoxInfoItem* pBoxInfoItem = dynamic_cast< const SvxBoxInfoItem* >(pState); 603 604 if(pBoxInfoItem) 605 { 606 bool bLeft(false), bRight(false), bTop(false), bBottom(false); 607 608 mbVer = false, mbHor = false; 609 610 if(!pBoxInfoItem->IsValid( VALID_VERT ) || pBoxInfoItem->GetVert()) 611 mbVer = true; 612 613 if(!pBoxInfoItem->IsValid( VALID_HORI ) || pBoxInfoItem->GetHori()) 614 mbHor = true; 615 616 if(!pBoxInfoItem->IsValid( VALID_LEFT ) || mbLeft) 617 bLeft = true; 618 619 if(!pBoxInfoItem->IsValid( VALID_RIGHT ) || mbRight) 620 bRight = true; 621 622 if(!pBoxInfoItem->IsValid( VALID_TOP ) || mbTop) 623 bTop = true; 624 625 if(!pBoxInfoItem->IsValid( VALID_BOTTOM ) || mbBottom) 626 bBottom = true; 627 628 if(!Application::GetSettings().GetLayoutRTL()) 629 mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bLeft, bRight, maIMGCellBorder, mbVer, mbHor); 630 else 631 mpCellBorderUpdater->UpdateCellBorder(bTop, bBottom, bRight, bLeft, maIMGCellBorder, mbVer, mbHor); 632 633 if(mbVer || mbHor || bLeft || bRight || bTop || bBottom) 634 mbInnerBorder = true; 635 else 636 mbInnerBorder = false; 637 638 UpdateControlState(); 639 } 640 } 641 break; 642 case SID_ATTR_BORDER_DIAG_TLBR: 643 if( eState == SFX_ITEM_DONTCARE ) 644 { 645 mbTLBR = true; 646 maTLBRColor.SetColor(COL_TRANSPARENT); 647 mnTLBRIn = mnTLBROut = mnTLBRDis = 0; 648 UpdateControlState(); 649 break; 650 } 651 652 if(eState >= SFX_ITEM_DEFAULT) 653 { 654 const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState); 655 656 if(pItem) 657 { 658 const SvxBorderLine* aLine = pItem->GetLine(); 659 660 if(!aLine) 661 { 662 mbTLBR = false; 663 } 664 else 665 { 666 mbTLBR = true; 667 maTLBRColor = aLine->GetColor(); 668 mnTLBRIn = aLine->GetInWidth(); 669 mnTLBROut = aLine->GetOutWidth(); 670 mnTLBRDis = aLine->GetDistance(); 671 672 if(mnTLBRIn == 0 && mnTLBROut == 0 && mnTLBRDis == 0) 673 mbTLBR = false; 674 } 675 676 UpdateControlState(); 677 break; 678 } 679 } 680 681 mbTLBR = false; 682 UpdateControlState(); 683 break; 684 case SID_ATTR_BORDER_DIAG_BLTR: 685 if( eState == SFX_ITEM_DONTCARE ) 686 { 687 mbBLTR = true; 688 maBLTRColor.SetColor( COL_TRANSPARENT ); 689 mnBLTRIn = mnBLTROut = mnBLTRDis = 0; 690 UpdateControlState(); 691 break; 692 } 693 694 if(eState >= SFX_ITEM_DEFAULT) 695 { 696 const SvxLineItem* pItem = dynamic_cast< const SvxLineItem* >(pState); 697 698 if(pItem) 699 { 700 const SvxBorderLine* aLine = pItem->GetLine(); 701 702 if(!aLine) 703 { 704 mbBLTR = false; 705 } 706 else 707 { 708 mbBLTR = true; 709 maBLTRColor = aLine->GetColor(); 710 mnBLTRIn = aLine->GetInWidth(); 711 mnBLTROut = aLine->GetOutWidth(); 712 mnBLTRDis = aLine->GetDistance(); 713 714 if(mnBLTRIn == 0 && mnBLTROut == 0 && mnBLTRDis == 0) 715 mbBLTR = false; 716 } 717 718 UpdateControlState(); 719 } 720 break; 721 } 722 723 mbBLTR = false; 724 UpdateControlState(); 725 break; 726 case SID_SCGRIDSHOW: 727 if(eState >= SFX_ITEM_DEFAULT) 728 { 729 const SfxBoolItem* pItem = dynamic_cast< const SfxBoolItem* >(pState); 730 731 if(pItem) 732 { 733 const bool bVal = pItem->GetValue(); 734 735 if(bVal) 736 mpCBXShowGrid->Check(true); 737 else 738 mpCBXShowGrid->Check(false); 739 } 740 } 741 break; 742 } 743 } 744 745 ////////////////////////////////////////////////////////////////////////////// 746 747 SfxBindings* CellAppearancePropertyPanel::GetBindings() 748 { 749 return mpBindings; 750 } 751 752 ////////////////////////////////////////////////////////////////////////////// 753 754 void CellAppearancePropertyPanel::SetStyleIcon() 755 { 756 if(mnOut == DEF_LINE_WIDTH_0 && mnIn == 0 && mnDis == 0) //1 757 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H : maIMGLineStyle1); 758 else if(mnOut == DEF_LINE_WIDTH_2 && mnIn == 0 && mnDis == 0) //2 759 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle2H :maIMGLineStyle2); 760 else if(mnOut == DEF_LINE_WIDTH_3 && mnIn == 0 && mnDis == 0) //3 761 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle3H :maIMGLineStyle3); 762 else if(mnOut == DEF_LINE_WIDTH_4 && mnIn == 0 && mnDis == 0) //4 763 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle4H :maIMGLineStyle4); 764 else if(mnOut == DEF_DOUBLE_LINE0_OUT && mnIn == DEF_DOUBLE_LINE0_IN && mnDis == DEF_DOUBLE_LINE0_DIST) //5 765 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle5H :maIMGLineStyle5); 766 else if(mnOut == DEF_DOUBLE_LINE7_OUT && mnIn == DEF_DOUBLE_LINE7_IN && mnDis == DEF_DOUBLE_LINE7_DIST) //6 767 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle6H :maIMGLineStyle6); 768 else if(mnOut == DEF_DOUBLE_LINE4_OUT && mnIn == DEF_DOUBLE_LINE4_IN && mnDis == DEF_DOUBLE_LINE4_DIST) //7 769 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle7H :maIMGLineStyle7); 770 else if(mnOut == DEF_DOUBLE_LINE9_OUT && mnIn == DEF_DOUBLE_LINE9_IN && mnDis == DEF_DOUBLE_LINE9_DIST) //8 771 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle8H :maIMGLineStyle8); 772 else if(mnOut == DEF_DOUBLE_LINE2_OUT && mnIn == DEF_DOUBLE_LINE2_IN && mnDis == DEF_DOUBLE_LINE2_DIST) //9 773 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle9H :maIMGLineStyle9); 774 else 775 mpTBLineStyle->SetItemImage(TBI_LINE_STYLE, GetDisplayBackground().GetColor().IsDark() ? maIMGLineStyle1H :maIMGLineStyle1); 776 } 777 778 ////////////////////////////////////////////////////////////////////////////// 779 780 void CellAppearancePropertyPanel::UpdateControlState() 781 { 782 if(mbOuterBorder || mbInnerBorder || mbTLBR || mbBLTR) 783 { 784 mpTBLineColor->Enable(); 785 mpTBLineStyle->Enable(); 786 787 //set line color state 788 if( mbLineColorAvailable && !mbTLBR && !mbBLTR ) 789 mpLineColorUpdater->Update(maLineColor); 790 else if( !mbLineColorAvailable && mbTLBR && !mbBLTR ) 791 mpLineColorUpdater->Update(maTLBRColor); 792 else if ( !mbLineColorAvailable && !mbTLBR && mbBLTR ) 793 mpLineColorUpdater->Update(maBLTRColor); 794 else if( !mbLineColorAvailable && mbTLBR && mbBLTR) 795 { 796 if( maTLBRColor == maBLTRColor) 797 mpLineColorUpdater->Update(maBLTRColor); 798 else 799 mpLineColorUpdater->Update(COL_TRANSPARENT); 800 } 801 else if( mbLineColorAvailable && mbTLBR && !mbBLTR ) 802 { 803 if( maTLBRColor == maLineColor) 804 mpLineColorUpdater->Update(maLineColor); 805 else 806 mpLineColorUpdater->Update(COL_TRANSPARENT); 807 } 808 else if( mbLineColorAvailable && !mbTLBR && mbBLTR ) 809 { 810 if( maBLTRColor == maLineColor) 811 mpLineColorUpdater->Update(maLineColor); 812 else 813 mpLineColorUpdater->Update(COL_TRANSPARENT); 814 } 815 else 816 mpLineColorUpdater->Update(COL_TRANSPARENT); 817 818 //set line style state 819 if( mbBorderStyleAvailable && !mbTLBR && !mbBLTR ) 820 { 821 } 822 else if( !mbBorderStyleAvailable && mbTLBR && !mbBLTR ) 823 { 824 mnIn = mnTLBRIn; 825 mnOut = mnTLBROut; 826 mnDis = mnTLBRDis; 827 } 828 else if ( !mbBorderStyleAvailable && !mbTLBR && mbBLTR ) 829 { 830 mnIn = mnBLTRIn; 831 mnOut = mnBLTROut; 832 mnDis = mnBLTRDis; 833 } 834 else if( !mbBorderStyleAvailable && mbTLBR && mbBLTR) 835 { 836 if( mnTLBRIn == mnBLTRIn && mnTLBROut == mnBLTROut && mnTLBRDis == mnBLTRDis) 837 { 838 mnIn = mnTLBRIn; 839 mnOut = mnTLBROut; 840 mnDis = mnTLBRDis; 841 } 842 else 843 { 844 mnIn = 0; 845 mnOut = 0; 846 mnDis = 0; 847 } 848 } 849 else if( mbBorderStyleAvailable && mbTLBR && !mbBLTR ) 850 { 851 if( mnTLBRIn != mnIn || mnTLBROut != mnOut || mnTLBRDis != mnDis) 852 { 853 mnIn = 0; 854 mnOut = 0; 855 mnDis = 0; 856 } 857 } 858 else if( mbBorderStyleAvailable && !mbTLBR && mbBLTR ) 859 { 860 if( mnBLTRIn != mnIn || mnBLTROut != mnOut || mnBLTRDis != mnDis ) 861 { 862 mnIn = 0; 863 mnOut = 0; 864 mnDis = 0; 865 } 866 } 867 else 868 { 869 mnIn = 0; 870 mnOut = 0; 871 mnDis = 0; 872 } 873 SetStyleIcon(); 874 } 875 else 876 { 877 mpTBLineColor->Disable(); 878 mpTBLineStyle->Disable(); 879 } 880 } 881 882 883 884 885 void CellAppearancePropertyPanel::Resize (void) 886 { 887 const sal_Int32 nRight (GetSizePixel().Width() - Layouter::MapWidth(*this, TB_BORDER)); 888 Layouter::SetRight(*mpFTFillColor, nRight); 889 Layouter::SetRight(*mpFTCellBorder, nRight); 890 Layouter::SetRight(*mpCBXShowGrid, nRight); 891 } 892 893 894 895 }} // end of namespace ::sc::sidebar 896 897 ////////////////////////////////////////////////////////////////////////////// 898 // eof 899