]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xrc/xmlres.cpp
fix wxCheckListBox which was completely broken by the Unicode changes
[wxWidgets.git] / src / xrc / xmlres.cpp
index 2106d04ff7220635293bf413fd7866a23f7ce8b3..0a1b72cd3a352efede382725cee04ab4ecc9074c 100644 (file)
@@ -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);