X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c67daf87774c71ae9f73af9969008af220e52a11..520e470fdd0daef09c77938db642e4583933c90d:/src/gtk/notebook.cpp diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index cd33a23f62..d9b2bbc090 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -34,6 +34,7 @@ public: m_page = (GtkNotebookPage *) NULL; m_client = (wxWindow *) NULL; m_parent = (GtkNotebook *) NULL; + m_box = (GtkWidget *) NULL; } //private: @@ -44,13 +45,13 @@ public: GtkLabel *m_label; wxWindow *m_client; GtkNotebook *m_parent; + GtkWidget *m_box; // in which the label and image are packed }; //----------------------------------------------------------------------------- -// GTK callbacks +// "switch_page" //----------------------------------------------------------------------------- -// page change callback static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget), GtkNotebookPage *WXUNUSED(page), gint nPage, @@ -58,21 +59,23 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget), { wxNotebook *notebook = (wxNotebook *)data; - int nOld = notebook->GetSelection(); + int old = notebook->GetSelection(); // TODO: emulate PAGE_CHANGING event - wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, - notebook->GetId(), - nPage, - nOld); - event.SetEventObject(notebook); - notebook->ProcessEvent(event); + + wxNotebookEvent event( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, + notebook->GetId(), nPage, old ); + event.SetEventObject( notebook ); + notebook->GetEventHandler()->ProcessEvent( event ); } +//----------------------------------------------------------------------------- +// "size_allocate" +//----------------------------------------------------------------------------- + static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win ) { - if ( win->GetAutoLayout() ) - win->Layout(); + if (win->GetAutoLayout()) win->Layout(); if ((win->m_x == alloc->x) && (win->m_y == alloc->y) && @@ -82,28 +85,7 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* return; } -/* - printf( "OnResize from " ); - if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) - printf( win->GetClassInfo()->GetClassName() ); - printf( " .\n" ); - - printf( " Old: X: %d Y: %d ", win->m_x, win->m_y ); - printf( " W: %d H: %d ", win->m_width, win->m_height ); - printf( " .\n" ); - - printf( " New: X: %d Y: %d ", alloc->x, alloc->y ); - printf( " W: %d H: %d ", alloc->width, alloc->height ); - printf( " .\n" ); -*/ - win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height ); - -/* - printf( " Res: X: %d Y: %d ", win->m_x, win->m_y ); - printf( " W: %d H: %d ", win->m_width, win->m_height ); - printf( " .\n" ); -*/ } //----------------------------------------------------------------------------- @@ -135,7 +117,7 @@ wxNotebook::wxNotebook( wxWindow *parent, wxWindowID id, wxNotebook::~wxNotebook() { // don't generate change page events any more - if ( m_idHandler != 0 ) + if (m_idHandler != 0) gtk_signal_disconnect(GTK_OBJECT(m_widget), m_idHandler); DeleteAllPages(); @@ -169,8 +151,7 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID id, int wxNotebook::GetSelection() const { - if (m_pages.Number() == 0) - return -1; + if (m_pages.Number() == 0) return -1; GtkNotebookPage *g_page = GTK_NOTEBOOK(m_widget)->cur_page; @@ -240,15 +221,14 @@ int wxNotebook::SetSelection( int page ) { int selOld = GetSelection(); wxNotebookPage* nb_page = GetNotebookPage(page); - if (!nb_page) - return -1; + + if (!nb_page) return -1; int page_num = 0; GList *child = GTK_NOTEBOOK(m_widget)->children; while (child) { - if (nb_page->m_page == (GtkNotebookPage*)child->data) - break; + if (nb_page->m_page == (GtkNotebookPage*)child->data) break; page_num++; child = child->next; } @@ -260,17 +240,15 @@ int wxNotebook::SetSelection( int page ) return selOld; } -void wxNotebook::AdvanceSelection(bool bForward) +void wxNotebook::AdvanceSelection( bool bForward ) { - int nSel = GetSelection(), - nMax = GetPageCount(); + int sel = GetSelection(); + int max = GetPageCount(); - if ( bForward ) { - SetSelection(nSel == nMax ? 0 : nSel + 1); - } - else { - SetSelection(nSel == 0 ? nMax : nSel - 1); - } + if (bForward) + SetSelection( sel == max ? 0 : sel + 1 ); + else + SetSelection( sel == 0 ? max : sel - 1 ); } void wxNotebook::SetImageList( wxImageList* imageList ) @@ -281,8 +259,8 @@ void wxNotebook::SetImageList( wxImageList* imageList ) bool wxNotebook::SetPageText( int page, const wxString &text ) { wxNotebookPage* nb_page = GetNotebookPage(page); - if (!nb_page) - return FALSE; + + if (!nb_page) return FALSE; nb_page->m_text = text; @@ -292,8 +270,8 @@ bool wxNotebook::SetPageText( int page, const wxString &text ) bool wxNotebook::SetPageImage( int page, int image ) { wxNotebookPage* nb_page = GetNotebookPage(page); - if (!nb_page) - return FALSE; + + if (!nb_page) return FALSE; nb_page->m_image = image; @@ -302,12 +280,12 @@ bool wxNotebook::SetPageImage( int page, int image ) void wxNotebook::SetPageSize( const wxSize &WXUNUSED(size) ) { - wxFAIL_MSG(_("wxNotebook::SetPageSize not implemented")); + wxFAIL_MSG( "wxNotebook::SetPageSize not implemented" ); } void wxNotebook::SetPadding( const wxSize &WXUNUSED(padding) ) { - wxFAIL_MSG(_("wxNotebook::SetPadding not implemented")); + wxFAIL_MSG( "wxNotebook::SetPadding not implemented" ); } bool wxNotebook::DeleteAllPages() @@ -357,31 +335,46 @@ bool wxNotebook::AddPage(wxWindow* win, const wxString& text, // we've created the notebook page in AddChild(). Now we just have to set // the caption for the page and set the others parameters. - // first, find the page wxNotebookPage *page = (wxNotebookPage *) NULL; wxNode *node = m_pages.First(); while (node) { page = (wxNotebookPage*)node->Data(); - if ( page->m_client == win ) - break; // found + 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!")); + 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 = ""; + if (page->m_text.IsEmpty()) page->m_text = ""; page->m_image = imageId; - gtk_label_set(page->m_label, page->m_text); + 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); - if ( bSelect ) { - SetSelection(GetPageCount()); - } + // @@@: 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); + + if (bSelect) SetSelection(GetPageCount()); return TRUE; } @@ -402,11 +395,12 @@ void wxNotebook::AddChild( wxWindow *win ) wxNotebookPage *page = new wxNotebookPage(); page->m_id = GetPageCount(); - page->m_label = (GtkLabel *)gtk_label_new(_("Handle")); + + page->m_box = gtk_hbox_new (FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(page->m_box), 2); + page->m_client = win; - gtk_notebook_append_page( GTK_NOTEBOOK(m_widget), win->m_widget, - (GtkWidget *)page->m_label); - gtk_misc_set_alignment(GTK_MISC(page->m_label), 0.0, 0.5); + gtk_notebook_append_page( GTK_NOTEBOOK(m_widget), win->m_widget, page->m_box ); page->m_page = (GtkNotebookPage*) (g_list_last(GTK_NOTEBOOK(m_widget)->children)->data); @@ -418,7 +412,7 @@ void wxNotebook::AddChild( wxWindow *win ) if (!page->m_page) { - wxLogFatalError( _("Notebook page creation error") ); + wxLogFatalError( "Notebook page creation error" ); return; } @@ -442,3 +436,4 @@ bool wxNotebook::DoPhase( int WXUNUSED(nPhase) ) //----------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxCommandEvent) +