-#include "wx/generic/listview.xpm"
-#include "wx/generic/repview.xpm"
-#include "wx/generic/new_dir.xpm"
-#include "wx/generic/dir_up.xpm"
-#include "wx/generic/folder.xpm"
-#include "wx/generic/deffile.xpm"
-#include "wx/generic/exefile.xpm"
-
-//-----------------------------------------------------------------------------
-// wxFileData
-//-----------------------------------------------------------------------------
-
-class wxFileData : public wxObject
-{
-private:
- wxString m_name;
- wxString m_fileName;
- long m_size;
- int m_hour;
- int m_minute;
- int m_year;
- int m_month;
- int m_day;
- wxString m_permissions;
- bool m_isDir;
- bool m_isLink;
- bool m_isExe;
-
-public:
- wxFileData() { }
- wxFileData( const wxString &name, const wxString &fname );
- wxString GetName() const;
- wxString GetFullName() const;
- wxString GetHint() const;
- wxString GetEntry( int num );
- bool IsDir();
- bool IsLink();
- bool IsExe();
- long GetSize();
- void MakeItem( wxListItem &item );
- void SetNewName( const wxString &name, const wxString &fname );
-
-private:
- DECLARE_DYNAMIC_CLASS(wxFileData);
-};
-
-//-----------------------------------------------------------------------------
-// wxFileCtrl
-//-----------------------------------------------------------------------------
-
-class wxFileCtrl : public wxListCtrl
-{
-private:
- wxString m_dirName;
- bool m_showHidden;
- wxString m_wild;
-
-public:
- wxFileCtrl();
- wxFileCtrl( wxWindow *win,
- wxWindowID id,
- const wxString &dirName,
- const wxString &wild,
- const wxPoint &pos = wxDefaultPosition,
- const wxSize &size = wxDefaultSize,
- long style = wxLC_LIST,
- const wxValidator &validator = wxDefaultValidator,
- const wxString &name = wxT("filelist") );
- void ChangeToListMode();
- void ChangeToReportMode();
- void ChangeToIconMode();
- void ShowHidden( bool show = TRUE );
- long Add( wxFileData *fd, wxListItem &item );
- void Update();
- virtual void StatusbarText( wxChar *WXUNUSED(text) ) {};
- void MakeDir();
- void GoToParentDir();
- void GoToHomeDir();
- void GoToDir( const wxString &dir );
- void SetWild( const wxString &wild );
- void GetDir( wxString &dir );
- void OnListDeleteItem( wxListEvent &event );
- void OnListDeleteAllItems( wxListEvent &event );
- void OnListEndLabelEdit( wxListEvent &event );
-
-private:
- DECLARE_DYNAMIC_CLASS(wxFileCtrl);
- DECLARE_EVENT_TABLE()
-};
-
-// ----------------------------------------------------------------------------
-// private classes - icons list management
-// ----------------------------------------------------------------------------
-
-class wxFileIconEntry : public wxObject
-{
-public:
- wxFileIconEntry(int i) { id = i; }
-
- int id;
-};
-
-
-class wxFileIconsTable
-{
-public:
- wxFileIconsTable();
-
- int GetIconID(const wxString& extension, const wxString& mime = wxEmptyString);
- wxImageList *GetImageList() { return &m_ImageList; }
-
-protected:
- wxImageList m_ImageList;
- wxHashTable m_HashTable;
-};
-
-static wxFileIconsTable *g_IconsTable = NULL;
-
-#define FI_FOLDER 0
-#define FI_UNKNOWN 1
-#define FI_EXECUTABLE 2
-
-wxFileIconsTable::wxFileIconsTable() :
- m_ImageList(16, 16),
- m_HashTable(wxKEY_STRING)
-{
- m_HashTable.DeleteContents(TRUE);
- m_ImageList.Add(wxBitmap(folder_xpm)); // FI_FOLDER
- m_ImageList.Add(wxBitmap(deffile_xpm)); // FI_UNKNOWN
- if (GetIconID(wxEmptyString, _T("application/x-executable")) == FI_UNKNOWN)
- { // FI_EXECUTABLE
- m_ImageList.Add(wxBitmap(exefile_xpm));
- m_HashTable.Delete(_T("exe"));
- m_HashTable.Put(_T("exe"), new wxFileIconEntry(FI_EXECUTABLE));
- }
- /* else put into list by GetIconID
- (KDE defines application/x-executable for *.exe and has nice icon)
- */
-}
-
-
-
-#if wxUSE_MIMETYPE
-// 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 small(16, 16);
- unsigned char *p1, *p2, *ps;
- unsigned char mr = img.GetMaskRed(),
- mg = img.GetMaskGreen(),
- mb = img.GetMaskBlue();
-
- unsigned x, y;
- unsigned sr, sg, sb, smask;
-
- p1 = img.GetData(), p2 = img.GetData() + 3 * 32, ps = small.GetData();
- small.SetMaskColour(mr, mr, mr);
-
- for (y = 0; y < 16; y++)
- {
- for (x = 0; x < 16; x++)
- {
- sr = sg = sb = smask = 0;
- if (p1[0] != mr || p1[1] != mg || p1[2] != mb)
- sr += p1[0], sg += p1[1], sb += p1[2];
- else smask++;
- p1 += 3;
- if (p1[0] != mr || p1[1] != mg || p1[2] != mb)
- sr += p1[0], sg += p1[1], sb += p1[2];
- else smask++;
- p1 += 3;
- if (p2[0] != mr || p2[1] != mg || p2[2] != mb)
- sr += p2[0], sg += p2[1], sb += p2[2];
- else smask++;
- p2 += 3;
- if (p2[0] != mr || p2[1] != mg || p2[2] != mb)
- sr += p2[0], sg += p2[1], sb += p2[2];
- else smask++;
- p2 += 3;
-
- if (smask > 2)
- ps[0] = ps[1] = ps[2] = mr;
- else
- ps[0] = sr >> 2, ps[1] = sg >> 2, ps[2] = sb >> 2;
- ps += 3;
- }
- p1 += 32 * 3, p2 += 32 * 3;
- }
-
- return small.ConvertToBitmap();
-}
-
-// finds empty borders and return non-empty area of image:
-static wxImage CutEmptyBorders(const wxImage& img)
-{
- unsigned char mr = img.GetMaskRed(),
- mg = img.GetMaskGreen(),
- mb = img.GetMaskBlue();
- unsigned char *dt = img.GetData(), *dttmp;
- unsigned w = img.GetWidth(), h = img.GetHeight();