X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a8362297aaef3898fae7f452b6e230a6e099c5c..70680b6177bdcebadfa329fae91c240aa9023f2b:/include/wx/generic/filepickerg.h diff --git a/include/wx/generic/filepickerg.h b/include/wx/generic/filepickerg.h index 4485a30e19..9e18e495a2 100644 --- a/include/wx/generic/filepickerg.h +++ b/include/wx/generic/filepickerg.h @@ -13,13 +13,12 @@ #define _WX_FILEDIRPICKER_H_ #include "wx/button.h" -#include "wx/filename.h" #include "wx/filedlg.h" #include "wx/dirdlg.h" -extern WXDLLEXPORT_DATA(const wxEventType) wxEVT_COMMAND_DIRPICKER_CHANGED; -extern WXDLLEXPORT_DATA(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 ); //----------------------------------------------------------------------------- @@ -30,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, @@ -43,31 +42,25 @@ 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: + virtual void SetInitialDirectory(const wxString& dir); - bool Destroy() - { - if (m_dialog) m_dialog->Destroy(); - return wxButton::Destroy(); - } +public: bool Create(wxWindow *parent, wxWindowID id, const wxString& label = wxFilePickerWidgetLabel, @@ -83,7 +76,20 @@ 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; + + // Initial directory set by SetInitialDirectory() call or empty. + wxString m_initialDir; + +private: + // common part of all ctors + void Init() { m_pickerStyle = -1; } }; @@ -91,7 +97,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 { @@ -113,47 +119,43 @@ 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) - { - m_dialog = new wxFileDialog(GetDialogParent(), message, - wxEmptyString, wxEmptyString, - wildcard, GetDialogStyle()); - - // this sets both the default folder and the default file of the dialog - GetDialog()->SetPath(m_path); - - return true; - } + virtual wxDialog *CreateDialog(); - 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) }; @@ -184,36 +186,31 @@ 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)) - { - m_dialog = new wxDirDialog(GetDialogParent(), message, m_path, - GetDialogStyle()); - return true; - } + virtual wxDialog *CreateDialog(); - 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) };