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 <sfx2/sidebar/ResourceDefinitions.hrc> 23 #include <sfx2/sidebar/Theme.hxx> 24 #include <sfx2/sidebar/ControlFactory.hxx> 25 #include <sfx2/sidebar/Layouter.hxx> 26 #include <GraphicPropertyPanel.hxx> 27 #include <GraphicPropertyPanel.hrc> 28 #include <svx/dialogs.hrc> 29 #include <svx/dialmgr.hxx> 30 #include <vcl/field.hxx> 31 #include <vcl/lstbox.hxx> 32 #include <svl/intitem.hxx> 33 #include <sfx2/bindings.hxx> 34 #include <sfx2/dispatch.hxx> 35 #include "svx/dialogs.hrc" 36 37 using namespace css; 38 using namespace cssu; 39 using ::sfx2::sidebar::Layouter; 40 using ::sfx2::sidebar::Theme; 41 42 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) 43 44 ////////////////////////////////////////////////////////////////////////////// 45 46 47 namespace svx { namespace sidebar { 48 49 ////////////////////////////////////////////////////////////////////////////// 50 51 GraphicPropertyPanel::GraphicPropertyPanel( 52 Window* pParent, 53 const cssu::Reference<css::frame::XFrame>& rxFrame, 54 SfxBindings* pBindings) 55 : Control( 56 pParent, 57 SVX_RES(RID_SIDEBAR_GRAPHIC_PANEL)), 58 mpFtBrightness(new FixedText(this, SVX_RES(FT_BRIGHTNESS))), 59 mpMtrBrightness(new MetricField(this, SVX_RES(MTR_BRIGHTNESS))), 60 mpFtContrast(new FixedText(this, SVX_RES(FT_CONTRAST))), 61 mpMtrContrast(new MetricField(this, SVX_RES(MTR_CONTRAST))), 62 mpFtColorMode(new FixedText(this, SVX_RES(FT_COLOR_MODE))), 63 mpLBColorMode(new ListBox(this, SVX_RES(LB_COLOR_MODE))), 64 mpFtTrans(new FixedText(this, SVX_RES(FT_TRANSPARENT))), 65 mpMtrTrans(new MetricField(this, SVX_RES(MTR_TRANSPARENT))), 66 mpMtrRed(new MetricField(this, SVX_RES(MF_RED))), 67 mpMtrGreen(new MetricField(this, SVX_RES(MF_GREEN))), 68 mpMtrBlue(new MetricField(this, SVX_RES(MF_BLUE))), 69 mpMtrGamma(new MetricField(this, SVX_RES(MF_GAMMA))), 70 maBrightControl(SID_ATTR_GRAF_LUMINANCE, *pBindings, *this), 71 maContrastControl(SID_ATTR_GRAF_CONTRAST, *pBindings, *this), 72 maTransparenceControl(SID_ATTR_GRAF_TRANSPARENCE, *pBindings, *this), 73 maRedControl(SID_ATTR_GRAF_RED, *pBindings, *this), 74 maGreenControl(SID_ATTR_GRAF_GREEN, *pBindings, *this), 75 maBlueControl(SID_ATTR_GRAF_BLUE, *pBindings, *this), 76 maGammaControl(SID_ATTR_GRAF_GAMMA, *pBindings, *this), 77 maModeControl(SID_ATTR_GRAF_MODE, *pBindings, *this), 78 maImgRed(this, SVX_RES(IMG_RED)), 79 maImgGreen(this, SVX_RES(IMG_GREEN)), 80 maImgBlue(this, SVX_RES(IMG_BLUE)), 81 maImgGamma(this, SVX_RES(IMG_GAMMA)), 82 mxFrame(rxFrame), 83 mpBindings(pBindings), 84 maLayouter(*this) 85 { 86 Initialize(); 87 FreeResource(); 88 89 // Setup the grid layouter. 90 maLayouter.GetCell(0,0).SetControl(*mpFtBrightness).SetGridWidth(2); 91 maLayouter.GetCell(1,0).SetControl(*mpMtrBrightness).SetGridWidth(2); 92 93 maLayouter.GetCell(0,3).SetControl(*mpFtContrast).SetGridWidth(2); 94 maLayouter.GetCell(1,3).SetControl(*mpMtrContrast).SetGridWidth(2); 95 96 maLayouter.GetCell(2,0).SetControl(*mpFtColorMode).SetGridWidth(2); 97 maLayouter.GetCell(3,0).SetControl(*mpLBColorMode).SetGridWidth(2); 98 99 maLayouter.GetCell(2,3).SetControl(*mpFtTrans).SetGridWidth(2); 100 maLayouter.GetCell(3,3).SetControl(*mpMtrTrans).SetGridWidth(2); 101 102 maLayouter.GetCell(4,0).SetControl(maImgRed).SetFixedWidth(); 103 maLayouter.GetCell(4,1).SetControl(*mpMtrRed); 104 105 maLayouter.GetCell(5,0).SetControl(maImgBlue).SetFixedWidth(); 106 maLayouter.GetCell(5,1).SetControl(*mpMtrBlue); 107 108 maLayouter.GetCell(4,3).SetControl(maImgGreen).SetFixedWidth(); 109 maLayouter.GetCell(4,4).SetControl(*mpMtrGreen); 110 maLayouter.GetCell(5,3).SetControl(maImgGamma).SetFixedWidth(); 111 maLayouter.GetCell(5,4).SetControl(*mpMtrGamma); 112 113 maLayouter.GetColumn(0) 114 .SetWeight(0) 115 .SetLeftPadding(Layouter::MapWidth(*this,SECTIONPAGE_MARGIN_HORIZONTAL)); 116 maLayouter.GetColumn(1) 117 .SetWeight(1) 118 .SetMinimumWidth(Layouter::MapWidth(*this, MBOX_WIDTH - 10)); 119 maLayouter.GetColumn(2) 120 .SetWeight(0) 121 .SetMinimumWidth(Layouter::MapWidth(*this, CONTROL_SPACING_HORIZONTAL)); 122 maLayouter.GetColumn(3) 123 .SetWeight(0); 124 maLayouter.GetColumn(4) 125 .SetWeight(1) 126 .SetMinimumWidth(Layouter::MapWidth(*this, MBOX_WIDTH - 10)) 127 .SetRightPadding(Layouter::MapWidth(*this,SECTIONPAGE_MARGIN_HORIZONTAL)); 128 129 // Make controls that display text handle short widths more 130 // graceful. 131 Layouter::PrepareForLayouting(*mpFtBrightness); 132 Layouter::PrepareForLayouting(*mpFtContrast); 133 Layouter::PrepareForLayouting(*mpFtColorMode); 134 Layouter::PrepareForLayouting(*mpFtTrans); 135 } 136 137 ////////////////////////////////////////////////////////////////////////////// 138 139 GraphicPropertyPanel::~GraphicPropertyPanel() 140 { 141 } 142 143 ////////////////////////////////////////////////////////////////////////////// 144 145 void GraphicPropertyPanel::Initialize() 146 { 147 mpFtBrightness->SetBackground(Wallpaper()); 148 mpFtContrast->SetBackground(Wallpaper()); 149 mpFtColorMode->SetBackground(Wallpaper()); 150 mpFtTrans->SetBackground(Wallpaper()); 151 152 mpMtrBrightness->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyBrightnessHdl ) ); 153 mpMtrBrightness->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Brightness"))); 154 mpMtrContrast->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyContrastHdl ) ); 155 mpMtrContrast->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Contrast"))); 156 mpMtrTrans->SetModifyHdl( LINK( this, GraphicPropertyPanel, ModifyTransHdl ) ); 157 mpMtrTrans->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); 158 159 mpLBColorMode->InsertEntry(String(SVX_RES(RID_SVXSTR_GRAFMODE_STANDARD))); 160 mpLBColorMode->InsertEntry(String(SVX_RES(RID_SVXSTR_GRAFMODE_GREYS))); 161 mpLBColorMode->InsertEntry(String(SVX_RES(RID_SVXSTR_GRAFMODE_MONO))); 162 mpLBColorMode->InsertEntry(String(SVX_RES(RID_SVXSTR_GRAFMODE_WATERMARK))); 163 mpLBColorMode->SetSelectHdl( LINK( this, GraphicPropertyPanel, ClickColorModeHdl )); 164 mpLBColorMode->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Color mode"))); 165 166 mpMtrRed->SetModifyHdl( LINK( this, GraphicPropertyPanel, RedHdl ) ); 167 mpMtrGreen->SetModifyHdl( LINK( this, GraphicPropertyPanel, GreenHdl ) ); 168 mpMtrBlue->SetModifyHdl( LINK( this, GraphicPropertyPanel, BlueHdl ) ); 169 mpMtrGamma->SetModifyHdl( LINK( this, GraphicPropertyPanel, GammaHdl ) ); 170 mpMtrRed->SetAccessibleName(mpMtrRed->GetQuickHelpText()); 171 mpMtrGreen->SetAccessibleName(mpMtrGreen->GetQuickHelpText()); 172 mpMtrBlue->SetAccessibleName(mpMtrBlue->GetQuickHelpText()); 173 mpMtrGamma->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Gamma value"))); 174 175 mpMtrRed->SetAccessibleRelationLabeledBy(mpMtrRed.get()); 176 mpMtrGreen->SetAccessibleRelationLabeledBy(mpMtrGreen.get()); 177 mpMtrBlue->SetAccessibleRelationLabeledBy(mpMtrBlue.get()); 178 mpMtrGamma->SetAccessibleRelationLabeledBy(mpMtrGamma.get()); 179 mpMtrBrightness->SetAccessibleRelationLabeledBy(mpFtBrightness.get()); 180 mpMtrContrast->SetAccessibleRelationLabeledBy(mpFtContrast.get()); 181 mpMtrTrans->SetAccessibleRelationLabeledBy(mpFtTrans.get()); 182 mpLBColorMode->SetAccessibleRelationLabeledBy(mpFtColorMode.get()); 183 184 // Fix left position of some controls that may be wrong due to 185 // rounding errors. 186 const sal_Int32 nRight0 (mpLBColorMode->GetPosPixel().X() + mpLBColorMode->GetSizePixel().Width()); 187 const sal_Int32 nRight1 (mpMtrTrans->GetPosPixel().X() + mpMtrTrans->GetSizePixel().Width()); 188 mpMtrRed->SetPosPixel(Point( 189 nRight0 - mpMtrRed->GetSizePixel().Width(), 190 mpMtrRed->GetPosPixel().Y())); 191 mpMtrBlue->SetPosPixel(Point( 192 nRight0 - mpMtrBlue->GetSizePixel().Width(), 193 mpMtrBlue->GetPosPixel().Y())); 194 mpMtrGreen->SetPosPixel(Point( 195 nRight1 - mpMtrGreen->GetSizePixel().Width(), 196 mpMtrGreen->GetPosPixel().Y())); 197 mpMtrGamma->SetPosPixel(Point( 198 nRight1 - mpMtrGamma->GetSizePixel().Width(), 199 mpMtrGamma->GetPosPixel().Y())); 200 } 201 202 203 204 205 ////////////////////////////////////////////////////////////////////////////// 206 207 IMPL_LINK( GraphicPropertyPanel, ModifyBrightnessHdl, void *, EMPTYARG ) 208 { 209 const sal_Int16 nBright = mpMtrBrightness->GetValue(); 210 const SfxInt16Item aBrightItem( SID_ATTR_GRAF_LUMINANCE, nBright ); 211 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_LUMINANCE, SFX_CALLMODE_RECORD, &aBrightItem, 0L); 212 return 0L; 213 } 214 215 ////////////////////////////////////////////////////////////////////////////// 216 217 IMPL_LINK( GraphicPropertyPanel, ModifyContrastHdl, void *, EMPTYARG ) 218 { 219 const sal_Int16 nContrast = mpMtrContrast->GetValue(); 220 const SfxInt16Item aContrastItem( SID_ATTR_GRAF_CONTRAST, nContrast ); 221 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_CONTRAST, SFX_CALLMODE_RECORD, &aContrastItem, 0L); 222 return 0L; 223 } 224 225 ////////////////////////////////////////////////////////////////////////////// 226 227 IMPL_LINK( GraphicPropertyPanel, ModifyTransHdl, void *, EMPTYARG ) 228 { 229 const sal_Int16 nTrans = mpMtrTrans->GetValue(); 230 const SfxInt16Item aTransItem( SID_ATTR_GRAF_TRANSPARENCE, nTrans ); 231 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_TRANSPARENCE, SFX_CALLMODE_RECORD, &aTransItem, 0L); 232 return 0L; 233 } 234 235 ////////////////////////////////////////////////////////////////////////////// 236 237 IMPL_LINK( GraphicPropertyPanel, ClickColorModeHdl, ToolBox *, /* pBox */) 238 { 239 const sal_Int16 nTrans = mpLBColorMode->GetSelectEntryPos(); 240 const SfxInt16Item aTransItem( SID_ATTR_GRAF_MODE, nTrans ); 241 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_MODE, SFX_CALLMODE_RECORD, &aTransItem, 0L); 242 return 0L; 243 } 244 245 ////////////////////////////////////////////////////////////////////////////// 246 247 IMPL_LINK( GraphicPropertyPanel, RedHdl, void*, EMPTYARG ) 248 { 249 const sal_Int16 nRed = mpMtrRed->GetValue(); 250 const SfxInt16Item aRedItem( SID_ATTR_GRAF_RED, nRed ); 251 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_RED, SFX_CALLMODE_RECORD, &aRedItem, 0L); 252 return 0L; 253 } 254 255 ////////////////////////////////////////////////////////////////////////////// 256 257 IMPL_LINK( GraphicPropertyPanel, GreenHdl, void*, EMPTYARG ) 258 { 259 const sal_Int16 nGreen = mpMtrGreen->GetValue(); 260 const SfxInt16Item aGreenItem( SID_ATTR_GRAF_GREEN, nGreen ); 261 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_GREEN, SFX_CALLMODE_RECORD, &aGreenItem, 0L); 262 return 0L; 263 } 264 265 ////////////////////////////////////////////////////////////////////////////// 266 267 IMPL_LINK(GraphicPropertyPanel, BlueHdl, void *, EMPTYARG) 268 { 269 const sal_Int16 nBlue = mpMtrBlue->GetValue(); 270 const SfxInt16Item aBlueItem( SID_ATTR_GRAF_BLUE, nBlue ); 271 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_BLUE, SFX_CALLMODE_RECORD, &aBlueItem, 0L); 272 return 0L; 273 } 274 275 ////////////////////////////////////////////////////////////////////////////// 276 277 IMPL_LINK(GraphicPropertyPanel, GammaHdl, void *, EMPTYARG) 278 { 279 const sal_Int32 nGamma = mpMtrGamma->GetValue(); 280 const SfxInt32Item nGammaItem( SID_ATTR_GRAF_GAMMA, nGamma ); 281 GetBindings()->GetDispatcher()->Execute(SID_ATTR_GRAF_GAMMA, SFX_CALLMODE_RECORD, &nGammaItem, 0L); 282 return 0L; 283 } 284 285 ////////////////////////////////////////////////////////////////////////////// 286 287 void GraphicPropertyPanel::SetupIcons(void) 288 { 289 if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons)) 290 { 291 // todo 292 } 293 else 294 { 295 // todo 296 } 297 } 298 299 ////////////////////////////////////////////////////////////////////////////// 300 301 GraphicPropertyPanel* GraphicPropertyPanel::Create ( 302 Window* pParent, 303 const cssu::Reference<css::frame::XFrame>& rxFrame, 304 SfxBindings* pBindings) 305 { 306 if (pParent == NULL) 307 throw lang::IllegalArgumentException(A2S("no parent Window given to GraphicPropertyPanel::Create"), NULL, 0); 308 if ( ! rxFrame.is()) 309 throw lang::IllegalArgumentException(A2S("no XFrame given to GraphicPropertyPanel::Create"), NULL, 1); 310 if (pBindings == NULL) 311 throw lang::IllegalArgumentException(A2S("no SfxBindings given to GraphicPropertyPanel::Create"), NULL, 2); 312 313 return new GraphicPropertyPanel( 314 pParent, 315 rxFrame, 316 pBindings); 317 } 318 319 ////////////////////////////////////////////////////////////////////////////// 320 321 void GraphicPropertyPanel::DataChanged( 322 const DataChangedEvent& rEvent) 323 { 324 (void)rEvent; 325 326 SetupIcons(); 327 } 328 329 ////////////////////////////////////////////////////////////////////////////// 330 331 void GraphicPropertyPanel::NotifyItemUpdate( 332 sal_uInt16 nSID, 333 SfxItemState eState, 334 const SfxPoolItem* pState, 335 const bool bIsEnabled) 336 { 337 (void)bIsEnabled; 338 339 switch( nSID ) 340 { 341 case SID_ATTR_GRAF_LUMINANCE: 342 { 343 if(eState >= SFX_ITEM_AVAILABLE) 344 { 345 mpMtrBrightness->Enable(); 346 const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); 347 348 if(pItem) 349 { 350 const sal_Int64 nBright = pItem->GetValue(); 351 mpMtrBrightness->SetValue(nBright); 352 } 353 } 354 else if(SFX_ITEM_DISABLED == eState) 355 { 356 mpMtrBrightness->Disable(); 357 } 358 else 359 { 360 mpMtrBrightness->Enable(); 361 mpMtrBrightness->SetText(String()); 362 } 363 break; 364 } 365 case SID_ATTR_GRAF_CONTRAST: 366 { 367 if(eState >= SFX_ITEM_AVAILABLE) 368 { 369 mpMtrContrast->Enable(); 370 const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); 371 372 if(pItem) 373 { 374 const sal_Int64 nContrast = pItem->GetValue(); 375 mpMtrContrast->SetValue(nContrast); 376 } 377 } 378 else if(SFX_ITEM_DISABLED == eState) 379 { 380 mpMtrContrast->Disable(); 381 } 382 else 383 { 384 mpMtrContrast->Enable(); 385 mpMtrContrast->SetText(String()); 386 } 387 break; 388 } 389 case SID_ATTR_GRAF_TRANSPARENCE: 390 { 391 if(eState >= SFX_ITEM_AVAILABLE) 392 { 393 mpMtrTrans->Enable(); 394 const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState); 395 396 if(pItem) 397 { 398 const sal_Int64 nTrans = pItem->GetValue(); 399 mpMtrTrans->SetValue(nTrans); 400 } 401 } 402 else if(SFX_ITEM_DISABLED == eState) 403 { 404 mpMtrTrans->Disable(); 405 } 406 else 407 { 408 mpMtrTrans->Enable(); 409 mpMtrTrans->SetText(String()); 410 } 411 break; 412 } 413 case SID_ATTR_GRAF_MODE: 414 { 415 if(eState >= SFX_ITEM_AVAILABLE) 416 { 417 mpLBColorMode->Enable(); 418 const SfxUInt16Item* pItem = dynamic_cast< const SfxUInt16Item* >(pState); 419 420 if(pItem) 421 { 422 const sal_Int64 nTrans = pItem->GetValue(); 423 mpLBColorMode->SelectEntryPos(nTrans); 424 } 425 } 426 else if(SFX_ITEM_DISABLED == eState) 427 { 428 mpLBColorMode->Disable(); 429 } 430 else 431 { 432 mpLBColorMode->Enable(); 433 mpLBColorMode->SetNoSelection(); 434 } 435 break; 436 } 437 case SID_ATTR_GRAF_RED: 438 { 439 if(eState >= SFX_ITEM_AVAILABLE) 440 { 441 mpMtrRed->Enable(); 442 const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); 443 444 if(pItem) 445 { 446 const sal_Int64 nRed = pItem->GetValue(); 447 mpMtrRed->SetValue( nRed ); 448 } 449 } 450 else if(SFX_ITEM_DISABLED == eState) 451 { 452 mpMtrRed->Disable(); 453 } 454 else 455 { 456 mpMtrRed->Enable(); 457 mpMtrRed->SetText(String()); 458 } 459 break; 460 } 461 case SID_ATTR_GRAF_GREEN: 462 { 463 if(eState >= SFX_ITEM_AVAILABLE) 464 { 465 mpMtrGreen->Enable(); 466 const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); 467 468 if(pItem) 469 { 470 const sal_Int64 nGreen = pItem->GetValue(); 471 mpMtrGreen->SetValue( nGreen ); 472 } 473 } 474 else if(SFX_ITEM_DISABLED == eState) 475 { 476 mpMtrGreen->Disable(); 477 } 478 else 479 { 480 mpMtrGreen->Enable(); 481 mpMtrGreen->SetText(String()); 482 } 483 break; 484 } 485 case SID_ATTR_GRAF_BLUE: 486 { 487 if(eState >= SFX_ITEM_AVAILABLE) 488 { 489 mpMtrBlue->Enable(); 490 const SfxInt16Item* pItem = dynamic_cast< const SfxInt16Item* >(pState); 491 492 if(pItem) 493 { 494 const sal_Int64 nBlue = pItem->GetValue(); 495 mpMtrBlue->SetValue( nBlue ); 496 } 497 } 498 else if(SFX_ITEM_DISABLED == eState) 499 { 500 mpMtrBlue->Disable(); 501 } 502 else 503 { 504 mpMtrBlue->Enable(); 505 mpMtrBlue->SetText(String()); 506 } 507 break; 508 } 509 case SID_ATTR_GRAF_GAMMA: 510 { 511 if(eState >= SFX_ITEM_AVAILABLE) 512 { 513 mpMtrGamma->Enable(); 514 const SfxUInt32Item* pItem = dynamic_cast< const SfxUInt32Item* >(pState); 515 516 if(pItem) 517 { 518 const sal_Int64 nGamma = pItem->GetValue(); 519 mpMtrGamma->SetValue( nGamma ); 520 } 521 } 522 else if(SFX_ITEM_DISABLED == eState) 523 { 524 mpMtrGamma->Disable(); 525 } 526 else 527 { 528 mpMtrGamma->Enable(); 529 mpMtrGamma->SetText(String()); 530 } 531 break; 532 } 533 } 534 } 535 536 537 538 539 SfxBindings* GraphicPropertyPanel::GetBindings() 540 { 541 return mpBindings; 542 } 543 544 545 546 547 void GraphicPropertyPanel::Resize (void) 548 { 549 maLayouter.Layout(); 550 } 551 552 553 554 }} // end of namespace ::svx::sidebar 555