#include "wx/mimetype.h"
#include "wx/image.h"
#include "wx/choice.h"
-#include "wx/filedlg.h" // for wxFileDialogBase::ParseWildcard
#if wxUSE_STATLINE
#include "wx/statline.h"
#endif
-#ifdef __WXPM__
-
-#define INCL_BASE
-#include <os2.h>
-#ifndef __EMX__
-#include <direct.h>
-#endif
-#include <stdlib.h>
-#include <ctype.h>
-extern bool wxIsDriveAvailable(const wxString& dirName);
-#endif // __WXPM__
+#if defined(__OS2__) || defined(__DOS__)
+ #ifdef __OS2__
+ #define INCL_BASE
+ #include <os2.h>
+ #ifndef __EMX__
+ #include <direct.h>
+ #endif
+ #include <stdlib.h>
+ #include <ctype.h>
+ #endif
+ extern bool wxIsDriveAvailable(const wxString& dirName);
+#endif // __OS2__
#if defined(__WXMAC__)
# ifdef __DARWIN__
#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 "\"
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. */
return TRUE;
}
-#elif defined(__WINDOWS__) || defined(__WXPM__)
+#elif defined(__WINDOWS__) || defined(__OS2__)
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
#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 ) ;
return success;
#endif
}
-#endif // __WINDOWS__ || __WXPM__
+#endif // __WINDOWS__ || __OS2__
// Function which is called by quick sort. We want to override the default wxArrayString behaviour,
wxBEGIN_PROPERTIES_TABLE(wxGenericDirCtrl)
wxHIDE_PROPERTY( Children )
- wxPROPERTY( DefaultPath , wxString , SetDefaultPath , GetDefaultPath , , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
- wxPROPERTY( Filter , wxString , SetFilter , GetFilter ,, 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
- wxPROPERTY( DefaultFilter , int , SetFilterIndex, GetFilterIndex,, 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+ wxPROPERTY( DefaultPath , wxString , SetDefaultPath , GetDefaultPath , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
+ wxPROPERTY( Filter , wxString , SetFilter , GetFilter , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+ wxPROPERTY( DefaultFilter , int , SetFilterIndex, GetFilterIndex, EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group") )
+ wxPROPERTY_FLAGS( WindowStyle, wxGenericDirCtrlStyle, long, SetWindowStyleFlag, GetWindowStyleFlag, EMPTY_MACROVALUE , 0, wxT("Helpstring"), wxT("group") )
wxEND_PROPERTIES_TABLE()
wxBEGIN_HANDLERS_TABLE(wxGenericDirCtrl)
#endif
BEGIN_EVENT_TABLE(wxGenericDirCtrl, wxControl)
- EVT_TREE_ITEM_EXPANDING (-1, wxGenericDirCtrl::OnExpandItem)
- EVT_TREE_ITEM_COLLAPSED (-1, wxGenericDirCtrl::OnCollapseItem)
- EVT_TREE_BEGIN_LABEL_EDIT (-1, wxGenericDirCtrl::OnBeginEditItem)
- EVT_TREE_END_LABEL_EDIT (-1, wxGenericDirCtrl::OnEndEditItem)
+ EVT_TREE_ITEM_EXPANDING (wxID_TREECTRL, wxGenericDirCtrl::OnExpandItem)
+ EVT_TREE_ITEM_COLLAPSED (wxID_TREECTRL, wxGenericDirCtrl::OnCollapseItem)
+ EVT_TREE_BEGIN_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnBeginEditItem)
+ EVT_TREE_END_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnEndEditItem)
EVT_SIZE (wxGenericDirCtrl::OnSize)
END_EVENT_TABLE()
wxString rootName;
-#if defined(__WINDOWS__) || defined(__WXPM__) || defined(__DOS__)
+#if defined(__WINDOWS__) || defined(__OS2__) || defined(__DOS__)
rootName = _("Computer");
#else
rootName = _("Sections");
if (!m_defaultPath.IsEmpty())
ExpandPath(m_defaultPath);
+ SetBestSize(size);
DoResize();
return TRUE;
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))
// 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
dirs.Add(eachFilename);
}
}
- while (d.GetNext(& eachFilename));
+ while (d.GetNext(&eachFilename));
}
}
dirs.Sort(wxDirCtrlStringCompareFunction);
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);
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
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
wxString dirName(data->m_path);
-#if defined(__WXMSW__) || defined(__WXPM__)
+#if defined(__WXMSW__) || defined(__OS2__)
if (dirName.Last() == ':')
dirName += wxString(wxFILE_SEP_PATH);
#endif
bool wxGenericDirCtrl::ExtractWildcard(const wxString& filterStr, int n, wxString& filter, wxString& description)
{
wxArrayString filters, descriptions;
- int count = ParseFilter(filterStr, filters, descriptions);
+ int count = wxParseWildcard(filterStr, filters, descriptions);
if (count > 0 && n < count)
{
filter = filters[n];
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 wxFileDialogBase::ParseWildcard(filterStr, descriptions, filters );
+ return wxParseWildcard(filterStr, descriptions, filters );
}
+#endif // WXWIN_COMPATIBILITY_2_4
void wxGenericDirCtrl::DoResize()
{
{
Clear();
wxArrayString descriptions, filters;
- size_t n = (size_t) m_dirCtrl->ParseFilter(filter, filters, descriptions);
+ size_t n = (size_t) wxParseWildcard(filter, filters, descriptions);
if (n > 0 && defaultFilter < (int) n)
{
return m_smallImageList;
}
-#if wxUSE_MIMETYPE
+#if wxUSE_MIMETYPE && wxUSE_IMAGE
// VS: we don't need this function w/o wxMimeTypesManager because we'll only have
// one icon and we won't resize it
static wxBitmap CreateAntialiasedBitmap(const wxImage& img)
{
- wxImage smallimg (16, 16);
+ const unsigned int size = 16;
+
+ wxImage smallimg (size, size);
unsigned char *p1, *p2, *ps;
unsigned char mr = img.GetMaskRed(),
mg = img.GetMaskGreen(),
unsigned x, y;
unsigned sr, sg, sb, smask;
- p1 = img.GetData(), p2 = img.GetData() + 3 * 32, ps = smallimg.GetData();
+ p1 = img.GetData(), p2 = img.GetData() + 3 * size*2, ps = smallimg.GetData();
smallimg.SetMaskColour(mr, mr, mr);
- for (y = 0; y < 16; y++)
+ for (y = 0; y < size; y++)
{
- for (x = 0; x < 16; x++)
+ for (x = 0; x < size; x++)
{
sr = sg = sb = smask = 0;
if (p1[0] != mr || p1[1] != mg || p1[2] != mb)
ps[0] = sr >> 2, ps[1] = sg >> 2, ps[2] = sb >> 2;
ps += 3;
}
- p1 += 32 * 3, p2 += 32 * 3;
+ p1 += size*2 * 3, p2 += size*2 * 3;
}
-
+
return wxBitmap(smallimg);
}
+// This function is currently not unused anymore
+#if 0
// finds empty borders and return non-empty area of image:
static wxImage CutEmptyBorders(const wxImage& img)
{
return img.GetSubImage(wxRect(left, top, right - left + 1, bottom - top + 1));
}
+#endif // #if 0
+
#endif // wxUSE_MIMETYPE
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.GetFileName() );
+ }
}
-
+
delete ft;
if ( !ic.Ok() )
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;
+ }
+ const unsigned int size = 16;
+
int id = m_smallImageList->GetImageCount();
- if (img.GetWidth() == 16 && img.GetHeight() == 16)
- m_smallImageList->Add(wxBitmap(img));
+ if ((bmp.GetWidth() == (int) size) && (bmp.GetHeight() == (int) size))
+ {
+ m_smallImageList->Add(bmp);
+ }
+#if wxUSE_IMAGE
else
{
- if (img.GetWidth() != 32 || img.GetHeight() != 32)
- m_smallImageList->Add(CreateAntialiasedBitmap(CutEmptyBorders(img).Rescale(32, 32)));
+ wxImage img = bmp.ConvertToImage();
+
+ if ((img.GetWidth() != size*2) || (img.GetHeight() != size*2))
+// m_smallImageList->Add(CreateAntialiasedBitmap(CutEmptyBorders(img).Rescale(size*2, size*2)));
+ m_smallImageList->Add(CreateAntialiasedBitmap(img.Rescale(size*2, size*2)));
else
m_smallImageList->Add(CreateAntialiasedBitmap(img));
}
+#endif // wxUSE_IMAGE
+
m_HashTable->Put(extension, new wxFileIconEntry(id));
return id;