|  | /************************************************************** | 
|  | * | 
|  | * 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. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  |  | 
|  | #ifndef _SV_ILSTBOX_HXX | 
|  | #define _SV_ILSTBOX_HXX | 
|  |  | 
|  | #include <vcl/sv.h> | 
|  | #include <vcl/image.hxx> | 
|  | #include <vcl/ctrl.hxx> | 
|  | #include <vcl/button.hxx> | 
|  | #include <vcl/floatwin.hxx> | 
|  | #include <vcl/lstbox.h> | 
|  | #include <vcl/timer.hxx> | 
|  |  | 
|  | #include "vcl/quickselectionengine.hxx" | 
|  |  | 
|  | class ScrollBar; | 
|  | class ScrollBarBox; | 
|  |  | 
|  | // ----------------- | 
|  | // - ListBox-Types - | 
|  | // ----------------- | 
|  |  | 
|  | #define HORZ_SCROLL 		4 | 
|  | #define IMG_TXT_DISTANCE	6 | 
|  |  | 
|  | enum LB_EVENT_TYPE | 
|  | { | 
|  | LET_MBDOWN, | 
|  | LET_TRACKING, | 
|  | LET_TRACKING_END, | 
|  | LET_KEYMOVE, | 
|  | LET_KEYSPACE | 
|  | }; | 
|  |  | 
|  | // ----------------- | 
|  | // - ImplEntryType - | 
|  | // ----------------- | 
|  |  | 
|  | struct ImplEntryType | 
|  | { | 
|  | XubString	maStr; | 
|  | Image		maImage; | 
|  | void*		mpUserData; | 
|  | sal_Bool		mbIsSelected; | 
|  | long		mnFlags; | 
|  | long        mnHeight; | 
|  |  | 
|  | ImplEntryType( const XubString& rStr, const Image& rImage ) : | 
|  | maStr( rStr ), | 
|  | maImage( rImage ), | 
|  | mnFlags( 0 ), | 
|  | mnHeight( 0 ) | 
|  | { | 
|  | mbIsSelected = sal_False; | 
|  | mpUserData = NULL; | 
|  | } | 
|  |  | 
|  | ImplEntryType( const XubString& rStr ) : | 
|  | maStr( rStr ), | 
|  | mnFlags( 0 ), | 
|  | mnHeight( 0 ) | 
|  | { | 
|  | mbIsSelected = sal_False; | 
|  | mpUserData = NULL; | 
|  | } | 
|  |  | 
|  | ImplEntryType( const Image& rImage ) : | 
|  | maImage( rImage ), | 
|  | mnFlags( 0 ), | 
|  | mnHeight( 0 ) | 
|  | { | 
|  | mbIsSelected = sal_False; | 
|  | mpUserData = NULL; | 
|  | } | 
|  | }; | 
|  |  | 
|  | // ----------------- | 
|  | // - ImplEntryList - | 
|  | // ----------------- | 
|  |  | 
|  | class ImplEntryList : private List | 
|  | { | 
|  | private: | 
|  | Window*         mpWindow;   // For getting the current locale when matching strings | 
|  | sal_uInt16			mnLastSelected; | 
|  | sal_uInt16			mnSelectionAnchor; | 
|  | sal_uInt16			mnImages; | 
|  |  | 
|  | sal_uInt16			mnMRUCount; | 
|  | sal_uInt16			mnMaxMRUCount; | 
|  |  | 
|  | Link			maSelectionChangedHdl; | 
|  | sal_Bool			mbCallSelectionChangedHdl; | 
|  |  | 
|  | ImplEntryType*	GetEntry( sal_uInt16 nPos )	const { return (ImplEntryType*)List::GetObject( nPos ); } | 
|  |  | 
|  | public: | 
|  | ImplEntryList( Window* pWindow ); | 
|  | ~ImplEntryList(); | 
|  |  | 
|  | sal_uInt16					InsertEntry( sal_uInt16 nPos, ImplEntryType* pNewEntry, sal_Bool bSort ); | 
|  | void					RemoveEntry( sal_uInt16 nPos ); | 
|  | const ImplEntryType* 	GetEntryPtr( sal_uInt16 nPos ) const { return (const ImplEntryType*) GetObject( nPos ); } | 
|  | ImplEntryType* 	        GetMutableEntryPtr( sal_uInt16 nPos ) const { return (ImplEntryType*) GetObject( nPos ); } | 
|  | void					Clear(); | 
|  |  | 
|  | sal_uInt16			FindMatchingEntry( const XubString& rStr, sal_uInt16 nStart = 0, sal_Bool bForward = sal_True, sal_Bool bLazy = sal_True ) const; | 
|  | sal_uInt16			FindEntry( const XubString& rStr, sal_Bool bSearchMRUArea = sal_False ) const; | 
|  | sal_uInt16			FindEntry( const void* pData ) const; | 
|  |  | 
|  | // helper: add up heights up to index nEndIndex. | 
|  | // GetAddedHeight( 0 ) returns 0 | 
|  | // GetAddedHeight( LISTBOX_ENTRY_NOTFOUND ) returns 0 | 
|  | // GetAddedHeight( i, k ) with k > i is equivalent -GetAddedHeight( k, i ) | 
|  | long            GetAddedHeight( sal_uInt16 nEndIndex, sal_uInt16 nBeginIndex = 0, long nBeginHeight = 0 ) const; | 
|  | long            GetEntryHeight( sal_uInt16 nPos ) const; | 
|  |  | 
|  | sal_uInt16			GetEntryCount() const { return (sal_uInt16)List::Count(); } | 
|  | sal_Bool			HasImages() const { return mnImages ? sal_True : sal_False; } | 
|  |  | 
|  | XubString		GetEntryText( sal_uInt16 nPos ) const; | 
|  |  | 
|  | sal_Bool			HasEntryImage( sal_uInt16 nPos ) const; | 
|  | Image			GetEntryImage( sal_uInt16 nPos ) const; | 
|  |  | 
|  | void			SetEntryData( sal_uInt16 nPos, void* pNewData ); | 
|  | void*			GetEntryData( sal_uInt16 nPos ) const; | 
|  |  | 
|  | void			SetEntryFlags( sal_uInt16 nPos, long nFlags ); | 
|  | long			GetEntryFlags( sal_uInt16 nPos ) const; | 
|  |  | 
|  | void			SelectEntry( sal_uInt16 nPos, sal_Bool bSelect ); | 
|  |  | 
|  | sal_uInt16			GetSelectEntryCount() const; | 
|  | XubString		GetSelectEntry( sal_uInt16 nIndex ) const; | 
|  | sal_uInt16			GetSelectEntryPos( sal_uInt16 nIndex ) const; | 
|  | sal_Bool			IsEntrySelected( const XubString& rStr ) const; | 
|  | sal_Bool			IsEntryPosSelected( sal_uInt16 nIndex ) const; | 
|  |  | 
|  | void			SetLastSelected( sal_uInt16 nPos )	{ mnLastSelected = nPos; } | 
|  | sal_uInt16			GetLastSelected() const { return mnLastSelected; } | 
|  |  | 
|  | void			SetSelectionAnchor( sal_uInt16 nPos )	{ mnSelectionAnchor = nPos; } | 
|  | sal_uInt16			GetSelectionAnchor() const { return mnSelectionAnchor; } | 
|  |  | 
|  |  | 
|  | void			SetSelectionChangedHdl( const Link& rLnk )	{ maSelectionChangedHdl = rLnk; } | 
|  | void			SetCallSelectionChangedHdl( sal_Bool bCall )	{ mbCallSelectionChangedHdl = bCall; } | 
|  |  | 
|  | void			SetMRUCount( sal_uInt16 n )	{ mnMRUCount = n; } | 
|  | sal_uInt16			GetMRUCount() const		{ return mnMRUCount; } | 
|  |  | 
|  | void			SetMaxMRUCount( sal_uInt16 n )	{ mnMaxMRUCount = n; } | 
|  | sal_uInt16			GetMaxMRUCount() const		{ return mnMaxMRUCount; } | 
|  |  | 
|  | /**	An Entry is selectable if its mnFlags does not have the | 
|  | LISTBOX_ENTRY_FLAG_DISABLE_SELECTION flag set. */ | 
|  | bool			IsEntrySelectable( sal_uInt16 nPos ) const; | 
|  |  | 
|  | /** returns the first entry found from the given position nPos that is selectable | 
|  | or LISTBOX_ENTRY_NOTFOUND if non is found. If the entry at nPos is not selectable, | 
|  | it returns the first selectable entry after nPos if bForward is true and the | 
|  | first selectable entry after nPos is bForward is false. | 
|  | */ | 
|  | sal_uInt16			FindFirstSelectable( sal_uInt16 nPos, bool bForward = true ); | 
|  | }; | 
|  |  | 
|  | // --------------------- | 
|  | // - ImplListBoxWindow - | 
|  | // --------------------- | 
|  |  | 
|  | class ImplListBoxWindow : public Control, public ::vcl::ISearchableStringList | 
|  | { | 
|  | private: | 
|  | ImplEntryList*	mpEntryList;	 // EntryListe | 
|  | Rectangle		maFocusRect; | 
|  |  | 
|  | Size			maUserItemSize; | 
|  |  | 
|  | long			mnMaxTxtHeight;  // Maximale Hoehe eines Text-Items | 
|  | long			mnMaxTxtWidth;	 // Maximale Breite eines Text-Items | 
|  | // Entry ohne Image | 
|  | long			mnMaxImgTxtWidth;// Maximale Breite eines Text-Items | 
|  | // Entry UND Image | 
|  | long			mnMaxImgWidth;	 // Maximale Breite eines Image-Items | 
|  | long			mnMaxImgHeight;  // Maximale Hoehe eines Image-Items | 
|  | long			mnMaxWidth; 	 // Maximale Breite eines Eintrags | 
|  | long			mnMaxHeight;	 // Maximale Hoehe eines Eintrags | 
|  |  | 
|  | sal_uInt16			mnCurrentPos;	 // Position (Focus) | 
|  | sal_uInt16			mnTrackingSaveSelection; // Selektion vor Tracking(); | 
|  |  | 
|  | sal_uInt16			mnSeparatorPos;	// Separator | 
|  |  | 
|  | sal_uInt16			mnUserDrawEntry; | 
|  |  | 
|  | sal_uInt16			mnTop;			 // Ausgabe ab Zeile | 
|  | long			mnLeft; 		 // Ausgabe ab Spalte | 
|  | long			mnBorder;		 // Abstand Rahmen - Text | 
|  | long			mnTextHeight;	 // Texthoehe | 
|  | ProminentEntry  meProminentType; // where is the "prominent" entry | 
|  |  | 
|  | sal_uInt16			mnSelectModifier;	// Modifiers | 
|  |  | 
|  | /// bitfield | 
|  | bool mbHasFocusRect : 1; | 
|  | bool mbSort : 1;             // ListBox sortiert | 
|  | bool mbTrack : 1;            // Tracking | 
|  | bool mbMulti : 1;            // MultiListBox | 
|  | bool mbStackMode : 1;        // StackSelection | 
|  | bool mbSimpleMode : 1;       // SimpleMode fuer MultiListBox | 
|  | bool mbImgsDiffSz : 1;       // Images haben verschiedene Groessen | 
|  | bool mbTravelSelect : 1;     // TravelSelect | 
|  | bool mbTrackingSelect : 1;   // Selektiert bei MouseMove | 
|  | bool mbSelectionChanged : 1; // Select() nicht zu oft rufen... | 
|  | bool mbMouseMoveSelect : 1;  // Selektieren bei MouseMove | 
|  | bool mbGrabFocus : 1;        // Focus bei MBDown grabben | 
|  | bool mbUserDrawEnabled : 1;  // UserDraw possible | 
|  | bool mbInUserDraw : 1;       // In UserDraw | 
|  | bool mbReadOnly : 1;         // ReadOnly | 
|  | bool mbMirroring : 1;        // pb: #106948# explicit mirroring for calc | 
|  | bool mbRight : 1;            // right align Text output | 
|  | bool mbCenter : 1;           // center Text output | 
|  | bool mbEdgeBlending : 1; | 
|  |  | 
|  | Link			maScrollHdl; | 
|  | Link			maSelectHdl; | 
|  | Link			maCancelHdl; | 
|  | Link			maDoubleClickHdl; | 
|  | Link			maUserDrawHdl; | 
|  | Link			maMRUChangedHdl; | 
|  | Link			maFocusHdl; | 
|  | Link			maListItemSelectHdl; | 
|  |  | 
|  | ::vcl::QuickSelectionEngine maQuickSelectionEngine; | 
|  |  | 
|  | protected: | 
|  | virtual void	KeyInput( const KeyEvent& rKEvt ); | 
|  | virtual void	MouseButtonDown( const MouseEvent& rMEvt ); | 
|  | virtual void	MouseMove( const MouseEvent& rMEvt ); | 
|  | virtual void	Tracking( const TrackingEvent& rTEvt ); | 
|  | virtual void	Paint( const Rectangle& rRect ); | 
|  | virtual void	Resize(); | 
|  | virtual void	GetFocus(); | 
|  | virtual void	LoseFocus(); | 
|  |  | 
|  | //sal_Bool			SelectEntries( sal_uInt16 nSelect, LB_EVENT_TYPE eLET, sal_Bool bShift = sal_False, sal_Bool bCtrl = sal_False ); | 
|  | 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 ); | 
|  | void			ImplPaint( sal_uInt16 nPos, sal_Bool bErase = sal_False, bool bLayout = false ); | 
|  | void			ImplDoPaint( const Rectangle& rRect, bool bLayout = false ); | 
|  | void			ImplCalcMetrics(); | 
|  | void			ImplUpdateEntryMetrics( ImplEntryType& rEntry ); | 
|  | void			ImplCallSelect(); | 
|  |  | 
|  | void            ImplShowFocusRect(); | 
|  | void            ImplHideFocusRect(); | 
|  |  | 
|  |  | 
|  | virtual void	StateChanged( StateChangedType nType ); | 
|  | virtual void	DataChanged( const DataChangedEvent& rDCEvt ); | 
|  |  | 
|  | public: | 
|  | virtual void  FillLayoutData() const; | 
|  |  | 
|  | ImplListBoxWindow( Window* pParent, WinBits nWinStyle ); | 
|  | ~ImplListBoxWindow(); | 
|  |  | 
|  | ImplEntryList*	GetEntryList() const { return mpEntryList; } | 
|  |  | 
|  | sal_uInt16			InsertEntry( sal_uInt16 nPos, ImplEntryType* pNewEntry ); | 
|  | void			RemoveEntry( sal_uInt16 nPos ); | 
|  | void			Clear(); | 
|  | void			ResetCurrentPos()				{ mnCurrentPos = LISTBOX_ENTRY_NOTFOUND; } | 
|  | sal_uInt16			GetCurrentPos()	const			{ return mnCurrentPos; } | 
|  | sal_uInt16			GetDisplayLineCount() const; | 
|  | void            SetEntryFlags( sal_uInt16 nPos, long nFlags ); | 
|  |  | 
|  | void 			DrawEntry( sal_uInt16 nPos, sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDrawTextAtImagePos = sal_False, bool bLayout = false ); | 
|  |  | 
|  | void			SelectEntry( sal_uInt16 nPos, sal_Bool bSelect ); | 
|  | void			DeselectAll(); | 
|  | sal_uInt16			GetEntryPosForPoint( const Point& rPoint ) const; | 
|  | sal_uInt16          GetLastVisibleEntry() const; | 
|  |  | 
|  | sal_Bool			ProcessKeyInput( const KeyEvent& rKEvt ); | 
|  |  | 
|  | void			SetTopEntry( sal_uInt16 nTop ); | 
|  | sal_uInt16			GetTopEntry() const 			{ return mnTop; } | 
|  | // ShowProminentEntry will set the entry correspoding to nEntryPos | 
|  | // either at top or in the middle depending on the chosen style | 
|  | void            ShowProminentEntry( sal_uInt16 nEntryPos ); | 
|  | void            SetProminentEntryType( ProminentEntry eType ) { meProminentType = eType; } | 
|  | ProminentEntry  GetProminentEntryType() const { return meProminentType; } | 
|  | using Window::IsVisible; | 
|  | sal_Bool			IsVisible( sal_uInt16 nEntry ) const; | 
|  |  | 
|  | long			GetLeftIndent() const			{ return mnLeft; } | 
|  | void			SetLeftIndent( long n ); | 
|  | void			ScrollHorz( long nDiff ); | 
|  |  | 
|  | void			AllowGrabFocus( bool b )		{ mbGrabFocus = b; } | 
|  | bool            IsGrabFocusAllowed() const		{ return mbGrabFocus; } | 
|  |  | 
|  | void			SetSeparatorPos( sal_uInt16 n )		{ mnSeparatorPos = n; } | 
|  | sal_uInt16			GetSeparatorPos() const			{ return mnSeparatorPos; } | 
|  |  | 
|  | void            SetTravelSelect( bool bTravelSelect ) { mbTravelSelect = bTravelSelect; } | 
|  | bool            IsTravelSelect() const			{ return mbTravelSelect; } | 
|  | bool            IsTrackingSelect() const		{ return mbTrackingSelect; } | 
|  |  | 
|  | void			SetUserItemSize( const Size& rSz ); | 
|  | const Size&		GetUserItemSize() const				{ return maUserItemSize; } | 
|  |  | 
|  | void			EnableUserDraw( bool bUserDraw ) { mbUserDrawEnabled = bUserDraw; } | 
|  | bool            IsUserDrawEnabled() const 	{ return mbUserDrawEnabled; } | 
|  |  | 
|  | void			EnableMultiSelection( bool bMulti, bool bStackMode ) { mbMulti = bMulti; mbStackMode = bStackMode; } | 
|  | bool            IsMultiSelectionEnabled() const 	{ return mbMulti; } | 
|  |  | 
|  | void			SetMultiSelectionSimpleMode( bool bSimple )	{ mbSimpleMode = bSimple; } | 
|  | bool            IsMultiSelectionSimpleMode() const 			{ return mbSimpleMode; } | 
|  |  | 
|  | void			EnableMouseMoveSelect( bool bMouseMoveSelect ) { mbMouseMoveSelect = bMouseMoveSelect; } | 
|  | bool            IsMouseMoveSelectEnabled() const 	{ return mbMouseMoveSelect; } | 
|  | bool            IsMouseMoveSelect() const 	{ return mbMouseMoveSelect||mbStackMode; } | 
|  |  | 
|  | Size			CalcSize( sal_uInt16 nMaxLines ) const; | 
|  | Rectangle       GetBoundingRectangle( sal_uInt16 nItem ) const; | 
|  |  | 
|  | long			GetEntryHeight() const				{ return mnMaxHeight; } | 
|  | long			GetMaxEntryWidth() const			{ return mnMaxWidth; } | 
|  |  | 
|  | void			SetScrollHdl( const Link& rLink )	{ maScrollHdl = rLink; } | 
|  | const Link& 	GetScrollHdl() const				{ return maScrollHdl; } | 
|  | void			SetSelectHdl( const Link& rLink )	{ maSelectHdl = rLink; } | 
|  | const Link& 	GetSelectHdl() const				{ return maSelectHdl; } | 
|  | void			SetCancelHdl( const Link& rLink )	{ maCancelHdl = rLink; } | 
|  | const Link& 	GetCancelHdl() const				{ return maCancelHdl; } | 
|  | void			SetDoubleClickHdl( const Link& rLink )	{ maDoubleClickHdl = rLink; } | 
|  | const Link& 	GetDoubleClickHdl() const				{ return maDoubleClickHdl; } | 
|  | void			SetUserDrawHdl( const Link& rLink )	{ maUserDrawHdl = rLink; } | 
|  | const Link& 	GetUserDrawHdl() const				{ return maUserDrawHdl; } | 
|  | void			SetMRUChangedHdl( const Link& rLink )	{ maMRUChangedHdl = rLink; } | 
|  | const Link& 	GetMRUChangedHdl() const				{ return maMRUChangedHdl; } | 
|  | void			SetFocusHdl( const Link& rLink )	{ maFocusHdl = rLink ; } | 
|  | const Link& 	GetFocusHdl() const				{ return maFocusHdl; } | 
|  |  | 
|  | void			SetListItemSelectHdl( const Link& rLink )	{ maListItemSelectHdl = rLink ; } | 
|  | const Link& 	GetListItemSelectHdl() const				{ return maListItemSelectHdl; } | 
|  | bool			IsSelectionChanged() const { return mbSelectionChanged; } | 
|  | sal_uInt16			GetSelectModifier() const { return mnSelectModifier; } | 
|  |  | 
|  | void			EnableSort( bool b ) { mbSort = b; } | 
|  |  | 
|  | void			SetReadOnly( bool bReadOnly ) 	{ mbReadOnly = bReadOnly; } | 
|  | bool            IsReadOnly() const 				{ return mbReadOnly; } | 
|  |  | 
|  | using Control::ImplInitSettings; | 
|  | void			ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground ); | 
|  | sal_uInt16          ImplGetTextStyle() const; | 
|  |  | 
|  | // pb: #106948# explicit mirroring for calc | 
|  | inline void		EnableMirroring()		{ mbMirroring = true; } | 
|  | inline bool     IsMirroring() const { return mbMirroring; } | 
|  |  | 
|  | bool GetEdgeBlending() const { return mbEdgeBlending; } | 
|  | void SetEdgeBlending(bool bNew) { mbEdgeBlending = bNew; } | 
|  |  | 
|  | protected: | 
|  | // ISearchableStringList | 
|  | virtual ::vcl::StringEntryIdentifier    CurrentEntry( String& _out_entryText ) const; | 
|  | virtual ::vcl::StringEntryIdentifier    NextEntry( ::vcl::StringEntryIdentifier _currentEntry, String& _out_entryText ) const; | 
|  | virtual void                            SelectEntry( ::vcl::StringEntryIdentifier _entry ); | 
|  | }; | 
|  |  | 
|  | // --------------- | 
|  | // - ImplListBox - | 
|  | // --------------- | 
|  |  | 
|  | class ImplListBox : public Control | 
|  | { | 
|  | private: | 
|  | ImplListBoxWindow	maLBWindow; | 
|  | ScrollBar*			mpHScrollBar; | 
|  | ScrollBar*			mpVScrollBar; | 
|  | ScrollBarBox*		mpScrollBarBox; | 
|  |  | 
|  | /// bitfield | 
|  | bool mbVScroll : 1;     // VScroll an oder aus | 
|  | bool mbHScroll : 1;     // HScroll an oder aus | 
|  | bool mbAutoHScroll : 1; // AutoHScroll an oder aus | 
|  | bool mbEdgeBlending : 1; | 
|  |  | 
|  | Link				maScrollHdl;	// Weil der vom ImplListBoxWindow selbst benoetigt wird. | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxDNDListenerContainer; | 
|  |  | 
|  | protected: | 
|  | virtual void		GetFocus(); | 
|  | virtual void		StateChanged( StateChangedType nType ); | 
|  | virtual void		DataChanged( const DataChangedEvent& rDCEvt ); | 
|  |  | 
|  | long 				Notify( NotifyEvent& rNEvt ); | 
|  |  | 
|  | void				ImplResizeControls(); | 
|  | void				ImplCheckScrollBars(); | 
|  | void				ImplInitScrollBars(); | 
|  |  | 
|  | DECL_LINK(			ScrollBarHdl, ScrollBar* ); | 
|  | DECL_LINK(			LBWindowScrolled, void* ); | 
|  | DECL_LINK(			MRUChanged, void* ); | 
|  |  | 
|  | public: | 
|  | ImplListBox( Window* pParent, WinBits nWinStyle ); | 
|  | ~ImplListBox(); | 
|  |  | 
|  | const ImplEntryList*	GetEntryList() const			{ return maLBWindow.GetEntryList(); } | 
|  | ImplListBoxWindow* 		GetMainWindow() 				{ return &maLBWindow; } | 
|  |  | 
|  | virtual void	Resize(); | 
|  | virtual const Wallpaper& GetDisplayBackground() const; | 
|  | virtual Window*     GetPreferredKeyInputWindow(); | 
|  |  | 
|  | sal_uInt16			InsertEntry( sal_uInt16 nPos, const XubString& rStr ); | 
|  | sal_uInt16			InsertEntry( sal_uInt16 nPos, const Image& rImage ); | 
|  | sal_uInt16			InsertEntry( sal_uInt16 nPos, const XubString& rStr, const Image& rImage ); | 
|  | void			RemoveEntry( sal_uInt16 nPos ); | 
|  | void			SetEntryData( sal_uInt16 nPos, void* pNewData )	{ maLBWindow.GetEntryList()->SetEntryData( nPos, pNewData ); } | 
|  | void			Clear(); | 
|  |  | 
|  | void			SetEntryFlags( sal_uInt16 nPos, long nFlags ); | 
|  | long			GetEntryFlags( sal_uInt16 nPos ) const; | 
|  |  | 
|  | void			SelectEntry( sal_uInt16 nPos, sal_Bool bSelect ); | 
|  | void			SetNoSelection(); | 
|  | void			ResetCurrentPos()				{ maLBWindow.ResetCurrentPos(); } | 
|  | sal_uInt16			GetCurrentPos()	const			{ return maLBWindow.GetCurrentPos(); } | 
|  |  | 
|  | sal_Bool			ProcessKeyInput( const KeyEvent& rKEvt )	{ return maLBWindow.ProcessKeyInput( rKEvt ); } | 
|  | sal_Bool			HandleWheelAsCursorTravel( const CommandEvent& rCEvt ); | 
|  |  | 
|  | void			SetSeparatorPos( sal_uInt16 n )		{ maLBWindow.SetSeparatorPos( n ); } | 
|  | sal_uInt16			GetSeparatorPos() const			{ return maLBWindow.GetSeparatorPos(); } | 
|  |  | 
|  | void			SetTopEntry( sal_uInt16 nTop )		{ maLBWindow.SetTopEntry( nTop ); } | 
|  | sal_uInt16			GetTopEntry() const 			{ return maLBWindow.GetTopEntry(); } | 
|  | void            ShowProminentEntry( sal_uInt16 nPos ) { maLBWindow.ShowProminentEntry( nPos ); } | 
|  | using Window::IsVisible; | 
|  | sal_Bool			IsVisible( sal_uInt16 nEntry ) const { return maLBWindow.IsVisible( nEntry ); } | 
|  |  | 
|  | void            SetProminentEntryType( ProminentEntry eType ) { maLBWindow.SetProminentEntryType( eType ); } | 
|  | ProminentEntry  GetProminentEntryType() const { return maLBWindow.GetProminentEntryType(); } | 
|  |  | 
|  | long			GetLeftIndent() const			{ return maLBWindow.GetLeftIndent(); } | 
|  | void			SetLeftIndent( sal_uInt16 n )		{ maLBWindow.SetLeftIndent( n ); } | 
|  | void			ScrollHorz( short nDiff )		{ maLBWindow.ScrollHorz( nDiff ); } | 
|  |  | 
|  | void            SetTravelSelect( sal_Bool bTravelSelect ) { maLBWindow.SetTravelSelect( bTravelSelect ); } | 
|  | sal_Bool			IsTravelSelect() const			{ return maLBWindow.IsTravelSelect(); } | 
|  | sal_Bool			IsTrackingSelect() const			{ return maLBWindow.IsTrackingSelect(); } | 
|  |  | 
|  | void			EnableMultiSelection( sal_Bool bMulti, sal_Bool bStackMode ) { maLBWindow.EnableMultiSelection( bMulti, bStackMode ); } | 
|  | sal_Bool			IsMultiSelectionEnabled() const 	{ return maLBWindow.IsMultiSelectionEnabled(); } | 
|  |  | 
|  | void			SetMultiSelectionSimpleMode( sal_Bool bSimple ) { maLBWindow.SetMultiSelectionSimpleMode( bSimple ); } | 
|  | sal_Bool			IsMultiSelectionSimpleMode() const 	{ return maLBWindow.IsMultiSelectionSimpleMode(); } | 
|  |  | 
|  | void			SetReadOnly( sal_Bool b ) 			{ maLBWindow.SetReadOnly( b ); } | 
|  | sal_Bool			IsReadOnly() const 				{ return maLBWindow.IsReadOnly(); } | 
|  |  | 
|  |  | 
|  | Size			CalcSize( sal_uInt16 nMaxLines ) const				{ return maLBWindow.CalcSize( nMaxLines ); } | 
|  | long			GetEntryHeight() const			{ return maLBWindow.GetEntryHeight(); } | 
|  | long			GetMaxEntryWidth() const		{ return maLBWindow.GetMaxEntryWidth(); } | 
|  |  | 
|  | void			SetScrollHdl( const Link& rLink )	{ maScrollHdl = rLink; } | 
|  | const Link& 	GetScrollHdl() const				{ return maScrollHdl; } | 
|  | void			SetSelectHdl( const Link& rLink )	{ maLBWindow.SetSelectHdl( rLink ); } | 
|  | const Link& 	GetSelectHdl() const				{ return maLBWindow.GetSelectHdl(); } | 
|  | void			SetCancelHdl( const Link& rLink )	{ maLBWindow.SetCancelHdl( rLink ); } | 
|  | const Link& 	GetCancelHdl() const				{ return maLBWindow.GetCancelHdl(); } | 
|  | void			SetDoubleClickHdl( const Link& rLink )	{ maLBWindow.SetDoubleClickHdl( rLink ); } | 
|  | const Link& 	GetDoubleClickHdl() const				{ return maLBWindow.GetDoubleClickHdl(); } | 
|  | void			SetUserDrawHdl( const Link& rLink )	{ maLBWindow.SetUserDrawHdl( rLink ); } | 
|  | const Link& 	GetUserDrawHdl() const				{ return maLBWindow.GetUserDrawHdl(); } | 
|  |  | 
|  | void			SetFocusHdl( const Link& rLink )	{ maLBWindow.SetFocusHdl( rLink ); } | 
|  | const Link& 	GetFocusHdl() const				{ return maLBWindow.GetFocusHdl(); } | 
|  | void			SetListItemSelectHdl( const Link& rLink )	{ maLBWindow.SetListItemSelectHdl( rLink ); } | 
|  | const Link& 	GetListItemSelectHdl() const	{ return maLBWindow.GetListItemSelectHdl(); } | 
|  | void			SetSelectionChangedHdl( const Link& rLnk )	{ maLBWindow.GetEntryList()->SetSelectionChangedHdl( rLnk ); } | 
|  | void			SetCallSelectionChangedHdl( sal_Bool bCall )	{ maLBWindow.GetEntryList()->SetCallSelectionChangedHdl( bCall ); } | 
|  | sal_Bool			IsSelectionChanged() const 					{ return maLBWindow.IsSelectionChanged(); } | 
|  | sal_uInt16			GetSelectModifier() const 					{ return maLBWindow.GetSelectModifier(); } | 
|  |  | 
|  | void			SetMRUEntries( const XubString& rEntries, xub_Unicode cSep ); | 
|  | XubString		GetMRUEntries( xub_Unicode cSep ) const; | 
|  | void			SetMaxMRUCount( sal_uInt16 n )					{ maLBWindow.GetEntryList()->SetMaxMRUCount( n ); } | 
|  | sal_uInt16			GetMaxMRUCount() const						{ return maLBWindow.GetEntryList()->GetMaxMRUCount(); } | 
|  | sal_uInt16			GetDisplayLineCount() const | 
|  | { return maLBWindow.GetDisplayLineCount(); } | 
|  |  | 
|  | bool GetEdgeBlending() const { return mbEdgeBlending; } | 
|  | void SetEdgeBlending(bool bNew); | 
|  |  | 
|  | // pb: #106948# explicit mirroring for calc | 
|  | inline void		EnableMirroring()	{ maLBWindow.EnableMirroring(); } | 
|  | inline void     SetDropTraget(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_xDNDListenerContainer){ mxDNDListenerContainer= i_xDNDListenerContainer; } | 
|  | }; | 
|  |  | 
|  | // ----------------------------- | 
|  | // - ImplListBoxFloatingWindow - | 
|  | // ----------------------------- | 
|  |  | 
|  | class ImplListBoxFloatingWindow : public FloatingWindow | 
|  | { | 
|  | private: | 
|  | ImplListBox*	mpImplLB; | 
|  | Size			maPrefSz; | 
|  | sal_uInt16			mnDDLineCount; | 
|  | sal_uInt16          mnPopupModeStartSaveSelection; | 
|  | sal_Bool			mbAutoWidth; | 
|  |  | 
|  | protected: | 
|  | long			PreNotify( NotifyEvent& rNEvt ); | 
|  |  | 
|  | public: | 
|  | ImplListBoxFloatingWindow( Window* pParent ); | 
|  |  | 
|  | void			SetImplListBox( ImplListBox* pLB )	{ mpImplLB = pLB; } | 
|  |  | 
|  | void			SetPrefSize( const Size& rSz )		{ maPrefSz = rSz; } | 
|  | const Size& 	GetPrefSize() const 				{ return maPrefSz; } | 
|  |  | 
|  | void			SetAutoWidth( sal_Bool b )				{ mbAutoWidth = b; } | 
|  | sal_Bool            IsAutoWidth() const                 { return mbAutoWidth; } | 
|  |  | 
|  | Size			CalcFloatSize(); | 
|  | void			StartFloat( sal_Bool bStartTracking ); | 
|  |  | 
|  | virtual void	SetPosSizePixel( long nX, long nY, | 
|  | long nWidth, long nHeight, sal_uInt16 nFlags = WINDOW_POSSIZE_ALL ); | 
|  | void			SetPosSizePixel( const Point& rNewPos, const Size& rNewSize ) | 
|  | { FloatingWindow::SetPosSizePixel( rNewPos, rNewSize ); } | 
|  |  | 
|  | void			SetDropDownLineCount( sal_uInt16 n ) { mnDDLineCount = n; } | 
|  | sal_uInt16			GetDropDownLineCount() const { return mnDDLineCount; } | 
|  |  | 
|  | sal_uInt16          GetPopupModeStartSaveSelection() const { return mnPopupModeStartSaveSelection; } | 
|  |  | 
|  | virtual void	Resize(); | 
|  | }; | 
|  |  | 
|  | // ----------- | 
|  | // - ImplWin - | 
|  | // ----------- | 
|  |  | 
|  | class ImplWin : public Control | 
|  | { | 
|  | private: | 
|  |  | 
|  | sal_uInt16			mnItemPos;	// wegen UserDraw muss ich wissen, welches Item ich darstelle. | 
|  | XubString		maString; | 
|  | Image			maImage; | 
|  | Image			maImageHC; | 
|  |  | 
|  | Rectangle		maFocusRect; | 
|  | Size			maUserItemSize; | 
|  |  | 
|  | Link			maMBDownHdl; | 
|  | Link			maUserDrawHdl; | 
|  |  | 
|  | /// bitfield | 
|  | bool            mbUserDrawEnabled : 1; | 
|  | bool            mbInUserDraw : 1; | 
|  | bool            mbEdgeBlending : 1; | 
|  |  | 
|  | void ImplDraw( bool bLayout = false ); | 
|  | protected: | 
|  | virtual void  FillLayoutData() const; | 
|  | public: | 
|  |  | 
|  | ImplWin( Window* pParent, WinBits nWinStyle = 0 ); | 
|  | ~ImplWin() {}; | 
|  |  | 
|  | virtual void	MouseButtonDown( const MouseEvent& rMEvt ); | 
|  | virtual void	Paint( const Rectangle& rRect ); | 
|  | virtual void	Resize(); | 
|  | virtual void	GetFocus(); | 
|  | virtual void	LoseFocus(); | 
|  | virtual long    PreNotify( NotifyEvent& rNEvt ); | 
|  |  | 
|  | sal_uInt16			GetItemPos() const { return mnItemPos; } | 
|  | void			SetItemPos( sal_uInt16 n ) { mnItemPos = n; } | 
|  |  | 
|  | const XubString& GetString() const { return maString; } | 
|  | void			SetString( const XubString& rStr ) { maString = rStr; } | 
|  |  | 
|  | const Image&	GetImage() const { return maImage; } | 
|  | void			SetImage( const Image& rImg ) { maImage = rImg; } | 
|  |  | 
|  | sal_Bool            SetModeImage( const Image& rImage, BmpColorMode eMode = BMP_COLOR_NORMAL ); | 
|  | const Image&    GetModeImage( BmpColorMode eMode = BMP_COLOR_NORMAL ) const; | 
|  |  | 
|  |  | 
|  | virtual void	MBDown(); | 
|  | void			SetMBDownHdl( const Link& rLink ) { maMBDownHdl = rLink; } | 
|  | const Link& 	GetMBDownHdl() const { return maMBDownHdl; } | 
|  |  | 
|  | void			SetUserDrawHdl( const Link& rLink )	{ maUserDrawHdl = rLink; } | 
|  | const Link& 	GetUserDrawHdl() const				{ return maUserDrawHdl; } | 
|  |  | 
|  | void			SetUserItemSize( const Size& rSz )	{ maUserItemSize = rSz; } | 
|  | const Size&		GetUserItemSize() const				{ return maUserItemSize; } | 
|  |  | 
|  | void			EnableUserDraw( bool bUserDraw ) 	{ mbUserDrawEnabled = bUserDraw; } | 
|  | bool            IsUserDrawEnabled() const 			{ return mbUserDrawEnabled; } | 
|  |  | 
|  | void 			DrawEntry( sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDrawTextAtImagePos = sal_False, bool bLayout = false ); | 
|  |  | 
|  | bool GetEdgeBlending() const { return mbEdgeBlending; } | 
|  | void SetEdgeBlending(bool bNew) { mbEdgeBlending = bNew; } | 
|  | }; | 
|  |  | 
|  | // ----------- | 
|  | // - ImplBtn - | 
|  | // ----------- | 
|  |  | 
|  | class ImplBtn : public PushButton | 
|  | { | 
|  | private: | 
|  | sal_Bool			mbDown; | 
|  |  | 
|  | Link			maMBDownHdl; | 
|  |  | 
|  | public: | 
|  | ImplBtn( Window* pParent, WinBits nWinStyle = 0 ); | 
|  | ~ImplBtn() {}; | 
|  |  | 
|  | virtual void	MouseButtonDown( const MouseEvent& rMEvt ); | 
|  |  | 
|  | virtual void	MBDown(); | 
|  | void			SetMBDownHdl( const Link& rLink ) { maMBDownHdl = rLink; } | 
|  | const Link& 	GetMBDownHdl() const { return maMBDownHdl; } | 
|  | }; | 
|  |  | 
|  |  | 
|  | void ImplInitFieldSettings( Window* pWin, sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground ); | 
|  | void ImplInitDropDownButton( PushButton* pButton ); | 
|  |  | 
|  | #endif	// _SV_ILSTBOX_HXX |