]> git.saurik.com Git - wxWidgets.git/blame - src/gtk1/notebook.cpp
* Hope this is the last bug fix in the wxThread merge ...
[wxWidgets.git] / src / gtk1 / notebook.cpp
CommitLineData
53b28675
RR
1/////////////////////////////////////////////////////////////////////////////
2// Name: notebook.cpp
3// Purpose:
4// Author: Robert Roebling
5// Created: 01/02/97
6// Id:
7// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem
8// Licence: wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifdef __GNUG__
12#pragma implementation "notebook.h"
13#endif
14
15#include "wx/notebook.h"
16#include "wx/panel.h"
17#include "wx/utils.h"
18#include "wx/imaglist.h"
19
20//-----------------------------------------------------------------------------
21// wxNotebookPage
22//-----------------------------------------------------------------------------
23
24class wxNotebookPage: public wxObject
25{
26 public:
27
28 int m_id;
29 wxString m_text;
30 int m_image;
31 void *m_clientData;
32 GtkNotebookPage *m_page;
8aadf227 33 wxWindow *m_clientPanel;
53b28675
RR
34
35 wxNotebookPage(void)
36 {
37 m_id = -1;
38 m_text = "";
39 m_image = -1;
40 m_clientData = NULL;
41 m_page = NULL;
42 m_clientPanel = NULL;
43 };
44
45};
46
47//-----------------------------------------------------------------------------
48// wxNotebook
49//-----------------------------------------------------------------------------
50
51BEGIN_EVENT_TABLE(wxNotebook, wxControl)
52END_EVENT_TABLE()
53
54IMPLEMENT_DYNAMIC_CLASS(wxNotebook,wxControl)
55
56wxNotebook::wxNotebook(void)
57{
58 m_imageList = NULL;
59 m_frame = NULL;
60 m_pages.DeleteContents( TRUE );
61};
62
63wxNotebook::wxNotebook( wxWindow *parent, const wxWindowID id,
64 const wxPoint& pos, const wxSize& size,
65 const long style, const wxString& name )
66{
67 m_imageList = NULL;
68 m_frame = NULL;
69 m_pages.DeleteContents( TRUE );
70 Create( parent, id, pos, size, style, name );
71};
72
73wxNotebook::~wxNotebook(void)
74{
75 if (m_imageList) delete m_imageList;
76 DeleteAllPages();
77};
78
79bool wxNotebook::Create(wxWindow *parent, const wxWindowID id,
80 const wxPoint& pos, const wxSize& size,
81 const long style, const wxString& name )
82{
83 m_needParent = TRUE;
84
85 PreCreation( parent, id, pos, size, style, name );
86
87 m_widget = gtk_notebook_new();
88
89 PostCreation();
90
91 Show( TRUE );
92
93 return TRUE;
94};
95
96int wxNotebook::GetSelection(void) const
97{
98 if (m_pages.Number() == 0) return -1;
99
100 GtkNotebookPage *g_page = GTK_NOTEBOOK(m_widget)->cur_page;
101
102 wxNotebookPage *page = NULL;
103
104 wxNode *node = m_pages.First();
105 while (node)
106 {
107 page = (wxNotebookPage*)node->Data();
108 if (page->m_page == g_page) break;
109 node = node->Next();
110 };
111
112 if (!node) wxFatalError( "Notebook error." );
113
114 return page->m_id;
115};
116
117wxImageList* wxNotebook::GetImageList(void) const
118{
119 return m_imageList;
120};
121
122int wxNotebook::GetPageCount(void) const
123{
124 return m_pages.Number();
125};
126
127int wxNotebook::GetRowCount(void) const
128{
129 return 1;
130};
131
132wxString wxNotebook::GetPageText( const int page ) const
133{
8aadf227
JS
134 wxNotebookPage* nb_page = GetNotebookPage(page);
135 if (nb_page)
136 return nb_page->m_text;
137 else
138 return "";
53b28675
RR
139};
140
141int wxNotebook::GetPageImage( const int page ) const
142{
8aadf227
JS
143 wxNotebookPage* nb_page = GetNotebookPage(page);
144 if (nb_page)
145 return nb_page->m_image;
146 else
147 return NULL;
53b28675
RR
148};
149
150void* wxNotebook::GetPageData( const int page ) const
8aadf227
JS
151{
152 wxNotebookPage* nb_page = GetNotebookPage(page);
153 if (nb_page)
154 return nb_page->m_clientData;
155 else
156 return NULL;
157};
158
159wxNotebookPage* wxNotebook::GetNotebookPage(int page) const
53b28675
RR
160{
161 wxNotebookPage *nb_page = NULL;
162
163 wxNode *node = m_pages.First();
164 while (node)
165 {
166 nb_page = (wxNotebookPage*)node->Data();
167 if (nb_page->m_id == page) break;
168 node = node->Next();
169 };
170 if (!node) return NULL;
8aadf227 171 return nb_page;
53b28675
RR
172};
173
174int wxNotebook::SetSelection( const int page )
175{
8aadf227
JS
176 wxNotebookPage* nb_page = GetNotebookPage(page);
177 if (!nb_page) return -1;
53b28675
RR
178
179 int page_num = 0;
180 GList *child = GTK_NOTEBOOK(m_widget)->children;
181 while (child)
182 {
183 if (nb_page->m_page == (GtkNotebookPage*)child->data) break;
184 page_num++;
185 child = child->next;
186 };
187
188 if (!child) return -1;
189
190 gtk_notebook_set_page( GTK_NOTEBOOK(m_widget), page_num );
191
192 return page;
193};
194
195void wxNotebook::SetImageList( wxImageList* imageList )
196{
197 m_imageList = imageList;
198};
199
200bool wxNotebook::SetPageText( const int page, const wxString &text )
201{
8aadf227
JS
202 wxNotebookPage* nb_page = GetNotebookPage(page);
203 if (!nb_page) return FALSE;
53b28675
RR
204
205 nb_page->m_text = text;
206
207 // recreate
208
209 return TRUE;
210};
211
212bool wxNotebook::SetPageImage( const int page, const int image )
213{
8aadf227
JS
214 wxNotebookPage* nb_page = GetNotebookPage(page);
215 if (!nb_page)
216 return FALSE;
53b28675
RR
217
218 nb_page->m_image = image;
219
220 // recreate
221
222 return TRUE;
223};
224
225bool wxNotebook::SetPageData( const int page, void* data )
226{
8aadf227
JS
227 wxNotebookPage* nb_page = GetNotebookPage(page);
228 if (!nb_page) return FALSE;
53b28675 229
53b28675
RR
230 nb_page->m_clientData = data;
231
232 return TRUE;
233};
234
235void wxNotebook::SetPageSize( const wxSize &WXUNUSED(size) )
236{
237};
238
239void wxNotebook::SetPadding( const wxSize &WXUNUSED(padding) )
240{
241 // what's this ?
242};
243
244bool wxNotebook::DeleteAllPages(void)
245{
246 wxNode *page_node = m_pages.First();
247 while (page_node)
248 {
249 wxNotebookPage *page = (wxNotebookPage*)page_node->Data();
250
251 DeletePage( page->m_id );
252
253 page_node = m_pages.First();
254 };
255
256 return TRUE;
257};
258
259bool wxNotebook::DeletePage( const int page )
260{
8aadf227
JS
261 wxNotebookPage* nb_page = GetNotebookPage(page);
262 if (!nb_page) return FALSE;
53b28675
RR
263
264 int page_num = 0;
265 GList *child = GTK_NOTEBOOK(m_widget)->children;
266 while (child)
267 {
268 if (nb_page->m_page == (GtkNotebookPage*)child->data) break;
269 page_num++;
270 child = child->next;
271 };
53010e52
RR
272
273 wxASSERT( child );
274
275 delete nb_page->m_clientPanel;
53b28675 276
53010e52
RR
277// Amazingly, this is not necessary
278// gtk_notebook_remove_page( GTK_NOTEBOOK(m_widget), page_num );
53b28675
RR
279
280 m_pages.DeleteObject( nb_page );
281
282 return TRUE;
283};
284
8aadf227 285bool wxNotebook::AddPage( const int item, const wxString &text, wxWindow* win, const int imageId, void* data )
53b28675
RR
286{
287 wxNotebookPage *page = new wxNotebookPage;
8aadf227 288
53b28675
RR
289 page->m_text = text;
290 if (page->m_text.IsNull()) page->m_text = "";
291 page->m_id = item;
292 page->m_image = imageId;
293 page->m_clientData = data;
294
295 m_frame = gtk_label_new( page->m_text );
8aadf227
JS
296 gtk_notebook_append_page( GTK_NOTEBOOK(m_widget), win->m_widget, m_frame );
297
53b28675
RR
298 gtk_misc_set_alignment( GTK_MISC(m_frame), 0.0, 0.5 );
299
8aadf227
JS
300 page->m_clientPanel = win;
301// page->m_clientPanel = new wxPanel( this, -1, wxPoint(0,0), wxSize(100,100) );
53b28675
RR
302
303 m_frame = NULL;
304
53010e52
RR
305 page->m_page = (GtkNotebookPage*)( g_list_last( GTK_NOTEBOOK(m_widget)->children )->data );
306
8aadf227
JS
307 if (!page->m_page)
308 {
309 wxFatalError( "Notebook page creation error" );
310 return FALSE;
311 }
312
53b28675
RR
313 m_pages.Append( page );
314
8aadf227 315 return TRUE;
53b28675
RR
316};
317
8aadf227 318wxWindow *wxNotebook::GetPageWindow( const int page ) const
53b28675 319{
8aadf227
JS
320 wxNotebookPage* nb_page = GetNotebookPage(page);
321 if (!nb_page) return NULL;
53b28675
RR
322
323 return nb_page->m_clientPanel;
324};
325
326void wxNotebook::AddChild( wxWindow *win )
327{
328 if (!m_frame) wxFatalError( "Notebook::Addchild() must not be called directly." );
329
8aadf227 330// gtk_notebook_append_page( GTK_NOTEBOOK(m_widget), win->m_widget, m_frame );
53b28675
RR
331};
332
333//-----------------------------------------------------------------------------
334// wxTabEvent
335//-----------------------------------------------------------------------------
336
337IMPLEMENT_DYNAMIC_CLASS(wxTabEvent, wxCommandEvent)
338
339wxTabEvent::wxTabEvent( WXTYPE commandType, int id ) :
340 wxCommandEvent(commandType, id)
341{
342};
343