]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
don't forward Enter presses to the default button if any of the ancestor windows...
[wxWidgets.git] / src / generic / dirctrlg.cpp
index 68b26d6b6d56f90cd48cdcc7c5bc2957458f36cc..c4bd8118b1d2953c826d22228afd6b18851c316b 100644 (file)
@@ -93,6 +93,8 @@
     #include "dos.h"
 #endif
 
+extern WXDLLEXPORT_DATA(const wxChar) wxFileSelectorDefaultWildcardStr[];
+
 // If compiled under Windows, this macro can cause problems
 #ifdef GetFirstChild
 #undef GetFirstChild
@@ -470,7 +472,6 @@ wxBEGIN_FLAGS( wxGenericDirCtrlStyle )
     wxFLAGS_MEMBER(wxDIRCTRL_DIR_ONLY)
     wxFLAGS_MEMBER(wxDIRCTRL_3D_INTERNAL)
     wxFLAGS_MEMBER(wxDIRCTRL_SELECT_FIRST)
-    wxFLAGS_MEMBER(wxDIRCTRL_SHOW_FILTERS)
 
 wxEND_FLAGS( wxGenericDirCtrlStyle )
 
@@ -564,27 +565,17 @@ bool wxGenericDirCtrl::Create(wxWindow *parent,
     else
         treeStyle |= wxBORDER_SUNKEN;
 
-    long filterStyle = 0;
-    if ((style & wxDIRCTRL_3D_INTERNAL) == 0)
-        filterStyle |= wxNO_BORDER;
-    else
-        filterStyle |= wxBORDER_SUNKEN;
-
     m_treeCtrl = CreateTreeCtrl(this, wxID_TREECTRL,
                                 wxPoint(0,0), GetClientSize(), treeStyle);
 
-    if (!filter.empty() && (style & wxDIRCTRL_SHOW_FILTERS))
-        m_filterListCtrl = new wxDirFilterListCtrl(this, wxID_FILTERLISTCTRL, wxDefaultPosition, wxDefaultSize, filterStyle);
+    if (!filter.empty())
+        m_filterListCtrl = new wxDirFilterListCtrl(this, wxID_FILTERLISTCTRL);
 
     m_defaultPath = dir;
     m_filter = filter;
 
     if (m_filter.empty())
-#ifdef __UNIX__
-        m_filter = wxT("*");
-#else
-        m_filter = wxT("*.*");
-#endif
+        m_filter = wxFileSelectorDefaultWildcardStr;
 
     SetFilterIndex(defaultFilter);
 
@@ -635,6 +626,9 @@ wxTreeCtrl* wxGenericDirCtrl::CreateTreeCtrl(wxWindow *parent, wxWindowID id, co
 
 void wxGenericDirCtrl::ShowHidden( bool show )
 {
+    if ( m_showHidden == show )
+        return;
+
     m_showHidden = show;
 
     wxString path = GetPath();
@@ -880,7 +874,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
 
     // Add the sorted dirs
     size_t i;
-    for (i = 0; i < dirs.Count(); i++)
+    for (i = 0; i < dirs.GetCount(); i++)
     {
         eachFilename = dirs[i];
         path = dirName;
@@ -909,7 +903,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
     // Add the sorted filenames
     if ((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0)
     {
-        for (i = 0; i < filenames.Count(); i++)
+        for (i = 0; i < filenames.GetCount(); i++)
         {
             eachFilename = filenames[i];
             path = dirName;
@@ -1179,6 +1173,14 @@ void wxGenericDirCtrl::SetFilter(const wxString& filter)
 {
     m_filter = filter;
 
+    if (!filter.empty() && !m_filterListCtrl)
+        m_filterListCtrl = new wxDirFilterListCtrl(this, wxID_FILTERLISTCTRL);
+    else if (filter.empty() && m_filterListCtrl)
+    {
+        m_filterListCtrl->Destroy();
+        m_filterListCtrl = NULL;
+    }
+
     wxString f, d;
     if (ExtractWildcard(m_filter, m_currentFilter, f, d))
         m_currentFilterStr = f;
@@ -1188,6 +1190,10 @@ void wxGenericDirCtrl::SetFilter(const wxString& filter)
 #else
         m_currentFilterStr = wxT("*.*");
 #endif
+    // current filter index is meaningless after filter change, set it to zero
+    SetFilterIndex(0);
+    if (m_filterListCtrl)
+        m_filterListCtrl->FillFilterList(m_filter, 0);
 }
 
 // Extract description and actual filter from overall filter string
@@ -1205,15 +1211,6 @@ bool wxGenericDirCtrl::ExtractWildcard(const wxString& filterStr, int n, wxStrin
     return false;
 }
 
-#if WXWIN_COMPATIBILITY_2_4
-// Parses the global filter, returning the number of filters.
-// Returns 0 if none or if there's a problem.
-// filterStr is in the form: "All files (*.*)|*.*|JPEG Files (*.jpeg)|*.jpg"
-int wxGenericDirCtrl::ParseFilter(const wxString& filterStr, wxArrayString& filters, wxArrayString& descriptions)
-{
-    return wxParseCommonDialogsFilter(filterStr, descriptions, filters );
-}
-#endif // WXWIN_COMPATIBILITY_2_4
 
 void wxGenericDirCtrl::DoResize()
 {
@@ -1273,12 +1270,21 @@ BEGIN_EVENT_TABLE(wxDirFilterListCtrl, wxChoice)
     EVT_CHOICE(wxID_ANY, wxDirFilterListCtrl::OnSelFilter)
 END_EVENT_TABLE()
 
-bool wxDirFilterListCtrl::Create(wxGenericDirCtrl* parent, const wxWindowID id,
-              const wxPoint& pos,
-              const wxSize& size,
-              long style)
+bool wxDirFilterListCtrl::Create(wxGenericDirCtrl* parent,
+                                 const wxWindowID id,
+                                 const wxPoint& pos,
+                                 const wxSize& size,
+                                 long style)
 {
     m_dirCtrl = parent;
+
+    // by default our border style is determined by the style of our parent
+    if ( !(style & wxBORDER_MASK) )
+    {
+        style |= parent->HasFlag(wxDIRCTRL_3D_INTERNAL) ? wxBORDER_SUNKEN
+                                                        : wxBORDER_NONE;
+    }
+
     return wxChoice::Create(parent, id, pos, size, 0, NULL, style);
 }
 
@@ -1324,7 +1330,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt
 // wxFileIconsTable icons
 // ----------------------------------------------------------------------------
 
-#ifndef __WXGTK24__
+#ifndef __WXGTK20__
 /* Computer (c) Julian Smart */
 static const char * file_icons_tbl_computer_xpm[] = {
 /* columns rows colors chars-per-pixel */
@@ -1389,7 +1395,7 @@ static const char * file_icons_tbl_computer_xpm[] = {
 " dfffffffffffffd",
 "                "
 };
-#endif // GTK+ < 2.4
+#endif // !GTK+ 2
 
 // ----------------------------------------------------------------------------
 // wxFileIconsTable & friends
@@ -1458,7 +1464,7 @@ void wxFileIconsTable::Create()
                                                    wxART_CMN_DIALOG,
                                                    wxSize(16, 16)));
     // computer
-#ifdef __WXGTK24__
+#ifdef __WXGTK20__
     // GTK24 uses this icon in the file open dialog
     m_smallImageList->Add(wxArtProvider::GetBitmap(wxART_HARDDISK,
                                                    wxART_CMN_DIALOG,