#include "wx/frame.h"
#include "wx/wfstream.h"
#include "wx/filesys.h"
+#include "wx/filename.h"
#include "wx/log.h"
#include "wx/intl.h"
#include "wx/tokenzr.h"
fnd = filemask;
while (!!fnd)
{
+ // NB: Load() accepts both filenames and URLs (should probably be
+ // changed to filenames only, but embedded resources currently
+ // rely on its ability to handle URLs - FIXME). This check
+ // serves as a quick way to determine whether found name is
+ // filename and not URL:
+ if (wxFileName::FileExists(fnd))
+ {
+ // Make the name absolute filename, because the app may
+ // change working directory later:
+ wxFileName fn(fnd);
+ if (fn.IsRelative())
+ {
+ fn.MakeAbsolute();
+ fnd = fn.GetFullPath();
+ }
+ }
+
#if wxUSE_FILESYSTEM
- if (filemask.Lower().Matches(wxT("*.zip")) ||
- filemask.Lower().Matches(wxT("*.xrs")))
+ if (fnd.Lower().Matches(wxT("*.zip")) ||
+ fnd.Lower().Matches(wxT("*.xrs")))
{
- rt = rt && Load(fnd + wxT("#zip:*.xmlbin"));
rt = rt && Load(fnd + wxT("#zip:*.xrc"));
}
else
dest.SetContent(with.GetContent());
}
-wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance)
+wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent,
+ wxObject *instance,
+ wxXmlResourceHandler *handlerToUse)
{
if (node == NULL) return NULL;
}
wxXmlResourceHandler *handler;
- wxObject *ret;
- wxNode * ND = m_handlers.GetFirst();
- while (ND)
- {
- handler = (wxXmlResourceHandler*)ND->GetData();
- if (node->GetName() == wxT("object") && handler->CanHandle(node))
+
+ if (handlerToUse)
+ {
+ if (handlerToUse->CanHandle(node))
+ {
+ return handlerToUse->CreateResource(node, parent, instance);
+ }
+ }
+ else if (node->GetName() == wxT("object"))
+ {
+ wxNode *ND = m_handlers.GetFirst();
+ while (ND)
{
- ret = handler->CreateResource(node, parent, instance);
- if (ret) return ret;
+ handler = (wxXmlResourceHandler*)ND->GetData();
+ if (handler->CanHandle(node))
+ {
+ return handler->CreateResource(node, parent, instance);
+ }
+ ND = ND->GetNext();
}
- ND = ND->GetNext();
}
wxLogError(_("No handler found for XML node '%s', class '%s'!"),
while (n)
{
if (n->GetType() == wxXML_ELEMENT_NODE &&
- n->GetName() == wxT("object"))
+ (n->GetName() == wxT("object") || n->GetName() == wxT("object_ref")))
{
- if (this_hnd_only && CanHandle(n))
- CreateResource(n, parent, NULL);
- else
- m_resource->CreateResFromNode(n, parent, NULL);
+ m_resource->CreateResFromNode(n, parent, NULL,
+ this_hnd_only ? this : NULL);
}
n = n->GetNext();
}
XRCID_record **rec_var = (oldrec == NULL) ?
&XRCID_Records[index] : &oldrec->next;
*rec_var = new XRCID_record;
- (*rec_var)->id = ++XRCID_LastID;
(*rec_var)->key = wxStrdup(str_id);
(*rec_var)->next = NULL;
+ wxChar *end;
+ int asint = wxStrtol(str_id, &end, 10);
+ if (*str_id && *end == 0)
+ {
+ // if str_id was integer, keep it verbosely:
+ (*rec_var)->id = asint;
+ }
+ else
+ {
+ (*rec_var)->id = ++XRCID_LastID;
+ }
+
return (*rec_var)->id;
}