X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3ff066a4ecb73476fc67c7a2c8a8823e67add833..7b28e0ede49ca78e05df6bc6af2d2d8c508f8455:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index 273dd24afe..3f9465f1c5 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -73,17 +73,18 @@ #endif -#ifdef __WXPM__ - -#define INCL_BASE -#include -#ifndef __EMX__ -#include -#endif -#include -#include -extern bool wxIsDriveAvailable(const wxString& dirName); -#endif // __WXPM__ +#if defined(__OS2__) || defined(__DOS__) + #ifdef __OS2__ + #define INCL_BASE + #include + #ifndef __EMX__ + #include + #endif + #include + #include + #endif + extern bool wxIsDriveAvailable(const wxString& dirName); +#endif // __OS2__ #if defined(__WXMAC__) # ifdef __DARWIN__ @@ -103,12 +104,12 @@ extern bool wxIsDriveAvailable(const wxString& dirName); #endif // ---------------------------------------------------------------------------- -// wxGetAvailableDrives, for WINDOWS, DOS, WXPM, MAC, UNIX (returns "/") +// wxGetAvailableDrives, for WINDOWS, DOS, OS2, MAC, UNIX (returns "/") // ---------------------------------------------------------------------------- size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayInt &icon_ids) { -#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__) #ifdef __WXWINCE__ // No logical drives; return "\" @@ -125,7 +126,7 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI path.Printf(wxT("%c:\\"), driveBuffer[i]); name.Printf(wxT("%c:"), driveBuffer[i]); - int imageId = wxFileIconsTable::drive; + int imageId; int driveType = ::GetDriveType(path); switch (driveType) { @@ -155,7 +156,34 @@ size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, wxArrayI if (driveBuffer[i] == wxT('\0')) break; } -#else // !__WIN32__ +#elif defined(__OS2__) + APIRET rc; + ULONG ulDriveNum = 0; + ULONG ulDriveMap = 0; + rc = ::DosQueryCurrentDisk(&ulDriveNum, &ulDriveMap); + if ( rc == 0){ + size_t i = 0; + while (i < 26) + { + if (ulDriveMap & ( 1 << i )) + { + wxString path, name; + path.Printf(wxT("%c:\\"), 'A' + i); + name.Printf(wxT("%c:"), 'A' + i); + + int imageId; + if (path == wxT("A:\\") || path == wxT("B:\\")) + imageId = wxFileIconsTable::floppy; + else + imageId = wxFileIconsTable::drive; + paths.Add(path); + names.Add(name); + icon_ids.Add(imageId); + } + i ++; + } + } +#else // !__WIN32__, !__OS2__ int drive; /* If we can switch to the drive, it exists. */ @@ -291,7 +319,7 @@ bool wxIsDriveAvailable(const wxString& dirName) return TRUE; } -#elif defined(__WINDOWS__) || defined(__WXPM__) +#elif defined(__WINDOWS__) || defined(__OS2__) int setdrive(int drive) { @@ -301,18 +329,23 @@ int setdrive(int drive) (defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1) return _chdrive(drive); #else - wxChar newdrive[3]; + wxChar newdrive[4]; if (drive < 1 || drive > 31) return -1; newdrive[0] = (wxChar)(wxT('A') + drive - 1); newdrive[1] = wxT(':'); +#ifdef __OS2__ + newdrive[2] = wxT('\\'); + newdrive[3] = wxT('\0'); +#else newdrive[2] = wxT('\0'); +#endif #if defined(__WXMSW__) if (::SetCurrentDirectory(newdrive)) #else // VA doesn't know what LPSTR is and has its own set - if (DosSetCurrentDir((PSZ)newdrive)) + if (!DosSetCurrentDir((PSZ)newdrive)) #endif return 0; else @@ -338,6 +371,11 @@ bool wxIsDriveAvailable(const wxString& dirName) #if defined(__GNUWIN32__) && !(defined(__MINGW32_MAJOR_VERSION) && __MINGW32_MAJOR_VERSION >= 1) success = wxPathExists(dirNameLower); #else + #if defined(__OS2__) + // Avoid changing to drive since no media may be inserted. + if (dirNameLower[(size_t)0] == 'a' || dirNameLower[(size_t)0] == 'b') + return success; + #endif int currentDrive = _getdrive(); int thisDrive = (int) (dirNameLower[(size_t)0] - 'a' + 1) ; int err = setdrive( thisDrive ) ; @@ -356,12 +394,12 @@ bool wxIsDriveAvailable(const wxString& dirName) return success; #endif } -#endif // __WINDOWS__ || __WXPM__ +#endif // __WINDOWS__ || __OS2__ // Function which is called by quick sort. We want to override the default wxArrayString behaviour, // and sort regardless of case. -static int LINKAGEMODE wxDirCtrlStringCompareFunction(wxString* strFirst, wxString* strSecond) +static int wxCMPFUNC_CONV wxDirCtrlStringCompareFunction(wxString* strFirst, wxString* strSecond) { return strFirst->CmpNoCase(*strSecond); } @@ -448,14 +486,14 @@ wxBEGIN_FLAGS( wxGenericDirCtrlStyle ) wxFLAGS_MEMBER(wxDOUBLE_BORDER) wxFLAGS_MEMBER(wxRAISED_BORDER) wxFLAGS_MEMBER(wxSTATIC_BORDER) - wxFLAGS_MEMBER(wxNO_BORDER) + wxFLAGS_MEMBER(wxBORDER) // standard window styles wxFLAGS_MEMBER(wxTAB_TRAVERSAL) wxFLAGS_MEMBER(wxCLIP_CHILDREN) wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW) wxFLAGS_MEMBER(wxWANTS_CHARS) - wxFLAGS_MEMBER(wxNO_FULL_REPAINT_ON_RESIZE) + wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE) wxFLAGS_MEMBER(wxALWAYS_SHOW_SB ) wxFLAGS_MEMBER(wxVSCROLL) wxFLAGS_MEMBER(wxHSCROLL) @@ -551,7 +589,7 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, wxString rootName; -#if defined(__WINDOWS__) || defined(__WXPM__) || defined(__DOS__) +#if defined(__WINDOWS__) || defined(__OS2__) || defined(__DOS__) rootName = _("Computer"); #else rootName = _("Sections"); @@ -740,7 +778,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) wxString dirName(data->m_path); -#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__) // Check if this is a root directory and if so, // whether the drive is avaiable. if (!wxIsDriveAvailable(dirName)) @@ -754,7 +792,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) // This may take a longish time. Go to busy cursor wxBusyCursor busy; -#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__) if (dirName.Last() == ':') dirName += wxString(wxFILE_SEP_PATH); #endif @@ -781,7 +819,7 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) dirs.Add(eachFilename); } } - while (d.GetNext(& eachFilename)); + while (d.GetNext(&eachFilename)); } } dirs.Sort(wxDirCtrlStringCompareFunction); @@ -795,16 +833,26 @@ void wxGenericDirCtrl::ExpandDir(wxTreeItemId parentId) if (d.IsOpened()) { - if (d.GetFirst(& eachFilename, m_currentFilterStr, wxDIR_FILES)) + int style = wxDIR_FILES; + if (m_showHidden) style |= wxDIR_HIDDEN; + // Process each filter (ex: "JPEG Files (*.jpg;*.jpeg)|*.jpg;*.jpeg") + wxStringTokenizer strTok; + wxString curFilter; + strTok.SetString(m_currentFilterStr,wxT(";")); + while(strTok.HasMoreTokens()) { - do + curFilter = strTok.GetNextToken(); + if (d.GetFirst(& eachFilename, m_currentFilterStr, style)) { - if ((eachFilename != wxT(".")) && (eachFilename != wxT(".."))) + do { - filenames.Add(eachFilename); + if ((eachFilename != wxT(".")) && (eachFilename != wxT(".."))) + { + filenames.Add(eachFilename); + } } + while (d.GetNext(& eachFilename)); } - while (d.GetNext(& eachFilename)); } } filenames.Sort(wxDirCtrlStringCompareFunction); @@ -879,7 +927,7 @@ wxTreeItemId wxGenericDirCtrl::FindChild(wxTreeItemId parentId, const wxString& path2 += wxString(wxFILE_SEP_PATH); // In MSW or PM, case is not significant -#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__) path2.MakeLower(); #endif @@ -896,7 +944,7 @@ wxTreeItemId wxGenericDirCtrl::FindChild(wxTreeItemId parentId, const wxString& childPath += wxString(wxFILE_SEP_PATH); // In MSW and PM, case is not significant -#if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXPM__) +#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__) childPath.MakeLower(); #endif @@ -1028,7 +1076,7 @@ void wxGenericDirCtrl::FindChildFiles(wxTreeItemId id, int dirFlags, wxArrayStri wxString dirName(data->m_path); -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WXMSW__) || defined(__OS2__) if (dirName.Last() == ':') dirName += wxString(wxFILE_SEP_PATH); #endif @@ -1206,8 +1254,7 @@ void wxDirFilterListCtrl::FillFilterList(const wxString& filter, int defaultFilt if (n > 0 && defaultFilter < (int) n) { - size_t i = 0; - for (i = 0; i < n; i++) + for (size_t i = 0; i < n; i++) Append(descriptions[i]); SetSelection(defaultFilter); } @@ -1595,9 +1642,13 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) wxIconLocation iconLoc; wxIcon ic; - if ( ft && ft->GetIcon(&iconLoc) ) + { - ic = wxIcon(iconLoc); + wxLogNull logNull; + if ( ft && ft->GetIcon(&iconLoc) ) + { + ic = wxIcon(iconLoc); + } } delete ft; @@ -1609,16 +1660,24 @@ int wxFileIconsTable::GetIconID(const wxString& extension, const wxString& mime) return newid; } - wxBitmap tmpBmp; - tmpBmp.CopyFromIcon(ic); - wxImage img = tmpBmp.ConvertToImage(); + wxBitmap bmp; + bmp.CopyFromIcon(ic); + + if ( !bmp.Ok() ) + { + int newid = file; + m_HashTable->Put(extension, new wxFileIconEntry(newid)); + return newid; + } int id = m_smallImageList->GetImageCount(); - if (img.GetWidth() == 16 && img.GetHeight() == 16) - m_smallImageList->Add(wxBitmap(img)); + if ((bmp.GetWidth() == 16) && (bmp.GetHeight() == 16)) + m_smallImageList->Add(bmp); else { - if (img.GetWidth() != 32 || img.GetHeight() != 32) + wxImage img = bmp.ConvertToImage(); + + if ((img.GetWidth() != 32) || (img.GetHeight() != 32)) m_smallImageList->Add(CreateAntialiasedBitmap(CutEmptyBorders(img).Rescale(32, 32))); else m_smallImageList->Add(CreateAntialiasedBitmap(img));