1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/generic/filepickerg.h 3 // Purpose: wxGenericFileDirButton, wxGenericFileButton, wxGenericDirButton 4 // Author: Francesco Montorsi 5 // Modified by: 6 // Created: 14/4/2006 7 // Copyright: (c) Francesco Montorsi 8 // RCS-ID: $Id: filepickerg.h 40100 2006-07-15 15:13:04Z VS $ 9 // Licence: wxWindows Licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_FILEDIRPICKER_H_ 13 #define _WX_FILEDIRPICKER_H_ 14 15 #include "wx/button.h" 16 #include "wx/filedlg.h" 17 #include "wx/dirdlg.h" 18 19 20 extern WXDLLEXPORT_DATA(const wxEventType) wxEVT_COMMAND_DIRPICKER_CHANGED; 21 extern WXDLLEXPORT_DATA(const wxEventType) wxEVT_COMMAND_FILEPICKER_CHANGED; 22 23 24 //----------------------------------------------------------------------------- 25 // wxGenericFileDirButton: a button which brings up a wx{File|Dir}Dialog 26 //----------------------------------------------------------------------------- 27 28 class WXDLLIMPEXP_CORE wxGenericFileDirButton : public wxButton, 29 public wxFileDirPickerWidgetBase 30 { 31 public: wxGenericFileDirButton()32 wxGenericFileDirButton() { } 33 wxGenericFileDirButton(wxWindow *parent, 34 wxWindowID id, 35 const wxString& label = wxFilePickerWidgetLabel, 36 const wxString& path = wxEmptyString, 37 const wxString &message = wxFileSelectorPromptStr, 38 const wxString &wildcard = wxFileSelectorDefaultWildcardStr, 39 const wxPoint& pos = wxDefaultPosition, 40 const wxSize& size = wxDefaultSize, 41 long style = 0, 42 const wxValidator& validator = wxDefaultValidator, 43 const wxString& name = wxFilePickerWidgetNameStr) 44 { 45 Create(parent, id, label, path, message, wildcard, 46 pos, size, style, validator, name); 47 } 48 ~wxGenericFileDirButton()49 virtual ~wxGenericFileDirButton() {} 50 AsControl()51 virtual wxControl *AsControl() { return this; } 52 53 public: // overrideable 54 55 virtual wxDialog *CreateDialog() = 0; 56 GetDialogParent()57 virtual wxWindow *GetDialogParent() 58 { return GetParent(); } 59 60 virtual wxEventType GetEventType() const = 0; 61 62 public: 63 64 bool Create(wxWindow *parent, wxWindowID id, 65 const wxString& label = wxFilePickerWidgetLabel, 66 const wxString& path = wxEmptyString, 67 const wxString &message = wxFileSelectorPromptStr, 68 const wxString &wildcard = wxFileSelectorDefaultWildcardStr, 69 const wxPoint& pos = wxDefaultPosition, 70 const wxSize& size = wxDefaultSize, 71 long style = 0, 72 const wxValidator& validator = wxDefaultValidator, 73 const wxString& name = wxFilePickerWidgetNameStr); 74 75 // event handler for the click 76 void OnButtonClick(wxCommandEvent &); 77 78 protected: 79 wxString m_message, m_wildcard; 80 }; 81 82 83 //----------------------------------------------------------------------------- 84 // wxGenericFileButton: a button which brings up a wxFileDialog 85 //----------------------------------------------------------------------------- 86 87 #define wxFILEBTN_DEFAULT_STYLE (wxFLP_OPEN) 88 89 class WXDLLIMPEXP_CORE wxGenericFileButton : public wxGenericFileDirButton 90 { 91 public: wxGenericFileButton()92 wxGenericFileButton() {} 93 wxGenericFileButton(wxWindow *parent, 94 wxWindowID id, 95 const wxString& label = wxFilePickerWidgetLabel, 96 const wxString& path = wxEmptyString, 97 const wxString &message = wxFileSelectorPromptStr, 98 const wxString &wildcard = wxFileSelectorDefaultWildcardStr, 99 const wxPoint& pos = wxDefaultPosition, 100 const wxSize& size = wxDefaultSize, 101 long style = wxFILEBTN_DEFAULT_STYLE, 102 const wxValidator& validator = wxDefaultValidator, 103 const wxString& name = wxFilePickerWidgetNameStr) 104 { 105 Create(parent, id, label, path, message, wildcard, 106 pos, size, style, validator, name); 107 } 108 109 public: // overrideable 110 GetDialogStyle()111 virtual long GetDialogStyle() const 112 { 113 long filedlgstyle = 0; 114 115 if (this->HasFlag(wxFLP_OPEN)) 116 filedlgstyle |= wxFD_OPEN; 117 if (this->HasFlag(wxFLP_SAVE)) 118 filedlgstyle |= wxFD_SAVE; 119 if (this->HasFlag(wxFLP_OVERWRITE_PROMPT)) 120 filedlgstyle |= wxFD_OVERWRITE_PROMPT; 121 if (this->HasFlag(wxFLP_FILE_MUST_EXIST)) 122 filedlgstyle |= wxFD_FILE_MUST_EXIST; 123 if (this->HasFlag(wxFLP_CHANGE_DIR)) 124 filedlgstyle |= wxFD_CHANGE_DIR; 125 126 return filedlgstyle; 127 } 128 CreateDialog()129 virtual wxDialog *CreateDialog() 130 { 131 wxFileDialog *p = new wxFileDialog(GetDialogParent(), m_message, 132 wxEmptyString, wxEmptyString, 133 m_wildcard, GetDialogStyle()); 134 135 // this sets both the default folder and the default file of the dialog 136 p->SetPath(m_path); 137 return p; 138 } 139 GetEventType()140 wxEventType GetEventType() const 141 { return wxEVT_COMMAND_FILEPICKER_CHANGED; } 142 143 protected: UpdateDialogPath(wxDialog * p)144 void UpdateDialogPath(wxDialog *p) 145 { wxStaticCast(p, wxFileDialog)->SetPath(m_path); } UpdatePathFromDialog(wxDialog * p)146 void UpdatePathFromDialog(wxDialog *p) 147 { m_path = wxStaticCast(p, wxFileDialog)->GetPath(); } 148 149 private: 150 DECLARE_DYNAMIC_CLASS(wxGenericFileButton) 151 }; 152 153 154 //----------------------------------------------------------------------------- 155 // wxGenericDirButton: a button which brings up a wxDirDialog 156 //----------------------------------------------------------------------------- 157 158 #define wxDIRBTN_DEFAULT_STYLE 0 159 160 class WXDLLIMPEXP_CORE wxGenericDirButton : public wxGenericFileDirButton 161 { 162 public: wxGenericDirButton()163 wxGenericDirButton() {} 164 wxGenericDirButton(wxWindow *parent, 165 wxWindowID id, 166 const wxString& label = wxDirPickerWidgetLabel, 167 const wxString& path = wxEmptyString, 168 const wxString &message = wxDirSelectorPromptStr, 169 const wxPoint& pos = wxDefaultPosition, 170 const wxSize& size = wxDefaultSize, 171 long style = wxDIRBTN_DEFAULT_STYLE, 172 const wxValidator& validator = wxDefaultValidator, 173 const wxString& name = wxDirPickerWidgetNameStr) 174 { 175 Create(parent, id, label, path, message, wxEmptyString, 176 pos, size, style, validator, name); 177 } 178 179 public: // overrideable 180 GetDialogStyle()181 virtual long GetDialogStyle() const 182 { 183 long dirdlgstyle = wxDD_DEFAULT_STYLE; 184 185 if (this->HasFlag(wxDIRP_DIR_MUST_EXIST)) 186 dirdlgstyle |= wxDD_DIR_MUST_EXIST; 187 if (this->HasFlag(wxDIRP_CHANGE_DIR)) 188 dirdlgstyle |= wxDD_CHANGE_DIR; 189 190 return dirdlgstyle; 191 } 192 CreateDialog()193 virtual wxDialog *CreateDialog() 194 { 195 return new wxDirDialog(GetDialogParent(), m_message, m_path, 196 GetDialogStyle()); 197 } 198 GetEventType()199 wxEventType GetEventType() const 200 { return wxEVT_COMMAND_DIRPICKER_CHANGED; } 201 202 protected: UpdateDialogPath(wxDialog * p)203 void UpdateDialogPath(wxDialog *p) 204 { wxStaticCast(p, wxDirDialog)->SetPath(m_path); } UpdatePathFromDialog(wxDialog * p)205 void UpdatePathFromDialog(wxDialog *p) 206 { m_path = wxStaticCast(p, wxDirDialog)->GetPath(); } 207 208 private: 209 DECLARE_DYNAMIC_CLASS(wxGenericDirButton) 210 }; 211 212 213 #endif // _WX_FILEDIRPICKER_H_ 214