]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/richtext/richtexttabspage.cpp
added references to XML classes
[wxWidgets.git] / src / richtext / richtexttabspage.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/richtext/richtexttabspage.cpp
3// Purpose:
4// Author: Julian Smart
5// Modified by:
6// Created: 10/4/2006 8:03:20 AM
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx/wx.h".
13#include "wx/wxprec.h"
14
15#ifdef __BORLANDC__
16 #pragma hdrstop
17#endif
18
19#if wxUSE_RICHTEXT
20
21#include "wx/richtext/richtexttabspage.h"
22
23#ifndef WX_PRECOMP
24#endif
25
26/*!
27 * wxRichTextTabsPage type definition
28 */
29
30IMPLEMENT_DYNAMIC_CLASS( wxRichTextTabsPage, wxPanel )
31
32/*!
33 * wxRichTextTabsPage event table definition
34 */
35
36BEGIN_EVENT_TABLE( wxRichTextTabsPage, wxPanel )
37
38////@begin wxRichTextTabsPage event table entries
39 EVT_LISTBOX( ID_RICHTEXTTABSPAGE_TABLIST, wxRichTextTabsPage::OnTablistSelected )
40
41 EVT_BUTTON( ID_RICHTEXTTABSPAGE_NEW_TAB, wxRichTextTabsPage::OnNewTabClick )
42 EVT_UPDATE_UI( ID_RICHTEXTTABSPAGE_NEW_TAB, wxRichTextTabsPage::OnNewTabUpdate )
43
44 EVT_BUTTON( ID_RICHTEXTTABSPAGE_DELETE_TAB, wxRichTextTabsPage::OnDeleteTabClick )
45 EVT_UPDATE_UI( ID_RICHTEXTTABSPAGE_DELETE_TAB, wxRichTextTabsPage::OnDeleteTabUpdate )
46
47 EVT_BUTTON( ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS, wxRichTextTabsPage::OnDeleteAllTabsClick )
48 EVT_UPDATE_UI( ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS, wxRichTextTabsPage::OnDeleteAllTabsUpdate )
49
50////@end wxRichTextTabsPage event table entries
51
52END_EVENT_TABLE()
53
54/*!
55 * wxRichTextTabsPage constructors
56 */
57
58wxRichTextTabsPage::wxRichTextTabsPage( )
59{
60 Init();
61}
62
63wxRichTextTabsPage::wxRichTextTabsPage( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
64{
65 Init();
66 Create(parent, id, pos, size, style);
67}
68
69/*!
70 * Initialise members
71 */
72
73void wxRichTextTabsPage::Init()
74{
75 m_tabsPresent = false;
76
77////@begin wxRichTextTabsPage member initialisation
78 m_tabEditCtrl = NULL;
79 m_tabListCtrl = NULL;
80////@end wxRichTextTabsPage member initialisation
81}
82
83/*!
84 * wxRichTextTabsPage creator
85 */
86
87bool wxRichTextTabsPage::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
88{
89////@begin wxRichTextTabsPage creation
90 wxPanel::Create( parent, id, pos, size, style );
91
92 CreateControls();
93 if (GetSizer())
94 {
95 GetSizer()->SetSizeHints(this);
96 }
97 Centre();
98////@end wxRichTextTabsPage creation
99 return true;
100}
101
102/*!
103 * Control creation for wxRichTextTabsPage
104 */
105
106void wxRichTextTabsPage::CreateControls()
107{
108////@begin wxRichTextTabsPage content construction
109 wxRichTextTabsPage* itemPanel1 = this;
110
111 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
112 itemPanel1->SetSizer(itemBoxSizer2);
113
114 wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
115 itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5);
116
117 wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
118 itemBoxSizer3->Add(itemBoxSizer4, 1, wxGROW, 5);
119
120 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
121 itemBoxSizer4->Add(itemBoxSizer5, 0, wxGROW, 5);
122
123 wxStaticText* itemStaticText6 = new wxStaticText( itemPanel1, wxID_STATIC, _("&Position (tenths of a mm):"), wxDefaultPosition, wxDefaultSize, 0 );
124 itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
125
126 m_tabEditCtrl = new wxTextCtrl( itemPanel1,
127 ID_RICHTEXTTABSPAGE_TABEDIT,
128 wxEmptyString,
129 wxDefaultPosition,
130 wxDefaultSize,
131 0 );
132 itemBoxSizer5->Add(m_tabEditCtrl, 0, wxGROW|wxALL, 5);
133
134 wxString* m_tabListCtrlStrings = NULL;
135 m_tabListCtrl = new wxListBox( itemPanel1, ID_RICHTEXTTABSPAGE_TABLIST, wxDefaultPosition, wxSize(80, 200), 0, m_tabListCtrlStrings, wxLB_SINGLE );
136 itemBoxSizer5->Add(m_tabListCtrl, 1, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
137
138 itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
139
140 wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxVERTICAL);
141 itemBoxSizer4->Add(itemBoxSizer10, 0, wxGROW, 5);
142
143 wxStaticText* itemStaticText11 = new wxStaticText( itemPanel1,
144 wxID_STATIC,
145 wxEmptyString,
146 wxDefaultPosition,
147 wxDefaultSize,
148 0 );
149 itemBoxSizer10->Add(itemStaticText11, 0, wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxADJUST_MINSIZE, 5);
150
151 wxButton* itemButton12 = new wxButton( itemPanel1, ID_RICHTEXTTABSPAGE_NEW_TAB, _("&New"), wxDefaultPosition, wxDefaultSize, 0 );
152 itemBoxSizer10->Add(itemButton12, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
153
154 wxButton* itemButton13 = new wxButton( itemPanel1, ID_RICHTEXTTABSPAGE_DELETE_TAB, _("&Delete"), wxDefaultPosition, wxDefaultSize, 0 );
155 itemBoxSizer10->Add(itemButton13, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxBOTTOM, 5);
156
157 wxButton* itemButton14 = new wxButton( itemPanel1, ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS, _("Delete A&ll"), wxDefaultPosition, wxDefaultSize, 0 );
158 itemBoxSizer10->Add(itemButton14, 0, wxALIGN_CENTER_HORIZONTAL|wxLEFT|wxRIGHT|wxBOTTOM, 5);
159
160////@end wxRichTextTabsPage content construction
161}
162
163/// Transfer data from/to window
164bool wxRichTextTabsPage::TransferDataFromWindow()
165{
166 wxPanel::TransferDataFromWindow();
167
168 wxTextAttrEx* attr = GetAttributes();
169
170 if (m_tabsPresent)
171 {
172 wxArrayInt tabs;
173 size_t i;
174 for (i = 0; i < m_tabListCtrl->GetCount(); i++)
175 {
176 tabs.Add(wxAtoi(m_tabListCtrl->GetString(i)));
177 }
178 attr->SetTabs(tabs);
179 }
180 return true;
181}
182
183bool wxRichTextTabsPage::TransferDataToWindow()
184{
185 wxPanel::TransferDataToWindow();
186
187 wxTextAttrEx* attr = GetAttributes();
188
189 m_tabListCtrl->Clear();
190 m_tabEditCtrl->SetValue(wxEmptyString);
191
192 if (attr->HasTabs())
193 {
194 m_tabsPresent = true;
195 size_t i;
196 for (i = 0; i < attr->GetTabs().GetCount(); i++)
197 {
198 wxString s(wxString::Format(wxT("%d"), attr->GetTabs()[i]));
199 m_tabListCtrl->Append(s);
200 }
201 }
202
203 return true;
204}
205
206static int wxTabSortFunc(int* a, int* b)
207{
208 if ((*a) < (*b))
209 return -1;
210 else if ((*b) < (*a))
211 return 1;
212 else
213 return 0;
214}
215
216/// Sorts the tab array
217void wxRichTextTabsPage::SortTabs()
218{
219 wxArrayInt tabs;
220 size_t i;
221 for (i = 0; i < m_tabListCtrl->GetCount(); i++)
222 {
223 tabs.Add(wxAtoi(m_tabListCtrl->GetString(i)));
224 }
225 tabs.Sort(& wxTabSortFunc);
226
227 m_tabListCtrl->Clear();
228 for (i = 0; i < tabs.GetCount(); i++)
229 {
230 wxString s(wxString::Format(wxT("%d"), tabs[i]));
231 m_tabListCtrl->Append(s);
232 }
233}
234
235wxTextAttrEx* wxRichTextTabsPage::GetAttributes()
236{
237 return wxRichTextFormattingDialog::GetDialogAttributes(this);
238}
239
240/*!
241 * Should we show tooltips?
242 */
243
244bool wxRichTextTabsPage::ShowToolTips()
245{
246 return true;
247}
248
249/*!
250 * Get bitmap resources
251 */
252
253wxBitmap wxRichTextTabsPage::GetBitmapResource( const wxString& name )
254{
255 // Bitmap retrieval
256////@begin wxRichTextTabsPage bitmap retrieval
257 wxUnusedVar(name);
258 return wxNullBitmap;
259////@end wxRichTextTabsPage bitmap retrieval
260}
261
262/*!
263 * Get icon resources
264 */
265
266wxIcon wxRichTextTabsPage::GetIconResource( const wxString& name )
267{
268 // Icon retrieval
269////@begin wxRichTextTabsPage icon retrieval
270 wxUnusedVar(name);
271 return wxNullIcon;
272////@end wxRichTextTabsPage icon retrieval
273}
274
275/*!
276 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_NEW_TAB
277 */
278
279void wxRichTextTabsPage::OnNewTabClick( wxCommandEvent& WXUNUSED(event) )
280{
281 wxString str = m_tabEditCtrl->GetValue();
282 if (!str.empty() && str.IsNumber())
283 {
284 wxString s(wxString::Format(wxT("%d"), wxAtoi(str)));
285
286 m_tabListCtrl->Append(s);
287 m_tabsPresent = true;
288
289 SortTabs();
290 }
291}
292
293/*!
294 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_NEW_TAB
295 */
296
297void wxRichTextTabsPage::OnNewTabUpdate( wxUpdateUIEvent& event )
298{
299 // This may be a bit expensive - consider updating New button when text
300 // changes in edit control
301 wxString str = m_tabEditCtrl->GetValue();
302 if (!str.empty() && str.IsNumber())
303 {
304 wxString s(wxString::Format(wxT("%d"), wxAtoi(str)));
305 event.Enable(m_tabListCtrl->FindString(s) == wxNOT_FOUND);
306 }
307 else
308 event.Enable(false);
309}
310
311
312/*!
313 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB
314 */
315
316void wxRichTextTabsPage::OnDeleteTabClick( wxCommandEvent& WXUNUSED(event) )
317{
318 if (m_tabsPresent && m_tabListCtrl->GetCount() > 0 && m_tabListCtrl->GetSelection() != wxNOT_FOUND)
319 {
320 m_tabListCtrl->Delete(m_tabListCtrl->GetSelection());
321 }
322}
323
324/*!
325 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB
326 */
327
328void wxRichTextTabsPage::OnDeleteTabUpdate( wxUpdateUIEvent& event )
329{
330 event.Enable( m_tabsPresent && m_tabListCtrl->GetCount() > 0 && m_tabListCtrl->GetSelection() != wxNOT_FOUND );
331}
332
333
334/*!
335 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS
336 */
337
338void wxRichTextTabsPage::OnDeleteAllTabsClick( wxCommandEvent& WXUNUSED(event) )
339{
340 if (m_tabsPresent && m_tabListCtrl->GetCount() > 0)
341 {
342 m_tabListCtrl->Clear();
343 m_tabEditCtrl->SetValue(wxEmptyString);
344 }
345}
346
347/*!
348 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS
349 */
350
351void wxRichTextTabsPage::OnDeleteAllTabsUpdate( wxUpdateUIEvent& event )
352{
353 event.Enable( m_tabsPresent && m_tabListCtrl->GetCount() > 0 );
354}
355
356
357/*!
358 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTTABSPAGE_TABLIST
359 */
360
361void wxRichTextTabsPage::OnTablistSelected( wxCommandEvent& WXUNUSED(event) )
362{
363 wxString str = m_tabListCtrl->GetStringSelection();
364 if (!str.empty())
365 m_tabEditCtrl->SetValue(str);
366}
367
368#endif // wxUSE_RICHTEXT