1*5900e8ecSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*5900e8ecSAndrew Rist * distributed with this work for additional information 6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance 9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an 15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the 17*5900e8ecSAndrew Rist * specific language governing permissions and limitations 18*5900e8ecSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*5900e8ecSAndrew Rist *************************************************************/ 21*5900e8ecSAndrew Rist 22*5900e8ecSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svtools.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <svtools/ivctrl.hxx> 28cdf0e10cSrcweir #include "imivctl.hxx" 29cdf0e10cSrcweir #include <vcl/bitmapex.hxx> 30cdf0e10cSrcweir #include <vcl/controllayout.hxx> 31cdf0e10cSrcweir #include <vcl/mnemonic.hxx> 32cdf0e10cSrcweir using namespace ::com::sun::star::accessibility; 33cdf0e10cSrcweir 34cdf0e10cSrcweir /***************************************************************************** 35cdf0e10cSrcweir | 36cdf0e10cSrcweir | class : SvxIconChoiceCtrlEntry 37cdf0e10cSrcweir | 38cdf0e10cSrcweir \*****************************************************************************/ 39cdf0e10cSrcweir 40cdf0e10cSrcweir SvxIconChoiceCtrlEntry::SvxIconChoiceCtrlEntry( const String& rText, const Image& rImage, sal_uInt16 _nFlags ) 41cdf0e10cSrcweir { 42cdf0e10cSrcweir aText = rText; 43cdf0e10cSrcweir aImage = rImage; 44cdf0e10cSrcweir aImageHC = rImage; 45cdf0e10cSrcweir pUserData = NULL; 46cdf0e10cSrcweir 47cdf0e10cSrcweir nFlags = _nFlags; 48cdf0e10cSrcweir eTextMode = IcnShowTextShort; 49cdf0e10cSrcweir pblink = 0; 50cdf0e10cSrcweir pflink = 0; 51cdf0e10cSrcweir } 52cdf0e10cSrcweir 53cdf0e10cSrcweir SvxIconChoiceCtrlEntry::SvxIconChoiceCtrlEntry( const String& rText, const Image& rImage, const Image& rImageHC, sal_uInt16 _nFlags ) 54cdf0e10cSrcweir { 55cdf0e10cSrcweir aText = rText; 56cdf0e10cSrcweir aImage = rImage; 57cdf0e10cSrcweir aImageHC = rImageHC; 58cdf0e10cSrcweir pUserData = NULL; 59cdf0e10cSrcweir 60cdf0e10cSrcweir nFlags = _nFlags; 61cdf0e10cSrcweir eTextMode = IcnShowTextShort; 62cdf0e10cSrcweir pblink = 0; 63cdf0e10cSrcweir pflink = 0; 64cdf0e10cSrcweir } 65cdf0e10cSrcweir 66cdf0e10cSrcweir SvxIconChoiceCtrlEntry::SvxIconChoiceCtrlEntry( sal_uInt16 _nFlags ) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir pUserData = NULL; 69cdf0e10cSrcweir 70cdf0e10cSrcweir nFlags = _nFlags; 71cdf0e10cSrcweir eTextMode = IcnShowTextShort; 72cdf0e10cSrcweir pblink = 0; 73cdf0e10cSrcweir pflink = 0; 74cdf0e10cSrcweir } 75cdf0e10cSrcweir 76cdf0e10cSrcweir void SvxIconChoiceCtrlEntry::SetMoved( sal_Bool bMoved ) 77cdf0e10cSrcweir { 78cdf0e10cSrcweir if( bMoved ) 79cdf0e10cSrcweir nFlags |= ICNVIEW_FLAG_POS_MOVED; 80cdf0e10cSrcweir else 81cdf0e10cSrcweir nFlags &= ~ICNVIEW_FLAG_POS_MOVED; 82cdf0e10cSrcweir } 83cdf0e10cSrcweir 84cdf0e10cSrcweir void SvxIconChoiceCtrlEntry::LockPos( sal_Bool bLock ) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir if( bLock ) 87cdf0e10cSrcweir nFlags |= ICNVIEW_FLAG_POS_LOCKED; 88cdf0e10cSrcweir else 89cdf0e10cSrcweir nFlags &= ~ICNVIEW_FLAG_POS_LOCKED; 90cdf0e10cSrcweir } 91cdf0e10cSrcweir 92cdf0e10cSrcweir /*sal_Unicode SvxIconChoiceCtrlEntry::GetMnemonicChar() const 93cdf0e10cSrcweir { 94cdf0e10cSrcweir sal_Unicode cChar = 0; 95cdf0e10cSrcweir xub_StrLen nPos = aText.Search( '~' ); 96cdf0e10cSrcweir if ( nPos != STRING_NOTFOUND && nPos < ( aText.Len() ) - 1 ) 97cdf0e10cSrcweir cChar = aText.GetChar( nPos + 1 ); 98cdf0e10cSrcweir return cChar; 99cdf0e10cSrcweir }*/ 100cdf0e10cSrcweir 101cdf0e10cSrcweir String SvxIconChoiceCtrlEntry::GetDisplayText() const 102cdf0e10cSrcweir { 103cdf0e10cSrcweir return MnemonicGenerator::EraseAllMnemonicChars( aText ); 104cdf0e10cSrcweir } 105cdf0e10cSrcweir 106cdf0e10cSrcweir // ---------------------------------------------------------------------------- 107cdf0e10cSrcweir 108cdf0e10cSrcweir SvxIconChoiceCtrlColumnInfo::SvxIconChoiceCtrlColumnInfo( const SvxIconChoiceCtrlColumnInfo& rInfo ) 109cdf0e10cSrcweir : aColText( rInfo.aColText ), aColImage( rInfo.aColImage ) 110cdf0e10cSrcweir { 111cdf0e10cSrcweir nWidth = rInfo.nWidth; 112cdf0e10cSrcweir eAlignment = rInfo.eAlignment; 113cdf0e10cSrcweir nSubItem = rInfo.nSubItem; 114cdf0e10cSrcweir } 115cdf0e10cSrcweir 116cdf0e10cSrcweir /***************************************************************************** 117cdf0e10cSrcweir | 118cdf0e10cSrcweir | class : SvtIconChoiceCtrl 119cdf0e10cSrcweir | 120cdf0e10cSrcweir \*****************************************************************************/ 121cdf0e10cSrcweir 122cdf0e10cSrcweir SvtIconChoiceCtrl::SvtIconChoiceCtrl( Window* pParent, WinBits nWinStyle ) : 123cdf0e10cSrcweir 124cdf0e10cSrcweir // WB_CLIPCHILDREN an, da ScrollBars auf dem Fenster liegen! 125cdf0e10cSrcweir Control( pParent, nWinStyle | WB_CLIPCHILDREN ), 126cdf0e10cSrcweir 127cdf0e10cSrcweir _pCurKeyEvent ( NULL ), 128cdf0e10cSrcweir _pImp ( new SvxIconChoiceCtrl_Impl( this, nWinStyle ) ), 129cdf0e10cSrcweir _bAutoFontColor ( sal_False ) 130cdf0e10cSrcweir 131cdf0e10cSrcweir { 132cdf0e10cSrcweir SetLineColor(); 133cdf0e10cSrcweir _pImp->SetGrid( Size( 100, 70 ) ); 134cdf0e10cSrcweir _pImp->InitSettings(); 135cdf0e10cSrcweir _pImp->SetPositionMode( IcnViewPositionModeAutoArrange ); 136cdf0e10cSrcweir } 137cdf0e10cSrcweir 138cdf0e10cSrcweir SvtIconChoiceCtrl::SvtIconChoiceCtrl( Window* pParent, const ResId& rResId ) : 139cdf0e10cSrcweir 140cdf0e10cSrcweir Control( pParent, rResId ), 141cdf0e10cSrcweir 142cdf0e10cSrcweir _pCurKeyEvent ( NULL ), 143cdf0e10cSrcweir _pImp ( new SvxIconChoiceCtrl_Impl( this, WB_BORDER ) ), 144cdf0e10cSrcweir _bAutoFontColor ( sal_False ) 145cdf0e10cSrcweir 146cdf0e10cSrcweir { 147cdf0e10cSrcweir SetLineColor(); 148cdf0e10cSrcweir _pImp->SetGrid( Size( 100, 70 ) ); 149cdf0e10cSrcweir _pImp->InitSettings(); 150cdf0e10cSrcweir _pImp->SetPositionMode( IcnViewPositionModeAutoArrange ); 151cdf0e10cSrcweir } 152cdf0e10cSrcweir 153cdf0e10cSrcweir SvtIconChoiceCtrl::~SvtIconChoiceCtrl() 154cdf0e10cSrcweir { 155cdf0e10cSrcweir _pImp->CallEventListeners( VCLEVENT_OBJECT_DYING ); 156cdf0e10cSrcweir delete _pImp; 157cdf0e10cSrcweir } 158cdf0e10cSrcweir 159cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::InsertEntry( sal_uLong nPos, const Point* pPos, sal_uInt16 nFlags ) 160cdf0e10cSrcweir { 161cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = new SvxIconChoiceCtrlEntry( nFlags ); 162cdf0e10cSrcweir _pImp->InsertEntry( pEntry, nPos, pPos ); 163cdf0e10cSrcweir return pEntry; 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::InsertEntry( const String& rText, const Image& rImage, sal_uLong nPos, const Point* pPos, sal_uInt16 nFlags ) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = new SvxIconChoiceCtrlEntry( rText, rImage, nFlags); 169cdf0e10cSrcweir 170cdf0e10cSrcweir _pImp->InsertEntry( pEntry, nPos, pPos ); 171cdf0e10cSrcweir 172cdf0e10cSrcweir return pEntry; 173cdf0e10cSrcweir } 174cdf0e10cSrcweir 175cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::InsertEntry( const String& rText, const Image& rImage, const Image& rImageHC, sal_uLong nPos, const Point* pPos, sal_uInt16 nFlags ) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = new SvxIconChoiceCtrlEntry( rText, rImage, rImageHC, nFlags); 178cdf0e10cSrcweir 179cdf0e10cSrcweir _pImp->InsertEntry( pEntry, nPos, pPos ); 180cdf0e10cSrcweir 181cdf0e10cSrcweir return pEntry; 182cdf0e10cSrcweir } 183cdf0e10cSrcweir 184cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::EditedEntry( SvxIconChoiceCtrlEntry*, const XubString&, sal_Bool ) 185cdf0e10cSrcweir { 186cdf0e10cSrcweir return sal_True; 187cdf0e10cSrcweir } 188cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::EditingEntry( SvxIconChoiceCtrlEntry* ) 189cdf0e10cSrcweir { 190cdf0e10cSrcweir return sal_True; 191cdf0e10cSrcweir } 192cdf0e10cSrcweir void SvtIconChoiceCtrl::DrawEntryImage( SvxIconChoiceCtrlEntry* pEntry, const Point& rPos, OutputDevice& rDev ) 193cdf0e10cSrcweir { 194cdf0e10cSrcweir rDev.DrawImage( rPos, GetSettings().GetStyleSettings().GetHighContrastMode() ? pEntry->GetImageHC() : pEntry->GetImage() ); 195cdf0e10cSrcweir } 196cdf0e10cSrcweir String SvtIconChoiceCtrl::GetEntryText( SvxIconChoiceCtrlEntry* pEntry, sal_Bool ) 197cdf0e10cSrcweir { 198cdf0e10cSrcweir return pEntry->GetText(); 199cdf0e10cSrcweir } 200cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::HasBackground() const 201cdf0e10cSrcweir { 202cdf0e10cSrcweir return sal_False; 203cdf0e10cSrcweir } 204cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::HasFont() const 205cdf0e10cSrcweir { 206cdf0e10cSrcweir return sal_False; 207cdf0e10cSrcweir } 208cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::HasFontTextColor() const 209cdf0e10cSrcweir { 210cdf0e10cSrcweir return sal_True; 211cdf0e10cSrcweir } 212cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::HasFontFillColor() const 213cdf0e10cSrcweir { 214cdf0e10cSrcweir return sal_True; 215cdf0e10cSrcweir } 216cdf0e10cSrcweir 217cdf0e10cSrcweir void SvtIconChoiceCtrl::Paint( const Rectangle& rRect ) 218cdf0e10cSrcweir { 219cdf0e10cSrcweir _pImp->Paint( rRect ); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir 222cdf0e10cSrcweir void SvtIconChoiceCtrl::MouseButtonDown( const MouseEvent& rMEvt ) 223cdf0e10cSrcweir { 224cdf0e10cSrcweir if( !_pImp->MouseButtonDown( rMEvt ) ) 225cdf0e10cSrcweir Control::MouseButtonDown( rMEvt ); 226cdf0e10cSrcweir } 227cdf0e10cSrcweir 228cdf0e10cSrcweir void SvtIconChoiceCtrl::MouseButtonUp( const MouseEvent& rMEvt ) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir if( !_pImp->MouseButtonUp( rMEvt ) ) 231cdf0e10cSrcweir Control::MouseButtonUp( rMEvt ); 232cdf0e10cSrcweir } 233cdf0e10cSrcweir 234cdf0e10cSrcweir void SvtIconChoiceCtrl::MouseMove( const MouseEvent& rMEvt ) 235cdf0e10cSrcweir { 236cdf0e10cSrcweir if( !_pImp->MouseMove( rMEvt ) ) 237cdf0e10cSrcweir Control::MouseMove( rMEvt ); 238cdf0e10cSrcweir } 239cdf0e10cSrcweir void SvtIconChoiceCtrl::ArrangeIcons() 240cdf0e10cSrcweir { 241cdf0e10cSrcweir if ( GetStyle() & WB_ALIGN_TOP ) 242cdf0e10cSrcweir { 243cdf0e10cSrcweir Size aFullSize; 244cdf0e10cSrcweir Rectangle aEntryRect; 245cdf0e10cSrcweir 246cdf0e10cSrcweir for ( sal_uLong i = 0; i < GetEntryCount(); i++ ) 247cdf0e10cSrcweir { 248cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = GetEntry ( i ); 249cdf0e10cSrcweir aEntryRect = _pImp->GetEntryBoundRect ( pEntry ); 250cdf0e10cSrcweir 251cdf0e10cSrcweir aFullSize.setWidth ( aFullSize.getWidth()+aEntryRect.GetWidth() ); 252cdf0e10cSrcweir } 253cdf0e10cSrcweir 254cdf0e10cSrcweir _pImp->Arrange ( sal_False, aFullSize.getWidth() ); 255cdf0e10cSrcweir } 256cdf0e10cSrcweir else if ( GetStyle() & WB_ALIGN_LEFT ) 257cdf0e10cSrcweir { 258cdf0e10cSrcweir Size aFullSize; 259cdf0e10cSrcweir Rectangle aEntryRect; 260cdf0e10cSrcweir 261cdf0e10cSrcweir for ( sal_uLong i = 0; i < GetEntryCount(); i++ ) 262cdf0e10cSrcweir { 263cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = GetEntry ( i ); 264cdf0e10cSrcweir aEntryRect = _pImp->GetEntryBoundRect ( pEntry ); 265cdf0e10cSrcweir 266cdf0e10cSrcweir aFullSize.setHeight ( aFullSize.getHeight()+aEntryRect.GetHeight() ); 267cdf0e10cSrcweir } 268cdf0e10cSrcweir 269cdf0e10cSrcweir _pImp->Arrange ( sal_False, 0, aFullSize.getHeight() ); 270cdf0e10cSrcweir } 271cdf0e10cSrcweir else 272cdf0e10cSrcweir { 273cdf0e10cSrcweir _pImp->Arrange(); 274cdf0e10cSrcweir } 275cdf0e10cSrcweir _pImp->Arrange( sal_False, 0, 1000 ); 276cdf0e10cSrcweir } 277cdf0e10cSrcweir void SvtIconChoiceCtrl::Resize() 278cdf0e10cSrcweir { 279cdf0e10cSrcweir _pImp->Resize(); 280cdf0e10cSrcweir Control::Resize(); 281cdf0e10cSrcweir } 282cdf0e10cSrcweir 283cdf0e10cSrcweir Point SvtIconChoiceCtrl::GetLogicPos( const Point& rPosPixel ) const 284cdf0e10cSrcweir { 285cdf0e10cSrcweir Point aPos( rPosPixel ); 286cdf0e10cSrcweir aPos -= GetMapMode().GetOrigin(); 287cdf0e10cSrcweir return aPos; 288cdf0e10cSrcweir } 289cdf0e10cSrcweir 290cdf0e10cSrcweir Point SvtIconChoiceCtrl::GetPixelPos( const Point& rPosLogic ) const 291cdf0e10cSrcweir { 292cdf0e10cSrcweir Point aPos( rPosLogic ); 293cdf0e10cSrcweir aPos += GetMapMode().GetOrigin(); 294cdf0e10cSrcweir return aPos; 295cdf0e10cSrcweir } 296cdf0e10cSrcweir 297cdf0e10cSrcweir void SvtIconChoiceCtrl::DocumentRectChanged() 298cdf0e10cSrcweir { 299cdf0e10cSrcweir _aDocRectChangedHdl.Call( this ); 300cdf0e10cSrcweir } 301cdf0e10cSrcweir 302cdf0e10cSrcweir void SvtIconChoiceCtrl::VisibleRectChanged() 303cdf0e10cSrcweir { 304cdf0e10cSrcweir _aVisRectChangedHdl.Call( this ); 305cdf0e10cSrcweir } 306cdf0e10cSrcweir 307cdf0e10cSrcweir void SvtIconChoiceCtrl::GetFocus() 308cdf0e10cSrcweir { 309cdf0e10cSrcweir _pImp->GetFocus(); 310cdf0e10cSrcweir Control::GetFocus(); 311cdf0e10cSrcweir sal_uLong nPos; 312cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pSelectedEntry = GetSelectedEntry ( nPos ); 313cdf0e10cSrcweir if ( pSelectedEntry ) 314cdf0e10cSrcweir _pImp->CallEventListeners( VCLEVENT_LISTBOX_SELECT, pSelectedEntry ); 315cdf0e10cSrcweir } 316cdf0e10cSrcweir 317cdf0e10cSrcweir void SvtIconChoiceCtrl::LoseFocus() 318cdf0e10cSrcweir { 319cdf0e10cSrcweir _pImp->LoseFocus(); 320cdf0e10cSrcweir Control::LoseFocus(); 321cdf0e10cSrcweir } 322cdf0e10cSrcweir 323cdf0e10cSrcweir void SvtIconChoiceCtrl::SetUpdateMode( sal_Bool bUpdate ) 324cdf0e10cSrcweir { 325cdf0e10cSrcweir Control::SetUpdateMode( bUpdate ); 326cdf0e10cSrcweir _pImp->SetUpdateMode( bUpdate ); 327cdf0e10cSrcweir } 328cdf0e10cSrcweir void SvtIconChoiceCtrl::SetFont( const Font& rFont ) 329cdf0e10cSrcweir { 330cdf0e10cSrcweir if( rFont != GetFont() ) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir Control::SetFont( rFont ); 333cdf0e10cSrcweir _pImp->FontModified(); 334cdf0e10cSrcweir } 335cdf0e10cSrcweir } 336cdf0e10cSrcweir 337cdf0e10cSrcweir void SvtIconChoiceCtrl::SetPointFont( const Font& rFont ) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir if( rFont != GetPointFont() ) 340cdf0e10cSrcweir { 341cdf0e10cSrcweir Control::SetPointFont( rFont ); 342cdf0e10cSrcweir _pImp->FontModified(); 343cdf0e10cSrcweir } 344cdf0e10cSrcweir } 345cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::GetEntry( const Point& rPixPos, sal_Bool bHit ) const 346cdf0e10cSrcweir { 347cdf0e10cSrcweir Point aPos( rPixPos ); 348cdf0e10cSrcweir aPos -= GetMapMode().GetOrigin(); 349cdf0e10cSrcweir return ((SvtIconChoiceCtrl*)this)->_pImp->GetEntry( aPos, bHit ); 350cdf0e10cSrcweir } 351cdf0e10cSrcweir 352cdf0e10cSrcweir void SvtIconChoiceCtrl::SetStyle( WinBits nWinStyle ) 353cdf0e10cSrcweir { 354cdf0e10cSrcweir _pImp->SetStyle( nWinStyle ); 355cdf0e10cSrcweir } 356cdf0e10cSrcweir 357cdf0e10cSrcweir WinBits SvtIconChoiceCtrl::GetStyle() const 358cdf0e10cSrcweir { 359cdf0e10cSrcweir return _pImp->GetStyle(); 360cdf0e10cSrcweir } 361cdf0e10cSrcweir void SvtIconChoiceCtrl::Command( const CommandEvent& rCEvt ) 362cdf0e10cSrcweir { 363cdf0e10cSrcweir _pImp->Command( rCEvt ); 364cdf0e10cSrcweir } 365cdf0e10cSrcweir 366cdf0e10cSrcweir void SvtIconChoiceCtrl::SetEntryTextMode( SvxIconChoiceCtrlTextMode eMode, SvxIconChoiceCtrlEntry* pEntry ) 367cdf0e10cSrcweir { 368cdf0e10cSrcweir _pImp->SetEntryTextMode( eMode, pEntry ); 369cdf0e10cSrcweir } 370cdf0e10cSrcweir 371cdf0e10cSrcweir SvxIconChoiceCtrlTextMode SvtIconChoiceCtrl::GetEntryTextMode( const SvxIconChoiceCtrlEntry* pEntry ) const 372cdf0e10cSrcweir { 373cdf0e10cSrcweir return _pImp->GetEntryTextModeSmart( pEntry ); 374cdf0e10cSrcweir } 375cdf0e10cSrcweir 376cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::GetNextEntry( const Point& rPixPos, SvxIconChoiceCtrlEntry* pCurEntry, sal_Bool ) const 377cdf0e10cSrcweir { 378cdf0e10cSrcweir Point aPos( rPixPos ); 379cdf0e10cSrcweir aPos -= GetMapMode().GetOrigin(); 380cdf0e10cSrcweir return ((SvtIconChoiceCtrl*)this)->_pImp->GetNextEntry( aPos, pCurEntry ); 381cdf0e10cSrcweir } 382cdf0e10cSrcweir 383cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::GetPrevEntry( const Point& rPixPos, SvxIconChoiceCtrlEntry* pCurEntry, sal_Bool ) const 384cdf0e10cSrcweir { 385cdf0e10cSrcweir Point aPos( rPixPos ); 386cdf0e10cSrcweir aPos -= GetMapMode().GetOrigin(); 387cdf0e10cSrcweir return ((SvtIconChoiceCtrl*)this)->_pImp->GetPrevEntry( aPos, pCurEntry ); 388cdf0e10cSrcweir } 389cdf0e10cSrcweir sal_uLong SvtIconChoiceCtrl::GetEntryCount() const 390cdf0e10cSrcweir { 391cdf0e10cSrcweir return _pImp->GetEntryCount(); 392cdf0e10cSrcweir } 393cdf0e10cSrcweir 394cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::GetEntry( sal_uLong nPos ) const 395cdf0e10cSrcweir { 396cdf0e10cSrcweir return _pImp->GetEntry( nPos ); 397cdf0e10cSrcweir } 398cdf0e10cSrcweir 399cdf0e10cSrcweir void SvtIconChoiceCtrl::CreateAutoMnemonics( MnemonicGenerator& _rUsedMnemonics ) 400cdf0e10cSrcweir { 401cdf0e10cSrcweir _pImp->CreateAutoMnemonics( &_rUsedMnemonics ); 402cdf0e10cSrcweir } 403cdf0e10cSrcweir 404cdf0e10cSrcweir void SvtIconChoiceCtrl::CreateAutoMnemonics( void ) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir _pImp->CreateAutoMnemonics(); 407cdf0e10cSrcweir } 408cdf0e10cSrcweir 409cdf0e10cSrcweir void SvtIconChoiceCtrl::RemoveEntry( SvxIconChoiceCtrlEntry* pEntry ) 410cdf0e10cSrcweir { 411cdf0e10cSrcweir _pImp->RemoveEntry( pEntry ); 412cdf0e10cSrcweir } 413cdf0e10cSrcweir 414cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::GetSelectedEntry( sal_uLong& rPos ) const 415cdf0e10cSrcweir { 416cdf0e10cSrcweir return _pImp->GetFirstSelectedEntry( rPos ); 417cdf0e10cSrcweir } 418cdf0e10cSrcweir 419cdf0e10cSrcweir void SvtIconChoiceCtrl::ClickIcon() 420cdf0e10cSrcweir { 421cdf0e10cSrcweir sal_uLong nPos; 422cdf0e10cSrcweir GetSelectedEntry ( nPos ); 423cdf0e10cSrcweir _aClickIconHdl.Call( this ); 424cdf0e10cSrcweir } 425cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::IsEntryEditing() const 426cdf0e10cSrcweir { 427cdf0e10cSrcweir return _pImp->IsEntryEditing(); 428cdf0e10cSrcweir } 429cdf0e10cSrcweir 430cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::SetChoiceWithCursor ( sal_Bool bDo ) 431cdf0e10cSrcweir { 432cdf0e10cSrcweir return _pImp->SetChoiceWithCursor (bDo); 433cdf0e10cSrcweir } 434cdf0e10cSrcweir 435cdf0e10cSrcweir void SvtIconChoiceCtrl::KeyInput( const KeyEvent& rKEvt ) 436cdf0e10cSrcweir { 437cdf0e10cSrcweir sal_Bool bKeyUsed = DoKeyInput( rKEvt ); 438cdf0e10cSrcweir if ( !bKeyUsed ) 439cdf0e10cSrcweir { 440cdf0e10cSrcweir _pCurKeyEvent = (KeyEvent*)&rKEvt; 441cdf0e10cSrcweir Control::KeyInput( rKEvt ); 442cdf0e10cSrcweir _pCurKeyEvent = NULL; 443cdf0e10cSrcweir } 444cdf0e10cSrcweir } 445cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::DoKeyInput( const KeyEvent& rKEvt ) 446cdf0e10cSrcweir { 447cdf0e10cSrcweir // unter OS/2 bekommen wir auch beim Editieren Key-Up/Down 448cdf0e10cSrcweir if( IsEntryEditing() ) 449cdf0e10cSrcweir return sal_True; 450cdf0e10cSrcweir _pCurKeyEvent = (KeyEvent*)&rKEvt; 451cdf0e10cSrcweir sal_Bool bHandled = _pImp->KeyInput( rKEvt ); 452cdf0e10cSrcweir _pCurKeyEvent = NULL; 453cdf0e10cSrcweir return bHandled; 454cdf0e10cSrcweir } 455cdf0e10cSrcweir sal_uLong SvtIconChoiceCtrl::GetEntryListPos( SvxIconChoiceCtrlEntry* pEntry ) const 456cdf0e10cSrcweir { 457cdf0e10cSrcweir return _pImp->GetEntryListPos( pEntry ); 458cdf0e10cSrcweir } 459cdf0e10cSrcweir SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::GetCursor( ) const 460cdf0e10cSrcweir { 461cdf0e10cSrcweir return _pImp->GetCurEntry( ); 462cdf0e10cSrcweir } 463cdf0e10cSrcweir void SvtIconChoiceCtrl::SetCursor( SvxIconChoiceCtrlEntry* pEntry ) 464cdf0e10cSrcweir { 465cdf0e10cSrcweir _pImp->SetCursor( pEntry ); 466cdf0e10cSrcweir } 467cdf0e10cSrcweir void SvtIconChoiceCtrl::InvalidateEntry( SvxIconChoiceCtrlEntry* pEntry ) 468cdf0e10cSrcweir { 469cdf0e10cSrcweir _pImp->InvalidateEntry( pEntry ); 470cdf0e10cSrcweir } 471cdf0e10cSrcweir void SvtIconChoiceCtrl::Clear() 472cdf0e10cSrcweir { 473cdf0e10cSrcweir _pImp->Clear(); 474cdf0e10cSrcweir } 475cdf0e10cSrcweir void SvtIconChoiceCtrl::StateChanged( StateChangedType nType ) 476cdf0e10cSrcweir { 477cdf0e10cSrcweir Control::StateChanged( nType ); 478cdf0e10cSrcweir } 479cdf0e10cSrcweir 480cdf0e10cSrcweir 481cdf0e10cSrcweir void SvtIconChoiceCtrl::DataChanged( const DataChangedEvent& rDCEvt ) 482cdf0e10cSrcweir { 483cdf0e10cSrcweir if ( ((rDCEvt.GetType() == DATACHANGED_SETTINGS) || 484cdf0e10cSrcweir (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) || 485cdf0e10cSrcweir (rDCEvt.GetType() == DATACHANGED_FONTS) ) && 486cdf0e10cSrcweir (rDCEvt.GetFlags() & SETTINGS_STYLE) ) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir _pImp->InitSettings(); 489cdf0e10cSrcweir Invalidate(INVALIDATE_NOCHILDREN); 490cdf0e10cSrcweir } 491cdf0e10cSrcweir else 492cdf0e10cSrcweir Control::DataChanged( rDCEvt ); 493cdf0e10cSrcweir } 494cdf0e10cSrcweir 495cdf0e10cSrcweir void SvtIconChoiceCtrl::SetBackground( const Wallpaper& rPaper ) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir if( rPaper != GetBackground() ) 498cdf0e10cSrcweir { 499cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 500cdf0e10cSrcweir Wallpaper aEmpty; 501cdf0e10cSrcweir if( rPaper == aEmpty ) 502cdf0e10cSrcweir Control::SetBackground( rStyleSettings.GetFieldColor() ); 503cdf0e10cSrcweir else 504cdf0e10cSrcweir { 505cdf0e10cSrcweir Wallpaper aBackground( rPaper ); 506cdf0e10cSrcweir // HACK, da Hintergrund sonst transparent sein koennte 507cdf0e10cSrcweir if( !aBackground.IsBitmap() ) 508cdf0e10cSrcweir aBackground.SetStyle( WALLPAPER_TILE ); 509cdf0e10cSrcweir 510cdf0e10cSrcweir WallpaperStyle eStyle = aBackground.GetStyle(); 511cdf0e10cSrcweir Color aBack( aBackground.GetColor()); 512cdf0e10cSrcweir Color aTrans( COL_TRANSPARENT ); 513cdf0e10cSrcweir if( aBack == aTrans && ( 514cdf0e10cSrcweir (!aBackground.IsBitmap() || 515cdf0e10cSrcweir aBackground.GetBitmap().IsTransparent() || 516cdf0e10cSrcweir (eStyle != WALLPAPER_TILE && eStyle != WALLPAPER_SCALE)))) 517cdf0e10cSrcweir { 518cdf0e10cSrcweir aBackground.SetColor( rStyleSettings.GetFieldColor() ); 519cdf0e10cSrcweir } 520cdf0e10cSrcweir if( aBackground.IsScrollable() ) 521cdf0e10cSrcweir { 522cdf0e10cSrcweir Rectangle aRect; 523cdf0e10cSrcweir aRect.SetSize( Size(32765, 32765) ); 524cdf0e10cSrcweir aBackground.SetRect( aRect ); 525cdf0e10cSrcweir } 526cdf0e10cSrcweir else 527cdf0e10cSrcweir { 528cdf0e10cSrcweir Rectangle aRect( _pImp->GetOutputRect() ); 529cdf0e10cSrcweir aBackground.SetRect( aRect ); 530cdf0e10cSrcweir } 531cdf0e10cSrcweir Control::SetBackground( aBackground ); 532cdf0e10cSrcweir } 533cdf0e10cSrcweir 534cdf0e10cSrcweir // bei hart attributierter Textfarbe keine 'Automatik', die eine 535cdf0e10cSrcweir // lesbare Textfarbe einstellt. 536cdf0e10cSrcweir Font aFont( GetFont() ); 537cdf0e10cSrcweir aFont.SetColor( rStyleSettings.GetFieldTextColor() ); 538cdf0e10cSrcweir SetFont( aFont ); 539cdf0e10cSrcweir 540cdf0e10cSrcweir Invalidate(INVALIDATE_NOCHILDREN); 541cdf0e10cSrcweir } 542cdf0e10cSrcweir } 543cdf0e10cSrcweir 544cdf0e10cSrcweir void SvtIconChoiceCtrl::Flush() 545cdf0e10cSrcweir { 546cdf0e10cSrcweir _pImp->Flush(); 547cdf0e10cSrcweir } 548cdf0e10cSrcweir 549cdf0e10cSrcweir void SvtIconChoiceCtrl::RequestHelp( const HelpEvent& rHEvt ) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir if ( !_pImp->RequestHelp( rHEvt ) ) 552cdf0e10cSrcweir Control::RequestHelp( rHEvt ); 553cdf0e10cSrcweir } 554cdf0e10cSrcweir 555cdf0e10cSrcweir void SvtIconChoiceCtrl::SetSelectionMode( SelectionMode eMode ) 556cdf0e10cSrcweir { 557cdf0e10cSrcweir _pImp->SetSelectionMode( eMode ); 558cdf0e10cSrcweir } 559cdf0e10cSrcweir 560cdf0e10cSrcweir sal_Bool SvtIconChoiceCtrl::HandleShortCutKey( const KeyEvent& r ) 561cdf0e10cSrcweir { 562cdf0e10cSrcweir return _pImp->HandleShortCutKey( r ); 563cdf0e10cSrcweir } 564cdf0e10cSrcweir 565cdf0e10cSrcweir Rectangle SvtIconChoiceCtrl::GetBoundingBox( SvxIconChoiceCtrlEntry* pEntry ) const 566cdf0e10cSrcweir { 567cdf0e10cSrcweir return _pImp->GetEntryBoundRect( pEntry ); 568cdf0e10cSrcweir } 569cdf0e10cSrcweir 570cdf0e10cSrcweir void SvtIconChoiceCtrl::FillLayoutData() const 571cdf0e10cSrcweir { 572cdf0e10cSrcweir CreateLayoutData(); 573cdf0e10cSrcweir 574cdf0e10cSrcweir SvtIconChoiceCtrl* pNonConstMe = const_cast< SvtIconChoiceCtrl* >( this ); 575cdf0e10cSrcweir 576cdf0e10cSrcweir // loop through all entries 577cdf0e10cSrcweir sal_uInt16 nCount = (sal_uInt16)GetEntryCount(); 578cdf0e10cSrcweir sal_uInt16 nPos = 0; 579cdf0e10cSrcweir while ( nPos < nCount ) 580cdf0e10cSrcweir { 581cdf0e10cSrcweir SvxIconChoiceCtrlEntry* pEntry = GetEntry( nPos ); 582cdf0e10cSrcweir 583cdf0e10cSrcweir Point aPos = _pImp->GetEntryBoundRect( pEntry ).TopLeft(); 584cdf0e10cSrcweir String sEntryText = pEntry->GetDisplayText( ); 585cdf0e10cSrcweir Rectangle aTextRect = _pImp->CalcTextRect( pEntry, &aPos, sal_False, &sEntryText ); 586cdf0e10cSrcweir 587cdf0e10cSrcweir sal_Bool bLargeIconMode = WB_ICON == ( _pImp->GetStyle() & ( VIEWMODE_MASK ) ); 588cdf0e10cSrcweir sal_uInt16 nTextPaintFlags = bLargeIconMode ? PAINTFLAG_HOR_CENTERED : PAINTFLAG_VER_CENTERED; 589cdf0e10cSrcweir 590cdf0e10cSrcweir _pImp->PaintItem( aTextRect, IcnViewFieldTypeText, pEntry, nTextPaintFlags, pNonConstMe, &sEntryText, GetLayoutData() ); 591cdf0e10cSrcweir 592cdf0e10cSrcweir ++nPos; 593cdf0e10cSrcweir } 594cdf0e10cSrcweir } 595cdf0e10cSrcweir 596cdf0e10cSrcweir Rectangle SvtIconChoiceCtrl::GetEntryCharacterBounds( const sal_Int32 _nEntryPos, const sal_Int32 _nCharacterIndex ) const 597cdf0e10cSrcweir { 598cdf0e10cSrcweir Rectangle aRect; 599cdf0e10cSrcweir 600cdf0e10cSrcweir Pair aEntryCharacterRange = GetLineStartEnd( _nEntryPos ); 601cdf0e10cSrcweir if ( aEntryCharacterRange.A() + _nCharacterIndex < aEntryCharacterRange.B() ) 602cdf0e10cSrcweir { 603cdf0e10cSrcweir aRect = GetCharacterBounds( aEntryCharacterRange.A() + _nCharacterIndex ); 604cdf0e10cSrcweir } 605cdf0e10cSrcweir 606cdf0e10cSrcweir return aRect; 607cdf0e10cSrcweir } 608cdf0e10cSrcweir 609cdf0e10cSrcweir void SvtIconChoiceCtrl::SetNoSelection() 610cdf0e10cSrcweir { 611cdf0e10cSrcweir _pImp->SetNoSelection(); 612cdf0e10cSrcweir } 613cdf0e10cSrcweir 614cdf0e10cSrcweir void SvtIconChoiceCtrl::CallImplEventListeners(sal_uLong nEvent, void* pData) 615cdf0e10cSrcweir { 616cdf0e10cSrcweir CallEventListeners(nEvent, pData); 617cdf0e10cSrcweir } 618cdf0e10cSrcweir ::com::sun::star::uno::Reference< XAccessible > SvtIconChoiceCtrl::CreateAccessible() 619cdf0e10cSrcweir { 620cdf0e10cSrcweir Window* pParent = GetAccessibleParentWindow(); 621cdf0e10cSrcweir DBG_ASSERT( pParent, "SvTreeListBox::CreateAccessible - accessible parent not found" ); 622cdf0e10cSrcweir 623cdf0e10cSrcweir ::com::sun::star::uno::Reference< XAccessible > xAccessible; 624cdf0e10cSrcweir if ( pParent ) 625cdf0e10cSrcweir { 626cdf0e10cSrcweir ::com::sun::star::uno::Reference< XAccessible > xAccParent = pParent->GetAccessible(); 627cdf0e10cSrcweir if ( xAccParent.is() ) 628cdf0e10cSrcweir { 629cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > xTemp(GetComponentInterface()); 630cdf0e10cSrcweir xAccessible = _pImp->GetAccessibleFactory().createAccessibleIconChoiceCtrl( *this, xAccParent ); 631cdf0e10cSrcweir } 632cdf0e10cSrcweir } 633cdf0e10cSrcweir return xAccessible; 634cdf0e10cSrcweir } 635cdf0e10cSrcweir 636