///////////////////////////////////////////////////////////////////////////// // Name: src/xrc/xh_notbk.cpp // Purpose: XRC resource for wxNotebook // Author: Vaclav Slavik // Created: 2000/03/21 // RCS-ID: $Id: xh_notbk.cpp 39627 2006-06-08 06:57:39Z ABX $ // Copyright: (c) 2000 Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #if wxUSE_XRC && wxUSE_NOTEBOOK #include "wx/xrc/xh_notbk.h" #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/sizer.h" #endif #include "wx/notebook.h" #include "wx/imaglist.h" IMPLEMENT_DYNAMIC_CLASS(wxNotebookXmlHandler, wxXmlResourceHandler) wxNotebookXmlHandler::wxNotebookXmlHandler() :wxXmlResourceHandler(), m_isInside(false), m_notebook(NULL) { XRC_ADD_STYLE(wxBK_DEFAULT); XRC_ADD_STYLE(wxBK_LEFT); XRC_ADD_STYLE(wxBK_RIGHT); XRC_ADD_STYLE(wxBK_TOP); XRC_ADD_STYLE(wxBK_BOTTOM); #if WXWIN_COMPATIBILITY_2_6 XRC_ADD_STYLE(wxNB_DEFAULT); XRC_ADD_STYLE(wxNB_LEFT); XRC_ADD_STYLE(wxNB_RIGHT); XRC_ADD_STYLE(wxNB_TOP); XRC_ADD_STYLE(wxNB_BOTTOM); #endif XRC_ADD_STYLE(wxNB_FIXEDWIDTH); XRC_ADD_STYLE(wxNB_MULTILINE); XRC_ADD_STYLE(wxNB_NOPAGETHEME); AddWindowStyles(); } wxObject *wxNotebookXmlHandler::DoCreateResource() { if (m_class == wxT("notebookpage")) { wxXmlNode *n = GetParamNode(wxT("object")); if ( !n ) n = GetParamNode(wxT("object_ref")); if (n) { bool old_ins = m_isInside; m_isInside = false; wxObject *item = CreateResFromNode(n, m_notebook, NULL); m_isInside = old_ins; wxWindow *wnd = wxDynamicCast(item, wxWindow); if (wnd) { m_notebook->AddPage(wnd, GetText(wxT("label")), GetBool(wxT("selected"))); if ( HasParam(wxT("bitmap")) ) { wxBitmap bmp = GetBitmap(wxT("bitmap"), wxART_OTHER); wxImageList *imgList = m_notebook->GetImageList(); if ( imgList == NULL ) { imgList = new wxImageList( bmp.GetWidth(), bmp.GetHeight() ); m_notebook->AssignImageList( imgList ); } int imgIndex = imgList->Add(bmp); m_notebook->SetPageImage(m_notebook->GetPageCount()-1, imgIndex ); } } else wxLogError(wxT("Error in resource.")); return wnd; } else { wxLogError(wxT("Error in resource: no control within notebook's tag.")); return NULL; } } else { XRC_MAKE_INSTANCE(nb, wxNotebook) nb->Create(m_parentAsWindow, GetID(), GetPosition(), GetSize(), GetStyle(wxT("style")), GetName()); SetupWindow(nb); wxNotebook *old_par = m_notebook; m_notebook = nb; bool old_ins = m_isInside; m_isInside = true; CreateChildren(m_notebook, true/*only this handler*/); m_isInside = old_ins; m_notebook = old_par; return nb; } } bool wxNotebookXmlHandler::CanHandle(wxXmlNode *node) { return ((!m_isInside && IsOfClass(node, wxT("wxNotebook"))) || (m_isInside && IsOfClass(node, wxT("notebookpage")))); } #endif // wxUSE_XRC && wxUSE_NOTEBOOK