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:
parent
6ba549f2a5
commit
792064e93f
@ -21,12 +21,16 @@
|
|||||||
#include "wx/datetime.h"
|
#include "wx/datetime.h"
|
||||||
#include "wx/list.h"
|
#include "wx/list.h"
|
||||||
#include "wx/gdicmn.h"
|
#include "wx/gdicmn.h"
|
||||||
|
#include "wx/filesys.h"
|
||||||
|
#include "wx/bitmap.h"
|
||||||
|
#include "wx/icon.h"
|
||||||
|
|
||||||
class WXDLLEXPORT wxMenu;
|
class WXDLLEXPORT wxMenu;
|
||||||
class WXDLLEXPORT wxMenuBar;
|
class WXDLLEXPORT wxMenuBar;
|
||||||
class WXDLLEXPORT wxDialog;
|
class WXDLLEXPORT wxDialog;
|
||||||
class WXDLLEXPORT wxPanel;
|
class WXDLLEXPORT wxPanel;
|
||||||
class WXDLLEXPORT wxWindow;
|
class WXDLLEXPORT wxWindow;
|
||||||
|
class WXDLLEXPORT wxToolBar;
|
||||||
|
|
||||||
class WXDLLEXPORT wxXmlResourceHandler;
|
class WXDLLEXPORT wxXmlResourceHandler;
|
||||||
|
|
||||||
@ -82,6 +86,11 @@ class WXDLLEXPORT wxXmlResource : public wxObject
|
|||||||
// Loads menubar from resource. Returns NULL on failure.
|
// Loads menubar from resource. Returns NULL on failure.
|
||||||
wxMenuBar *LoadMenuBar(const wxString& name);
|
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
|
// Loads dialog. dlg points to parent window (if any). Second form
|
||||||
// is used to finish creation of already existing instance (main reason
|
// 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)
|
// 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:
|
private:
|
||||||
wxList m_Handlers;
|
wxList m_Handlers;
|
||||||
wxXmlResourceDataRecords m_Data;
|
wxXmlResourceDataRecords m_Data;
|
||||||
|
#if wxUSE_FILESYSTEM
|
||||||
friend class wxXmlResourceHandler;
|
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)
|
// Get colour in HTML syntax (#RRGGBB)
|
||||||
wxColour GetColour(const wxString& param);
|
wxColour GetColour(const wxString& param);
|
||||||
|
|
||||||
|
// Get size/position:
|
||||||
wxSize GetSize(const wxString& param = _T("size"));
|
wxSize GetSize(const wxString& param = _T("size"));
|
||||||
wxPoint GetPosition(const wxString& param = _T("pos"));
|
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:
|
// Sets common window options:
|
||||||
void SetupWindow(wxWindow *wnd);
|
void SetupWindow(wxWindow *wnd);
|
||||||
|
|
||||||
@ -247,6 +265,9 @@ class WXDLLEXPORT wxXmlResourceHandler : public wxObject
|
|||||||
GetParamNode("children")*/);
|
GetParamNode("children")*/);
|
||||||
wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL)
|
wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL)
|
||||||
{ return m_Resource->CreateResFromNode(node, parent, instance); }
|
{ return m_Resource->CreateResFromNode(node, parent, instance); }
|
||||||
|
|
||||||
|
// helper
|
||||||
|
wxFileSystem& GetCurFileSystem() { return m_Resource->GetCurFileSystem(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ADD_STYLE(style) AddStyle(_T(#style), style)
|
#define ADD_STYLE(style) AddStyle(_T(#style), style)
|
||||||
|
@ -21,8 +21,6 @@
|
|||||||
|
|
||||||
#include "wx/xml/xh_stbmp.h"
|
#include "wx/xml/xh_stbmp.h"
|
||||||
#include "wx/statbmp.h"
|
#include "wx/statbmp.h"
|
||||||
#include "wx/image.h"
|
|
||||||
#include "wx/bitmap.h"
|
|
||||||
|
|
||||||
wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler()
|
wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler()
|
||||||
: wxXmlResourceHandler()
|
: wxXmlResourceHandler()
|
||||||
@ -31,14 +29,9 @@ wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler()
|
|||||||
|
|
||||||
wxObject *wxStaticBitmapXmlHandler::DoCreateResource()
|
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,
|
wxStaticBitmap *bmp = new wxStaticBitmap(m_ParentAsWindow,
|
||||||
GetID(),
|
GetID(),
|
||||||
img.ConvertToBitmap(),
|
GetBitmap(_T("bitmap"), GetSize()),
|
||||||
GetPosition(), GetSize(),
|
GetPosition(), GetSize(),
|
||||||
GetStyle(),
|
GetStyle(),
|
||||||
GetName()
|
GetName()
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
#include "wx/tokenzr.h"
|
#include "wx/tokenzr.h"
|
||||||
#include "wx/module.h"
|
#include "wx/module.h"
|
||||||
|
#include "wx/bitmap.h"
|
||||||
|
#include "wx/image.h"
|
||||||
|
|
||||||
#include "wx/xml/xml.h"
|
#include "wx/xml/xml.h"
|
||||||
#include "wx/xml/xmlres.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 *wxXmlResource::LoadDialog(wxWindow *parent, const wxString& name)
|
||||||
{
|
{
|
||||||
wxDialog *dialog = new wxDialog;
|
wxDialog *dialog = new wxDialog;
|
||||||
@ -296,7 +305,12 @@ wxXmlNode *wxXmlResource::FindResource(const wxString& name, const wxString& typ
|
|||||||
(!type || node->GetName() == type) &&
|
(!type || node->GetName() == type) &&
|
||||||
node->GetPropVal(wxT("name"), &dummy) &&
|
node->GetPropVal(wxT("name"), &dummy) &&
|
||||||
dummy == name)
|
dummy == name)
|
||||||
|
{
|
||||||
|
#if wxUSE_FILESYSTEM
|
||||||
|
m_CurFileSystem.ChangePathTo(m_Data[f].File);
|
||||||
|
#endif
|
||||||
return node;
|
return node;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxLogError(_("XML resource '%s' (type '%s') not found!"),
|
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 *wxXmlResourceHandler::GetParamNode(const wxString& param)
|
||||||
{
|
{
|
||||||
wxXmlNode *n = m_Node->GetChildren();
|
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) children_node = GetParamNode(_T("children"));
|
||||||
if (children_node == NULL) return;
|
if (children_node == NULL) return;
|
||||||
|
|
||||||
wxXmlNode *n = children_node->GetChildren();
|
wxXmlNode *n = children_node->GetChildren();
|
||||||
|
|
||||||
while (n)
|
while (n)
|
||||||
{
|
{
|
||||||
if (n->GetType() == wxXML_ELEMENT_NODE)
|
if (n->GetType() == wxXML_ELEMENT_NODE)
|
||||||
@ -646,7 +704,6 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent,
|
|||||||
|
|
||||||
// --------------- XMLID implementation -----------------------------
|
// --------------- XMLID implementation -----------------------------
|
||||||
|
|
||||||
|
|
||||||
#define XMLID_TABLE_SIZE 1024
|
#define XMLID_TABLE_SIZE 1024
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user