X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dfc0e3fb9a38ac231b12d207654afcf3de9582c2..523050b607cfb5e6f9dfcb1544eb4f49ec1978cd:/contrib/include/wx/xml/xmlres.h diff --git a/contrib/include/wx/xml/xmlres.h b/contrib/include/wx/xml/xmlres.h index bc8090ad37..52c7f2a9ab 100644 --- a/contrib/include/wx/xml/xmlres.h +++ b/contrib/include/wx/xml/xmlres.h @@ -21,26 +21,23 @@ #include "wx/datetime.h" #include "wx/list.h" #include "wx/gdicmn.h" +#include "wx/filesys.h" +#include "wx/bitmap.h" +#include "wx/icon.h" -class wxMenu; -class wxMenuBar; -class wxDialog; -class wxPanel; -class wxWindow; +class WXDLLEXPORT wxMenu; +class WXDLLEXPORT wxMenuBar; +class WXDLLEXPORT wxDialog; +class WXDLLEXPORT wxPanel; +class WXDLLEXPORT wxWindow; +class WXDLLEXPORT wxToolBar; -class wxXmlResourceHandler; +class WXDLLEXPORT wxXmlResourceHandler; #include "wx/xml/xml.h" -enum -{ - wxXML_BINARY, - wxXML_ARCHIVE -}; - - -class wxXmlResourceDataRecord +class WXDLLEXPORT wxXmlResourceDataRecord { public: wxXmlResourceDataRecord() : Doc(NULL), Time(wxDateTime::Now()) {} @@ -51,30 +48,25 @@ class wxXmlResourceDataRecord wxDateTime Time; }; -WX_DECLARE_OBJARRAY(wxXmlResourceDataRecord, wxXmlResourceDataRecords); +WX_DECLARE_EXPORTED_OBJARRAY(wxXmlResourceDataRecord, wxXmlResourceDataRecords); // This class holds XML resources from one or more .xml files // (or derived forms, either binary or zipped -- see manual for // details). -class wxXmlResource : public wxObject +class WXDLLEXPORT wxXmlResource : public wxObject { public: - wxXmlResource(); - wxXmlResource(const wxString& filemask, int type); + // 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). Type is one of - // wxXML_TEXT, wxXML_BINARY, wxXML_ARCHIVE and specifies type of - // data to be expected: - // wxXML_BINARY - binary version of .xml file, as produced - // by wxXmlDocument::SaveBinary - // wxXML_ARCHIVE - ZIP archive that contains arbitrary number - // of files with .xmb extension - // (this kind of ZIP archive is produced by - // XML resources compiler that ships with wxWin) - bool Load(const wxString& filemask, int type = wxXML_ARCHIVE); + // 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 @@ -97,6 +89,11 @@ class wxXmlResource : public wxObject // 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); +#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) @@ -112,6 +109,10 @@ class wxXmlResource : public wxObject wxPanel *LoadPanel(wxWindow *parent, const wxString& name); bool LoadPanel(wxPanel *panel, 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 @@ -123,16 +124,27 @@ class wxXmlResource : public wxObject void UpdateResources(); // Finds resource (calls UpdateResources) and returns node containing it - wxXmlNode *FindResource(const wxString& name, const wxString& type); + 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; - - friend class wxXmlResourceHandler; +#if wxUSE_FILESYSTEM + wxFileSystem m_CurFileSystem; + wxFileSystem& GetCurFileSystem() { return m_CurFileSystem; } +#endif + + friend class wxXmlResourceHandler; }; @@ -149,10 +161,25 @@ extern wxXmlResource *wxTheXmlResource; // EVT_MENU(XMLID("new"), MyFrame::OnNew) // EVT_MENU(XMLID("open"), MyFrame::OnOpen) // END_EVENT_TABLE() -#define XMLID(str_id) wxXmlResource::GetXMLID(str_id) +#define XMLID(str_id) \ + wxXmlResource::GetXMLID(_T(str_id)) -class wxXmlResourceHandler : public wxObject + +// This macro returns pointer to particular control in dialog +// created using XML resources. You can use it to set/get values from +// controls. +// Example: +// wxDialog dlg; +// wxTheXmlResource->LoadDialog(&dlg, mainFrame, "my_dialog"); +// XMLCTRL(dlg, "my_textctrl", wxTextCtrl)->SetValue(_T("default value")); + +#define XMLCTRL(window, id, type) \ + ((type*)((window).FindWindow(XMLID(id)))) + + + +class WXDLLEXPORT wxXmlResourceHandler : public wxObject { public: wxXmlResourceHandler(); @@ -174,10 +201,6 @@ class wxXmlResourceHandler : public wxObject // resource from it, FALSE otherwise. virtual bool CanHandle(wxXmlNode *node) = 0; - // Check "platform" property if it matches this platform - // that is, if this node 'exists' under this platform - static bool CheckPlatform(wxXmlNode *node); - void SetParentResource(wxXmlResource *res) { m_Resource = res; } @@ -189,11 +212,17 @@ class wxXmlResourceHandler : public wxObject // 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. + bool IsOfClass(wxXmlNode *node, const wxString& classname) + { return node->GetPropVal(_T("class"), wxEmptyString) == classname; } + // Gets node content from wxXML_ENTITY_NODE // (the problem is, content is represented as // wxXML_ENTITY_NODE name="tag", content="" @@ -211,6 +240,9 @@ class wxXmlResourceHandler : public wxObject // 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 @@ -219,7 +251,7 @@ class wxXmlResourceHandler : public wxObject // 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 + // - calls wxGetTranslations (unless disabled in wxXmlResource) wxString GetText(const wxString& param); // Return XMLID @@ -235,17 +267,30 @@ class wxXmlResourceHandler : public wxObject // 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); + + // Get font: + wxFont GetFont(const wxString& param = _T("font")); // 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")*/); + 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)