X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/67868c1e6c5a600fa6752e0abff13b732c8e689f..5c8ac0b6ca243b5bcc6c5e98b229c66abe932884:/src/xrc/xmlres.cpp diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp index 040951fc11..af053770ac 100644 --- a/src/xrc/xmlres.cpp +++ b/src/xrc/xmlres.cpp @@ -28,6 +28,8 @@ #include "wx/settings.h" #include "wx/bitmap.h" #include "wx/image.h" + #include "wx/module.h" + #include "wx/wxcrtvararg.h" #endif #ifndef __WXWINCE__ @@ -39,7 +41,6 @@ #include "wx/filename.h" #include "wx/tokenzr.h" #include "wx/fontenum.h" -#include "wx/module.h" #include "wx/fontmap.h" #include "wx/artprov.h" @@ -65,16 +66,18 @@ wxXmlResource *wxXmlResource::ms_instance = NULL; return old; } -wxXmlResource::wxXmlResource(int flags) +wxXmlResource::wxXmlResource(int flags, const wxString& domain) { m_flags = flags; m_version = -1; + SetDomain(domain); } -wxXmlResource::wxXmlResource(const wxString& filemask, int flags) +wxXmlResource::wxXmlResource(const wxString& filemask, int flags, const wxString& domain) { m_flags = flags; m_version = -1; + SetDomain(domain); Load(filemask); } @@ -83,6 +86,11 @@ wxXmlResource::~wxXmlResource() ClearHandlers(); } +void wxXmlResource::SetDomain(const wxString& domain) +{ + m_domain = domain; +} + /* static */ wxString wxXmlResource::ConvertFileNameToURL(const wxString& filename) @@ -215,13 +223,13 @@ IMPLEMENT_ABSTRACT_CLASS(wxXmlResourceHandler, wxObject) void wxXmlResource::AddHandler(wxXmlResourceHandler *handler) { - m_handlers.Add(handler); + m_handlers.Append(handler); handler->SetParentResource(this); } void wxXmlResource::InsertHandler(wxXmlResourceHandler *handler) { - m_handlers.Insert(handler, 0); + m_handlers.Insert(handler); handler->SetParentResource(this); } @@ -229,7 +237,7 @@ void wxXmlResource::InsertHandler(wxXmlResourceHandler *handler) void wxXmlResource::ClearHandlers() { - WX_CLEAR_ARRAY(m_handlers); + WX_CLEAR_LIST(wxList, m_handlers); } @@ -672,19 +680,26 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, return CreateResFromNode(©, parent, instance); } + wxXmlResourceHandler *handler; + if (handlerToUse) { if (handlerToUse->CanHandle(node)) + { return handlerToUse->CreateResource(node, parent, instance); + } } else if (node->GetName() == wxT("object")) { - for ( wxXmlResourceHandlers::iterator i = m_handlers.begin(); - i != m_handlers.end(); ++i ) + wxList::compatibility_iterator ND = m_handlers.GetFirst(); + while (ND) { - wxXmlResourceHandler *handler = *i; + handler = (wxXmlResourceHandler*)ND->GetData(); if (handler->CanHandle(node)) + { return handler->CreateResource(node, parent, instance); + } + ND = ND->GetNext(); } } @@ -909,7 +924,7 @@ wxString wxXmlResourceHandler::GetText(const wxString& param, bool translate) if (translate && parNode && parNode->GetPropVal(wxT("translate"), wxEmptyString) != wxT("0")) { - return wxGetTranslation(str2); + return wxGetTranslation(str2, m_resource->GetDomain()); } else { @@ -1092,7 +1107,7 @@ wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, wxString name = GetParamValue(param); if (name.empty()) return wxNullBitmap; #if wxUSE_FILESYSTEM - wxFSFile *fsfile = GetCurFileSystem().OpenFile(name); + wxFSFile *fsfile = GetCurFileSystem().OpenFile(name, wxFS_READ | wxFS_SEEKABLE); if (fsfile == NULL) { wxLogError(_("XRC resource: Cannot create bitmap from '%s'."), @@ -1115,6 +1130,39 @@ wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, return wxBitmap(img); } +#if wxUSE_ANIMATIONCTRL +wxAnimation wxXmlResourceHandler::GetAnimation(const wxString& param) +{ + wxAnimation ani; + + /* load the animation from file: */ + wxString name = GetParamValue(param); + if (name.empty()) return wxNullAnimation; +#if wxUSE_FILESYSTEM + wxFSFile *fsfile = GetCurFileSystem().OpenFile(name, wxFS_READ | wxFS_SEEKABLE); + if (fsfile == NULL) + { + wxLogError(_("XRC resource: Cannot create animation from '%s'."), + name.c_str()); + return wxNullAnimation; + } + ani.Load(*(fsfile->GetStream())); + delete fsfile; +#else + ani.LoadFile(name); +#endif + + if (!ani.IsOk()) + { + wxLogError(_("XRC resource: Cannot create animation from '%s'."), + name.c_str()); + return wxNullAnimation; + } + + return ani; +} +#endif // wxUSE_ANIMATIONCTRL + wxIcon wxXmlResourceHandler::GetIcon(const wxString& param, @@ -1495,17 +1543,17 @@ void wxXmlResourceHandler::CreateChildrenPrivately(wxObject *parent, wxXmlNode * struct XRCID_record { int id; - wxChar *key; + char *key; XRCID_record *next; }; static XRCID_record *XRCID_Records[XRCID_TABLE_SIZE] = {NULL}; -static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = wxID_NONE) +static int XRCID_Lookup(const char *str_id, int value_if_not_found = wxID_NONE) { int index = 0; - for (const wxChar *c = str_id; *c != wxT('\0'); c++) index += (int)*c; + for (const char *c = str_id; *c != '\0'; c++) index += (int)*c; index %= XRCID_TABLE_SIZE; XRCID_record *oldrec = NULL; @@ -1524,7 +1572,7 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = wxID_NONE (*rec_var)->key = wxStrdup(str_id); (*rec_var)->next = NULL; - wxChar *end; + char *end; if (value_if_not_found != wxID_NONE) (*rec_var)->id = value_if_not_found; else @@ -1547,7 +1595,7 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = wxID_NONE static void AddStdXRCID_Records(); /*static*/ -int wxXmlResource::GetXRCID(const wxChar *str_id, int value_if_not_found) +int wxXmlResource::DoGetXRCID(const char *str_id, int value_if_not_found) { static bool s_stdIDsAdded = false; @@ -1582,7 +1630,7 @@ static void CleanXRCID_Records() static void AddStdXRCID_Records() { -#define stdID(id) XRCID_Lookup(wxT(#id), id) +#define stdID(id) XRCID_Lookup(#id, id) stdID(-1); stdID(wxID_ANY); @@ -1600,6 +1648,7 @@ static void AddStdXRCID_Records() stdID(wxID_HELP); stdID(wxID_PRINT); stdID(wxID_PRINT_SETUP); + stdID(wxID_PAGE_SETUP); stdID(wxID_PREVIEW); stdID(wxID_ABOUT); stdID(wxID_HELP_CONTENTS);