xref: /AOO41X/main/svtools/source/inc/property.hxx (revision 01aa44aa134af97080e2cf8e8bf3a0a4cd1cffe0)
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