1 /********************************************************************
2 BasicDSP
3 Copyright 2006-2007
4 Pieter-Tjerk de Boer PA3FWM pa3fwm@amsat.org
5 Niels Moseley PE1OIT n.a.moseley@alumnus.utwente.nl
6 License: GPLv2
7 ********************************************************************/
8
9 #include "book.h"
10
11
IMPLEMENT_DYNAMIC_CLASS(wxBook,wxControl)12 IMPLEMENT_DYNAMIC_CLASS(wxBook, wxControl)
13 BEGIN_EVENT_TABLE(wxBook, wxBookCtrlBase)
14 EVT_SIZE(wxBook::OnSize)
15 //EVT_CHOICE(wxID_CHOICEBOOKCHOICE, wxBook::OnChoiceSelected)
16 END_EVENT_TABLE()
17
18
19 wxBook::wxBook(wxWindow *parent,
20 wxWindowID id,
21 const wxPoint& pos,
22 const wxSize& size,
23 long style) : m_selected(wxNOT_FOUND)
24 {
25 wxControl::Create(parent, id, pos, size, style,
26 wxDefaultValidator, _T(""));
27 }
28
~wxBook()29 wxBook::~wxBook()
30 {
31 }
32
SetSelection(size_t n)33 int wxBook::SetSelection(size_t n)
34 {
35 int old_selected = m_selected;
36
37 if (n >= m_pages.size()) return old_selected; //actually an error
38
39
40 if ((int)n != m_selected)
41 {
42 if (m_selected != wxNOT_FOUND) m_pages[m_selected]->Hide();
43 m_selected = n;
44 wxWindow *page = m_pages[n];
45 page->SetSize(GetPageRect());
46 page->Show();
47 }
48 return old_selected;
49 }
50
ChangeSelection(size_t n)51 int wxBook::ChangeSelection(size_t n)
52 {
53 //FIXME: ChangeSelection should not generate any event!
54 //Does SetSelection generate events? --> it should
55 //So, either we have to fix SetSelection or ChangeSelection
56 //For the time being, we'll keep it like this.
57 return SetSelection(n);
58 }
59
DoRemovePage(size_t page)60 wxWindow* wxBook::DoRemovePage(size_t page)
61 {
62 wxWindow *win = wxBookCtrlBase::DoRemovePage(page);
63 return win;
64 }
65
CalcSizeFromPage(const wxSize & sizePage) const66 wxSize wxBook::CalcSizeFromPage(const wxSize& sizePage) const
67 {
68 // we have no internal selection controls.
69 // therefore, the control is a big as the page itself!
70 return sizePage;
71 }
72
OnSize(wxSizeEvent & event)73 void wxBook::OnSize(wxSizeEvent& event)
74 {
75 event.Skip();
76
77 if ((m_pages.size()==0) || (m_selected == wxNOT_FOUND)) return;
78
79 // resize the currently shown page
80 if (m_selected != wxNOT_FOUND)
81 {
82 wxWindow *page = m_pages[m_selected];
83 wxCHECK_RET(page, _T("NULL page in wxChoicebook?") );
84 page->SetSize(GetPageRect());
85 }
86 }
87
GetPageRect() const88 wxRect wxBook::GetPageRect() const
89 {
90 wxPoint pt;
91 wxRect rectPage(pt, GetClientSize());
92 return rectPage;
93 }
94
InsertPage(size_t n,wxWindow * page,const wxString & text,bool bSelect,int imageId)95 bool wxBook::InsertPage(size_t n,
96 wxWindow *page,
97 const wxString &text,
98 bool bSelect,
99 int imageId)
100 {
101 if (!wxBookCtrlBase::InsertPage(n, page, text, bSelect, imageId))
102 return false;
103
104 if ((bSelect) || (m_selected == wxNOT_FOUND))
105 SetSelection(n);
106 else
107 m_pages[n]->Hide(); // hide a new page, if it's not selected.
108
109 return true;
110 }
111