X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/af1337b041be734b7e64bcf7a06086268ae6895e..27f35b6674b796e61986681261ec7a96bef93502:/src/xrc/xmlres.cpp diff --git a/src/xrc/xmlres.cpp b/src/xrc/xmlres.cpp index 2106d04ff7..0a1b72cd3a 100644 --- a/src/xrc/xmlres.cpp +++ b/src/xrc/xmlres.cpp @@ -132,6 +132,12 @@ void wxXmlResource::AddHandler(wxXmlResourceHandler *handler) handler->SetParentResource(this); } +void wxXmlResource::InsertHandler(wxXmlResourceHandler *handler) +{ + m_handlers.Insert(handler); + handler->SetParentResource(this); +} + void wxXmlResource::ClearHandlers() @@ -165,10 +171,7 @@ wxToolBar *wxXmlResource::LoadToolBar(wxWindow *parent, const wxString& name) wxDialog *wxXmlResource::LoadDialog(wxWindow *parent, const wxString& name) { - wxDialog *dialog = new wxDialog; - if (!LoadDialog(dialog, parent, name)) - { delete dialog; return NULL; } - else return dialog; + return (wxDialog*)CreateResFromNode(FindResource(name, wxT("wxDialog")), parent, NULL); } bool wxXmlResource::LoadDialog(wxDialog *dlg, wxWindow *parent, const wxString& name) @@ -188,6 +191,11 @@ bool wxXmlResource::LoadPanel(wxPanel *panel, wxWindow *parent, const wxString& return CreateResFromNode(FindResource(name, wxT("wxPanel")), parent, panel) != NULL; } +wxFrame *wxXmlResource::LoadFrame(wxWindow* parent, const wxString& name) +{ + return (wxFrame*)CreateResFromNode(FindResource(name, wxT("wxFrame")), parent, NULL); +} + bool wxXmlResource::LoadFrame(wxFrame* frame, wxWindow *parent, const wxString& name) { return CreateResFromNode(FindResource(name, wxT("wxFrame")), parent, frame) != NULL; @@ -213,6 +221,18 @@ wxIcon wxXmlResource::LoadIcon(const wxString& name) return rt; } + +wxObject *wxXmlResource::LoadObject(wxWindow *parent, const wxString& name, const wxString& classname) +{ + return CreateResFromNode(FindResource(name, classname), parent, NULL); +} + +bool wxXmlResource::LoadObject(wxObject *instance, wxWindow *parent, const wxString& name, const wxString& classname) +{ + return CreateResFromNode(FindResource(name, classname), parent, instance) != NULL; +} + + bool wxXmlResource::AttachUnknownControl(const wxString& name, wxWindow *control, wxWindow *parent) { @@ -269,8 +289,8 @@ static void ProcessPlatformProperty(wxXmlNode *node) } else { - node->RemoveChild(c); wxXmlNode *c2 = c->GetNext(); + node->RemoveChild(c); delete c; c = c2; } @@ -719,67 +739,6 @@ int wxXmlResourceHandler::GetID() -wxArtID wxXmlResourceHandler::GetStockID(const wxString& param) -{ - wxXmlNode *stockIDNode = GetParamNode(param); - if (stockIDNode == NULL) - return wxEmptyString; - - wxXmlNode *oldnode = m_node; - m_node = stockIDNode; - - wxArtID sid = m_node->GetPropVal(wxT("stock_id"), wxT("")); - - m_node = oldnode; - - if (sid.IsEmpty()) return wxEmptyString; -#define stdID(id) else if (sid == wxT(#id)) return id - stdID(wxART_ADD_BOOKMARK); stdID(wxART_DEL_BOOKMARK); - stdID(wxART_HELP_SIDE_PANEL); stdID(wxART_HELP_SETTINGS); - stdID(wxART_HELP_BOOK); stdID(wxART_HELP_FOLDER); - stdID(wxART_HELP_PAGE); stdID(wxART_GO_BACK); - stdID(wxART_GO_FORWARD); stdID(wxART_GO_UP); - stdID(wxART_GO_DOWN); stdID(wxART_GO_TO_PARENT); - stdID(wxART_GO_HOME); stdID(wxART_FILE_OPEN); - stdID(wxART_PRINT); stdID(wxART_HELP); stdID(wxART_TIP); - stdID(wxART_REPORT_VIEW); stdID(wxART_LIST_VIEW); - stdID(wxART_NEW_DIR); stdID(wxART_FOLDER); - stdID(wxART_GO_DIR_UP); stdID(wxART_EXECUTABLE_FILE); - stdID(wxART_NORMAL_FILE); stdID(wxART_TICK_MARK); - stdID(wxART_CROSS_MARK); stdID(wxART_ERROR); - stdID(wxART_QUESTION); stdID(wxART_WARNING); - stdID(wxART_INFORMATION); -#undef stdID - else return sid; -} - - - -wxArtClient wxXmlResourceHandler::GetStockClient(const wxString& param) -{ - wxXmlNode *stockClientNode = GetParamNode(param); - if (stockClientNode == NULL) - return wxEmptyString; - - wxXmlNode *oldnode = m_node; - m_node = stockClientNode; - - wxArtClient sid = m_node->GetPropVal(wxT("stock_client"), wxT("wxART_OTHER")); - - m_node = oldnode; - - if (sid.IsEmpty()) return wxEmptyString; -#define stdID(id) else if (sid == wxT(#id)) return id - stdID(wxART_TOOLBAR); stdID(wxART_MENU); - stdID(wxART_FRAME_ICON); stdID(wxART_CMN_DIALOG); - stdID(wxART_HELP_BROWSER); stdID(wxART_MESSAGE_BOX); - stdID(wxART_OTHER); -#undef stdID - else return sid; -} - - - wxString wxXmlResourceHandler::GetName() { return m_node->GetPropVal(wxT("name"), wxT("-1")); @@ -817,19 +776,30 @@ wxColour wxXmlResourceHandler::GetColour(const wxString& param) -wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, wxSize size) +wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, + const wxArtClient& defaultArtClient, + wxSize size) { - wxString stk = param; - if (!GetStockID(stk).IsEmpty()) + /* If the bitmap is specified as stock item, query wxArtProvider for it: */ + wxXmlNode *bmpNode = GetParamNode(param); + if ( bmpNode ) { - wxBitmap stockArt = wxArtProvider::GetBitmap(GetStockID(stk), - GetStockClient(stk), size); - if (stockArt != wxNullBitmap) - return stockArt; + wxString sid = bmpNode->GetPropVal(wxT("stock_id"), wxEmptyString); + if ( !sid.empty() ) + { + wxString scl = bmpNode->GetPropVal(wxT("stock_client"), defaultArtClient); + wxBitmap stockArt = + wxArtProvider::GetBitmap(wxART_MAKE_ART_ID_FROM_STR(sid), + wxART_MAKE_CLIENT_ID_FROM_STR(scl), + size); + if ( stockArt.Ok() ) + return stockArt; + } } + /* ...or load the bitmap from file: */ wxString name = GetParamValue(param); - if (name.IsEmpty()) return wxNullBitmap; + if (name.IsEmpty()) return wxNullBitmap; #if wxUSE_FILESYSTEM wxFSFile *fsfile = GetCurFileSystem().OpenFile(name); if (fsfile == NULL) @@ -855,11 +825,13 @@ wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, wxSize size) -wxIcon wxXmlResourceHandler::GetIcon(const wxString& param, wxSize size) +wxIcon wxXmlResourceHandler::GetIcon(const wxString& param, + const wxArtClient& defaultArtClient, + wxSize size) { #if wxCHECK_VERSION(2,3,0) || defined(__WXMSW__) wxIcon icon; - icon.CopyFromBitmap(GetBitmap(param, size)); + icon.CopyFromBitmap(GetBitmap(param, defaultArtClient, size)); #else wxIcon *iconpt; wxBitmap bmppt = GetBitmap(param, size);