From 227e5e99cd140e628d431dc006d30447ed6ad81a Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 26 Apr 1999 13:10:49 +0000 Subject: [PATCH] Layout things in wxMessageBox Positioning of frames and dialogs git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2286 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/dialogs/dialogs.cpp | 6 +++++- src/common/layout.cpp | 6 ++++-- src/generic/msgdlgg.cpp | 12 ++++++++---- src/gtk/dialog.cpp | 36 +++++++++++++++++++++++++++++++++--- src/gtk/frame.cpp | 29 +++++++++++++++++------------ src/gtk/win_gtk.c | 2 +- src/gtk1/dialog.cpp | 36 +++++++++++++++++++++++++++++++++--- src/gtk1/frame.cpp | 29 +++++++++++++++++------------ src/gtk1/win_gtk.c | 2 +- 9 files changed, 119 insertions(+), 39 deletions(-) diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index 6cac3d15d6..077ba687b5 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -190,9 +190,13 @@ void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) ) "Message box text", wxYES_NO|wxCANCEL); dialog.ShowModal(); -#endif + ::wxMessageBox("MsgBox with a really long long string", "this is the text", wxYES_NO|wxICON_EXCLAMATION); + +#endif + ::wxMessageBox("Short", + "This is the text", wxYES_NO|wxICON_EXCLAMATION); } void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event) ) diff --git a/src/common/layout.cpp b/src/common/layout.cpp index e8f22391a6..305ef6f966 100644 --- a/src/common/layout.cpp +++ b/src/common/layout.cpp @@ -1363,6 +1363,7 @@ bool wxSizer::LayoutPhase1(int *noChanges) // Find the bounding box and set own size int maxX = 0; int maxY = 0; + wxNode *node = GetChildren().First(); while (node) { @@ -1374,10 +1375,11 @@ bool wxSizer::LayoutPhase1(int *noChanges) maxX = (x + width); if ((y+height) > maxY) maxY = (y + height); + node = node->Next(); } SetSize(GetBorderX(), GetBorderY(), maxX, maxY); - + // If this is the only sizer for the parent, size the parent to this sizer. if ( m_sizerParent && (m_sizerParent->GetSizer() == this) ) m_sizerParent->SetClientSize(maxX + 2*GetBorderX(), maxY + 2*GetBorderY()); @@ -1555,7 +1557,7 @@ bool wxRowColSizer::LayoutPhase1(int *noChanges) int currentY = borderY; int maxX = currentX; int maxY = currentY; - + wxNode *node = GetChildren().First(); while (node) { diff --git a/src/generic/msgdlgg.cpp b/src/generic/msgdlgg.cpp index 31e731998d..028a6f8d78 100644 --- a/src/generic/msgdlgg.cpp +++ b/src/generic/msgdlgg.cpp @@ -98,6 +98,7 @@ wxGenericMessageDialog::wxGenericMessageDialog(wxWindow *parent, const wxString& wxSizer *topSizer = new wxSizer(this, wxSizerShrink); topSizer->SetBorder(10, 10); + // message sizer at the top wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100); messageSizer->SetName(_T("messageSizer")); @@ -106,10 +107,11 @@ wxGenericMessageDialog::wxGenericMessageDialog(wxWindow *parent, const wxString& wxList messageList; wxSplitMessage2(message, &messageList, this, messageSizer); - // Insert a spacer + // spacer size in the middle wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 20); - wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); + // row size at the bottom + wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS ); buttonSizer->SetName(_T("buttonSizer")); buttonSizer->SetSpacing(12,0); @@ -118,9 +120,10 @@ wxGenericMessageDialog::wxGenericMessageDialog(wxWindow *parent, const wxString& c->width.AsIs (); c->height.AsIs (); c->top.Below (spacingSizer); - c->centreX.SameAs (spacingSizer, wxCentreX); + c->left.Absolute (10); +// c->centreX.SameAs (spacingSizer, wxCentreX); buttonSizer->SetConstraints(c); - + wxButton *ok = (wxButton *) NULL; wxButton *cancel = (wxButton *) NULL; wxButton *yes = (wxButton *) NULL; @@ -156,6 +159,7 @@ wxGenericMessageDialog::wxGenericMessageDialog(wxWindow *parent, const wxString& } Layout(); + Centre(wxBOTH); wxEndBusyCursor(); diff --git a/src/gtk/dialog.cpp b/src/gtk/dialog.cpp index ee8da61ef8..78009b93ad 100644 --- a/src/gtk/dialog.cpp +++ b/src/gtk/dialog.cpp @@ -132,6 +132,18 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win ) return FALSE; } +//----------------------------------------------------------------------------- +// "map" from m_widget +//----------------------------------------------------------------------------- + +static gint +gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win ) +{ + gtk_widget_set_uposition( widget, win->m_x, win->m_y ); + + return FALSE; +} + //----------------------------------------------------------------------------- // wxDialog //----------------------------------------------------------------------------- @@ -197,7 +209,12 @@ bool wxDialog::Create( wxWindow *parent, been realized, so we do this directly after realization */ gtk_signal_connect( GTK_OBJECT(m_widget), "realize", GTK_SIGNAL_FUNC(gtk_dialog_realized_callback), (gpointer) this ); - + + /* we set the position of the window after the map event. setting it + before has no effect (with KWM) */ + gtk_signal_connect( GTK_OBJECT(m_widget), "map", + GTK_SIGNAL_FUNC(gtk_dialog_map_callback), (gpointer) this ); + /* the user resized the frame by dragging etc. */ gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this ); @@ -390,13 +407,16 @@ void wxDialog::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { if ((m_x != old_x) || (m_y != old_y)) { - /* m_sizeSet = FALSE; */ + /* we set the position here and when showing the dialog + for the first time in idle time */ gtk_widget_set_uposition( m_widget, m_x, m_y ); } } if ((m_width != old_width) || (m_height != old_height)) { + /* actual resizing is deferred to GtkOnSize in idle time and + when showing the dialog */ m_sizeSet = FALSE; } @@ -466,7 +486,17 @@ bool wxDialog::Show( bool show ) GtkOnSize( m_x, m_y, m_width, m_height ); } - wxWindow::Show( show ); + if (show != m_isShown) + { + if (show) + { + gtk_widget_show( m_widget ); + } + else + gtk_widget_hide( m_widget ); + + m_isShown = show; + } if (show) InitDialog(); diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index 961aae908a..b741ebedd1 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -193,15 +193,17 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win ) win->SetIcon( icon ); } - if (!win->m_sizeSet) - { - /* by calling GtkOnSize here, we don't have to call - either after showing the frame, which would entail - much ugly flicker or from within the size_allocate - handler, because GTK 1.1.X forbids that. */ + return FALSE; +} + +//----------------------------------------------------------------------------- +// "map" from m_widget +//----------------------------------------------------------------------------- - win->GtkOnSize( win->m_x, win->m_y, win->m_width, win->m_height ); - } +static gint +gtk_frame_map_callback( GtkWidget *widget, wxFrame *win ) +{ + gtk_widget_set_uposition( widget, win->m_x, win->m_y ); return FALSE; } @@ -356,6 +358,11 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, gtk_signal_connect( GTK_OBJECT(m_widget), "realize", GTK_SIGNAL_FUNC(gtk_frame_realized_callback), (gpointer) this ); + /* we set the position of the window after the map event. setting it + before has no effect (with KWM) */ + gtk_signal_connect( GTK_OBJECT(m_widget), "map", + GTK_SIGNAL_FUNC(gtk_frame_map_callback), (gpointer) this ); + /* the user resized the frame by dragging etc. */ gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", GTK_SIGNAL_FUNC(gtk_frame_size_callback), (gpointer)this ); @@ -391,7 +398,6 @@ bool wxFrame::Show( bool show ) { wxASSERT_MSG( (m_widget != NULL), _T("invalid frame") ); -#if 0 if (show && !m_sizeSet) { /* by calling GtkOnSize here, we don't have to call @@ -401,7 +407,6 @@ bool wxFrame::Show( bool show ) GtkOnSize( m_x, m_y, m_width, m_height ); } -#endif return wxWindow::Show( show ); } @@ -465,8 +470,8 @@ void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { if ((m_x != old_x) || (m_y != old_y)) { - /* m_sizeSet = FALSE; */ - gtk_widget_set_uposition( m_widget, m_x, m_y ); + /* we set the size here and in gtk_frame_map_callback */ + gtk_widget_set_uposition( m_widget, m_x, m_y ); } } diff --git a/src/gtk/win_gtk.c b/src/gtk/win_gtk.c index 11cae307e1..8dfde26e72 100644 --- a/src/gtk/win_gtk.c +++ b/src/gtk/win_gtk.c @@ -416,6 +416,7 @@ gtk_myfixed_size_allocate (GtkWidget *widget, myfixed = GTK_MYFIXED (widget); + widget->allocation = *allocation; #if (GTK_MINOR_VERSION > 0) if (myfixed->shadow_type == GTK_SHADOW_NONE) border = 0; @@ -425,7 +426,6 @@ gtk_myfixed_size_allocate (GtkWidget *widget, border = 0; #endif - widget->allocation = *allocation; if (GTK_WIDGET_REALIZED (widget)) { gdk_window_move_resize( widget->window, diff --git a/src/gtk1/dialog.cpp b/src/gtk1/dialog.cpp index ee8da61ef8..78009b93ad 100644 --- a/src/gtk1/dialog.cpp +++ b/src/gtk1/dialog.cpp @@ -132,6 +132,18 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win ) return FALSE; } +//----------------------------------------------------------------------------- +// "map" from m_widget +//----------------------------------------------------------------------------- + +static gint +gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win ) +{ + gtk_widget_set_uposition( widget, win->m_x, win->m_y ); + + return FALSE; +} + //----------------------------------------------------------------------------- // wxDialog //----------------------------------------------------------------------------- @@ -197,7 +209,12 @@ bool wxDialog::Create( wxWindow *parent, been realized, so we do this directly after realization */ gtk_signal_connect( GTK_OBJECT(m_widget), "realize", GTK_SIGNAL_FUNC(gtk_dialog_realized_callback), (gpointer) this ); - + + /* we set the position of the window after the map event. setting it + before has no effect (with KWM) */ + gtk_signal_connect( GTK_OBJECT(m_widget), "map", + GTK_SIGNAL_FUNC(gtk_dialog_map_callback), (gpointer) this ); + /* the user resized the frame by dragging etc. */ gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this ); @@ -390,13 +407,16 @@ void wxDialog::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { if ((m_x != old_x) || (m_y != old_y)) { - /* m_sizeSet = FALSE; */ + /* we set the position here and when showing the dialog + for the first time in idle time */ gtk_widget_set_uposition( m_widget, m_x, m_y ); } } if ((m_width != old_width) || (m_height != old_height)) { + /* actual resizing is deferred to GtkOnSize in idle time and + when showing the dialog */ m_sizeSet = FALSE; } @@ -466,7 +486,17 @@ bool wxDialog::Show( bool show ) GtkOnSize( m_x, m_y, m_width, m_height ); } - wxWindow::Show( show ); + if (show != m_isShown) + { + if (show) + { + gtk_widget_show( m_widget ); + } + else + gtk_widget_hide( m_widget ); + + m_isShown = show; + } if (show) InitDialog(); diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index 961aae908a..b741ebedd1 100644 --- a/src/gtk1/frame.cpp +++ b/src/gtk1/frame.cpp @@ -193,15 +193,17 @@ gtk_frame_realized_callback( GtkWidget *widget, wxFrame *win ) win->SetIcon( icon ); } - if (!win->m_sizeSet) - { - /* by calling GtkOnSize here, we don't have to call - either after showing the frame, which would entail - much ugly flicker or from within the size_allocate - handler, because GTK 1.1.X forbids that. */ + return FALSE; +} + +//----------------------------------------------------------------------------- +// "map" from m_widget +//----------------------------------------------------------------------------- - win->GtkOnSize( win->m_x, win->m_y, win->m_width, win->m_height ); - } +static gint +gtk_frame_map_callback( GtkWidget *widget, wxFrame *win ) +{ + gtk_widget_set_uposition( widget, win->m_x, win->m_y ); return FALSE; } @@ -356,6 +358,11 @@ bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, gtk_signal_connect( GTK_OBJECT(m_widget), "realize", GTK_SIGNAL_FUNC(gtk_frame_realized_callback), (gpointer) this ); + /* we set the position of the window after the map event. setting it + before has no effect (with KWM) */ + gtk_signal_connect( GTK_OBJECT(m_widget), "map", + GTK_SIGNAL_FUNC(gtk_frame_map_callback), (gpointer) this ); + /* the user resized the frame by dragging etc. */ gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", GTK_SIGNAL_FUNC(gtk_frame_size_callback), (gpointer)this ); @@ -391,7 +398,6 @@ bool wxFrame::Show( bool show ) { wxASSERT_MSG( (m_widget != NULL), _T("invalid frame") ); -#if 0 if (show && !m_sizeSet) { /* by calling GtkOnSize here, we don't have to call @@ -401,7 +407,6 @@ bool wxFrame::Show( bool show ) GtkOnSize( m_x, m_y, m_width, m_height ); } -#endif return wxWindow::Show( show ); } @@ -465,8 +470,8 @@ void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags ) { if ((m_x != old_x) || (m_y != old_y)) { - /* m_sizeSet = FALSE; */ - gtk_widget_set_uposition( m_widget, m_x, m_y ); + /* we set the size here and in gtk_frame_map_callback */ + gtk_widget_set_uposition( m_widget, m_x, m_y ); } } diff --git a/src/gtk1/win_gtk.c b/src/gtk1/win_gtk.c index 11cae307e1..8dfde26e72 100644 --- a/src/gtk1/win_gtk.c +++ b/src/gtk1/win_gtk.c @@ -416,6 +416,7 @@ gtk_myfixed_size_allocate (GtkWidget *widget, myfixed = GTK_MYFIXED (widget); + widget->allocation = *allocation; #if (GTK_MINOR_VERSION > 0) if (myfixed->shadow_type == GTK_SHADOW_NONE) border = 0; @@ -425,7 +426,6 @@ gtk_myfixed_size_allocate (GtkWidget *widget, border = 0; #endif - widget->allocation = *allocation; if (GTK_WIDGET_REALIZED (widget)) { gdk_window_move_resize( widget->window, -- 2.45.2