- // we've created the notebook page in AddChild(). Now we just have to set
- // the caption for the page and set the others parameters.
-
- wxNotebookPage *page = (wxNotebookPage *) NULL;
-
- wxNode *node = m_pages.First();
- while (node)
- {
- page = (wxNotebookPage*)node->Data();
- if ( page->m_client == win ) break;
- node = node->Next();
- }
-
- wxCHECK_MSG( page != NULL, FALSE, "Can't add a page whose parent is not the notebook!" );
-
- if (imageId != -1)
- {
- wxASSERT( m_imageList != NULL );
-
- 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);
- }
-
- // then set the attributes
- page->m_text = text;
- if (page->m_text.IsEmpty()) page->m_text = "";
- page->m_image = imageId;
- page->m_label = (GtkLabel *)gtk_label_new(page->m_text);
- gtk_box_pack_start( GTK_BOX(page->m_box), (GtkWidget *)page->m_label, FALSE, FALSE, 3);
-
- // @@@: what does this do? do we still need it?
- // gtk_misc_set_alignment(GTK_MISC(page->m_label), 0.0, 0.5);
-
- gtk_widget_show((GtkWidget *)page->m_label);
+ wxCHECK_MSG( m_widget != NULL, false, wxT("invalid notebook") );
+
+ wxCHECK_MSG( win->GetParent() == this, false,
+ wxT("Can't add a page whose parent is not the notebook!") );
+
+ wxCHECK_MSG( position <= GetPageCount(), false,
+ wxT("invalid page index in wxNotebookPage::InsertPage()") );
+
+ // Hack Alert! (Part II): See above in wxNotebook::AddChildGTK
+ // why this has to be done.
+ gtk_widget_unparent(win->m_widget);
+
+ if (m_themeEnabled)
+ win->SetThemeEnabled(true);
+
+ GtkNotebook *notebook = GTK_NOTEBOOK(m_widget);
+
+ wxGtkNotebookPage* pageData = new wxGtkNotebookPage;
+
+ m_pages.Insert(win, position);
+ m_pagesData.Insert(position, pageData);
+
+ // set the label image and text
+ // this must be done before adding the page, as GetPageText
+ // and GetPageImage will otherwise return wrong values in
+ // the page-changed event that results from inserting the
+ // first page.
+ pageData->m_imageIndex = imageId;
+
+ pageData->m_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
+ gtk_container_set_border_width(GTK_CONTAINER(pageData->m_box), 2);
+
+ pageData->m_image = NULL;
+ if (imageId != -1)
+ {
+ if (HasImageList())
+ {
+ const wxBitmap* bitmap = GetImageList()->GetBitmapPtr(imageId);
+ pageData->m_image = gtk_image_new_from_pixbuf(bitmap->GetPixbuf());
+ gtk_box_pack_start(GTK_BOX(pageData->m_box),
+ pageData->m_image, false, false, m_padding);
+ }
+ else
+ {
+ wxFAIL_MSG("invalid notebook imagelist");
+ }
+ }
+
+ /* set the label text */
+ pageData->m_label = gtk_label_new(wxGTK_CONV(wxStripMenuCodes(text)));
+ gtk_box_pack_end(GTK_BOX(pageData->m_box),
+ pageData->m_label, false, false, m_padding);
+
+ gtk_widget_show_all(pageData->m_box);
+ gtk_notebook_insert_page(notebook, win->m_widget, pageData->m_box, position);
+
+ /* apply current style */
+#ifdef __WXGTK3__
+ GTKApplyStyle(pageData->m_label, NULL);
+#else
+ GtkRcStyle *style = GTKCreateWidgetStyle();
+ if ( style )
+ {
+ gtk_widget_modify_style(pageData->m_label, style);
+ g_object_unref(style);
+ }
+#endif