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 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svtools.hxx" 26 27 28 #include <svtools/svlbox.hxx> 29 #include <svtools/svlbitm.hxx> 30 #include <vcl/svapp.hxx> 31 #ifndef _SV_BUTTON_HXX 32 #include <vcl/button.hxx> 33 #endif 34 #include <vcl/decoview.hxx> 35 #include <vcl/sound.hxx> 36 #include <vcl/salnativewidgets.hxx> 37 38 #define TABOFFS_NOT_VALID -2000000 39 40 struct SvLBoxButtonData_Impl 41 { 42 SvLBoxEntry* pEntry; 43 sal_Bool bDefaultImages; 44 sal_Bool bShowRadioButton; 45 46 SvLBoxButtonData_Impl() : pEntry( NULL ), bDefaultImages( sal_False ), bShowRadioButton( sal_False ) {} 47 }; 48 49 50 DBG_NAME(SvLBoxButtonData) 51 52 void SvLBoxButtonData::InitData( sal_Bool bImagesFromDefault, bool _bRadioBtn, const Control* pCtrl ) 53 { 54 pImpl = new SvLBoxButtonData_Impl; 55 56 bDataOk = sal_False; 57 eState = SV_BUTTON_UNCHECKED; 58 pImpl->bDefaultImages = bImagesFromDefault; 59 pImpl->bShowRadioButton = ( _bRadioBtn != false ); 60 61 if ( bImagesFromDefault ) 62 SetDefaultImages( pCtrl ); 63 } 64 65 SvLBoxButtonData::SvLBoxButtonData( const Control* pControlForSettings ) 66 { 67 DBG_CTOR(SvLBoxButtonData,0); 68 69 InitData( sal_True, false, pControlForSettings ); 70 } 71 72 SvLBoxButtonData::SvLBoxButtonData( const Control* pControlForSettings, bool _bRadioBtn ) 73 { 74 DBG_CTOR(SvLBoxButtonData,0); 75 76 InitData( sal_True, _bRadioBtn, pControlForSettings ); 77 } 78 79 SvLBoxButtonData::SvLBoxButtonData() 80 { 81 DBG_CTOR(SvLBoxButtonData,0); 82 83 InitData( sal_False, false ); 84 } 85 86 SvLBoxButtonData::~SvLBoxButtonData() 87 { 88 DBG_DTOR(SvLBoxButtonData,0); 89 90 delete pImpl; 91 #ifdef DBG_UTIL 92 pImpl = NULL; 93 #endif 94 } 95 96 void SvLBoxButtonData::CallLink() 97 { 98 DBG_CHKTHIS(SvLBoxButtonData,0); 99 aLink.Call( this ); 100 } 101 102 sal_uInt16 SvLBoxButtonData::GetIndex( sal_uInt16 nItemState ) 103 { 104 DBG_CHKTHIS(SvLBoxButtonData,0); 105 nItemState &= 0x000F; 106 sal_uInt16 nIdx; 107 switch( nItemState ) 108 { 109 case SV_ITEMSTATE_UNCHECKED: 110 nIdx = SV_BMP_UNCHECKED; break; 111 case SV_ITEMSTATE_CHECKED: 112 nIdx = SV_BMP_CHECKED; break; 113 case SV_ITEMSTATE_TRISTATE: 114 nIdx = SV_BMP_TRISTATE; break; 115 case SV_ITEMSTATE_UNCHECKED | SV_ITEMSTATE_HILIGHTED: 116 nIdx = SV_BMP_HIUNCHECKED; break; 117 case SV_ITEMSTATE_CHECKED | SV_ITEMSTATE_HILIGHTED: 118 nIdx = SV_BMP_HICHECKED; break; 119 case SV_ITEMSTATE_TRISTATE | SV_ITEMSTATE_HILIGHTED: 120 nIdx = SV_BMP_HITRISTATE; break; 121 default: 122 nIdx = SV_BMP_UNCHECKED; 123 } 124 return nIdx; 125 } 126 127 void SvLBoxButtonData::SetWidthAndHeight() 128 { 129 DBG_CHKTHIS(SvLBoxButtonData,0); 130 Size aSize = aBmps[0].GetSizePixel(); 131 nWidth = aSize.Width(); 132 nHeight = aSize.Height(); 133 bDataOk = sal_True; 134 } 135 136 137 void SvLBoxButtonData::StoreButtonState( SvLBoxEntry* pActEntry, sal_uInt16 nItemFlags ) 138 { 139 DBG_CHKTHIS(SvLBoxButtonData,0); 140 pImpl->pEntry = pActEntry; 141 eState = ConvertToButtonState( nItemFlags ); 142 } 143 144 SvButtonState SvLBoxButtonData::ConvertToButtonState( sal_uInt16 nItemFlags ) const 145 { 146 DBG_CHKTHIS(SvLBoxButtonData,0); 147 nItemFlags &= (SV_ITEMSTATE_UNCHECKED | 148 SV_ITEMSTATE_CHECKED | 149 SV_ITEMSTATE_TRISTATE); 150 switch( nItemFlags ) 151 { 152 case SV_ITEMSTATE_UNCHECKED: 153 return SV_BUTTON_UNCHECKED; 154 155 case SV_ITEMSTATE_CHECKED: 156 return SV_BUTTON_CHECKED; 157 158 case SV_ITEMSTATE_TRISTATE: 159 return SV_BUTTON_TRISTATE; 160 default: 161 return SV_BUTTON_UNCHECKED; 162 } 163 } 164 165 SvLBoxEntry* SvLBoxButtonData::GetActEntry() const 166 { 167 DBG_ASSERT( pImpl, "-SvLBoxButtonData::GetActEntry(): don't use me that way!" ); 168 return pImpl->pEntry; 169 } 170 171 void SvLBoxButtonData::SetDefaultImages( const Control* pCtrl ) 172 { 173 const AllSettings& rSettings = pCtrl? pCtrl->GetSettings() : Application::GetSettings(); 174 175 if ( pImpl->bShowRadioButton ) 176 { 177 aBmps[ SV_BMP_UNCHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DEFAULT ); 178 aBmps[ SV_BMP_CHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_CHECKED ); 179 aBmps[ SV_BMP_HICHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_CHECKED | BUTTON_DRAW_PRESSED ); 180 aBmps[ SV_BMP_HIUNCHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DEFAULT | BUTTON_DRAW_PRESSED ); 181 aBmps[ SV_BMP_TRISTATE ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DONTKNOW ); 182 aBmps[ SV_BMP_HITRISTATE ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DONTKNOW | BUTTON_DRAW_PRESSED ); 183 } 184 else 185 { 186 aBmps[ SV_BMP_UNCHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DEFAULT ); 187 aBmps[ SV_BMP_CHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_CHECKED ); 188 aBmps[ SV_BMP_HICHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_CHECKED | BUTTON_DRAW_PRESSED ); 189 aBmps[ SV_BMP_HIUNCHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DEFAULT | BUTTON_DRAW_PRESSED ); 190 aBmps[ SV_BMP_TRISTATE ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DONTKNOW ); 191 aBmps[ SV_BMP_HITRISTATE ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DONTKNOW | BUTTON_DRAW_PRESSED ); 192 } 193 } 194 195 sal_Bool SvLBoxButtonData::HasDefaultImages( void ) const 196 { 197 return pImpl->bDefaultImages; 198 } 199 200 sal_Bool SvLBoxButtonData::IsRadio() { 201 return pImpl->bShowRadioButton; 202 } 203 204 // *************************************************************** 205 // class SvLBoxString 206 // *************************************************************** 207 208 DBG_NAME(SvLBoxString); 209 210 SvLBoxString::SvLBoxString( SvLBoxEntry* pEntry,sal_uInt16 nFlags,const XubString& rStr) : 211 SvLBoxItem( pEntry, nFlags ) 212 { 213 DBG_CTOR(SvLBoxString,0); 214 SetText( pEntry, rStr ); 215 } 216 217 SvLBoxString::SvLBoxString() : SvLBoxItem() 218 { 219 DBG_CTOR(SvLBoxString,0); 220 } 221 222 SvLBoxString::~SvLBoxString() 223 { 224 DBG_DTOR(SvLBoxString,0); 225 } 226 227 sal_uInt16 SvLBoxString::IsA() 228 { 229 DBG_CHKTHIS(SvLBoxString,0); 230 return SV_ITEM_ID_LBOXSTRING; 231 } 232 233 void SvLBoxString::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 /* nFlags */, 234 SvLBoxEntry* _pEntry) 235 { 236 DBG_CHKTHIS(SvLBoxString,0); 237 if ( _pEntry ) 238 { 239 sal_uInt16 nStyle = rDev.IsEnabled() ? 0 : TEXT_DRAW_DISABLE; 240 if ( rDev.IsEntryMnemonicsEnabled() ) 241 nStyle |= TEXT_DRAW_MNEMONIC; 242 rDev.DrawText( Rectangle(rPos,GetSize(&rDev,_pEntry)),aStr,nStyle); 243 } 244 else 245 rDev.DrawText( rPos, aStr); 246 247 } 248 249 SvLBoxItem* SvLBoxString::Create() const 250 { 251 DBG_CHKTHIS(SvLBoxString,0); 252 return new SvLBoxString; 253 } 254 255 void SvLBoxString::Clone( SvLBoxItem* pSource ) 256 { 257 DBG_CHKTHIS(SvLBoxString,0); 258 aStr = ((SvLBoxString*)pSource)->aStr; 259 } 260 261 void SvLBoxString::SetText( SvLBoxEntry*, const XubString& rStr ) 262 { 263 DBG_CHKTHIS(SvLBoxString,0); 264 aStr = rStr; 265 } 266 267 void SvLBoxString::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, 268 SvViewDataItem* pViewData) 269 { 270 DBG_CHKTHIS(SvLBoxString,0); 271 if( !pViewData ) 272 pViewData = pView->GetViewDataItem( pEntry, this ); 273 pViewData->aSize = Size(pView->GetTextWidth( aStr ), pView->GetTextHeight()); 274 } 275 276 // *************************************************************** 277 // class SvLBoxBmp 278 // *************************************************************** 279 280 DBG_NAME(SvLBoxBmp); 281 282 SvLBoxBmp::SvLBoxBmp( SvLBoxEntry* pEntry, sal_uInt16 nFlags, Image aBitmap ) : 283 SvLBoxItem( pEntry, nFlags ) 284 { 285 DBG_CTOR(SvLBoxBmp,0); 286 SetBitmap( pEntry, aBitmap); 287 } 288 289 SvLBoxBmp::SvLBoxBmp() : SvLBoxItem() 290 { 291 DBG_CTOR(SvLBoxBmp,0); 292 } 293 294 SvLBoxBmp::~SvLBoxBmp() 295 { 296 DBG_DTOR(SvLBoxBmp,0); 297 } 298 299 sal_uInt16 SvLBoxBmp::IsA() 300 { 301 DBG_CHKTHIS(SvLBoxBmp,0); 302 return SV_ITEM_ID_LBOXBMP; 303 } 304 305 void SvLBoxBmp::SetBitmap( SvLBoxEntry*, Image aBitmap) 306 { 307 DBG_CHKTHIS(SvLBoxBmp,0); 308 aBmp = aBitmap; 309 } 310 311 void SvLBoxBmp::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, 312 SvViewDataItem* pViewData) 313 { 314 DBG_CHKTHIS(SvLBoxBmp,0); 315 if( !pViewData ) 316 pViewData = pView->GetViewDataItem( pEntry, this ); 317 pViewData->aSize = aBmp.GetSizePixel(); 318 } 319 320 void SvLBoxBmp::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 /* nFlags */, 321 SvLBoxEntry* ) 322 { 323 DBG_CHKTHIS(SvLBoxBmp,0); 324 sal_uInt16 nStyle = rDev.IsEnabled() ? 0 : IMAGE_DRAW_DISABLE; 325 rDev.DrawImage( rPos, aBmp ,nStyle); 326 } 327 328 SvLBoxItem* SvLBoxBmp::Create() const 329 { 330 DBG_CHKTHIS(SvLBoxBmp,0); 331 return new SvLBoxBmp; 332 } 333 334 void SvLBoxBmp::Clone( SvLBoxItem* pSource ) 335 { 336 DBG_CHKTHIS(SvLBoxBmp,0); 337 aBmp = ((SvLBoxBmp*)pSource)->aBmp; 338 } 339 340 // *************************************************************** 341 // class SvLBoxButton 342 // *************************************************************** 343 344 DBG_NAME(SvLBoxButton); 345 346 SvLBoxButton::SvLBoxButton( SvLBoxEntry* pEntry, SvLBoxButtonKind eTheKind, 347 sal_uInt16 nFlags, SvLBoxButtonData* pBData ) 348 : SvLBoxItem( pEntry, nFlags ) 349 { 350 DBG_CTOR(SvLBoxButton,0); 351 eKind = eTheKind; 352 nBaseOffs = 0; 353 nItemFlags = 0; 354 SetStateUnchecked(); 355 pData = pBData; 356 } 357 358 SvLBoxButton::SvLBoxButton() : SvLBoxItem() 359 { 360 DBG_CTOR(SvLBoxButton,0); 361 eKind = SvLBoxButtonKind_enabledCheckbox; 362 nItemFlags = 0; 363 SetStateUnchecked(); 364 } 365 366 SvLBoxButton::~SvLBoxButton() 367 { 368 DBG_DTOR(SvLBoxButton,0); 369 } 370 371 sal_uInt16 SvLBoxButton::IsA() 372 { 373 DBG_CHKTHIS(SvLBoxButton,0); 374 return SV_ITEM_ID_LBOXBUTTON; 375 } 376 377 void SvLBoxButton::Check(SvLBox*, SvLBoxEntry*, sal_Bool bOn) 378 { 379 DBG_CHKTHIS(SvLBoxButton,0); 380 if ( bOn != IsStateChecked() ) 381 { 382 if ( bOn ) 383 SetStateChecked(); 384 else 385 SetStateUnchecked(); 386 } 387 } 388 389 sal_Bool SvLBoxButton::ClickHdl( SvLBox*, SvLBoxEntry* pEntry ) 390 { 391 DBG_CHKTHIS(SvLBoxButton,0); 392 if ( CheckModification() ) 393 { 394 if ( IsStateChecked() ) 395 SetStateUnchecked(); 396 else 397 SetStateChecked(); 398 pData->StoreButtonState( pEntry, nItemFlags ); 399 pData->CallLink(); 400 } 401 return sal_False; 402 } 403 404 void SvLBoxButton::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 /* nFlags */, 405 SvLBoxEntry* /*pEntry*/ ) 406 { 407 DBG_CHKTHIS(SvLBoxButton,0); 408 sal_uInt16 nIndex = eKind == SvLBoxButtonKind_staticImage 409 ? SV_BMP_STATICIMAGE : pData->GetIndex( nItemFlags ); 410 sal_uInt16 nStyle = eKind != SvLBoxButtonKind_disabledCheckbox && 411 rDev.IsEnabled() ? 0 : IMAGE_DRAW_DISABLE; 412 413 /// 414 //Native drawing 415 /// 416 sal_Bool bNativeOK = sal_False; 417 ControlType eCtrlType = (pData->IsRadio())? CTRL_RADIOBUTTON : CTRL_CHECKBOX; 418 if ( nIndex != SV_BMP_STATICIMAGE && rDev.IsNativeControlSupported( eCtrlType, PART_ENTIRE_CONTROL) ) 419 { 420 Size aSize(pData->Width(), pData->Height()); 421 ImplAdjustBoxSize( aSize, eCtrlType, &rDev ); 422 ImplControlValue aControlValue; 423 Rectangle aCtrlRegion( rPos, aSize ); 424 ControlState nState = 0; 425 426 //states CTRL_STATE_DEFAULT, CTRL_STATE_PRESSED and CTRL_STATE_ROLLOVER are not implemented 427 if ( IsStateHilighted() ) nState |= CTRL_STATE_FOCUSED; 428 if ( nStyle != IMAGE_DRAW_DISABLE ) nState |= CTRL_STATE_ENABLED; 429 430 if ( IsStateChecked() ) 431 aControlValue.setTristateVal( BUTTONVALUE_ON ); 432 else if ( IsStateUnchecked() ) 433 aControlValue.setTristateVal( BUTTONVALUE_OFF ); 434 else if ( IsStateTristate() ) 435 aControlValue.setTristateVal( BUTTONVALUE_MIXED ); 436 437 bNativeOK = rDev.DrawNativeControl( eCtrlType, PART_ENTIRE_CONTROL, 438 aCtrlRegion, nState, aControlValue, rtl::OUString() ); 439 } 440 441 if( !bNativeOK) 442 rDev.DrawImage( rPos, pData->aBmps[nIndex + nBaseOffs] ,nStyle); 443 } 444 445 SvLBoxItem* SvLBoxButton::Create() const 446 { 447 DBG_CHKTHIS(SvLBoxButton,0); 448 return new SvLBoxButton; 449 } 450 451 void SvLBoxButton::Clone( SvLBoxItem* pSource ) 452 { 453 DBG_CHKTHIS(SvLBoxButton,0); 454 pData = ((SvLBoxButton*)pSource)->pData; 455 } 456 457 void SvLBoxButton::ImplAdjustBoxSize( Size& io_rSize, ControlType i_eType, Window* i_pParent ) 458 { 459 if ( i_pParent->IsNativeControlSupported( i_eType, PART_ENTIRE_CONTROL) ) 460 { 461 ImplControlValue aControlValue; 462 Rectangle aCtrlRegion( Point( 0, 0 ), io_rSize ); 463 ControlState nState = CTRL_STATE_ENABLED; 464 465 aControlValue.setTristateVal( BUTTONVALUE_ON ); 466 467 Rectangle aNativeBounds, aNativeContent; 468 bool bNativeOK = i_pParent->GetNativeControlRegion( i_eType, 469 PART_ENTIRE_CONTROL, 470 aCtrlRegion, 471 nState, 472 aControlValue, 473 rtl::OUString(), 474 aNativeBounds, 475 aNativeContent ); 476 if( bNativeOK ) 477 { 478 Size aContentSize( aNativeContent.GetSize() ); 479 // leave a little space around the box image (looks better 480 if( aContentSize.Height() + 2 > io_rSize.Height() ) 481 io_rSize.Height() = aContentSize.Height() + 2; 482 } 483 } 484 } 485 486 void SvLBoxButton::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, 487 SvViewDataItem* pViewData ) 488 { 489 DBG_CHKTHIS(SvLBoxButton,0); 490 if( !pViewData ) 491 pViewData = pView->GetViewDataItem( pEntry, this ); 492 Size aSize( pData->Width(), pData->Height() ); 493 494 ControlType eCtrlType = (pData->IsRadio())? CTRL_RADIOBUTTON : CTRL_CHECKBOX; 495 if ( eKind != SvLBoxButtonKind_staticImage && pView ) 496 ImplAdjustBoxSize( aSize, eCtrlType, pView ); 497 pViewData->aSize = aSize; 498 } 499 500 bool SvLBoxButton::CheckModification() const 501 { 502 if( eKind == SvLBoxButtonKind_disabledCheckbox ) 503 Sound::Beep(); 504 return eKind == SvLBoxButtonKind_enabledCheckbox; 505 } 506 507 // *************************************************************** 508 // class SvLBoxContextBmp 509 // *************************************************************** 510 511 struct SvLBoxContextBmp_Impl 512 { 513 Image m_aImage1; 514 Image m_aImage2; 515 516 Image m_aImage1_hc; 517 Image m_aImage2_hc; 518 519 sal_uInt16 m_nB2IndicatorFlags; 520 }; 521 522 // *************************************************************** 523 DBG_NAME(SvLBoxContextBmp) 524 525 SvLBoxContextBmp::SvLBoxContextBmp( SvLBoxEntry* pEntry, sal_uInt16 nItemFlags, 526 Image aBmp1, Image aBmp2, sal_uInt16 nEntryFlags ) 527 :SvLBoxItem( pEntry, nItemFlags ) 528 ,m_pImpl( new SvLBoxContextBmp_Impl ) 529 { 530 DBG_CTOR(SvLBoxContextBmp,0); 531 532 m_pImpl->m_nB2IndicatorFlags = nEntryFlags; 533 SetModeImages( aBmp1, aBmp2 ); 534 } 535 536 SvLBoxContextBmp::SvLBoxContextBmp() 537 :SvLBoxItem( ) 538 ,m_pImpl( new SvLBoxContextBmp_Impl ) 539 { 540 m_pImpl->m_nB2IndicatorFlags = 0; 541 DBG_CTOR(SvLBoxContextBmp,0); 542 } 543 544 SvLBoxContextBmp::~SvLBoxContextBmp() 545 { 546 delete m_pImpl; 547 DBG_DTOR(SvLBoxContextBmp,0); 548 } 549 550 sal_uInt16 SvLBoxContextBmp::IsA() 551 { 552 DBG_CHKTHIS(SvLBoxContextBmp,0); 553 return SV_ITEM_ID_LBOXCONTEXTBMP; 554 } 555 556 sal_Bool SvLBoxContextBmp::SetModeImages( const Image& _rBitmap1, const Image& _rBitmap2, BmpColorMode _eMode ) 557 { 558 DBG_CHKTHIS(SvLBoxContextBmp,0); 559 560 sal_Bool bSuccess = sal_True; 561 switch ( _eMode ) 562 { 563 case BMP_COLOR_NORMAL: 564 m_pImpl->m_aImage1 = _rBitmap1; 565 m_pImpl->m_aImage2 = _rBitmap2; 566 break; 567 568 case BMP_COLOR_HIGHCONTRAST: 569 m_pImpl->m_aImage1_hc = _rBitmap1; 570 m_pImpl->m_aImage2_hc = _rBitmap2; 571 break; 572 573 default: 574 DBG_ERROR( "SvLBoxContextBmp::SetModeImages: unexpected mode!"); 575 bSuccess = sal_False; 576 break; 577 } 578 return bSuccess; 579 } 580 581 Image& SvLBoxContextBmp::implGetImageStore( sal_Bool _bFirst, BmpColorMode _eMode ) 582 { 583 DBG_CHKTHIS(SvLBoxContextBmp,0); 584 585 switch ( _eMode ) 586 { 587 case BMP_COLOR_NORMAL: 588 return _bFirst ? m_pImpl->m_aImage1 : m_pImpl->m_aImage2; 589 590 case BMP_COLOR_HIGHCONTRAST: 591 return _bFirst ? m_pImpl->m_aImage1_hc : m_pImpl->m_aImage2_hc; 592 593 default: 594 DBG_ERROR( "SvLBoxContextBmp::implGetImageStore: unexpected mode!"); 595 } 596 597 // OJ: #i27071# wrong mode so we just return the normal images 598 return _bFirst ? m_pImpl->m_aImage1 : m_pImpl->m_aImage2; 599 } 600 601 void SvLBoxContextBmp::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, 602 SvViewDataItem* pViewData) 603 { 604 DBG_CHKTHIS(SvLBoxContextBmp,0); 605 if( !pViewData ) 606 pViewData = pView->GetViewDataItem( pEntry, this ); 607 pViewData->aSize = m_pImpl->m_aImage1.GetSizePixel(); 608 } 609 610 void SvLBoxContextBmp::Paint( const Point& _rPos, SvLBox& _rDev, 611 sal_uInt16 _nViewDataEntryFlags, SvLBoxEntry* _pEntry ) 612 { 613 DBG_CHKTHIS(SvLBoxContextBmp,0); 614 615 // determine the image set 616 BmpColorMode eMode( BMP_COLOR_NORMAL ); 617 if ( !!m_pImpl->m_aImage1_hc ) 618 { // we really have HC images 619 if ( _rDev.GetSettings().GetStyleSettings().GetHighContrastMode() ) 620 eMode = BMP_COLOR_HIGHCONTRAST; 621 } 622 623 // get the image 624 const Image& rImage = implGetImageStore( 0 == ( _nViewDataEntryFlags & m_pImpl->m_nB2IndicatorFlags ), eMode ); 625 626 sal_Bool _bSemiTransparent = _pEntry && ( 0 != ( SV_ENTRYFLAG_SEMITRANSPARENT & _pEntry->GetFlags( ) ) ); 627 // draw 628 sal_uInt16 nStyle = _rDev.IsEnabled() ? 0 : IMAGE_DRAW_DISABLE; 629 if ( _bSemiTransparent ) 630 nStyle |= IMAGE_DRAW_SEMITRANSPARENT; 631 _rDev.DrawImage( _rPos, rImage, nStyle); 632 } 633 634 SvLBoxItem* SvLBoxContextBmp::Create() const 635 { 636 DBG_CHKTHIS(SvLBoxContextBmp,0); 637 return new SvLBoxContextBmp; 638 } 639 640 void SvLBoxContextBmp::Clone( SvLBoxItem* pSource ) 641 { 642 DBG_CHKTHIS(SvLBoxContextBmp,0); 643 m_pImpl->m_aImage1 = static_cast< SvLBoxContextBmp* >( pSource )->m_pImpl->m_aImage1; 644 m_pImpl->m_aImage2 = static_cast< SvLBoxContextBmp* >( pSource )->m_pImpl->m_aImage2; 645 m_pImpl->m_nB2IndicatorFlags = static_cast< SvLBoxContextBmp* >( pSource )->m_pImpl->m_nB2IndicatorFlags; 646 } 647 648