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