~brian-sidebotham/wxwidgets-cmake/wxpython-2.9.4

« back to all changes in this revision

Viewing changes to samples/widgets/editlbox.cpp

  • Committer: Brian Sidebotham
  • Date: 2013-08-03 14:30:08 UTC
  • Revision ID: brian.sidebotham@gmail.com-20130803143008-c7806tkych1tp6fc
Initial import into Bazaar

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/////////////////////////////////////////////////////////////////////////////
 
2
// Program:     wxWidgets Widgets Sample
 
3
// Name:        editlbox.cpp
 
4
// Purpose:     Part of the widgets sample showing wxEditableListbox
 
5
// Author:      Francesco Montorsi
 
6
// Created:     8/2/2009
 
7
// Id:          $Id: editlbox.cpp 64940 2010-07-13 13:29:13Z VZ $
 
8
// Copyright:   (c) 2009 Francesco Montorsi
 
9
// Licence:     wxWindows licence
 
10
/////////////////////////////////////////////////////////////////////////////
 
11
 
 
12
// ============================================================================
 
13
// declarations
 
14
// ============================================================================
 
15
 
 
16
// ----------------------------------------------------------------------------
 
17
// headers
 
18
// ----------------------------------------------------------------------------
 
19
 
 
20
// for compilers that support precompilation, includes "wx/wx.h".
 
21
#include "wx/wxprec.h"
 
22
 
 
23
#ifdef __BORLANDC__
 
24
    #pragma hdrstop
 
25
#endif
 
26
 
 
27
#if wxUSE_EDITABLELISTBOX
 
28
 
 
29
// for all others, include the necessary headers
 
30
#ifndef WX_PRECOMP
 
31
    #include "wx/log.h"
 
32
 
 
33
    #include "wx/bitmap.h"
 
34
    #include "wx/button.h"
 
35
    #include "wx/checkbox.h"
 
36
    #include "wx/combobox.h"
 
37
    #include "wx/listbox.h"
 
38
    #include "wx/radiobox.h"
 
39
    #include "wx/statbox.h"
 
40
    #include "wx/textctrl.h"
 
41
#endif
 
42
 
 
43
#include "wx/sizer.h"
 
44
#include "wx/editlbox.h"
 
45
#include "wx/listctrl.h"
 
46
 
 
47
#include "itemcontainer.h"
 
48
#include "widgets.h"
 
49
 
 
50
#include "icons/listbox.xpm"
 
51
 
 
52
// ----------------------------------------------------------------------------
 
53
// constants
 
54
// ----------------------------------------------------------------------------
 
55
 
 
56
// control ids
 
57
enum
 
58
{
 
59
    EditableListboxPage_Reset = wxID_HIGHEST,
 
60
    EditableListboxPage_Listbox,
 
61
    EditableListboxPage_ContainerTests
 
62
};
 
63
 
 
64
// ----------------------------------------------------------------------------
 
65
// EditableListboxWidgetsPage
 
66
// ----------------------------------------------------------------------------
 
67
 
 
68
class EditableListboxWidgetsPage : public WidgetsPage
 
69
{
 
70
public:
 
71
    EditableListboxWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist);
 
72
 
 
73
    virtual wxControl *GetWidget() const { return m_lbox->GetListCtrl(); }
 
74
    virtual void RecreateWidget() { CreateLbox(); }
 
75
 
 
76
    // lazy creation of the content
 
77
    virtual void CreateContent();
 
78
 
 
79
protected:
 
80
    // event handlers
 
81
    void OnButtonReset(wxCommandEvent& event);
 
82
    void OnCheckBox(wxCommandEvent& event);
 
83
 
 
84
    // reset the listbox parameters
 
85
    void Reset();
 
86
 
 
87
    // (re)create the listbox
 
88
    void CreateLbox();
 
89
 
 
90
    // the checkboxes
 
91
    wxCheckBox *m_chkAllowNew,
 
92
               *m_chkAllowEdit,
 
93
               *m_chkAllowDelete,
 
94
               *m_chkAllowNoReorder;
 
95
 
 
96
    wxEditableListBox
 
97
                  *m_lbox;
 
98
 
 
99
    wxSizer *m_sizerLbox;
 
100
 
 
101
private:
 
102
    DECLARE_EVENT_TABLE()
 
103
    DECLARE_WIDGETS_PAGE(EditableListboxWidgetsPage)
 
104
};
 
105
 
 
106
// ----------------------------------------------------------------------------
 
107
// event tables
 
108
// ----------------------------------------------------------------------------
 
109
 
 
110
BEGIN_EVENT_TABLE(EditableListboxWidgetsPage, WidgetsPage)
 
111
    EVT_BUTTON(EditableListboxPage_Reset, EditableListboxWidgetsPage::OnButtonReset)
 
112
    EVT_CHECKBOX(wxID_ANY, EditableListboxWidgetsPage::OnCheckBox)
 
113
END_EVENT_TABLE()
 
114
 
 
115
// ============================================================================
 
116
// implementation
 
117
// ============================================================================
 
118
 
 
119
IMPLEMENT_WIDGETS_PAGE(EditableListboxWidgetsPage, wxT("EditableListbox"), GENERIC_CTRLS);
 
120
 
 
121
EditableListboxWidgetsPage::EditableListboxWidgetsPage(WidgetsBookCtrl *book,
 
122
                                                       wxImageList *imaglist)
 
123
                  : WidgetsPage(book, imaglist, listbox_xpm)
 
124
{
 
125
 
 
126
}
 
127
 
 
128
void EditableListboxWidgetsPage::CreateContent()
 
129
{
 
130
    /*
 
131
       What we create here is a frame having 2 panes: style pane is the
 
132
       leftmost one and the pane containing the listbox itself to the right
 
133
    */
 
134
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 
135
 
 
136
    // left pane
 
137
    wxStaticBox *box = new wxStaticBox(this, wxID_ANY,
 
138
                                       wxT("&Set listbox parameters"));
 
139
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 
140
 
 
141
    m_chkAllowNew = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("Allow new items"));
 
142
    m_chkAllowEdit = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("Allow editing items"));
 
143
    m_chkAllowDelete = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("Allow deleting items"));
 
144
    m_chkAllowNoReorder = CreateCheckBoxAndAddToSizer(sizerLeft, wxT("Block user reordering"));
 
145
 
 
146
    wxButton *btn = new wxButton(this, EditableListboxPage_Reset, wxT("&Reset"));
 
147
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 
148
 
 
149
    // right pane
 
150
    wxSizer *sizerRight = new wxBoxSizer(wxVERTICAL);
 
151
    m_lbox = new wxEditableListBox(this, EditableListboxPage_Listbox,
 
152
                                    _("Match these wildcards:"),
 
153
                                    wxDefaultPosition, wxDefaultSize, 0);
 
154
    sizerRight->Add(m_lbox, 1, wxGROW | wxALL, 5);
 
155
    sizerRight->SetMinSize(150, 0);
 
156
    m_sizerLbox = sizerRight; // save it to modify it later
 
157
 
 
158
    // the 3 panes panes compose the window
 
159
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 
160
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 
161
 
 
162
    // final initializations
 
163
    Reset();
 
164
 
 
165
    SetSizer(sizerTop);
 
166
}
 
167
 
 
168
// ----------------------------------------------------------------------------
 
169
// operations
 
170
// ----------------------------------------------------------------------------
 
171
 
 
172
void EditableListboxWidgetsPage::Reset()
 
173
{
 
174
    m_chkAllowNew->SetValue(false);
 
175
    m_chkAllowEdit->SetValue(false);
 
176
    m_chkAllowDelete->SetValue(false);
 
177
    m_chkAllowNoReorder->SetValue(false);
 
178
}
 
179
 
 
180
void EditableListboxWidgetsPage::CreateLbox()
 
181
{
 
182
    int flags = 0;
 
183
 
 
184
    if ( m_chkAllowNew->GetValue() )
 
185
        flags |= wxEL_ALLOW_NEW;
 
186
    if ( m_chkAllowEdit->GetValue() )
 
187
        flags |= wxEL_ALLOW_EDIT;
 
188
    if ( m_chkAllowDelete->GetValue() )
 
189
        flags |= wxEL_ALLOW_DELETE;
 
190
    if ( m_chkAllowNoReorder->GetValue() )
 
191
        flags |= wxEL_NO_REORDER;
 
192
 
 
193
    wxArrayString items;
 
194
    if ( m_lbox )
 
195
    {
 
196
        m_lbox->GetStrings(items);
 
197
        m_sizerLbox->Detach( m_lbox );
 
198
        delete m_lbox;
 
199
    }
 
200
 
 
201
    m_lbox = new wxEditableListBox(this, EditableListboxPage_Listbox,
 
202
                                   _("Match these wildcards:"),
 
203
                                   wxDefaultPosition, wxDefaultSize,
 
204
                                   flags);
 
205
 
 
206
    m_lbox->SetStrings(items);
 
207
    m_sizerLbox->Add(m_lbox, 1, wxGROW | wxALL, 5);
 
208
    m_sizerLbox->Layout();
 
209
}
 
210
 
 
211
// ----------------------------------------------------------------------------
 
212
// event handlers
 
213
// ----------------------------------------------------------------------------
 
214
 
 
215
void EditableListboxWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 
216
{
 
217
    Reset();
 
218
 
 
219
    CreateLbox();
 
220
}
 
221
 
 
222
void EditableListboxWidgetsPage::OnCheckBox(wxCommandEvent& WXUNUSED(event))
 
223
{
 
224
    CreateLbox();
 
225
}
 
226
 
 
227
#endif // wxUSE_EDITABLELISTBOX