+bool wxNotebook::InsertPage( int position, wxWindow* win, const wxString& text,
+ bool select, int imageId )
+{
+ wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid notebook") );
+
+ wxCHECK_MSG( win->GetParent() == this, FALSE,
+ _T("Can't add a page whose parent is not the notebook!") );
+
+ /* don't receive switch page during addition */
+ gtk_signal_disconnect_by_func( GTK_OBJECT(m_widget),
+ GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer) this );
+
+ GtkNotebook *notebook = GTK_NOTEBOOK(m_widget);
+
+ wxNotebookPage *page = new wxNotebookPage();
+
+ if (position < 0)
+ m_pages.Append( page );
+ else
+ m_pages.Insert( m_pages.Nth( position ), page );
+
+ page->m_client = win;
+
+ page->m_box = gtk_hbox_new( FALSE, 0 );
+ gtk_container_border_width( GTK_CONTAINER(page->m_box), 2 );
+
+ gtk_signal_connect( GTK_OBJECT(win->m_widget), "size_allocate",
+ GTK_SIGNAL_FUNC(gtk_page_size_callback), (gpointer)win );
+
+ if (position < 0)
+ gtk_notebook_append_page( notebook, win->m_widget, page->m_box );
+ else
+ gtk_notebook_insert_page( notebook, win->m_widget, page->m_box, position );
+
+ page->m_page = (GtkNotebookPage*) g_list_last(notebook->children)->data;
+
+ /* set the label image */
+ page->m_image = imageId;
+
+ if (imageId != -1)
+ {
+ wxASSERT( m_imageList != NULL );
+
+ const wxBitmap *bmp = m_imageList->GetBitmap(imageId);
+ GdkPixmap *pixmap = bmp->GetPixmap();
+ GdkBitmap *mask = (GdkBitmap*) NULL;
+ if ( bmp->GetMask() )
+ {
+ mask = bmp->GetMask()->GetBitmap();
+ }
+
+ GtkWidget *pixmapwid = gtk_pixmap_new (pixmap, mask );
+
+ gtk_box_pack_start(GTK_BOX(page->m_box), pixmapwid, FALSE, FALSE, 3);
+
+ gtk_widget_show(pixmapwid);
+ }
+
+ /* set the label text */
+ page->m_text = text;
+ if (page->m_text.IsEmpty()) page->m_text = _T("");
+
+ page->m_label = GTK_LABEL( gtk_label_new(page->m_text.mbc_str()) );
+ gtk_box_pack_end( GTK_BOX(page->m_box), GTK_WIDGET(page->m_label), FALSE, FALSE, 3 );
+
+ /* show the label */
+ gtk_widget_show( GTK_WIDGET(page->m_label) );
+
+ if (select && (m_pages.GetCount() > 1))
+ {
+ if (position < 0)
+ SetSelection( GetPageCount()-1 );
+ else
+ SetSelection( position );
+ }
+
+ gtk_signal_connect( GTK_OBJECT(m_widget), "switch_page",
+ GTK_SIGNAL_FUNC(gtk_notebook_page_change_callback), (gpointer)this );
+
+ return TRUE;