X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec376c8fd9ff813392030426acd2317c6fa6527e..1f0acb435592470b421b80df854fbbb08cd2853f:/include/wx/generic/filepickerg.h?ds=sidebyside diff --git a/include/wx/generic/filepickerg.h b/include/wx/generic/filepickerg.h index b4ddc900c9..d7a0b495e6 100644 --- a/include/wx/generic/filepickerg.h +++ b/include/wx/generic/filepickerg.h @@ -12,13 +12,13 @@ #ifndef _WX_FILEDIRPICKER_H_ #define _WX_FILEDIRPICKER_H_ -#include "wx/filename.h" +#include "wx/button.h" #include "wx/filedlg.h" #include "wx/dirdlg.h" -extern const wxEventType wxEVT_COMMAND_DIRPICKER_CHANGED; -extern const wxEventType wxEVT_COMMAND_FILEPICKER_CHANGED; +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_COMMAND_DIRPICKER_CHANGED, wxFileDirPickerEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_COMMAND_FILEPICKER_CHANGED, wxFileDirPickerEvent ); //----------------------------------------------------------------------------- @@ -29,7 +29,7 @@ class WXDLLIMPEXP_CORE wxGenericFileDirButton : public wxButton, public wxFileDirPickerWidgetBase { public: - wxGenericFileDirButton() { m_dialog = NULL; } + wxGenericFileDirButton() { Init(); } wxGenericFileDirButton(wxWindow *parent, wxWindowID id, const wxString& label = wxFilePickerWidgetLabel, @@ -42,32 +42,24 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxFilePickerWidgetNameStr) { - m_dialog = NULL; + Init(); Create(parent, id, label, path, message, wildcard, pos, size, style, validator, name); } - virtual ~wxGenericFileDirButton() {} + virtual wxControl *AsControl() { return this; } -public: // overrideable +public: // overridable - virtual bool CreateDialog(const wxString &message, - const wxString &wildcard) = 0; + virtual wxDialog *CreateDialog() = 0; - // NULL is because of a problem with destruction order in both generic & GTK code virtual wxWindow *GetDialogParent() - { return NULL; } + { return GetParent(); } virtual wxEventType GetEventType() const = 0; public: - bool Destroy() - { - m_dialog->Destroy(); - return wxButton::Destroy(); - } - bool Create(wxWindow *parent, wxWindowID id, const wxString& label = wxFilePickerWidgetLabel, const wxString& path = wxEmptyString, @@ -82,7 +74,17 @@ public: // event handler for the click void OnButtonClick(wxCommandEvent &); - wxDialog *m_dialog; +protected: + wxString m_message, m_wildcard; + + // we just store the style passed to the ctor here instead of passing it to + // wxButton as some of our bits can conflict with wxButton styles and it + // just doesn't make sense to use picker styles for wxButton anyhow + long m_pickerStyle; + +private: + // common part of all ctors + void Init() { m_pickerStyle = -1; } }; @@ -90,7 +92,7 @@ public: // wxGenericFileButton: a button which brings up a wxFileDialog //----------------------------------------------------------------------------- -#define wxFILEBTN_DEFAULT_STYLE wxFLP_OPEN +#define wxFILEBTN_DEFAULT_STYLE (wxFLP_OPEN) class WXDLLIMPEXP_CORE wxGenericFileButton : public wxGenericFileDirButton { @@ -112,47 +114,52 @@ public: pos, size, style, validator, name); } -public: // overrideable +public: // overridable virtual long GetDialogStyle() const { + // the derived class must initialize it if it doesn't use the + // non-default wxGenericFileDirButton ctor + wxASSERT_MSG( m_pickerStyle != -1, + "forgot to initialize m_pickerStyle?" ); + + long filedlgstyle = 0; - if (this->HasFlag(wxFLP_OPEN)) + if ( m_pickerStyle & wxFLP_OPEN ) filedlgstyle |= wxFD_OPEN; - if (this->HasFlag(wxFLP_SAVE)) + if ( m_pickerStyle & wxFLP_SAVE ) filedlgstyle |= wxFD_SAVE; - if (this->HasFlag(wxFLP_OVERWRITE_PROMPT)) + if ( m_pickerStyle & wxFLP_OVERWRITE_PROMPT ) filedlgstyle |= wxFD_OVERWRITE_PROMPT; - if (this->HasFlag(wxFLP_FILE_MUST_EXIST)) + if ( m_pickerStyle & wxFLP_FILE_MUST_EXIST ) filedlgstyle |= wxFD_FILE_MUST_EXIST; - if (this->HasFlag(wxFLP_CHANGE_DIR)) + if ( m_pickerStyle & wxFLP_CHANGE_DIR ) filedlgstyle |= wxFD_CHANGE_DIR; return filedlgstyle; } - virtual bool CreateDialog(const wxString &message, const wxString &wildcard) + virtual wxDialog *CreateDialog() { - m_dialog = new wxFileDialog(GetDialogParent(), message, + wxFileDialog *p = new wxFileDialog(GetDialogParent(), m_message, wxEmptyString, wxEmptyString, - wildcard, GetDialogStyle()); + m_wildcard, GetDialogStyle()); // this sets both the default folder and the default file of the dialog - GetDialog()->SetPath(m_path); - - return true; + p->SetPath(m_path); + return p; } - wxFileDialog *GetDialog() - { return wxStaticCast(m_dialog, wxFileDialog); } - void UpdateDialogPath() - { GetDialog()->SetPath(m_path); } - void UpdatePathFromDialog() - { m_path = GetDialog()->GetPath(); } wxEventType GetEventType() const { return wxEVT_COMMAND_FILEPICKER_CHANGED; } +protected: + void UpdateDialogPath(wxDialog *p) + { wxStaticCast(p, wxFileDialog)->SetPath(m_path); } + void UpdatePathFromDialog(wxDialog *p) + { m_path = wxStaticCast(p, wxFileDialog)->GetPath(); } + private: DECLARE_DYNAMIC_CLASS(wxGenericFileButton) }; @@ -183,36 +190,35 @@ public: pos, size, style, validator, name); } -public: // overrideable +public: // overridable virtual long GetDialogStyle() const { - long dirdlgstyle = 0; + long dirdlgstyle = wxDD_DEFAULT_STYLE; - if (this->HasFlag(wxDIRP_DIR_MUST_EXIST)) + if ( m_pickerStyle & wxDIRP_DIR_MUST_EXIST ) dirdlgstyle |= wxDD_DIR_MUST_EXIST; - if (this->HasFlag(wxDIRP_CHANGE_DIR)) + if ( m_pickerStyle & wxDIRP_CHANGE_DIR ) dirdlgstyle |= wxDD_CHANGE_DIR; return dirdlgstyle; } - virtual bool CreateDialog(const wxString &message, const wxString &WXUNUSED(wildcard)) + virtual wxDialog *CreateDialog() { - m_dialog = new wxDirDialog(GetDialogParent(), message, m_path, + return new wxDirDialog(GetDialogParent(), m_message, m_path, GetDialogStyle()); - return true; } - wxDirDialog *GetDialog() - { return wxStaticCast(m_dialog, wxDirDialog); } - void UpdateDialogPath() - { GetDialog()->SetPath(m_path); } - void UpdatePathFromDialog() - { m_path = GetDialog()->GetPath(); } wxEventType GetEventType() const { return wxEVT_COMMAND_DIRPICKER_CHANGED; } +protected: + void UpdateDialogPath(wxDialog *p) + { wxStaticCast(p, wxDirDialog)->SetPath(m_path); } + void UpdatePathFromDialog(wxDialog *p) + { m_path = wxStaticCast(p, wxDirDialog)->GetPath(); } + private: DECLARE_DYNAMIC_CLASS(wxGenericDirButton) };