1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/xrc/xh_treebk.cpp 
   3 // Purpose:     XRC resource handler for wxTreebook 
   4 // Author:      Evgeniy Tarassov 
   7 // Copyright:   (c) 2005 TT-Solutions <vadim@tt-solutions.com> 
   8 // Licence:     wxWindows licence 
   9 ///////////////////////////////////////////////////////////////////////////// 
  11 // For compilers that support precompilation, includes "wx.h". 
  12 #include "wx/wxprec.h" 
  18 #if wxUSE_XRC && wxUSE_TREEBOOK 
  20 #include "wx/xrc/xh_treebk.h" 
  26 #include "wx/treebook.h" 
  27 #include "wx/imaglist.h" 
  29 IMPLEMENT_DYNAMIC_CLASS(wxTreebookXmlHandler
, wxXmlResourceHandler
) 
  31 wxTreebookXmlHandler::wxTreebookXmlHandler() 
  32                     : wxXmlResourceHandler(), 
  36     XRC_ADD_STYLE(wxBK_DEFAULT
); 
  37     XRC_ADD_STYLE(wxBK_TOP
); 
  38     XRC_ADD_STYLE(wxBK_BOTTOM
); 
  39     XRC_ADD_STYLE(wxBK_LEFT
); 
  40     XRC_ADD_STYLE(wxBK_RIGHT
); 
  45 bool wxTreebookXmlHandler::CanHandle(wxXmlNode 
*node
) 
  47     return ((!m_isInside 
&& IsOfClass(node
, wxT("wxTreebook"))) || 
  48             (m_isInside 
&& IsOfClass(node
, wxT("treebookpage")))); 
  52 wxObject 
*wxTreebookXmlHandler::DoCreateResource() 
  54     if (m_class 
== wxT("wxTreebook")) 
  56         XRC_MAKE_INSTANCE(tbk
, wxTreebook
) 
  58         tbk
->Create(m_parentAsWindow
, 
  60                     GetPosition(), GetSize(), 
  61                     GetStyle(wxT("style")), 
  64         wxTreebook 
* old_par 
= m_tbk
; 
  67         bool old_ins 
= m_isInside
; 
  70         wxArrayTbkPageIndexes old_treeContext 
= m_treeContext
; 
  71         m_treeContext
.Clear(); 
  73         CreateChildren(m_tbk
, true/*only this handler*/); 
  75         m_treeContext 
= old_treeContext
; 
  82 //    else ( m_class == wxT("treebookpage") ) 
  83     wxXmlNode 
*n 
= GetParamNode(wxT("object")); 
  87         n 
= GetParamNode(wxT("object_ref")); 
  91         bool old_ins 
= m_isInside
; 
  93         wxObject 
*item 
= CreateResFromNode(n
, m_tbk
, NULL
); 
  95         wnd 
= wxDynamicCast(item
, wxWindow
); 
  97         if (wnd 
== NULL 
&& item 
!= NULL
) 
  98             wxLogError(wxT("Error in resource: control within treebook's <page> tag is not a window.")); 
 101     size_t depth 
= GetLong( wxT("depth") ); 
 103     if( depth 
<= m_treeContext
.Count() ) 
 105         // first prepare the icon 
 106         int imgIndex 
= wxNOT_FOUND
; 
 107         if ( HasParam(wxT("bitmap")) ) 
 109             wxBitmap bmp 
= GetBitmap(wxT("bitmap"), wxART_OTHER
); 
 110             wxImageList 
*imgList 
= m_tbk
->GetImageList(); 
 111             if ( imgList 
== NULL 
) 
 113                 imgList 
= new wxImageList( bmp
.GetWidth(), bmp
.GetHeight() ); 
 114                 m_tbk
->AssignImageList( imgList 
); 
 116             imgIndex 
= imgList
->Add(bmp
); 
 119         // then add the page to the corresponding parent 
 120         if( depth 
< m_treeContext
.Count() ) 
 121             m_treeContext
.RemoveAt(depth
, m_treeContext
.Count() - depth 
); 
 125                 GetText(wxT("label")), GetBool(wxT("selected")), imgIndex
); 
 129             m_tbk
->InsertSubPage(m_treeContext
.Item(depth 
- 1), wnd
, 
 130                 GetText(wxT("label")), GetBool(wxT("selected")), imgIndex
); 
 133         m_treeContext
.Add( m_tbk
->GetPageCount() - 1); 
 137         wxLogError(wxT("Error in resource. wxTreebookPage has an invalid depth.")); 
 141 #endif // wxUSE_XRC && wxUSE_TREEBOOK