+void wxStdDialogButtonSizer::SetNegativeButton( wxButton *button )
+{
+ m_buttonNegative = button;
+}
+
+void wxStdDialogButtonSizer::SetCancelButton( wxButton *button )
+{
+ m_buttonCancel = button;
+}
+
+void wxStdDialogButtonSizer::Realize()
+{
+#ifdef __WXMAC__
+ Add(0, 0, 0, wxLEFT, 6);
+ if (m_buttonHelp)
+ Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
+
+ if (m_buttonNegative){
+ // HIG POLICE BULLETIN - destructive buttons need extra padding
+ // 24 pixels on either side
+ Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 12);
+ }
+
+ // extra whitespace between help/negative and cancel/ok buttons
+ Add(0, 0, 1, wxEXPAND, 0);
+
+ if (m_buttonCancel){
+ Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
+ // Cancel or help should be default
+ // m_buttonCancel->SetDefaultButton();
+ }
+
+ // Ugh, Mac doesn't really have apply dialogs, so I'll just
+ // figure the best place is between Cancel and OK
+ if (m_buttonApply)
+ Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
+
+ if (m_buttonAffirmative){
+ Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT, 6);
+
+ if (m_buttonAffirmative->GetId() == wxID_SAVE){
+ // these buttons have set labels under Mac so we should use them
+ m_buttonAffirmative->SetLabel(_("Save"));
+ if (m_buttonNegative)
+ m_buttonNegative->SetLabel(_("Don't Save"));
+ }
+ }
+
+ // Extra space around and at the right
+ Add(12, 24);
+#elif defined(__WXGTK20__)
+ Add(0, 0, 0, wxLEFT, 9);
+ if (m_buttonHelp)
+ Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
+
+ // extra whitespace between help and cancel/ok buttons
+ Add(0, 0, 1, wxEXPAND, 0);
+
+ if (m_buttonNegative){
+ Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
+ }
+
+ // according to HIG, in explicit apply windows the order is:
+ // [ Help Apply Cancel OK ]
+ if (m_buttonApply)
+ Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
+
+ if (m_buttonCancel){
+ Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
+ // Cancel or help should be default
+ // m_buttonCancel->SetDefaultButton();
+ }
+
+ if (m_buttonAffirmative)
+ Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT, 6);
+#elif defined(__WXMSW__)
+ // Windows
+
+ // right-justify buttons
+ Add(0, 0, 1, wxEXPAND, 0);
+
+ if (m_buttonAffirmative){
+ Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonAffirmative->ConvertDialogToPixels(wxSize(2, 0)).x);
+ }
+
+ if (m_buttonNegative){
+ Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonNegative->ConvertDialogToPixels(wxSize(2, 0)).x);
+ }
+
+ if (m_buttonCancel){
+ Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonCancel->ConvertDialogToPixels(wxSize(2, 0)).x);
+ }
+ if (m_buttonApply)
+ Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonApply->ConvertDialogToPixels(wxSize(2, 0)).x);
+
+ if (m_buttonHelp)
+ Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonHelp->ConvertDialogToPixels(wxSize(2, 0)).x);
+#else
+ // GTK+1 and any other platform
+
+ // Add(0, 0, 0, wxLEFT, 5); // Not sure what this was for but it unbalances the dialog
+ if (m_buttonHelp)
+ Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonHelp->ConvertDialogToPixels(wxSize(4, 0)).x);
+
+ // extra whitespace between help and cancel/ok buttons
+ Add(0, 0, 1, wxEXPAND, 0);