]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirctrlg.cpp
Corrected wxScrolledWindow's OnSize behaviour.
[wxWidgets.git] / src / generic / dirctrlg.cpp
index 1806b34c268165e6deee1c03153a1205348b53b8..d00e4d958b61fa62117a7ade6ad82d7bb707c2a5 100644 (file)
@@ -20,7 +20,7 @@
 #pragma hdrstop
 #endif
 
-#include "wx/defs.h"
+#if wxUSE_DIRDLG
 
 #include "wx/utils.h"
 #include "wx/dialog.h"
 
 #endif // __WXPM__
 
+#if defined(__WXMAC__) && !defined(__UNIX__)
+#include "moreextr.h"
+#endif
+
 #ifdef __BORLANDC__
 #include "dos.h"
 #endif
@@ -76,7 +80,6 @@
 #undef GetFirstChild
 #endif
 
-#if !defined(__WXMSW__) || wxUSE_XPM_IN_MSW || wxUSE_XPM_IN_OS2
 /* Closed folder */
 static char * icon1_xpm[] = {
 /* width height ncolors chars_per_pixel */
@@ -298,7 +301,6 @@ static char * icon8_xpm[] = {
 "                ",
 "                ",
 "                "};
-#endif // !wxMSW
 
 static const int ID_DIRCTRL = 1000;
 static const int ID_TEXTCTRL = 1001;
@@ -308,6 +310,30 @@ static const int ID_NEW = 1004;
 //static const int ID_CHECK = 1005;
 
 #if defined(__WXMSW__) || defined(__WXPM__)
+int setdrive(int drive)
+{
+       wxChar  newdrive[3];
+
+       if (drive < 1 || drive > 31)
+               return -1;
+       newdrive[0] = (wxChar)(wxT('A') + drive - 1);
+       newdrive[1] = wxT(':');
+       newdrive[2] = wxT('\0');
+#if defined(__WXMSW__)
+#ifdef __WIN16__
+    if (wxSetWorkingDirectory(newdrive))
+#else
+       if (::SetCurrentDirectory(newdrive))
+#endif
+#else
+    // VA doesn't know what LPSTR is and has its own set
+       if (DosSetCurrentDir((PSZ)newdrive))
+#endif
+               return 0;
+       else
+               return -1;
+}
+
 static bool wxIsDriveAvailable(const wxString dirName)
 {
 #ifdef __WIN32__
@@ -325,8 +351,8 @@ static bool wxIsDriveAvailable(const wxString dirName)
 #else
         int currentDrive = _getdrive();
         int thisDrive = (int) (dirNameLower[(size_t)0] - 'a' + 1) ;
-        int err = _chdrive( thisDrive ) ;
-        _chdrive( currentDrive );
+        int err = setdrive( thisDrive ) ;
+        setdrive( currentDrive );
 
         if (err == -1)
         {
@@ -342,6 +368,16 @@ static bool wxIsDriveAvailable(const wxString dirName)
 }
 #endif
 
+// Function which is called by quick sort. We want to override the default wxArrayString behaviour,
+// and sort regardless of case.
+static int LINKAGEMODE wxDirCtrlStringCompareFunction(const void *first, const void *second)
+{
+    wxString *strFirst = (wxString *)first;
+    wxString *strSecond = (wxString *)second;
+    
+    return strFirst->CmpNoCase(*strSecond);
+}
+
 //-----------------------------------------------------------------------------
 // wxDirItemDataEx
 //-----------------------------------------------------------------------------
@@ -430,7 +466,6 @@ bool wxGenericDirCtrl::Create(wxWindow *parent,
         m_filterListCtrl->FillFilterList(filter, defaultFilter);
 
     m_imageList = new wxImageList(16, 16, TRUE);
-#if !defined(__WXMSW__) || wxUSE_XPM_IN_MSW
     m_imageList->Add(wxIcon(icon1_xpm));
     m_imageList->Add(wxIcon(icon2_xpm));
     m_imageList->Add(wxIcon(icon3_xpm));
@@ -439,18 +474,6 @@ bool wxGenericDirCtrl::Create(wxWindow *parent,
     m_imageList->Add(wxIcon(icon6_xpm));
     m_imageList->Add(wxIcon(icon7_xpm));
     m_imageList->Add(wxIcon(icon8_xpm));
-#elif defined(__WXMSW__)
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_CLOSED_FOLDER"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_OPEN_FOLDER"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_FILE"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_COMPUTER"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_DRIVE"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_CDROM"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_FLOPPY"), wxBITMAP_TYPE_ICO_RESOURCE));
-    m_imageList->Add(wxIcon(wxT("wxICON_SMALL_REMOVEABLE"), wxBITMAP_TYPE_ICO_RESOURCE));
-#else
-#error "Sorry, we don't have icons available for this platforms."
-#endif
     m_treeCtrl->SetImageList(m_imageList);
 
     m_showHidden = FALSE;
@@ -574,7 +597,17 @@ void wxGenericDirCtrl::SetupSections()
         }
     }
 #endif
-
+#elif defined(__WXMAC__) && !defined(__UNIX__)
+    FSSpec volume ;
+    short index = 1 ;
+    while(1) {
+      short actualCount = 0 ;
+      if ( OnLine( &volume , 1 , &actualCount , &index ) != noErr || actualCount == 0 )
+        break ;
+
+      wxString name = wxMacFSSpec2MacFilename( &volume ) ;
+      AddSection(name+":", name, 0);
+    }
 #else
   AddSection(wxT("/"), _("The Computer"), 0);
   AddSection(wxGetHomeDir(), _("My Home"), 0 );
@@ -738,7 +771,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
             while (d.GetNext(& eachFilename)) ;
         }
     }
-    dirs.Sort();
+    dirs.Sort((wxArrayString::CompareFunction) wxDirCtrlStringCompareFunction);
 
     // Now do the filenames -- but only if we're allowed to
     if ((GetWindowStyle() & wxDIRCTRL_DIR_ONLY) == 0)
@@ -761,7 +794,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId)
                 while (d.GetNext(& eachFilename)) ;
             }
         }
-        filenames.Sort();
+        filenames.Sort((wxArrayString::CompareFunction) wxDirCtrlStringCompareFunction);
     }
 
     // Add the sorted dirs
@@ -1107,7 +1140,7 @@ void wxGenericDirCtrl::DoResize()
 }
 
 
-void wxGenericDirCtrl::OnSize(wxSizeEvent &event)
+void wxGenericDirCtrl::OnSize(wxSizeEvent& WXUNUSED(event))
 {
     DoResize();
 }
@@ -1136,7 +1169,7 @@ void wxDirFilterListCtrl::Init()
     m_dirCtrl = NULL;
 }
 
-void wxDirFilterListCtrl::OnSelFilter(wxCommandEvent& event)
+void wxDirFilterListCtrl::OnSelFilter(wxCommandEvent& WXUNUSED(event))
 {
     int sel = GetSelection();
 
@@ -1236,12 +1269,12 @@ wxGenericDirDialog::wxGenericDirDialog(wxWindow* parent, const wxString& title,
     Centre( wxBOTH );
 }
 
-void wxGenericDirDialog::OnCloseWindow(wxCloseEvent& event)
+void wxGenericDirDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 {
     EndModal(wxID_CANCEL);
 }
 
-void wxGenericDirDialog::OnOK(wxCommandEvent& event)
+void wxGenericDirDialog::OnOK(wxCommandEvent& WXUNUSED(event))
 {
     m_path = m_input->GetValue();
     // Does the path exist? (User may have typed anything in m_input)
@@ -1367,3 +1400,5 @@ void wxGenericDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
     m_dirCtrl->GetTreeCtrl()->EnsureVisible( new_id );
     m_dirCtrl->GetTreeCtrl()->EditLabel( new_id );
 }
+
+#endif // wxUSE_DIRDLG