fixed incorrect use of wxVector<> in wxXRC
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50959 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -65,7 +65,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
class wxXmlResourceDataRecords : public wxVector<wxXmlResourceDataRecord>
|
class wxXmlResourceDataRecords : public wxVector<wxXmlResourceDataRecord*>
|
||||||
{
|
{
|
||||||
// this is a class so that it can be forward-declared
|
// this is a class so that it can be forward-declared
|
||||||
};
|
};
|
||||||
@@ -108,6 +108,11 @@ wxXmlResource::~wxXmlResource()
|
|||||||
{
|
{
|
||||||
ClearHandlers();
|
ClearHandlers();
|
||||||
|
|
||||||
|
for ( wxXmlResourceDataRecords::iterator i = m_data->begin();
|
||||||
|
i != m_data->end(); ++i )
|
||||||
|
{
|
||||||
|
delete *i;
|
||||||
|
}
|
||||||
delete m_data;
|
delete m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -187,8 +192,8 @@ bool wxXmlResource::Load(const wxString& filemask)
|
|||||||
else // a single resource URL
|
else // a single resource URL
|
||||||
#endif // wxUSE_FILESYSTEM
|
#endif // wxUSE_FILESYSTEM
|
||||||
{
|
{
|
||||||
wxXmlResourceDataRecord drec;
|
wxXmlResourceDataRecord *drec = new wxXmlResourceDataRecord;
|
||||||
drec.File = fnd;
|
drec->File = fnd;
|
||||||
Data().push_back(drec);
|
Data().push_back(drec);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,14 +226,14 @@ bool wxXmlResource::Unload(const wxString& filename)
|
|||||||
#if wxUSE_FILESYSTEM
|
#if wxUSE_FILESYSTEM
|
||||||
if ( isArchive )
|
if ( isArchive )
|
||||||
{
|
{
|
||||||
if ( i->File.StartsWith(fnd) )
|
if ( (*i)->File.StartsWith(fnd) )
|
||||||
unloaded = true;
|
unloaded = true;
|
||||||
// don't break from the loop, we can have other matching files
|
// don't break from the loop, we can have other matching files
|
||||||
}
|
}
|
||||||
else // a single resource URL
|
else // a single resource URL
|
||||||
#endif // wxUSE_FILESYSTEM
|
#endif // wxUSE_FILESYSTEM
|
||||||
{
|
{
|
||||||
if ( i->File == fnd )
|
if ( (*i)->File == fnd )
|
||||||
{
|
{
|
||||||
Data().erase(i);
|
Data().erase(i);
|
||||||
unloaded = true;
|
unloaded = true;
|
||||||
@@ -445,27 +450,29 @@ bool wxXmlResource::UpdateResources()
|
|||||||
for ( wxXmlResourceDataRecords::iterator i = Data().begin();
|
for ( wxXmlResourceDataRecords::iterator i = Data().begin();
|
||||||
i != Data().end(); ++i )
|
i != Data().end(); ++i )
|
||||||
{
|
{
|
||||||
modif = (i->Doc == NULL);
|
wxXmlResourceDataRecord* const rec = *i;
|
||||||
|
|
||||||
|
modif = (rec->Doc == NULL);
|
||||||
|
|
||||||
if (!modif && !(m_flags & wxXRC_NO_RELOADING))
|
if (!modif && !(m_flags & wxXRC_NO_RELOADING))
|
||||||
{
|
{
|
||||||
# if wxUSE_FILESYSTEM
|
# if wxUSE_FILESYSTEM
|
||||||
file = fsys.OpenFile(i->File);
|
file = fsys.OpenFile(rec->File);
|
||||||
# if wxUSE_DATETIME
|
# if wxUSE_DATETIME
|
||||||
modif = file && file->GetModificationTime() > i->Time;
|
modif = file && file->GetModificationTime() > rec->Time;
|
||||||
# else // wxUSE_DATETIME
|
# else // wxUSE_DATETIME
|
||||||
modif = true;
|
modif = true;
|
||||||
# endif // wxUSE_DATETIME
|
# endif // wxUSE_DATETIME
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
wxLogError(_("Cannot open file '%s'."), i->File.c_str());
|
wxLogError(_("Cannot open file '%s'."), rec->File);
|
||||||
rt = false;
|
rt = false;
|
||||||
}
|
}
|
||||||
wxDELETE(file);
|
wxDELETE(file);
|
||||||
wxUnusedVar(file);
|
wxUnusedVar(file);
|
||||||
# else // wxUSE_FILESYSTEM
|
# else // wxUSE_FILESYSTEM
|
||||||
# if wxUSE_DATETIME
|
# if wxUSE_DATETIME
|
||||||
modif = wxDateTime(wxFileModificationTime(i->File)) > i->Time;
|
modif = wxDateTime(wxFileModificationTime(rec->File)) > rec->Time;
|
||||||
# else // wxUSE_DATETIME
|
# else // wxUSE_DATETIME
|
||||||
modif = true;
|
modif = true;
|
||||||
# endif // wxUSE_DATETIME
|
# endif // wxUSE_DATETIME
|
||||||
@@ -474,42 +481,41 @@ bool wxXmlResource::UpdateResources()
|
|||||||
|
|
||||||
if (modif)
|
if (modif)
|
||||||
{
|
{
|
||||||
wxLogTrace(_T("xrc"),
|
wxLogTrace(_T("xrc"), _T("opening file '%s'"), rec->File);
|
||||||
_T("opening file '%s'"), i->File.c_str());
|
|
||||||
|
|
||||||
wxInputStream *stream = NULL;
|
wxInputStream *stream = NULL;
|
||||||
|
|
||||||
# if wxUSE_FILESYSTEM
|
# if wxUSE_FILESYSTEM
|
||||||
file = fsys.OpenFile(i->File);
|
file = fsys.OpenFile(rec->File);
|
||||||
if (file)
|
if (file)
|
||||||
stream = file->GetStream();
|
stream = file->GetStream();
|
||||||
# else
|
# else
|
||||||
stream = new wxFileInputStream(i->File);
|
stream = new wxFileInputStream(rec->File);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
if (stream)
|
if (stream)
|
||||||
{
|
{
|
||||||
delete i->Doc;
|
delete rec->Doc;
|
||||||
i->Doc = new wxXmlDocument;
|
rec->Doc = new wxXmlDocument;
|
||||||
}
|
}
|
||||||
if (!stream || !i->Doc->Load(*stream, encoding))
|
if (!stream || !rec->Doc->Load(*stream, encoding))
|
||||||
{
|
{
|
||||||
wxLogError(_("Cannot load resources from file '%s'."),
|
wxLogError(_("Cannot load resources from file '%s'."),
|
||||||
i->File.c_str());
|
rec->File);
|
||||||
wxDELETE(i->Doc);
|
wxDELETE(rec->Doc);
|
||||||
rt = false;
|
rt = false;
|
||||||
}
|
}
|
||||||
else if (i->Doc->GetRoot()->GetName() != wxT("resource"))
|
else if (rec->Doc->GetRoot()->GetName() != wxT("resource"))
|
||||||
{
|
{
|
||||||
wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), i->File.c_str());
|
wxLogError(_("Invalid XRC resource '%s': doesn't have root node 'resource'."), rec->File);
|
||||||
wxDELETE(i->Doc);
|
wxDELETE(rec->Doc);
|
||||||
rt = false;
|
rt = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
long version;
|
long version;
|
||||||
int v1, v2, v3, v4;
|
int v1, v2, v3, v4;
|
||||||
wxString verstr = i->Doc->GetRoot()->GetAttribute(
|
wxString verstr = rec->Doc->GetRoot()->GetAttribute(
|
||||||
wxT("version"), wxT("0.0.0.0"));
|
wxT("version"), wxT("0.0.0.0"));
|
||||||
if (wxSscanf(verstr.c_str(), wxT("%i.%i.%i.%i"),
|
if (wxSscanf(verstr.c_str(), wxT("%i.%i.%i.%i"),
|
||||||
&v1, &v2, &v3, &v4) == 4)
|
&v1, &v2, &v3, &v4) == 4)
|
||||||
@@ -524,12 +530,12 @@ bool wxXmlResource::UpdateResources()
|
|||||||
rt = false;
|
rt = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcessPlatformProperty(i->Doc->GetRoot());
|
ProcessPlatformProperty(rec->Doc->GetRoot());
|
||||||
#if wxUSE_DATETIME
|
#if wxUSE_DATETIME
|
||||||
#if wxUSE_FILESYSTEM
|
#if wxUSE_FILESYSTEM
|
||||||
i->Time = file->GetModificationTime();
|
rec->Time = file->GetModificationTime();
|
||||||
#else // wxUSE_FILESYSTEM
|
#else // wxUSE_FILESYSTEM
|
||||||
i->Time = wxDateTime(wxFileModificationTime(i->File));
|
rec->Time = wxDateTime(wxFileModificationTime(rec->File));
|
||||||
#endif // wxUSE_FILESYSTEM
|
#endif // wxUSE_FILESYSTEM
|
||||||
#endif // wxUSE_DATETIME
|
#endif // wxUSE_DATETIME
|
||||||
}
|
}
|
||||||
@@ -609,15 +615,16 @@ wxXmlNode *wxXmlResource::FindResource(const wxString& name,
|
|||||||
for ( wxXmlResourceDataRecords::const_iterator f = Data().begin();
|
for ( wxXmlResourceDataRecords::const_iterator f = Data().begin();
|
||||||
f != Data().end(); ++f )
|
f != Data().end(); ++f )
|
||||||
{
|
{
|
||||||
if ( f->Doc == NULL || f->Doc->GetRoot() == NULL )
|
wxXmlResourceDataRecord* const rec = *f;
|
||||||
|
if ( rec->Doc == NULL || rec->Doc->GetRoot() == NULL )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
wxXmlNode* found = DoFindResource(f->Doc->GetRoot(),
|
wxXmlNode* found = DoFindResource(rec->Doc->GetRoot(),
|
||||||
name, classname, recursive);
|
name, classname, recursive);
|
||||||
if ( found )
|
if ( found )
|
||||||
{
|
{
|
||||||
#if wxUSE_FILESYSTEM
|
#if wxUSE_FILESYSTEM
|
||||||
m_curFileSystem.ChangePathTo(f->File);
|
m_curFileSystem.ChangePathTo(rec->File);
|
||||||
#endif
|
#endif
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user