| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_svtools.hxx" |
| |
| |
| #include <svtools/svlbox.hxx> |
| #include <svtools/svlbitm.hxx> |
| #include <vcl/svapp.hxx> |
| #ifndef _SV_BUTTON_HXX |
| #include <vcl/button.hxx> |
| #endif |
| #include <vcl/decoview.hxx> |
| #include <vcl/sound.hxx> |
| #include <vcl/salnativewidgets.hxx> |
| |
| #define TABOFFS_NOT_VALID -2000000 |
| |
| struct SvLBoxButtonData_Impl |
| { |
| SvLBoxEntry* pEntry; |
| sal_Bool bDefaultImages; |
| sal_Bool bShowRadioButton; |
| |
| SvLBoxButtonData_Impl() : pEntry( NULL ), bDefaultImages( sal_False ), bShowRadioButton( sal_False ) {} |
| }; |
| |
| |
| DBG_NAME(SvLBoxButtonData) |
| |
| void SvLBoxButtonData::InitData( sal_Bool bImagesFromDefault, bool _bRadioBtn, const Control* pCtrl ) |
| { |
| pImpl = new SvLBoxButtonData_Impl; |
| |
| bDataOk = sal_False; |
| eState = SV_BUTTON_UNCHECKED; |
| pImpl->bDefaultImages = bImagesFromDefault; |
| pImpl->bShowRadioButton = ( _bRadioBtn != false ); |
| |
| if ( bImagesFromDefault ) |
| SetDefaultImages( pCtrl ); |
| } |
| |
| SvLBoxButtonData::SvLBoxButtonData( const Control* pControlForSettings ) |
| { |
| DBG_CTOR(SvLBoxButtonData,0); |
| |
| InitData( sal_True, false, pControlForSettings ); |
| } |
| |
| SvLBoxButtonData::SvLBoxButtonData( const Control* pControlForSettings, bool _bRadioBtn ) |
| { |
| DBG_CTOR(SvLBoxButtonData,0); |
| |
| InitData( sal_True, _bRadioBtn, pControlForSettings ); |
| } |
| |
| SvLBoxButtonData::SvLBoxButtonData() |
| { |
| DBG_CTOR(SvLBoxButtonData,0); |
| |
| InitData( sal_False, false ); |
| } |
| |
| SvLBoxButtonData::~SvLBoxButtonData() |
| { |
| DBG_DTOR(SvLBoxButtonData,0); |
| |
| delete pImpl; |
| #ifdef DBG_UTIL |
| pImpl = NULL; |
| #endif |
| } |
| |
| void SvLBoxButtonData::CallLink() |
| { |
| DBG_CHKTHIS(SvLBoxButtonData,0); |
| aLink.Call( this ); |
| } |
| |
| sal_uInt16 SvLBoxButtonData::GetIndex( sal_uInt16 nItemState ) |
| { |
| DBG_CHKTHIS(SvLBoxButtonData,0); |
| nItemState &= 0x000F; |
| sal_uInt16 nIdx; |
| switch( nItemState ) |
| { |
| case SV_ITEMSTATE_UNCHECKED: |
| nIdx = SV_BMP_UNCHECKED; break; |
| case SV_ITEMSTATE_CHECKED: |
| nIdx = SV_BMP_CHECKED; break; |
| case SV_ITEMSTATE_TRISTATE: |
| nIdx = SV_BMP_TRISTATE; break; |
| case SV_ITEMSTATE_UNCHECKED | SV_ITEMSTATE_HILIGHTED: |
| nIdx = SV_BMP_HIUNCHECKED; break; |
| case SV_ITEMSTATE_CHECKED | SV_ITEMSTATE_HILIGHTED: |
| nIdx = SV_BMP_HICHECKED; break; |
| case SV_ITEMSTATE_TRISTATE | SV_ITEMSTATE_HILIGHTED: |
| nIdx = SV_BMP_HITRISTATE; break; |
| default: |
| nIdx = SV_BMP_UNCHECKED; |
| } |
| return nIdx; |
| } |
| |
| void SvLBoxButtonData::SetWidthAndHeight() |
| { |
| DBG_CHKTHIS(SvLBoxButtonData,0); |
| Size aSize = aBmps[0].GetSizePixel(); |
| nWidth = aSize.Width(); |
| nHeight = aSize.Height(); |
| bDataOk = sal_True; |
| } |
| |
| |
| void SvLBoxButtonData::StoreButtonState( SvLBoxEntry* pActEntry, sal_uInt16 nItemFlags ) |
| { |
| DBG_CHKTHIS(SvLBoxButtonData,0); |
| pImpl->pEntry = pActEntry; |
| eState = ConvertToButtonState( nItemFlags ); |
| } |
| |
| SvButtonState SvLBoxButtonData::ConvertToButtonState( sal_uInt16 nItemFlags ) const |
| { |
| DBG_CHKTHIS(SvLBoxButtonData,0); |
| nItemFlags &= (SV_ITEMSTATE_UNCHECKED | |
| SV_ITEMSTATE_CHECKED | |
| SV_ITEMSTATE_TRISTATE); |
| switch( nItemFlags ) |
| { |
| case SV_ITEMSTATE_UNCHECKED: |
| return SV_BUTTON_UNCHECKED; |
| |
| case SV_ITEMSTATE_CHECKED: |
| return SV_BUTTON_CHECKED; |
| |
| case SV_ITEMSTATE_TRISTATE: |
| return SV_BUTTON_TRISTATE; |
| default: |
| return SV_BUTTON_UNCHECKED; |
| } |
| } |
| |
| SvLBoxEntry* SvLBoxButtonData::GetActEntry() const |
| { |
| DBG_ASSERT( pImpl, "-SvLBoxButtonData::GetActEntry(): don't use me that way!" ); |
| return pImpl->pEntry; |
| } |
| |
| void SvLBoxButtonData::SetDefaultImages( const Control* pCtrl ) |
| { |
| const AllSettings& rSettings = pCtrl? pCtrl->GetSettings() : Application::GetSettings(); |
| |
| if ( pImpl->bShowRadioButton ) |
| { |
| aBmps[ SV_BMP_UNCHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DEFAULT ); |
| aBmps[ SV_BMP_CHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_CHECKED ); |
| aBmps[ SV_BMP_HICHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_CHECKED | BUTTON_DRAW_PRESSED ); |
| aBmps[ SV_BMP_HIUNCHECKED ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DEFAULT | BUTTON_DRAW_PRESSED ); |
| aBmps[ SV_BMP_TRISTATE ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DONTKNOW ); |
| aBmps[ SV_BMP_HITRISTATE ] = RadioButton::GetRadioImage( rSettings, BUTTON_DRAW_DONTKNOW | BUTTON_DRAW_PRESSED ); |
| } |
| else |
| { |
| aBmps[ SV_BMP_UNCHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DEFAULT ); |
| aBmps[ SV_BMP_CHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_CHECKED ); |
| aBmps[ SV_BMP_HICHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_CHECKED | BUTTON_DRAW_PRESSED ); |
| aBmps[ SV_BMP_HIUNCHECKED ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DEFAULT | BUTTON_DRAW_PRESSED ); |
| aBmps[ SV_BMP_TRISTATE ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DONTKNOW ); |
| aBmps[ SV_BMP_HITRISTATE ] = CheckBox::GetCheckImage( rSettings, BUTTON_DRAW_DONTKNOW | BUTTON_DRAW_PRESSED ); |
| } |
| } |
| |
| sal_Bool SvLBoxButtonData::HasDefaultImages( void ) const |
| { |
| return pImpl->bDefaultImages; |
| } |
| |
| sal_Bool SvLBoxButtonData::IsRadio() { |
| return pImpl->bShowRadioButton; |
| } |
| |
| // *************************************************************** |
| // class SvLBoxString |
| // *************************************************************** |
| |
| DBG_NAME(SvLBoxString); |
| |
| SvLBoxString::SvLBoxString( SvLBoxEntry* pEntry,sal_uInt16 nFlags,const XubString& rStr) : |
| SvLBoxItem( pEntry, nFlags ) |
| { |
| DBG_CTOR(SvLBoxString,0); |
| SetText( pEntry, rStr ); |
| } |
| |
| SvLBoxString::SvLBoxString() : SvLBoxItem() |
| { |
| DBG_CTOR(SvLBoxString,0); |
| } |
| |
| SvLBoxString::~SvLBoxString() |
| { |
| DBG_DTOR(SvLBoxString,0); |
| } |
| |
| sal_uInt16 SvLBoxString::IsA() |
| { |
| DBG_CHKTHIS(SvLBoxString,0); |
| return SV_ITEM_ID_LBOXSTRING; |
| } |
| |
| void SvLBoxString::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 /* nFlags */, |
| SvLBoxEntry* _pEntry) |
| { |
| DBG_CHKTHIS(SvLBoxString,0); |
| if ( _pEntry ) |
| { |
| sal_uInt16 nStyle = rDev.IsEnabled() ? 0 : TEXT_DRAW_DISABLE; |
| if ( rDev.IsEntryMnemonicsEnabled() ) |
| nStyle |= TEXT_DRAW_MNEMONIC; |
| rDev.DrawText( Rectangle(rPos,GetSize(&rDev,_pEntry)),aStr,nStyle); |
| } |
| else |
| rDev.DrawText( rPos, aStr); |
| |
| } |
| |
| SvLBoxItem* SvLBoxString::Create() const |
| { |
| DBG_CHKTHIS(SvLBoxString,0); |
| return new SvLBoxString; |
| } |
| |
| void SvLBoxString::Clone( SvLBoxItem* pSource ) |
| { |
| DBG_CHKTHIS(SvLBoxString,0); |
| aStr = ((SvLBoxString*)pSource)->aStr; |
| } |
| |
| void SvLBoxString::SetText( SvLBoxEntry*, const XubString& rStr ) |
| { |
| DBG_CHKTHIS(SvLBoxString,0); |
| aStr = rStr; |
| } |
| |
| void SvLBoxString::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, |
| SvViewDataItem* pViewData) |
| { |
| DBG_CHKTHIS(SvLBoxString,0); |
| if( !pViewData ) |
| pViewData = pView->GetViewDataItem( pEntry, this ); |
| pViewData->aSize = Size(pView->GetTextWidth( aStr ), pView->GetTextHeight()); |
| } |
| |
| // *************************************************************** |
| // class SvLBoxBmp |
| // *************************************************************** |
| |
| DBG_NAME(SvLBoxBmp); |
| |
| SvLBoxBmp::SvLBoxBmp( SvLBoxEntry* pEntry, sal_uInt16 nFlags, Image aBitmap ) : |
| SvLBoxItem( pEntry, nFlags ) |
| { |
| DBG_CTOR(SvLBoxBmp,0); |
| SetBitmap( pEntry, aBitmap); |
| } |
| |
| SvLBoxBmp::SvLBoxBmp() : SvLBoxItem() |
| { |
| DBG_CTOR(SvLBoxBmp,0); |
| } |
| |
| SvLBoxBmp::~SvLBoxBmp() |
| { |
| DBG_DTOR(SvLBoxBmp,0); |
| } |
| |
| sal_uInt16 SvLBoxBmp::IsA() |
| { |
| DBG_CHKTHIS(SvLBoxBmp,0); |
| return SV_ITEM_ID_LBOXBMP; |
| } |
| |
| void SvLBoxBmp::SetBitmap( SvLBoxEntry*, Image aBitmap) |
| { |
| DBG_CHKTHIS(SvLBoxBmp,0); |
| aBmp = aBitmap; |
| } |
| |
| void SvLBoxBmp::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, |
| SvViewDataItem* pViewData) |
| { |
| DBG_CHKTHIS(SvLBoxBmp,0); |
| if( !pViewData ) |
| pViewData = pView->GetViewDataItem( pEntry, this ); |
| pViewData->aSize = aBmp.GetSizePixel(); |
| } |
| |
| void SvLBoxBmp::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 /* nFlags */, |
| SvLBoxEntry* ) |
| { |
| DBG_CHKTHIS(SvLBoxBmp,0); |
| sal_uInt16 nStyle = rDev.IsEnabled() ? 0 : IMAGE_DRAW_DISABLE; |
| rDev.DrawImage( rPos, aBmp ,nStyle); |
| } |
| |
| SvLBoxItem* SvLBoxBmp::Create() const |
| { |
| DBG_CHKTHIS(SvLBoxBmp,0); |
| return new SvLBoxBmp; |
| } |
| |
| void SvLBoxBmp::Clone( SvLBoxItem* pSource ) |
| { |
| DBG_CHKTHIS(SvLBoxBmp,0); |
| aBmp = ((SvLBoxBmp*)pSource)->aBmp; |
| } |
| |
| // *************************************************************** |
| // class SvLBoxButton |
| // *************************************************************** |
| |
| DBG_NAME(SvLBoxButton); |
| |
| SvLBoxButton::SvLBoxButton( SvLBoxEntry* pEntry, SvLBoxButtonKind eTheKind, |
| sal_uInt16 nFlags, SvLBoxButtonData* pBData ) |
| : SvLBoxItem( pEntry, nFlags ) |
| { |
| DBG_CTOR(SvLBoxButton,0); |
| eKind = eTheKind; |
| nBaseOffs = 0; |
| nItemFlags = 0; |
| SetStateUnchecked(); |
| pData = pBData; |
| } |
| |
| SvLBoxButton::SvLBoxButton() : SvLBoxItem() |
| { |
| DBG_CTOR(SvLBoxButton,0); |
| eKind = SvLBoxButtonKind_enabledCheckbox; |
| nItemFlags = 0; |
| SetStateUnchecked(); |
| } |
| |
| SvLBoxButton::~SvLBoxButton() |
| { |
| DBG_DTOR(SvLBoxButton,0); |
| } |
| |
| sal_uInt16 SvLBoxButton::IsA() |
| { |
| DBG_CHKTHIS(SvLBoxButton,0); |
| return SV_ITEM_ID_LBOXBUTTON; |
| } |
| |
| void SvLBoxButton::Check(SvLBox*, SvLBoxEntry*, sal_Bool bOn) |
| { |
| DBG_CHKTHIS(SvLBoxButton,0); |
| if ( bOn != IsStateChecked() ) |
| { |
| if ( bOn ) |
| SetStateChecked(); |
| else |
| SetStateUnchecked(); |
| } |
| } |
| |
| sal_Bool SvLBoxButton::ClickHdl( SvLBox*, SvLBoxEntry* pEntry ) |
| { |
| DBG_CHKTHIS(SvLBoxButton,0); |
| if ( CheckModification() ) |
| { |
| if ( IsStateChecked() ) |
| SetStateUnchecked(); |
| else |
| SetStateChecked(); |
| pData->StoreButtonState( pEntry, nItemFlags ); |
| pData->CallLink(); |
| } |
| return sal_False; |
| } |
| |
| void SvLBoxButton::Paint( const Point& rPos, SvLBox& rDev, sal_uInt16 /* nFlags */, |
| SvLBoxEntry* /*pEntry*/ ) |
| { |
| DBG_CHKTHIS(SvLBoxButton,0); |
| sal_uInt16 nIndex = eKind == SvLBoxButtonKind_staticImage |
| ? SV_BMP_STATICIMAGE : pData->GetIndex( nItemFlags ); |
| sal_uInt16 nStyle = eKind != SvLBoxButtonKind_disabledCheckbox && |
| rDev.IsEnabled() ? 0 : IMAGE_DRAW_DISABLE; |
| |
| /// |
| //Native drawing |
| /// |
| sal_Bool bNativeOK = sal_False; |
| ControlType eCtrlType = (pData->IsRadio())? CTRL_RADIOBUTTON : CTRL_CHECKBOX; |
| if ( nIndex != SV_BMP_STATICIMAGE && rDev.IsNativeControlSupported( eCtrlType, PART_ENTIRE_CONTROL) ) |
| { |
| Size aSize(pData->Width(), pData->Height()); |
| ImplAdjustBoxSize( aSize, eCtrlType, &rDev ); |
| ImplControlValue aControlValue; |
| Rectangle aCtrlRegion( rPos, aSize ); |
| ControlState nState = 0; |
| |
| //states CTRL_STATE_DEFAULT, CTRL_STATE_PRESSED and CTRL_STATE_ROLLOVER are not implemented |
| if ( IsStateHilighted() ) nState |= CTRL_STATE_FOCUSED; |
| if ( nStyle != IMAGE_DRAW_DISABLE ) nState |= CTRL_STATE_ENABLED; |
| |
| if ( IsStateChecked() ) |
| aControlValue.setTristateVal( BUTTONVALUE_ON ); |
| else if ( IsStateUnchecked() ) |
| aControlValue.setTristateVal( BUTTONVALUE_OFF ); |
| else if ( IsStateTristate() ) |
| aControlValue.setTristateVal( BUTTONVALUE_MIXED ); |
| |
| bNativeOK = rDev.DrawNativeControl( eCtrlType, PART_ENTIRE_CONTROL, |
| aCtrlRegion, nState, aControlValue, rtl::OUString() ); |
| } |
| |
| if( !bNativeOK) |
| rDev.DrawImage( rPos, pData->aBmps[nIndex + nBaseOffs] ,nStyle); |
| } |
| |
| SvLBoxItem* SvLBoxButton::Create() const |
| { |
| DBG_CHKTHIS(SvLBoxButton,0); |
| return new SvLBoxButton; |
| } |
| |
| void SvLBoxButton::Clone( SvLBoxItem* pSource ) |
| { |
| DBG_CHKTHIS(SvLBoxButton,0); |
| pData = ((SvLBoxButton*)pSource)->pData; |
| } |
| |
| void SvLBoxButton::ImplAdjustBoxSize( Size& io_rSize, ControlType i_eType, Window* i_pParent ) |
| { |
| if ( i_pParent->IsNativeControlSupported( i_eType, PART_ENTIRE_CONTROL) ) |
| { |
| ImplControlValue aControlValue; |
| Rectangle aCtrlRegion( Point( 0, 0 ), io_rSize ); |
| ControlState nState = CTRL_STATE_ENABLED; |
| |
| aControlValue.setTristateVal( BUTTONVALUE_ON ); |
| |
| Rectangle aNativeBounds, aNativeContent; |
| bool bNativeOK = i_pParent->GetNativeControlRegion( i_eType, |
| PART_ENTIRE_CONTROL, |
| aCtrlRegion, |
| nState, |
| aControlValue, |
| rtl::OUString(), |
| aNativeBounds, |
| aNativeContent ); |
| if( bNativeOK ) |
| { |
| Size aContentSize( aNativeContent.GetSize() ); |
| // leave a little space around the box image (looks better |
| if( aContentSize.Height() + 2 > io_rSize.Height() ) |
| io_rSize.Height() = aContentSize.Height() + 2; |
| } |
| } |
| } |
| |
| void SvLBoxButton::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, |
| SvViewDataItem* pViewData ) |
| { |
| DBG_CHKTHIS(SvLBoxButton,0); |
| if( !pViewData ) |
| pViewData = pView->GetViewDataItem( pEntry, this ); |
| Size aSize( pData->Width(), pData->Height() ); |
| |
| ControlType eCtrlType = (pData->IsRadio())? CTRL_RADIOBUTTON : CTRL_CHECKBOX; |
| if ( eKind != SvLBoxButtonKind_staticImage && pView ) |
| ImplAdjustBoxSize( aSize, eCtrlType, pView ); |
| pViewData->aSize = aSize; |
| } |
| |
| bool SvLBoxButton::CheckModification() const |
| { |
| if( eKind == SvLBoxButtonKind_disabledCheckbox ) |
| Sound::Beep(); |
| return eKind == SvLBoxButtonKind_enabledCheckbox; |
| } |
| |
| // *************************************************************** |
| // class SvLBoxContextBmp |
| // *************************************************************** |
| |
| struct SvLBoxContextBmp_Impl |
| { |
| Image m_aImage1; |
| Image m_aImage2; |
| |
| Image m_aImage1_hc; |
| Image m_aImage2_hc; |
| |
| sal_uInt16 m_nB2IndicatorFlags; |
| }; |
| |
| // *************************************************************** |
| DBG_NAME(SvLBoxContextBmp) |
| |
| SvLBoxContextBmp::SvLBoxContextBmp( SvLBoxEntry* pEntry, sal_uInt16 nItemFlags, |
| Image aBmp1, Image aBmp2, sal_uInt16 nEntryFlags ) |
| :SvLBoxItem( pEntry, nItemFlags ) |
| ,m_pImpl( new SvLBoxContextBmp_Impl ) |
| { |
| DBG_CTOR(SvLBoxContextBmp,0); |
| |
| m_pImpl->m_nB2IndicatorFlags = nEntryFlags; |
| SetModeImages( aBmp1, aBmp2 ); |
| } |
| |
| SvLBoxContextBmp::SvLBoxContextBmp() |
| :SvLBoxItem( ) |
| ,m_pImpl( new SvLBoxContextBmp_Impl ) |
| { |
| m_pImpl->m_nB2IndicatorFlags = 0; |
| DBG_CTOR(SvLBoxContextBmp,0); |
| } |
| |
| SvLBoxContextBmp::~SvLBoxContextBmp() |
| { |
| delete m_pImpl; |
| DBG_DTOR(SvLBoxContextBmp,0); |
| } |
| |
| sal_uInt16 SvLBoxContextBmp::IsA() |
| { |
| DBG_CHKTHIS(SvLBoxContextBmp,0); |
| return SV_ITEM_ID_LBOXCONTEXTBMP; |
| } |
| |
| sal_Bool SvLBoxContextBmp::SetModeImages( const Image& _rBitmap1, const Image& _rBitmap2, BmpColorMode _eMode ) |
| { |
| DBG_CHKTHIS(SvLBoxContextBmp,0); |
| |
| sal_Bool bSuccess = sal_True; |
| switch ( _eMode ) |
| { |
| case BMP_COLOR_NORMAL: |
| m_pImpl->m_aImage1 = _rBitmap1; |
| m_pImpl->m_aImage2 = _rBitmap2; |
| break; |
| |
| case BMP_COLOR_HIGHCONTRAST: |
| m_pImpl->m_aImage1_hc = _rBitmap1; |
| m_pImpl->m_aImage2_hc = _rBitmap2; |
| break; |
| |
| default: |
| DBG_ERROR( "SvLBoxContextBmp::SetModeImages: unexpected mode!"); |
| bSuccess = sal_False; |
| break; |
| } |
| return bSuccess; |
| } |
| |
| Image& SvLBoxContextBmp::implGetImageStore( sal_Bool _bFirst, BmpColorMode _eMode ) |
| { |
| DBG_CHKTHIS(SvLBoxContextBmp,0); |
| |
| switch ( _eMode ) |
| { |
| case BMP_COLOR_NORMAL: |
| return _bFirst ? m_pImpl->m_aImage1 : m_pImpl->m_aImage2; |
| |
| case BMP_COLOR_HIGHCONTRAST: |
| return _bFirst ? m_pImpl->m_aImage1_hc : m_pImpl->m_aImage2_hc; |
| |
| default: |
| DBG_ERROR( "SvLBoxContextBmp::implGetImageStore: unexpected mode!"); |
| } |
| |
| // OJ: #i27071# wrong mode so we just return the normal images |
| return _bFirst ? m_pImpl->m_aImage1 : m_pImpl->m_aImage2; |
| } |
| |
| void SvLBoxContextBmp::InitViewData( SvLBox* pView,SvLBoxEntry* pEntry, |
| SvViewDataItem* pViewData) |
| { |
| DBG_CHKTHIS(SvLBoxContextBmp,0); |
| if( !pViewData ) |
| pViewData = pView->GetViewDataItem( pEntry, this ); |
| pViewData->aSize = m_pImpl->m_aImage1.GetSizePixel(); |
| } |
| |
| void SvLBoxContextBmp::Paint( const Point& _rPos, SvLBox& _rDev, |
| sal_uInt16 _nViewDataEntryFlags, SvLBoxEntry* _pEntry ) |
| { |
| DBG_CHKTHIS(SvLBoxContextBmp,0); |
| |
| // determine the image set |
| BmpColorMode eMode( BMP_COLOR_NORMAL ); |
| if ( !!m_pImpl->m_aImage1_hc ) |
| { // we really have HC images |
| if ( _rDev.GetSettings().GetStyleSettings().GetHighContrastMode() ) |
| eMode = BMP_COLOR_HIGHCONTRAST; |
| } |
| |
| // get the image |
| const Image& rImage = implGetImageStore( 0 == ( _nViewDataEntryFlags & m_pImpl->m_nB2IndicatorFlags ), eMode ); |
| |
| sal_Bool _bSemiTransparent = _pEntry && ( 0 != ( SV_ENTRYFLAG_SEMITRANSPARENT & _pEntry->GetFlags( ) ) ); |
| // draw |
| sal_uInt16 nStyle = _rDev.IsEnabled() ? 0 : IMAGE_DRAW_DISABLE; |
| if ( _bSemiTransparent ) |
| nStyle |= IMAGE_DRAW_SEMITRANSPARENT; |
| _rDev.DrawImage( _rPos, rImage, nStyle); |
| } |
| |
| SvLBoxItem* SvLBoxContextBmp::Create() const |
| { |
| DBG_CHKTHIS(SvLBoxContextBmp,0); |
| return new SvLBoxContextBmp; |
| } |
| |
| void SvLBoxContextBmp::Clone( SvLBoxItem* pSource ) |
| { |
| DBG_CHKTHIS(SvLBoxContextBmp,0); |
| m_pImpl->m_aImage1 = static_cast< SvLBoxContextBmp* >( pSource )->m_pImpl->m_aImage1; |
| m_pImpl->m_aImage2 = static_cast< SvLBoxContextBmp* >( pSource )->m_pImpl->m_aImage2; |
| m_pImpl->m_nB2IndicatorFlags = static_cast< SvLBoxContextBmp* >( pSource )->m_pImpl->m_nB2IndicatorFlags; |
| } |
| |