wxDIALOG_ADAPTATION_MODE_DISABLED = 2 // disable this dialog overriding global status
};
+enum wxDialogModality
+{
+ wxDIALOG_MODALITY_NONE = 0,
+ wxDIALOG_MODALITY_WINDOW_MODAL = 1,
+ wxDIALOG_MODALITY_APP_MODAL = 2
+};
+
extern WXDLLIMPEXP_DATA_CORE(const char) wxDialogNameStr[];
class WXDLLIMPEXP_CORE wxDialogBase : public wxTopLevelWindow
virtual int ShowModal() = 0;
virtual void EndModal(int retCode) = 0;
virtual bool IsModal() const = 0;
-
+ // show the dialog frame-modally (needs a parent), using app-modal
+ // dialogs on platforms that don't support it
+ virtual bool ShowWindowModal () ;
+ virtual void SendWindowModalDialogEvent ( wxEventType type );
// Modal dialogs have a return code - usually the id of the last
// pressed button
static bool IsLayoutAdaptationEnabled() { return sm_layoutAdaptation; }
static void EnableLayoutAdaptation(bool enable) { sm_layoutAdaptation = enable; }
+ // modality kind
+ wxDialogModality GetModality() const;
protected:
// emulate click of a button with the given id if it's present in the dialog
//
// wxID_OK return code
void AcceptAndClose();
-
// The return code from modal dialog
int m_returnCode;
#endif
#endif
+class WXDLLIMPEXP_CORE wxWindowModalDialogEvent : public wxCommandEvent
+{
+public:
+ wxWindowModalDialogEvent (wxEventType commandType = wxEVT_NULL, int id = 0)
+ : wxCommandEvent(commandType, id) { }
+
+ wxDialog *GetDialog() const
+ { return wxStaticCast(GetEventObject(), wxDialog); }
+
+ int GetReturnCode() const
+ { return GetDialog()->GetReturnCode(); }
+
+ virtual wxEvent *Clone() const { return new wxWindowModalDialogEvent (*this); }
+
+private:
+ DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWindowModalDialogEvent )
+};
+
+wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_WINDOW_MODAL_DIALOG_CLOSED , wxWindowModalDialogEvent );
+
+typedef void (wxEvtHandler::*wxWindowModalDialogEventFunction)(wxWindowModalDialogEvent &);
+
+#define wxWindowModalDialogEventHandler(func) \
+ wxEVENT_HANDLER_CAST(wxWindowModalDialogEventFunction, func)
+
#endif
// _WX_DIALOG_H_BASE_
}
}
+// ----------------------------------------------------------------------------
+// compatibility methods for supporting the modality API
+// ----------------------------------------------------------------------------
+
+wxDEFINE_EVENT( wxEVT_WINDOW_MODAL_DIALOG_CLOSED , wxWindowModalDialogEvent );
+
+bool wxDialogBase::ShowWindowModal ()
+{
+ ShowModal();
+ SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED );
+ return true;
+}
+
+void wxDialogBase::SendWindowModalDialogEvent ( wxEventType type )
+{
+ wxCommandEvent event ( type, GetId());
+ event.SetEventObject(this);
+
+ if ( !GetEventHandler()->ProcessEvent(event) )
+ {
+ // the event is not propagated upwards to the parent automatically
+ // because the dialog is a top level window, so do it manually as
+ // in 9 cases of 10 the message must be processed by the dialog
+ // owner and not the dialog itself
+ (void)GetParent()->GetEventHandler()->ProcessEvent(event);
+ }
+}
+
+
+wxDialogModality wxDialogBase::GetModality() const
+{
+ return IsModal() ? wxDIALOG_MODALITY_APP_MODAL : wxDIALOG_MODALITY_NONE;
+}
+
// ----------------------------------------------------------------------------
// other event handlers
// ----------------------------------------------------------------------------