xref: /aoo42x/main/svtools/inc/svtools/svlbitm.hxx (revision 4d7c9de0)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 #ifndef _SVLBOXITM_HXX
26 #define _SVLBOXITM_HXX
27 
28 #include "svtools/svtdllapi.h"
29 
30 #ifndef LINK_HXX
31 #include <tools/link.hxx>
32 #endif
33 
34 #ifndef _IMAGE_HXX
35 #include <vcl/image.hxx>
36 #endif
37 #include <svtools/svlbox.hxx>
38 
39 class SvLBoxEntry;
40 
41 #define SV_ITEM_ID_LBOXSTRING		1
42 #define SV_ITEM_ID_LBOXBMP			2
43 #define SV_ITEM_ID_LBOXBUTTON		3
44 #define SV_ITEM_ID_LBOXCONTEXTBMP	4
45 #define SV_ITEM_ID_EXTENDRLBOXSTRING	5
46 
47 enum SvButtonState { SV_BUTTON_UNCHECKED, SV_BUTTON_CHECKED, SV_BUTTON_TRISTATE };
48 
49 #define SV_BMP_UNCHECKED		0
50 #define SV_BMP_CHECKED   		1
51 #define SV_BMP_TRISTATE  		2
52 #define SV_BMP_HIUNCHECKED 		3
53 #define SV_BMP_HICHECKED   		4
54 #define SV_BMP_HITRISTATE  		5
55 #define SV_BMP_STATICIMAGE      6
56 
57 struct SvLBoxButtonData_Impl;
58 
59 class SVT_DLLPUBLIC SvLBoxButtonData
60 {
61 private:
62 	Link 					aLink;
63 	long 					nWidth;
64 	long					nHeight;
65 	SvLBoxButtonData_Impl*	pImpl;
66 	sal_Bool					bDataOk;
67 	SvButtonState			eState;
68 
69 	SVT_DLLPRIVATE void 					SetWidthAndHeight();
70 	SVT_DLLPRIVATE void					InitData( sal_Bool bImagesFromDefault,
71 									  bool _bRadioBtn, const Control* pControlForSettings = NULL );
72 public:
73 							// include creating default images (CheckBox or RadioButton)
74 							SvLBoxButtonData( const Control* pControlForSettings );
75 							SvLBoxButtonData( const Control* pControlForSettings, bool _bRadioBtn );
76 
77 							SvLBoxButtonData();
78 							~SvLBoxButtonData();
79 
80 	sal_uInt16 					GetIndex( sal_uInt16 nItemState );
81 	inline long				Width();
82 	inline long				Height();
83 	void					SetLink( const Link& rLink) { aLink=rLink; }
84 	const Link&				GetLink() const { return aLink; }
85  	sal_Bool					IsRadio();
86 	// weil Buttons nicht von LinkHdl abgeleitet sind
87 	void					CallLink();
88 
89 	void					StoreButtonState( SvLBoxEntry* pEntry, sal_uInt16 nItemFlags );
90 	SvButtonState 			ConvertToButtonState( sal_uInt16 nItemFlags ) const;
91 
92 	inline SvButtonState	GetActButtonState() const;
93 	SvLBoxEntry*			GetActEntry() const;
94 
95 	Image aBmps[24];  // Indizes siehe Konstanten BMP_ ....
96 
97 	void					SetDefaultImages( const Control* pControlForSettings = NULL );
98 								// set images acording to the color scheeme of the Control
99 								// pControlForSettings == NULL: settings are taken from Application
100 	sal_Bool					HasDefaultImages( void ) const;
101 };
102 
103 inline long SvLBoxButtonData::Width()
104 {
105 	if ( !bDataOk )
106 		SetWidthAndHeight();
107 	return nWidth;
108 }
109 
110 inline long SvLBoxButtonData::Height()
111 {
112 	if ( !bDataOk )
113 		SetWidthAndHeight();
114 	return nHeight;
115 }
116 
117 inline SvButtonState SvLBoxButtonData::GetActButtonState() const
118 {
119 	return eState;
120 }
121 
122 // **********************************************************************
123 
124 class SVT_DLLPUBLIC SvLBoxString : public SvLBoxItem
125 {
126 	XubString aStr;
127 public:
128 					SvLBoxString( SvLBoxEntry*,sal_uInt16 nFlags,const XubString& rStr);
129 					SvLBoxString();
130 	virtual			~SvLBoxString();
131 	virtual sal_uInt16	IsA();
132 	void			InitViewData( SvLBox*,SvLBoxEntry*,SvViewDataItem* );
133 	XubString		GetText() const { return aStr; }
134 	virtual XubString		GetExtendText() const {return XubString();}
135 	void 			SetText( SvLBoxEntry*, const XubString& rStr );
136 	void			Paint( const Point&, SvLBox& rDev, sal_uInt16 nFlags,SvLBoxEntry* );
137 	SvLBoxItem* 	Create() const;
138 	void 			Clone( SvLBoxItem* pSource );
139 };
140 
141 class SvLBoxBmp : public SvLBoxItem
142 {
143 	Image aBmp;
144 public:
145 					SvLBoxBmp( SvLBoxEntry*, sal_uInt16 nFlags, Image );
146 					SvLBoxBmp();
147 	virtual			~SvLBoxBmp();
148 	virtual sal_uInt16	IsA();
149 	void			InitViewData( SvLBox*,SvLBoxEntry*,SvViewDataItem* );
150 	void			SetBitmap( SvLBoxEntry*, Image );
151 	void			Paint( const Point&, SvLBox& rView, sal_uInt16 nFlags,SvLBoxEntry* );
152 	SvLBoxItem*	 	Create() const;
153 	void 			Clone( SvLBoxItem* pSource );
154 };
155 
156 
157 #define SV_ITEMSTATE_UNCHECKED			0x0001
158 #define SV_ITEMSTATE_CHECKED			0x0002
159 #define SV_ITEMSTATE_TRISTATE			0x0004
160 #define SV_ITEMSTATE_HILIGHTED			0x0008
161 #define SV_STATE_MASK 0xFFF8  // zum Loeschen von UNCHECKED,CHECKED,TRISTATE
162 
163 enum SvLBoxButtonKind
164 {
165     SvLBoxButtonKind_enabledCheckbox,
166     SvLBoxButtonKind_disabledCheckbox,
167     SvLBoxButtonKind_staticImage
168 };
169 
170 class SVT_DLLPUBLIC SvLBoxButton : public SvLBoxItem
171 {
172 	SvLBoxButtonData*	pData;
173     SvLBoxButtonKind eKind;
174 	sal_uInt16 nItemFlags;
175 	sal_uInt16 nImgArrOffs;
176 	sal_uInt16 nBaseOffs;
177 
178 	void ImplAdjustBoxSize( Size& io_rCtrlSize, ControlType i_eType, Window* pParent );
179 public:
180                     // An SvLBoxButton can be of three different kinds: an
181                     // enabled checkbox (the normal kind), a disabled checkbox
182                     // (which cannot be modified via UI), or a static image
183                     // (see SV_BMP_STATICIMAGE; nFlags are effectively ignored
184                     // for that kind).
185 					SvLBoxButton( SvLBoxEntry* pEntry,
186                                   SvLBoxButtonKind eTheKind, sal_uInt16 nFlags,
187                                   SvLBoxButtonData* pBData );
188 					SvLBoxButton();
189 	virtual			~SvLBoxButton();
190 	void			InitViewData( SvLBox*,SvLBoxEntry*,SvViewDataItem* );
191 	virtual sal_uInt16	IsA();
192 	void 			Check( SvLBox* pView, SvLBoxEntry*, sal_Bool bCheck );
193 	virtual sal_Bool 	ClickHdl(SvLBox* pView, SvLBoxEntry* );
194 	void			Paint( const Point&, SvLBox& rView, sal_uInt16 nFlags,SvLBoxEntry* );
195 	SvLBoxItem*	 	Create() const;
196 	void 			Clone( SvLBoxItem* pSource );
197 	sal_uInt16			GetButtonFlags() const { return nItemFlags; }
198 	sal_Bool			IsStateChecked() const { return (sal_Bool)(nItemFlags & SV_ITEMSTATE_CHECKED)!=0; }
199 	sal_Bool			IsStateUnchecked() const { return (sal_Bool)(nItemFlags & SV_ITEMSTATE_UNCHECKED)!=0; }
200 	sal_Bool			IsStateTristate() const { return (sal_Bool)(nItemFlags & SV_ITEMSTATE_TRISTATE)!=0; }
201 	sal_Bool			IsStateHilighted() const { return (sal_Bool)(nItemFlags & SV_ITEMSTATE_HILIGHTED)!=0; }
202 	void			SetStateChecked();
203 	void			SetStateUnchecked();
204 	void			SetStateTristate();
205 	void			SetStateHilighted( sal_Bool bHilight );
206 
207     SvLBoxButtonKind GetKind() const { return eKind; }
208 
209 	void			SetBaseOffs( sal_uInt16 nOffs ) { nBaseOffs = nOffs; }
210 	sal_uInt16			GetBaseOffs() const { return nBaseOffs; }
211 
212     // Check whether this button can be modified via UI, sounding a beep if it
213     // cannot be modified:
214     bool            CheckModification() const;
215 	SvLBoxButtonData* GetButtonData() const{ return pData;}
216 };
217 
218 inline void	SvLBoxButton::SetStateChecked()
219 {
220 	nItemFlags &= SV_STATE_MASK;
221 	nItemFlags |= SV_ITEMSTATE_CHECKED;
222 }
223 inline void	SvLBoxButton::SetStateUnchecked()
224 {
225 	nItemFlags &= SV_STATE_MASK;
226 	nItemFlags |= SV_ITEMSTATE_UNCHECKED;
227 }
228 inline void	SvLBoxButton::SetStateTristate()
229 {
230 	nItemFlags &= SV_STATE_MASK;
231 	nItemFlags |= SV_ITEMSTATE_TRISTATE;
232 }
233 inline void SvLBoxButton::SetStateHilighted( sal_Bool bHilight )
234 {
235 	if ( bHilight )
236 		nItemFlags |= SV_ITEMSTATE_HILIGHTED;
237 	else
238 		nItemFlags &= ~SV_ITEMSTATE_HILIGHTED;
239 }
240 
241 
242 struct SvLBoxContextBmp_Impl;
243 class SVT_DLLPUBLIC SvLBoxContextBmp : public SvLBoxItem
244 {
245 	SvLBoxContextBmp_Impl*	m_pImpl;
246 public:
247 					SvLBoxContextBmp( SvLBoxEntry*,sal_uInt16 nFlags,Image,Image,
248 									sal_uInt16 nEntryFlagsBmp1);
249 					SvLBoxContextBmp();
250 	virtual			~SvLBoxContextBmp();
251 	virtual sal_uInt16	IsA();
252 	void			InitViewData( SvLBox*,SvLBoxEntry*,SvViewDataItem* );
253 	void			Paint( const Point&, SvLBox& rView, sal_uInt16 nFlags,SvLBoxEntry* );
254 	SvLBoxItem*	 	Create() const;
255 	void 			Clone( SvLBoxItem* pSource );
256 
257 
258 	sal_Bool			SetModeImages( const Image& _rBitmap1, const Image& _rBitmap2, BmpColorMode _eMode = BMP_COLOR_NORMAL );
259 	void			GetModeImages(		 Image& _rBitmap1,		 Image& _rBitmap2, BmpColorMode _eMode = BMP_COLOR_NORMAL ) const;
260 
261 	inline void			SetBitmap1( const Image& _rImage, BmpColorMode _eMode = BMP_COLOR_NORMAL );
262 	inline void			SetBitmap2( const Image& _rImage, BmpColorMode _eMode = BMP_COLOR_NORMAL );
263 	inline const Image&	GetBitmap1( BmpColorMode _eMode = BMP_COLOR_NORMAL ) const;
264 	inline const Image&	GetBitmap2( BmpColorMode _eMode = BMP_COLOR_NORMAL ) const;
265 
266 private:
267 	Image& implGetImageStore( sal_Bool _bFirst, BmpColorMode _eMode );
268 };
269 
270 inline void SvLBoxContextBmp::SetBitmap1( const Image& _rImage, BmpColorMode _eMode  )
271 {
272 	implGetImageStore( sal_True, _eMode ) = _rImage;
273 }
274 
275 inline void	SvLBoxContextBmp::SetBitmap2( const Image& _rImage, BmpColorMode _eMode  )
276 {
277 	implGetImageStore( sal_False, _eMode ) = _rImage;
278 }
279 
280 inline const Image&	SvLBoxContextBmp::GetBitmap1( BmpColorMode _eMode ) const
281 {
282 	Image& rImage = const_cast< SvLBoxContextBmp* >( this )->implGetImageStore( sal_True, _eMode );
283 	if ( !rImage )
284 		// fallback to the "normal" image
285 		rImage = const_cast< SvLBoxContextBmp* >( this )->implGetImageStore( sal_True, BMP_COLOR_NORMAL );
286 	return rImage;
287 }
288 
289 inline const Image&	SvLBoxContextBmp::GetBitmap2( BmpColorMode _eMode ) const
290 {
291 	Image& rImage = const_cast< SvLBoxContextBmp* >( this )->implGetImageStore( sal_False, _eMode );
292 	if ( !rImage )
293 		// fallback to the "normal" image
294 		rImage = const_cast< SvLBoxContextBmp* >( this )->implGetImageStore( sal_True, BMP_COLOR_NORMAL );
295 	return rImage;
296 }
297 
298 #endif
299