1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/generic/filedlgg.h 3 // Purpose: wxGenericFileDialog 4 // Author: Robert Roebling 5 // Modified by: 6 // Created: 8/17/99 7 // Copyright: (c) Robert Roebling 8 // RCS-ID: $Id: filedlgg.h 39631 2006-06-08 10:05:42Z RR $ 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef _WX_FILEDLGG_H_ 13 #define _WX_FILEDLGG_H_ 14 15 #include "wx/listctrl.h" 16 #include "wx/datetime.h" 17 #include "wx/filefn.h" 18 #include "wx/filedlg.h" 19 20 //----------------------------------------------------------------------------- 21 // classes 22 //----------------------------------------------------------------------------- 23 24 class WXDLLEXPORT wxBitmapButton; 25 class WXDLLEXPORT wxCheckBox; 26 class WXDLLEXPORT wxChoice; 27 class WXDLLEXPORT wxFileData; 28 class WXDLLEXPORT wxFileCtrl; 29 class WXDLLEXPORT wxGenericFileDialog; 30 class WXDLLEXPORT wxListEvent; 31 class WXDLLEXPORT wxListItem; 32 class WXDLLEXPORT wxStaticText; 33 class WXDLLEXPORT wxTextCtrl; 34 35 //------------------------------------------------------------------------- 36 // wxGenericFileDialog 37 //------------------------------------------------------------------------- 38 39 class WXDLLEXPORT wxGenericFileDialog: public wxFileDialogBase 40 { 41 public: wxGenericFileDialog()42 wxGenericFileDialog() : wxFileDialogBase() { Init(); } 43 44 wxGenericFileDialog(wxWindow *parent, 45 const wxString& message = wxFileSelectorPromptStr, 46 const wxString& defaultDir = wxEmptyString, 47 const wxString& defaultFile = wxEmptyString, 48 const wxString& wildCard = wxFileSelectorDefaultWildcardStr, 49 long style = wxFD_DEFAULT_STYLE, 50 const wxPoint& pos = wxDefaultPosition, 51 const wxSize& sz = wxDefaultSize, 52 const wxString& name = wxFileDialogNameStr, 53 bool bypassGenericImpl = false ); 54 55 bool Create( wxWindow *parent, 56 const wxString& message = wxFileSelectorPromptStr, 57 const wxString& defaultDir = wxEmptyString, 58 const wxString& defaultFile = wxEmptyString, 59 const wxString& wildCard = wxFileSelectorDefaultWildcardStr, 60 long style = wxFD_DEFAULT_STYLE, 61 const wxPoint& pos = wxDefaultPosition, 62 const wxSize& sz = wxDefaultSize, 63 const wxString& name = wxFileDialogNameStr, 64 bool bypassGenericImpl = false ); 65 66 virtual ~wxGenericFileDialog(); 67 SetMessage(const wxString & message)68 virtual void SetMessage(const wxString& message) { SetTitle(message); } 69 virtual void SetPath(const wxString& path); 70 virtual void SetFilterIndex(int filterIndex); 71 virtual void SetWildcard(const wxString& wildCard); 72 73 // for multiple file selection 74 virtual void GetPaths(wxArrayString& paths) const; 75 virtual void GetFilenames(wxArrayString& files) const; 76 77 // implementation only from now on 78 // ------------------------------- 79 80 virtual int ShowModal(); 81 virtual bool Show( bool show = true ); 82 83 void OnSelected( wxListEvent &event ); 84 void OnActivated( wxListEvent &event ); 85 void OnList( wxCommandEvent &event ); 86 void OnReport( wxCommandEvent &event ); 87 void OnUp( wxCommandEvent &event ); 88 void OnHome( wxCommandEvent &event ); 89 void OnListOk( wxCommandEvent &event ); 90 void OnNew( wxCommandEvent &event ); 91 void OnChoiceFilter( wxCommandEvent &event ); 92 void OnTextEnter( wxCommandEvent &event ); 93 void OnTextChange( wxCommandEvent &event ); 94 void OnCheck( wxCommandEvent &event ); 95 96 virtual void HandleAction( const wxString &fn ); 97 98 virtual void UpdateControls(); 99 100 private: 101 // Don't use this implementation at all :-) 102 bool m_bypassGenericImpl; 103 104 protected: 105 // use the filter with the given index 106 void DoSetFilterIndex(int filterindex); 107 108 wxString m_filterExtension; 109 wxChoice *m_choice; 110 wxTextCtrl *m_text; 111 wxFileCtrl *m_list; 112 wxCheckBox *m_check; 113 wxStaticText *m_static; 114 wxBitmapButton *m_upDirButton; 115 wxBitmapButton *m_newDirButton; 116 117 private: 118 void Init(); 119 DECLARE_DYNAMIC_CLASS(wxGenericFileDialog) 120 DECLARE_EVENT_TABLE() 121 122 // these variables are preserved between wxGenericFileDialog calls 123 static long ms_lastViewStyle; // list or report? 124 static bool ms_lastShowHidden; // did we show hidden files? 125 }; 126 127 #ifdef wxUSE_GENERIC_FILEDIALOG 128 129 class WXDLLEXPORT wxFileDialog: public wxGenericFileDialog 130 { 131 public: wxFileDialog()132 wxFileDialog() {} 133 134 wxFileDialog(wxWindow *parent, 135 const wxString& message = wxFileSelectorPromptStr, 136 const wxString& defaultDir = wxEmptyString, 137 const wxString& defaultFile = wxEmptyString, 138 const wxString& wildCard = wxFileSelectorDefaultWildcardStr, 139 long style = 0, 140 const wxPoint& pos = wxDefaultPosition) wxGenericFileDialog(parent,message,defaultDir,defaultFile,wildCard,style,pos)141 :wxGenericFileDialog(parent, message, defaultDir, defaultFile, wildCard, style, pos) 142 { 143 } 144 145 private: 146 DECLARE_DYNAMIC_CLASS(wxFileDialog) 147 }; 148 149 #endif // wxUSE_GENERIC_FILEDIALOG 150 151 //----------------------------------------------------------------------------- 152 // wxFileData - a class to hold the file info for the wxFileCtrl 153 //----------------------------------------------------------------------------- 154 155 class WXDLLEXPORT wxFileData 156 { 157 public: 158 enum fileType 159 { 160 is_file = 0x0000, 161 is_dir = 0x0001, 162 is_link = 0x0002, 163 is_exe = 0x0004, 164 is_drive = 0x0008 165 }; 166 wxFileData()167 wxFileData() { Init(); } 168 // Full copy constructor wxFileData(const wxFileData & fileData)169 wxFileData( const wxFileData& fileData ) { Copy(fileData); } 170 // Create a filedata from this information 171 wxFileData( const wxString &filePath, const wxString &fileName, 172 fileType type, int image_id ); 173 174 // make a full copy of the other wxFileData 175 void Copy( const wxFileData &other ); 176 177 // (re)read the extra data about the file from the system 178 void ReadData(); 179 180 // get the name of the file, dir, drive GetFileName()181 wxString GetFileName() const { return m_fileName; } 182 // get the full path + name of the file, dir, path GetFilePath()183 wxString GetFilePath() const { return m_filePath; } 184 // Set the path + name and name of the item 185 void SetNewName( const wxString &filePath, const wxString &fileName ); 186 187 // Get the size of the file in bytes GetSize()188 wxFileOffset GetSize() const { return m_size; } 189 // Get the type of file, either file extension or <DIR>, <LINK>, <DRIVE> 190 wxString GetFileType() const; 191 // get the last modification time GetDateTime()192 wxDateTime GetDateTime() const { return m_dateTime; } 193 // Get the time as a formatted string 194 wxString GetModificationTime() const; 195 // in UNIX get rwx for file, in MSW get attributes ARHS GetPermissions()196 wxString GetPermissions() const { return m_permissions; } 197 // Get the id of the image used in a wxImageList GetImageId()198 int GetImageId() const { return m_image; } 199 IsFile()200 bool IsFile() const { return !IsDir() && !IsLink() && !IsDrive(); } IsDir()201 bool IsDir() const { return (m_type & is_dir ) != 0; } IsLink()202 bool IsLink() const { return (m_type & is_link ) != 0; } IsExe()203 bool IsExe() const { return (m_type & is_exe ) != 0; } IsDrive()204 bool IsDrive() const { return (m_type & is_drive) != 0; } 205 206 // Get/Set the type of file, file/dir/drive/link GetType()207 int GetType() const { return m_type; } 208 209 // the wxFileCtrl fields in report view 210 enum fileListFieldType 211 { 212 FileList_Name, 213 FileList_Size, 214 FileList_Type, 215 FileList_Time, 216 #if defined(__UNIX__) || defined(__WIN32__) 217 FileList_Perm, 218 #endif // defined(__UNIX__) || defined(__WIN32__) 219 FileList_Max 220 }; 221 222 // Get the entry for report view of wxFileCtrl 223 wxString GetEntry( fileListFieldType num ) const; 224 225 // Get a string representation of the file info 226 wxString GetHint() const; 227 // initialize a wxListItem attributes 228 void MakeItem( wxListItem &item ); 229 230 // operators 231 wxFileData& operator = (const wxFileData& fd) { Copy(fd); return *this; } 232 233 protected: 234 wxString m_fileName; 235 wxString m_filePath; 236 wxFileOffset m_size; 237 wxDateTime m_dateTime; 238 wxString m_permissions; 239 int m_type; 240 int m_image; 241 242 private: 243 void Init(); 244 }; 245 246 //----------------------------------------------------------------------------- 247 // wxFileCtrl 248 //----------------------------------------------------------------------------- 249 250 class WXDLLEXPORT wxFileCtrl : public wxListCtrl 251 { 252 public: 253 wxFileCtrl(); 254 wxFileCtrl( wxWindow *win, 255 wxWindowID id, 256 const wxString &wild, 257 bool showHidden, 258 const wxPoint &pos = wxDefaultPosition, 259 const wxSize &size = wxDefaultSize, 260 long style = wxLC_LIST, 261 const wxValidator &validator = wxDefaultValidator, 262 const wxString &name = wxT("filelist") ); 263 virtual ~wxFileCtrl(); 264 265 virtual void ChangeToListMode(); 266 virtual void ChangeToReportMode(); 267 virtual void ChangeToSmallIconMode(); 268 virtual void ShowHidden( bool show = true ); GetShowHidden()269 bool GetShowHidden() const { return m_showHidden; } 270 271 virtual long Add( wxFileData *fd, wxListItem &item ); 272 virtual void UpdateItem(const wxListItem &item); 273 virtual void UpdateFiles(); 274 virtual void MakeDir(); 275 virtual void GoToParentDir(); 276 virtual void GoToHomeDir(); 277 virtual void GoToDir( const wxString &dir ); 278 virtual void SetWild( const wxString &wild ); GetWild()279 wxString GetWild() const { return m_wild; } GetDir()280 wxString GetDir() const { return m_dirName; } 281 282 void OnListDeleteItem( wxListEvent &event ); 283 void OnListDeleteAllItems( wxListEvent &event ); 284 void OnListEndLabelEdit( wxListEvent &event ); 285 void OnListColClick( wxListEvent &event ); 286 287 virtual void SortItems(wxFileData::fileListFieldType field, bool foward); GetSortDirection()288 bool GetSortDirection() const { return m_sort_foward; } GetSortField()289 wxFileData::fileListFieldType GetSortField() const { return m_sort_field; } 290 291 protected: 292 void FreeItemData(wxListItem& item); 293 void FreeAllItemsData(); 294 295 wxString m_dirName; 296 bool m_showHidden; 297 wxString m_wild; 298 299 bool m_sort_foward; 300 wxFileData::fileListFieldType m_sort_field; 301 302 private: 303 DECLARE_DYNAMIC_CLASS(wxFileCtrl) 304 DECLARE_EVENT_TABLE() 305 }; 306 307 #endif // _WX_FILEDLGG_H_ 308