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 #ifndef _SV_ILSTBOX_HXX 25 #define _SV_ILSTBOX_HXX 26 27 #include <vcl/sv.h> 28 #include <vcl/image.hxx> 29 #include <vcl/ctrl.hxx> 30 #include <vcl/button.hxx> 31 #include <vcl/floatwin.hxx> 32 #include <vcl/lstbox.h> 33 #include <vcl/timer.hxx> 34 35 #include "vcl/quickselectionengine.hxx" 36 37 class ScrollBar; 38 class ScrollBarBox; 39 40 // ----------------- 41 // - ListBox-Types - 42 // ----------------- 43 44 #define HORZ_SCROLL 4 45 #define IMG_TXT_DISTANCE 6 46 47 enum LB_EVENT_TYPE 48 { 49 LET_MBDOWN, 50 LET_TRACKING, 51 LET_TRACKING_END, 52 LET_KEYMOVE, 53 LET_KEYSPACE 54 }; 55 56 // ----------------- 57 // - ImplEntryType - 58 // ----------------- 59 60 struct ImplEntryType 61 { 62 XubString maStr; 63 Image maImage; 64 void* mpUserData; 65 sal_Bool mbIsSelected; 66 long mnFlags; 67 long mnHeight; 68 69 ImplEntryType( const XubString& rStr, const Image& rImage ) : 70 maStr( rStr ), 71 maImage( rImage ), 72 mnFlags( 0 ), 73 mnHeight( 0 ) 74 { 75 mbIsSelected = sal_False; 76 mpUserData = NULL; 77 } 78 79 ImplEntryType( const XubString& rStr ) : 80 maStr( rStr ), 81 mnFlags( 0 ), 82 mnHeight( 0 ) 83 { 84 mbIsSelected = sal_False; 85 mpUserData = NULL; 86 } 87 88 ImplEntryType( const Image& rImage ) : 89 maImage( rImage ), 90 mnFlags( 0 ), 91 mnHeight( 0 ) 92 { 93 mbIsSelected = sal_False; 94 mpUserData = NULL; 95 } 96 }; 97 98 // ----------------- 99 // - ImplEntryList - 100 // ----------------- 101 102 class ImplEntryList : private List 103 { 104 private: 105 Window* mpWindow; // For getting the current locale when matching strings 106 sal_uInt16 mnLastSelected; 107 sal_uInt16 mnSelectionAnchor; 108 sal_uInt16 mnImages; 109 110 sal_uInt16 mnMRUCount; 111 sal_uInt16 mnMaxMRUCount; 112 113 Link maSelectionChangedHdl; 114 sal_Bool mbCallSelectionChangedHdl; 115 116 ImplEntryType* GetEntry( sal_uInt16 nPos ) const { return (ImplEntryType*)List::GetObject( nPos ); } 117 118 public: 119 ImplEntryList( Window* pWindow ); 120 ~ImplEntryList(); 121 122 sal_uInt16 InsertEntry( sal_uInt16 nPos, ImplEntryType* pNewEntry, sal_Bool bSort ); 123 void RemoveEntry( sal_uInt16 nPos ); 124 const ImplEntryType* GetEntryPtr( sal_uInt16 nPos ) const { return (const ImplEntryType*) GetObject( nPos ); } 125 ImplEntryType* GetMutableEntryPtr( sal_uInt16 nPos ) const { return (ImplEntryType*) GetObject( nPos ); } 126 void Clear(); 127 128 sal_uInt16 FindMatchingEntry( const XubString& rStr, sal_uInt16 nStart = 0, sal_Bool bForward = sal_True, sal_Bool bLazy = sal_True ) const; 129 sal_uInt16 FindEntry( const XubString& rStr, sal_Bool bSearchMRUArea = sal_False ) const; 130 sal_uInt16 FindEntry( const void* pData ) const; 131 132 // helper: add up heights up to index nEndIndex. 133 // GetAddedHeight( 0 ) returns 0 134 // GetAddedHeight( LISTBOX_ENTRY_NOTFOUND ) returns 0 135 // GetAddedHeight( i, k ) with k > i is equivalent -GetAddedHeight( k, i ) 136 long GetAddedHeight( sal_uInt16 nEndIndex, sal_uInt16 nBeginIndex = 0, long nBeginHeight = 0 ) const; 137 long GetEntryHeight( sal_uInt16 nPos ) const; 138 139 sal_uInt16 GetEntryCount() const { return (sal_uInt16)List::Count(); } 140 sal_Bool HasImages() const { return mnImages ? sal_True : sal_False; } 141 142 XubString GetEntryText( sal_uInt16 nPos ) const; 143 144 sal_Bool HasEntryImage( sal_uInt16 nPos ) const; 145 Image GetEntryImage( sal_uInt16 nPos ) const; 146 147 void SetEntryData( sal_uInt16 nPos, void* pNewData ); 148 void* GetEntryData( sal_uInt16 nPos ) const; 149 150 void SetEntryFlags( sal_uInt16 nPos, long nFlags ); 151 long GetEntryFlags( sal_uInt16 nPos ) const; 152 153 void SelectEntry( sal_uInt16 nPos, sal_Bool bSelect ); 154 155 sal_uInt16 GetSelectEntryCount() const; 156 XubString GetSelectEntry( sal_uInt16 nIndex ) const; 157 sal_uInt16 GetSelectEntryPos( sal_uInt16 nIndex ) const; 158 sal_Bool IsEntrySelected( const XubString& rStr ) const; 159 sal_Bool IsEntryPosSelected( sal_uInt16 nIndex ) const; 160 161 void SetLastSelected( sal_uInt16 nPos ) { mnLastSelected = nPos; } 162 sal_uInt16 GetLastSelected() const { return mnLastSelected; } 163 164 void SetSelectionAnchor( sal_uInt16 nPos ) { mnSelectionAnchor = nPos; } 165 sal_uInt16 GetSelectionAnchor() const { return mnSelectionAnchor; } 166 167 168 void SetSelectionChangedHdl( const Link& rLnk ) { maSelectionChangedHdl = rLnk; } 169 void SetCallSelectionChangedHdl( sal_Bool bCall ) { mbCallSelectionChangedHdl = bCall; } 170 171 void SetMRUCount( sal_uInt16 n ) { mnMRUCount = n; } 172 sal_uInt16 GetMRUCount() const { return mnMRUCount; } 173 174 void SetMaxMRUCount( sal_uInt16 n ) { mnMaxMRUCount = n; } 175 sal_uInt16 GetMaxMRUCount() const { return mnMaxMRUCount; } 176 177 /** An Entry is selectable if its mnFlags does not have the 178 LISTBOX_ENTRY_FLAG_DISABLE_SELECTION flag set. */ 179 bool IsEntrySelectable( sal_uInt16 nPos ) const; 180 181 /** returns the first entry found from the given position nPos that is selectable 182 or LISTBOX_ENTRY_NOTFOUND if non is found. If the entry at nPos is not selectable, 183 it returns the first selectable entry after nPos if bForward is true and the 184 first selectable entry after nPos is bForward is false. 185 */ 186 sal_uInt16 FindFirstSelectable( sal_uInt16 nPos, bool bForward = true ); 187 }; 188 189 // --------------------- 190 // - ImplListBoxWindow - 191 // --------------------- 192 193 class ImplListBoxWindow : public Control, public ::vcl::ISearchableStringList 194 { 195 private: 196 ImplEntryList* mpEntryList; // EntryListe 197 Rectangle maFocusRect; 198 199 Size maUserItemSize; 200 201 long mnMaxTxtHeight; // Maximale Hoehe eines Text-Items 202 long mnMaxTxtWidth; // Maximale Breite eines Text-Items 203 // Entry ohne Image 204 long mnMaxImgTxtWidth;// Maximale Breite eines Text-Items 205 // Entry UND Image 206 long mnMaxImgWidth; // Maximale Breite eines Image-Items 207 long mnMaxImgHeight; // Maximale Hoehe eines Image-Items 208 long mnMaxWidth; // Maximale Breite eines Eintrags 209 long mnMaxHeight; // Maximale Hoehe eines Eintrags 210 211 sal_uInt16 mnCurrentPos; // Position (Focus) 212 sal_uInt16 mnTrackingSaveSelection; // Selektion vor Tracking(); 213 214 sal_uInt16 mnSeparatorPos; // Separator 215 216 sal_uInt16 mnUserDrawEntry; 217 218 sal_uInt16 mnTop; // Ausgabe ab Zeile 219 long mnLeft; // Ausgabe ab Spalte 220 long mnBorder; // Abstand Rahmen - Text 221 long mnTextHeight; // Texthoehe 222 ProminentEntry meProminentType; // where is the "prominent" entry 223 224 sal_uInt16 mnSelectModifier; // Modifiers 225 226 sal_Bool mbHasFocusRect: 1, 227 mbSort: 1, // ListBox sortiert 228 mbTrack: 1, // Tracking 229 mbMulti: 1, // MultiListBox 230 mbStackMode: 1, // StackSelection 231 mbSimpleMode: 1, // SimpleMode fuer MultiListBox 232 mbImgsDiffSz: 1, // Images haben verschiedene Groessen 233 mbTravelSelect: 1, // TravelSelect 234 mbTrackingSelect: 1, // Selektiert bei MouseMove 235 mbSelectionChanged: 1, // Select() nicht zu oft rufen... 236 mbMouseMoveSelect: 1, // Selektieren bei MouseMove 237 mbGrabFocus: 1, // Focus bei MBDown grabben 238 mbUserDrawEnabled: 1, // UserDraw possible 239 mbInUserDraw: 1, // In UserDraw 240 mbReadOnly: 1, // ReadOnly 241 mbMirroring: 1, // pb: #106948# explicit mirroring for calc 242 mbRight: 1, // right align Text output 243 mbCenter: 1; // center Text output 244 245 Link maScrollHdl; 246 Link maSelectHdl; 247 Link maCancelHdl; 248 Link maDoubleClickHdl; 249 Link maUserDrawHdl; 250 Link maMRUChangedHdl; 251 //IAccessibility2 Implementation 2009----- 252 Link maFocusHdl; 253 Link maListItemSelectHdl; 254 //-----IAccessibility2 Implementation 2009 255 256 ::vcl::QuickSelectionEngine 257 maQuickSelectionEngine; 258 259 protected: 260 virtual void KeyInput( const KeyEvent& rKEvt ); 261 virtual void MouseButtonDown( const MouseEvent& rMEvt ); 262 virtual void MouseMove( const MouseEvent& rMEvt ); 263 virtual void Tracking( const TrackingEvent& rTEvt ); 264 virtual void Paint( const Rectangle& rRect ); 265 virtual void Resize(); 266 virtual void GetFocus(); 267 virtual void LoseFocus(); 268 269 //IAccessibility2 Implementation 2009----- 270 //sal_Bool SelectEntries( sal_uInt16 nSelect, LB_EVENT_TYPE eLET, sal_Bool bShift = sal_False, sal_Bool bCtrl = sal_False ); 271 sal_Bool SelectEntries( sal_uInt16 nSelect, LB_EVENT_TYPE eLET, sal_Bool bShift = sal_False, sal_Bool bCtrl = sal_False, sal_Bool bSelectPosChange = sal_False ); 272 //-----IAccessibility2 Implementation 2009 273 void ImplPaint( sal_uInt16 nPos, sal_Bool bErase = sal_False, bool bLayout = false ); 274 void ImplDoPaint( const Rectangle& rRect, bool bLayout = false ); 275 void ImplCalcMetrics(); 276 void ImplUpdateEntryMetrics( ImplEntryType& rEntry ); 277 void ImplCallSelect(); 278 279 void ImplShowFocusRect(); 280 void ImplHideFocusRect(); 281 282 283 virtual void StateChanged( StateChangedType nType ); 284 virtual void DataChanged( const DataChangedEvent& rDCEvt ); 285 286 public: 287 virtual void FillLayoutData() const; 288 289 ImplListBoxWindow( Window* pParent, WinBits nWinStyle ); 290 ~ImplListBoxWindow(); 291 292 ImplEntryList* GetEntryList() const { return mpEntryList; } 293 294 sal_uInt16 InsertEntry( sal_uInt16 nPos, ImplEntryType* pNewEntry ); 295 void RemoveEntry( sal_uInt16 nPos ); 296 void Clear(); 297 void ResetCurrentPos() { mnCurrentPos = LISTBOX_ENTRY_NOTFOUND; } 298 sal_uInt16 GetCurrentPos() const { return mnCurrentPos; } 299 sal_uInt16 GetDisplayLineCount() const; 300 void SetEntryFlags( sal_uInt16 nPos, long nFlags ); 301 302 void DrawEntry( sal_uInt16 nPos, sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDrawTextAtImagePos = sal_False, bool bLayout = false ); 303 304 void SelectEntry( sal_uInt16 nPos, sal_Bool bSelect ); 305 void DeselectAll(); 306 sal_uInt16 GetEntryPosForPoint( const Point& rPoint ) const; 307 sal_uInt16 GetLastVisibleEntry() const; 308 309 sal_Bool ProcessKeyInput( const KeyEvent& rKEvt ); 310 311 void SetTopEntry( sal_uInt16 nTop ); 312 sal_uInt16 GetTopEntry() const { return mnTop; } 313 // ShowProminentEntry will set the entry correspoding to nEntryPos 314 // either at top or in the middle depending on the chosen style 315 void ShowProminentEntry( sal_uInt16 nEntryPos ); 316 void SetProminentEntryType( ProminentEntry eType ) { meProminentType = eType; } 317 ProminentEntry GetProminentEntryType() const { return meProminentType; } 318 using Window::IsVisible; 319 sal_Bool IsVisible( sal_uInt16 nEntry ) const; 320 321 long GetLeftIndent() const { return mnLeft; } 322 void SetLeftIndent( long n ); 323 void ScrollHorz( long nDiff ); 324 325 void AllowGrabFocus( sal_Bool b ) { mbGrabFocus = b; } 326 sal_Bool IsGrabFocusAllowed() const { return mbGrabFocus; } 327 328 void SetSeparatorPos( sal_uInt16 n ) { mnSeparatorPos = n; } 329 sal_uInt16 GetSeparatorPos() const { return mnSeparatorPos; } 330 331 void SetTravelSelect( sal_Bool bTravelSelect ) { mbTravelSelect = bTravelSelect; } 332 sal_Bool IsTravelSelect() const { return mbTravelSelect; } 333 sal_Bool IsTrackingSelect() const { return mbTrackingSelect; } 334 335 void SetUserItemSize( const Size& rSz ); 336 const Size& GetUserItemSize() const { return maUserItemSize; } 337 338 void EnableUserDraw( sal_Bool bUserDraw ) { mbUserDrawEnabled = bUserDraw; } 339 sal_Bool IsUserDrawEnabled() const { return mbUserDrawEnabled; } 340 341 void EnableMultiSelection( sal_Bool bMulti, sal_Bool bStackMode ) { mbMulti = bMulti; mbStackMode = bStackMode; } 342 sal_Bool IsMultiSelectionEnabled() const { return mbMulti; } 343 344 void SetMultiSelectionSimpleMode( sal_Bool bSimple ) { mbSimpleMode = bSimple; } 345 sal_Bool IsMultiSelectionSimpleMode() const { return mbSimpleMode; } 346 347 void EnableMouseMoveSelect( sal_Bool bMouseMoveSelect ) { mbMouseMoveSelect = bMouseMoveSelect; } 348 sal_Bool IsMouseMoveSelectEnabled() const { return mbMouseMoveSelect; } 349 sal_Bool IsMouseMoveSelect() const { return mbMouseMoveSelect||mbStackMode; } 350 351 Size CalcSize( sal_uInt16 nMaxLines ) const; 352 Rectangle GetBoundingRectangle( sal_uInt16 nItem ) const; 353 354 long GetEntryHeight() const { return mnMaxHeight; } 355 long GetMaxEntryWidth() const { return mnMaxWidth; } 356 357 void SetScrollHdl( const Link& rLink ) { maScrollHdl = rLink; } 358 const Link& GetScrollHdl() const { return maScrollHdl; } 359 void SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; } 360 const Link& GetSelectHdl() const { return maSelectHdl; } 361 void SetCancelHdl( const Link& rLink ) { maCancelHdl = rLink; } 362 const Link& GetCancelHdl() const { return maCancelHdl; } 363 void SetDoubleClickHdl( const Link& rLink ) { maDoubleClickHdl = rLink; } 364 const Link& GetDoubleClickHdl() const { return maDoubleClickHdl; } 365 void SetUserDrawHdl( const Link& rLink ) { maUserDrawHdl = rLink; } 366 const Link& GetUserDrawHdl() const { return maUserDrawHdl; } 367 void SetMRUChangedHdl( const Link& rLink ) { maMRUChangedHdl = rLink; } 368 const Link& GetMRUChangedHdl() const { return maMRUChangedHdl; } 369 //IAccessibility2 Implementation 2009----- 370 void SetFocusHdl( const Link& rLink ) { maFocusHdl = rLink ; } 371 const Link& GetFocusHdl() const { return maFocusHdl; } 372 373 void SetListItemSelectHdl( const Link& rLink ) { maListItemSelectHdl = rLink ; } 374 const Link& GetListItemSelectHdl() const { return maListItemSelectHdl; } 375 //-----IAccessibility2 Implementation 2009 376 sal_Bool IsSelectionChanged() const { return mbSelectionChanged; } 377 sal_uInt16 GetSelectModifier() const { return mnSelectModifier; } 378 379 void EnableSort( sal_Bool b ) { mbSort = b; } 380 381 void SetReadOnly( sal_Bool bReadOnly ) { mbReadOnly = bReadOnly; } 382 sal_Bool IsReadOnly() const { return mbReadOnly; } 383 384 using Control::ImplInitSettings; 385 void ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground ); 386 sal_uInt16 ImplGetTextStyle() const; 387 388 // pb: #106948# explicit mirroring for calc 389 inline void EnableMirroring() { mbMirroring = sal_True; } 390 inline sal_Bool IsMirroring() const { return mbMirroring; } 391 392 protected: 393 // ISearchableStringList 394 virtual ::vcl::StringEntryIdentifier CurrentEntry( String& _out_entryText ) const; 395 virtual ::vcl::StringEntryIdentifier NextEntry( ::vcl::StringEntryIdentifier _currentEntry, String& _out_entryText ) const; 396 virtual void SelectEntry( ::vcl::StringEntryIdentifier _entry ); 397 }; 398 399 // --------------- 400 // - ImplListBox - 401 // --------------- 402 403 class ImplListBox : public Control 404 { 405 private: 406 ImplListBoxWindow maLBWindow; 407 ScrollBar* mpHScrollBar; 408 ScrollBar* mpVScrollBar; 409 ScrollBarBox* mpScrollBarBox; 410 sal_Bool mbVScroll : 1, // VScroll an oder aus 411 mbHScroll : 1, // HScroll an oder aus 412 mbAutoHScroll : 1; // AutoHScroll an oder aus 413 Link maScrollHdl; // Weil der vom ImplListBoxWindow selbst benoetigt wird. 414 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxDNDListenerContainer; 415 416 protected: 417 virtual void GetFocus(); 418 virtual void StateChanged( StateChangedType nType ); 419 virtual void DataChanged( const DataChangedEvent& rDCEvt ); 420 421 long Notify( NotifyEvent& rNEvt ); 422 423 void ImplResizeControls(); 424 void ImplCheckScrollBars(); 425 void ImplInitScrollBars(); 426 427 DECL_LINK( ScrollBarHdl, ScrollBar* ); 428 DECL_LINK( LBWindowScrolled, void* ); 429 DECL_LINK( MRUChanged, void* ); 430 431 public: 432 ImplListBox( Window* pParent, WinBits nWinStyle ); 433 ~ImplListBox(); 434 435 const ImplEntryList* GetEntryList() const { return maLBWindow.GetEntryList(); } 436 ImplListBoxWindow* GetMainWindow() { return &maLBWindow; } 437 438 virtual void Resize(); 439 virtual const Wallpaper& GetDisplayBackground() const; 440 virtual Window* GetPreferredKeyInputWindow(); 441 442 sal_uInt16 InsertEntry( sal_uInt16 nPos, const XubString& rStr ); 443 sal_uInt16 InsertEntry( sal_uInt16 nPos, const Image& rImage ); 444 sal_uInt16 InsertEntry( sal_uInt16 nPos, const XubString& rStr, const Image& rImage ); 445 void RemoveEntry( sal_uInt16 nPos ); 446 void SetEntryData( sal_uInt16 nPos, void* pNewData ) { maLBWindow.GetEntryList()->SetEntryData( nPos, pNewData ); } 447 void Clear(); 448 449 void SetEntryFlags( sal_uInt16 nPos, long nFlags ); 450 long GetEntryFlags( sal_uInt16 nPos ) const; 451 452 void SelectEntry( sal_uInt16 nPos, sal_Bool bSelect ); 453 void SetNoSelection(); 454 void ResetCurrentPos() { maLBWindow.ResetCurrentPos(); } 455 sal_uInt16 GetCurrentPos() const { return maLBWindow.GetCurrentPos(); } 456 457 sal_Bool ProcessKeyInput( const KeyEvent& rKEvt ) { return maLBWindow.ProcessKeyInput( rKEvt ); } 458 sal_Bool HandleWheelAsCursorTravel( const CommandEvent& rCEvt ); 459 460 void SetSeparatorPos( sal_uInt16 n ) { maLBWindow.SetSeparatorPos( n ); } 461 sal_uInt16 GetSeparatorPos() const { return maLBWindow.GetSeparatorPos(); } 462 463 void SetTopEntry( sal_uInt16 nTop ) { maLBWindow.SetTopEntry( nTop ); } 464 sal_uInt16 GetTopEntry() const { return maLBWindow.GetTopEntry(); } 465 void ShowProminentEntry( sal_uInt16 nPos ) { maLBWindow.ShowProminentEntry( nPos ); } 466 using Window::IsVisible; 467 sal_Bool IsVisible( sal_uInt16 nEntry ) const { return maLBWindow.IsVisible( nEntry ); } 468 469 void SetProminentEntryType( ProminentEntry eType ) { maLBWindow.SetProminentEntryType( eType ); } 470 ProminentEntry GetProminentEntryType() const { return maLBWindow.GetProminentEntryType(); } 471 472 long GetLeftIndent() const { return maLBWindow.GetLeftIndent(); } 473 void SetLeftIndent( sal_uInt16 n ) { maLBWindow.SetLeftIndent( n ); } 474 void ScrollHorz( short nDiff ) { maLBWindow.ScrollHorz( nDiff ); } 475 476 void SetTravelSelect( sal_Bool bTravelSelect ) { maLBWindow.SetTravelSelect( bTravelSelect ); } 477 sal_Bool IsTravelSelect() const { return maLBWindow.IsTravelSelect(); } 478 sal_Bool IsTrackingSelect() const { return maLBWindow.IsTrackingSelect(); } 479 480 void EnableMultiSelection( sal_Bool bMulti, sal_Bool bStackMode ) { maLBWindow.EnableMultiSelection( bMulti, bStackMode ); } 481 sal_Bool IsMultiSelectionEnabled() const { return maLBWindow.IsMultiSelectionEnabled(); } 482 483 void SetMultiSelectionSimpleMode( sal_Bool bSimple ) { maLBWindow.SetMultiSelectionSimpleMode( bSimple ); } 484 sal_Bool IsMultiSelectionSimpleMode() const { return maLBWindow.IsMultiSelectionSimpleMode(); } 485 486 void SetReadOnly( sal_Bool b ) { maLBWindow.SetReadOnly( b ); } 487 sal_Bool IsReadOnly() const { return maLBWindow.IsReadOnly(); } 488 489 490 Size CalcSize( sal_uInt16 nMaxLines ) const { return maLBWindow.CalcSize( nMaxLines ); } 491 long GetEntryHeight() const { return maLBWindow.GetEntryHeight(); } 492 long GetMaxEntryWidth() const { return maLBWindow.GetMaxEntryWidth(); } 493 494 void SetScrollHdl( const Link& rLink ) { maScrollHdl = rLink; } 495 const Link& GetScrollHdl() const { return maScrollHdl; } 496 void SetSelectHdl( const Link& rLink ) { maLBWindow.SetSelectHdl( rLink ); } 497 const Link& GetSelectHdl() const { return maLBWindow.GetSelectHdl(); } 498 void SetCancelHdl( const Link& rLink ) { maLBWindow.SetCancelHdl( rLink ); } 499 const Link& GetCancelHdl() const { return maLBWindow.GetCancelHdl(); } 500 void SetDoubleClickHdl( const Link& rLink ) { maLBWindow.SetDoubleClickHdl( rLink ); } 501 const Link& GetDoubleClickHdl() const { return maLBWindow.GetDoubleClickHdl(); } 502 void SetUserDrawHdl( const Link& rLink ) { maLBWindow.SetUserDrawHdl( rLink ); } 503 const Link& GetUserDrawHdl() const { return maLBWindow.GetUserDrawHdl(); } 504 505 //IAccessibility2 Implementation 2009----- 506 void SetFocusHdl( const Link& rLink ) { maLBWindow.SetFocusHdl( rLink ); } 507 const Link& GetFocusHdl() const { return maLBWindow.GetFocusHdl(); } 508 void SetListItemSelectHdl( const Link& rLink ) { maLBWindow.SetListItemSelectHdl( rLink ); } 509 const Link& GetListItemSelectHdl() const { return maLBWindow.GetListItemSelectHdl(); } 510 //-----IAccessibility2 Implementation 2009 511 void SetSelectionChangedHdl( const Link& rLnk ) { maLBWindow.GetEntryList()->SetSelectionChangedHdl( rLnk ); } 512 void SetCallSelectionChangedHdl( sal_Bool bCall ) { maLBWindow.GetEntryList()->SetCallSelectionChangedHdl( bCall ); } 513 sal_Bool IsSelectionChanged() const { return maLBWindow.IsSelectionChanged(); } 514 sal_uInt16 GetSelectModifier() const { return maLBWindow.GetSelectModifier(); } 515 516 void SetMRUEntries( const XubString& rEntries, xub_Unicode cSep ); 517 XubString GetMRUEntries( xub_Unicode cSep ) const; 518 void SetMaxMRUCount( sal_uInt16 n ) { maLBWindow.GetEntryList()->SetMaxMRUCount( n ); } 519 sal_uInt16 GetMaxMRUCount() const { return maLBWindow.GetEntryList()->GetMaxMRUCount(); } 520 sal_uInt16 GetDisplayLineCount() const 521 { return maLBWindow.GetDisplayLineCount(); } 522 523 // pb: #106948# explicit mirroring for calc 524 inline void EnableMirroring() { maLBWindow.EnableMirroring(); } 525 inline void SetDropTraget(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_xDNDListenerContainer){ mxDNDListenerContainer= i_xDNDListenerContainer; } 526 }; 527 528 // ----------------------------- 529 // - ImplListBoxFloatingWindow - 530 // ----------------------------- 531 532 class ImplListBoxFloatingWindow : public FloatingWindow 533 { 534 private: 535 ImplListBox* mpImplLB; 536 Size maPrefSz; 537 sal_uInt16 mnDDLineCount; 538 sal_uInt16 mnPopupModeStartSaveSelection; 539 sal_Bool mbAutoWidth; 540 541 protected: 542 long PreNotify( NotifyEvent& rNEvt ); 543 544 public: 545 ImplListBoxFloatingWindow( Window* pParent ); 546 547 void SetImplListBox( ImplListBox* pLB ) { mpImplLB = pLB; } 548 549 void SetPrefSize( const Size& rSz ) { maPrefSz = rSz; } 550 const Size& GetPrefSize() const { return maPrefSz; } 551 552 void SetAutoWidth( sal_Bool b ) { mbAutoWidth = b; } 553 sal_Bool IsAutoWidth() const { return mbAutoWidth; } 554 555 Size CalcFloatSize(); 556 void StartFloat( sal_Bool bStartTracking ); 557 558 virtual void SetPosSizePixel( long nX, long nY, 559 long nWidth, long nHeight, sal_uInt16 nFlags = WINDOW_POSSIZE_ALL ); 560 void SetPosSizePixel( const Point& rNewPos, const Size& rNewSize ) 561 { FloatingWindow::SetPosSizePixel( rNewPos, rNewSize ); } 562 563 void SetDropDownLineCount( sal_uInt16 n ) { mnDDLineCount = n; } 564 sal_uInt16 GetDropDownLineCount() const { return mnDDLineCount; } 565 566 sal_uInt16 GetPopupModeStartSaveSelection() const { return mnPopupModeStartSaveSelection; } 567 568 virtual void Resize(); 569 }; 570 571 // ----------- 572 // - ImplWin - 573 // ----------- 574 575 class ImplWin : public Control 576 { 577 private: 578 579 sal_uInt16 mnItemPos; // wegen UserDraw muss ich wissen, welches Item ich darstelle. 580 XubString maString; 581 Image maImage; 582 Image maImageHC; 583 584 Rectangle maFocusRect; 585 Size maUserItemSize; 586 587 Link maMBDownHdl; 588 Link maUserDrawHdl; 589 590 sal_Bool mbUserDrawEnabled : 1, 591 mbInUserDraw : 1; 592 593 594 void ImplDraw( bool bLayout = false ); 595 protected: 596 virtual void FillLayoutData() const; 597 public: 598 599 ImplWin( Window* pParent, WinBits nWinStyle = 0 ); 600 ~ImplWin() {}; 601 602 virtual void MouseButtonDown( const MouseEvent& rMEvt ); 603 virtual void Paint( const Rectangle& rRect ); 604 virtual void Resize(); 605 virtual void GetFocus(); 606 virtual void LoseFocus(); 607 virtual long PreNotify( NotifyEvent& rNEvt ); 608 609 sal_uInt16 GetItemPos() const { return mnItemPos; } 610 void SetItemPos( sal_uInt16 n ) { mnItemPos = n; } 611 612 const XubString& GetString() const { return maString; } 613 void SetString( const XubString& rStr ) { maString = rStr; } 614 615 const Image& GetImage() const { return maImage; } 616 void SetImage( const Image& rImg ) { maImage = rImg; } 617 618 sal_Bool SetModeImage( const Image& rImage, BmpColorMode eMode = BMP_COLOR_NORMAL ); 619 const Image& GetModeImage( BmpColorMode eMode = BMP_COLOR_NORMAL ) const; 620 621 622 virtual void MBDown(); 623 void SetMBDownHdl( const Link& rLink ) { maMBDownHdl = rLink; } 624 const Link& GetMBDownHdl() const { return maMBDownHdl; } 625 626 void SetUserDrawHdl( const Link& rLink ) { maUserDrawHdl = rLink; } 627 const Link& GetUserDrawHdl() const { return maUserDrawHdl; } 628 629 void SetUserItemSize( const Size& rSz ) { maUserItemSize = rSz; } 630 const Size& GetUserItemSize() const { return maUserItemSize; } 631 632 void EnableUserDraw( sal_Bool bUserDraw ) { mbUserDrawEnabled = bUserDraw; } 633 sal_Bool IsUserDrawEnabled() const { return mbUserDrawEnabled; } 634 635 void DrawEntry( sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDrawTextAtImagePos = sal_False, bool bLayout = false ); 636 }; 637 638 // ----------- 639 // - ImplBtn - 640 // ----------- 641 642 class ImplBtn : public PushButton 643 { 644 private: 645 sal_Bool mbDown; 646 647 Link maMBDownHdl; 648 649 public: 650 ImplBtn( Window* pParent, WinBits nWinStyle = 0 ); 651 ~ImplBtn() {}; 652 653 virtual void MouseButtonDown( const MouseEvent& rMEvt ); 654 655 virtual void MBDown(); 656 void SetMBDownHdl( const Link& rLink ) { maMBDownHdl = rLink; } 657 const Link& GetMBDownHdl() const { return maMBDownHdl; } 658 }; 659 660 661 void ImplInitFieldSettings( Window* pWin, sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground ); 662 void ImplInitDropDownButton( PushButton* pButton ); 663 664 #endif // _SV_ILSTBOX_HXX 665