#pragma hdrstop
#endif
-#ifndef __UNIX__
-#error wxFileDialog currently only supports unix
+#if wxUSE_FILEDLG
+
+#if !defined(__UNIX__) && !defined(__DOS__)
+#error wxFileDialog currently only supports Unix and DOS
#endif
+#include "wx/checkbox.h"
+#include "wx/textctrl.h"
+#include "wx/choice.h"
+#include "wx/checkbox.h"
+#include "wx/stattext.h"
#include "wx/filedlg.h"
#include "wx/debug.h"
#include "wx/log.h"
#include "wx/intl.h"
+#include "wx/listctrl.h"
#include "wx/msgdlg.h"
#include "wx/sizer.h"
#include "wx/bmpbuttn.h"
#include <sys/types.h>
#include <sys/stat.h>
-#include <dirent.h>
-#include <pwd.h>
-#include <grp.h>
-#include <time.h>
+
+#ifdef __UNIX__
+ #include <dirent.h>
+ #include <pwd.h>
+ #ifndef __VMS
+ # include <grp.h>
+ #endif
+#endif
+
+#ifdef __WATCOMC__
+ #include <direct.h>
+#endif
+
+# include <time.h>
#include <unistd.h>
#include "wx/generic/home.xpm"
#include "wx/generic/deffile.xpm"
#include "wx/generic/exefile.xpm"
+//-----------------------------------------------------------------------------
+// wxFileData
+//-----------------------------------------------------------------------------
+
+class wxFileData : public wxObject
+{
+private:
+ wxString m_name;
+ wxString m_fileName;
+ long m_size;
+ int m_hour;
+ int m_minute;
+ int m_year;
+ int m_month;
+ int m_day;
+ wxString m_permissions;
+ bool m_isDir;
+ bool m_isLink;
+ bool m_isExe;
+
+public:
+ wxFileData() { }
+ wxFileData( const wxString &name, const wxString &fname );
+ wxString GetName() const;
+ wxString GetFullName() const;
+ wxString GetHint() const;
+ wxString GetEntry( int num );
+ bool IsDir();
+ bool IsLink();
+ bool IsExe();
+ long GetSize();
+ void MakeItem( wxListItem &item );
+ void SetNewName( const wxString &name, const wxString &fname );
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxFileData);
+};
+
+//-----------------------------------------------------------------------------
+// wxFileCtrl
+//-----------------------------------------------------------------------------
+
+class wxFileCtrl : public wxListCtrl
+{
+private:
+ wxString m_dirName;
+ bool m_showHidden;
+ wxString m_wild;
+
+public:
+ wxFileCtrl();
+ wxFileCtrl( wxWindow *win,
+ wxWindowID id,
+ const wxString &dirName,
+ const wxString &wild,
+ const wxPoint &pos = wxDefaultPosition,
+ const wxSize &size = wxDefaultSize,
+ long style = wxLC_LIST,
+ const wxValidator &validator = wxDefaultValidator,
+ const wxString &name = wxT("filelist") );
+ void ChangeToListMode();
+ void ChangeToReportMode();
+ void ChangeToIconMode();
+ void ShowHidden( bool show = TRUE );
+ long Add( wxFileData *fd, wxListItem &item );
+ void Update();
+ virtual void StatusbarText( wxChar *WXUNUSED(text) ) {};
+ void MakeDir();
+ void GoToParentDir();
+ void GoToHomeDir();
+ void GoToDir( const wxString &dir );
+ void SetWild( const wxString &wild );
+ void GetDir( wxString &dir );
+ void OnListDeleteItem( wxListEvent &event );
+ void OnListDeleteAllItems( wxListEvent &event );
+ void OnListEndLabelEdit( wxListEvent &event );
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxFileCtrl);
+ DECLARE_EVENT_TABLE()
+};
+
// ----------------------------------------------------------------------------
// private classes - icons list management
// ----------------------------------------------------------------------------
int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
{
+#if wxUSE_MIMETYPE
if (!extension.IsEmpty())
{
wxFileIconEntry *entry = (wxFileIconEntry*) m_HashTable.Get(extension);
}
m_HashTable.Put(extension, new wxFileIconEntry(id));
return id;
+
+#else // !wxUSE_MIMETYPE
+
+ if (extension == wxT("exe"))
+ return FI_EXECUTABLE;
+ else
+ return FI_UNKNOWN;
+#endif // wxUSE_MIMETYPE/!wxUSE_MIMETYPE
}
struct stat buff;
stat( m_fileName.fn_str(), &buff );
-#ifndef __EMX__
+#if defined(__UNIX__) && (!defined( __EMX__ ) && !defined(__VMS))
struct stat lbuff;
lstat( m_fileName.fn_str(), &lbuff );
m_isLink = S_ISLNK( lbuff.st_mode );
res = wxFileNameFromPath( f );
fd = new wxFileData( res, f );
wxString s = fd->GetName();
- if (m_showHidden || (s[0] != wxT('.')))
+ if (m_showHidden || (s[0u] != wxT('.')))
{
Add( fd, item );
item.m_itemId++;
f = wxFindNextFile();
}
- res = m_dirName + wxT("/") + m_wild;
- f = wxFindFirstFile( res.GetData(), wxFILE );
- while (!f.IsEmpty())
+ // Tokenize the wildcard string, so we can handle more than 1
+ // search pattern in a wildcard.
+ wxStringTokenizer tokenWild( m_wild, ";" );
+ while ( tokenWild.HasMoreTokens() )
{
- res = wxFileNameFromPath( f );
- fd = new wxFileData( res, f );
- wxString s = fd->GetName();
- if (m_showHidden || (s[0] != wxT('.')))
+ res = m_dirName + wxT("/") + tokenWild.GetNextToken();
+ f = wxFindFirstFile( res.GetData(), wxFILE );
+ while (!f.IsEmpty())
{
- Add( fd, item );
- item.m_itemId++;
+ res = wxFileNameFromPath( f );
+ fd = new wxFileData( res, f );
+ wxString s = fd->GetName();
+ if (m_showHidden || (s[0u] != wxT('.')))
+ {
+ Add( fd, item );
+ item.m_itemId++;
+ }
+ f = wxFindNextFile();
}
- f = wxFindNextFile();
}
SortItems( ListCompare, 0 );
- SetColumnWidth( 1, wxLIST_AUTOSIZE );
- SetColumnWidth( 2, wxLIST_AUTOSIZE );
- SetColumnWidth( 3, wxLIST_AUTOSIZE );
+ if (my_style & wxLC_REPORT)
+ {
+ SetColumnWidth( 1, wxLIST_AUTOSIZE );
+ SetColumnWidth( 2, wxLIST_AUTOSIZE );
+ SetColumnWidth( 3, wxLIST_AUTOSIZE );
+ }
}
void wxFileCtrl::SetWild( const wxString &wild )
Centre( wxBOTH );
+/*
if (m_fileName.IsEmpty())
m_list->SetFocus();
else
+*/
m_text->SetFocus();
wxEndBusyCursor();
return;
}
- if (filename[0] == wxT('~'))
+ if (filename[0u] == wxT('~'))
{
filename.Remove( 0, 1 );
wxString tmp( wxGetUserHome() );
}
if (dir != wxT("/")) dir += wxT("/");
- if (filename[0] != wxT('/'))
+ if (filename[0u] != wxT('/'))
{
dir += filename;
filename = dir;
SetPath( filename );
+ // change to the directory where the user went if asked
+ if ( m_dialogStyle & wxCHANGE_DIR )
+ {
+ wxString cwd;
+ wxSplitPath(filename, &cwd, NULL, NULL);
+
+ if ( cwd != wxGetWorkingDirectory() )
+ {
+ wxSetWorkingDirectory(cwd);
+ }
+ }
+
wxCommandEvent event;
wxDialog::OnOK(event);
}
}
}
-wxString wxLoadFileSelector( const wxChar *what, const wxChar *extension, const wxChar *default_name, wxWindow *parent )
+wxString wxLoadFileSelector( const wxChar *what, const wxChar *ext, const wxChar *default_name, wxWindow *parent )
{
- wxChar *ext = (wxChar *)extension;
+ wxString prompt = wxString::Format(_("Load %s file"), what);
- wxChar prompt[50];
- wxString str = _("Load %s file");
- wxSprintf(prompt, str, what);
+ if (*ext == wxT('.'))
+ ext++;
- if (*ext == wxT('.')) ext++;
- wxChar wild[60];
- wxSprintf(wild, wxT("*.%s"), ext);
+ wxString wild = wxString::Format(_T("*.%s"), ext);
- return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
+ return wxFileSelector(prompt, (const wxChar *) NULL, default_name,
+ ext, wild, 0, parent);
}
wxString wxSaveFileSelector(const wxChar *what, const wxChar *extension, const wxChar *default_name,
{
wxChar *ext = (wxChar *)extension;
- wxChar prompt[50];
- wxString str = _("Save %s file");
- wxSprintf(prompt, str, what);
+ wxString prompt = wxString::Format(_("Save %s file"), what);
+
+ if (*ext == wxT('.'))
+ ext++;
- if (*ext == wxT('.')) ext++;
- wxChar wild[60];
- wxSprintf(wild, wxT("*.%s"), ext);
+ wxString wild = wxString::Format(_T("*.%s"), ext);
- return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
+ return wxFileSelector(prompt, (const wxChar *) NULL, default_name,
+ ext, wild, 0, parent);
}
};
IMPLEMENT_DYNAMIC_CLASS(wxFileDialogGenericModule, wxModule)
+
+#endif // wxUSE_FILEDLG