]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dialog.h
Base class factory on the wxFilter base class and implement the new Find feature.
[wxWidgets.git] / include / wx / dialog.h
index 9552597133dbff3cf0e01842394c80728fb85da2..766771c42d538c2b5f5cf2b7dc07b89bb7a2f38d 100644 (file)
@@ -32,7 +32,6 @@ extern WXDLLEXPORT_DATA(const wxChar) wxDialogNameStr[];
 class WXDLLEXPORT wxDialogBase : public wxTopLevelWindow
 {
 public:
 class WXDLLEXPORT wxDialogBase : public wxTopLevelWindow
 {
 public:
-
     enum
     {
         // all flags allowed in wxDialogBase::CreateButtonSizer()
     enum
     {
         // all flags allowed in wxDialogBase::CreateButtonSizer()
@@ -42,19 +41,27 @@ public:
     wxDialogBase() { Init(); }
     virtual ~wxDialogBase() { }
 
     wxDialogBase() { Init(); }
     virtual ~wxDialogBase() { }
 
-    void Init();
+    // define public wxDialog methods to be implemented by the derived classes
+    virtual int ShowModal() = 0;
+    virtual void EndModal(int retCode) = 0;
+    virtual bool IsModal() const = 0;
+
 
     // Modal dialogs have a return code - usually the id of the last
     // pressed button
     void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
     int GetReturnCode() const { return m_returnCode; }
 
 
     // Modal dialogs have a return code - usually the id of the last
     // pressed button
     void SetReturnCode(int returnCode) { m_returnCode = returnCode; }
     int GetReturnCode() const { return m_returnCode; }
 
-    // The identifier for the affirmative button
-    void SetAffirmativeId(int affirmativeId) { m_affirmativeId = affirmativeId; }
+    // Set the identifier for the affirmative button: this button will close
+    // the dialog after validating data and calling TransferDataFromWindow()
+    void SetAffirmativeId(int affirmativeId);
     int GetAffirmativeId() const { return m_affirmativeId; }
 
     int GetAffirmativeId() const { return m_affirmativeId; }
 
-    // Identifier for Esc key translation
-    void SetEscapeId(int escapeId) { m_escapeId = escapeId; }
+    // Set identifier for Esc key translation: the button with this id will
+    // close the dialog without doing anything else; special value wxID_NONE
+    // means to not handle Esc at all while wxID_ANY means to map Esc to
+    // wxID_CANCEL if present and GetAffirmativeId() otherwise
+    void SetEscapeId(int escapeId);
     int GetEscapeId() const { return m_escapeId; }
 
 #if wxUSE_STATTEXT // && wxUSE_TEXTCTRL
     int GetEscapeId() const { return m_escapeId; }
 
 #if wxUSE_STATTEXT // && wxUSE_TEXTCTRL
@@ -63,15 +70,45 @@ public:
     wxSizer *CreateTextSizer( const wxString &message );
 #endif // wxUSE_STATTEXT // && wxUSE_TEXTCTRL
 
     wxSizer *CreateTextSizer( const wxString &message );
 #endif // wxUSE_STATTEXT // && wxUSE_TEXTCTRL
 
-    // places buttons into a horizontal wxBoxSizer
-    wxSizer *CreateButtonSizer( long flags,
-                                bool separated = false,
-                                wxCoord distance = 0 );
+    // returns a horizontal wxBoxSizer containing the given buttons
+    //
+    // notice that the returned sizer can be NULL if no buttons are put in the
+    // sizer (this mostly happens under smart phones and other atypical
+    // platforms which have hardware buttons replacing OK/Cancel and such)
+    wxSizer *CreateButtonSizer(long flags);
+
+    // returns the sizer containing CreateButtonSizer() below a separating
+    // static line for the platforms which use static lines for items
+    // separation (i.e. not Mac)
+    wxSizer *CreateSeparatedButtonSizer(long flags);
+
 #if wxUSE_BUTTON
     wxStdDialogButtonSizer *CreateStdDialogButtonSizer( long flags );
 #endif // wxUSE_BUTTON
 
 protected:
 #if wxUSE_BUTTON
     wxStdDialogButtonSizer *CreateStdDialogButtonSizer( long flags );
 #endif // wxUSE_BUTTON
 
 protected:
+    // emulate click of a button with the given id if it's present in the dialog
+    //
+    // return true if button was "clicked" or false if we don't have it
+    bool EmulateButtonClickIfPresent(int id);
+
+    // this function is used by OnCharHook() to decide whether the given key
+    // should close the dialog
+    //
+    // for most platforms the default implementation (which just checks for
+    // Esc) is sufficient, but Mac port also adds Cmd-. here and other ports
+    // could do something different if needed
+    virtual bool IsEscapeKey(const wxKeyEvent& event);
+
+    // end either modal or modeless dialog, for the modal dialog rc is used as
+    // the dialog return code
+    void EndDialog(int rc);
+
+    // call Validate() and TransferDataFromWindow() and close dialog with
+    // wxID_OK return code
+    void AcceptAndClose();
+
+
     // The return code from modal dialog
     int m_returnCode;
 
     // The return code from modal dialog
     int m_returnCode;
 
@@ -81,6 +118,23 @@ protected:
     // The identifier for cancel button (usually wxID_CANCEL)
     int m_escapeId;
 
     // The identifier for cancel button (usually wxID_CANCEL)
     int m_escapeId;
 
+private:
+    // common part of all ctors
+    void Init();
+
+    // handle Esc key presses
+    void OnCharHook(wxKeyEvent& event);
+
+    // handle closing the dialog window
+    void OnCloseWindow(wxCloseEvent& event);
+
+    // handle the standard buttons
+    void OnButton(wxCommandEvent& event);
+
+    // update the background colour
+    void OnSysColourChanged(wxSysColourChangedEvent& event);
+
+
     DECLARE_NO_COPY_CLASS(wxDialogBase)
     DECLARE_EVENT_TABLE()
     WX_DECLARE_CONTROL_CONTAINER();
     DECLARE_NO_COPY_CLASS(wxDialogBase)
     DECLARE_EVENT_TABLE()
     WX_DECLARE_CONTROL_CONTAINER();