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