| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/generic/dirctrlg.h
- // Purpose: wxGenericDirCtrl class
- // Builds on wxDirCtrl class written by Robert Roebling for the
- // wxFile application, modified by Harm van der Heijden.
- // Further modified for Windows.
- // Author: Robert Roebling, Harm van der Heijden, Julian Smart et al
- // Modified by:
- // Created: 21/3/2000
- // Copyright: (c) Robert Roebling, Harm van der Heijden, Julian Smart
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_DIRCTRL_H_
- #define _WX_DIRCTRL_H_
- #if wxUSE_DIRDLG
- #include "wx/treectrl.h"
- #include "wx/dialog.h"
- #include "wx/dirdlg.h"
- #include "wx/choice.h"
- //-----------------------------------------------------------------------------
- // classes
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
- class WXDLLIMPEXP_FWD_BASE wxHashTable;
- //-----------------------------------------------------------------------------
- // Extra styles for wxGenericDirCtrl
- //-----------------------------------------------------------------------------
- enum
- {
- // Only allow directory viewing/selection, no files
- wxDIRCTRL_DIR_ONLY = 0x0010,
- // When setting the default path, select the first file in the directory
- wxDIRCTRL_SELECT_FIRST = 0x0020,
- // Show the filter list
- wxDIRCTRL_SHOW_FILTERS = 0x0040,
- // Use 3D borders on internal controls
- wxDIRCTRL_3D_INTERNAL = 0x0080,
- // Editable labels
- wxDIRCTRL_EDIT_LABELS = 0x0100,
- // Allow multiple selection
- wxDIRCTRL_MULTIPLE = 0x0200
- };
- //-----------------------------------------------------------------------------
- // wxDirItemData
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxDirItemData : public wxTreeItemData
- {
- public:
- wxDirItemData(const wxString& path, const wxString& name, bool isDir);
- virtual ~wxDirItemData(){}
- void SetNewDirName(const wxString& path);
- bool HasSubDirs() const;
- bool HasFiles(const wxString& spec = wxEmptyString) const;
- wxString m_path, m_name;
- bool m_isHidden;
- bool m_isExpanded;
- bool m_isDir;
- };
- //-----------------------------------------------------------------------------
- // wxDirCtrl
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_FWD_CORE wxDirFilterListCtrl;
- class WXDLLIMPEXP_CORE wxGenericDirCtrl: public wxControl
- {
- public:
- wxGenericDirCtrl();
- wxGenericDirCtrl(wxWindow *parent, const wxWindowID id = wxID_ANY,
- const wxString &dir = wxDirDialogDefaultFolderStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDIRCTRL_3D_INTERNAL,
- const wxString& filter = wxEmptyString,
- int defaultFilter = 0,
- const wxString& name = wxTreeCtrlNameStr )
- {
- Init();
- Create(parent, id, dir, pos, size, style, filter, defaultFilter, name);
- }
- bool Create(wxWindow *parent, const wxWindowID id = wxID_ANY,
- const wxString &dir = wxDirDialogDefaultFolderStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDIRCTRL_3D_INTERNAL,
- const wxString& filter = wxEmptyString,
- int defaultFilter = 0,
- const wxString& name = wxTreeCtrlNameStr );
- virtual void Init();
- virtual ~wxGenericDirCtrl();
- void OnExpandItem(wxTreeEvent &event );
- void OnCollapseItem(wxTreeEvent &event );
- void OnBeginEditItem(wxTreeEvent &event );
- void OnEndEditItem(wxTreeEvent &event );
- void OnTreeSelChange(wxTreeEvent &event);
- void OnItemActivated(wxTreeEvent &event);
- void OnSize(wxSizeEvent &event );
- // Try to expand as much of the given path as possible.
- virtual bool ExpandPath(const wxString& path);
- // collapse the path
- virtual bool CollapsePath(const wxString& path);
- // Accessors
- virtual inline wxString GetDefaultPath() const { return m_defaultPath; }
- virtual void SetDefaultPath(const wxString& path) { m_defaultPath = path; }
- // Get dir or filename
- virtual wxString GetPath() const;
- virtual void GetPaths(wxArrayString& paths) const;
- // Get selected filename path only (else empty string).
- // I.e. don't count a directory as a selection
- virtual wxString GetFilePath() const;
- virtual void GetFilePaths(wxArrayString& paths) const;
- virtual void SetPath(const wxString& path);
- virtual void SelectPath(const wxString& path, bool select = true);
- virtual void SelectPaths(const wxArrayString& paths);
- virtual void ShowHidden( bool show );
- virtual bool GetShowHidden() { return m_showHidden; }
- virtual wxString GetFilter() const { return m_filter; }
- virtual void SetFilter(const wxString& filter);
- virtual int GetFilterIndex() const { return m_currentFilter; }
- virtual void SetFilterIndex(int n);
- virtual wxTreeItemId GetRootId() { return m_rootId; }
- virtual wxTreeCtrl* GetTreeCtrl() const { return m_treeCtrl; }
- virtual wxDirFilterListCtrl* GetFilterListCtrl() const { return m_filterListCtrl; }
- virtual void UnselectAll();
- // Helper
- virtual void SetupSections();
- // Find the child that matches the first part of 'path'.
- // E.g. if a child path is "/usr" and 'path' is "/usr/include"
- // then the child for /usr is returned.
- // If the path string has been used (we're at the leaf), done is set to true
- virtual wxTreeItemId FindChild(wxTreeItemId parentId, const wxString& path, bool& done);
- wxString GetPath(wxTreeItemId itemId) const;
- // Resize the components of the control
- virtual void DoResize();
- // Collapse & expand the tree, thus re-creating it from scratch:
- virtual void ReCreateTree();
- // Collapse the entire tree
- virtual void CollapseTree();
- // overridden base class methods
- virtual void SetFocus();
- protected:
- virtual void ExpandRoot();
- virtual void ExpandDir(wxTreeItemId parentId);
- virtual void CollapseDir(wxTreeItemId parentId);
- virtual const wxTreeItemId AddSection(const wxString& path, const wxString& name, int imageId = 0);
- virtual wxTreeItemId AppendItem (const wxTreeItemId & parent,
- const wxString & text,
- int image = -1, int selectedImage = -1,
- wxTreeItemData * data = NULL);
- //void FindChildFiles(wxTreeItemId id, int dirFlags, wxArrayString& filenames);
- virtual wxTreeCtrl* CreateTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long treeStyle);
- // Extract description and actual filter from overall filter string
- bool ExtractWildcard(const wxString& filterStr, int n, wxString& filter, wxString& description);
- private:
- void PopulateNode(wxTreeItemId node);
- wxDirItemData* GetItemData(wxTreeItemId itemId);
- bool m_showHidden;
- wxTreeItemId m_rootId;
- wxString m_defaultPath; // Starting path
- long m_styleEx; // Extended style
- wxString m_filter; // Wildcards in same format as per wxFileDialog
- int m_currentFilter; // The current filter index
- wxString m_currentFilterStr; // Current filter string
- wxTreeCtrl* m_treeCtrl;
- wxDirFilterListCtrl* m_filterListCtrl;
- private:
- DECLARE_EVENT_TABLE()
- DECLARE_DYNAMIC_CLASS(wxGenericDirCtrl)
- wxDECLARE_NO_COPY_CLASS(wxGenericDirCtrl);
- };
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_DIRCTRL_SELECTIONCHANGED, wxTreeEvent );
- wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_DIRCTRL_FILEACTIVATED, wxTreeEvent );
- #define wx__DECLARE_DIRCTRL_EVT(evt, id, fn) \
- wx__DECLARE_EVT1(wxEVT_DIRCTRL_ ## evt, id, wxTreeEventHandler(fn))
- #define EVT_DIRCTRL_SELECTIONCHANGED(id, fn) wx__DECLARE_DIRCTRL_EVT(SELECTIONCHANGED, id, fn)
- #define EVT_DIRCTRL_FILEACTIVATED(id, fn) wx__DECLARE_DIRCTRL_EVT(FILEACTIVATED, id, fn)
- //-----------------------------------------------------------------------------
- // wxDirFilterListCtrl
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxDirFilterListCtrl: public wxChoice
- {
- public:
- wxDirFilterListCtrl() { Init(); }
- wxDirFilterListCtrl(wxGenericDirCtrl* parent, const wxWindowID id = wxID_ANY,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0)
- {
- Init();
- Create(parent, id, pos, size, style);
- }
- bool Create(wxGenericDirCtrl* parent, const wxWindowID id = wxID_ANY,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0);
- void Init();
- virtual ~wxDirFilterListCtrl() {}
- //// Operations
- void FillFilterList(const wxString& filter, int defaultFilter);
- //// Events
- void OnSelFilter(wxCommandEvent& event);
- protected:
- wxGenericDirCtrl* m_dirCtrl;
- DECLARE_EVENT_TABLE()
- DECLARE_CLASS(wxDirFilterListCtrl)
- wxDECLARE_NO_COPY_CLASS(wxDirFilterListCtrl);
- };
- #if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXPM__)
- #define wxDirCtrl wxGenericDirCtrl
- #endif
- // Symbols for accessing individual controls
- #define wxID_TREECTRL 7000
- #define wxID_FILTERLISTCTRL 7001
- #endif // wxUSE_DIRDLG
- //-------------------------------------------------------------------------
- // wxFileIconsTable - use wxTheFileIconsTable which is created as necessary
- //-------------------------------------------------------------------------
- #if wxUSE_DIRDLG || wxUSE_FILEDLG || wxUSE_FILECTRL
- class WXDLLIMPEXP_FWD_CORE wxImageList;
- class WXDLLIMPEXP_CORE wxFileIconsTable
- {
- public:
- wxFileIconsTable();
- ~wxFileIconsTable();
- enum iconId_Type
- {
- folder,
- folder_open,
- computer,
- drive,
- cdrom,
- floppy,
- removeable,
- file,
- executable
- };
- int GetIconID(const wxString& extension, const wxString& mime = wxEmptyString);
- wxImageList *GetSmallImageList();
- protected:
- void Create(); // create on first use
- wxImageList *m_smallImageList;
- wxHashTable *m_HashTable;
- };
- // The global fileicons table
- extern WXDLLIMPEXP_DATA_CORE(wxFileIconsTable *) wxTheFileIconsTable;
- #endif // wxUSE_DIRDLG || wxUSE_FILEDLG || wxUSE_FILECTRL
- // old wxEVT_COMMAND_* constants
- #define wxEVT_COMMAND_DIRCTRL_SELECTIONCHANGED wxEVT_DIRCTRL_SELECTIONCHANGED
- #define wxEVT_COMMAND_DIRCTRL_FILEACTIVATED wxEVT_DIRCTRL_FILEACTIVATED
- #endif
- // _WX_DIRCTRLG_H_
|