]> git.saurik.com Git - wxWidgets.git/blame - utils/dialoged/src/reseditr.h
fixed compiler warning
[wxWidgets.git] / utils / dialoged / src / reseditr.h
CommitLineData
457814b5
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: reseditr.h
3// Purpose: Resource editor class
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 _RESEDITR_H_
13#define _RESEDITR_H_
14
15#define wxDIALOG_EDITOR_VERSION 1.6
16
17#ifdef __GNUG__
18#pragma interface "reseditr.h"
19#endif
20
21#include "wx/wx.h"
22#include "wx/string.h"
23#include "wx/layout.h"
24#include "wx/resource.h"
ae8351fc
JS
25#include "wx/toolbar.h"
26#include "wx/imaglist.h"
457814b5
JS
27
28#include "proplist.h"
03f68f12 29#include "symbtabl.h"
457814b5 30
457814b5 31#define RESED_DELETE 1
457814b5
JS
32#define RESED_RECREATE 3
33#define RESED_CLEAR 4
34#define RESED_NEW_DIALOG 5
35#define RESED_NEW_PANEL 6
ae8351fc 36#define RESED_TEST 10
457814b5
JS
37
38#define RESED_CONTENTS 20
39
ae8351fc
JS
40#define IDC_TREECTRL 100
41#define IDC_LISTCTRL 101
42
43// For control list ('palette')
44#define RESED_POINTER 0
45#define RESED_BUTTON 1
46#define RESED_BMPBUTTON 2
47#define RESED_STATICTEXT 3
48#define RESED_STATICBMP 4
49#define RESED_STATICBOX 5
50#define RESED_TEXTCTRL_SINGLE 6
51#define RESED_TEXTCTRL_MULTIPLE 7
52#define RESED_LISTBOX 8
53#define RESED_CHOICE 9
54#define RESED_COMBOBOX 10
55#define RESED_CHECKBOX 11
56#define RESED_SLIDER 12
57#define RESED_GAUGE 13
58#define RESED_RADIOBOX 14
59#define RESED_RADIOBUTTON 15
60#define RESED_SCROLLBAR 16
61#define RESED_TREECTRL 17
62#define RESED_LISTCTRL 18
63#define RESED_SPINBUTTON 19
64
457814b5
JS
65/*
66 * Controls loading, saving, user interface of resource editor(s).
67 */
68
69class wxResourceEditorFrame;
457814b5
JS
70class EditorToolBar;
71class wxWindowPropertyInfo;
ae8351fc
JS
72class wxResourceEditorProjectTree;
73class wxResourceEditorControlList;
457814b5 74
2049ba38 75#ifdef __WXMSW__
457814b5
JS
76#define wxHelpController wxWinHelpController
77#else
78#define wxHelpController wxXLPHelpController;
79#endif
80
81class wxHelpController;
82
83/*
84 * The resourceTable contains a list of wxItemResources (which each may
85 * have further children, defining e.g. a dialog box with controls).
86 *
87 * We need to associate actual windows with each wxItemResource,
88 * instead of the current 'one current window' scheme.
89 *
90 * - We create a new dialog, create a wxItemResource,
91 * associate the dialog with wxItemResource via a hash table.
92 * Must be a hash table in case dialog is deleted without
93 * telling the resource manager.
94 * - When we save the resource after editing/closing the dialog,
95 * we check the wxItemResource/wxDialog and children for
96 * consistency (throw away items no longer in the wxDialog,
97 * create any new wxItemResources).
98 * - We save the wxItemResources via the wxPropertyInfo classes,
99 * so devolve the code to the appropriate class.
100 * This involves creating a new temporary wxPropertyInfo for
101 * the purpose.
102 *
103 * We currently assume we only create one instance of a window for
104 * each wxItemResource. We will need to relax this when we're editing
105 * in situ.
106 *
107 *
108 */
109
110class wxResourceTableWithSaving: public wxResourceTable
111{
112 public:
ae8351fc 113 wxResourceTableWithSaving():wxResourceTable()
457814b5
JS
114 {
115 }
116 virtual bool Save(const wxString& filename);
117 virtual bool SaveResource(ostream& stream, wxItemResource *item);
118
119 void GenerateWindowStyleString(long windowStyle, char *buf);
120 void GeneratePanelStyleString(long windowStyle, char *buf);
121 void GenerateDialogStyleString(long windowStyle, char *buf);
122
123 void GenerateRadioBoxStyleString(long windowStyle, char *buf);
124 void GenerateMessageStyleString(long windowStyle, char *buf);
125 void GenerateTextStyleString(long windowStyle, char *buf);
126 void GenerateButtonStyleString(long windowStyle, char *buf);
127 void GenerateCheckBoxStyleString(long windowStyle, char *buf);
03f68f12 128 void GenerateRadioButtonStyleString(long windowStyle, char *buf);
457814b5
JS
129 void GenerateListBoxStyleString(long windowStyle, char *buf);
130 void GenerateSliderStyleString(long windowStyle, char *buf);
131 void GenerateGroupBoxStyleString(long windowStyle, char *buf);
132 void GenerateGaugeStyleString(long windowStyle, char *buf);
133 void GenerateChoiceStyleString(long windowStyle, char *buf);
134 void GenerateScrollBarStyleString(long windowStyle, char *buf);
135 void GenerateItemStyleString(long windowStyle, char *buf);
136
137 bool GenerateStyle(char *buf, long windowStyle, long flag, char *strStyle);
138
139 void OutputFont(ostream& stream, wxFont *font);
140 wxControl *CreateItem(wxPanel *panel, wxItemResource *childResource);
141};
142
ae8351fc
JS
143class wxResourceEditorScrolledWindow;
144
457814b5
JS
145class wxResourceManager: public wxObject
146{
ae8351fc 147 friend class wxResourceEditorFrame;
457814b5 148
ae8351fc
JS
149public:
150 wxResourceManager();
151 ~wxResourceManager();
457814b5 152
ae8351fc 153// Operations
457814b5 154
ae8351fc
JS
155 // Initializes the resource manager
156 bool Initialize();
457814b5 157
ae8351fc
JS
158 // Load/save window size etc.
159 bool LoadOptions();
160 bool SaveOptions();
457814b5
JS
161
162 // Show or hide the resource editor frame, which displays a list
163 // of resources with ability to edit them.
164 virtual bool ShowResourceEditor(bool show, wxWindow *parent = NULL, const char *title = "wxWindows Dialog Editor");
165
ae8351fc
JS
166 virtual bool Save();
167 virtual bool SaveAs();
457814b5
JS
168 virtual bool Save(const wxString& filename);
169 virtual bool Load(const wxString& filename);
170 virtual bool Clear(bool deleteWindows = TRUE, bool force = TRUE);
171 virtual void SetFrameTitle(const wxString& filename);
ae8351fc 172 virtual void ClearCurrentDialog();
457814b5 173 virtual bool New(bool loadFromFile = TRUE, const wxString& filename = "");
ae8351fc 174 virtual bool SaveIfModified();
457814b5 175 virtual void AlignItems(int flag);
ae8351fc 176 virtual void CopySize();
457814b5 177 virtual void ToBackOrFront(bool toBack);
ae8351fc 178 virtual wxWindow *FindParentOfSelection();
457814b5
JS
179
180 virtual wxFrame *OnCreateEditorFrame(const char *title);
181 virtual wxMenuBar *OnCreateEditorMenuBar(wxFrame *parent);
ae8351fc 182 virtual wxResourceEditorScrolledWindow *OnCreateEditorPanel(wxFrame *parent);
457814b5 183 virtual wxToolBarBase *OnCreateToolBar(wxFrame *parent);
457814b5 184
ae8351fc
JS
185 // Create a window information object for the give window
186 wxWindowPropertyInfo* CreatePropertyInfoForWindow(wxWindow *win);
187 // Edit the given window
188 void EditWindow(wxWindow *win);
189
190 virtual void UpdateResourceList();
191 virtual void AddItemsRecursively(long parent, wxItemResource *resource);
192 virtual bool EditSelectedResource();
457814b5 193 virtual bool Edit(wxItemResource *res);
ae8351fc 194 virtual bool CreateNewPanel();
457814b5 195 virtual bool CreatePanelItem(wxItemResource *panelResource, wxPanel *panel, char *itemType, int x = 10, int y = 10, bool isBitmap = FALSE);
ae8351fc 196 virtual bool DeleteSelection();
03f68f12 197 virtual bool TestCurrentDialog(wxWindow* parent);
ae8351fc
JS
198
199 // Saves the window info into the resource, and deletes the
200 // handler. Doesn't actually disassociate the window from
201 // the resources. Replaces OnClose.
202 virtual bool SaveInfoAndDeleteHandler(wxWindow* win);
457814b5 203
ae8351fc
JS
204 // Destroys the window. If this is the 'current' panel, NULLs the
205 // variable.
206 virtual bool DeleteWindow(wxWindow* win);
457814b5 207 virtual bool DeleteResource(wxItemResource *res);
ae8351fc 208 virtual bool DeleteResource(wxWindow *win);
457814b5
JS
209
210 // Add bitmap resource if there isn't already one with this filename.
211 virtual char *AddBitmapResource(char *filename);
212
213 // Delete the bitmap resource if it isn't being used by another resource.
214 virtual void PossiblyDeleteBitmapResource(char *resourceName);
215
216 // Helper function for above
217 virtual bool IsBitmapResourceUsed(char *resourceName);
218
219 wxItemResource *FindBitmapResourceByFilename(char *filename);
220
221 char *FindBitmapFilenameForResource(wxItemResource *resource);
222
223 // Deletes 'win' and creates a new window from the resource that
224 // was associated with it. E.g. if you can't change properties on the
225 // fly, you'll need to delete the window and create it again.
226 virtual wxWindow *RecreateWindowFromResource(wxWindow *win, wxWindowPropertyInfo *info = NULL);
227
ae8351fc 228 virtual bool RecreateSelection();
457814b5
JS
229
230 // Need to search through resource table removing this from
231 // any resource which has this as a parent.
232 virtual bool RemoveResourceFromParent(wxItemResource *res);
233
234 virtual bool EditDialog(wxDialog *dialog, wxWindow *parent);
235
457814b5
JS
236 void AddSelection(wxWindow *win);
237 void RemoveSelection(wxWindow *win);
238
457814b5
JS
239 virtual void MakeUniqueName(char *prefix, char *buf);
240
241 // (Dis)associate resource<->physical window
ae8351fc 242 // Doesn't delete any windows.
457814b5 243 virtual void AssociateResource(wxItemResource *resource, wxWindow *win);
ae8351fc
JS
244 virtual bool DisassociateResource(wxItemResource *resource);
245 virtual bool DisassociateResource(wxWindow *win);
246 virtual bool DisassociateWindows();
457814b5
JS
247 virtual wxItemResource *FindResourceForWindow(wxWindow *win);
248 virtual wxWindow *FindWindowForResource(wxItemResource *resource);
249
ae8351fc 250 virtual bool InstantiateAllResourcesFromWindows();
457814b5
JS
251 virtual bool InstantiateResourceFromWindow(wxItemResource *resource, wxWindow *window, bool recurse = FALSE);
252
ae8351fc
JS
253// Accessors
254 inline void SetEditorFrame(wxFrame *fr) { m_editorFrame = fr; }
255 inline void SetEditorToolBar(EditorToolBar *tb) { m_editorToolBar = tb; }
ae8351fc
JS
256 inline wxFrame *GetEditorFrame() const { return m_editorFrame; }
257 inline wxResourceEditorProjectTree *GetEditorResourceTree() const { return m_editorResourceTree; }
258 inline wxResourceEditorControlList *GetEditorControlList() const { return m_editorControlList; }
ae8351fc
JS
259 inline wxList& GetSelections() { return m_selections; }
260 inline wxMenu *GetPopupMenu() const { return m_popupMenu; }
261 inline wxHelpController *GetHelpController() const { return m_helpController; }
457814b5 262
ae8351fc
JS
263 inline void Modify(bool mod = TRUE) { m_modified = mod; }
264 inline bool Modified() const { return m_modified; }
457814b5 265
ae8351fc
JS
266 inline wxResourceTable& GetResourceTable() { return m_resourceTable; }
267 inline wxHashTable& GetResourceAssociations() { return m_resourceAssociations; }
268
03f68f12 269 inline wxString GetCurrentFilename() const { return m_currentFilename; }
ae8351fc
JS
270 static wxResourceManager* GetCurrentResourceManager() { return sm_currentResourceManager; }
271
03f68f12
JS
272 inline void SetSymbolFilename(const wxString& s) { m_symbolFilename = s; }
273 inline wxString GetSymbolFilename() const { return m_symbolFilename; }
274
ae8351fc
JS
275 inline wxRect& GetPropertyWindowSize() { return m_propertyWindowSize; }
276 inline wxRect& GetResourceEditorWindowSize() { return m_resourceEditorWindowSize; }
457814b5 277
ae8351fc
JS
278// Member variables
279 protected:
280 wxHelpController* m_helpController;
281 wxResourceTableWithSaving m_resourceTable;
282 wxFrame* m_editorFrame;
283 wxResourceEditorScrolledWindow* m_editorPanel;
284 wxMenu* m_popupMenu;
285 wxResourceEditorProjectTree* m_editorResourceTree;
286 wxResourceEditorControlList* m_editorControlList;
ae8351fc
JS
287 EditorToolBar* m_editorToolBar;
288 int m_nameCounter;
289 bool m_modified;
290 wxHashTable m_resourceAssociations;
291 wxList m_selections;
292 wxString m_currentFilename;
293 wxBitmap* m_bitmapImage; // Default for static bitmaps/buttons
294
295 wxImageList m_imageList;
296 long m_rootDialogItem; // Root of dialog hierarchy in tree (unused)
297
298 // Options to be saved/restored
299 wxString m_optionsResourceFilename; // e.g. dialoged.ini, .dialogrc
300 wxRect m_propertyWindowSize;
301 wxRect m_resourceEditorWindowSize;
302 static wxResourceManager* sm_currentResourceManager;
03f68f12
JS
303
304 // Symbol table with identifiers for controls
305 wxResourceSymbolTable m_symbolTable;
306 // Filename for include file, e.g. resource.h
307 wxString m_symbolFilename;
457814b5
JS
308};
309
ae8351fc 310
457814b5
JS
311class wxResourceEditorFrame: public wxFrame
312{
313 public:
ae8351fc
JS
314 DECLARE_CLASS(wxResourceEditorFrame)
315
457814b5 316 wxResourceManager *manager;
ae8351fc
JS
317 wxResourceEditorFrame(wxResourceManager *resMan, wxFrame *parent, const wxString& title,
318 const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(600, 400),
319 long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame");
320 ~wxResourceEditorFrame();
321
322 bool OnClose();
323
324 void OnNew(wxCommandEvent& event);
325 void OnOpen(wxCommandEvent& event);
326 void OnNewDialog(wxCommandEvent& event);
327 void OnClear(wxCommandEvent& event);
328 void OnSave(wxCommandEvent& event);
329 void OnSaveAs(wxCommandEvent& event);
330 void OnExit(wxCommandEvent& event);
331 void OnAbout(wxCommandEvent& event);
332 void OnContents(wxCommandEvent& event);
333 void OnDeleteSelection(wxCommandEvent& event);
334 void OnRecreateSelection(wxCommandEvent& event);
335 void OnTest(wxCommandEvent& event);
336
337 DECLARE_EVENT_TABLE()
457814b5
JS
338};
339
ae8351fc 340class wxResourceEditorScrolledWindow: public wxScrolledWindow
457814b5
JS
341{
342 public:
ae8351fc
JS
343 wxResourceEditorScrolledWindow(wxWindow *parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
344 long style = 0);
345 ~wxResourceEditorScrolledWindow();
346
347 void OnScroll(wxScrollEvent& event);
348 void OnPaint(wxPaintEvent& event);
349
350 void DrawTitle(wxDC& dc);
351
352// Accessors
353 inline int GetMarginX() { return m_marginX; }
354 inline int GetMarginY() { return m_marginY; }
457814b5 355
457814b5 356 public:
ae8351fc
JS
357 wxWindow* m_childWindow;
358 private:
359 int m_marginX, m_marginY;
457814b5 360
ae8351fc
JS
361 DECLARE_EVENT_TABLE()
362};
457814b5
JS
363
364#define OBJECT_MENU_EDIT 1
365#define OBJECT_MENU_DELETE 2
366
367/*
368 * Main toolbar
369 *
370 */
371
ae8351fc 372class EditorToolBar: public wxToolBar
457814b5 373{
ae8351fc
JS
374public:
375 EditorToolBar(wxFrame *frame, const wxPoint& pos = wxPoint(0, 0), const wxSize& size = wxSize(0, 0),
457814b5
JS
376 long style = 0, int direction = wxVERTICAL, int RowsOrColumns = 2);
377 bool OnLeftClick(int toolIndex, bool toggled);
378 void OnMouseEnter(int toolIndex);
379 void OnPaint(wxPaintEvent& event);
380
381DECLARE_EVENT_TABLE()
382};
383
384// Toolbar ids
ae8351fc
JS
385#define TOOLBAR_LOAD_FILE 1
386#define TOOLBAR_SAVE_FILE 2
387#define TOOLBAR_NEW 3
388#define TOOLBAR_TREE 5
389#define TOOLBAR_HELP 6
457814b5
JS
390
391// Formatting tools
ae8351fc
JS
392#define TOOLBAR_FORMAT_HORIZ 10
393#define TOOLBAR_FORMAT_HORIZ_LEFT_ALIGN 11
457814b5 394#define TOOLBAR_FORMAT_HORIZ_RIGHT_ALIGN 12
ae8351fc
JS
395#define TOOLBAR_FORMAT_VERT 13
396#define TOOLBAR_FORMAT_VERT_TOP_ALIGN 14
397#define TOOLBAR_FORMAT_VERT_BOT_ALIGN 15
457814b5 398
ae8351fc
JS
399#define TOOLBAR_TO_FRONT 16
400#define TOOLBAR_TO_BACK 17
401#define TOOLBAR_COPY_SIZE 18
457814b5
JS
402
403#endif
404