From 5a8c929eb49b1ecfad4fa3c3d4e7dbd11213653a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 13 Jul 1998 16:57:43 +0000 Subject: [PATCH] constraints for notebook pages work (again) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@259 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/notebook.h | 9 +++++- include/wx/gtk1/notebook.h | 9 +++++- src/gtk/notebook.cpp | 63 ++++++++++++++++++++++---------------- src/gtk1/notebook.cpp | 63 ++++++++++++++++++++++---------------- 4 files changed, 88 insertions(+), 56 deletions(-) diff --git a/include/wx/gtk/notebook.h b/include/wx/gtk/notebook.h index 51b228aee0..e423b69564 100644 --- a/include/wx/gtk/notebook.h +++ b/include/wx/gtk/notebook.h @@ -137,8 +137,15 @@ public: // get the panel which represents the given page wxWindow *GetPage(int nPage) const; - // base class virtuals + // implementation + // -------------- + // callbacks + void OnSize(wxSizeEvent&); + + // base class virtuals virtual void AddChild(wxWindow *child); + virtual void SetConstraintSizes(bool recurse); + virtual bool DoPhase(int phase); private: // common part of all ctors diff --git a/include/wx/gtk1/notebook.h b/include/wx/gtk1/notebook.h index 51b228aee0..e423b69564 100644 --- a/include/wx/gtk1/notebook.h +++ b/include/wx/gtk1/notebook.h @@ -137,8 +137,15 @@ public: // get the panel which represents the given page wxWindow *GetPage(int nPage) const; - // base class virtuals + // implementation + // -------------- + // callbacks + void OnSize(wxSizeEvent&); + + // base class virtuals virtual void AddChild(wxWindow *child); + virtual void SetConstraintSizes(bool recurse); + virtual bool DoPhase(int phase); private: // common part of all ctors diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index 4021fcaf49..39bb790417 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -69,26 +69,6 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget), notebook->ProcessEvent(event); } -static void gtk_notebook_client_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, - wxNotebookPage *page ) -{ - if (!page->m_client->HasVMT()) return; - -/* - printf( "OnResize from " ); - if (page->m_client->GetClassInfo() && page->m_client->GetClassInfo()->GetClassName()) - printf( page->m_client->GetClassInfo()->GetClassName() ); - printf( ".\n" ); - - printf( " New: X: %d Y: %d ", alloc->x, alloc->y ); - printf( " W: %d H: %d ", alloc->width, alloc->height ); - printf( " .\n" ); -*/ - - page->m_client->SetSize( alloc->x, alloc->y+26, - alloc->width, alloc->height ); -}; - //----------------------------------------------------------------------------- // wxNotebook //----------------------------------------------------------------------------- @@ -387,10 +367,10 @@ void wxNotebook::AddChild( wxWindow *win ) // case is special there (Robert?) // Robert: Don't you think the code below looks different from the one // in wxWindow::AddChild :-) - + m_children.Append(win); - + wxNotebookPage *page = new wxNotebookPage(); page->m_id = GetPageCount(); @@ -400,14 +380,11 @@ void wxNotebook::AddChild( wxWindow *win ) (GtkWidget *)page->m_label); gtk_misc_set_alignment(GTK_MISC(page->m_label), 0.0, 0.5); - page->m_page = + page->m_page = (GtkNotebookPage*) (g_list_last(GTK_NOTEBOOK(m_widget)->children)->data); - + page->m_parent = GTK_NOTEBOOK(m_widget); - gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", - GTK_SIGNAL_FUNC(gtk_notebook_client_size_callback), (gpointer)page ); - if (!page->m_page) { wxLogFatalError( "Notebook page creation error" ); @@ -417,6 +394,38 @@ void wxNotebook::AddChild( wxWindow *win ) m_pages.Append( page ); }; +void wxNotebook::OnSize(wxSizeEvent& event) +{ + // forward this event to all pages + wxNode *node = m_pages.First(); + while (node) + { + wxWindow *page = ((wxNotebookPage*)node->Data())->m_client; + // @@@@ the numbers I substract here are completely arbitrary, instead we + // should somehow calculate the size of the page from the size of the + // notebook + page->SetSize(event.GetSize().GetX() - 5, + event.GetSize().GetY() - 30); + + if ( page->GetAutoLayout() ) + page->Layout(); + + node = node->Next(); + }; +} + +// override these 2 functions to do nothing: everything is done in OnSize +void wxNotebook::SetConstraintSizes(bool /* recurse */) +{ + // don't set the sizes of the pages - their correct size is not yet known + wxControl::SetConstraintSizes(FALSE); +} + +bool wxNotebook::DoPhase(int /* nPhase */) +{ + return TRUE; +} + //----------------------------------------------------------------------------- // wxNotebookEvent //----------------------------------------------------------------------------- diff --git a/src/gtk1/notebook.cpp b/src/gtk1/notebook.cpp index 4021fcaf49..39bb790417 100644 --- a/src/gtk1/notebook.cpp +++ b/src/gtk1/notebook.cpp @@ -69,26 +69,6 @@ static void gtk_notebook_page_change_callback(GtkNotebook *WXUNUSED(widget), notebook->ProcessEvent(event); } -static void gtk_notebook_client_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, - wxNotebookPage *page ) -{ - if (!page->m_client->HasVMT()) return; - -/* - printf( "OnResize from " ); - if (page->m_client->GetClassInfo() && page->m_client->GetClassInfo()->GetClassName()) - printf( page->m_client->GetClassInfo()->GetClassName() ); - printf( ".\n" ); - - printf( " New: X: %d Y: %d ", alloc->x, alloc->y ); - printf( " W: %d H: %d ", alloc->width, alloc->height ); - printf( " .\n" ); -*/ - - page->m_client->SetSize( alloc->x, alloc->y+26, - alloc->width, alloc->height ); -}; - //----------------------------------------------------------------------------- // wxNotebook //----------------------------------------------------------------------------- @@ -387,10 +367,10 @@ void wxNotebook::AddChild( wxWindow *win ) // case is special there (Robert?) // Robert: Don't you think the code below looks different from the one // in wxWindow::AddChild :-) - + m_children.Append(win); - + wxNotebookPage *page = new wxNotebookPage(); page->m_id = GetPageCount(); @@ -400,14 +380,11 @@ void wxNotebook::AddChild( wxWindow *win ) (GtkWidget *)page->m_label); gtk_misc_set_alignment(GTK_MISC(page->m_label), 0.0, 0.5); - page->m_page = + page->m_page = (GtkNotebookPage*) (g_list_last(GTK_NOTEBOOK(m_widget)->children)->data); - + page->m_parent = GTK_NOTEBOOK(m_widget); - gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", - GTK_SIGNAL_FUNC(gtk_notebook_client_size_callback), (gpointer)page ); - if (!page->m_page) { wxLogFatalError( "Notebook page creation error" ); @@ -417,6 +394,38 @@ void wxNotebook::AddChild( wxWindow *win ) m_pages.Append( page ); }; +void wxNotebook::OnSize(wxSizeEvent& event) +{ + // forward this event to all pages + wxNode *node = m_pages.First(); + while (node) + { + wxWindow *page = ((wxNotebookPage*)node->Data())->m_client; + // @@@@ the numbers I substract here are completely arbitrary, instead we + // should somehow calculate the size of the page from the size of the + // notebook + page->SetSize(event.GetSize().GetX() - 5, + event.GetSize().GetY() - 30); + + if ( page->GetAutoLayout() ) + page->Layout(); + + node = node->Next(); + }; +} + +// override these 2 functions to do nothing: everything is done in OnSize +void wxNotebook::SetConstraintSizes(bool /* recurse */) +{ + // don't set the sizes of the pages - their correct size is not yet known + wxControl::SetConstraintSizes(FALSE); +} + +bool wxNotebook::DoPhase(int /* nPhase */) +{ + return TRUE; +} + //----------------------------------------------------------------------------- // wxNotebookEvent //----------------------------------------------------------------------------- -- 2.45.2