bool wxNotebook::SetPageText( size_t page, const wxString &text ) { wxCHECK_MSG( m_widget != NULL, FALSE, wxT("invalid notebook") ); wxGtkNotebookPage* nb_page = GetNotebookPage(page); wxCHECK_MSG( nb_page, FALSE, wxT("SetPageText: invalid page index") ); nb_page->m_text = text; gtk_label_set( nb_page->m_label, wxGTK_CONV( nb_page->m_text ) ); return true; }
void wxNotebook::DoApplyWidgetStyle(GtkRcStyle *style) { gtk_widget_modify_style(m_widget, style); size_t cnt = m_pagesData.GetCount(); #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for (size_t i = 0; i < cnt; i++) gtk_widget_modify_style(GTK_WIDGET(GetNotebookPage(i)->m_label), style); }
void wxNotebook::SetPadding( const wxSize &padding ) { wxCHECK_RET( m_widget != NULL, wxT("invalid notebook") ); m_padding = padding.GetWidth(); for (size_t i = GetPageCount(); i--;) { wxGtkNotebookPage* pageData = GetNotebookPage(i); if (pageData->m_image) { gtk_box_set_child_packing(GTK_BOX(pageData->m_box), pageData->m_image, false, false, m_padding, GTK_PACK_START); } gtk_box_set_child_packing(GTK_BOX(pageData->m_box), pageData->m_label, false, false, m_padding, GTK_PACK_END); } }
void wxNotebook::DoApplyWidgetStyle(GtkRcStyle *style) { GTKApplyStyle(m_widget, style); for (size_t i = GetPageCount(); i--;) GTKApplyStyle(GetNotebookPage(i)->m_label, style); }
int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { GtkAllocation a; gtk_widget_get_allocation(m_widget, &a); const int x = a.x; const int y = a.y; const size_t count = GetPageCount(); size_t i = 0; #ifndef __WXGTK3__ GtkNotebook * notebook = GTK_NOTEBOOK(m_widget); if (gtk_notebook_get_scrollable(notebook)) i = g_list_position( notebook->children, notebook->first_tab ); #endif for ( ; i < count; i++ ) { wxGtkNotebookPage* pageData = GetNotebookPage(i); GtkWidget* box = pageData->m_box; const gint border = gtk_container_get_border_width(GTK_CONTAINER(box)); if ( IsPointInsideWidget(pt, box, x, y, border) ) { // ok, we're inside this tab -- now find out where, if needed if ( flags ) { if (pageData->m_image && IsPointInsideWidget(pt, pageData->m_image, x, y)) { *flags = wxBK_HITTEST_ONICON; } else if (IsPointInsideWidget(pt, pageData->m_label, x, y)) { *flags = wxBK_HITTEST_ONLABEL; } else { *flags = wxBK_HITTEST_ONITEM; } } return i; } } if ( flags ) { *flags = wxBK_HITTEST_NOWHERE; wxWindowBase * page = GetCurrentPage(); if ( page ) { // rect origin is in notebook's parent coordinates wxRect rect = page->GetRect(); // adjust it to the notebook's coordinates wxPoint pos = GetPosition(); rect.x -= pos.x; rect.y -= pos.y; if ( rect.Contains( pt ) ) *flags |= wxBK_HITTEST_ONPAGE; } } return wxNOT_FOUND; }
int wxNotebook::GetPageImage( size_t page ) const { wxCHECK_MSG(page < GetPageCount(), wxNOT_FOUND, "invalid notebook index"); return GetNotebookPage(page)->m_imageIndex; }
int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { const gint x = m_widget->allocation.x; const gint y = m_widget->allocation.y; const size_t count = GetPageCount(); size_t i = 0; // MR: Code to fix HitTest index return when tabs are scrolled. // No idea if it would work for GTK1 #if 0 GtkNotebook * notebook = GTK_NOTEBOOK(m_widget); if (gtk_notebook_get_scrollable(notebook)); i = g_list_position( notebook->children, notebook->first_tab ); #endif for ( ; i < count; i++ ) { wxGtkNotebookPage* nb_page = GetNotebookPage(i); GtkWidget *box = nb_page->m_box; // VZ: don't know how to find the border width in GTK+ 1.2 const gint border = 0; if ( IsPointInsideWidget(pt, box, x, y, border) ) { // ok, we're inside this tab -- now find out where, if needed if ( flags ) { GtkWidget *pixmap = NULL; GList *children = gtk_container_children(GTK_CONTAINER(box)); for ( GList *child = children; child; child = child->next ) { if ( GTK_IS_PIXMAP(child->data) ) { pixmap = GTK_WIDGET(child->data); break; } } if ( children ) g_list_free(children); if ( pixmap && IsPointInsideWidget(pt, pixmap, x, y) ) { *flags = wxBK_HITTEST_ONICON; } else if ( IsPointInsideWidget(pt, GTK_WIDGET(nb_page->m_label), x, y) ) { *flags = wxBK_HITTEST_ONLABEL; } else { *flags = wxBK_HITTEST_ONITEM; } } return i; } } if ( flags ) *flags = wxBK_HITTEST_NOWHERE; return wxNOT_FOUND; }
bool wxNotebook::SetPageImage( size_t page, int image ) { /* HvdH 28-12-98: now it works, but it's a bit of a kludge */ wxGtkNotebookPage* nb_page = GetNotebookPage(page); if (!nb_page) return FALSE; /* Optimization posibility: return immediately if image unchanged. * Not enabled because it may break existing (stupid) code that * manipulates the imagelist to cycle images */ /* if (image == nb_page->m_image) return true; */ /* For different cases: 1) no image -> no image 2) image -> no image 3) no image -> image 4) image -> image */ if (image == -1 && nb_page->m_image == -1) return true; /* Case 1): Nothing to do. */ GtkWidget *pixmapwid = NULL; if (nb_page->m_image != -1) { /* Case 2) or 4). There is already an image in the gtkhbox. Let's find it */ GList *child = gtk_container_children(GTK_CONTAINER(nb_page->m_box)); while (child) { if (GTK_IS_PIXMAP(child->data)) { pixmapwid = GTK_WIDGET(child->data); break; } child = child->next; } /* We should have the pixmap widget now */ wxASSERT(pixmapwid != NULL); if (image == -1) { /* If there's no new widget, just remove the old from the box */ gtk_container_remove(GTK_CONTAINER(nb_page->m_box), pixmapwid); nb_page->m_image = -1; return true; /* Case 2) */ } } /* Only cases 3) and 4) left */ wxASSERT( m_imageList != NULL ); /* Just in case */ /* Construct the new pixmap */ const wxBitmap *bmp = m_imageList->GetBitmapPtr(image); GdkPixmap *pixmap = bmp->GetPixmap(); GdkBitmap *mask = NULL; if ( bmp->GetMask() ) { mask = bmp->GetMask()->GetBitmap(); } if (pixmapwid == NULL) { /* Case 3) No old pixmap. Create a new one and prepend it to the hbox */ pixmapwid = gtk_pixmap_new (pixmap, mask ); /* CHECKME: Are these pack flags okay? */ gtk_box_pack_start(GTK_BOX(nb_page->m_box), pixmapwid, FALSE, FALSE, m_padding); gtk_widget_show(pixmapwid); } else { /* Case 4) Simply replace the pixmap */ gtk_pixmap_set(GTK_PIXMAP(pixmapwid), pixmap, mask); } nb_page->m_image = image; return true; }
int wxNotebook::HitTest(const wxPoint& pt, long *flags) const { const gint x = m_widget->allocation.x; const gint y = m_widget->allocation.y; const size_t count = GetPageCount(); size_t i = 0; GtkNotebook * notebook = GTK_NOTEBOOK(m_widget); if (gtk_notebook_get_scrollable(notebook)) i = g_list_position( notebook->children, notebook->first_tab ); for ( ; i < count; i++ ) { wxGtkNotebookPage* nb_page = GetNotebookPage(i); GtkWidget *box = nb_page->m_box; const gint border = gtk_container_get_border_width(GTK_CONTAINER(box)); if ( IsPointInsideWidget(pt, box, x, y, border) ) { // ok, we're inside this tab -- now find out where, if needed if ( flags ) { GtkWidget *pixmap = NULL; GList *children = gtk_container_get_children(GTK_CONTAINER(box)); for ( GList *child = children; child; child = child->next ) { if (GTK_IS_IMAGE(child->data)) { pixmap = GTK_WIDGET(child->data); break; } } if ( children ) g_list_free(children); if ( pixmap && IsPointInsideWidget(pt, pixmap, x, y) ) { *flags = wxBK_HITTEST_ONICON; } else if ( IsPointInsideWidget(pt, GTK_WIDGET(nb_page->m_label), x, y) ) { *flags = wxBK_HITTEST_ONLABEL; } else { *flags = wxBK_HITTEST_ONITEM; } } return i; } } if ( flags ) { *flags = wxBK_HITTEST_NOWHERE; wxWindowBase * page = GetCurrentPage(); if ( page ) { // rect origin is in notebook's parent coordinates wxRect rect = page->GetRect(); // adjust it to the notebook's coordinates wxPoint pos = GetPosition(); rect.x -= pos.x; rect.y -= pos.y; if ( rect.Contains( pt ) ) *flags |= wxBK_HITTEST_ONPAGE; } } return wxNOT_FOUND; }