]> git.saurik.com Git - wxWidgets.git/blame - utils/wxprop/src/propform.h
Added test for sprintf and vsnprintf to fix string.cpp for non-GNU systems.
[wxWidgets.git] / utils / wxprop / src / propform.h
CommitLineData
457814b5
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: propform.h
3// Purpose: Property form classes
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _PROPFORM_H_
13#define _PROPFORM_H_
14
15#ifdef __GNUG__
16#pragma interface "propform.h"
17#endif
18
19#include "prop.h"
20
21////
22//// Property form classes: for using an existing dialog or panel
23////
24
25#define wxID_PROP_REVERT 3100
26#define wxID_PROP_UPDATE 3101
27
28// Mediates between a physical panel and the property sheet
29class wxPropertyFormView: public wxPropertyView
30{
31 DECLARE_DYNAMIC_CLASS(wxPropertyFormView)
457814b5 32 public:
457814b5
JS
33 wxPropertyFormView(wxWindow *propPanel = NULL, long flags = 0);
34 ~wxPropertyFormView(void);
35
36 // Associates and shows the view
37 virtual void ShowView(wxPropertySheet *propertySheet, wxWindow *panel);
38
39 // Update this view of the viewed object, called e.g. by
40 // the object itself.
41 virtual bool OnUpdateView(void);
42
43 // Transfer values from property sheet to dialog
44 virtual bool TransferToDialog(void);
45
46 // Transfer values from dialog to property sheet
47 virtual bool TransferToPropertySheet(void);
48
49 // Check that all the values are valid
50 virtual bool Check(void);
51
52 // Give each property in the sheet a panel item, by matching
53 // the name of the property to the name of the panel item.
54 // The user doesn't always want to call this; sometimes, it
55 // will have been done explicitly (e.g., no matching names).
56 virtual bool AssociateNames(void);
57
58 void OnOk(wxCommandEvent& event);
59 void OnCancel(wxCommandEvent& event);
60 void OnHelp(wxCommandEvent& event);
61 void OnUpdate(wxCommandEvent& event);
62 void OnRevert(wxCommandEvent& event);
63
64 virtual bool OnClose(void);
65 virtual void OnDoubleClick(wxControl *item);
66
67 // TODO: does OnCommand still get called...???
68 virtual void OnCommand(wxWindow& win, wxCommandEvent& event);
69
fd71308f
JS
70 inline virtual void AssociatePanel(wxWindow *win) { m_propertyWindow = win; }
71 inline virtual wxWindow *GetPanel(void) const { return m_propertyWindow; }
72
73 inline virtual void SetManagedWindow(wxWindow *win) { m_managedWindow = win; }
74 inline virtual wxWindow *GetManagedWindow(void) const { return m_managedWindow; }
75
76 inline virtual wxButton *GetWindowCloseButton() const { return m_windowCloseButton; }
77 inline virtual wxButton *GetWindowCancelButton() const { return m_windowCancelButton; }
78 inline virtual wxButton *GetHelpButton() const { return m_windowHelpButton; }
79
80public:
81 static bool sm_dialogCancelled;
457814b5 82
fd71308f
JS
83 protected:
84 bool m_detailedEditing; // E.g. using listbox for choices
457814b5 85
fd71308f
JS
86 wxWindow* m_propertyWindow; // Panel that the controls will appear on
87 wxWindow* m_managedWindow; // Frame or dialog
88
89 wxButton* m_windowCloseButton; // Or OK
90 wxButton* m_windowCancelButton;
91 wxButton* m_windowHelpButton;
457814b5
JS
92
93DECLARE_EVENT_TABLE()
94
95};
96
97/*
98 * The type of validator used for forms (wxForm style but using an existing panel
99 * or dialog box).
100 * Classes derived from this know how to map from whatever widget they
101 * find themselves paired with, to the wxProperty and vice versa.
102 * Should the widget pointer be stored with the validator, or
103 * the wxProperty? If with the property, we don't have to supply
104 * a validator for every property. Otherwise, there ALWAYS needs
105 * to be a validator. On the other hand, not storing a wxWindow pointer
106 * in the wxProperty is more elegant. Perhaps.
107 * I think on balance, should put wxWindow pointer into wxProperty.
108 * After all, wxProperty will often be used to represent the data
109 * assocated with a window. It's that kinda thing.
110 */
111
112class wxPropertyFormValidator: public wxPropertyValidator
113{
114 DECLARE_DYNAMIC_CLASS(wxPropertyFormValidator)
115 protected:
116 public:
117 wxPropertyFormValidator(long flags = 0): wxPropertyValidator(flags) { }
118 ~wxPropertyFormValidator(void) {}
119
120 // Called to check value is OK (e.g. when OK is pressed)
121 // Return FALSE if value didn't check out; signal to restore old value.
8656024d
RR
122 virtual bool OnCheckValue( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
123 wxWindow *WXUNUSED(parentWindow) ) { return TRUE; }
457814b5
JS
124
125 // Does the transferance from the property editing area to the property itself.
126 // Called by the view, e.g. when closing the window.
127 virtual bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow) = 0;
128
129 // Called by the view to transfer the property to the window.
130 virtual bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow) = 0;
131
8656024d
RR
132 virtual void OnDoubleClick( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
133 wxWindow *WXUNUSED(parentWindow) ) { }
134 virtual void OnSetFocus( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
135 wxWindow *WXUNUSED(parentWindow) ) { }
136 virtual void OnKillFocus( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
137 wxWindow *WXUNUSED(parentWindow) ) { }
138 virtual void OnCommand( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
139 wxWindow *WXUNUSED(parentWindow), wxCommandEvent& WXUNUSED(event) ) {}
457814b5
JS
140};
141
142/*
143 * Some default validators
144 */
145
146class wxRealFormValidator: public wxPropertyFormValidator
147{
148 DECLARE_DYNAMIC_CLASS(wxRealFormValidator)
457814b5
JS
149 public:
150 // 0.0, 0.0 means no range
151 wxRealFormValidator(float min = 0.0, float max = 0.0, long flags = 0):wxPropertyFormValidator(flags)
152 {
fd71308f 153 m_realMin = min; m_realMax = max;
457814b5
JS
154 }
155 ~wxRealFormValidator(void) {}
156
157 bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
158 bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
159 // Called by the view to transfer the property to the window.
160 bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
fd71308f
JS
161
162 protected:
163 float m_realMin;
164 float m_realMax;
457814b5
JS
165};
166
167class wxIntegerFormValidator: public wxPropertyFormValidator
168{
169 DECLARE_DYNAMIC_CLASS(wxIntegerFormValidator)
457814b5
JS
170 public:
171 // 0, 0 means no range
172 wxIntegerFormValidator(long min = 0, long max = 0, long flags = 0):wxPropertyFormValidator(flags)
173 {
fd71308f 174 m_integerMin = min; m_integerMax = max;
457814b5
JS
175 }
176 ~wxIntegerFormValidator(void) {}
177
178 bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
179 bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
180 bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
fd71308f
JS
181
182 protected:
183 long m_integerMin;
184 long m_integerMax;
457814b5
JS
185};
186
187class wxBoolFormValidator: public wxPropertyFormValidator
188{
189 DECLARE_DYNAMIC_CLASS(wxBoolFormValidator)
190 protected:
191 public:
192 wxBoolFormValidator(long flags = 0):wxPropertyFormValidator(flags)
193 {
194 }
195 ~wxBoolFormValidator(void) {}
196
197 bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
198 bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
199 bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
200};
201
202class wxStringFormValidator: public wxPropertyFormValidator
203{
204 DECLARE_DYNAMIC_CLASS(wxStringFormValidator)
457814b5
JS
205 public:
206 wxStringFormValidator(wxStringList *list = NULL, long flags = 0);
207
208 ~wxStringFormValidator(void)
209 {
fd71308f
JS
210 if (m_strings)
211 delete m_strings;
457814b5
JS
212 }
213
214 bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
215 bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
216 bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
fd71308f
JS
217
218 protected:
219 wxStringList* m_strings;
457814b5
JS
220};
221
222/*
223 * A default dialog box class to use.
224 */
225
226class wxPropertyFormDialog: public wxDialog
227{
228 DECLARE_CLASS(wxPropertyFormDialog)
457814b5
JS
229 public:
230 wxPropertyFormDialog(wxPropertyFormView *v, wxWindow *parent, const wxString& title,
231 const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
232 long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = "dialogBox");
233 bool OnClose(void);
234 void OnDefaultAction(wxControl *item);
235 void OnCommand(wxWindow& win, wxCommandEvent& event);
236
237 // Extend event processing to search the view's event table
238 virtual bool ProcessEvent(wxEvent& event);
fd71308f
JS
239
240 private:
241 wxPropertyFormView* m_view;
457814b5
JS
242};
243
244/*
245 * A default panel class to use.
246 */
247
248class wxPropertyFormPanel: public wxPanel
249{
250 DECLARE_CLASS(wxPropertyFormPanel)
457814b5
JS
251 public:
252 wxPropertyFormPanel(wxPropertyFormView *v, wxWindow *parent, const wxPoint& pos = wxDefaultPosition,
253 const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = "panel"):
254 wxPanel(parent, -1, pos, size, style, name)
255 {
fd71308f 256 m_view = v;
457814b5
JS
257 }
258 void OnDefaultAction(wxControl *item);
259 void OnCommand(wxWindow& win, wxCommandEvent& event);
260
261 // Extend event processing to search the view's event table
262 virtual bool ProcessEvent(wxEvent& event);
fd71308f
JS
263
264 private:
265 wxPropertyFormView* m_view;
457814b5
JS
266};
267
268/*
269 * A default frame class to use.
270 */
271
272class wxPropertyFormFrame: public wxFrame
273{
274 DECLARE_CLASS(wxPropertyFormFrame)
457814b5
JS
275 public:
276 wxPropertyFormFrame(wxPropertyFormView *v, wxFrame *parent, const wxString& title,
277 const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
278 long style = wxDEFAULT_FRAME, const wxString& name = "frame"):
279 wxFrame(parent, -1, title, pos, size, style, name)
280 {
fd71308f
JS
281 m_view = v;
282 m_propertyPanel = NULL;
457814b5
JS
283 }
284 bool OnClose(void);
285
286 // Must call this to create panel and associate view
287 virtual bool Initialize(void);
288 virtual wxPanel *OnCreatePanel(wxFrame *parent, wxPropertyFormView *v);
fd71308f
JS
289 inline virtual wxPanel *GetPropertyPanel(void) const { return m_propertyPanel; }
290
291 private:
292 wxPropertyFormView* m_view;
293 wxPanel* m_propertyPanel;
457814b5
JS
294};
295
296#endif
297