// ----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxDialogBase, wxTopLevelWindow)
- EVT_BUTTON(wxID_OK, wxDialogBase::OnOK)
- EVT_BUTTON(wxID_APPLY, wxDialogBase::OnApply)
- EVT_BUTTON(wxID_CANCEL, wxDialogBase::OnCancel)
+ EVT_BUTTON(wxID_ANY, wxDialogBase::OnButton)
EVT_CLOSE(wxDialogBase::OnCloseWindow)
#endif // wxUSE_BUTTON
// ----------------------------------------------------------------------------
-// event handling stuff
+// standard buttons handling
// ----------------------------------------------------------------------------
+void wxDialogBase::EndDialog(int rc)
+{
+ if ( IsModal() )
+ EndModal(rc);
+ else
+ Hide();
+}
+
+void wxDialogBase::AcceptAndClose()
+{
+ if ( Validate() && TransferDataFromWindow() )
+ {
+ EndDialog(m_affirmativeId);
+ }
+}
+
+void wxDialogBase::SetAffirmativeId(int affirmativeId)
+{
+ m_affirmativeId = affirmativeId;
+}
+
+void wxDialogBase::SetEscapeId(int escapeId)
+{
+ m_escapeId = escapeId;
+}
+
bool wxDialogBase::EmulateButtonClickIfPresent(int id)
{
+#if wxUSE_BUTTON
wxButton *btn = wxDynamicCast(FindWindow(id), wxButton);
if ( !btn || !btn->IsEnabled() || !btn->IsShown() )
btn->GetEventHandler()->ProcessEvent(event);
return true;
-}
-
-void wxDialogBase::EndDialog(int rc)
-{
- if ( IsModal() )
- EndModal(rc);
- else
- Hide();
+#else // !wxUSE_BUTTON
+ wxUnusedVar(id);
+ return false;
+#endif // wxUSE_BUTTON/!wxUSE_BUTTON
}
bool wxDialogBase::IsEscapeKey(const wxKeyEvent& event)
// but if there is no such button, then fall back to wxID_OK
if ( EmulateButtonClickIfPresent(wxID_CANCEL) )
return;
- idCancel = wxID_OK;
+ idCancel = GetAffirmativeId();
// fall through
default:
event.Skip();
}
-void wxDialogBase::OnOK(wxCommandEvent& WXUNUSED(event))
+void wxDialogBase::OnButton(wxCommandEvent& event)
{
- if ( Validate() && TransferDataFromWindow() )
- {
- EndDialog(wxID_OK);
- }
-}
-
-void wxDialogBase::OnApply(wxCommandEvent& WXUNUSED(event))
-{
- if ( Validate() )
- TransferDataFromWindow();
+ const int id = event.GetId();
+ if ( id == GetAffirmativeId() )
+ {
+ AcceptAndClose();
+ }
+ else if ( id == wxID_APPLY )
+ {
+ if ( Validate() )
+ TransferDataFromWindow();
- // TODO probably need to disable the Apply button until things change again
+ // TODO: disable the Apply button until things change again
+ }
+ else if ( id == GetEscapeId() ||
+ (id == wxID_CANCEL && GetEscapeId() == wxID_ANY) )
+ {
+ EndDialog(wxID_CANCEL);
+ }
+ else // not a standard button
+ {
+ event.Skip();
+ }
}
-void wxDialogBase::OnCancel(wxCommandEvent& WXUNUSED(event))
-{
- EndDialog(wxID_CANCEL);
-}
+// ----------------------------------------------------------------------------
+// other event handlers
+// ----------------------------------------------------------------------------
void wxDialogBase::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
{