From: Václav Slavík Date: Fri, 11 Aug 2000 19:08:18 +0000 (+0000) Subject: fixed loading of bitmaps from mem_fs X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/792064e93f052115705de2f17c9ac0fe5de4bdb3 fixed loading of bitmaps from mem_fs git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/contrib/include/wx/xml/xmlres.h b/contrib/include/wx/xml/xmlres.h index be4f1a69db..34df9e7538 100644 --- a/contrib/include/wx/xml/xmlres.h +++ b/contrib/include/wx/xml/xmlres.h @@ -21,12 +21,16 @@ #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 WXDLLEXPORT wxMenu; class WXDLLEXPORT wxMenuBar; class WXDLLEXPORT wxDialog; class WXDLLEXPORT wxPanel; class WXDLLEXPORT wxWindow; +class WXDLLEXPORT wxToolBar; class WXDLLEXPORT wxXmlResourceHandler; @@ -82,6 +86,11 @@ class WXDLLEXPORT 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) @@ -120,8 +129,12 @@ class WXDLLEXPORT wxXmlResource : public wxObject private: wxList m_Handlers; wxXmlResourceDataRecords m_Data; - - friend class wxXmlResourceHandler; +#if wxUSE_FILESYSTEM + wxFileSystem m_CurFileSystem; + wxFileSystem& GetCurFileSystem() { return m_CurFileSystem; } +#endif + + friend class wxXmlResourceHandler; }; @@ -236,9 +249,14 @@ class WXDLLEXPORT wxXmlResourceHandler : public wxObject // Get colour in HTML syntax (#RRGGBB) wxColour GetColour(const wxString& param); + // Get size/position: wxSize GetSize(const wxString& param = _T("size")); wxPoint GetPosition(const wxString& param = _T("pos")); + // 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); @@ -247,6 +265,9 @@ class WXDLLEXPORT wxXmlResourceHandler : public wxObject 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(); } }; #define ADD_STYLE(style) AddStyle(_T(#style), style) diff --git a/contrib/src/xml/xh_stbmp.cpp b/contrib/src/xml/xh_stbmp.cpp index 903b84b92d..8ec8d5553c 100644 --- a/contrib/src/xml/xh_stbmp.cpp +++ b/contrib/src/xml/xh_stbmp.cpp @@ -21,8 +21,6 @@ #include "wx/xml/xh_stbmp.h" #include "wx/statbmp.h" -#include "wx/image.h" -#include "wx/bitmap.h" wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler() : wxXmlResourceHandler() @@ -31,14 +29,9 @@ wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler() wxObject *wxStaticBitmapXmlHandler::DoCreateResource() { - wxImage img(GetParamValue(_T("bitmap"))); - wxSize sz = GetSize(); - - if (!(sz == wxDefaultSize)) img.Rescale(sz.x, sz.y); - wxStaticBitmap *bmp = new wxStaticBitmap(m_ParentAsWindow, GetID(), - img.ConvertToBitmap(), + GetBitmap(_T("bitmap"), GetSize()), GetPosition(), GetSize(), GetStyle(), GetName() diff --git a/contrib/src/xml/xmlres.cpp b/contrib/src/xml/xmlres.cpp index b5b0415079..fb4f564a57 100644 --- a/contrib/src/xml/xmlres.cpp +++ b/contrib/src/xml/xmlres.cpp @@ -27,6 +27,8 @@ #include "wx/intl.h" #include "wx/tokenzr.h" #include "wx/module.h" +#include "wx/bitmap.h" +#include "wx/image.h" #include "wx/xml/xml.h" #include "wx/xml/xmlres.h" @@ -137,6 +139,13 @@ wxMenuBar *wxXmlResource::LoadMenuBar(const wxString& name) +wxToolBar *wxXmlResource::LoadToolBar(wxWindow *parent, const wxString& name) +{ + return (wxToolBar*)CreateResFromNode(FindResource(name, wxT("toolbar")), parent, NULL); +} + + + wxDialog *wxXmlResource::LoadDialog(wxWindow *parent, const wxString& name) { wxDialog *dialog = new wxDialog; @@ -296,7 +305,12 @@ wxXmlNode *wxXmlResource::FindResource(const wxString& name, const wxString& typ (!type || node->GetName() == type) && node->GetPropVal(wxT("name"), &dummy) && dummy == name) + { +#if wxUSE_FILESYSTEM + m_CurFileSystem.ChangePathTo(m_Data[f].File); +#endif return node; + } } wxLogError(_("XML resource '%s' (type '%s') not found!"), @@ -508,6 +522,50 @@ wxColour wxXmlResourceHandler::GetColour(const wxString& param) } + +wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, wxSize size) +{ + wxString name = GetParamValue(param); + if (name.IsEmpty()) return wxNullBitmap; +#if wxUSE_FILESYSTEM + wxFSFile *fsfile = GetCurFileSystem().OpenFile(name); + if (fsfile == NULL) + { + wxLogError(_("XML resource: Cannot create bitmap from '%s'."), param.mb_str()); + return wxNullBitmap; + } + wxImage img(*(fsfile->GetStream())); + delete fsfile; +#else + wxImage img(GetParamValue(_T("bitmap"))); +#endif + if (!img.Ok()) + { + wxLogError(_("XML resource: Cannot create bitmap from '%s'."), param.mb_str()); + return wxNullBitmap; + } + if (!(size == wxDefaultSize)) img.Rescale(size.x, size.y); + return img.ConvertToBitmap(); +} + + + +wxIcon wxXmlResourceHandler::GetIcon(const wxString& param, wxSize size) +{ +#ifdef __WXMSW__ + wxIcon icon; + icon.CopyFromBitmap(GetBitmap(param, size)); +#else + wxIcon *iconpt; + wxBitmap bmppt = GetBitmap(param, size); + iconpt = (wxIcon*)(&bmppt); + wxIcon icon(*iconpt); +#endif + return icon; +} + + + wxXmlNode *wxXmlResourceHandler::GetParamNode(const wxString& param) { wxXmlNode *n = m_Node->GetChildren(); @@ -617,9 +675,9 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent, { if (children_node == NULL) children_node = GetParamNode(_T("children")); if (children_node == NULL) return; - + wxXmlNode *n = children_node->GetChildren(); - + while (n) { if (n->GetType() == wxXML_ELEMENT_NODE) @@ -646,7 +704,6 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent, // --------------- XMLID implementation ----------------------------- - #define XMLID_TABLE_SIZE 1024