]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xrc/xh_treebk.cpp
Don't call wxSafeYield() from wxGenericListCtrl::EditLabel().
[wxWidgets.git] / src / xrc / xh_treebk.cpp
index 9b4513fdcc24ccdb289f6cd97db7f37c509c86ff..591d8c50f0f0b7f6d56df15568c3b9fbaff32010 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        xh_treebk.cpp
+// Name:        src/xrc/xh_treebk.cpp
 // Purpose:     XRC resource handler for wxTreebook
 // Author:      Evgeniy Tarassov
 // Created:     2005/09/28
 
 #include "wx/xrc/xh_treebk.h"
 
+#ifndef WX_PRECOMP
+    #include "wx/log.h"
+#endif
+
 #include "wx/treebook.h"
 #include "wx/imaglist.h"
-#include "wx/log.h"
 
 IMPLEMENT_DYNAMIC_CLASS(wxTreebookXmlHandler, wxXmlResourceHandler)
 
 wxTreebookXmlHandler::wxTreebookXmlHandler()
-: wxXmlResourceHandler(), m_isInside(false), m_tbk(NULL), m_treeContext()
+                    : wxXmlResourceHandler(),
+                      m_tbk(NULL),
+                      m_isInside(false)
 {
-    XRC_ADD_STYLE(wxTBK_DEFAULT);
-    XRC_ADD_STYLE(wxTBK_LEFT);
-    XRC_ADD_STYLE(wxTBK_RIGHT);
+    XRC_ADD_STYLE(wxBK_DEFAULT);
+    XRC_ADD_STYLE(wxBK_TOP);
+    XRC_ADD_STYLE(wxBK_BOTTOM);
+    XRC_ADD_STYLE(wxBK_LEFT);
+    XRC_ADD_STYLE(wxBK_RIGHT);
 
     AddWindowStyles();
 }
@@ -54,6 +61,10 @@ wxObject *wxTreebookXmlHandler::DoCreateResource()
                     GetStyle(wxT("style")),
                     GetName());
 
+        wxImageList *imagelist = GetImageList();
+        if ( imagelist )
+            tbk->AssignImageList(imagelist);
+
         wxTreebook * old_par = m_tbk;
         m_tbk = tbk;
 
@@ -65,6 +76,24 @@ wxObject *wxTreebookXmlHandler::DoCreateResource()
 
         CreateChildren(m_tbk, true/*only this handler*/);
 
+        wxXmlNode *node = GetParamNode("object");
+        int pageIndex = 0;
+        for (unsigned int i = 0; i < m_tbk->GetPageCount(); i++)
+        {
+            if ( m_tbk->GetPage(i) )
+            {
+                wxXmlNode *child = node->GetChildren();
+                while (child)
+                {
+                    if (child->GetName() == "expanded" && child->GetNodeContent() == "1")
+                        m_tbk->ExpandNode(pageIndex, true);
+
+                    child = child->GetNext();
+                }
+                pageIndex++;
+            }
+        }
+
         m_treeContext = old_treeContext;
         m_isInside = old_ins;
         m_tbk = old_par;
@@ -88,12 +117,14 @@ wxObject *wxTreebookXmlHandler::DoCreateResource()
         wnd = wxDynamicCast(item, wxWindow);
 
         if (wnd == NULL && item != NULL)
-            wxLogError(wxT("Error in resource: control within treebook's <page> tag is not a window."));
+        {
+            ReportError(n, "treebookpage child must be a window");
+        }
     }
 
     size_t depth = GetLong( wxT("depth") );
-    
-    if( depth <= m_treeContext.Count() )
+
+    if( depth <= m_treeContext.GetCount() )
     {
         // first prepare the icon
         int imgIndex = wxNOT_FOUND;
@@ -108,10 +139,22 @@ wxObject *wxTreebookXmlHandler::DoCreateResource()
             }
             imgIndex = imgList->Add(bmp);
         }
+        else if ( HasParam(wxT("image")) )
+        {
+            if ( m_tbk->GetImageList() )
+            {
+                imgIndex = GetLong(wxT("image"));
+            }
+            else // image without image list?
+            {
+                ReportError(n, "image can only be used in conjunction "
+                               "with imagelist");
+            }
+        }
 
         // then add the page to the corresponding parent
-        if( depth < m_treeContext.Count() )
-            m_treeContext.RemoveAt(depth, m_treeContext.Count() - depth );
+        if( depth < m_treeContext.GetCount() )
+            m_treeContext.RemoveAt(depth, m_treeContext.GetCount() - depth );
         if( depth == 0)
         {
             m_tbk->AddPage(wnd,
@@ -119,15 +162,18 @@ wxObject *wxTreebookXmlHandler::DoCreateResource()
         }
         else
         {
-            m_tbk->AddSubPage(m_treeContext.Item(depth - 1), wnd,
+            m_tbk->InsertSubPage(m_treeContext.Item(depth - 1), wnd,
                 GetText(wxT("label")), GetBool(wxT("selected")), imgIndex);
         }
-        
+
         m_treeContext.Add( m_tbk->GetPageCount() - 1);
-        
+
     }
     else
-        wxLogError(wxT("Error in resource. wxTreebookPage has an invalid depth."));
+    {
+        ReportParamError("depth", "invalid depth");
+    }
+
     return wnd;
 }