]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/filedlgg.cpp
reduced flicker when switching focus to/from the report list ctrl under wxGTK
[wxWidgets.git] / src / generic / filedlgg.cpp
index 2d418f1064f4f1bb808d976333f3237496835582..f0f9ad244c29a2c86e7272b81a19dc4b6916f863 100644 (file)
 #error wxFileDialog currently only supports unix
 #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 "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
 // ----------------------------------------------------------------------------
@@ -567,19 +655,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 );