diff --git a/include/wx/generic/extdlgg.h b/include/wx/generic/extdlgg.h index 7691d1cfbf..04d6980dda 100644 --- a/include/wx/generic/extdlgg.h +++ b/include/wx/generic/extdlgg.h @@ -62,6 +62,14 @@ public: { m_clientWindow = clientWindow; } wxWindow *GetClientWindow() { return m_clientWindow; } + void SetClientWindowMargin( int margin ) + { m_clientWindowMargin = margin; } + int GetClientWindowMargin() + { return m_clientWindowMargin; } + void SetSpacePerButton( wxSize space ) + { m_spacePerButton = space; } + wxSize GetSpacePerButton() + { return m_spacePerButton; } void AddButton( wxButton *button ); @@ -77,7 +85,7 @@ public: void OnYes(wxCommandEvent& event); void OnNo(wxCommandEvent& event); void OnCancel(wxCommandEvent& event); - + protected: wxWindow *m_clientWindow; long m_extraStyle; @@ -85,7 +93,9 @@ protected: #if wxUSE_STATLINE wxStaticLine *m_statLine; #endif - + int m_clientWindowMargin; + wxSize m_spacePerButton; + wxSize LayoutButtons(); private: diff --git a/include/wx/gtk/button.h b/include/wx/gtk/button.h index 596299520d..3bd5a5f28a 100644 --- a/include/wx/gtk/button.h +++ b/include/wx/gtk/button.h @@ -60,6 +60,8 @@ class wxButton: public wxControl void SetDefault(); void SetLabel( const wxString &label ); bool Enable( bool enable ); + + static wxSize GetDefaultSize(); // implementation diff --git a/include/wx/gtk/dnd.h b/include/wx/gtk/dnd.h index 0e76509e1a..2dba9cef49 100644 --- a/include/wx/gtk/dnd.h +++ b/include/wx/gtk/dnd.h @@ -57,17 +57,17 @@ public: /* may be overridden to reject certain formats or drops on certain areas. always returns TRUE by default indicating that you'd accept the data from the drag. */ - virtual bool OnMove( int x, int y ); + virtual bool OnMove( long x, long y ); /* has to be overridden to accept a drop event. call IsSupported() to ask which formats are available and then call RequestData() to indicate the format you request. */ - virtual bool OnDrop( int x, int y ); + virtual bool OnDrop( long x, long y ); /* this gets called once the data has actually arrived. get it with GetData(). this has to be overridden. */ - virtual bool OnData( int x, int y ); + virtual bool OnData( long x, long y ); /* called from within OnDrop() to request a certain format from the drop event. */ @@ -106,12 +106,12 @@ public: wxTextDropTarget() {} - virtual bool OnMove( int x, int y ); - virtual bool OnDrop( int x, int y ); - virtual bool OnData( int x, int y ); + virtual bool OnMove( long x, long y ); + virtual bool OnDrop( long x, long y ); + virtual bool OnData( long x, long y ); /* you have to override OnDropData to get at the text */ - virtual bool OnDropText( int x, int y, const wxChar *text ) = 0; + virtual bool OnDropText( long x, long y, const wxChar *text ) = 0; }; @@ -129,12 +129,12 @@ public: /* see SetId() below for explanation */ wxPrivateDropTarget( const wxString &id ); - virtual bool OnMove( int x, int y ); - virtual bool OnDrop( int x, int y ); - virtual bool OnData( int x, int y ); + virtual bool OnMove( long x, long y ); + virtual bool OnDrop( long x, long y ); + virtual bool OnData( long x, long y ); /* you have to override OnDropData to get at the data */ - virtual bool OnDropData( int x, int y, void *data, size_t size ) = 0; + virtual bool OnDropData( long x, long y, void *data, size_t size ) = 0; /* the string ID identifies the format of clipboard or DnD data. a word processor would e.g. add a wxTextDataObject and a wxPrivateDataObject @@ -158,12 +158,12 @@ public: wxFileDropTarget() {} - virtual bool OnMove( int x, int y ); - virtual bool OnDrop( int x, int y ); - virtual bool OnData( int x, int y ); + virtual bool OnMove( long x, long y ); + virtual bool OnDrop( long x, long y ); + virtual bool OnData( long x, long y ); /* you have to override OnDropFiles to get at the file names */ - virtual bool OnDropFiles( int x, int y, size_t nFiles, const wxChar * const aszFiles[] ) = 0; + virtual bool OnDropFiles( long x, long y, size_t nFiles, const wxChar * const aszFiles[] ) = 0; }; diff --git a/include/wx/gtk/textdlg.h b/include/wx/gtk/textdlg.h index e93dd84f5b..eb2c899db7 100644 --- a/include/wx/gtk/textdlg.h +++ b/include/wx/gtk/textdlg.h @@ -18,6 +18,7 @@ #include "wx/setup.h" #include "wx/dialog.h" +#include "wx/extdlg.h" // Handy dialog functions (will be converted into classes at some point) WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr; diff --git a/include/wx/gtk1/button.h b/include/wx/gtk1/button.h index 596299520d..3bd5a5f28a 100644 --- a/include/wx/gtk1/button.h +++ b/include/wx/gtk1/button.h @@ -60,6 +60,8 @@ class wxButton: public wxControl void SetDefault(); void SetLabel( const wxString &label ); bool Enable( bool enable ); + + static wxSize GetDefaultSize(); // implementation diff --git a/include/wx/gtk1/dnd.h b/include/wx/gtk1/dnd.h index 0e76509e1a..2dba9cef49 100644 --- a/include/wx/gtk1/dnd.h +++ b/include/wx/gtk1/dnd.h @@ -57,17 +57,17 @@ public: /* may be overridden to reject certain formats or drops on certain areas. always returns TRUE by default indicating that you'd accept the data from the drag. */ - virtual bool OnMove( int x, int y ); + virtual bool OnMove( long x, long y ); /* has to be overridden to accept a drop event. call IsSupported() to ask which formats are available and then call RequestData() to indicate the format you request. */ - virtual bool OnDrop( int x, int y ); + virtual bool OnDrop( long x, long y ); /* this gets called once the data has actually arrived. get it with GetData(). this has to be overridden. */ - virtual bool OnData( int x, int y ); + virtual bool OnData( long x, long y ); /* called from within OnDrop() to request a certain format from the drop event. */ @@ -106,12 +106,12 @@ public: wxTextDropTarget() {} - virtual bool OnMove( int x, int y ); - virtual bool OnDrop( int x, int y ); - virtual bool OnData( int x, int y ); + virtual bool OnMove( long x, long y ); + virtual bool OnDrop( long x, long y ); + virtual bool OnData( long x, long y ); /* you have to override OnDropData to get at the text */ - virtual bool OnDropText( int x, int y, const wxChar *text ) = 0; + virtual bool OnDropText( long x, long y, const wxChar *text ) = 0; }; @@ -129,12 +129,12 @@ public: /* see SetId() below for explanation */ wxPrivateDropTarget( const wxString &id ); - virtual bool OnMove( int x, int y ); - virtual bool OnDrop( int x, int y ); - virtual bool OnData( int x, int y ); + virtual bool OnMove( long x, long y ); + virtual bool OnDrop( long x, long y ); + virtual bool OnData( long x, long y ); /* you have to override OnDropData to get at the data */ - virtual bool OnDropData( int x, int y, void *data, size_t size ) = 0; + virtual bool OnDropData( long x, long y, void *data, size_t size ) = 0; /* the string ID identifies the format of clipboard or DnD data. a word processor would e.g. add a wxTextDataObject and a wxPrivateDataObject @@ -158,12 +158,12 @@ public: wxFileDropTarget() {} - virtual bool OnMove( int x, int y ); - virtual bool OnDrop( int x, int y ); - virtual bool OnData( int x, int y ); + virtual bool OnMove( long x, long y ); + virtual bool OnDrop( long x, long y ); + virtual bool OnData( long x, long y ); /* you have to override OnDropFiles to get at the file names */ - virtual bool OnDropFiles( int x, int y, size_t nFiles, const wxChar * const aszFiles[] ) = 0; + virtual bool OnDropFiles( long x, long y, size_t nFiles, const wxChar * const aszFiles[] ) = 0; }; diff --git a/include/wx/gtk1/textdlg.h b/include/wx/gtk1/textdlg.h index e93dd84f5b..eb2c899db7 100644 --- a/include/wx/gtk1/textdlg.h +++ b/include/wx/gtk1/textdlg.h @@ -18,6 +18,7 @@ #include "wx/setup.h" #include "wx/dialog.h" +#include "wx/extdlg.h" // Handy dialog functions (will be converted into classes at some point) WXDLLEXPORT_DATA(extern const wxChar*) wxGetTextFromUserPromptStr; diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index a3efceb355..a4fde2951b 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -117,8 +117,8 @@ void MyFrame::ExtDialog(wxCommandEvent& WXUNUSED(event) ) // other platforms. Also, it will not be resizable // anywhere. - wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog", - wxOK|wxFORWARD|wxBACKWARD ); + wxExtDialog dialog( this, -1, "Test 1 for wxExtDialog", wxOK|wxFORWARD|wxBACKWARD ); + dialog.AddButton( new wxButton( &dialog, -1, "Custom") ); dialog.SetClientWindow( new wxTextCtrl( &dialog, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) ); @@ -133,7 +133,8 @@ void MyFrame::ExtDialog(wxCommandEvent& WXUNUSED(event) ) // all platforms. wxExtDialog dialog2( this, -1, "Test 2 for wxExtDialog", - wxOK|wxFORWARD|wxBACKWARD|wxCANCEL, wxDefaultPosition, wxSize(400,170), + wxOK|wxFORWARD|wxBACKWARD|wxCANCEL, + wxDefaultPosition, wxSize(400,170), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxED_BUTTONS_RIGHT | wxED_STATIC_LINE | wxED_CLIENT_MARGIN ); dialog2.SetClientWindow( new wxTextCtrl( &dialog2, -1, "Test", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ) ); diff --git a/samples/dnd/dnd.cpp b/samples/dnd/dnd.cpp index 0b3e1c894f..92b29d29e7 100644 --- a/samples/dnd/dnd.cpp +++ b/samples/dnd/dnd.cpp @@ -39,12 +39,7 @@ // file names) we drop on them // ---------------------------------------------------------------------------- -// FIXME this is ugly and should be fixed in the library itself -#ifdef __WXMSW__ - typedef long wxDropPointCoord; -#else // wxGTK - typedef int wxDropPointCoord; -#endif // MSW/GTK +typedef long wxDropPointCoord; class DnDText : public wxTextDropTarget { @@ -206,80 +201,14 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h) m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL); m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size, - wxTE_MULTILINE | wxTE_READONLY | - wxSUNKEN_BORDER ); - - // redirect log messages to the text window (don't forget to delete it!) - m_pLog = new wxLogTextCtrl(m_ctrlLog); - m_pLogPrev = wxLog::SetActiveTarget(m_pLog); - - // associate drop targets with 2 text controls - m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile)); - m_ctrlText->SetDropTarget( new DnDText(m_ctrlText) ); - - wxLayoutConstraints *c; - - // Top-left listbox - c = new wxLayoutConstraints; - c->left.SameAs(this, wxLeft); - c->top.SameAs(this, wxTop); - c->right.PercentOf(this, wxRight, 50); - c->height.PercentOf(this, wxHeight, 40); - m_ctrlFile->SetConstraints(c); - - // Top-right listbox - c = new wxLayoutConstraints; - c->left.SameAs (m_ctrlFile, wxRight); - c->top.SameAs (this, wxTop); - c->right.SameAs (this, wxRight); - c->height.PercentOf(this, wxHeight, 40); - m_ctrlText->SetConstraints(c); - - // Lower text control - c = new wxLayoutConstraints; - c->left.SameAs (this, wxLeft); - c->right.SameAs (this, wxRight); - c->height.PercentOf(this, wxHeight, 40); - c->top.SameAs(m_ctrlText, wxBottom); - m_ctrlLog->SetConstraints(c); - - // construct menu - wxMenu *file_menu = new wxMenu; - file_menu->Append(Menu_Drag, "&Test drag..."); - file_menu->AppendSeparator(); - file_menu->Append(Menu_Quit, "E&xit"); - - wxMenu *log_menu = new wxMenu; - log_menu->Append(Menu_Clear, "Clear"); - - wxMenu *help_menu = new wxMenu; - help_menu->Append(Menu_Help, "&Help..."); - help_menu->AppendSeparator(); - help_menu->Append(Menu_About, "&About"); - - wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(file_menu, "&File"); - menu_bar->Append(log_menu, "&Log"); - menu_bar->Append(help_menu, "&Help"); - - SetMenuBar(menu_bar); - - // make a panel with 3 subwindows - wxPoint pos(0, 0); - wxSize size(400, 200); - - wxString strFile("Drop files here!"), strText("Drop text on me"); - - m_ctrlFile = new wxListBox(this, -1, pos, size, 1, &strFile, wxLB_HSCROLL); - m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL); - - m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size, wxTE_MULTILINE | wxTE_READONLY | wxSUNKEN_BORDER ); - // redirect log messages to the text window (don't forget to delete it!) +#if wxUSE_STD_IOSTREAM +// redirect log messages to the text window (don't forget to delete it!) m_pLog = new wxLogTextCtrl(m_ctrlLog); m_pLogPrev = wxLog::SetActiveTarget(m_pLog); +#endif // associate drop targets with 2 text controls m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile)); @@ -427,10 +356,12 @@ void DnDFrame::OnRightDown(wxMouseEvent &event ) DnDFrame::~DnDFrame() { +#if wxUSE_STD_IOSTREAM if ( m_pLog != NULL ) { if ( wxLog::SetActiveTarget(m_pLogPrev) == m_pLog ) delete m_pLog; } +#endif } // --------------------------------------------------------------------------- diff --git a/src/generic/extdlgg.cpp b/src/generic/extdlgg.cpp index 77bf06c4bd..7ae0ec2eec 100644 --- a/src/generic/extdlgg.cpp +++ b/src/generic/extdlgg.cpp @@ -37,8 +37,6 @@ // wxExtDialog //----------------------------------------------------------------------------- -#define STATIC_LINE_MARGIN 15 -#define CLIENT_AREA_MARGIN 10 #define BUTTON_AREA_MARGIN 10 #if !USE_SHARED_LIBRARY @@ -70,6 +68,28 @@ bool wxExtDialog::Create( wxWindow *parent, wxWindowID id, m_extraStyle = extraStyle; + m_clientWindowMargin = 10; + + if (m_windowStyle & wxED_BUTTONS_RIGHT) + { + m_spacePerButton.x = wxButton::GetDefaultSize().x + 18; + m_spacePerButton.y = wxButton::GetDefaultSize().y + 8; + } + else + { + m_spacePerButton.x = wxButton::GetDefaultSize().x + 8; + m_spacePerButton.y = wxButton::GetDefaultSize().y + 18; + } + +#if defined(__WXGTK__) || defined(__WXMOTIF__) + // Under Motif and GTK, the default button has a big frame around + // it and to avoid overlapping buttons we make the margin bigger. + // We could give other platforms a bigger margin as well, but this + // wouldn't be standard L&F. + m_spacePerButton.x += 10; + m_spacePerButton.y += 10; +#endif + wxButton *ok = (wxButton *) NULL; wxButton *cancel = (wxButton *) NULL; wxButton *yes = (wxButton *) NULL; @@ -112,7 +132,10 @@ bool wxExtDialog::Create( wxWindow *parent, wxWindowID id, AddButton( new wxButton( this, wxID_SETUP, _("Setup") ) ); if (m_extraStyle & wxMORE) - AddButton( new wxButton( this, wxID_MORE, _("More..") ) ); + AddButton( new wxButton( this, wxID_MORE, _("More...") ) ); + + if (m_extraStyle & wxHELP) + AddButton( new wxButton( this, wxID_HELP, _("Help") ) ); if (m_extraStyle & wxCANCEL) { @@ -211,10 +234,10 @@ void wxExtDialog::OnSize( wxSizeEvent &WXUNUSED(event) ) if (m_clientWindow) { if (m_windowStyle & wxED_CLIENT_MARGIN) - m_clientWindow->SetSize( CLIENT_AREA_MARGIN, - CLIENT_AREA_MARGIN, - client_size.x - 2*CLIENT_AREA_MARGIN, - client_size.y - 2*CLIENT_AREA_MARGIN ); + m_clientWindow->SetSize( m_clientWindowMargin, + m_clientWindowMargin, + client_size.x - 2*m_clientWindowMargin, + client_size.y - 2*m_clientWindowMargin ); else m_clientWindow->SetSize( 0, 0, client_size.x, client_size.y ); @@ -249,29 +272,22 @@ wxSize wxExtDialog::GetButtonAreaSize() wxSize ret(0,0); - // this routine can be improved to measure the string length - // of the button text or the bitmap size if using wxBmpButton - // or to query the standard button size somehow. - - int button_size_and_margin_x = 110; - int button_size_and_margin_y = 44; - if (m_windowStyle & wxED_BUTTONS_RIGHT) { - ret.x = button_size_and_margin_x; - ret.y = m_buttons.GetCount()*button_size_and_margin_y + 2*BUTTON_AREA_MARGIN; + ret.x = m_spacePerButton.x; + ret.y = m_buttons.GetCount()*m_spacePerButton.y + 2*BUTTON_AREA_MARGIN; #if wxUSE_STATLINE if (m_statLine) - ret.x += STATIC_LINE_MARGIN; + ret.x += wxStaticLine::GetDefaultSize(); #endif } else { - ret.x = m_buttons.GetCount()*button_size_and_margin_x + 2*BUTTON_AREA_MARGIN; - ret.y = button_size_and_margin_y; + ret.x = m_buttons.GetCount()*m_spacePerButton.x + 2*BUTTON_AREA_MARGIN; + ret.y = m_spacePerButton.y; #if wxUSE_STATLINE if (m_statLine) - ret.y += STATIC_LINE_MARGIN; + ret.y += wxStaticLine::GetDefaultSize(); #endif } @@ -288,6 +304,11 @@ wxSize wxExtDialog::LayoutButtons() if (m_windowStyle & wxED_BUTTONS_RIGHT) { area_used.y = client_area.y; + wxSize area_used_by_buttons( area_used ); +#if wxUSE_STATLINE + if (m_statLine) + area_used_by_buttons.x -= wxStaticLine::GetDefaultSize(); +#endif int space_for_each_button = (client_area.y-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount(); int n = 0; @@ -297,12 +318,12 @@ wxSize wxExtDialog::LayoutButtons() wxButton *button = (wxButton*)node->Data(); wxSize button_size( button->GetSize() ); - if (button_size.x < 80) button_size.x = 80; + if (button_size.x < wxButton::GetDefaultSize().x) button_size.x = wxButton::GetDefaultSize().x; int center_of_button_y = n*space_for_each_button + space_for_each_button/2; int button_y = BUTTON_AREA_MARGIN + center_of_button_y - button_size.y/2; - int center_of_button_x = client_area.x - area_used.x/2; + int center_of_button_x = client_area.x - area_used_by_buttons.x/2; int button_x = center_of_button_x - button_size.x/2; button->SetSize( button_x, button_y, button_size.x, button_size.y ); @@ -313,7 +334,7 @@ wxSize wxExtDialog::LayoutButtons() #if wxUSE_STATLINE if (m_statLine) - m_statLine->SetSize( client_area.x - area_used.x, + m_statLine->SetSize( client_area.x - area_used_by_buttons.x - wxStaticLine::GetDefaultSize(), 0, wxStaticLine::GetDefaultSize(), client_area.y ); @@ -322,6 +343,11 @@ wxSize wxExtDialog::LayoutButtons() else { area_used.x = client_area.x; + wxSize area_used_by_buttons( area_used ); +#if wxUSE_STATLINE + if (m_statLine) + area_used_by_buttons.y -= wxStaticLine::GetDefaultSize(); +#endif int space_for_each_button = (client_area.x-2*BUTTON_AREA_MARGIN) / m_buttons.GetCount(); int n = 0; @@ -331,12 +357,12 @@ wxSize wxExtDialog::LayoutButtons() wxButton *button = (wxButton*)node->Data(); wxSize button_size( button->GetSize() ); - if (button_size.x < 80) button_size.x = 80; + if (button_size.x < wxButton::GetDefaultSize().x) button_size.x = wxButton::GetDefaultSize().x; int center_of_button_x = n*space_for_each_button + space_for_each_button/2; int button_x = BUTTON_AREA_MARGIN + center_of_button_x - button_size.x/2; - int center_of_button_y = client_area.y - area_used.y/2; + int center_of_button_y = client_area.y - area_used_by_buttons.y/2; int button_y = center_of_button_y - button_size.y/2; button->SetSize( button_x, button_y, button_size.x, button_size.y ); @@ -348,7 +374,7 @@ wxSize wxExtDialog::LayoutButtons() #if wxUSE_STATLINE if (m_statLine) m_statLine->SetSize( 0, - client_area.y - area_used.y, + client_area.y - area_used_by_buttons.y - wxStaticLine::GetDefaultSize(), client_area.x, wxStaticLine::GetDefaultSize() ); #endif diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index a733aede95..e7ef187268 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -225,6 +225,7 @@ void wxapp_install_idle_handler() g_isIdle = FALSE; } +/* #if wxUSE_THREADS static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) { @@ -232,23 +233,23 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) wxTheApp->m_wakeUpTimerTag = 0; #if (GTK_MINOR_VERSION > 0) - /* when getting called from GDK's time-out handler - we are no longer within GDK's grab on the GUI - thread so we must lock it here ourselves */ + // when getting called from GDK's time-out handler + // we are no longer within GDK's grab on the GUI + // thread so we must lock it here ourselves GDK_THREADS_ENTER (); #endif - /* unblock other threads wishing to do some GUI things */ + // unblock other threads wishing to do some GUI things wxMutexGuiLeave(); - /* wake up other threads */ + // wake up other threads wxUsleep( 1 ); - /* block other thread again */ + // block other thread again wxMutexGuiEnter(); #if (GTK_MINOR_VERSION > 0) - /* release lock again */ + // release lock again GDK_THREADS_LEAVE (); #endif @@ -257,6 +258,7 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) return TRUE; } #endif +*/ //----------------------------------------------------------------------------- // wxApp @@ -277,9 +279,11 @@ wxApp::wxApp() m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); +/* #if wxUSE_THREADS m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); #endif +*/ m_colorCube = (unsigned char*) NULL; } @@ -288,9 +292,11 @@ wxApp::~wxApp() { if (m_idleTag) gtk_idle_remove( m_idleTag ); +/* #if wxUSE_THREADS if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag ); #endif +*/ if (m_colorCube) free(m_colorCube); } diff --git a/src/gtk/button.cpp b/src/gtk/button.cpp index 613aab8a05..cca8c9ebd3 100644 --- a/src/gtk/button.cpp +++ b/src/gtk/button.cpp @@ -120,6 +120,11 @@ void wxButton::SetDefault(void) SetSize( m_x, m_y, m_width, m_height ); } +static wxSize wxButton::GetDefaultSize() +{ + return wxSize(80,26); +} + void wxButton::SetLabel( const wxString &label ) { wxCHECK_RET( m_widget != NULL, _T("invalid button") ); diff --git a/src/gtk/dnd.cpp b/src/gtk/dnd.cpp index 9596cf7d13..289765439d 100644 --- a/src/gtk/dnd.cpp +++ b/src/gtk/dnd.cpp @@ -337,17 +337,17 @@ void wxDropTarget::OnLeave() { } -bool wxDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return TRUE; } -bool wxDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) ) { return FALSE; } -bool wxDropTarget::OnData( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxDropTarget::OnData( long WXUNUSED(x), long WXUNUSED(y) ) { return FALSE; } @@ -472,12 +472,12 @@ void wxDropTarget::RegisterWidget( GtkWidget *widget ) // wxTextDropTarget //------------------------------------------------------------------------- -bool wxTextDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxTextDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return IsSupported( wxDF_TEXT ); } -bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxTextDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) ) { if (IsSupported( wxDF_TEXT )) { @@ -488,7 +488,7 @@ bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) return FALSE; } -bool wxTextDropTarget::OnData( int x, int y ) +bool wxTextDropTarget::OnData( long x, long y ) { wxTextDataObject data; if (!GetData( &data )) return FALSE; @@ -512,12 +512,12 @@ wxPrivateDropTarget::wxPrivateDropTarget( const wxString &id ) m_id = id; } -bool wxPrivateDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxPrivateDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return IsSupported( m_id ); } -bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxPrivateDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) ) { if (!IsSupported( m_id )) { @@ -528,7 +528,7 @@ bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) return FALSE; } -bool wxPrivateDropTarget::OnData( int x, int y ) +bool wxPrivateDropTarget::OnData( long x, long y ) { if (!IsSupported( m_id )) return FALSE; @@ -544,12 +544,12 @@ bool wxPrivateDropTarget::OnData( int x, int y ) // A drop target which accepts files (dragged from File Manager or Explorer) //---------------------------------------------------------------------------- -bool wxFileDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxFileDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return IsSupported( wxDF_FILENAME ); } -bool wxFileDropTarget::OnDrop( int x, int y ) +bool wxFileDropTarget::OnDrop( long x, long y ) { if (IsSupported( wxDF_FILENAME )) { @@ -560,7 +560,7 @@ bool wxFileDropTarget::OnDrop( int x, int y ) return FALSE; } -bool wxFileDropTarget::OnData( int x, int y ) +bool wxFileDropTarget::OnData( long x, long y ) { wxFileDataObject data; if (!GetData( &data )) return FALSE; diff --git a/src/gtk/textdlg.cpp b/src/gtk/textdlg.cpp index 313ab0f8c8..5ffe1cafdc 100644 --- a/src/gtk/textdlg.cpp +++ b/src/gtk/textdlg.cpp @@ -21,19 +21,58 @@ #endif #ifndef WX_PRECOMP -#include -#include "wx/utils.h" -#include "wx/dialog.h" -#include "wx/listbox.h" -#include "wx/button.h" -#include "wx/stattext.h" -#include "wx/textctrl.h" -#include "wx/layout.h" -#include "wx/intl.h" + #include + #include "wx/utils.h" + #include "wx/dialog.h" + #include "wx/button.h" + #include "wx/stattext.h" + #include "wx/textctrl.h" + #include "wx/intl.h" +#endif + +#if wxUSE_STATLINE + #include "wx/statline.h" #endif #include "wx/gtk/textdlg.h" +/* Split message, using constraints to position controls */ +static wxSize wxSplitMessage2( const wxString &message, wxWindow *parent ) +{ + int y = 10; + int w = 50; + wxString line( _T("") ); + for (size_t pos = 0; pos < message.Len(); pos++) + { + if (message[pos] == _T('\n')) + { + if (!line.IsEmpty()) + { + wxStaticText *s1 = new wxStaticText( parent, -1, line, wxPoint(15,y) ); + wxSize size1( s1->GetSize() ); + if (size1.x > w) w = size1.x; + line = _T(""); + } + y += 18; + } + else + { + line += message[pos]; + } + } + + if (!line.IsEmpty()) + { + wxStaticText *s2 = new wxStaticText( parent, -1, line, wxPoint(15,y) ); + wxSize size2( s2->GetSize() ); + if (size2.x > w) w = size2.x; + } + + y += 18; + + return wxSize(w+30,y); +} + // wxTextEntryDialog #if !USE_SHARED_LIBRARY @@ -44,109 +83,70 @@ END_EVENT_TABLE() IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog) #endif -// Split message, using constraints to position controls -static void wxSplitMessage2(const wxChar *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer) -{ - wxChar *copyMessage = copystring(message); - size_t i = 0; - size_t len = wxStrlen(copyMessage); - wxChar *currentMessage = copyMessage; - -// wxWindow *lastWindow = parent; - - while (i < len) { - while ((i < len) && (copyMessage[i] != _T('\n'))) i++; - if (i < len) copyMessage[i] = 0; - wxStaticText *mess = new wxStaticText(parent, -1, currentMessage); - -/* - wxLayoutConstraints *c = new wxLayoutConstraints; - c->left.SameAs (parent, wxLeft, 10); - c->top.SameAs (lastWindow, wxBottom, 5); - c->right.AsIs (); - c->height.AsIs (); - - mess->SetConstraints(c); -*/ - sizer->AddSizerChild(mess); - - messageList->Append(mess); - - currentMessage = copyMessage + i + 1; - } - delete[] copyMessage; -} - wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent, const wxString& message, const wxString& caption, const wxString& value, long style, const wxPoint& pos): wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL) { - m_dialogStyle = style; - m_value = value; + m_dialogStyle = style; + m_value = value; - wxBeginBusyCursor(); + wxBeginBusyCursor(); - wxSizer *topSizer = new wxSizer(this, wxSizerShrink); - topSizer->SetBorder(10, 10); + wxSize message_size( wxSplitMessage2( message, this ) ); - wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100); - messageSizer->SetName("messageSizer"); + wxButton *ok = (wxButton *) NULL; + wxButton *cancel = (wxButton *) NULL; + wxList m_buttons; + + int y = message_size.y + 15; + + wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, y), wxSize(350, -1)); + + y += 65; -// bool centre = ((style & wxCENTRE) == wxCENTRE); + if (style & wxOK) + { + ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) ); + m_buttons.Append( ok ); + } - wxList messageList; - wxSplitMessage2(message, &messageList, this, messageSizer); + if (style & wxCANCEL) + { + cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) ); + m_buttons.Append( cancel ); + } - // Insert a spacer - wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10); + if (ok) + { + ok->SetDefault(); + ok->SetFocus(); + } - wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, -1), wxSize(350, -1)); + int w = wxMax( 350, m_buttons.GetCount() * 100 ); + w = wxMax( w, message_size.x ); + int space = w / (m_buttons.GetCount()*2); + + textCtrl->SetSize( 20, -1, w-10, -1 ); + + int m = 0; + wxNode *node = m_buttons.First(); + while (node) + { + wxWindow *win = (wxWindow*)node->Data(); + int x = (m*2+1)*space - 40 + 15; + win->Move( x, -1 ); + node = node->Next(); + m++; + } + +#if wxUSE_STATLINE + (void) new wxStaticLine( this, -1, wxPoint(0,y-20), wxSize(w+30, 5) ); +#endif + + SetSize( w+30, y+40 ); - wxRowColSizer *textSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); - textSizer->AddSizerChild(textCtrl); - textSizer->SetName("textSizer"); + Centre( wxBOTH ); - // Create constraints for the text sizer - wxLayoutConstraints *textC = new wxLayoutConstraints; - textC->left.SameAs (messageSizer, wxLeft); - textC->top.Below (spacingSizer); - textSizer->SetConstraints(textC); - - // Insert another spacer - wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, textSizer, 10); - spacingSizer->SetName("spacingSizer2"); - - // Insert a sizer for the buttons - wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); - buttonSizer->SetName("buttonSizer"); - - // Specify constraints for the button sizer - wxLayoutConstraints *c = new wxLayoutConstraints; - c->width.AsIs (); - c->height.AsIs (); - c->top.Below (spacingSizer2); - c->centreX.SameAs (textSizer, wxCentreX); - buttonSizer->SetConstraints(c); - buttonSizer->SetSpacing(12,0); - - wxButton *ok = NULL; - wxButton *cancel = NULL; - - if (style & wxOK) { - ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1)); - buttonSizer->AddSizerChild(ok); - } - - if (style & wxCANCEL) { - cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1)); - buttonSizer->AddSizerChild(cancel); - } - - if (ok) - ok->SetDefault(); - - Layout(); - Centre(wxBOTH); wxEndBusyCursor(); } diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index a733aede95..e7ef187268 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -225,6 +225,7 @@ void wxapp_install_idle_handler() g_isIdle = FALSE; } +/* #if wxUSE_THREADS static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) { @@ -232,23 +233,23 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) wxTheApp->m_wakeUpTimerTag = 0; #if (GTK_MINOR_VERSION > 0) - /* when getting called from GDK's time-out handler - we are no longer within GDK's grab on the GUI - thread so we must lock it here ourselves */ + // when getting called from GDK's time-out handler + // we are no longer within GDK's grab on the GUI + // thread so we must lock it here ourselves GDK_THREADS_ENTER (); #endif - /* unblock other threads wishing to do some GUI things */ + // unblock other threads wishing to do some GUI things wxMutexGuiLeave(); - /* wake up other threads */ + // wake up other threads wxUsleep( 1 ); - /* block other thread again */ + // block other thread again wxMutexGuiEnter(); #if (GTK_MINOR_VERSION > 0) - /* release lock again */ + // release lock again GDK_THREADS_LEAVE (); #endif @@ -257,6 +258,7 @@ static gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) ) return TRUE; } #endif +*/ //----------------------------------------------------------------------------- // wxApp @@ -277,9 +279,11 @@ wxApp::wxApp() m_idleTag = gtk_idle_add( wxapp_idle_callback, (gpointer) NULL ); +/* #if wxUSE_THREADS m_wakeUpTimerTag = gtk_timeout_add( 20, wxapp_wakeup_timerout_callback, (gpointer) NULL ); #endif +*/ m_colorCube = (unsigned char*) NULL; } @@ -288,9 +292,11 @@ wxApp::~wxApp() { if (m_idleTag) gtk_idle_remove( m_idleTag ); +/* #if wxUSE_THREADS if (m_wakeUpTimerTag) gtk_timeout_remove( m_wakeUpTimerTag ); #endif +*/ if (m_colorCube) free(m_colorCube); } diff --git a/src/gtk1/button.cpp b/src/gtk1/button.cpp index 613aab8a05..cca8c9ebd3 100644 --- a/src/gtk1/button.cpp +++ b/src/gtk1/button.cpp @@ -120,6 +120,11 @@ void wxButton::SetDefault(void) SetSize( m_x, m_y, m_width, m_height ); } +static wxSize wxButton::GetDefaultSize() +{ + return wxSize(80,26); +} + void wxButton::SetLabel( const wxString &label ) { wxCHECK_RET( m_widget != NULL, _T("invalid button") ); diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index 9596cf7d13..289765439d 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -337,17 +337,17 @@ void wxDropTarget::OnLeave() { } -bool wxDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return TRUE; } -bool wxDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) ) { return FALSE; } -bool wxDropTarget::OnData( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxDropTarget::OnData( long WXUNUSED(x), long WXUNUSED(y) ) { return FALSE; } @@ -472,12 +472,12 @@ void wxDropTarget::RegisterWidget( GtkWidget *widget ) // wxTextDropTarget //------------------------------------------------------------------------- -bool wxTextDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxTextDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return IsSupported( wxDF_TEXT ); } -bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxTextDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) ) { if (IsSupported( wxDF_TEXT )) { @@ -488,7 +488,7 @@ bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) return FALSE; } -bool wxTextDropTarget::OnData( int x, int y ) +bool wxTextDropTarget::OnData( long x, long y ) { wxTextDataObject data; if (!GetData( &data )) return FALSE; @@ -512,12 +512,12 @@ wxPrivateDropTarget::wxPrivateDropTarget( const wxString &id ) m_id = id; } -bool wxPrivateDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxPrivateDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return IsSupported( m_id ); } -bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxPrivateDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) ) { if (!IsSupported( m_id )) { @@ -528,7 +528,7 @@ bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) ) return FALSE; } -bool wxPrivateDropTarget::OnData( int x, int y ) +bool wxPrivateDropTarget::OnData( long x, long y ) { if (!IsSupported( m_id )) return FALSE; @@ -544,12 +544,12 @@ bool wxPrivateDropTarget::OnData( int x, int y ) // A drop target which accepts files (dragged from File Manager or Explorer) //---------------------------------------------------------------------------- -bool wxFileDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) ) +bool wxFileDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) ) { return IsSupported( wxDF_FILENAME ); } -bool wxFileDropTarget::OnDrop( int x, int y ) +bool wxFileDropTarget::OnDrop( long x, long y ) { if (IsSupported( wxDF_FILENAME )) { @@ -560,7 +560,7 @@ bool wxFileDropTarget::OnDrop( int x, int y ) return FALSE; } -bool wxFileDropTarget::OnData( int x, int y ) +bool wxFileDropTarget::OnData( long x, long y ) { wxFileDataObject data; if (!GetData( &data )) return FALSE; diff --git a/src/gtk1/textdlg.cpp b/src/gtk1/textdlg.cpp index 313ab0f8c8..5ffe1cafdc 100644 --- a/src/gtk1/textdlg.cpp +++ b/src/gtk1/textdlg.cpp @@ -21,19 +21,58 @@ #endif #ifndef WX_PRECOMP -#include -#include "wx/utils.h" -#include "wx/dialog.h" -#include "wx/listbox.h" -#include "wx/button.h" -#include "wx/stattext.h" -#include "wx/textctrl.h" -#include "wx/layout.h" -#include "wx/intl.h" + #include + #include "wx/utils.h" + #include "wx/dialog.h" + #include "wx/button.h" + #include "wx/stattext.h" + #include "wx/textctrl.h" + #include "wx/intl.h" +#endif + +#if wxUSE_STATLINE + #include "wx/statline.h" #endif #include "wx/gtk/textdlg.h" +/* Split message, using constraints to position controls */ +static wxSize wxSplitMessage2( const wxString &message, wxWindow *parent ) +{ + int y = 10; + int w = 50; + wxString line( _T("") ); + for (size_t pos = 0; pos < message.Len(); pos++) + { + if (message[pos] == _T('\n')) + { + if (!line.IsEmpty()) + { + wxStaticText *s1 = new wxStaticText( parent, -1, line, wxPoint(15,y) ); + wxSize size1( s1->GetSize() ); + if (size1.x > w) w = size1.x; + line = _T(""); + } + y += 18; + } + else + { + line += message[pos]; + } + } + + if (!line.IsEmpty()) + { + wxStaticText *s2 = new wxStaticText( parent, -1, line, wxPoint(15,y) ); + wxSize size2( s2->GetSize() ); + if (size2.x > w) w = size2.x; + } + + y += 18; + + return wxSize(w+30,y); +} + // wxTextEntryDialog #if !USE_SHARED_LIBRARY @@ -44,109 +83,70 @@ END_EVENT_TABLE() IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog) #endif -// Split message, using constraints to position controls -static void wxSplitMessage2(const wxChar *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer) -{ - wxChar *copyMessage = copystring(message); - size_t i = 0; - size_t len = wxStrlen(copyMessage); - wxChar *currentMessage = copyMessage; - -// wxWindow *lastWindow = parent; - - while (i < len) { - while ((i < len) && (copyMessage[i] != _T('\n'))) i++; - if (i < len) copyMessage[i] = 0; - wxStaticText *mess = new wxStaticText(parent, -1, currentMessage); - -/* - wxLayoutConstraints *c = new wxLayoutConstraints; - c->left.SameAs (parent, wxLeft, 10); - c->top.SameAs (lastWindow, wxBottom, 5); - c->right.AsIs (); - c->height.AsIs (); - - mess->SetConstraints(c); -*/ - sizer->AddSizerChild(mess); - - messageList->Append(mess); - - currentMessage = copyMessage + i + 1; - } - delete[] copyMessage; -} - wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent, const wxString& message, const wxString& caption, const wxString& value, long style, const wxPoint& pos): wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL) { - m_dialogStyle = style; - m_value = value; + m_dialogStyle = style; + m_value = value; - wxBeginBusyCursor(); + wxBeginBusyCursor(); - wxSizer *topSizer = new wxSizer(this, wxSizerShrink); - topSizer->SetBorder(10, 10); + wxSize message_size( wxSplitMessage2( message, this ) ); - wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100); - messageSizer->SetName("messageSizer"); + wxButton *ok = (wxButton *) NULL; + wxButton *cancel = (wxButton *) NULL; + wxList m_buttons; + + int y = message_size.y + 15; + + wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, y), wxSize(350, -1)); + + y += 65; -// bool centre = ((style & wxCENTRE) == wxCENTRE); + if (style & wxOK) + { + ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) ); + m_buttons.Append( ok ); + } - wxList messageList; - wxSplitMessage2(message, &messageList, this, messageSizer); + if (style & wxCANCEL) + { + cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) ); + m_buttons.Append( cancel ); + } - // Insert a spacer - wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10); + if (ok) + { + ok->SetDefault(); + ok->SetFocus(); + } - wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, -1), wxSize(350, -1)); + int w = wxMax( 350, m_buttons.GetCount() * 100 ); + w = wxMax( w, message_size.x ); + int space = w / (m_buttons.GetCount()*2); + + textCtrl->SetSize( 20, -1, w-10, -1 ); + + int m = 0; + wxNode *node = m_buttons.First(); + while (node) + { + wxWindow *win = (wxWindow*)node->Data(); + int x = (m*2+1)*space - 40 + 15; + win->Move( x, -1 ); + node = node->Next(); + m++; + } + +#if wxUSE_STATLINE + (void) new wxStaticLine( this, -1, wxPoint(0,y-20), wxSize(w+30, 5) ); +#endif + + SetSize( w+30, y+40 ); - wxRowColSizer *textSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); - textSizer->AddSizerChild(textCtrl); - textSizer->SetName("textSizer"); + Centre( wxBOTH ); - // Create constraints for the text sizer - wxLayoutConstraints *textC = new wxLayoutConstraints; - textC->left.SameAs (messageSizer, wxLeft); - textC->top.Below (spacingSizer); - textSizer->SetConstraints(textC); - - // Insert another spacer - wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, textSizer, 10); - spacingSizer->SetName("spacingSizer2"); - - // Insert a sizer for the buttons - wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); - buttonSizer->SetName("buttonSizer"); - - // Specify constraints for the button sizer - wxLayoutConstraints *c = new wxLayoutConstraints; - c->width.AsIs (); - c->height.AsIs (); - c->top.Below (spacingSizer2); - c->centreX.SameAs (textSizer, wxCentreX); - buttonSizer->SetConstraints(c); - buttonSizer->SetSpacing(12,0); - - wxButton *ok = NULL; - wxButton *cancel = NULL; - - if (style & wxOK) { - ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1)); - buttonSizer->AddSizerChild(ok); - } - - if (style & wxCANCEL) { - cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1)); - buttonSizer->AddSizerChild(cancel); - } - - if (ok) - ok->SetDefault(); - - Layout(); - Centre(wxBOTH); wxEndBusyCursor(); }