xref: /aoo4110/main/svtools/source/contnr/imivctl.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _IMPICNVW_HXX
25*b1cdbd2cSJim Jagielski #define _IMPICNVW_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #ifndef _VIRDEV_HXX
28*b1cdbd2cSJim Jagielski #include <vcl/virdev.hxx>
29*b1cdbd2cSJim Jagielski #endif
30*b1cdbd2cSJim Jagielski #ifndef _SCRBAR_HXX
31*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx>
32*b1cdbd2cSJim Jagielski #endif
33*b1cdbd2cSJim Jagielski #include <vcl/timer.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/seleng.hxx>
35*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
36*b1cdbd2cSJim Jagielski #include "svtaccessiblefactory.hxx"
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #include <limits.h>
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski #include <svtools/ivctrl.hxx>
41*b1cdbd2cSJim Jagielski #include <svl/svarray.hxx>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski class IcnCursor_Impl;
44*b1cdbd2cSJim Jagielski class SvtIconChoiceCtrl;
45*b1cdbd2cSJim Jagielski class SvxIconChoiceCtrlEntry;
46*b1cdbd2cSJim Jagielski class IcnViewEdit_Impl;
47*b1cdbd2cSJim Jagielski class IcnGridMap_Impl;
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////////
50*b1cdbd2cSJim Jagielski //
51*b1cdbd2cSJim Jagielski // some defines
52*b1cdbd2cSJim Jagielski //
53*b1cdbd2cSJim Jagielski #define PAINTFLAG_HOR_CENTERED	0x0001
54*b1cdbd2cSJim Jagielski #define PAINTFLAG_VER_CENTERED	0x0002
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski #define F_VER_SBARSIZE_WITH_HBAR		0x0001
57*b1cdbd2cSJim Jagielski #define F_HOR_SBARSIZE_WITH_VBAR		0x0002
58*b1cdbd2cSJim Jagielski #define F_PAINTED						0x0004	// sal_True nach erstem Paint
59*b1cdbd2cSJim Jagielski #define F_ADD_MODE						0x0008
60*b1cdbd2cSJim Jagielski #define F_SELECTING_RECT				0x0020
61*b1cdbd2cSJim Jagielski #define F_DOWN_CTRL						0x0080
62*b1cdbd2cSJim Jagielski #define F_DOWN_DESELECT					0x0100
63*b1cdbd2cSJim Jagielski #define F_START_EDITTIMER_IN_MOUSEUP	0x0400
64*b1cdbd2cSJim Jagielski #define F_MOVED_ENTRIES					0x0800
65*b1cdbd2cSJim Jagielski #define F_ENTRYLISTPOS_VALID			0x1000
66*b1cdbd2cSJim Jagielski #define F_CLEARING_SELECTION			0x2000
67*b1cdbd2cSJim Jagielski #define F_ARRANGING						0x4000
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski // alle Angaben in Pixel
70*b1cdbd2cSJim Jagielski // Abstaende von Fensterraendern
71*b1cdbd2cSJim Jagielski #define LROFFS_WINBORDER			4
72*b1cdbd2cSJim Jagielski #define TBOFFS_WINBORDER			4
73*b1cdbd2cSJim Jagielski // fuer das Bounding-Rectangle
74*b1cdbd2cSJim Jagielski #define LROFFS_BOUND				2
75*b1cdbd2cSJim Jagielski #define TBOFFS_BOUND				2
76*b1cdbd2cSJim Jagielski // Abstand Fokusrechteck - Icon
77*b1cdbd2cSJim Jagielski #define LROFFS_ICON					2
78*b1cdbd2cSJim Jagielski #define TBOFFS_ICON					2
79*b1cdbd2cSJim Jagielski // Abstaende Icon - Text
80*b1cdbd2cSJim Jagielski #define HOR_DIST_BMP_STRING			3
81*b1cdbd2cSJim Jagielski #define VER_DIST_BMP_STRING			3
82*b1cdbd2cSJim Jagielski // Breitenoffset Highlight-Rect bei Text
83*b1cdbd2cSJim Jagielski #define LROFFS_TEXT					2
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski #define DEFAULT_MAX_VIRT_WIDTH	200
86*b1cdbd2cSJim Jagielski #define DEFAULT_MAX_VIRT_HEIGHT	200
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski #define VIEWMODE_MASK	(WB_ICON | WB_SMALLICON | WB_DETAILS)
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////////
91*b1cdbd2cSJim Jagielski //
92*b1cdbd2cSJim Jagielski //
93*b1cdbd2cSJim Jagielski //
94*b1cdbd2cSJim Jagielski enum IcnViewFieldType
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski 	IcnViewFieldTypeDontknow = 0,
97*b1cdbd2cSJim Jagielski 	IcnViewFieldTypeImage = 1,
98*b1cdbd2cSJim Jagielski 	IcnViewFieldTypeText = 2
99*b1cdbd2cSJim Jagielski };
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////////
102*b1cdbd2cSJim Jagielski //
103*b1cdbd2cSJim Jagielski // Data about the focus of entries
104*b1cdbd2cSJim Jagielski //
105*b1cdbd2cSJim Jagielski struct LocalFocus
106*b1cdbd2cSJim Jagielski {
107*b1cdbd2cSJim Jagielski 	sal_Bool		bOn;
108*b1cdbd2cSJim Jagielski 	Rectangle	aRect;
109*b1cdbd2cSJim Jagielski 	Color		aPenColor;
110*b1cdbd2cSJim Jagielski 
LocalFocusLocalFocus111*b1cdbd2cSJim Jagielski 	LocalFocus() { bOn = sal_False; }
112*b1cdbd2cSJim Jagielski };
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////////
115*b1cdbd2cSJim Jagielski //
116*b1cdbd2cSJim Jagielski // Entry-List
117*b1cdbd2cSJim Jagielski //
118*b1cdbd2cSJim Jagielski class EntryList_Impl : public List
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski private:
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 	using List::Replace;
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrl_Impl*			_pOwner;
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski 	void 					Removed_Impl( SvxIconChoiceCtrlEntry* pEntry );
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski public:
129*b1cdbd2cSJim Jagielski 							EntryList_Impl(
130*b1cdbd2cSJim Jagielski 								SvxIconChoiceCtrl_Impl*,
131*b1cdbd2cSJim Jagielski 								sal_uInt16 _nInitSize = 1024,
132*b1cdbd2cSJim Jagielski 								sal_uInt16 _nReSize = 1024 );
133*b1cdbd2cSJim Jagielski 							EntryList_Impl(
134*b1cdbd2cSJim Jagielski 								SvxIconChoiceCtrl_Impl*,
135*b1cdbd2cSJim Jagielski 								sal_uInt16 _nBlockSize,
136*b1cdbd2cSJim Jagielski 								sal_uInt16 _nInitSize,
137*b1cdbd2cSJim Jagielski 								sal_uInt16 _nReSize );
138*b1cdbd2cSJim Jagielski 							~EntryList_Impl();
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 	void 					Clear();
141*b1cdbd2cSJim Jagielski 	void 					Insert( SvxIconChoiceCtrlEntry* pEntry, sal_uLong nPos );
142*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*			Remove( sal_uLong nPos );
143*b1cdbd2cSJim Jagielski 	void					Remove( SvxIconChoiceCtrlEntry* pEntry );
144*b1cdbd2cSJim Jagielski };
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski ///////////////////////////////////////////////////////////////////////////////
148*b1cdbd2cSJim Jagielski //
149*b1cdbd2cSJim Jagielski // Implementation-class of IconChoiceCtrl
150*b1cdbd2cSJim Jagielski //
151*b1cdbd2cSJim Jagielski class SvxIconChoiceCtrl_Impl
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski 	friend class IcnCursor_Impl;
154*b1cdbd2cSJim Jagielski 	friend class EntryList_Impl;
155*b1cdbd2cSJim Jagielski 	friend class IcnGridMap_Impl;
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	sal_Bool			bChooseWithCursor;
158*b1cdbd2cSJim Jagielski 	EntryList_Impl	aEntries;
159*b1cdbd2cSJim Jagielski 	ScrollBar   	aVerSBar;
160*b1cdbd2cSJim Jagielski 	ScrollBar   	aHorSBar;
161*b1cdbd2cSJim Jagielski 	ScrollBarBox	aScrBarBox;
162*b1cdbd2cSJim Jagielski 	Rectangle		aCurSelectionRect;
163*b1cdbd2cSJim Jagielski 	SvPtrarr		aSelectedRectList;
164*b1cdbd2cSJim Jagielski 	Timer			aEditTimer;  				// fuer Inplace-Editieren
165*b1cdbd2cSJim Jagielski 	Timer			aAutoArrangeTimer;
166*b1cdbd2cSJim Jagielski 	Timer			aDocRectChangedTimer;
167*b1cdbd2cSJim Jagielski 	Timer			aVisRectChangedTimer;
168*b1cdbd2cSJim Jagielski 	Timer			aCallSelectHdlTimer;
169*b1cdbd2cSJim Jagielski 	Size			aVirtOutputSize;
170*b1cdbd2cSJim Jagielski 	Size			aImageSize;
171*b1cdbd2cSJim Jagielski 	Size			aDefaultTextSize;
172*b1cdbd2cSJim Jagielski 	Size			aOutputSize; // Pixel
173*b1cdbd2cSJim Jagielski 	Point			aDDLastEntryPos;
174*b1cdbd2cSJim Jagielski 	Point			aDDLastRectPos;
175*b1cdbd2cSJim Jagielski 	Point 			aDDPaintOffs;
176*b1cdbd2cSJim Jagielski 	Point			aDDStartPos;
177*b1cdbd2cSJim Jagielski 	SvtIconChoiceCtrl*		pView;
178*b1cdbd2cSJim Jagielski 	IcnCursor_Impl*	pImpCursor;
179*b1cdbd2cSJim Jagielski 	IcnGridMap_Impl* pGridMap;
180*b1cdbd2cSJim Jagielski 	long			nMaxVirtWidth;	// max. Breite aVirtOutputSize bei ALIGN_TOP
181*b1cdbd2cSJim Jagielski 	long			nMaxVirtHeight; // max. Hoehe aVirtOutputSize bei ALIGN_LEFT
182*b1cdbd2cSJim Jagielski 	List*			pZOrderList;
183*b1cdbd2cSJim Jagielski 	SvPtrarr*		pColumns;
184*b1cdbd2cSJim Jagielski 	IcnViewEdit_Impl* pEdit;
185*b1cdbd2cSJim Jagielski 	WinBits			nWinBits;
186*b1cdbd2cSJim Jagielski 	long			nMaxBoundHeight; 			// Hoehe des hoechsten BoundRects
187*b1cdbd2cSJim Jagielski 	sal_uInt16			nFlags;
188*b1cdbd2cSJim Jagielski 	sal_uInt16			nCurTextDrawFlags;
189*b1cdbd2cSJim Jagielski 	sal_uLong			nUserEventAdjustScrBars;
190*b1cdbd2cSJim Jagielski 	sal_uLong			nUserEventShowCursor;
191*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	pCurHighlightFrame;
192*b1cdbd2cSJim Jagielski 	sal_Bool			bHighlightFramePressed;
193*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	pHead;						// Eintrag oben links
194*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* pCursor;
195*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	pPrevDropTarget;
196*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	pHdlEntry;
197*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	pDDRefEntry;
198*b1cdbd2cSJim Jagielski 	VirtualDevice*	pDDDev;
199*b1cdbd2cSJim Jagielski 	VirtualDevice*	pDDBufDev;
200*b1cdbd2cSJim Jagielski 	VirtualDevice*  pDDTempDev;
201*b1cdbd2cSJim Jagielski 	VirtualDevice*	pEntryPaintDev;
202*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* pAnchor;					// fuer Selektion
203*b1cdbd2cSJim Jagielski 	LocalFocus		aFocus;								// Data for focusrect
204*b1cdbd2cSJim Jagielski     ::svt::AccessibleFactoryAccess aAccFactory;
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 	List*			pDraggedSelection;
207*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	pCurEditedEntry;
208*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlTextMode eTextMode;
209*b1cdbd2cSJim Jagielski 	SelectionMode	eSelectionMode;
210*b1cdbd2cSJim Jagielski 	sal_uLong			nSelectionCount;
211*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlPositionMode ePositionMode;
212*b1cdbd2cSJim Jagielski 	sal_Bool			bBoundRectsDirty;
213*b1cdbd2cSJim Jagielski 	sal_Bool			bUpdateMode;
214*b1cdbd2cSJim Jagielski 	sal_Bool			bEntryEditingEnabled;
215*b1cdbd2cSJim Jagielski 	sal_Bool			bInDragDrop;
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski 	void 			ShowCursor( sal_Bool bShow );
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski 	void			ImpArrange( sal_Bool bKeepPredecessors = sal_False );
220*b1cdbd2cSJim Jagielski 	void			AdjustVirtSize( const Rectangle& );
221*b1cdbd2cSJim Jagielski 	void			ResetVirtSize();
222*b1cdbd2cSJim Jagielski 	void			CheckScrollBars();
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 					DECL_LINK( ScrollUpDownHdl, ScrollBar * );
225*b1cdbd2cSJim Jagielski 					DECL_LINK( ScrollLeftRightHdl, ScrollBar * );
226*b1cdbd2cSJim Jagielski 					DECL_LINK( EditTimeoutHdl, Timer* );
227*b1cdbd2cSJim Jagielski 					DECL_LINK( UserEventHdl, void* );
228*b1cdbd2cSJim Jagielski 					DECL_LINK( EndScrollHdl, void* );
229*b1cdbd2cSJim Jagielski 					DECL_LINK( AutoArrangeHdl, void* );
230*b1cdbd2cSJim Jagielski 					DECL_LINK( DocRectChangedHdl, void* );
231*b1cdbd2cSJim Jagielski 					DECL_LINK( VisRectChangedHdl, void* );
232*b1cdbd2cSJim Jagielski 					DECL_LINK( CallSelectHdlHdl, void* );
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 	void			AdjustScrollBars( sal_Bool bVirtSizeGrowedOnly = sal_False);
235*b1cdbd2cSJim Jagielski 	void			PositionScrollBars( long nRealWidth, long nRealHeight );
GetScrollBarPageSize(long nVisibleRange) const236*b1cdbd2cSJim Jagielski 	long			GetScrollBarPageSize( long nVisibleRange ) const { return ((nVisibleRange*75)/100); }
GetScrollBarLineSize() const237*b1cdbd2cSJim Jagielski 	long			GetScrollBarLineSize() const { return nMaxBoundHeight / 2; }
238*b1cdbd2cSJim Jagielski 	sal_Bool 			HandleScrollCommand( const CommandEvent& rCmd );
ToDocPos(Point & rPosPixel)239*b1cdbd2cSJim Jagielski 	void			ToDocPos( Point& rPosPixel ) { rPosPixel -= pView->GetMapMode().GetOrigin(); }
240*b1cdbd2cSJim Jagielski 	void			InitScrollBarBox();
241*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	FindNewCursor();
242*b1cdbd2cSJim Jagielski 	void			ToggleSelection( SvxIconChoiceCtrlEntry* );
243*b1cdbd2cSJim Jagielski 	void			DeselectAllBut( SvxIconChoiceCtrlEntry*, sal_Bool bPaintSync=sal_False );
244*b1cdbd2cSJim Jagielski 	void			Center( SvxIconChoiceCtrlEntry* pEntry ) const;
StopEditTimer()245*b1cdbd2cSJim Jagielski 	void			StopEditTimer() { aEditTimer.Stop(); }
StartEditTimer()246*b1cdbd2cSJim Jagielski 	void			StartEditTimer() { aEditTimer.Start(); }
247*b1cdbd2cSJim Jagielski 	void 			ImpHideDDIcon();
248*b1cdbd2cSJim Jagielski 	void			CallSelectHandler( SvxIconChoiceCtrlEntry* );
249*b1cdbd2cSJim Jagielski 	void			SelectRect(
250*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEntry1,
251*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEntry2,
252*b1cdbd2cSJim Jagielski 						sal_Bool bAdd = sal_True,
253*b1cdbd2cSJim Jagielski 						SvPtrarr* pOtherRects = 0 );
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 	void			SelectRange(
256*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pStart,
257*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEnd,
258*b1cdbd2cSJim Jagielski 						sal_Bool bAdd = sal_True );
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 	void			AddSelectedRect( const Rectangle& );
261*b1cdbd2cSJim Jagielski 	void			AddSelectedRect(
262*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEntry1,
263*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEntry2 );
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 	void			ClearSelectedRectList();
266*b1cdbd2cSJim Jagielski 	void			ClearColumnList();
267*b1cdbd2cSJim Jagielski 	Rectangle		CalcMaxTextRect( const SvxIconChoiceCtrlEntry* pEntry ) const;
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski 	void			ClipAtVirtOutRect( Rectangle& rRect ) const;
270*b1cdbd2cSJim Jagielski 	void 			AdjustAtGrid( const SvPtrarr& rRow, SvxIconChoiceCtrlEntry* pStart=0 );
271*b1cdbd2cSJim Jagielski 	Point			AdjustAtGrid(
272*b1cdbd2cSJim Jagielski 						const Rectangle& rCenterRect, // "Schwerpunkt" des Objekts (typ. Bmp-Rect)
273*b1cdbd2cSJim Jagielski 						const Rectangle& rBoundRect ) const;
274*b1cdbd2cSJim Jagielski 	sal_uLong			GetPredecessorGrid( const Point& rDocPos) const;
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski 	void			InitPredecessors();
277*b1cdbd2cSJim Jagielski 	void			ClearPredecessors();
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski 	sal_Bool			CheckVerScrollBar();
280*b1cdbd2cSJim Jagielski 	sal_Bool			CheckHorScrollBar();
281*b1cdbd2cSJim Jagielski 	void 			CancelUserEvents();
282*b1cdbd2cSJim Jagielski 	void			EntrySelected( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bSelect,
283*b1cdbd2cSJim Jagielski 						sal_Bool bSyncPaint );
284*b1cdbd2cSJim Jagielski 	void			SaveSelection( List** );
285*b1cdbd2cSJim Jagielski 	void			RepaintEntries( sal_uInt16 nEntryFlagsMask );
286*b1cdbd2cSJim Jagielski 	void			SetListPositions();
287*b1cdbd2cSJim Jagielski 	void			SetDefaultTextSize();
IsAutoArrange() const288*b1cdbd2cSJim Jagielski 	sal_Bool			IsAutoArrange() const {
289*b1cdbd2cSJim Jagielski 						return (sal_Bool)(ePositionMode == IcnViewPositionModeAutoArrange); }
IsAutoAdjust() const290*b1cdbd2cSJim Jagielski 	sal_Bool			IsAutoAdjust() const {
291*b1cdbd2cSJim Jagielski 						return (sal_Bool)(ePositionMode == IcnViewPositionModeAutoAdjust); }
DocRectChanged()292*b1cdbd2cSJim Jagielski 	void			DocRectChanged() { aDocRectChangedTimer.Start(); }
VisRectChanged()293*b1cdbd2cSJim Jagielski 	void			VisRectChanged() { aVisRectChangedTimer.Start(); }
294*b1cdbd2cSJim Jagielski 	void			SetOrigin( const Point&, sal_Bool bDoNotUpdateWallpaper = sal_False );
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 					DECL_LINK( TextEditEndedHdl, IcnViewEdit_Impl* );
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 	void ShowFocus ( Rectangle& rRect );
299*b1cdbd2cSJim Jagielski 	void HideFocus ();
300*b1cdbd2cSJim Jagielski 	void DrawFocusRect ( OutputDevice* pOut );
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski 	sal_Bool			IsMnemonicChar( sal_Unicode cChar, sal_uLong& rPos ) const;
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski public:
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 	long			nGridDX,
307*b1cdbd2cSJim Jagielski 					nGridDY;
308*b1cdbd2cSJim Jagielski 	long			nHorSBarHeight,
309*b1cdbd2cSJim Jagielski 					nVerSBarWidth;
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski 					SvxIconChoiceCtrl_Impl( SvtIconChoiceCtrl* pView, WinBits nWinStyle );
312*b1cdbd2cSJim Jagielski 					~SvxIconChoiceCtrl_Impl();
313*b1cdbd2cSJim Jagielski 
SetChoiceWithCursor(sal_Bool bDo=sal_True)314*b1cdbd2cSJim Jagielski 	sal_Bool			SetChoiceWithCursor ( sal_Bool bDo = sal_True ) { sal_Bool bOld=bChooseWithCursor; bChooseWithCursor = bDo; return bOld; }
315*b1cdbd2cSJim Jagielski 	void 			Clear( sal_Bool bInCtor = sal_False );
316*b1cdbd2cSJim Jagielski 	void 			SetStyle( WinBits nWinStyle );
GetStyle() const317*b1cdbd2cSJim Jagielski 	WinBits			GetStyle() const { return nWinBits; }
318*b1cdbd2cSJim Jagielski 	void 			InsertEntry( SvxIconChoiceCtrlEntry*, sal_uLong nPos, const Point* pPos=0 );
319*b1cdbd2cSJim Jagielski 	void			CreateAutoMnemonics( MnemonicGenerator* _pGenerator = NULL );
320*b1cdbd2cSJim Jagielski 	void 			RemoveEntry( SvxIconChoiceCtrlEntry* pEntry );
321*b1cdbd2cSJim Jagielski 	void 			FontModified();
322*b1cdbd2cSJim Jagielski 	void			SelectAll( sal_Bool bSelect = sal_True, sal_Bool bPaint = sal_True );
323*b1cdbd2cSJim Jagielski 	void 			SelectEntry(
324*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry*,
325*b1cdbd2cSJim Jagielski 						sal_Bool bSelect,
326*b1cdbd2cSJim Jagielski 						sal_Bool bCallHdl = sal_True,
327*b1cdbd2cSJim Jagielski 						sal_Bool bAddToSelection = sal_False,
328*b1cdbd2cSJim Jagielski 						sal_Bool bSyncPaint = sal_False );
329*b1cdbd2cSJim Jagielski 	void 			Paint( const Rectangle& rRect );
330*b1cdbd2cSJim Jagielski 	sal_Bool 			MouseButtonDown( const MouseEvent& );
331*b1cdbd2cSJim Jagielski 	sal_Bool 			MouseButtonUp( const MouseEvent& );
332*b1cdbd2cSJim Jagielski 	sal_Bool 			MouseMove( const MouseEvent&);
333*b1cdbd2cSJim Jagielski 	sal_Bool 			RequestHelp( const HelpEvent& rHEvt );
334*b1cdbd2cSJim Jagielski 	void 			SetCursor_Impl(
335*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pOldCursor,
336*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pNewCursor,
337*b1cdbd2cSJim Jagielski 						sal_Bool bMod1,
338*b1cdbd2cSJim Jagielski 						sal_Bool bShift,
339*b1cdbd2cSJim Jagielski 						sal_Bool bPaintSync = sal_False);
340*b1cdbd2cSJim Jagielski 	sal_Bool 			KeyInput( const KeyEvent& );
341*b1cdbd2cSJim Jagielski 	void 			Resize();
342*b1cdbd2cSJim Jagielski 	void 			GetFocus();
343*b1cdbd2cSJim Jagielski 	void 			LoseFocus();
344*b1cdbd2cSJim Jagielski 	void 			SetUpdateMode( sal_Bool bUpdate );
GetUpdateMode() const345*b1cdbd2cSJim Jagielski 	sal_Bool			GetUpdateMode() const { return bUpdateMode; }
346*b1cdbd2cSJim Jagielski 	void 			PaintEntry( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bIsBackgroundPainted=sal_False );
347*b1cdbd2cSJim Jagielski 	void 			PaintEntry(
348*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry*,
349*b1cdbd2cSJim Jagielski 						const Point&,
350*b1cdbd2cSJim Jagielski 						OutputDevice* pOut = 0,
351*b1cdbd2cSJim Jagielski 						sal_Bool bIsBackgroundPainted = sal_False);
352*b1cdbd2cSJim Jagielski 	void 			PaintEntryVirtOutDev( SvxIconChoiceCtrlEntry* );
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski 	void 			SetEntryPos(
355*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEntry,
356*b1cdbd2cSJim Jagielski 						const Point& rPos,
357*b1cdbd2cSJim Jagielski 						sal_Bool bAdjustRow = sal_False,
358*b1cdbd2cSJim Jagielski 						sal_Bool bCheckScrollBars = sal_False,
359*b1cdbd2cSJim Jagielski 						sal_Bool bKeepGridMap = sal_False );
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 	void 			InvalidateEntry( SvxIconChoiceCtrlEntry* );
362*b1cdbd2cSJim Jagielski 	IcnViewFieldType 	GetItem( SvxIconChoiceCtrlEntry*, const Point& rAbsPos );
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski 	void 			SetNoSelection();
365*b1cdbd2cSJim Jagielski 
GetCurEntry() const366*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GetCurEntry() const { return pCursor; }
367*b1cdbd2cSJim Jagielski 	void 			SetCursor(
368*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry*,
369*b1cdbd2cSJim Jagielski 						// sal_True == bei Single-Selection die Sel. mitfuehren
370*b1cdbd2cSJim Jagielski 						sal_Bool bSyncSingleSelection = sal_True,
371*b1cdbd2cSJim Jagielski 						sal_Bool bShowFocusAsync = sal_False );
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GetEntry( const Point& rDocPos, sal_Bool bHit = sal_False );
374*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	GetNextEntry( const Point& rDocPos, SvxIconChoiceCtrlEntry* pCurEntry );
375*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	GetPrevEntry( const Point& rDocPos, SvxIconChoiceCtrlEntry* pCurEntry  );
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski 	Point 			GetEntryPos( SvxIconChoiceCtrlEntry* );
378*b1cdbd2cSJim Jagielski 	void 			MakeEntryVisible( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bBound = sal_True );
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski 	void			Arrange(sal_Bool bKeepPredecessors = sal_False, long nSetMaxVirtWidth =0, long nSetMaxVirtHeight =0 );
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski 	Rectangle		CalcFocusRect( SvxIconChoiceCtrlEntry* );
383*b1cdbd2cSJim Jagielski 	Rectangle		CalcBmpRect( SvxIconChoiceCtrlEntry*, const Point* pPos = 0 );
384*b1cdbd2cSJim Jagielski 	Rectangle		CalcTextRect(
385*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry*,
386*b1cdbd2cSJim Jagielski 						const Point* pPos = 0,
387*b1cdbd2cSJim Jagielski 						sal_Bool bForInplaceEdit = sal_False,
388*b1cdbd2cSJim Jagielski 						const String* pStr = 0 );
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski 	long			CalcBoundingWidth( SvxIconChoiceCtrlEntry* ) const;
391*b1cdbd2cSJim Jagielski 	long			CalcBoundingHeight( SvxIconChoiceCtrlEntry* ) const;
392*b1cdbd2cSJim Jagielski 	Size			CalcBoundingSize( SvxIconChoiceCtrlEntry* ) const;
393*b1cdbd2cSJim Jagielski 	void			FindBoundingRect( SvxIconChoiceCtrlEntry* pEntry );
394*b1cdbd2cSJim Jagielski 	void 			SetBoundingRect_Impl(
395*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEntry,
396*b1cdbd2cSJim Jagielski 						const Point& rPos,
397*b1cdbd2cSJim Jagielski 						const Size& rBoundingSize );
398*b1cdbd2cSJim Jagielski 	// berechnet alle BoundRects neu
399*b1cdbd2cSJim Jagielski 	void			RecalcAllBoundingRects();
400*b1cdbd2cSJim Jagielski 	// berechnet alle ungueltigen BoundRects neu
401*b1cdbd2cSJim Jagielski 	void			RecalcAllBoundingRectsSmart();
402*b1cdbd2cSJim Jagielski 	const Rectangle&  GetEntryBoundRect( SvxIconChoiceCtrlEntry* );
403*b1cdbd2cSJim Jagielski 	void			InvalidateBoundingRect( SvxIconChoiceCtrlEntry* );
InvalidateBoundingRect(Rectangle & rRect)404*b1cdbd2cSJim Jagielski 	void			InvalidateBoundingRect( Rectangle& rRect ) { rRect.Right() = LONG_MAX; bBoundRectsDirty = sal_True; }
IsBoundingRectValid(const Rectangle & rRect) const405*b1cdbd2cSJim Jagielski 	sal_Bool			IsBoundingRectValid( const Rectangle& rRect ) const { return (sal_Bool)( rRect.Right() != LONG_MAX ); }
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 	void 			PaintEmphasis(
408*b1cdbd2cSJim Jagielski 						const Rectangle& rRect1,
409*b1cdbd2cSJim Jagielski 						const Rectangle& rRect2,
410*b1cdbd2cSJim Jagielski 						sal_Bool bSelected,
411*b1cdbd2cSJim Jagielski 						sal_Bool bDropTarget,
412*b1cdbd2cSJim Jagielski 						sal_Bool bCursored,
413*b1cdbd2cSJim Jagielski 						OutputDevice* pOut,
414*b1cdbd2cSJim Jagielski 						sal_Bool bIsBackgroundPainted = sal_False);
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 	void 			PaintItem(
417*b1cdbd2cSJim Jagielski 						const Rectangle& rRect,
418*b1cdbd2cSJim Jagielski 						IcnViewFieldType eItem,
419*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pEntry,
420*b1cdbd2cSJim Jagielski 						sal_uInt16 nPaintFlags,
421*b1cdbd2cSJim Jagielski 						OutputDevice* pOut,
422*b1cdbd2cSJim Jagielski 						const String* pStr = 0,
423*b1cdbd2cSJim Jagielski 						::vcl::ControlLayoutData* _pLayoutData = NULL );
424*b1cdbd2cSJim Jagielski 
425*b1cdbd2cSJim Jagielski 	// berechnet alle BoundingRects neu, wenn bMustRecalcBoundingRects == sal_True
CheckBoundingRects()426*b1cdbd2cSJim Jagielski 	void			CheckBoundingRects() { if (bBoundRectsDirty) RecalcAllBoundingRectsSmart(); }
427*b1cdbd2cSJim Jagielski 	// berechnet alle invalidierten BoundingRects neu
428*b1cdbd2cSJim Jagielski 	void			UpdateBoundingRects();
429*b1cdbd2cSJim Jagielski 	void			ShowTargetEmphasis( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bShow );
430*b1cdbd2cSJim Jagielski 	void			PrepareCommandEvent( const CommandEvent& );
431*b1cdbd2cSJim Jagielski 	void			Command( const CommandEvent& rCEvt );
432*b1cdbd2cSJim Jagielski 	void			ToTop( SvxIconChoiceCtrlEntry* );
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 	sal_uLong			GetSelectionCount() const;
435*b1cdbd2cSJim Jagielski 	void			SetGrid( const Size& );
436*b1cdbd2cSJim Jagielski 	Size 			GetMinGrid() const;
437*b1cdbd2cSJim Jagielski 	sal_uLong			GetGridCount(
438*b1cdbd2cSJim Jagielski 						const Size& rSize,
439*b1cdbd2cSJim Jagielski 						sal_Bool bCheckScrBars,
440*b1cdbd2cSJim Jagielski 						sal_Bool bSmartScrBar ) const;
441*b1cdbd2cSJim Jagielski 	void			Scroll( long nDeltaX, long nDeltaY, sal_Bool bScrollBar = sal_False );
442*b1cdbd2cSJim Jagielski 	const Size&		GetItemSize( SvxIconChoiceCtrlEntry*, IcnViewFieldType ) const;
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski 	void 			HideDDIcon();
445*b1cdbd2cSJim Jagielski 	void 			ShowDDIcon( SvxIconChoiceCtrlEntry* pRefEntry, const Point& rPos );
446*b1cdbd2cSJim Jagielski 	void			HideShowDDIcon(
447*b1cdbd2cSJim Jagielski 						SvxIconChoiceCtrlEntry* pRefEntry,
448*b1cdbd2cSJim Jagielski 						const Point& rPos );
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 	sal_Bool			IsOver(
451*b1cdbd2cSJim Jagielski 						SvPtrarr* pSelectedRectList,
452*b1cdbd2cSJim Jagielski 						const Rectangle& rEntryBoundRect ) const;
453*b1cdbd2cSJim Jagielski 
454*b1cdbd2cSJim Jagielski 	void			SelectRect(
455*b1cdbd2cSJim Jagielski 						const Rectangle&,
456*b1cdbd2cSJim Jagielski 						sal_Bool bAdd = sal_True,
457*b1cdbd2cSJim Jagielski 						SvPtrarr* pOtherRects = 0 );
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski 	void			CalcScrollOffsets(
460*b1cdbd2cSJim Jagielski 						const Point& rRefPosPixel,
461*b1cdbd2cSJim Jagielski 						long& rX,
462*b1cdbd2cSJim Jagielski 						long& rY,
463*b1cdbd2cSJim Jagielski 						sal_Bool bDragDrop = sal_False,
464*b1cdbd2cSJim Jagielski 						sal_uInt16 nBorderWidth = 10 );
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski 	sal_Bool			IsTextHit( SvxIconChoiceCtrlEntry* pEntry, const Point& rDocPos );
467*b1cdbd2cSJim Jagielski 	void			MakeVisible(
468*b1cdbd2cSJim Jagielski 						const Rectangle& rDocPos,
469*b1cdbd2cSJim Jagielski 						sal_Bool bInScrollBarEvent=sal_False,
470*b1cdbd2cSJim Jagielski 						sal_Bool bCallRectChangedHdl = sal_True );
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski 	void			AdjustEntryAtGrid( SvxIconChoiceCtrlEntry* pStart = 0 );
473*b1cdbd2cSJim Jagielski 	void			SetEntryTextMode( SvxIconChoiceCtrlTextMode, SvxIconChoiceCtrlEntry* pEntry = 0 );
474*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlTextMode GetTextMode( const SvxIconChoiceCtrlEntry* pEntry = 0 ) const;
475*b1cdbd2cSJim Jagielski 	void			ShowEntryFocusRect( const SvxIconChoiceCtrlEntry* pEntry );
EnableEntryEditing(sal_Bool bEnable)476*b1cdbd2cSJim Jagielski 	void			EnableEntryEditing( sal_Bool bEnable ) { bEntryEditingEnabled = bEnable; }
IsEntryEditingEnabled() const477*b1cdbd2cSJim Jagielski 	sal_Bool			IsEntryEditingEnabled() const { return bEntryEditingEnabled; }
IsEntryEditing() const478*b1cdbd2cSJim Jagielski 	sal_Bool 			IsEntryEditing() const { return (sal_Bool)(pCurEditedEntry!=0); }
479*b1cdbd2cSJim Jagielski 	void			EditEntry( SvxIconChoiceCtrlEntry* pEntry );
480*b1cdbd2cSJim Jagielski 	void			StopEntryEditing( sal_Bool bCancel );
481*b1cdbd2cSJim Jagielski 	void			LockEntryPos( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bLock );
GetEntryCount() const482*b1cdbd2cSJim Jagielski 	sal_uLong			GetEntryCount() const { return aEntries.Count(); }
GetEntry(sal_uLong nPos) const483*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	GetEntry( sal_uLong nPos ) const { return (SvxIconChoiceCtrlEntry*)aEntries.GetObject(nPos); }
484*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	GetFirstSelectedEntry( sal_uLong& ) const;
485*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	GetNextSelectedEntry( sal_uLong& ) const;
GetHdlEntry() const486*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GetHdlEntry() const { return pHdlEntry; }
SetHdlEntry(SvxIconChoiceCtrlEntry * pEntry)487*b1cdbd2cSJim Jagielski 	void 			SetHdlEntry( SvxIconChoiceCtrlEntry* pEntry ) { pHdlEntry = pEntry; }
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlTextMode GetEntryTextModeSmart( const SvxIconChoiceCtrlEntry* pEntry ) const;
SetSelectionMode(SelectionMode eMode)490*b1cdbd2cSJim Jagielski 	void			SetSelectionMode( SelectionMode eMode ) { eSelectionMode=eMode; }
GetSelectionMode() const491*b1cdbd2cSJim Jagielski 	SelectionMode	GetSelectionMode() const { return eSelectionMode; }
AreEntriesMoved() const492*b1cdbd2cSJim Jagielski 	sal_Bool			AreEntriesMoved() const { return (sal_Bool)((nFlags & F_MOVED_ENTRIES)!=0); }
SetEntriesMoved(sal_Bool bMoved)493*b1cdbd2cSJim Jagielski 	void			SetEntriesMoved( sal_Bool bMoved )
494*b1cdbd2cSJim Jagielski 					{
495*b1cdbd2cSJim Jagielski 						if( bMoved ) nFlags |= F_MOVED_ENTRIES;
496*b1cdbd2cSJim Jagielski 						else nFlags &= ~(F_MOVED_ENTRIES);
497*b1cdbd2cSJim Jagielski 					}
498*b1cdbd2cSJim Jagielski 	sal_uLong			GetEntryListPos( SvxIconChoiceCtrlEntry* ) const;
499*b1cdbd2cSJim Jagielski 	void 			SetEntryListPos( SvxIconChoiceCtrlEntry* pEntry, sal_uLong nNewPos );
SetEntryImageSize(const Size & rSize)500*b1cdbd2cSJim Jagielski 	void			SetEntryImageSize( const Size& rSize ) { aImageSize = rSize; }
501*b1cdbd2cSJim Jagielski 	void			SetEntryFlags( SvxIconChoiceCtrlEntry* pEntry, sal_uInt16 nFlags );
502*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GoLeftRight( SvxIconChoiceCtrlEntry*, sal_Bool bRight );
503*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GoUpDown( SvxIconChoiceCtrlEntry*, sal_Bool bDown );
504*b1cdbd2cSJim Jagielski 	void 			InitSettings();
505*b1cdbd2cSJim Jagielski 	Rectangle		GetOutputRect() const;
506*b1cdbd2cSJim Jagielski 
ArePredecessorsSet() const507*b1cdbd2cSJim Jagielski 	sal_Bool			ArePredecessorsSet() const { return (sal_Bool)(pHead != 0); }
GetPredecessorHead() const508*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GetPredecessorHead() const { return pHead; }
509*b1cdbd2cSJim Jagielski 	void			SetEntryPredecessor(SvxIconChoiceCtrlEntry* pEntry,SvxIconChoiceCtrlEntry* pPredecessor);
510*b1cdbd2cSJim Jagielski 	sal_Bool			GetEntryPredecessor(SvxIconChoiceCtrlEntry* pEntry,SvxIconChoiceCtrlEntry** ppPredecessor);
511*b1cdbd2cSJim Jagielski 	// liefert gueltige Ergebnisse nur im AutoArrange-Modus!
512*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry*	FindEntryPredecessor( SvxIconChoiceCtrlEntry* pEntry, const Point& );
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 	void			SetPositionMode( SvxIconChoiceCtrlPositionMode );
GetPositionMode() const515*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlPositionMode GetPositionMode() const { return ePositionMode;}
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 	void			Flush();
518*b1cdbd2cSJim Jagielski 	void			SetColumn( sal_uInt16 nIndex, const SvxIconChoiceCtrlColumnInfo& );
519*b1cdbd2cSJim Jagielski 	const SvxIconChoiceCtrlColumnInfo* GetColumn( sal_uInt16 nIndex ) const;
520*b1cdbd2cSJim Jagielski 	const SvxIconChoiceCtrlColumnInfo* GetItemColumn( sal_uInt16 nSubItem, long& rLeft ) const;
521*b1cdbd2cSJim Jagielski 
GetDocumentRect() const522*b1cdbd2cSJim Jagielski 	Rectangle 		GetDocumentRect() const { return Rectangle( Point(), aVirtOutputSize ); }
GetVisibleRect() const523*b1cdbd2cSJim Jagielski 	Rectangle		GetVisibleRect() const { return GetOutputRect(); }
524*b1cdbd2cSJim Jagielski 
525*b1cdbd2cSJim Jagielski 	void			SetEntryHighlightFrame( SvxIconChoiceCtrlEntry* pEntry,sal_Bool bKeepHighlightFlags=sal_False );
526*b1cdbd2cSJim Jagielski 	void			HideEntryHighlightFrame();
527*b1cdbd2cSJim Jagielski 	void 			DrawHighlightFrame( OutputDevice* pOut,
528*b1cdbd2cSJim Jagielski 						const Rectangle& rBmpRect, sal_Bool bHide );
StopSelectTimer()529*b1cdbd2cSJim Jagielski 	void			StopSelectTimer() { aCallSelectHdlTimer.Stop(); }
530*b1cdbd2cSJim Jagielski 	void 			Tracking( const TrackingEvent& rTEvt );
531*b1cdbd2cSJim Jagielski 	Point			GetPopupMenuPosPixel() const;
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski 	sal_Bool			HandleShortCutKey( const KeyEvent& rKeyEvent );
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski 	void			CallEventListeners( sal_uLong nEvent, void* pData = NULL );
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski     inline ::svt::IAccessibleFactory&
GetAccessibleFactory()538*b1cdbd2cSJim Jagielski         GetAccessibleFactory() { return aAccFactory.getFactory(); }
539*b1cdbd2cSJim Jagielski };
540*b1cdbd2cSJim Jagielski 
541*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski class IcnCursor_Impl
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrl_Impl*	pView;
546*b1cdbd2cSJim Jagielski 	SvPtrarr* 		pColumns;
547*b1cdbd2cSJim Jagielski 	SvPtrarr* 		pRows;
548*b1cdbd2cSJim Jagielski 	long			nCols;
549*b1cdbd2cSJim Jagielski 	long			nRows;
550*b1cdbd2cSJim Jagielski 	short 			nDeltaWidth;
551*b1cdbd2cSJim Jagielski 	short 			nDeltaHeight;
552*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* pCurEntry;
553*b1cdbd2cSJim Jagielski 	void 			SetDeltas();
554*b1cdbd2cSJim Jagielski 	void 			ImplCreate();
Create()555*b1cdbd2cSJim Jagielski 	void 			Create() {	if( !pColumns )	ImplCreate(); }
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski 	sal_uInt16 			GetSortListPos( SvPtrarr* pList, long nValue, int bVertical);
558*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* SearchCol(sal_uInt16 nCol,sal_uInt16 nTop,sal_uInt16 nBottom,sal_uInt16 nPref,
559*b1cdbd2cSJim Jagielski 						sal_Bool bDown, sal_Bool bSimple );
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* SearchRow(sal_uInt16 nRow,sal_uInt16 nRight,sal_uInt16 nLeft,sal_uInt16 nPref,
562*b1cdbd2cSJim Jagielski 						sal_Bool bRight, sal_Bool bSimple );
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski public:
565*b1cdbd2cSJim Jagielski 					IcnCursor_Impl( SvxIconChoiceCtrl_Impl* pOwner );
566*b1cdbd2cSJim Jagielski 					~IcnCursor_Impl();
567*b1cdbd2cSJim Jagielski 	void 			Clear();
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski 	// fuer Cursortravelling usw.
570*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GoLeftRight( SvxIconChoiceCtrlEntry*, sal_Bool bRight );
571*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GoUpDown( SvxIconChoiceCtrlEntry*, sal_Bool bDown );
572*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrlEntry* GoPageUpDown( SvxIconChoiceCtrlEntry*, sal_Bool bDown );
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski 	// Erzeugt fuer jede Zeile (Hoehe=nGridDY) eine nach BoundRect.Left()
575*b1cdbd2cSJim Jagielski 	// sortierte Liste der Eintraege, die in ihr stehen. Eine Liste kann
576*b1cdbd2cSJim Jagielski 	// leer sein. Die Listen gehen in das Eigentum des Rufenden ueber und
577*b1cdbd2cSJim Jagielski 	// muessen mit DestroyGridAdjustData geloescht werden
578*b1cdbd2cSJim Jagielski 	void			CreateGridAjustData( SvPtrarr& pLists, SvxIconChoiceCtrlEntry* pRow=0);
579*b1cdbd2cSJim Jagielski 	static void 	DestroyGridAdjustData( SvPtrarr& rLists );
580*b1cdbd2cSJim Jagielski };
581*b1cdbd2cSJim Jagielski 
582*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------------------------
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski typedef sal_uLong GridId;
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski #define GRID_NOT_FOUND	((GridId)ULONG_MAX)
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski class IcnGridMap_Impl
589*b1cdbd2cSJim Jagielski {
590*b1cdbd2cSJim Jagielski 	Rectangle		_aLastOccupiedGrid;
591*b1cdbd2cSJim Jagielski 	SvxIconChoiceCtrl_Impl*	_pView;
592*b1cdbd2cSJim Jagielski 	sal_Bool*			_pGridMap;
593*b1cdbd2cSJim Jagielski 	sal_uInt16			_nGridCols, _nGridRows;
594*b1cdbd2cSJim Jagielski 
595*b1cdbd2cSJim Jagielski 	void			Expand();
596*b1cdbd2cSJim Jagielski 	void			Create_Impl();
Create()597*b1cdbd2cSJim Jagielski 	void			Create() { if(!_pGridMap) Create_Impl(); }
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski 	void			GetMinMapSize( sal_uInt16& rDX, sal_uInt16& rDY ) const;
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski public:
602*b1cdbd2cSJim Jagielski 					IcnGridMap_Impl(SvxIconChoiceCtrl_Impl*	pView);
603*b1cdbd2cSJim Jagielski 					~IcnGridMap_Impl();
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski 	void			Clear();
606*b1cdbd2cSJim Jagielski 
607*b1cdbd2cSJim Jagielski 	GridId	 		GetGrid( const Point& rDocPos, sal_Bool* pbClipped = 0 );
608*b1cdbd2cSJim Jagielski 	GridId			GetGrid( sal_uInt16 nGridX, sal_uInt16 nGridY );
609*b1cdbd2cSJim Jagielski 	GridId			GetUnoccupiedGrid( sal_Bool bOccupyFound=sal_True );
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski 	void			OccupyGrids( const Rectangle&, sal_Bool bOccupy = sal_True );
612*b1cdbd2cSJim Jagielski 	void			OccupyGrids( const SvxIconChoiceCtrlEntry*, sal_Bool bOccupy = sal_True );
OccupyGrid(GridId nId,sal_Bool bOccupy=sal_True)613*b1cdbd2cSJim Jagielski 	void			OccupyGrid( GridId nId, sal_Bool bOccupy = sal_True )
614*b1cdbd2cSJim Jagielski 					{
615*b1cdbd2cSJim Jagielski 						DBG_ASSERT(!_pGridMap || nId<(sal_uLong)(_nGridCols*_nGridRows),"OccupyGrid: Bad GridId");
616*b1cdbd2cSJim Jagielski 						if(_pGridMap && nId < (sal_uLong)(_nGridCols *_nGridRows) )
617*b1cdbd2cSJim Jagielski 							_pGridMap[ nId ] = bOccupy;
618*b1cdbd2cSJim Jagielski 					}
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski 	Rectangle		GetGridRect( GridId );
621*b1cdbd2cSJim Jagielski 	void			GetGridCoord( GridId, sal_uInt16& rGridX, sal_uInt16& rGridY );
622*b1cdbd2cSJim Jagielski 	static sal_uLong 	GetGridCount( const Size& rSizePixel, sal_uInt16 nGridWidth, sal_uInt16 nGridHeight );
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski 	void			OutputSizeChanged();
625*b1cdbd2cSJim Jagielski };
626*b1cdbd2cSJim Jagielski 
627*b1cdbd2cSJim Jagielski 
628*b1cdbd2cSJim Jagielski 
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski 
631*b1cdbd2cSJim Jagielski #endif
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski 
634