fixed loading of bitmaps from mem_fs

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík 2000-08-11 19:08:18 +00:00
parent 6ba549f2a5
commit 792064e93f
3 changed files with 84 additions and 13 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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