X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/748fcded3c795db266076aac381aa335cc4aa42d..7d1f4c3ff01b09105c07d5e176a14428c834975e:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index e35d2487c5..ab27ea3426 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -90,7 +90,7 @@ #endif /* Closed folder */ -static char * icon1_xpm[] = { +static const char * icon1_xpm[] = { /* width height ncolors chars_per_pixel */ "16 16 6 1", /* colors */ @@ -119,7 +119,7 @@ static char * icon1_xpm[] = { " "}; /* Open folder */ -static char * icon2_xpm[] = { +static const char * icon2_xpm[] = { /* width height ncolors chars_per_pixel */ "16 16 6 1", /* colors */ @@ -148,7 +148,7 @@ static char * icon2_xpm[] = { " "}; /* File */ -static char * icon3_xpm[] = { +static const char * icon3_xpm[] = { /* width height ncolors chars_per_pixel */ "16 16 3 1", /* colors */ @@ -174,7 +174,7 @@ static char * icon3_xpm[] = { " "}; /* Computer */ -static char * icon4_xpm[] = { +static const char * icon4_xpm[] = { "16 16 7 1", " s None c None", ". c #808080", @@ -201,7 +201,7 @@ static char * icon4_xpm[] = { "............o "}; /* Drive */ -static char * icon5_xpm[] = { +static const char * icon5_xpm[] = { "16 16 7 1", " s None c None", ". c #808080", @@ -228,7 +228,7 @@ static char * icon5_xpm[] = { " "}; /* CD-ROM */ -static char *icon6_xpm[] = { +static const char *icon6_xpm[] = { "16 16 10 1", " s None c None", ". c #808080", @@ -258,7 +258,7 @@ static char *icon6_xpm[] = { " "}; /* Floppy */ -static char * icon7_xpm[] = { +static const char * icon7_xpm[] = { "16 16 7 1", " s None c None", ". c #808080", @@ -285,7 +285,7 @@ static char * icon7_xpm[] = { " "}; /* Removeable */ -static char * icon8_xpm[] = { +static const char * icon8_xpm[] = { "16 16 7 1", " s None c None", ". c #808080", @@ -316,10 +316,27 @@ static char * icon8_xpm[] = { #define wxID_FILTERLISTCTRL 7001 #if defined(__DOS__) - #ifdef __DJGPP__ - #define setdrive(drive) setdisk(drive) - #endif -#elif defined(__WXMSW__) || defined(__WXPM__) + +bool wxIsDriveAvailable(const wxString& dirName) +{ + // FIXME_MGL - this method leads to hang up under Watcom for some reason +#ifndef __WATCOMC__ + if ( dirName.Len() == 3 && dirName[1u] == wxT(':') ) + { + wxString dirNameLower(dirName.Lower()); + // VS: always return TRUE for removable media, since Win95 doesn't + // like it when MS-DOS app accesses empty floppy drive + return (dirNameLower[0u] == wxT('a') || + dirNameLower[0u] == wxT('b') || + wxPathExists(dirNameLower)); + } + else +#endif + return TRUE; +} + +#elif defined(__WINDOWS__) || defined(__WXPM__) + int setdrive(int drive) { #if defined(__GNUWIN32__) && \ @@ -349,7 +366,7 @@ int setdrive(int drive) #endif // !GNUWIN32 } -static bool wxIsDriveAvailable(const wxString dirName) +bool wxIsDriveAvailable(const wxString& dirName) { #ifdef __WIN32__ UINT errorMode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); @@ -382,7 +399,7 @@ static bool wxIsDriveAvailable(const wxString dirName) return success; } -#endif +#endif // __WINDOWS__ || __WXPM__ // Function which is called by quick sort. We want to override the default wxArrayString behaviour, // and sort regardless of case. @@ -390,7 +407,7 @@ static int LINKAGEMODE wxDirCtrlStringCompareFunction(const void *first, const v { wxString *strFirst = (wxString *)first; wxString *strSecond = (wxString *)second; - + return strFirst->CmpNoCase(*strSecond); } @@ -437,7 +454,7 @@ bool wxDirItemData::HasSubDirs() const return dir.HasSubDirs(); } -bool wxDirItemData::HasFiles(const wxString& spec) const +bool wxDirItemData::HasFiles(const wxString& WXUNUSED(spec)) const { if (m_path.IsEmpty()) return FALSE; @@ -484,7 +501,7 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, if (!wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name)) return FALSE; - SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)); Init(); @@ -525,7 +542,7 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, wxString rootName; -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__WXPM__) || defined(__DOS__) rootName = _("Computer"); #else rootName = _("Sections"); @@ -558,6 +575,16 @@ void wxGenericDirCtrl::Init() m_filterListCtrl = NULL; } +void wxGenericDirCtrl::ShowHidden( bool show ) +{ + m_showHidden = show; + + wxString path = GetPath(); + m_treeCtrl->Collapse(m_treeCtrl->GetRootItem()); + m_treeCtrl->Expand(m_treeCtrl->GetRootItem()); + SetPath(path); +} + void wxGenericDirCtrl::AddSection(const wxString& path, const wxString& name, int imageId) { wxDirItemData *dir_item = new wxDirItemData(path,name,TRUE); @@ -569,7 +596,7 @@ void wxGenericDirCtrl::AddSection(const wxString& path, const wxString& name, in void wxGenericDirCtrl::SetupSections() { -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) #ifdef __WIN32__ wxChar driveBuffer[256]; @@ -613,24 +640,23 @@ void wxGenericDirCtrl::SetupSections() if (driveBuffer[i] == wxT('\0')) break; } -# else +#else // !__WIN32__ int drive; - int currentDrive; /* If we can switch to the drive, it exists. */ for( drive = 1; drive <= 26; drive++ ) { wxString path, name; path.Printf(wxT("%c:\\"), (char) (drive + 'a' - 1)); - name.Printf(wxT("(%c:)"), (char) (drive + 'a' - 1)); + name.Printf(wxT("(%c:)"), (char) (drive + 'A' - 1)); if (wxIsDriveAvailable(path)) { - - AddSection(path, name); + AddSection(path, name, (drive <= 2) ? 6/*floppy*/ : 4/*disk*/); } } -# endif +#endif // __WIN32__/!__WIN32__ + #elif defined(__WXMAC__) FSSpec volume ; short index = 1 ; @@ -642,8 +668,10 @@ void wxGenericDirCtrl::SetupSections() wxString name = wxMacFSSpec2MacFilename( &volume ) ; AddSection(name + wxFILE_SEP_PATH, name, 0); } -#else +#elif defined(__UNIX__) AddSection(wxT("/"), wxT("/"), 3/*computer icon*/); +#else + #error "Unsupported platform in wxGenericDirCtrl!" #endif } @@ -761,7 +789,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) wxString dirName(data->m_path); -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) // Check if this is a root directory and if so, // whether the drive is avaiable. if (!wxIsDriveAvailable(dirName)) @@ -775,7 +803,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) // This may take a longish time. Go to busy cursor wxBusyCursor busy; -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) if (dirName.Last() == ':') dirName += wxString(wxFILE_SEP_PATH); #endif @@ -791,7 +819,9 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) if (d.IsOpened()) { - if (d.GetFirst(& eachFilename, wxEmptyString, wxDIR_DIRS | wxDIR_HIDDEN)) + int style = wxDIR_DIRS; + if (m_showHidden) style |= wxDIR_HIDDEN; + if (d.GetFirst(& eachFilename, wxEmptyString, style)) { do { @@ -887,7 +917,7 @@ wxTreeItemId wxGenericDirCtrl::FindChild(wxTreeItemId parentId, const wxString& path2 += wxString(wxFILE_SEP_PATH); // In MSW or PM, case is not significant -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) path2.MakeLower(); #endif @@ -904,7 +934,7 @@ wxTreeItemId wxGenericDirCtrl::FindChild(wxTreeItemId parentId, const wxString& childPath += wxString(wxFILE_SEP_PATH); // In MSW and PM, case is not significant -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) childPath.MakeLower(); #endif @@ -1224,5 +1254,4 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt } } - #endif // wxUSE_DIRDLG