xref: /aoo41x/main/vcl/inc/ilstbox.hxx (revision 4d7c9de0)
1161f4cd1SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3161f4cd1SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4161f4cd1SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5161f4cd1SAndrew Rist  * distributed with this work for additional information
6161f4cd1SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7161f4cd1SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8161f4cd1SAndrew Rist  * "License"); you may not use this file except in compliance
9161f4cd1SAndrew Rist  * with the License.  You may obtain a copy of the License at
10161f4cd1SAndrew Rist  *
11161f4cd1SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12161f4cd1SAndrew Rist  *
13161f4cd1SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14161f4cd1SAndrew Rist  * software distributed under the License is distributed on an
15161f4cd1SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16161f4cd1SAndrew Rist  * KIND, either express or implied.  See the License for the
17161f4cd1SAndrew Rist  * specific language governing permissions and limitations
18161f4cd1SAndrew Rist  * under the License.
19161f4cd1SAndrew Rist  *
20161f4cd1SAndrew Rist  *************************************************************/
21161f4cd1SAndrew Rist 
22161f4cd1SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _SV_ILSTBOX_HXX
25cdf0e10cSrcweir #define _SV_ILSTBOX_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <vcl/sv.h>
28cdf0e10cSrcweir #include <vcl/image.hxx>
29cdf0e10cSrcweir #include <vcl/ctrl.hxx>
30cdf0e10cSrcweir #include <vcl/button.hxx>
31cdf0e10cSrcweir #include <vcl/floatwin.hxx>
32cdf0e10cSrcweir #include <vcl/lstbox.h>
33cdf0e10cSrcweir #include <vcl/timer.hxx>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #include "vcl/quickselectionengine.hxx"
36cdf0e10cSrcweir 
37cdf0e10cSrcweir class ScrollBar;
38cdf0e10cSrcweir class ScrollBarBox;
39cdf0e10cSrcweir 
40cdf0e10cSrcweir // -----------------
41cdf0e10cSrcweir // - ListBox-Types -
42cdf0e10cSrcweir // -----------------
43cdf0e10cSrcweir 
44cdf0e10cSrcweir #define HORZ_SCROLL 		4
45cdf0e10cSrcweir #define IMG_TXT_DISTANCE	6
46cdf0e10cSrcweir 
47cdf0e10cSrcweir enum LB_EVENT_TYPE
48cdf0e10cSrcweir {
49cdf0e10cSrcweir 	LET_MBDOWN,
50cdf0e10cSrcweir 	LET_TRACKING,
51cdf0e10cSrcweir 	LET_TRACKING_END,
52cdf0e10cSrcweir 	LET_KEYMOVE,
53cdf0e10cSrcweir 	LET_KEYSPACE
54cdf0e10cSrcweir };
55cdf0e10cSrcweir 
56cdf0e10cSrcweir // -----------------
57cdf0e10cSrcweir // - ImplEntryType -
58cdf0e10cSrcweir // -----------------
59cdf0e10cSrcweir 
60cdf0e10cSrcweir struct ImplEntryType
61cdf0e10cSrcweir {
62cdf0e10cSrcweir 	XubString	maStr;
63cdf0e10cSrcweir 	Image		maImage;
64cdf0e10cSrcweir 	void*		mpUserData;
65cdf0e10cSrcweir 	sal_Bool		mbIsSelected;
66cdf0e10cSrcweir 	long		mnFlags;
67cdf0e10cSrcweir     long        mnHeight;
68cdf0e10cSrcweir 
ImplEntryTypeImplEntryType69a68b38dfSArmin Le Grand 	ImplEntryType( const XubString& rStr, const Image& rImage ) :
70a68b38dfSArmin Le Grand 		maStr( rStr ),
71a68b38dfSArmin Le Grand 		maImage( rImage ),
72a68b38dfSArmin Le Grand 		mnFlags( 0 ),
73a68b38dfSArmin Le Grand         mnHeight( 0 )
74a68b38dfSArmin Le Grand 	{
75a68b38dfSArmin Le Grand 		mbIsSelected = sal_False;
76a68b38dfSArmin Le Grand 		mpUserData = NULL;
77a68b38dfSArmin Le Grand 	}
78a68b38dfSArmin Le Grand 
ImplEntryTypeImplEntryType79a68b38dfSArmin Le Grand 	ImplEntryType( const XubString& rStr ) :
80a68b38dfSArmin Le Grand 		maStr( rStr ),
81a68b38dfSArmin Le Grand 		mnFlags( 0 ),
82a68b38dfSArmin Le Grand         mnHeight( 0 )
83a68b38dfSArmin Le Grand 	{
84a68b38dfSArmin Le Grand 		mbIsSelected = sal_False;
85a68b38dfSArmin Le Grand 		mpUserData = NULL;
86a68b38dfSArmin Le Grand 	}
87a68b38dfSArmin Le Grand 
ImplEntryTypeImplEntryType88a68b38dfSArmin Le Grand 	ImplEntryType( const Image& rImage ) :
89a68b38dfSArmin Le Grand 		maImage( rImage ),
90a68b38dfSArmin Le Grand 		mnFlags( 0 ),
91a68b38dfSArmin Le Grand         mnHeight( 0 )
92a68b38dfSArmin Le Grand 	{
93a68b38dfSArmin Le Grand 		mbIsSelected = sal_False;
94a68b38dfSArmin Le Grand 		mpUserData = NULL;
95a68b38dfSArmin Le Grand 	}
96cdf0e10cSrcweir };
97cdf0e10cSrcweir 
98cdf0e10cSrcweir // -----------------
99cdf0e10cSrcweir // - ImplEntryList -
100cdf0e10cSrcweir // -----------------
101cdf0e10cSrcweir 
102cdf0e10cSrcweir class ImplEntryList : private List
103cdf0e10cSrcweir {
104cdf0e10cSrcweir private:
105cdf0e10cSrcweir     Window*         mpWindow;   // For getting the current locale when matching strings
106cdf0e10cSrcweir 	sal_uInt16			mnLastSelected;
107cdf0e10cSrcweir 	sal_uInt16			mnSelectionAnchor;
108cdf0e10cSrcweir 	sal_uInt16			mnImages;
109cdf0e10cSrcweir 
110cdf0e10cSrcweir 	sal_uInt16			mnMRUCount;
111cdf0e10cSrcweir 	sal_uInt16			mnMaxMRUCount;
112cdf0e10cSrcweir 
113cdf0e10cSrcweir 	Link			maSelectionChangedHdl;
114cdf0e10cSrcweir 	sal_Bool			mbCallSelectionChangedHdl;
115cdf0e10cSrcweir 
GetEntry(sal_uInt16 nPos) const116cdf0e10cSrcweir 	ImplEntryType*	GetEntry( sal_uInt16 nPos )	const { return (ImplEntryType*)List::GetObject( nPos ); }
117cdf0e10cSrcweir 
118cdf0e10cSrcweir public:
119cdf0e10cSrcweir 					ImplEntryList( Window* pWindow );
120cdf0e10cSrcweir 					~ImplEntryList();
121cdf0e10cSrcweir 
122cdf0e10cSrcweir 	sal_uInt16					InsertEntry( sal_uInt16 nPos, ImplEntryType* pNewEntry, sal_Bool bSort );
123cdf0e10cSrcweir 	void					RemoveEntry( sal_uInt16 nPos );
GetEntryPtr(sal_uInt16 nPos) const124cdf0e10cSrcweir 	const ImplEntryType* 	GetEntryPtr( sal_uInt16 nPos ) const { return (const ImplEntryType*) GetObject( nPos ); }
GetMutableEntryPtr(sal_uInt16 nPos) const125cdf0e10cSrcweir 	ImplEntryType* 	        GetMutableEntryPtr( sal_uInt16 nPos ) const { return (ImplEntryType*) GetObject( nPos ); }
126cdf0e10cSrcweir 	void					Clear();
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 	sal_uInt16			FindMatchingEntry( const XubString& rStr, sal_uInt16 nStart = 0, sal_Bool bForward = sal_True, sal_Bool bLazy = sal_True ) const;
129cdf0e10cSrcweir 	sal_uInt16			FindEntry( const XubString& rStr, sal_Bool bSearchMRUArea = sal_False ) const;
130cdf0e10cSrcweir 	sal_uInt16			FindEntry( const void* pData ) const;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir     // helper: add up heights up to index nEndIndex.
133cdf0e10cSrcweir     // GetAddedHeight( 0 ) returns 0
134cdf0e10cSrcweir     // GetAddedHeight( LISTBOX_ENTRY_NOTFOUND ) returns 0
135cdf0e10cSrcweir     // GetAddedHeight( i, k ) with k > i is equivalent -GetAddedHeight( k, i )
136cdf0e10cSrcweir     long            GetAddedHeight( sal_uInt16 nEndIndex, sal_uInt16 nBeginIndex = 0, long nBeginHeight = 0 ) const;
137cdf0e10cSrcweir     long            GetEntryHeight( sal_uInt16 nPos ) const;
138cdf0e10cSrcweir 
GetEntryCount() const139cdf0e10cSrcweir 	sal_uInt16			GetEntryCount() const { return (sal_uInt16)List::Count(); }
HasImages() const140cdf0e10cSrcweir 	sal_Bool			HasImages() const { return mnImages ? sal_True : sal_False; }
141cdf0e10cSrcweir 
142cdf0e10cSrcweir 	XubString		GetEntryText( sal_uInt16 nPos ) const;
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 	sal_Bool			HasEntryImage( sal_uInt16 nPos ) const;
145cdf0e10cSrcweir 	Image			GetEntryImage( sal_uInt16 nPos ) const;
146cdf0e10cSrcweir 
147cdf0e10cSrcweir 	void			SetEntryData( sal_uInt16 nPos, void* pNewData );
148cdf0e10cSrcweir 	void*			GetEntryData( sal_uInt16 nPos ) const;
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 	void			SetEntryFlags( sal_uInt16 nPos, long nFlags );
151cdf0e10cSrcweir 	long			GetEntryFlags( sal_uInt16 nPos ) const;
152cdf0e10cSrcweir 
153cdf0e10cSrcweir 	void			SelectEntry( sal_uInt16 nPos, sal_Bool bSelect );
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 	sal_uInt16			GetSelectEntryCount() const;
156cdf0e10cSrcweir 	XubString		GetSelectEntry( sal_uInt16 nIndex ) const;
157cdf0e10cSrcweir 	sal_uInt16			GetSelectEntryPos( sal_uInt16 nIndex ) const;
158cdf0e10cSrcweir 	sal_Bool			IsEntrySelected( const XubString& rStr ) const;
159cdf0e10cSrcweir 	sal_Bool			IsEntryPosSelected( sal_uInt16 nIndex ) const;
160cdf0e10cSrcweir 
SetLastSelected(sal_uInt16 nPos)161cdf0e10cSrcweir 	void			SetLastSelected( sal_uInt16 nPos )	{ mnLastSelected = nPos; }
GetLastSelected() const162cdf0e10cSrcweir 	sal_uInt16			GetLastSelected() const { return mnLastSelected; }
163cdf0e10cSrcweir 
SetSelectionAnchor(sal_uInt16 nPos)164cdf0e10cSrcweir 	void			SetSelectionAnchor( sal_uInt16 nPos )	{ mnSelectionAnchor = nPos; }
GetSelectionAnchor() const165cdf0e10cSrcweir 	sal_uInt16			GetSelectionAnchor() const { return mnSelectionAnchor; }
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 
SetSelectionChangedHdl(const Link & rLnk)168cdf0e10cSrcweir 	void			SetSelectionChangedHdl( const Link& rLnk )	{ maSelectionChangedHdl = rLnk; }
SetCallSelectionChangedHdl(sal_Bool bCall)169cdf0e10cSrcweir 	void			SetCallSelectionChangedHdl( sal_Bool bCall )	{ mbCallSelectionChangedHdl = bCall; }
170cdf0e10cSrcweir 
SetMRUCount(sal_uInt16 n)171cdf0e10cSrcweir 	void			SetMRUCount( sal_uInt16 n )	{ mnMRUCount = n; }
GetMRUCount() const172cdf0e10cSrcweir 	sal_uInt16			GetMRUCount() const		{ return mnMRUCount; }
173cdf0e10cSrcweir 
SetMaxMRUCount(sal_uInt16 n)174cdf0e10cSrcweir 	void			SetMaxMRUCount( sal_uInt16 n )	{ mnMaxMRUCount = n; }
GetMaxMRUCount() const175cdf0e10cSrcweir 	sal_uInt16			GetMaxMRUCount() const		{ return mnMaxMRUCount; }
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 	/**	An Entry is selectable if its mnFlags does not have the
178cdf0e10cSrcweir 		LISTBOX_ENTRY_FLAG_DISABLE_SELECTION flag set. */
179cdf0e10cSrcweir 	bool			IsEntrySelectable( sal_uInt16 nPos ) const;
180cdf0e10cSrcweir 
181cdf0e10cSrcweir 	/** returns the first entry found from the given position nPos that is selectable
182cdf0e10cSrcweir 		or LISTBOX_ENTRY_NOTFOUND if non is found. If the entry at nPos is not selectable,
183cdf0e10cSrcweir 		it returns the first selectable entry after nPos if bForward is true and the
184cdf0e10cSrcweir 		first selectable entry after nPos is bForward is false.
185cdf0e10cSrcweir 		*/
186cdf0e10cSrcweir 	sal_uInt16			FindFirstSelectable( sal_uInt16 nPos, bool bForward = true );
187cdf0e10cSrcweir };
188cdf0e10cSrcweir 
189cdf0e10cSrcweir // ---------------------
190cdf0e10cSrcweir // - ImplListBoxWindow -
191cdf0e10cSrcweir // ---------------------
192cdf0e10cSrcweir 
193cdf0e10cSrcweir class ImplListBoxWindow : public Control, public ::vcl::ISearchableStringList
194cdf0e10cSrcweir {
195cdf0e10cSrcweir private:
196cdf0e10cSrcweir 	ImplEntryList*	mpEntryList;	 // EntryListe
197cdf0e10cSrcweir 	Rectangle		maFocusRect;
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 	Size			maUserItemSize;
200cdf0e10cSrcweir 
201cdf0e10cSrcweir 	long			mnMaxTxtHeight;  // Maximale Hoehe eines Text-Items
202cdf0e10cSrcweir 	long			mnMaxTxtWidth;	 // Maximale Breite eines Text-Items
203cdf0e10cSrcweir 									 // Entry ohne Image
204cdf0e10cSrcweir 	long			mnMaxImgTxtWidth;// Maximale Breite eines Text-Items
205cdf0e10cSrcweir 									 // Entry UND Image
206cdf0e10cSrcweir 	long			mnMaxImgWidth;	 // Maximale Breite eines Image-Items
207cdf0e10cSrcweir 	long			mnMaxImgHeight;  // Maximale Hoehe eines Image-Items
208cdf0e10cSrcweir 	long			mnMaxWidth; 	 // Maximale Breite eines Eintrags
209cdf0e10cSrcweir 	long			mnMaxHeight;	 // Maximale Hoehe eines Eintrags
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 	sal_uInt16			mnCurrentPos;	 // Position (Focus)
212cdf0e10cSrcweir 	sal_uInt16			mnTrackingSaveSelection; // Selektion vor Tracking();
213cdf0e10cSrcweir 
214cdf0e10cSrcweir 	sal_uInt16			mnSeparatorPos;	// Separator
215cdf0e10cSrcweir 
216cdf0e10cSrcweir 	sal_uInt16			mnUserDrawEntry;
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 	sal_uInt16			mnTop;			 // Ausgabe ab Zeile
219cdf0e10cSrcweir 	long			mnLeft; 		 // Ausgabe ab Spalte
220cdf0e10cSrcweir 	long			mnBorder;		 // Abstand Rahmen - Text
221cdf0e10cSrcweir 	long			mnTextHeight;	 // Texthoehe
222cdf0e10cSrcweir 	ProminentEntry  meProminentType; // where is the "prominent" entry
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 	sal_uInt16			mnSelectModifier;	// Modifiers
225cdf0e10cSrcweir 
226a68b38dfSArmin Le Grand     /// bitfield
227a68b38dfSArmin Le Grand     bool mbHasFocusRect : 1;
228a68b38dfSArmin Le Grand     bool mbSort : 1;             // ListBox sortiert
229a68b38dfSArmin Le Grand     bool mbTrack : 1;            // Tracking
230a68b38dfSArmin Le Grand     bool mbMulti : 1;            // MultiListBox
231a68b38dfSArmin Le Grand     bool mbStackMode : 1;        // StackSelection
232a68b38dfSArmin Le Grand     bool mbSimpleMode : 1;       // SimpleMode fuer MultiListBox
233a68b38dfSArmin Le Grand     bool mbImgsDiffSz : 1;       // Images haben verschiedene Groessen
234a68b38dfSArmin Le Grand     bool mbTravelSelect : 1;     // TravelSelect
235a68b38dfSArmin Le Grand     bool mbTrackingSelect : 1;   // Selektiert bei MouseMove
236a68b38dfSArmin Le Grand     bool mbSelectionChanged : 1; // Select() nicht zu oft rufen...
237a68b38dfSArmin Le Grand     bool mbMouseMoveSelect : 1;  // Selektieren bei MouseMove
238a68b38dfSArmin Le Grand     bool mbGrabFocus : 1;        // Focus bei MBDown grabben
239a68b38dfSArmin Le Grand     bool mbUserDrawEnabled : 1;  // UserDraw possible
240a68b38dfSArmin Le Grand     bool mbInUserDraw : 1;       // In UserDraw
241a68b38dfSArmin Le Grand     bool mbReadOnly : 1;         // ReadOnly
242a68b38dfSArmin Le Grand     bool mbMirroring : 1;        // pb: #106948# explicit mirroring for calc
243a68b38dfSArmin Le Grand     bool mbRight : 1;            // right align Text output
244a68b38dfSArmin Le Grand     bool mbCenter : 1;           // center Text output
245a68b38dfSArmin Le Grand     bool mbEdgeBlending : 1;
246cdf0e10cSrcweir 
247cdf0e10cSrcweir 	Link			maScrollHdl;
248cdf0e10cSrcweir 	Link			maSelectHdl;
249cdf0e10cSrcweir 	Link			maCancelHdl;
250cdf0e10cSrcweir 	Link			maDoubleClickHdl;
251cdf0e10cSrcweir 	Link			maUserDrawHdl;
252cdf0e10cSrcweir 	Link			maMRUChangedHdl;
253ad3a95a3SSteve Yin 	Link			maFocusHdl;
254ad3a95a3SSteve Yin 	Link			maListItemSelectHdl;
255cdf0e10cSrcweir 
256a68b38dfSArmin Le Grand     ::vcl::QuickSelectionEngine maQuickSelectionEngine;
257cdf0e10cSrcweir 
258cdf0e10cSrcweir protected:
259cdf0e10cSrcweir 	virtual void	KeyInput( const KeyEvent& rKEvt );
260cdf0e10cSrcweir 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
261cdf0e10cSrcweir 	virtual void	MouseMove( const MouseEvent& rMEvt );
262cdf0e10cSrcweir 	virtual void	Tracking( const TrackingEvent& rTEvt );
263cdf0e10cSrcweir 	virtual void	Paint( const Rectangle& rRect );
264cdf0e10cSrcweir 	virtual void	Resize();
265cdf0e10cSrcweir 	virtual void	GetFocus();
266cdf0e10cSrcweir 	virtual void	LoseFocus();
267cdf0e10cSrcweir 
268ad3a95a3SSteve Yin 	//sal_Bool			SelectEntries( sal_uInt16 nSelect, LB_EVENT_TYPE eLET, sal_Bool bShift = sal_False, sal_Bool bCtrl = sal_False );
269ad3a95a3SSteve Yin 	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 );
270cdf0e10cSrcweir 	void			ImplPaint( sal_uInt16 nPos, sal_Bool bErase = sal_False, bool bLayout = false );
271cdf0e10cSrcweir     void			ImplDoPaint( const Rectangle& rRect, bool bLayout = false );
272cdf0e10cSrcweir 	void			ImplCalcMetrics();
273cdf0e10cSrcweir 	void			ImplUpdateEntryMetrics( ImplEntryType& rEntry );
274cdf0e10cSrcweir 	void			ImplCallSelect();
275cdf0e10cSrcweir 
276cdf0e10cSrcweir     void            ImplShowFocusRect();
277cdf0e10cSrcweir     void            ImplHideFocusRect();
278cdf0e10cSrcweir 
279cdf0e10cSrcweir 
280cdf0e10cSrcweir 	virtual void	StateChanged( StateChangedType nType );
281cdf0e10cSrcweir 	virtual void	DataChanged( const DataChangedEvent& rDCEvt );
282cdf0e10cSrcweir 
283cdf0e10cSrcweir public:
284cdf0e10cSrcweir     virtual void  FillLayoutData() const;
285cdf0e10cSrcweir 
286cdf0e10cSrcweir 					ImplListBoxWindow( Window* pParent, WinBits nWinStyle );
287cdf0e10cSrcweir 					~ImplListBoxWindow();
288cdf0e10cSrcweir 
GetEntryList() const289cdf0e10cSrcweir 	ImplEntryList*	GetEntryList() const { return mpEntryList; }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir 	sal_uInt16			InsertEntry( sal_uInt16 nPos, ImplEntryType* pNewEntry );
292cdf0e10cSrcweir 	void			RemoveEntry( sal_uInt16 nPos );
293cdf0e10cSrcweir 	void			Clear();
ResetCurrentPos()294cdf0e10cSrcweir 	void			ResetCurrentPos()				{ mnCurrentPos = LISTBOX_ENTRY_NOTFOUND; }
GetCurrentPos() const295cdf0e10cSrcweir 	sal_uInt16			GetCurrentPos()	const			{ return mnCurrentPos; }
296cdf0e10cSrcweir     sal_uInt16			GetDisplayLineCount() const;
297cdf0e10cSrcweir     void            SetEntryFlags( sal_uInt16 nPos, long nFlags );
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 	void 			DrawEntry( sal_uInt16 nPos, sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDrawTextAtImagePos = sal_False, bool bLayout = false );
300cdf0e10cSrcweir 
301cdf0e10cSrcweir 	void			SelectEntry( sal_uInt16 nPos, sal_Bool bSelect );
302cdf0e10cSrcweir 	void			DeselectAll();
303cdf0e10cSrcweir     sal_uInt16			GetEntryPosForPoint( const Point& rPoint ) const;
304cdf0e10cSrcweir     sal_uInt16          GetLastVisibleEntry() const;
305cdf0e10cSrcweir 
306cdf0e10cSrcweir 	sal_Bool			ProcessKeyInput( const KeyEvent& rKEvt );
307cdf0e10cSrcweir 
308cdf0e10cSrcweir 	void			SetTopEntry( sal_uInt16 nTop );
GetTopEntry() const309cdf0e10cSrcweir 	sal_uInt16			GetTopEntry() const 			{ return mnTop; }
310cdf0e10cSrcweir 	// ShowProminentEntry will set the entry correspoding to nEntryPos
311cdf0e10cSrcweir 	// either at top or in the middle depending on the chosen style
312cdf0e10cSrcweir 	void            ShowProminentEntry( sal_uInt16 nEntryPos );
SetProminentEntryType(ProminentEntry eType)313cdf0e10cSrcweir 	void            SetProminentEntryType( ProminentEntry eType ) { meProminentType = eType; }
GetProminentEntryType() const314cdf0e10cSrcweir 	ProminentEntry  GetProminentEntryType() const { return meProminentType; }
315cdf0e10cSrcweir     using Window::IsVisible;
316cdf0e10cSrcweir 	sal_Bool			IsVisible( sal_uInt16 nEntry ) const;
317cdf0e10cSrcweir 
GetLeftIndent() const318cdf0e10cSrcweir 	long			GetLeftIndent() const			{ return mnLeft; }
319cdf0e10cSrcweir 	void			SetLeftIndent( long n );
320cdf0e10cSrcweir 	void			ScrollHorz( long nDiff );
321cdf0e10cSrcweir 
AllowGrabFocus(bool b)322a68b38dfSArmin Le Grand 	void			AllowGrabFocus( bool b )		{ mbGrabFocus = b; }
IsGrabFocusAllowed() const323a68b38dfSArmin Le Grand 	bool            IsGrabFocusAllowed() const		{ return mbGrabFocus; }
324cdf0e10cSrcweir 
SetSeparatorPos(sal_uInt16 n)325cdf0e10cSrcweir 	void			SetSeparatorPos( sal_uInt16 n )		{ mnSeparatorPos = n; }
GetSeparatorPos() const326cdf0e10cSrcweir 	sal_uInt16			GetSeparatorPos() const			{ return mnSeparatorPos; }
327cdf0e10cSrcweir 
SetTravelSelect(bool bTravelSelect)328a68b38dfSArmin Le Grand 	void            SetTravelSelect( bool bTravelSelect ) { mbTravelSelect = bTravelSelect; }
IsTravelSelect() const329a68b38dfSArmin Le Grand 	bool            IsTravelSelect() const			{ return mbTravelSelect; }
IsTrackingSelect() const330a68b38dfSArmin Le Grand 	bool            IsTrackingSelect() const		{ return mbTrackingSelect; }
331cdf0e10cSrcweir 
332cdf0e10cSrcweir 	void			SetUserItemSize( const Size& rSz );
GetUserItemSize() const333cdf0e10cSrcweir 	const Size&		GetUserItemSize() const				{ return maUserItemSize; }
334cdf0e10cSrcweir 
EnableUserDraw(bool bUserDraw)335a68b38dfSArmin Le Grand 	void			EnableUserDraw( bool bUserDraw ) { mbUserDrawEnabled = bUserDraw; }
IsUserDrawEnabled() const336a68b38dfSArmin Le Grand 	bool            IsUserDrawEnabled() const 	{ return mbUserDrawEnabled; }
337cdf0e10cSrcweir 
EnableMultiSelection(bool bMulti,bool bStackMode)338a68b38dfSArmin Le Grand 	void			EnableMultiSelection( bool bMulti, bool bStackMode ) { mbMulti = bMulti; mbStackMode = bStackMode; }
IsMultiSelectionEnabled() const339a68b38dfSArmin Le Grand 	bool            IsMultiSelectionEnabled() const 	{ return mbMulti; }
340cdf0e10cSrcweir 
SetMultiSelectionSimpleMode(bool bSimple)341a68b38dfSArmin Le Grand 	void			SetMultiSelectionSimpleMode( bool bSimple )	{ mbSimpleMode = bSimple; }
IsMultiSelectionSimpleMode() const342a68b38dfSArmin Le Grand 	bool            IsMultiSelectionSimpleMode() const 			{ return mbSimpleMode; }
343cdf0e10cSrcweir 
EnableMouseMoveSelect(bool bMouseMoveSelect)344a68b38dfSArmin Le Grand 	void			EnableMouseMoveSelect( bool bMouseMoveSelect ) { mbMouseMoveSelect = bMouseMoveSelect; }
IsMouseMoveSelectEnabled() const345a68b38dfSArmin Le Grand 	bool            IsMouseMoveSelectEnabled() const 	{ return mbMouseMoveSelect; }
IsMouseMoveSelect() const346a68b38dfSArmin Le Grand 	bool            IsMouseMoveSelect() const 	{ return mbMouseMoveSelect||mbStackMode; }
347cdf0e10cSrcweir 
348cdf0e10cSrcweir 	Size			CalcSize( sal_uInt16 nMaxLines ) const;
349cdf0e10cSrcweir     Rectangle       GetBoundingRectangle( sal_uInt16 nItem ) const;
350cdf0e10cSrcweir 
GetEntryHeight() const351cdf0e10cSrcweir     long			GetEntryHeight() const				{ return mnMaxHeight; }
GetMaxEntryWidth() const352cdf0e10cSrcweir 	long			GetMaxEntryWidth() const			{ return mnMaxWidth; }
353cdf0e10cSrcweir 
SetScrollHdl(const Link & rLink)354cdf0e10cSrcweir 	void			SetScrollHdl( const Link& rLink )	{ maScrollHdl = rLink; }
GetScrollHdl() const355cdf0e10cSrcweir 	const Link& 	GetScrollHdl() const				{ return maScrollHdl; }
SetSelectHdl(const Link & rLink)356cdf0e10cSrcweir 	void			SetSelectHdl( const Link& rLink )	{ maSelectHdl = rLink; }
GetSelectHdl() const357cdf0e10cSrcweir 	const Link& 	GetSelectHdl() const				{ return maSelectHdl; }
SetCancelHdl(const Link & rLink)358cdf0e10cSrcweir 	void			SetCancelHdl( const Link& rLink )	{ maCancelHdl = rLink; }
GetCancelHdl() const359cdf0e10cSrcweir 	const Link& 	GetCancelHdl() const				{ return maCancelHdl; }
SetDoubleClickHdl(const Link & rLink)360cdf0e10cSrcweir 	void			SetDoubleClickHdl( const Link& rLink )	{ maDoubleClickHdl = rLink; }
GetDoubleClickHdl() const361cdf0e10cSrcweir 	const Link& 	GetDoubleClickHdl() const				{ return maDoubleClickHdl; }
SetUserDrawHdl(const Link & rLink)362cdf0e10cSrcweir 	void			SetUserDrawHdl( const Link& rLink )	{ maUserDrawHdl = rLink; }
GetUserDrawHdl() const363cdf0e10cSrcweir 	const Link& 	GetUserDrawHdl() const				{ return maUserDrawHdl; }
SetMRUChangedHdl(const Link & rLink)364cdf0e10cSrcweir 	void			SetMRUChangedHdl( const Link& rLink )	{ maMRUChangedHdl = rLink; }
GetMRUChangedHdl() const365cdf0e10cSrcweir 	const Link& 	GetMRUChangedHdl() const				{ return maMRUChangedHdl; }
SetFocusHdl(const Link & rLink)366ad3a95a3SSteve Yin 	void			SetFocusHdl( const Link& rLink )	{ maFocusHdl = rLink ; }
GetFocusHdl() const367ad3a95a3SSteve Yin 	const Link& 	GetFocusHdl() const				{ return maFocusHdl; }
368cdf0e10cSrcweir 
SetListItemSelectHdl(const Link & rLink)369ad3a95a3SSteve Yin 	void			SetListItemSelectHdl( const Link& rLink )	{ maListItemSelectHdl = rLink ; }
GetListItemSelectHdl() const370ad3a95a3SSteve Yin 	const Link& 	GetListItemSelectHdl() const				{ return maListItemSelectHdl; }
IsSelectionChanged() const371*cbe4a5e3SSteve Yin 	bool			IsSelectionChanged() const { return mbSelectionChanged; }
GetSelectModifier() const372cdf0e10cSrcweir 	sal_uInt16			GetSelectModifier() const { return mnSelectModifier; }
373cdf0e10cSrcweir 
EnableSort(bool b)374a68b38dfSArmin Le Grand 	void			EnableSort( bool b ) { mbSort = b; }
375cdf0e10cSrcweir 
SetReadOnly(bool bReadOnly)376a68b38dfSArmin Le Grand 	void			SetReadOnly( bool bReadOnly ) 	{ mbReadOnly = bReadOnly; }
IsReadOnly() const377a68b38dfSArmin Le Grand 	bool            IsReadOnly() const 				{ return mbReadOnly; }
378cdf0e10cSrcweir 
379cdf0e10cSrcweir     using Control::ImplInitSettings;
380cdf0e10cSrcweir 	void			ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground );
381cdf0e10cSrcweir     sal_uInt16          ImplGetTextStyle() const;
382cdf0e10cSrcweir 
383cdf0e10cSrcweir 	// pb: #106948# explicit mirroring for calc
EnableMirroring()384a68b38dfSArmin Le Grand 	inline void		EnableMirroring()		{ mbMirroring = true; }
IsMirroring() const385a68b38dfSArmin Le Grand 	inline bool     IsMirroring() const { return mbMirroring; }
386a68b38dfSArmin Le Grand 
GetEdgeBlending() const387a68b38dfSArmin Le Grand     bool GetEdgeBlending() const { return mbEdgeBlending; }
SetEdgeBlending(bool bNew)388a68b38dfSArmin Le Grand     void SetEdgeBlending(bool bNew) { mbEdgeBlending = bNew; }
389cdf0e10cSrcweir 
390cdf0e10cSrcweir protected:
391cdf0e10cSrcweir     // ISearchableStringList
392cdf0e10cSrcweir     virtual ::vcl::StringEntryIdentifier    CurrentEntry( String& _out_entryText ) const;
393cdf0e10cSrcweir     virtual ::vcl::StringEntryIdentifier    NextEntry( ::vcl::StringEntryIdentifier _currentEntry, String& _out_entryText ) const;
394cdf0e10cSrcweir     virtual void                            SelectEntry( ::vcl::StringEntryIdentifier _entry );
395cdf0e10cSrcweir };
396cdf0e10cSrcweir 
397cdf0e10cSrcweir // ---------------
398cdf0e10cSrcweir // - ImplListBox -
399cdf0e10cSrcweir // ---------------
400cdf0e10cSrcweir 
401cdf0e10cSrcweir class ImplListBox : public Control
402cdf0e10cSrcweir {
403cdf0e10cSrcweir private:
404cdf0e10cSrcweir 	ImplListBoxWindow	maLBWindow;
405cdf0e10cSrcweir 	ScrollBar*			mpHScrollBar;
406cdf0e10cSrcweir 	ScrollBar*			mpVScrollBar;
407cdf0e10cSrcweir 	ScrollBarBox*		mpScrollBarBox;
408a68b38dfSArmin Le Grand 
409a68b38dfSArmin Le Grand     /// bitfield
410a68b38dfSArmin Le Grand     bool mbVScroll : 1;     // VScroll an oder aus
411a68b38dfSArmin Le Grand     bool mbHScroll : 1;     // HScroll an oder aus
412a68b38dfSArmin Le Grand     bool mbAutoHScroll : 1; // AutoHScroll an oder aus
413a68b38dfSArmin Le Grand     bool mbEdgeBlending : 1;
414a68b38dfSArmin Le Grand 
415cdf0e10cSrcweir 	Link				maScrollHdl;	// Weil der vom ImplListBoxWindow selbst benoetigt wird.
416cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxDNDListenerContainer;
417cdf0e10cSrcweir 
418cdf0e10cSrcweir protected:
419cdf0e10cSrcweir 	virtual void		GetFocus();
420cdf0e10cSrcweir 	virtual void		StateChanged( StateChangedType nType );
421cdf0e10cSrcweir 	virtual void		DataChanged( const DataChangedEvent& rDCEvt );
422cdf0e10cSrcweir 
423cdf0e10cSrcweir 	long 				Notify( NotifyEvent& rNEvt );
424cdf0e10cSrcweir 
425cdf0e10cSrcweir 	void				ImplResizeControls();
426cdf0e10cSrcweir 	void				ImplCheckScrollBars();
427cdf0e10cSrcweir 	void				ImplInitScrollBars();
428cdf0e10cSrcweir 
429cdf0e10cSrcweir 	DECL_LINK(			ScrollBarHdl, ScrollBar* );
430cdf0e10cSrcweir 	DECL_LINK(			LBWindowScrolled, void* );
431cdf0e10cSrcweir 	DECL_LINK(			MRUChanged, void* );
432cdf0e10cSrcweir 
433cdf0e10cSrcweir public:
434cdf0e10cSrcweir 					ImplListBox( Window* pParent, WinBits nWinStyle );
435cdf0e10cSrcweir 					~ImplListBox();
436cdf0e10cSrcweir 
GetEntryList() const437cdf0e10cSrcweir 	const ImplEntryList*	GetEntryList() const			{ return maLBWindow.GetEntryList(); }
GetMainWindow()438cdf0e10cSrcweir 	ImplListBoxWindow* 		GetMainWindow() 				{ return &maLBWindow; }
439cdf0e10cSrcweir 
440cdf0e10cSrcweir 	virtual void	Resize();
441cdf0e10cSrcweir     virtual const Wallpaper& GetDisplayBackground() const;
442cdf0e10cSrcweir     virtual Window*     GetPreferredKeyInputWindow();
443cdf0e10cSrcweir 
444cdf0e10cSrcweir 	sal_uInt16			InsertEntry( sal_uInt16 nPos, const XubString& rStr );
445cdf0e10cSrcweir 	sal_uInt16			InsertEntry( sal_uInt16 nPos, const Image& rImage );
446cdf0e10cSrcweir 	sal_uInt16			InsertEntry( sal_uInt16 nPos, const XubString& rStr, const Image& rImage );
447cdf0e10cSrcweir 	void			RemoveEntry( sal_uInt16 nPos );
SetEntryData(sal_uInt16 nPos,void * pNewData)448cdf0e10cSrcweir 	void			SetEntryData( sal_uInt16 nPos, void* pNewData )	{ maLBWindow.GetEntryList()->SetEntryData( nPos, pNewData ); }
449cdf0e10cSrcweir 	void			Clear();
450cdf0e10cSrcweir 
451cdf0e10cSrcweir 	void			SetEntryFlags( sal_uInt16 nPos, long nFlags );
452cdf0e10cSrcweir 	long			GetEntryFlags( sal_uInt16 nPos ) const;
453cdf0e10cSrcweir 
454cdf0e10cSrcweir 	void			SelectEntry( sal_uInt16 nPos, sal_Bool bSelect );
455cdf0e10cSrcweir 	void			SetNoSelection();
ResetCurrentPos()456cdf0e10cSrcweir 	void			ResetCurrentPos()				{ maLBWindow.ResetCurrentPos(); }
GetCurrentPos() const457cdf0e10cSrcweir 	sal_uInt16			GetCurrentPos()	const			{ return maLBWindow.GetCurrentPos(); }
458cdf0e10cSrcweir 
ProcessKeyInput(const KeyEvent & rKEvt)459cdf0e10cSrcweir 	sal_Bool			ProcessKeyInput( const KeyEvent& rKEvt )	{ return maLBWindow.ProcessKeyInput( rKEvt ); }
460cdf0e10cSrcweir 	sal_Bool			HandleWheelAsCursorTravel( const CommandEvent& rCEvt );
461cdf0e10cSrcweir 
SetSeparatorPos(sal_uInt16 n)462cdf0e10cSrcweir 	void			SetSeparatorPos( sal_uInt16 n )		{ maLBWindow.SetSeparatorPos( n ); }
GetSeparatorPos() const463cdf0e10cSrcweir 	sal_uInt16			GetSeparatorPos() const			{ return maLBWindow.GetSeparatorPos(); }
464cdf0e10cSrcweir 
SetTopEntry(sal_uInt16 nTop)465cdf0e10cSrcweir 	void			SetTopEntry( sal_uInt16 nTop )		{ maLBWindow.SetTopEntry( nTop ); }
GetTopEntry() const466cdf0e10cSrcweir 	sal_uInt16			GetTopEntry() const 			{ return maLBWindow.GetTopEntry(); }
ShowProminentEntry(sal_uInt16 nPos)467cdf0e10cSrcweir 	void            ShowProminentEntry( sal_uInt16 nPos ) { maLBWindow.ShowProminentEntry( nPos ); }
468cdf0e10cSrcweir     using Window::IsVisible;
IsVisible(sal_uInt16 nEntry) const469cdf0e10cSrcweir 	sal_Bool			IsVisible( sal_uInt16 nEntry ) const { return maLBWindow.IsVisible( nEntry ); }
470cdf0e10cSrcweir 
SetProminentEntryType(ProminentEntry eType)471cdf0e10cSrcweir 	void            SetProminentEntryType( ProminentEntry eType ) { maLBWindow.SetProminentEntryType( eType ); }
GetProminentEntryType() const472cdf0e10cSrcweir 	ProminentEntry  GetProminentEntryType() const { return maLBWindow.GetProminentEntryType(); }
473cdf0e10cSrcweir 
GetLeftIndent() const474cdf0e10cSrcweir 	long			GetLeftIndent() const			{ return maLBWindow.GetLeftIndent(); }
SetLeftIndent(sal_uInt16 n)475cdf0e10cSrcweir 	void			SetLeftIndent( sal_uInt16 n )		{ maLBWindow.SetLeftIndent( n ); }
ScrollHorz(short nDiff)476cdf0e10cSrcweir 	void			ScrollHorz( short nDiff )		{ maLBWindow.ScrollHorz( nDiff ); }
477cdf0e10cSrcweir 
SetTravelSelect(sal_Bool bTravelSelect)478cdf0e10cSrcweir 	void            SetTravelSelect( sal_Bool bTravelSelect ) { maLBWindow.SetTravelSelect( bTravelSelect ); }
IsTravelSelect() const479cdf0e10cSrcweir 	sal_Bool			IsTravelSelect() const			{ return maLBWindow.IsTravelSelect(); }
IsTrackingSelect() const480cdf0e10cSrcweir 	sal_Bool			IsTrackingSelect() const			{ return maLBWindow.IsTrackingSelect(); }
481cdf0e10cSrcweir 
EnableMultiSelection(sal_Bool bMulti,sal_Bool bStackMode)482cdf0e10cSrcweir 	void			EnableMultiSelection( sal_Bool bMulti, sal_Bool bStackMode ) { maLBWindow.EnableMultiSelection( bMulti, bStackMode ); }
IsMultiSelectionEnabled() const483cdf0e10cSrcweir 	sal_Bool			IsMultiSelectionEnabled() const 	{ return maLBWindow.IsMultiSelectionEnabled(); }
484cdf0e10cSrcweir 
SetMultiSelectionSimpleMode(sal_Bool bSimple)485cdf0e10cSrcweir 	void			SetMultiSelectionSimpleMode( sal_Bool bSimple ) { maLBWindow.SetMultiSelectionSimpleMode( bSimple ); }
IsMultiSelectionSimpleMode() const486cdf0e10cSrcweir 	sal_Bool			IsMultiSelectionSimpleMode() const 	{ return maLBWindow.IsMultiSelectionSimpleMode(); }
487cdf0e10cSrcweir 
SetReadOnly(sal_Bool b)488cdf0e10cSrcweir 	void			SetReadOnly( sal_Bool b ) 			{ maLBWindow.SetReadOnly( b ); }
IsReadOnly() const489cdf0e10cSrcweir 	sal_Bool			IsReadOnly() const 				{ return maLBWindow.IsReadOnly(); }
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 
CalcSize(sal_uInt16 nMaxLines) const492cdf0e10cSrcweir 	Size			CalcSize( sal_uInt16 nMaxLines ) const				{ return maLBWindow.CalcSize( nMaxLines ); }
GetEntryHeight() const493cdf0e10cSrcweir 	long			GetEntryHeight() const			{ return maLBWindow.GetEntryHeight(); }
GetMaxEntryWidth() const494cdf0e10cSrcweir 	long			GetMaxEntryWidth() const		{ return maLBWindow.GetMaxEntryWidth(); }
495cdf0e10cSrcweir 
SetScrollHdl(const Link & rLink)496cdf0e10cSrcweir 	void			SetScrollHdl( const Link& rLink )	{ maScrollHdl = rLink; }
GetScrollHdl() const497cdf0e10cSrcweir 	const Link& 	GetScrollHdl() const				{ return maScrollHdl; }
SetSelectHdl(const Link & rLink)498cdf0e10cSrcweir 	void			SetSelectHdl( const Link& rLink )	{ maLBWindow.SetSelectHdl( rLink ); }
GetSelectHdl() const499cdf0e10cSrcweir 	const Link& 	GetSelectHdl() const				{ return maLBWindow.GetSelectHdl(); }
SetCancelHdl(const Link & rLink)500cdf0e10cSrcweir 	void			SetCancelHdl( const Link& rLink )	{ maLBWindow.SetCancelHdl( rLink ); }
GetCancelHdl() const501cdf0e10cSrcweir 	const Link& 	GetCancelHdl() const				{ return maLBWindow.GetCancelHdl(); }
SetDoubleClickHdl(const Link & rLink)502cdf0e10cSrcweir 	void			SetDoubleClickHdl( const Link& rLink )	{ maLBWindow.SetDoubleClickHdl( rLink ); }
GetDoubleClickHdl() const503cdf0e10cSrcweir 	const Link& 	GetDoubleClickHdl() const				{ return maLBWindow.GetDoubleClickHdl(); }
SetUserDrawHdl(const Link & rLink)504cdf0e10cSrcweir 	void			SetUserDrawHdl( const Link& rLink )	{ maLBWindow.SetUserDrawHdl( rLink ); }
GetUserDrawHdl() const505cdf0e10cSrcweir 	const Link& 	GetUserDrawHdl() const				{ return maLBWindow.GetUserDrawHdl(); }
506cdf0e10cSrcweir 
SetFocusHdl(const Link & rLink)507ad3a95a3SSteve Yin 	void			SetFocusHdl( const Link& rLink )	{ maLBWindow.SetFocusHdl( rLink ); }
GetFocusHdl() const508ad3a95a3SSteve Yin 	const Link& 	GetFocusHdl() const				{ return maLBWindow.GetFocusHdl(); }
SetListItemSelectHdl(const Link & rLink)509ad3a95a3SSteve Yin 	void			SetListItemSelectHdl( const Link& rLink )	{ maLBWindow.SetListItemSelectHdl( rLink ); }
GetListItemSelectHdl() const510ad3a95a3SSteve Yin 	const Link& 	GetListItemSelectHdl() const	{ return maLBWindow.GetListItemSelectHdl(); }
SetSelectionChangedHdl(const Link & rLnk)511cdf0e10cSrcweir 	void			SetSelectionChangedHdl( const Link& rLnk )	{ maLBWindow.GetEntryList()->SetSelectionChangedHdl( rLnk ); }
SetCallSelectionChangedHdl(sal_Bool bCall)512cdf0e10cSrcweir 	void			SetCallSelectionChangedHdl( sal_Bool bCall )	{ maLBWindow.GetEntryList()->SetCallSelectionChangedHdl( bCall ); }
IsSelectionChanged() const513cdf0e10cSrcweir 	sal_Bool			IsSelectionChanged() const 					{ return maLBWindow.IsSelectionChanged(); }
GetSelectModifier() const514cdf0e10cSrcweir 	sal_uInt16			GetSelectModifier() const 					{ return maLBWindow.GetSelectModifier(); }
515cdf0e10cSrcweir 
516cdf0e10cSrcweir 	void			SetMRUEntries( const XubString& rEntries, xub_Unicode cSep );
517cdf0e10cSrcweir 	XubString		GetMRUEntries( xub_Unicode cSep ) const;
SetMaxMRUCount(sal_uInt16 n)518cdf0e10cSrcweir 	void			SetMaxMRUCount( sal_uInt16 n )					{ maLBWindow.GetEntryList()->SetMaxMRUCount( n ); }
GetMaxMRUCount() const519cdf0e10cSrcweir 	sal_uInt16			GetMaxMRUCount() const						{ return maLBWindow.GetEntryList()->GetMaxMRUCount(); }
GetDisplayLineCount() const520cdf0e10cSrcweir     sal_uInt16			GetDisplayLineCount() const
521cdf0e10cSrcweir     { return maLBWindow.GetDisplayLineCount(); }
522cdf0e10cSrcweir 
GetEdgeBlending() const523a68b38dfSArmin Le Grand     bool GetEdgeBlending() const { return mbEdgeBlending; }
524a68b38dfSArmin Le Grand     void SetEdgeBlending(bool bNew);
525a68b38dfSArmin Le Grand 
526a68b38dfSArmin Le Grand     // pb: #106948# explicit mirroring for calc
EnableMirroring()527cdf0e10cSrcweir 	inline void		EnableMirroring()	{ maLBWindow.EnableMirroring(); }
SetDropTraget(const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & i_xDNDListenerContainer)528cdf0e10cSrcweir     inline void     SetDropTraget(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_xDNDListenerContainer){ mxDNDListenerContainer= i_xDNDListenerContainer; }
529cdf0e10cSrcweir };
530cdf0e10cSrcweir 
531cdf0e10cSrcweir // -----------------------------
532cdf0e10cSrcweir // - ImplListBoxFloatingWindow -
533cdf0e10cSrcweir // -----------------------------
534cdf0e10cSrcweir 
535cdf0e10cSrcweir class ImplListBoxFloatingWindow : public FloatingWindow
536cdf0e10cSrcweir {
537cdf0e10cSrcweir private:
538cdf0e10cSrcweir 	ImplListBox*	mpImplLB;
539cdf0e10cSrcweir 	Size			maPrefSz;
540cdf0e10cSrcweir 	sal_uInt16			mnDDLineCount;
541cdf0e10cSrcweir     sal_uInt16          mnPopupModeStartSaveSelection;
542cdf0e10cSrcweir 	sal_Bool			mbAutoWidth;
543cdf0e10cSrcweir 
544cdf0e10cSrcweir protected:
545cdf0e10cSrcweir 	long			PreNotify( NotifyEvent& rNEvt );
546cdf0e10cSrcweir 
547cdf0e10cSrcweir public:
548cdf0e10cSrcweir 					ImplListBoxFloatingWindow( Window* pParent );
549cdf0e10cSrcweir 
SetImplListBox(ImplListBox * pLB)550cdf0e10cSrcweir 	void			SetImplListBox( ImplListBox* pLB )	{ mpImplLB = pLB; }
551cdf0e10cSrcweir 
SetPrefSize(const Size & rSz)552cdf0e10cSrcweir 	void			SetPrefSize( const Size& rSz )		{ maPrefSz = rSz; }
GetPrefSize() const553cdf0e10cSrcweir 	const Size& 	GetPrefSize() const 				{ return maPrefSz; }
554cdf0e10cSrcweir 
SetAutoWidth(sal_Bool b)555cdf0e10cSrcweir 	void			SetAutoWidth( sal_Bool b )				{ mbAutoWidth = b; }
IsAutoWidth() const556cdf0e10cSrcweir     sal_Bool            IsAutoWidth() const                 { return mbAutoWidth; }
557cdf0e10cSrcweir 
558cdf0e10cSrcweir 	Size			CalcFloatSize();
559cdf0e10cSrcweir 	void			StartFloat( sal_Bool bStartTracking );
560cdf0e10cSrcweir 
561cdf0e10cSrcweir 	virtual void	SetPosSizePixel( long nX, long nY,
562cdf0e10cSrcweir 									 long nWidth, long nHeight, sal_uInt16 nFlags = WINDOW_POSSIZE_ALL );
SetPosSizePixel(const Point & rNewPos,const Size & rNewSize)563cdf0e10cSrcweir 	void			SetPosSizePixel( const Point& rNewPos, const Size& rNewSize )
564cdf0e10cSrcweir 						{ FloatingWindow::SetPosSizePixel( rNewPos, rNewSize ); }
565cdf0e10cSrcweir 
SetDropDownLineCount(sal_uInt16 n)566cdf0e10cSrcweir 	void			SetDropDownLineCount( sal_uInt16 n ) { mnDDLineCount = n; }
GetDropDownLineCount() const567cdf0e10cSrcweir 	sal_uInt16			GetDropDownLineCount() const { return mnDDLineCount; }
568cdf0e10cSrcweir 
GetPopupModeStartSaveSelection() const569cdf0e10cSrcweir     sal_uInt16          GetPopupModeStartSaveSelection() const { return mnPopupModeStartSaveSelection; }
570cdf0e10cSrcweir 
571cdf0e10cSrcweir     virtual void	Resize();
572cdf0e10cSrcweir };
573cdf0e10cSrcweir 
574cdf0e10cSrcweir // -----------
575cdf0e10cSrcweir // - ImplWin -
576cdf0e10cSrcweir // -----------
577cdf0e10cSrcweir 
578cdf0e10cSrcweir class ImplWin : public Control
579cdf0e10cSrcweir {
580cdf0e10cSrcweir private:
581cdf0e10cSrcweir 
582cdf0e10cSrcweir 	sal_uInt16			mnItemPos;	// wegen UserDraw muss ich wissen, welches Item ich darstelle.
583cdf0e10cSrcweir 	XubString		maString;
584cdf0e10cSrcweir 	Image			maImage;
585cdf0e10cSrcweir 	Image			maImageHC;
586cdf0e10cSrcweir 
587cdf0e10cSrcweir 	Rectangle		maFocusRect;
588cdf0e10cSrcweir 	Size			maUserItemSize;
589cdf0e10cSrcweir 
590cdf0e10cSrcweir 	Link			maMBDownHdl;
591cdf0e10cSrcweir 	Link			maUserDrawHdl;
592cdf0e10cSrcweir 
593a68b38dfSArmin Le Grand     /// bitfield
594a68b38dfSArmin Le Grand     bool            mbUserDrawEnabled : 1;
595a68b38dfSArmin Le Grand     bool            mbInUserDraw : 1;
596a68b38dfSArmin Le Grand     bool            mbEdgeBlending : 1;
597cdf0e10cSrcweir 
598cdf0e10cSrcweir     void ImplDraw( bool bLayout = false );
599cdf0e10cSrcweir protected:
600cdf0e10cSrcweir     virtual void  FillLayoutData() const;
601cdf0e10cSrcweir public:
602cdf0e10cSrcweir 
603cdf0e10cSrcweir 					ImplWin( Window* pParent, WinBits nWinStyle = 0 );
~ImplWin()604cdf0e10cSrcweir 					~ImplWin() {};
605cdf0e10cSrcweir 
606cdf0e10cSrcweir 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
607cdf0e10cSrcweir 	virtual void	Paint( const Rectangle& rRect );
608cdf0e10cSrcweir 	virtual void	Resize();
609cdf0e10cSrcweir 	virtual void	GetFocus();
610cdf0e10cSrcweir 	virtual void	LoseFocus();
611cdf0e10cSrcweir     virtual long    PreNotify( NotifyEvent& rNEvt );
612cdf0e10cSrcweir 
GetItemPos() const613cdf0e10cSrcweir 	sal_uInt16			GetItemPos() const { return mnItemPos; }
SetItemPos(sal_uInt16 n)614cdf0e10cSrcweir 	void			SetItemPos( sal_uInt16 n ) { mnItemPos = n; }
615cdf0e10cSrcweir 
GetString() const616cdf0e10cSrcweir 	const XubString& GetString() const { return maString; }
SetString(const XubString & rStr)617cdf0e10cSrcweir 	void			SetString( const XubString& rStr ) { maString = rStr; }
618cdf0e10cSrcweir 
GetImage() const619cdf0e10cSrcweir 	const Image&	GetImage() const { return maImage; }
SetImage(const Image & rImg)620cdf0e10cSrcweir 	void			SetImage( const Image& rImg ) { maImage = rImg; }
621cdf0e10cSrcweir 
622cdf0e10cSrcweir     sal_Bool            SetModeImage( const Image& rImage, BmpColorMode eMode = BMP_COLOR_NORMAL );
623cdf0e10cSrcweir     const Image&    GetModeImage( BmpColorMode eMode = BMP_COLOR_NORMAL ) const;
624cdf0e10cSrcweir 
625cdf0e10cSrcweir 
626cdf0e10cSrcweir 	virtual void	MBDown();
SetMBDownHdl(const Link & rLink)627cdf0e10cSrcweir 	void			SetMBDownHdl( const Link& rLink ) { maMBDownHdl = rLink; }
GetMBDownHdl() const628cdf0e10cSrcweir 	const Link& 	GetMBDownHdl() const { return maMBDownHdl; }
629cdf0e10cSrcweir 
SetUserDrawHdl(const Link & rLink)630cdf0e10cSrcweir 	void			SetUserDrawHdl( const Link& rLink )	{ maUserDrawHdl = rLink; }
GetUserDrawHdl() const631cdf0e10cSrcweir 	const Link& 	GetUserDrawHdl() const				{ return maUserDrawHdl; }
632cdf0e10cSrcweir 
SetUserItemSize(const Size & rSz)633cdf0e10cSrcweir 	void			SetUserItemSize( const Size& rSz )	{ maUserItemSize = rSz; }
GetUserItemSize() const634cdf0e10cSrcweir 	const Size&		GetUserItemSize() const				{ return maUserItemSize; }
635cdf0e10cSrcweir 
EnableUserDraw(bool bUserDraw)636a68b38dfSArmin Le Grand 	void			EnableUserDraw( bool bUserDraw ) 	{ mbUserDrawEnabled = bUserDraw; }
IsUserDrawEnabled() const637a68b38dfSArmin Le Grand 	bool            IsUserDrawEnabled() const 			{ return mbUserDrawEnabled; }
638cdf0e10cSrcweir 
639cdf0e10cSrcweir 	void 			DrawEntry( sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDrawTextAtImagePos = sal_False, bool bLayout = false );
640a68b38dfSArmin Le Grand 
GetEdgeBlending() const641a68b38dfSArmin Le Grand     bool GetEdgeBlending() const { return mbEdgeBlending; }
SetEdgeBlending(bool bNew)642a68b38dfSArmin Le Grand     void SetEdgeBlending(bool bNew) { mbEdgeBlending = bNew; }
643cdf0e10cSrcweir };
644cdf0e10cSrcweir 
645cdf0e10cSrcweir // -----------
646cdf0e10cSrcweir // - ImplBtn -
647cdf0e10cSrcweir // -----------
648cdf0e10cSrcweir 
649cdf0e10cSrcweir class ImplBtn : public PushButton
650cdf0e10cSrcweir {
651cdf0e10cSrcweir private:
652cdf0e10cSrcweir 	sal_Bool			mbDown;
653cdf0e10cSrcweir 
654cdf0e10cSrcweir 	Link			maMBDownHdl;
655cdf0e10cSrcweir 
656cdf0e10cSrcweir public:
657cdf0e10cSrcweir 					ImplBtn( Window* pParent, WinBits nWinStyle = 0 );
~ImplBtn()658cdf0e10cSrcweir 					~ImplBtn() {};
659cdf0e10cSrcweir 
660cdf0e10cSrcweir 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
661cdf0e10cSrcweir 
662cdf0e10cSrcweir 	virtual void	MBDown();
SetMBDownHdl(const Link & rLink)663cdf0e10cSrcweir 	void			SetMBDownHdl( const Link& rLink ) { maMBDownHdl = rLink; }
GetMBDownHdl() const664cdf0e10cSrcweir 	const Link& 	GetMBDownHdl() const { return maMBDownHdl; }
665cdf0e10cSrcweir };
666cdf0e10cSrcweir 
667cdf0e10cSrcweir 
668cdf0e10cSrcweir void ImplInitFieldSettings( Window* pWin, sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground );
669cdf0e10cSrcweir void ImplInitDropDownButton( PushButton* pButton );
670cdf0e10cSrcweir 
671cdf0e10cSrcweir #endif	// _SV_ILSTBOX_HXX
672