1///////////////////////////////////////////////////////////////////////////// 2// Name: src/xrc/xh_choicbk.cpp 3// Purpose: XRC resource for wxChoicebook 4// Author: Vaclav Slavik 5// Created: 2000/03/21 6// RCS-ID: $Id: xh_choicbk.cpp 39627 2006-06-08 06:57:39Z ABX $ 7// Copyright: (c) 2000 Vaclav Slavik 8// Licence: wxWindows licence 9///////////////////////////////////////////////////////////////////////////// 10 11// For compilers that support precompilation, includes "wx.h". 12#include "wx/wxprec.h" 13 14#ifdef __BORLANDC__ 15 #pragma hdrstop 16#endif 17 18#if wxUSE_XRC && wxUSE_CHOICEBOOK 19 20#include "wx/xrc/xh_choicbk.h" 21 22#ifndef WX_PRECOMP 23 #include "wx/log.h" 24 #include "wx/sizer.h" 25#endif 26 27#include "wx/choicebk.h" 28#include "wx/imaglist.h" 29 30IMPLEMENT_DYNAMIC_CLASS(wxChoicebookXmlHandler, wxXmlResourceHandler) 31 32wxChoicebookXmlHandler::wxChoicebookXmlHandler() 33 :wxXmlResourceHandler(), 34 m_isInside(false), 35 m_choicebook(NULL) 36{ 37 XRC_ADD_STYLE(wxBK_DEFAULT); 38 XRC_ADD_STYLE(wxBK_LEFT); 39 XRC_ADD_STYLE(wxBK_RIGHT); 40 XRC_ADD_STYLE(wxBK_TOP); 41 XRC_ADD_STYLE(wxBK_BOTTOM); 42 43#if WXWIN_COMPATIBILITY_2_6 44 XRC_ADD_STYLE(wxCHB_DEFAULT); 45 XRC_ADD_STYLE(wxCHB_LEFT); 46 XRC_ADD_STYLE(wxCHB_RIGHT); 47 XRC_ADD_STYLE(wxCHB_TOP); 48 XRC_ADD_STYLE(wxCHB_BOTTOM); 49#endif 50 51 AddWindowStyles(); 52} 53 54wxObject *wxChoicebookXmlHandler::DoCreateResource() 55{ 56 if (m_class == wxT("choicebookpage")) 57 { 58 wxXmlNode *n = GetParamNode(wxT("object")); 59 60 if ( !n ) 61 n = GetParamNode(wxT("object_ref")); 62 63 if (n) 64 { 65 bool old_ins = m_isInside; 66 m_isInside = false; 67 wxObject *item = CreateResFromNode(n, m_choicebook, NULL); 68 m_isInside = old_ins; 69 wxWindow *wnd = wxDynamicCast(item, wxWindow); 70 71 if (wnd) 72 { 73 m_choicebook->AddPage(wnd, GetText(wxT("label")), 74 GetBool(wxT("selected"))); 75 if ( HasParam(wxT("bitmap")) ) 76 { 77 wxBitmap bmp = GetBitmap(wxT("bitmap"), wxART_OTHER); 78 wxImageList *imgList = m_choicebook->GetImageList(); 79 if ( imgList == NULL ) 80 { 81 imgList = new wxImageList( bmp.GetWidth(), bmp.GetHeight() ); 82 m_choicebook->AssignImageList( imgList ); 83 } 84 int imgIndex = imgList->Add(bmp); 85 m_choicebook->SetPageImage(m_choicebook->GetPageCount()-1, imgIndex ); 86 } 87 } 88 else 89 wxLogError(wxT("Error in resource.")); 90 return wnd; 91 } 92 else 93 { 94 wxLogError(wxT("Error in resource: no control within choicebook's <page> tag.")); 95 return NULL; 96 } 97 } 98 99 else 100 { 101 XRC_MAKE_INSTANCE(nb, wxChoicebook) 102 103 nb->Create(m_parentAsWindow, 104 GetID(), 105 GetPosition(), GetSize(), 106 GetStyle(wxT("style")), 107 GetName()); 108 109 wxChoicebook *old_par = m_choicebook; 110 m_choicebook = nb; 111 bool old_ins = m_isInside; 112 m_isInside = true; 113 CreateChildren(m_choicebook, true/*only this handler*/); 114 m_isInside = old_ins; 115 m_choicebook = old_par; 116 117 return nb; 118 } 119} 120 121bool wxChoicebookXmlHandler::CanHandle(wxXmlNode *node) 122{ 123 return ((!m_isInside && IsOfClass(node, wxT("wxChoicebook"))) || 124 (m_isInside && IsOfClass(node, wxT("choicebookpage")))); 125} 126 127#endif // wxUSE_XRC && wxUSE_CHOICEBOOK 128