1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/xrc/xh_listb.cpp
3// Purpose:     XRC resource for wxListBox
4// Author:      Bob Mitchell & Vaclav Slavik
5// Created:     2000/07/29
6// RCS-ID:      $Id: xh_listb.cpp 42258 2006-10-22 22:12:32Z VZ $
7// Copyright:   (c) 2000 Bob Mitchell and Verant Interactive
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_LISTBOX
19
20#include "wx/xrc/xh_listb.h"
21
22#ifndef WX_PRECOMP
23    #include "wx/intl.h"
24    #include "wx/listbox.h"
25#endif
26
27IMPLEMENT_DYNAMIC_CLASS(wxListBoxXmlHandler, wxXmlResourceHandler)
28
29wxListBoxXmlHandler::wxListBoxXmlHandler()
30                   : wxXmlResourceHandler(),
31                     m_insideBox(false)
32{
33    XRC_ADD_STYLE(wxLB_SINGLE);
34    XRC_ADD_STYLE(wxLB_MULTIPLE);
35    XRC_ADD_STYLE(wxLB_EXTENDED);
36    XRC_ADD_STYLE(wxLB_HSCROLL);
37    XRC_ADD_STYLE(wxLB_ALWAYS_SB);
38    XRC_ADD_STYLE(wxLB_NEEDED_SB);
39    XRC_ADD_STYLE(wxLB_SORT);
40    AddWindowStyles();
41}
42
43wxObject *wxListBoxXmlHandler::DoCreateResource()
44{
45    if ( m_class == wxT("wxListBox"))
46    {
47        // find the selection
48        long selection = GetLong(wxT("selection"), -1);
49
50        // need to build the list of strings from children
51        m_insideBox = true;
52        CreateChildrenPrivately(NULL, GetParamNode(wxT("content")));
53        m_insideBox = false;
54
55        XRC_MAKE_INSTANCE(control, wxListBox)
56
57        control->Create(m_parentAsWindow,
58                        GetID(),
59                        GetPosition(), GetSize(),
60                        strList,
61                        GetStyle(),
62                        wxDefaultValidator,
63                        GetName());
64
65        if (selection != -1)
66            control->SetSelection(selection);
67
68        SetupWindow(control);
69        strList.Clear();    // dump the strings
70
71        return control;
72    }
73    else
74    {
75        // on the inside now.
76        // handle <item>Label</item>
77
78        // add to the list
79        wxString str = GetNodeContent(m_node);
80        if (m_resource->GetFlags() & wxXRC_USE_LOCALE)
81            str = wxGetTranslation(str, m_resource->GetDomain());
82        strList.Add(str);
83
84        return NULL;
85    }
86}
87
88bool wxListBoxXmlHandler::CanHandle(wxXmlNode *node)
89{
90    return (IsOfClass(node, wxT("wxListBox")) ||
91           (m_insideBox && node->GetName() == wxT("item")));
92}
93
94#endif // wxUSE_XRC && wxUSE_LISTBOX
95