#pragma hdrstop
#endif
-#include "wx/defs.h"
+#if wxUSE_DIRDLG
#include "wx/utils.h"
#include "wx/dialog.h"
#include "wx/button.h"
#include "wx/layout.h"
#include "wx/msgdlg.h"
+#include "wx/textctrl.h"
#include "wx/textdlg.h"
#include "wx/filefn.h"
#include "wx/cmndata.h"
#endif // __WXPM__
+#if defined(__WXMAC__)
+# include "MoreFilesExtras.h"
+#endif
+
#ifdef __BORLANDC__
#include "dos.h"
#endif
#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 */
" ",
" ",
" "};
-#endif // !wxMSW
static const int ID_DIRCTRL = 1000;
static const int ID_TEXTCTRL = 1001;
//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__
#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)
{
}
#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
//-----------------------------------------------------------------------------
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));
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;
}
}
#endif
-
+#elif defined(__WXMAC__)
+ 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 );
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)
while (d.GetNext(& eachFilename)) ;
}
}
- filenames.Sort();
+ filenames.Sort((wxArrayString::CompareFunction) wxDirCtrlStringCompareFunction);
}
// Add the sorted dirs
description = descriptions[n];
return TRUE;
}
- else
- return FALSE;
+
+ return FALSE;
}
// Parses the global filter, returning the number of filters.
}
-void wxGenericDirCtrl::OnSize(wxSizeEvent &event)
+void wxGenericDirCtrl::OnSize(wxSizeEvent& WXUNUSED(event))
{
DoResize();
}
m_dirCtrl = NULL;
}
-void wxDirFilterListCtrl::OnSelFilter(wxCommandEvent& event)
+void wxDirFilterListCtrl::OnSelFilter(wxCommandEvent& WXUNUSED(event))
{
int sel = GetSelection();
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)
m_dirCtrl->GetTreeCtrl()->EnsureVisible( new_id );
m_dirCtrl->GetTreeCtrl()->EditLabel( new_id );
}
+
+#endif // wxUSE_DIRDLG