]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/include/wx/xml/xmlres.h
added new gizmo: wxEditableListBox
[wxWidgets.git] / contrib / include / wx / xml / xmlres.h
index 7a62012ccc1d015a1ed33ebef609b0a5e8337cea..a4dd6912fdb4e988ca4cd9941a99c98f9aa444d1 100644 (file)
@@ -30,6 +30,7 @@ class WXDLLEXPORT wxMenuBar;
 class WXDLLEXPORT wxDialog;
 class WXDLLEXPORT wxPanel;
 class WXDLLEXPORT wxWindow;
+class WXDLLEXPORT wxFrame;
 class WXDLLEXPORT wxToolBar;
 
 class WXDLLEXPORT wxXmlResourceHandler;
@@ -39,13 +40,13 @@ class WXDLLEXPORT wxXmlResourceHandler;
 
 class WXDLLEXPORT wxXmlResourceDataRecord
 {
-    public:
-        wxXmlResourceDataRecord() : Doc(NULL), Time(wxDateTime::Now()) {}
-        ~wxXmlResourceDataRecord() {delete Doc;}
-    
-        wxString File;
-        wxXmlDocument *Doc;
-        wxDateTime Time;
+public:
+    wxXmlResourceDataRecord() : Doc(NULL), Time(wxDateTime::Now()) {}
+    ~wxXmlResourceDataRecord() {delete Doc;}
+
+    wxString File;
+    wxXmlDocument *Doc;
+    wxDateTime Time;
 };
 
 WX_DECLARE_EXPORTED_OBJARRAY(wxXmlResourceDataRecord, wxXmlResourceDataRecords);
@@ -56,85 +57,97 @@ WX_DECLARE_EXPORTED_OBJARRAY(wxXmlResourceDataRecord, wxXmlResourceDataRecords);
 
 class WXDLLEXPORT wxXmlResource : public wxObject
 {
-    public:
-        wxXmlResource();
-        wxXmlResource(const wxString& filemask);
-        ~wxXmlResource();
-
-        // Loads resources from XML files that match given filemask.
-        // This method understands VFS (see filesys.h).
-        bool Load(const wxString& filemask);
-        
-        // Initialize handlers for all supported controls/windows. This will
-        // make the executable quite big because it forces linking against
-        // most of wxWin library
-        void InitAllHandlers();
-        
-        // Initialize only specific handler (or custom handler). Convention says
-        // that handler name is equal to control's name plus 'XmlHandler', e.g.
-        // wxTextCtrlXmlHandler, wxHtmlWindowXmlHandler. XML resource compiler
-        // (xmlres) can create include file that contains initialization code for 
-        // all controls used within the resource.
-        void AddHandler(wxXmlResourceHandler *handler);
-        
-        // Removes all handlers
-        void ClearHandlers();
-        
-        // Loads menu from resource. Returns NULL on failure.
-        wxMenu *LoadMenu(const wxString& name);
-
-        // Loads menubar from resource. Returns NULL on failure.
-        wxMenuBar *LoadMenuBar(const wxString& name);
+public:
+    // Ctor. If use_locale is TRUE, translatable strings are
+    // translated via _(). You can disable it by passing use_locale=FALSE
+    // (for example if you provide resource file for each locale)
+    wxXmlResource(bool use_locale = TRUE);
+    wxXmlResource(const wxString& filemask, bool use_locale = TRUE);
+    ~wxXmlResource();
+
+    // Loads resources from XML files that match given filemask.
+    // This method understands VFS (see filesys.h).
+    bool Load(const wxString& filemask);
+
+    // Initialize handlers for all supported controls/windows. This will
+    // make the executable quite big because it forces linking against
+    // most of wxWin library
+    void InitAllHandlers();
+
+    // Initialize only specific handler (or custom handler). Convention says
+    // that handler name is equal to control's name plus 'XmlHandler', e.g.
+    // wxTextCtrlXmlHandler, wxHtmlWindowXmlHandler. XML resource compiler
+    // (xmlres) can create include file that contains initialization code for 
+    // all controls used within the resource.
+    void AddHandler(wxXmlResourceHandler *handler);
+
+    // Removes all handlers
+    void ClearHandlers();
+
+    // Loads menu from resource. Returns NULL on failure.
+    wxMenu *LoadMenu(const wxString& name);
+
+    // Loads menubar from resource. Returns NULL on failure.
+    wxMenuBar *LoadMenuBar(const wxString& name);
 
 #if wxUSE_TOOLBAR
-        // Loads toolbar
-        wxToolBar *LoadToolBar(wxWindow *parent, const wxString& name);
+    // Loads toolbar
+    wxToolBar *LoadToolBar(wxWindow *parent, const wxString& name);
 #endif
 
-        // Loads dialog. dlg points to parent window (if any). Second form
-        // is used to finish creation of already existing instance (main reason
-        // for this is that you may want to use derived class with new event table)
-        // Example (typical usage):
-        //      MyDialog dlg;
-        //      wxTheXmlResource->LoadDialog(&dlg, mainFrame, "my_dialog");
-        //      dlg->ShowModal();
-        wxDialog *LoadDialog(wxWindow *parent, const wxString& name);
-        bool LoadDialog(wxDialog *dlg, wxWindow *parent, const wxString& name);
-
-        // Loads panel. panel points to parent window (if any). Second form
-        // is used to finish creation of already existing instance.
-        wxPanel *LoadPanel(wxWindow *parent, const wxString& name);
-        bool LoadPanel(wxPanel *panel, wxWindow *parent, const wxString& name);
-
-        // Returns numeric ID that is equivalent to string id used in XML
-        // resource. To be used in event tables
-        // Macro XMLID is provided for convenience
-        static int GetXMLID(const char *str_id);
-
-    protected:
-        // Scans resources list for unloaded files and loads them. Also reloads
-        // files that have been modified since last loading.
-        void UpdateResources();
-        
-        // Finds resource (calls UpdateResources) and returns node containing it
-        wxXmlNode *FindResource(const wxString& name, const wxString& type);
-        
-        // Creates resource from info in given node:
-        wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL);
-
-        // Remove nodes with property "platform" that does not
-        // match current platform
-        void ProcessPlatformProperty(wxXmlNode *node);
-
-    private:
-        wxList m_Handlers;
-        wxXmlResourceDataRecords m_Data;
+    // Loads dialog. dlg points to parent window (if any). Second form
+    // is used to finish creation of already existing instance (main reason
+    // for this is that you may want to use derived class with new event table)
+    // Example (typical usage):
+    //      MyDialog dlg;
+    //      wxTheXmlResource->LoadDialog(&dlg, mainFrame, "my_dialog");
+    //      dlg->ShowModal();
+    wxDialog *LoadDialog(wxWindow *parent, const wxString& name);
+    bool LoadDialog(wxDialog *dlg, wxWindow *parent, const wxString& name);
+
+    // Loads panel. panel points to parent window (if any). Second form
+    // is used to finish creation of already existing instance.
+    wxPanel *LoadPanel(wxWindow *parent, const wxString& name);
+    bool LoadPanel(wxPanel *panel, wxWindow *parent, const wxString& name);
+
+    bool LoadFrame(wxFrame* frame, wxWindow *parent, const wxString& name);
+
+    // Loads bitmap or icon resource from file:
+    wxBitmap LoadBitmap(const wxString& name);
+    wxIcon LoadIcon(const wxString& name);
+
+    // Returns numeric ID that is equivalent to string id used in XML
+    // resource. To be used in event tables
+    // Macro XMLID is provided for convenience
+    static int GetXMLID(const char *str_id);
+
+protected:
+    // Scans resources list for unloaded files and loads them. Also reloads
+    // files that have been modified since last loading.
+    void UpdateResources();
+
+    // Finds resource (calls UpdateResources) and returns node containing it
+    wxXmlNode *FindResource(const wxString& name, const wxString& classname);
+
+    // Creates resource from info in given node:
+    wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL);
+
+    // Remove nodes with property "platform" that does not
+    // match current platform
+    void ProcessPlatformProperty(wxXmlNode *node);
+
+    bool GetUseLocale() { return m_useLocale; }
+
+private:
+    bool m_useLocale;
+    wxList m_handlers;
+    wxXmlResourceDataRecords m_data;
 #if wxUSE_FILESYSTEM
-        wxFileSystem m_CurFileSystem;
-        wxFileSystem& GetCurFileSystem() { return m_CurFileSystem; }
+    wxFileSystem m_curFileSystem;
+    wxFileSystem& GetCurFileSystem() { return m_curFileSystem; }
 #endif
 
-        friend class wxXmlResourceHandler;
+    friend class wxXmlResourceHandler;
 };
 
 
@@ -153,8 +166,7 @@ extern wxXmlResource *wxTheXmlResource;
 //    END_EVENT_TABLE()    
 
 #define XMLID(str_id) \
-    wxXmlResource::GetXMLID(_T(str_id))
-
+    wxXmlResource::GetXMLID(wxT(str_id))
 
 
 // This macro returns pointer to particular control in dialog
@@ -163,7 +175,7 @@ extern wxXmlResource *wxTheXmlResource;
 // Example:
 //    wxDialog dlg;
 //    wxTheXmlResource->LoadDialog(&dlg, mainFrame, "my_dialog");
-//    XMLCTRL(dlg, "my_textctrl", wxTextCtrl)->SetValue(_T("default value"));
+//    XMLCTRL(dlg, "my_textctrl", wxTextCtrl)->SetValue(wxT("default value"));
 
 #define XMLCTRL(window, id, type) \
     ((type*)((window).FindWindow(XMLID(id))))
@@ -172,108 +184,123 @@ extern wxXmlResource *wxTheXmlResource;
 
 class WXDLLEXPORT wxXmlResourceHandler : public wxObject
 {
-    public:
-        wxXmlResourceHandler();
-        virtual ~wxXmlResourceHandler() {}
-
-        // Creates object (menu, dialog, control, ...) from XML node.
-        // Should check for validity.
-        // parent is higher-level object (usually window, dialog or panel)
-        // that is often neccessary to create resource
-        // if instance != NULL it should not create new instance via 'new' but
-        // rather use this one and call its Create method
-        wxObject *CreateResource(wxXmlNode *node, wxObject *parent, wxObject *instance);
-
-        // This one is called from CreateResource after variables
-        // were filled
-        virtual wxObject *DoCreateResource() = 0;
-        
-        // Returns TRUE if it understands this node and can create
-        // resource from it, FALSE otherwise.
-        virtual bool CanHandle(wxXmlNode *node) = 0;
-
-        void SetParentResource(wxXmlResource *res) { m_Resource = res; }
-
-
-    protected:
-
-        wxXmlResource *m_Resource;
-        wxArrayString m_StyleNames;
-        wxArrayInt m_StyleValues;
-
-        // Variables (filled by CreateResource)
-        wxXmlNode *m_Node;
-        wxObject *m_Parent, *m_Instance;
-        wxWindow *m_ParentAsWindow, *m_InstanceAsWindow;
-        
-        // --- Handy methods:
-
-        // Gets node content from wxXML_ENTITY_NODE
-        // (the problem is, <tag>content<tag> is represented as
-        // wxXML_ENTITY_NODE name="tag", content=""
-        //    |-- wxXML_TEXT_NODE or 
-        //        wxXML_CDATA_SECTION_NODE name="" content="content"
-        wxString GetNodeContent(wxXmlNode *node);
-
-        // Check to see if a param exists
-        bool HasParam(const wxString& param);      
-
-        // Finds the node or returns NULL
-        wxXmlNode *GetParamNode(const wxString& param);
-        wxString GetParamValue(const wxString& param);
-            
-        // Add style flag (e.g. wxMB_DOCKABLE) to list of flags
-        // understood by this handler
-        void AddStyle(const wxString& name, int value);
-        
-        // Gets style flags from text in form "flag | flag2| flag3 |..."
-        // Only understads flags added with AddStyle
-        int GetStyle(const wxString& param = _T("style"), int defaults = 0);
-        
-        // Gets text from param and does some convertions:
-        // - replaces \n, \r, \t by respective chars (according to C syntax)
-        // - replaces $ by & and $$ by $ (needed for $File => &File because of XML)
-        // - converts encodings if neccessary
-        wxString GetText(const wxString& param);
-
-        // Return XMLID
-        int GetID();
-        wxString GetName();
-
-        // Get bool flag (1,t,yes,on,true are TRUE, everything else is FALSE)
-        bool GetBool(const wxString& param, bool defaultv = FALSE);
-
-        // Get integer value from param
-        long GetLong( const wxString& param, long defaultv = 0 );
-        
-        // Get colour in HTML syntax (#RRGGBB)
-        wxColour GetColour(const wxString& param);
-        
-        // Get size/position (may be in dlg units):
-        wxSize GetSize(const wxString& param = _T("size"));
-        wxPoint GetPosition(const wxString& param = _T("pos"));
-
-        // Get dimension (may be in dlg units):
-        wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0);
-        
-        // Get bitmap:
-        wxBitmap GetBitmap(const wxString& param = _T("bitmap"), wxSize size = wxDefaultSize);
-        wxIcon GetIcon(const wxString& param = _T("icon"), wxSize size = wxDefaultSize);
-        
-        // Sets common window options:
-        void SetupWindow(wxWindow *wnd);
-    
-        void CreateChildren(wxObject *parent, bool only_this_handler = FALSE,
-                          wxXmlNode *children_node = NULL /*stands for
-                             GetParamNode("children")*/);
-        wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL)
-            { return m_Resource->CreateResFromNode(node, parent, instance); }
-
-        // helper
-        wxFileSystem& GetCurFileSystem() { return m_Resource->GetCurFileSystem(); }
+public:
+    wxXmlResourceHandler();
+    virtual ~wxXmlResourceHandler() {}
+
+    // Creates object (menu, dialog, control, ...) from XML node.
+    // Should check for validity.
+    // parent is higher-level object (usually window, dialog or panel)
+    // that is often neccessary to create resource
+    // if instance != NULL it should not create new instance via 'new' but
+    // rather use this one and call its Create method
+    wxObject *CreateResource(wxXmlNode *node, wxObject *parent, 
+                             wxObject *instance);
+
+    // This one is called from CreateResource after variables
+    // were filled
+    virtual wxObject *DoCreateResource() = 0;
+
+    // Returns TRUE if it understands this node and can create
+    // resource from it, FALSE otherwise.
+    virtual bool CanHandle(wxXmlNode *node) = 0;
+
+    void SetParentResource(wxXmlResource *res) { m_resource = res; }
+
+
+protected:
+
+    wxXmlResource *m_resource;
+    wxArrayString m_styleNames;
+    wxArrayInt m_styleValues;
+
+    // Variables (filled by CreateResource)
+    wxXmlNode *m_node;
+    wxString m_class;
+    wxObject *m_parent, *m_instance;
+    wxWindow *m_parentAsWindow, *m_instanceAsWindow;
+
+    // --- Handy methods:
+
+    // Returns true if the node has property class equal to classname,
+    // e.g. <object class="wxDialog">
+    bool IsOfClass(wxXmlNode *node, const wxString& classname)
+        { return node->GetPropVal(wxT("class"), wxEmptyString) == classname; }
+
+    // Gets node content from wxXML_ENTITY_NODE
+    // (the problem is, <tag>content<tag> is represented as
+    // wxXML_ENTITY_NODE name="tag", content=""
+    //    |-- wxXML_TEXT_NODE or 
+    //        wxXML_CDATA_SECTION_NODE name="" content="content"
+    wxString GetNodeContent(wxXmlNode *node);
+
+    // Check to see if a param exists
+    bool HasParam(const wxString& param);      
+
+    // Finds the node or returns NULL
+    wxXmlNode *GetParamNode(const wxString& param);
+    wxString GetParamValue(const wxString& param);
+
+    // Add style flag (e.g. wxMB_DOCKABLE) to list of flags
+    // understood by this handler
+    void AddStyle(const wxString& name, int value);
+
+    // Add styles common to all wxWindow-derived classes
+    void AddWindowStyles();
+
+    // Gets style flags from text in form "flag | flag2| flag3 |..."
+    // Only understads flags added with AddStyle
+    int GetStyle(const wxString& param = wxT("style"), int defaults = 0);
+
+    // Gets text from param and does some convertions:
+    // - replaces \n, \r, \t by respective chars (according to C syntax)
+    // - replaces $ by & and $$ by $ (needed for $File => &File because of XML)
+    // - calls wxGetTranslations (unless disabled in wxXmlResource)
+    wxString GetText(const wxString& param);
+
+    // Return XMLID
+    int GetID();
+    wxString GetName();
+
+    // Get bool flag (1,t,yes,on,true are TRUE, everything else is FALSE)
+    bool GetBool(const wxString& param, bool defaultv = FALSE);
+
+    // Get integer value from param
+    long GetLong( const wxString& param, long defaultv = 0 );
+
+    // Get colour in HTML syntax (#RRGGBB)
+    wxColour GetColour(const wxString& param);
+
+    // Get size/position (may be in dlg units):
+    wxSize GetSize(const wxString& param = wxT("size"));
+    wxPoint GetPosition(const wxString& param = wxT("pos"));
+
+    // Get dimension (may be in dlg units):
+    wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0);
+
+    // Get bitmap:
+    wxBitmap GetBitmap(const wxString& param = wxT("bitmap"), 
+                       wxSize size = wxDefaultSize);
+    wxIcon GetIcon(const wxString& param = wxT("icon"), 
+                   wxSize size = wxDefaultSize);
+
+    // Get font:
+    wxFont GetFont(const wxString& param = wxT("font"));
+
+    // Sets common window options:
+    void SetupWindow(wxWindow *wnd);
+
+    void CreateChildren(wxObject *parent, bool this_hnd_only = FALSE);
+    void CreateChildrenPrivately(wxObject *parent, wxXmlNode *rootnode = NULL);
+    wxObject *CreateResFromNode(wxXmlNode *node, 
+                                wxObject *parent, wxObject *instance = NULL)
+        { return m_resource->CreateResFromNode(node, parent, instance); }
+
+    // helper
+    wxFileSystem& GetCurFileSystem() { return m_resource->GetCurFileSystem(); }
 };
 
-#define ADD_STYLE(style) AddStyle(_T(#style), style)
+#define ADD_STYLE(style) AddStyle(wxT(#style), style)