]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/filedlgg.cpp
no real changes
[wxWidgets.git] / src / generic / filedlgg.cpp
index e58ccf72195c252500a197df4ea243d4f8695401..7e969a82f59fa598e45d939ce02450116657b1bd 100644 (file)
 #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>
-#ifndef __VMS
-# include <grp.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/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
 // ----------------------------------------------------------------------------
@@ -210,6 +308,7 @@ static wxImage CutEmptyBorders(const wxImage& img)
 
 int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
 {
+#if wxUSE_MIMETYPE
     if (!extension.IsEmpty())
     {
         wxFileIconEntry *entry = (wxFileIconEntry*) m_HashTable.Get(extension);
@@ -241,6 +340,14 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime)
     }
     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
 }
 
 
@@ -275,7 +382,7 @@ wxFileData::wxFileData( const wxString &name, const wxString &fname )
     struct stat buff;
     stat( m_fileName.fn_str(), &buff );
 
-#if !defined( __EMX__ ) && !defined(__VMS)
+#if defined(__UNIX__) && (!defined( __EMX__ ) && !defined(__VMS))
     struct stat lbuff;
     lstat( m_fileName.fn_str(), &lbuff );
     m_isLink = S_ISLNK( lbuff.st_mode );
@@ -565,19 +672,25 @@ void wxFileCtrl::Update()
         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[0u] != 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 );
@@ -1098,7 +1211,7 @@ void wxFileDialog::HandleAction( const wxString &fn )
     SetPath( filename );
 
     // change to the directory where the user went if asked
-    if ( GetWindowStyle() & wxCHANGE_DIR )
+    if ( m_dialogStyle & wxCHANGE_DIR )
     {
         wxString cwd;
         wxSplitPath(filename, &cwd, NULL, NULL);
@@ -1320,3 +1433,5 @@ public:
 };
 
 IMPLEMENT_DYNAMIC_CLASS(wxFileDialogGenericModule, wxModule)
+
+#endif // wxUSE_FILEDLG