xref: /trunk/main/svtools/source/inc/property.hxx (revision 01aa44aa)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SV_PROPERTY_HXX
25 #define SV_PROPERTY_HXX
26 
27 #ifndef _VIRDEV_HXX //autogen
28 #include <vcl/virdev.hxx>
29 #endif
30 #ifndef SV_FIXED_HXX
31 #include <vcl/fixed.hxx>
32 #endif
33 #ifndef SV_LSTBOX_HXX
34 #include <vcl/lstbox.hxx>
35 #endif
36 #ifndef SV_GROUP_HXX
37 #include <vcl/group.hxx>
38 #endif
39 #ifndef SV_BUTTON_HXX
40 #include <vcl/button.hxx>
41 #endif
42 #ifndef SV_MOREBTN_HXX
43 #include <vcl/morebtn.hxx>
44 #endif
45 #ifndef _DIALOG_HXX //autogen
46 #include <vcl/dialog.hxx>
47 #endif
48 #include <vcl/combobox.hxx>
49 #include <vcl/field.hxx>
50 #include <svl/svarray.hxx>
51 
52 #define _SVSTDARR_USHORTS
53 #include <svl/svstdarr.hxx>
54 #include <vcl/virdev.hxx>
55 #include <vcl/scrbar.hxx>
56 #include <svl/svarray.hxx>
57 
58 #ifndef	_SVSTDARR_STRINGS
59 #define _SVSTDARR_STRINGS
60 #include <svl/svstdarr.hxx>
61 #endif
62 #include <vcl/tabpage.hxx>
63 #include <vcl/tabctrl.hxx>
64 
65 //------------------------------------------------------------------------
66 
67 //========================================================================
68 enum eKindOfControl { KOC_UNDEFINED=0,KOC_LISTBOX=1, KOC_COMBOBOX=2,
69 						KOC_EDIT=3,KOC_USERDEFINED=5};
70 
71 class SvXPropertyCtrListener;
72 
73 class SvXPropertyControl : public Control
74 {
75 public:
76 										SvXPropertyControl( Window* pParent, WinBits nWinStyle = 0 );
77 										SvXPropertyControl( Window* pParent, const ResId& rResId );
78 
79 		virtual void					SetSvXPropertyCtrListener(SvXPropertyCtrListener*)=0;
80 
81 		virtual SvXPropertyCtrListener*	GetSvXPropertyCtrListener()=0;
82 		virtual void					SetProperty(const String &rString)=0;
83 		virtual String					GetProperty()const=0;
84 		virtual sal_Bool					HasList()=0;
85 		virtual void					ClearList()=0;
86 		virtual	void					InsertEntry( const String& rString,
87 												sal_uInt16 nPos = LISTBOX_APPEND )=0;
88 
89 		virtual void					SetCtrSize(const Size& rSize)=0;
90 		virtual void					SetLocked(sal_Bool bLocked=sal_True)=0;
91 
92 		virtual void					SetMyName(const String &rString)=0;
93 		virtual String					GetMyName()const=0;
94 
95 		virtual void					SetMyData(void*)=0;
96 		virtual void*					GetMyData()=0;
97 };
98 
99 class SvXPropertyCtrListener
100 {
101 
102 public:
103 		virtual void					Modified (SvXPropertyControl *pSvXPCtr)=0;
104 		virtual void					GetFocus (SvXPropertyControl *pSvXPCtr)=0;
105 		virtual void					LoseFocus(SvXPropertyControl *pSvXPCtr)=0;
106 		virtual void					KeyInput (SvXPropertyControl *pSvXPCtr ,const KeyCode&)=0;
107 };
108 
109 
110 class SvXPropertyEdit : public SvXPropertyControl
111 {
112 private:
113 
114 		String							aName;
115 		SvXPropertyCtrListener*			pListener;
116 		Edit							aEdit;
117 		void*							pData;
118 
119 		DECL_LINK(ModifiedHdl,Edit*);
120 		DECL_LINK(GetFocusHdl,Edit*);
121 		DECL_LINK(LoseFocusHdl,Edit*);
122 
123 public:
124 										SvXPropertyEdit( Window* pParent, WinBits nWinStyle = 0 );
125 										SvXPropertyEdit( Window* pParent, const ResId& rResId );
126 
127 		virtual void					SetSvXPropertyCtrListener(SvXPropertyCtrListener*);
128 
129 		virtual SvXPropertyCtrListener*	GetSvXPropertyCtrListener();
130 
131 		virtual void					SetProperty(const String &rString);
132 		virtual String					GetProperty()const;
133 
134 		virtual sal_Bool					HasList();
135 		virtual void					ClearList();
136 		virtual	void					InsertEntry( const String& rString,
137 												sal_uInt16 nPos = LISTBOX_APPEND );
138 
139 		virtual void					SetCtrSize(const Size& rSize);
140 		virtual void					SetLocked(sal_Bool bLocked=sal_True);
141 
142 		virtual void					SetMyName(const String &rString);
143 		virtual String					GetMyName()const;
144 
145 		virtual void					SetMyData(void*);
146 		virtual void*					GetMyData();
147 };
148 
149 
150 class SvXPropertyListBox : public SvXPropertyControl
151 {
152 private:
153 
154 		String							aName;
155 		SvXPropertyCtrListener*			pListener;
156 		ListBox							aListBox;
157 		void*							pData;
158 
159 		DECL_LINK(ModifiedHdl,ListBox*);
160 		DECL_LINK(GetFocusHdl,ListBox*);
161 		DECL_LINK(LoseFocusHdl,ListBox*);
162 
163 
164 public:
165 										SvXPropertyListBox( Window* pParent, WinBits nWinStyle = 0 );
166 										SvXPropertyListBox( Window* pParent, const ResId& rResId );
167 
168 		virtual void					SetSvXPropertyCtrListener(SvXPropertyCtrListener*);
169 
170 		virtual SvXPropertyCtrListener*	GetSvXPropertyCtrListener();
171 
172 		ListBox*						GetListBox();
173 
174 		virtual void					SetProperty(const String &rString);
175 		virtual String					GetProperty()const;
176 
177 		virtual sal_Bool					HasList();
178 		virtual void					ClearList();
179 		virtual	void					InsertEntry( const String& rString,
180 												sal_uInt16 nPos = LISTBOX_APPEND );
181 
182 		virtual void					SetCtrSize(const Size& rSize);
183 		virtual void					SetLocked(sal_Bool bLocked=sal_True);
184 
185 		virtual void					SetMyName(const String &rString);
186 		virtual String					GetMyName()const;
187 
188 		virtual void					SetMyData(void*);
189 		virtual void*					GetMyData();
190 };
191 
192 class SvXPropertyComboBox : public SvXPropertyControl
193 {
194 private:
195 
196 		String							aName;
197 		SvXPropertyCtrListener*			pListener;
198 		ComboBox						aComboBox;
199 		void*							pData;
200 
201 		DECL_LINK(ModifiedHdl,ComboBox*);
202 		DECL_LINK(GetFocusHdl,ComboBox*);
203 		DECL_LINK(LoseFocusHdl,ComboBox*);
204 
205 
206 public:
207 										SvXPropertyComboBox( Window* pParent, WinBits nWinStyle = 0 );
208 										SvXPropertyComboBox( Window* pParent, const ResId& rResId );
209 
210 		virtual void					SetSvXPropertyCtrListener(SvXPropertyCtrListener*);
211 
212 		virtual SvXPropertyCtrListener*	GetSvXPropertyCtrListener();
213 
214 		ComboBox*						GetComboBox();
215 
216 		virtual void					SetProperty(const String &rString);
217 		virtual String					GetProperty()const;
218 
219 		virtual sal_Bool					HasList();
220 		virtual void					ClearList();
221 		virtual	void					InsertEntry( const String& rString,
222 												sal_uInt16 nPos = LISTBOX_APPEND );
223 
224 		virtual void					SetCtrSize(const Size& rSize);
225 		virtual void					SetLocked(sal_Bool bLocked=sal_True);
226 
227 		virtual void					SetMyName(const String &rString);
228 		virtual String					GetMyName()const;
229 
230 		virtual void					SetMyData(void*);
231 		virtual void*					GetMyData();
232 };
233 
234 
235 
236 class SvPropertyLine : public Control
237 {
238 private:
239 			FixedText			aName;
240 			sal_uInt16				nNameWidth;
241 			sal_Bool				bNeedsRepaint;
242 			SvXPropertyControl*	pSvXPropertyControl;
243 
244 			PushButton			aXButton;
245 			sal_Bool				bIsLocked;
246 			sal_Bool				bHasXButton;
247 			sal_Bool				bIsHyperlink;
248 			eKindOfControl		eKindOfCtr;
249 
250 protected:
251 			virtual void		Resize();
252 
253 public:
254 			SvPropertyLine( Window* pParent,
255 							WinBits nWinStyle = 0 );
256 			SvPropertyLine( Window* pParent,
257 							const ResId& rResId );
258 
259 			sal_Bool				NeedsRepaint();
260 			void				SetNeedsRepaint(sal_Bool bFlag);
261 			void				SetSvXPropertyControl(SvXPropertyControl*);
262 			SvXPropertyControl*	GetSvXPropertyControl();
263 
264 			void				SetKindOfControl(eKindOfControl);
265 			eKindOfControl		GetKindOfControl();
266 
267 			void				SetName(const String& rString );
268 			String				GetName() const;
269 			void				SetNameWidth(sal_uInt16);
270 
271 			void				ShowXButton();
272 			void				HideXButton();
273 			sal_Bool				IsVisibleXButton();
274 			void				ShowAsHyperLink(sal_Bool nFlag=sal_True);
275 			sal_Bool				IsShownAsHyperlink();
276 
277 			void				Locked(sal_Bool nFlag=sal_True);
278 			sal_Bool				IsLineLocked();
279 
280 			void				SetClickHdl(const Link&);
281 
282 };
283 
284 
285 class SvPropertyData
286 {
287 public:
288 		eKindOfControl			eKind;
289 		String					aName;
290 		String					aValue;
291 		SvStrings				theValues; // ???
292 
293 		sal_Bool					bHasVisibleXButton;
294 		sal_Bool					bIsHyperLink;
295 		sal_Bool					bIsLocked;
296 		void*					pDataPtr;
297 		SvXPropertyControl*		pControl;
298 };
299 
300 class SvPropertyDataObjectControl
301 {
302 };
303 
304 class SvPropertyDataControl
305 {
306 public:
307 		virtual void					Modified(	const String& aName,
308 													const String& aVal,
309 													void* pData)=0;
310 
311 		virtual void					Clicked(	const String& aName,
312 													const String& aVal,
313 													void* pData)=0;
314 
315 		virtual void					Commit(		const String& aName,
316 													const String& aVal,
317 													void* pData)=0;
318 
319 		virtual void					Select(		const String& aName,
320 													void* pData)=0;
321 
322 		virtual void					LinkClicked(const String& aName,
323 													void* pData)=0;
324 };
325 
326 class SvXPropEvListener: public SvXPropertyCtrListener
327 {
328 		Link							aModifyLink;
329 		Link							aGetFocusLink;
330 		Link							aLoseFocusLink;
331 		Link							aKeyInputLink;
332 		String							aModifiedResult;
333 
334 		SvXPropertyControl *			pTheActiveControl;
335 		KeyCode							aKeyCode;
336 
337 public:
338 										SvXPropEvListener();
339         virtual                        ~SvXPropEvListener();
340 
341 		virtual void					Modified (SvXPropertyControl *pSvXPCtr);
342 		virtual void					GetFocus (SvXPropertyControl *pSvXPCtr);
343 		virtual void					LoseFocus(SvXPropertyControl *pSvXPCtr);
344 		virtual void					KeyInput(SvXPropertyControl *pSvXPCtr ,const KeyCode&);
345 
346 		SvXPropertyControl *				GetPropertyControl();
347 		KeyCode							GetKeyCode() const;
348 
SetModifyHdl(const Link & rLink)349 		void							SetModifyHdl( const Link& rLink ) { aModifyLink = rLink; }
GetModifyHdl() const350 		const Link&						GetModifyHdl() const { return aModifyLink; }
351 
SetGetFocusHdl(const Link & rLink)352 		void							SetGetFocusHdl( const Link& rLink ) { aGetFocusLink = rLink; }
GetGetFocusHdl() const353 		const Link&						GetGetFocusHdl() const { return aGetFocusLink; }
354 
SetLoseFocusHdl(const Link & rLink)355 		void							SetLoseFocusHdl( const Link& rLink ) { aLoseFocusLink = rLink; }
GetLoseFocusHdl() const356 		const Link&						GetLoseFocusHdl() const { return aLoseFocusLink; }
357 
SetKeyInputHdl(const Link & rLink)358 		void							SetKeyInputHdl( const Link& rLink ) { aKeyInputLink = rLink; }
GetKeyInputHdl() const359 		const Link&						GetKeyInputHdl() const { return aKeyInputLink; }
360 
361 
362 };
363 
364 typedef SvPropertyLine * SvPropertyLinePtr;
365 
366 SV_DECL_PTRARR(SvPropLineArray,SvPropertyLinePtr,1,1)
367 
368 class SvListBoxForProperties: public Control
369 {
370 private:
371 
372 			SvXPropEvListener		aListener;
373 			Window					aPlayGround;
374 			ScrollBar				aVScroll;
375 			SvPropLineArray			PLineArray;
376 			SvPropertyDataControl*	pPropDataControl;
377 			sal_uInt16					nRowHeight;
378 			sal_Bool					bUpdate;
379 			sal_uInt16					nTheNameSize;
380 			long					nYOffset;
381 
382 			DECL_LINK(   ScrollHdl,ScrollBar*);
383 			DECL_LINK(	 ClickHdl ,PushButton*);
384 
385 			DECL_LINK(   ModifyHdl,SvXPropEvListener*);
386 			DECL_LINK( GetFocusHdl,SvXPropEvListener*);
387 			DECL_LINK(LoseFocusHdl,SvXPropEvListener*);
388 			DECL_LINK( KeyInputHdl,SvXPropEvListener*);
389 
390 protected:
391 			void					UpdateAll();
392 			void					UpdatePosNSize();
393 			void					UpdatePlayGround();
394 			void					UpdateVScroll();
395 
396 			void					Resize();
397 
398 public:
399 									SvListBoxForProperties( Window* pParent, WinBits nWinStyle = 0 );
400 									SvListBoxForProperties( Window* pParent, const ResId& rResId );
401 
402 									~SvListBoxForProperties();
403 
404 			virtual sal_uInt16			CalcVisibleLines();
405 			virtual void			EnableUpdate();
406 			virtual void			DisableUpdate();
407 
408 			virtual void			SetController(SvPropertyDataControl *);
409 
410 			virtual void			Clear();
411 
412 			virtual sal_uInt16 			InsertEntry( const SvPropertyData&, sal_uInt16 nPos = LISTBOX_APPEND );
413 
414 			virtual void			ChangeEntry( const SvPropertyData&, sal_uInt16 nPos);
415 
416 			virtual sal_uInt16 			AppendEntry( const SvPropertyData&);
417 
418 			virtual void			SetPropertyValue( const String & rEntryName, const String & rValue );
419 
420 			virtual void			SetFirstVisibleEntry(sal_uInt16 nPos);
421 			virtual sal_uInt16			GetFirstVisibleEntry();
422 
423 			virtual void			SetSelectedEntry(sal_uInt16 nPos);
424 			virtual sal_uInt16			GetSelectedEntry();
425 };
426 
427 class SvTabPageForProperties: public TabPage
428 {
429 
430 private:
431 
432 			SvListBoxForProperties	aLbProp;
433 
434 protected:
435 
436 			virtual void			Resize();
437 
438 public:
439 			SvTabPageForProperties(Window* pParent,WinBits nWinStyle = 0 );
440 
441 			SvListBoxForProperties*   GetTheListBox();
442 };
443 
444 
445 class SvBasicPropertyDataControl: public SvPropertyDataControl
446 {
447 private:
448 
449 		sal_Bool							bCorrectness;
450 		String							aEntryName;
451 		String							aEntryProperty;
452 		String							aCorrectProperty;
453 		void*							pTheData;
454 		Link							aModifyLink;
455 		Link							aClickedLink;
456 		Link							aCommitLink;
457 		Link							aSelectLink;
458 
459 public:
460         virtual ~SvBasicPropertyDataControl();
461 
462 		virtual void					Modified(	const String& aName,
463 													const String& aVal,
464 													void* pData);		//User has modified Property
465 
466 		virtual void					Clicked(	const String& aName,
467 													const String& aVal,
468 													void* pData);		//Xtension-Button pressed
469 
470 		virtual void					Commit(		const String& aName,
471 													const String& aVal,
472 													void* pData);		//User accept changes
473 
474 		virtual void					Select(		const String& aName,
475 													void* pData);		//User select new Row
476 
477 		virtual void					LinkClicked(const String& aName,
478 													void* pData);
479 
480 		virtual void					SetIsCorrect(sal_Bool nFlag);
481 
482 		//virtual String					GetTheCorrectProperty()const;
483 		virtual void					SetTheCorrectProperty(const String& aName);
484 
485 		String							GetName() const; //Tell's the name of the Property
486 		String							GetProperty() const; //Tell's the content of the Property
487 		void*							GetData(); //Tell's the storage
488 
489 
SetModifyHdl(const Link & rLink)490 		void							SetModifyHdl( const Link& rLink ) { aModifyLink = rLink; }
GetModifyHdl() const491 		const Link&						GetModifyHdl() const { return aModifyLink; }
492 
SetClickedHdl(const Link & rLink)493 		void							SetClickedHdl( const Link& rLink ) { aClickedLink = rLink; }
GetClickedHdl() const494 		const Link&						GetClickedHdl() const { return aClickedLink; }
495 
SetCommitHdl(const Link & rLink)496 		void							SetCommitHdl( const Link& rLink ) { aCommitLink = rLink; }
GetCommitHdl() const497 		const Link&						GetCommitHdl() const { return aCommitLink; }
498 
SetSelectHdl(const Link & rLink)499 		void							SetSelectHdl( const Link& rLink ) { aSelectLink = rLink; }
GetSelectHdl() const500 		const Link&						GetSelectHdl() const { return aSelectLink; }
501 
502 };
503 
504 
505 class SvPropertyBox: public Control
506 {
507 private:
508 			SvPropertyDataControl*		pThePropDataCtr;
509 			TabControl					aTabControl;
510 
511 protected:
512 			virtual void				Resize();
513 
514 public:
515 										SvPropertyBox	( Window* pParent, WinBits nWinStyle = 0 );
516 										SvPropertyBox	( Window* pParent, const ResId& rResId );
517 
518 										~SvPropertyBox();
519 
520 			virtual sal_uInt16				CalcVisibleLines();
521 			virtual void				EnableUpdate();		// auch IDL?
522 			virtual void				DisableUpdate();	// auch IDL?
523 
524 			// AB: Hier beginnt das 'offizielle' Interface, das in IDL uebernommen werden soll
525 			virtual void				SetController(SvPropertyDataControl *);
526 
527 			virtual sal_uInt16 				AppendPage( const String & r );
528 			virtual void				SetPage( sal_uInt16 );
529 			virtual sal_uInt16 				GetCurPage();
530 			virtual void				ClearAll();
531 			virtual void				ClearTable();
532 
533 			virtual void				SetPropertyValue( const String & rEntryName, const String & rValue );
534 
535 			virtual sal_uInt16 				InsertEntry( const SvPropertyData&, sal_uInt16 nPos = LISTBOX_APPEND );
536 			virtual void				ChangeEntry( const SvPropertyData&, sal_uInt16 nPos);
537 			virtual sal_uInt16 				AppendEntry( const SvPropertyData&);
538 
539 			virtual void				SetFirstVisibleEntry(sal_uInt16 nPos);
540 			virtual sal_uInt16				GetFirstVisibleEntry();
541 
542 			virtual void				SetSelectedEntry(sal_uInt16 nPos);
543 			virtual sal_uInt16				GetSelectedEntry();
544 };
545 
546 
547 
548 /*
549 class ScPropertyDlg : public ModalDialog
550 {
551 private:
552 			SvBasicPropertyDataControl	aBaProDatCtr;
553 			OKButton					anOk;
554 			CancelButton				aCancel;
555 			sal_uInt16						nCount;
556 			sal_uInt16						nClickCount;
557 
558 			SvPropertyData				aProperty;
559 			SvPropertyBox				aPropListBox;
560 
561 			ListBox						aKindOfListBox;
562 			FixedText					aModAnswer;
563 			FixedText					aClickAnswer;
564 			FixedText					aCommitAnswer;
565 			FixedText					aSelectAnswer;
566 
567 			DECL_LINK( ModifiedHdl, ListBox*);
568 
569 			DECL_LINK( RowModifiedHdl, SvBasicPropertyDataControl*);
570 			DECL_LINK( ClickHdl		 , SvBasicPropertyDataControl*);
571 			DECL_LINK( SelectHdl	 , SvBasicPropertyDataControl*);
572 			DECL_LINK( CommitHdl	 , SvBasicPropertyDataControl*);
573 
574 public:
575 			ScPropertyDlg( Window*	pParent);
576 			~ScPropertyDlg();
577 };
578 */
579 #endif // SC_AUTOFMT_HXX
580 
581 
582