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