From c6ece59558c53013aedd0d010029ec57b905e83f Mon Sep 17 00:00:00 2001
From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Sun, 25 Sep 2005 20:17:01 +0000
Subject: [PATCH] added and documented SetEscapeId()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35689 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/changes.txt         |  4 ++++
 docs/latex/wx/dialog.tex | 52 ++++++++++++++++++++++++++++++++++++++++
 include/wx/dialog.h      | 12 +++-------
 src/common/dlgcmn.cpp    |  3 ++-
 4 files changed, 61 insertions(+), 10 deletions(-)

diff --git a/docs/changes.txt b/docs/changes.txt
index 97e038535f..7d7d9f4c52 100644
--- a/docs/changes.txt
+++ b/docs/changes.txt
@@ -9,6 +9,10 @@ All:
 
 - wxLaunchDefaultBrowser() now supports wxBROWSER_NEW_WINDOW flag
 
+All (GUI):
+
+- added wxDialog::SetEscapeId()
+
 wxMSW:
 
 - wxFileDialog respects absence of wxCHANGE_DIR flag under NT (Brad Anderson)
diff --git a/docs/latex/wx/dialog.tex b/docs/latex/wx/dialog.tex
index 7d3b71676d..4107a01362 100644
--- a/docs/latex/wx/dialog.tex
+++ b/docs/latex/wx/dialog.tex
@@ -97,6 +97,7 @@ See also \helpref{Generic window styles}{windowstyles}.
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
+
 \membersection{wxDialog::wxDialog}\label{wxdialogctor}
 
 \func{}{wxDialog}{\void}
@@ -136,12 +137,14 @@ individual dialog boxes.}
 
 \helpref{wxDialog::Create}{wxdialogcreate}
 
+
 \membersection{wxDialog::\destruct{wxDialog}}\label{wxdialogdtor}
 
 \func{}{\destruct{wxDialog}}{\void}
 
 Destructor. Deletes any child windows before deleting the physical window.
 
+
 \membersection{wxDialog::Centre}\label{wxdialogcentre}
 
 \func{void}{Centre}{\param{int}{ direction = wxBOTH}}
@@ -152,6 +155,7 @@ Centres the dialog box on the display.
 
 \docparam{direction}{May be {\tt wxHORIZONTAL}, {\tt wxVERTICAL} or {\tt wxBOTH}.}
 
+
 \membersection{wxDialog::Create}\label{wxdialogcreate}
 
 \func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id},\rtfsp
@@ -164,6 +168,7 @@ Centres the dialog box on the display.
 Used for two-step dialog box construction. See \helpref{wxDialog::wxDialog}{wxdialogctor}\rtfsp
 for details.
 
+
 \membersection{wxDialog::CreateButtonSizer}\label{wxdialogcreatebuttonsizer}
 
 \func{wxSizer*}{CreateButtonSizer}{\param{long}{ flags}}
@@ -175,6 +180,7 @@ The sizer lays out the buttons in a manner appropriate to the platform.
 
 This function simply calls \helpref{CreateStdDialogButtonSizer}{wxdialogcreatestddialogbuttonsizer}.
 
+
 \membersection{wxDialog::CreateStdDialogButtonSizer}\label{wxdialogcreatestddialogbuttonsizer}
 
 \func{wxStdDialogButtonSizer*}{CreateStdDialogButtonSizer}{\param{long}{ flags}}
@@ -184,6 +190,7 @@ of the following flags: wxOK, wxCANCEL, wxYES, wxNO, wxHELP, wxNO\_DEFAULT.
 
 The sizer lays out the buttons in a manner appropriate to the platform.
 
+
 \membersection{wxDialog::DoOK}\label{wxdialogdook}
 
 \func{virtual bool}{DoOK}{\void}
@@ -193,6 +200,7 @@ A command event for the identifier returned by GetAffirmativeId is sent by
 default. You can override this function. If the function returns false, wxWidgets
 will call Close() for the dialog.
 
+
 \membersection{wxDialog::EndModal}\label{wxdialogendmodal}
 
 \func{void}{EndModal}{\param{int }{retCode}}
@@ -210,6 +218,7 @@ invocation.
 \helpref{wxDialog::GetReturnCode}{wxdialoggetreturncode},\rtfsp
 \helpref{wxDialog::SetReturnCode}{wxdialogsetreturncode}
 
+
 \membersection{wxDialog::GetAffirmativeId}\label{wxdialoggetaffirmativeid}
 
 \constfunc{int}{GetAffirmativeId}{\void}
@@ -220,6 +229,19 @@ Gets the identifier to be used when the user presses an OK button in a PocketPC
 
 \helpref{wxDialog::SetAffirmativeId}{wxdialogsetaffirmativeid}
 
+
+\membersection{wxDialog::GetEscapeId}\label{wxdialoggetescapeid}
+
+\constfunc{int}{GetEscapeId}{\void}
+
+Gets the identifier of the button to map presses of \texttt{\textsc{ESC}}
+button to.
+
+\wxheading{See also}
+
+\helpref{wxDialog::SetEscapeId}{wxdialogsetescapeid}
+
+
 \membersection{wxDialog::GetReturnCode}\label{wxdialoggetreturncode}
 
 \func{int}{GetReturnCode}{\void}
@@ -236,12 +258,14 @@ a code to the application.
 \helpref{wxDialog::SetReturnCode}{wxdialogsetreturncode}, \helpref{wxDialog::ShowModal}{wxdialogshowmodal},\rtfsp
 \helpref{wxDialog::EndModal}{wxdialogendmodal}
 
+
 \membersection{wxDialog::GetTitle}\label{wxdialoggettitle}
 
 \constfunc{wxString}{GetTitle}{\void}
 
 Returns the title of the dialog box.
 
+
 \membersection{wxDialog::GetToolBar}\label{wxdialoggettoolbar}
 
 \constfunc{wxToolBar*}{GetToolBar}{\void}
@@ -252,6 +276,7 @@ arbitrary controls are not currently supported.
 
 This function is not available on any other platform.
 
+
 \membersection{wxDialog::Iconize}\label{wxdialogiconized}
 
 \func{void}{Iconize}{\param{const bool}{ iconize}}
@@ -270,6 +295,7 @@ boxes under Motif which have user-iconizable frames, and under Windows
 calling {\tt Iconize(false)} will bring the window to the front, as does
 \rtfsp{\tt Show(true)}.
 
+
 \membersection{wxDialog::IsIconized}\label{wxdialogisiconized}
 
 \constfunc{bool}{IsIconized}{\void}
@@ -280,12 +306,14 @@ Returns true if the dialog box is iconized. Windows only.
 
 Always returns false under Windows since dialogs cannot be iconized.
 
+
 \membersection{wxDialog::IsModal}\label{wxdialogismodal}
 
 \constfunc{bool}{IsModal}{\void}
 
 Returns true if the dialog box is modal, false otherwise.
 
+
 \membersection{wxDialog::OnApply}\label{wxdialogonapply}
 
 \func{void}{OnApply}{\param{wxCommandEvent\& }{event}}
@@ -300,6 +328,7 @@ This function calls \helpref{wxWindow::Validate}{wxwindowvalidate} and \helpref{
 
 \helpref{wxDialog::OnOK}{wxdialogonok}, \helpref{wxDialog::OnCancel}{wxdialogoncancel}
 
+
 \membersection{wxDialog::OnCancel}\label{wxdialogoncancel}
 
 \func{void}{OnCancel}{\param{wxCommandEvent\& }{event}}
@@ -315,6 +344,7 @@ sets the return value to wxID\_CANCEL and calls {\bf Show(false)} if the dialog
 
 \helpref{wxDialog::OnOK}{wxdialogonok}, \helpref{wxDialog::OnApply}{wxdialogonapply}
 
+
 \membersection{wxDialog::OnOK}\label{wxdialogonok}
 
 \func{void}{OnOK}{\param{wxCommandEvent\& }{event}}
@@ -332,6 +362,7 @@ sets the return value to wxID\_OK and calls {\bf Show(false)} if the dialog is m
 
 \helpref{wxDialog::OnCancel}{wxdialogoncancel}, \helpref{wxDialog::OnApply}{wxdialogonapply}
 
+
 \membersection{wxDialog::OnSysColourChanged}\label{wxdialogonsyscolourchanged}
 
 \func{void}{OnSysColourChanged}{\param{wxSysColourChangedEvent\& }{event}}
@@ -354,6 +385,7 @@ propagate the notification to child windows and controls.
 
 \helpref{wxSysColourChangedEvent}{wxsyscolourchangedevent}
 
+
 \membersection{wxDialog::SetAffirmativeId}\label{wxdialogsetaffirmativeid}
 
 \func{void}{SetAffirmativeId}{\param{int }{id}}
@@ -365,6 +397,20 @@ By default, this is wxID\_OK.
 
 \helpref{wxDialog::GetAffirmativeId}{wxdialoggetaffirmativeid}
 
+
+\membersection{wxDialog::SetEscapeId}\label{wxdialogsetescapeid}
+
+\func{void}{SetEscapeId}{\param{int }{id}}
+
+Sets the identifier to be used when the user presses \texttt{\textsc{ESC}}
+button in the dialog. By default, this is \texttt{wxID\_ANY} meaning that
+the first suitable button is used: if there a \texttt{wxID\_CANCEL} button, it
+is activated, otherwise \texttt{wxID\_OK} button is activated if present.
+Another possible special value for \arg{id} is \texttt{wxID\_NONE} meaning that
+\texttt{\textsc{ESC}} presses should be ignored. If another value is given, it
+is interpreted as the id of the button to map the escape key to.
+
+
 \membersection{wxDialog::SetIcon}\label{wxdialogseticon}
 
 \func{void}{SetIcon}{\param{const wxIcon\& }{icon}}
@@ -377,6 +423,7 @@ Sets the icon for this dialog.
 
 See also \helpref{wxIcon}{wxicon}.
 
+
 \membersection{wxDialog::SetIcons}\label{wxdialogseticons}
 
 \func{void}{SetIcons}{\param{const wxIconBundle\& }{icons}}
@@ -389,6 +436,7 @@ Sets the icons for this dialog.
 
 See also \helpref{wxIconBundle}{wxiconbundle}.
 
+
 \membersection{wxDialog::SetModal}\label{wxdialogsetmodal}
 
 \func{void}{SetModal}{\param{const bool}{ flag}}
@@ -403,6 +451,7 @@ until the dialog is hidden) or modeless (control returns immediately).
 
 \docparam{flag}{If true, the dialog will be modal, otherwise it will be modeless.}
 
+
 \membersection{wxDialog::SetReturnCode}\label{wxdialogsetreturncode}
 
 \func{void}{SetReturnCode}{\param{int }{retCode}}
@@ -423,6 +472,7 @@ a code to the application. The function \helpref{wxDialog::EndModal}{wxdialogend
 \helpref{wxDialog::GetReturnCode}{wxdialoggetreturncode}, \helpref{wxDialog::ShowModal}{wxdialogshowmodal},\rtfsp
 \helpref{wxDialog::EndModal}{wxdialogendmodal}
 
+
 \membersection{wxDialog::SetTitle}\label{wxdialogsettitle}
 
 \func{void}{SetTitle}{\param{const wxString\& }{ title}}
@@ -433,6 +483,7 @@ Sets the title of the dialog box.
 
 \docparam{title}{The dialog box title.}
 
+
 \membersection{wxDialog::Show}\label{wxdialogshow}
 
 \func{bool}{Show}{\param{const bool}{ show}}
@@ -449,6 +500,7 @@ modal, control is returned to the calling program.}
 
 The preferred way of dismissing a modal dialog is to use \helpref{wxDialog::EndModal}{wxdialogendmodal}.
 
+
 \membersection{wxDialog::ShowModal}\label{wxdialogshowmodal}
 
 \func{int}{ShowModal}{\void}
diff --git a/include/wx/dialog.h b/include/wx/dialog.h
index ac1e23f9cc..7df4f1f9a1 100644
--- a/include/wx/dialog.h
+++ b/include/wx/dialog.h
@@ -47,17 +47,8 @@ public:
     int GetAffirmativeId() const { return m_affirmativeId; }
 
     // Identifier for Esc key translation
-#if wxCHECK_VERSION(2, 7, 0)
-    #error "Uncomment SetEscapeId() implementation"
-
-    // this is what we should do in 2.7: remove the "#else" part and add
-    // m_escapeId declaration and the docs for Set/GetEscapeId()
     void SetEscapeId(int escapeId) { m_escapeId = escapeId; }
     int GetEscapeId() const { return m_escapeId; }
-#elif wxABI_VERSION > 20601
-    // just a stub for 2.6
-    int GetEscapeId() const { return wxID_ANY; }
-#endif
 
 #if wxUSE_STATTEXT // && wxUSE_TEXTCTRL
     // splits text up at newlines and places the
@@ -78,6 +69,9 @@ protected:
     // The identifier for the affirmative button (usually wxID_OK)
     int m_affirmativeId;
 
+    // The identifier for cancel button (usually wxID_CANCEL)
+    int m_escapeId;
+
     DECLARE_NO_COPY_CLASS(wxDialogBase)
     DECLARE_EVENT_TABLE()
     WX_DECLARE_CONTROL_CONTAINER();
diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp
index f03af0e601..ba4e88cbbe 100644
--- a/src/common/dlgcmn.cpp
+++ b/src/common/dlgcmn.cpp
@@ -108,7 +108,8 @@ void wxDialogBase::Init()
 {
     m_returnCode = 0;
     m_affirmativeId = wxID_OK;
-    
+    m_escapeId = wxID_ANY;
+
     // the dialogs have this flag on by default to prevent the events from the
     // dialog controls from reaching the parent frame which is usually
     // undesirable and can lead to unexpected and hard to find bugs
-- 
2.50.0

