X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/457814b5aa2ee5c83abc65a6aee2a3ebcb1af34f..f3033278722328d37b98406b45060a2a3b8b1877:/utils/dialoged/src/reseditr.h?ds=sidebyside diff --git a/utils/dialoged/src/reseditr.h b/utils/dialoged/src/reseditr.h index ef629f21b3..5a87b10d06 100644 --- a/utils/dialoged/src/reseditr.h +++ b/utils/dialoged/src/reseditr.h @@ -22,38 +22,61 @@ #include "wx/string.h" #include "wx/layout.h" #include "wx/resource.h" -#include "wx/tbarsmpl.h" - -#include "proplist.h" - -#if defined(__WINDOWS__) && defined(__WIN95__) -#include "wx/tbar95.h" -#elif defined(__WINDOWS__) -#include "wx/tbarmsw.h" -#endif +#include "wx/toolbar.h" +#include "wx/imaglist.h" +#include "wx/treectrl.h" +#include "wx/proplist.h" +#include "symbtabl.h" +#include "winstyle.h" #define RESED_DELETE 1 -#define RESED_TOGGLE_TEST_MODE 2 #define RESED_RECREATE 3 #define RESED_CLEAR 4 #define RESED_NEW_DIALOG 5 #define RESED_NEW_PANEL 6 +#define RESED_TEST 10 #define RESED_CONTENTS 20 +#define IDC_TREECTRL 100 +#define IDC_LISTCTRL 101 + +// For control list ('palette') +#define RESED_POINTER 0 +#define RESED_BUTTON 1 +#define RESED_BMPBUTTON 2 +#define RESED_STATICTEXT 3 +#define RESED_STATICBMP 4 +#define RESED_STATICBOX 5 +#define RESED_TEXTCTRL_SINGLE 6 +#define RESED_TEXTCTRL_MULTIPLE 7 +#define RESED_LISTBOX 8 +#define RESED_CHOICE 9 +#define RESED_COMBOBOX 10 +#define RESED_CHECKBOX 11 +#define RESED_SLIDER 12 +#define RESED_GAUGE 13 +#define RESED_RADIOBOX 14 +#define RESED_RADIOBUTTON 15 +#define RESED_SCROLLBAR 16 +#define RESED_TREECTRL 17 +#define RESED_LISTCTRL 18 +#define RESED_SPINBUTTON 19 + /* * Controls loading, saving, user interface of resource editor(s). */ class wxResourceEditorFrame; -class EditorToolPalette; class EditorToolBar; class wxWindowPropertyInfo; +class wxResourceEditorProjectTree; +class wxResourceEditorControlList; -#ifdef __WINDOWS__ +#ifdef __WXMSW__ #define wxHelpController wxWinHelpController #else -#define wxHelpController wxXLPHelpController; +#define wxHelpController wxHTMLHelpController; #endif class wxHelpController; @@ -88,129 +111,149 @@ class wxHelpController; class wxResourceTableWithSaving: public wxResourceTable { public: - wxResourceTableWithSaving(void):wxResourceTable() + wxResourceTableWithSaving():wxResourceTable() { + // Add all known window styles + m_styleTable.Init(); } virtual bool Save(const wxString& filename); - virtual bool SaveResource(ostream& stream, wxItemResource *item); + virtual bool SaveResource(ostream& stream, wxItemResource* item, wxItemResource* parentItem); - void GenerateWindowStyleString(long windowStyle, char *buf); void GeneratePanelStyleString(long windowStyle, char *buf); void GenerateDialogStyleString(long windowStyle, char *buf); +/* void GenerateRadioBoxStyleString(long windowStyle, char *buf); void GenerateMessageStyleString(long windowStyle, char *buf); void GenerateTextStyleString(long windowStyle, char *buf); void GenerateButtonStyleString(long windowStyle, char *buf); void GenerateCheckBoxStyleString(long windowStyle, char *buf); + void GenerateRadioButtonStyleString(long windowStyle, char *buf); void GenerateListBoxStyleString(long windowStyle, char *buf); void GenerateSliderStyleString(long windowStyle, char *buf); void GenerateGroupBoxStyleString(long windowStyle, char *buf); void GenerateGaugeStyleString(long windowStyle, char *buf); void GenerateChoiceStyleString(long windowStyle, char *buf); + void GenerateComboBoxStyleString(long windowStyle, char *buf); void GenerateScrollBarStyleString(long windowStyle, char *buf); - void GenerateItemStyleString(long windowStyle, char *buf); - +*/ + + void GenerateControlStyleString(const wxString& windowClass, long windowStyle, char *buf); + +/* bool GenerateStyle(char *buf, long windowStyle, long flag, char *strStyle); +*/ - void OutputFont(ostream& stream, wxFont *font); - wxControl *CreateItem(wxPanel *panel, wxItemResource *childResource); + void OutputFont(ostream& stream, const wxFont& font); + wxControl *CreateItem(wxPanel *panel, const wxItemResource *childResource, const wxItemResource* parentResource); + +protected: + wxWindowStyleTable m_styleTable; }; +class wxResourceEditorScrolledWindow; + class wxResourceManager: public wxObject { - protected: - wxHelpController *helpInstance; - wxResourceTableWithSaving resourceTable; - wxFrame *editorFrame; - wxPanel *editorPanel; - wxMenu *popupMenu; - wxListBox *editorResourceList; - EditorToolPalette *editorPalette; - EditorToolBar *editorToolBar; - int nameCounter; - bool modified; - bool editMode; - wxHashTable resourceAssociations; - wxList selections; - wxString currentFilename; - - public: - - // Options to be saved/restored - wxString optionsResourceFilename; // e.g. dialoged.ini, .dialogrc - wxRectangle propertyWindowSize; - wxRectangle resourceEditorWindowSize; + friend class wxResourceEditorFrame; - public: - static wxResourceManager *currentResourceManager; +public: + wxResourceManager(); + ~wxResourceManager(); - wxResourceManager(void); - ~wxResourceManager(void); +// Operations - bool Initialize(void); + // Initializes the resource manager + bool Initialize(); - bool LoadOptions(void); - bool SaveOptions(void); + // Load/save window size etc. + bool LoadOptions(); + bool SaveOptions(); // Show or hide the resource editor frame, which displays a list // of resources with ability to edit them. virtual bool ShowResourceEditor(bool show, wxWindow *parent = NULL, const char *title = "wxWindows Dialog Editor"); - virtual bool Save(void); - virtual bool SaveAs(void); + virtual bool Save(); + virtual bool SaveAs(); virtual bool Save(const wxString& filename); virtual bool Load(const wxString& filename); virtual bool Clear(bool deleteWindows = TRUE, bool force = TRUE); virtual void SetFrameTitle(const wxString& filename); - virtual bool DisassociateWindows(bool deleteWindows = TRUE); + virtual void ClearCurrentDialog(); virtual bool New(bool loadFromFile = TRUE, const wxString& filename = ""); - virtual bool SaveIfModified(void); + virtual bool SaveIfModified(); virtual void AlignItems(int flag); - virtual void CopySize(void); + virtual void CopySize(); virtual void ToBackOrFront(bool toBack); - virtual wxWindow *FindParentOfSelection(void); + virtual wxWindow *FindParentOfSelection(); virtual wxFrame *OnCreateEditorFrame(const char *title); virtual wxMenuBar *OnCreateEditorMenuBar(wxFrame *parent); - virtual wxPanel *OnCreateEditorPanel(wxFrame *parent); - virtual wxToolBarBase *OnCreateToolBar(wxFrame *parent); - virtual EditorToolPalette *OnCreatePalette(wxFrame *parent); -// virtual bool DeletePalette(void); - virtual bool InitializeTools(void); - - virtual void UpdateResourceList(void); - virtual void AddItemsRecursively(int level, wxItemResource *resource); - virtual bool EditSelectedResource(void); + virtual wxResourceEditorScrolledWindow *OnCreateEditorPanel(wxFrame *parent); + virtual wxToolBar *OnCreateToolBar(wxFrame *parent); + + // Create a window information object for the give window + wxWindowPropertyInfo* CreatePropertyInfoForWindow(wxWindow *win); + // Edit the given window + void EditWindow(wxWindow *win); + + virtual void UpdateResourceList(); + virtual void AddItemsRecursively(long parent, wxItemResource *resource); + virtual bool EditSelectedResource(); virtual bool Edit(wxItemResource *res); - virtual bool CreateNewDialog(void); - virtual bool CreateNewPanel(void); + virtual bool CreateNewPanel(); virtual bool CreatePanelItem(wxItemResource *panelResource, wxPanel *panel, char *itemType, int x = 10, int y = 10, bool isBitmap = FALSE); + virtual bool DeleteSelection(); + virtual bool TestCurrentDialog(wxWindow* parent); - virtual bool DeleteSelection(bool deleteWindow = TRUE); + // Saves the window info into the resource, and deletes the + // handler. Doesn't actually disassociate the window from + // the resources. Replaces OnClose. + virtual bool SaveInfoAndDeleteHandler(wxWindow* win); + // Destroys the window. If this is the 'current' panel, NULLs the + // variable. + virtual bool DeleteWindow(wxWindow* win); virtual bool DeleteResource(wxItemResource *res); - virtual bool DeleteResource(wxWindow *win, bool deleteWindow = TRUE); + virtual bool DeleteResource(wxWindow *win); // Add bitmap resource if there isn't already one with this filename. - virtual char *AddBitmapResource(char *filename); + virtual wxString AddBitmapResource(const wxString& filename); // Delete the bitmap resource if it isn't being used by another resource. - virtual void PossiblyDeleteBitmapResource(char *resourceName); + virtual void PossiblyDeleteBitmapResource(const wxString& resourceName); // Helper function for above - virtual bool IsBitmapResourceUsed(char *resourceName); + virtual bool IsBitmapResourceUsed(const wxString& resourceName); + + wxItemResource *FindBitmapResourceByFilename(const wxString& filename); + + wxString FindBitmapFilenameForResource(wxItemResource *resource); + + // Is this window identifier in use? + bool IsSymbolUsed(wxItemResource* thisResource, wxWindowID id) ; + + // Is this window identifier compatible with the given name? (i.e. + // does it already exist under a different name) + bool IsIdentifierOK(const wxString& name, wxWindowID id); - wxItemResource *FindBitmapResourceByFilename(char *filename); + // Change all integer ids that match oldId, to newId. + // This is necessary if an id is changed for one resource - all resources + // must be changed. + void ChangeIds(int oldId, int newId); - char *FindBitmapFilenameForResource(wxItemResource *resource); + // If any resource ids were missing (or their symbol was missing), + // repair them i.e. give them new ids. Returns TRUE if any resource + // needed repairing. + bool RepairResourceIds(); // Deletes 'win' and creates a new window from the resource that // was associated with it. E.g. if you can't change properties on the // fly, you'll need to delete the window and create it again. virtual wxWindow *RecreateWindowFromResource(wxWindow *win, wxWindowPropertyInfo *info = NULL); - virtual bool RecreateSelection(void); + virtual bool RecreateSelection(); // Need to search through resource table removing this from // any resource which has this as a parent. @@ -218,115 +261,143 @@ class wxResourceManager: public wxObject virtual bool EditDialog(wxDialog *dialog, wxWindow *parent); - inline void SetEditorFrame(wxFrame *fr) { editorFrame = fr; } - inline void SetEditorToolBar(EditorToolBar *tb) { editorToolBar = tb; } - inline void SetEditorPalette(EditorToolPalette *pal) { editorPalette = pal; } - inline wxFrame *GetEditorFrame(void) { return editorFrame; } - inline wxListBox *GetEditorResourceList(void) { return editorResourceList; } - inline EditorToolPalette *GetEditorPalette(void) { return editorPalette; } - inline wxList& GetSelections(void) { return selections; } - void AddSelection(wxWindow *win); void RemoveSelection(wxWindow *win); -// inline void SetCurrentResource(wxItemResource *item) { currentResource = item; } -// inline void SetCurrentResourceWindow(wxWindow *win) { currentResourceWindow = win; } -// inline wxItemResource *GetCurrentResource(void) { return currentResource; } -// inline wxWindow *GetCurrentResourceWindow(void) { return currentResourceWindow; } - inline wxMenu *GetPopupMenu(void) { return popupMenu; } - - inline wxHelpController *GetHelpInstance(void) { return helpInstance; } - virtual void MakeUniqueName(char *prefix, char *buf); // (Dis)associate resource<->physical window + // Doesn't delete any windows. virtual void AssociateResource(wxItemResource *resource, wxWindow *win); - virtual bool DisassociateResource(wxItemResource *resource, bool deleteWindow = TRUE); - virtual bool DisassociateResource(wxWindow *win, bool deleteWindow = TRUE); + virtual bool DisassociateResource(wxItemResource *resource); + virtual bool DisassociateResource(wxWindow *win); + virtual bool DisassociateWindows(); virtual wxItemResource *FindResourceForWindow(wxWindow *win); virtual wxWindow *FindWindowForResource(wxItemResource *resource); - virtual bool InstantiateAllResourcesFromWindows(void); + virtual bool InstantiateAllResourcesFromWindows(); virtual bool InstantiateResourceFromWindow(wxItemResource *resource, wxWindow *window, bool recurse = FALSE); - virtual void Modify(bool mod = TRUE) { modified = mod; } - virtual bool Modified(void) { return modified; } +// Accessors + inline void SetEditorFrame(wxFrame *fr) { m_editorFrame = fr; } + inline void SetEditorToolBar(EditorToolBar *tb) { m_editorToolBar = tb; } + inline wxFrame *GetEditorFrame() const { return m_editorFrame; } + inline wxResourceEditorProjectTree *GetEditorResourceTree() const { return m_editorResourceTree; } + inline wxResourceEditorControlList *GetEditorControlList() const { return m_editorControlList; } + inline wxList& GetSelections() { return m_selections; } + inline wxMenu *GetPopupMenu() const { return m_popupMenu; } +#ifdef __WXMSW__ + inline wxHelpController *GetHelpController() const { return m_helpController; } +#endif - inline bool GetEditMode(void) { return editMode; } - void SetEditMode(bool flag, bool changeCurrentResource = TRUE); + inline void Modify(bool mod = TRUE) { m_modified = mod; } + inline bool Modified() const { return m_modified; } - inline wxResourceTable& GetResourceTable(void) { return resourceTable; } - inline wxHashTable& GetResourceAssociations(void) { return resourceAssociations; } - - inline wxString& GetCurrentFilename(void) { return currentFilename; } + inline wxResourceTable& GetResourceTable() { return m_resourceTable; } + inline wxHashTable& GetResourceAssociations() { return m_resourceAssociations; } + + inline wxString GetCurrentFilename() const { return m_currentFilename; } + static wxResourceManager* GetCurrentResourceManager() { return sm_currentResourceManager; } + + inline void SetSymbolFilename(const wxString& s) { m_symbolFilename = s; } + inline wxString GetSymbolFilename() const { return m_symbolFilename; } -// void UsePosition(bool usePos, wxItemResource *resource = NULL, int x = 0, int y = 0); + inline wxRect& GetPropertyWindowSize() { return m_propertyWindowSize; } + inline wxRect& GetResourceEditorWindowSize() { return m_resourceEditorWindowSize; } + + wxResourceSymbolTable& GetSymbolTable() { return m_symbolTable; } + + // Generate a window id and a first stab at a name + int GenerateWindowId(const wxString& prefix, wxString& idName) ; + +// Member variables + protected: +#ifdef __WXMSW__ + wxHelpController* m_helpController; +#endif + wxResourceTableWithSaving m_resourceTable; + wxFrame* m_editorFrame; + wxResourceEditorScrolledWindow* m_editorPanel; + wxMenu* m_popupMenu; + wxResourceEditorProjectTree* m_editorResourceTree; + wxResourceEditorControlList* m_editorControlList; + EditorToolBar* m_editorToolBar; + int m_nameCounter; + int m_symbolIdCounter; // For generating window ids + bool m_modified; + wxHashTable m_resourceAssociations; + wxList m_selections; + wxString m_currentFilename; + wxBitmap* m_bitmapImage; // Default for static bitmaps/buttons + + wxImageList m_imageList; + long m_rootDialogItem; // Root of dialog hierarchy in tree (unused) + + // Options to be saved/restored + wxString m_optionsResourceFilename; // e.g. dialoged.ini, .dialogrc + wxRect m_propertyWindowSize; + wxRect m_resourceEditorWindowSize; + static wxResourceManager* sm_currentResourceManager; + + // Symbol table with identifiers for controls + wxResourceSymbolTable m_symbolTable; + // Filename for include file, e.g. resource.h + wxString m_symbolFilename; }; + class wxResourceEditorFrame: public wxFrame { public: + DECLARE_CLASS(wxResourceEditorFrame) + wxResourceManager *manager; - wxResourceEditorFrame(wxResourceManager *resMan, wxFrame *parent, char *title, int x = -1, int y = -1, int width = 600, int height = 400, - long style = 0, char *name = "frame"); - ~wxResourceEditorFrame(void); - void OldOnMenuCommand(int cmd); - bool OnClose(void); + wxResourceEditorFrame(wxResourceManager *resMan, wxFrame *parent, const wxString& title, + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(600, 400), + long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame"); + ~wxResourceEditorFrame(); + + void OnCloseWindow(wxCloseEvent& event); + + void OnNew(wxCommandEvent& event); + void OnOpen(wxCommandEvent& event); + void OnNewDialog(wxCommandEvent& event); + void OnClear(wxCommandEvent& event); + void OnSave(wxCommandEvent& event); + void OnSaveAs(wxCommandEvent& event); + void OnExit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + void OnContents(wxCommandEvent& event); + void OnDeleteSelection(wxCommandEvent& event); + void OnRecreateSelection(wxCommandEvent& event); + void OnTest(wxCommandEvent& event); + + DECLARE_EVENT_TABLE() }; -class wxResourceEditorPanel: public wxPanel +class wxResourceEditorScrolledWindow: public wxScrolledWindow { public: - wxResourceEditorPanel(wxWindow *parent, int x = -1, int y = -1, int width = 600, int height = 400, - long style = 0, char *name = "panel"); - ~wxResourceEditorPanel(void); - void OnDefaultAction(wxControl *item); -}; + wxResourceEditorScrolledWindow(wxWindow *parent, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, + long style = 0); + ~wxResourceEditorScrolledWindow(); + + void OnScroll(wxScrollEvent& event); + void OnPaint(wxPaintEvent& event); + + void DrawTitle(wxDC& dc); + +// Accessors + inline int GetMarginX() { return m_marginX; } + inline int GetMarginY() { return m_marginY; } -class DialogEditorPanelFrame: public wxFrame -{ public: - DialogEditorPanelFrame(wxFrame *parent, char *title, int x, int y, int w, int h, long style, char *name): - wxFrame(parent, -1, title, wxPoint(x, y), wxSize(w, h), style, name) - { - } - bool OnClose(void); -}; + wxWindow* m_childWindow; + private: + int m_marginX, m_marginY; -// Edit menu -#define OBJECT_EDITOR_NEW_FRAME 220 -#define OBJECT_EDITOR_NEW_DIALOG 221 -#define OBJECT_EDITOR_NEW_PANEL 222 -#define OBJECT_EDITOR_NEW_CANVAS 223 -#define OBJECT_EDITOR_NEW_TEXT_WINDOW 224 -#define OBJECT_EDITOR_NEW_BUTTON 225 -#define OBJECT_EDITOR_NEW_CHECKBOX 226 -#define OBJECT_EDITOR_NEW_MESSAGE 227 -#define OBJECT_EDITOR_NEW_CHOICE 228 -#define OBJECT_EDITOR_NEW_LISTBOX 229 -#define OBJECT_EDITOR_NEW_RADIOBOX 230 -#define OBJECT_EDITOR_NEW_SLIDER 231 -#define OBJECT_EDITOR_NEW_TEXT 232 -#define OBJECT_EDITOR_NEW_MULTITEXT 233 -#define OBJECT_EDITOR_NEW_GAUGE 234 -#define OBJECT_EDITOR_NEW_GROUPBOX 235 - -#define OBJECT_EDITOR_NEW_ITEM 240 -#define OBJECT_EDITOR_NEW_SUBWINDOW 241 - -#define OBJECT_EDITOR_EDIT_MENU 250 -#define OBJECT_EDITOR_EDIT_ATTRIBUTES 251 -#define OBJECT_EDITOR_CLOSE_OBJECT 252 -#define OBJECT_EDITOR_DELETE_OBJECT 253 -#define OBJECT_EDITOR_EDIT_TOOLBAR 254 - -#define OBJECT_EDITOR_TOGGLE_TEST_MODE 255 - -#define OBJECT_EDITOR_RC_CONVERT 260 -#define OBJECT_EDITOR_RC_CONVERT_MENU 261 -#define OBJECT_EDITOR_RC_CONVERT_DIALOG 262 - -#define OBJECT_EDITOR_GRID 263 + DECLARE_EVENT_TABLE() +}; #define OBJECT_MENU_EDIT 1 #define OBJECT_MENU_DELETE 2 @@ -336,43 +407,49 @@ class DialogEditorPanelFrame: public wxFrame * */ -#if defined(__WINDOWS__) && defined(__WIN95__) -class EditorToolBar: public wxToolBar95 -#elif defined(__WINDOWS__) -class EditorToolBar: public wxToolBarMSW -#else -class EditorToolBar: public wxToolBarSimple -#endif +class EditorToolBar: public wxToolBar { - public: - EditorToolBar(wxFrame *frame, int x = 0, int y = 0, int w = -1, int h = -1, - long style = 0, int direction = wxVERTICAL, int RowsOrColumns = 2); +public: + EditorToolBar(wxFrame *frame, const wxPoint& pos = wxPoint(0, 0), const wxSize& size = wxSize(0, 0), + long style = wxTB_HORIZONTAL); bool OnLeftClick(int toolIndex, bool toggled); void OnMouseEnter(int toolIndex); - void OnPaint(wxPaintEvent& event); DECLARE_EVENT_TABLE() }; // Toolbar ids -#define TOOLBAR_LOAD_FILE 1 -#define TOOLBAR_SAVE_FILE 2 -#define TOOLBAR_NEW 3 -// #define TOOLBAR_GEN_CLIPS 4 -#define TOOLBAR_TREE 5 -#define TOOLBAR_HELP 6 +#define TOOLBAR_LOAD_FILE 1 +#define TOOLBAR_SAVE_FILE 2 +#define TOOLBAR_NEW 3 +#define TOOLBAR_TREE 5 +#define TOOLBAR_HELP 6 // Formatting tools -#define TOOLBAR_FORMAT_HORIZ 10 -#define TOOLBAR_FORMAT_HORIZ_LEFT_ALIGN 11 +#define TOOLBAR_FORMAT_HORIZ 10 +#define TOOLBAR_FORMAT_HORIZ_LEFT_ALIGN 11 #define TOOLBAR_FORMAT_HORIZ_RIGHT_ALIGN 12 -#define TOOLBAR_FORMAT_VERT 13 -#define TOOLBAR_FORMAT_VERT_TOP_ALIGN 14 -#define TOOLBAR_FORMAT_VERT_BOT_ALIGN 15 +#define TOOLBAR_FORMAT_VERT 13 +#define TOOLBAR_FORMAT_VERT_TOP_ALIGN 14 +#define TOOLBAR_FORMAT_VERT_BOT_ALIGN 15 -#define TOOLBAR_TO_FRONT 16 -#define TOOLBAR_TO_BACK 17 -#define TOOLBAR_COPY_SIZE 18 +#define TOOLBAR_TO_FRONT 16 +#define TOOLBAR_TO_BACK 17 +#define TOOLBAR_COPY_SIZE 18 + +/* + * this class is used to store data associated with a tree item + */ +class wxResourceTreeData : public wxTreeItemData +{ +public: + wxResourceTreeData(wxItemResource *resource) { m_resource = resource; } + + wxItemResource *GetResource() const { return m_resource; } + +private: + wxItemResource *m_resource; +}; #endif