// Builds on wxDirCtrl class written by Robert Roebling for the
// wxFile application, modified by Harm van der Heijden.
// Further modified for Windows.
-// Author: Julian Smart et al
+// Author: Robert Roebling, Harm van der Heijden, Julian Smart et al
// Modified by:
// Created: 21/3/2000
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Copyright: (c) Robert Roebling, Harm van der Heijden, Julian Smart
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_DIRCTRL_H_
#pragma interface "dirctrlg.h"
#endif
+#if wxUSE_DIRDLG
+
#include "wx/treectrl.h"
+#include "wx/dialog.h"
#include "wx/dirdlg.h"
#include "wx/choice.h"
// classes
//-----------------------------------------------------------------------------
-class wxDirItemData;
-class wxDirCtrl;
+class WXDLLEXPORT wxTextCtrl;
//-----------------------------------------------------------------------------
// Extra styles for wxGenericDirCtrl
//-----------------------------------------------------------------------------
-// Only allow directory viewing/selection, no files
-#define wxDIRCTRL_DIR_ONLY 0x0010
-// When setting the default path, select the first file in the directory
-#define wxDIRCTRL_SELECT_FIRST 0x0020
-// Show the filter list
-#define wxDIRCTRL_SHOW_FILTERS 0x0040
-// Use 3D borders on internal controls
-#define wxDIRCTRL_3D_INTERNAL 0x0080
+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
+};
//-----------------------------------------------------------------------------
// wxDirItemData
//-----------------------------------------------------------------------------
-class WXDLLEXPORT wxDirItemDataEx : public wxTreeItemData
+class WXDLLEXPORT wxDirItemData : public wxTreeItemData
{
public:
- wxDirItemDataEx(const wxString& path, const wxString& name, bool isDir);
- ~wxDirItemDataEx();
- bool HasSubDirs();
- void SetNewDirName( wxString path );
- wxString m_path, m_name;
- bool m_isHidden;
- bool m_hasSubDirs;
- bool m_isExpanded;
- bool m_isDir;
+ wxDirItemData(const wxString& path, const wxString& name, bool isDir);
+ ~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;
};
//-----------------------------------------------------------------------------
inline wxString GetDefaultPath() const { return m_defaultPath; }
void SetDefaultPath(const wxString& path) { m_defaultPath = path; }
- //inline long GetStyleEx() const { return m_styleEx; }
- //void SetStyleEx(long styleEx) { m_styleEx = styleEx; }
-
// Get dir or filename
- wxString GetPath() const ;
+ wxString GetPath() const;
+
// Get selected filename path only (else empty string).
// I.e. don't count a directory as a selection
- wxString GetFilePath() const ;
- void SetPath(const wxString& path) ;
+ wxString GetFilePath() const;
+ void SetPath(const wxString& path);
+
+ void ShowHidden( bool show );
+ bool GetShowHidden() { return m_showHidden; }
wxString GetFilter() const { return m_filter; }
void SetFilter(const wxString& filter);
int GetFilterIndex() const { return m_currentFilter; }
- void SetFilterIndex(int n) ;
+ void SetFilterIndex(int n);
wxTreeItemId GetRootId() { return m_rootId; }
wxTreeCtrl* GetTreeCtrl() const { return m_treeCtrl; }
wxDirFilterListCtrl* GetFilterListCtrl() const { return m_filterListCtrl; }
-//// Helpers
+ // Helper
void SetupSections();
+
// Parse the filter into an array of filters and an array of descriptions
int ParseFilter(const wxString& filterStr, wxArrayString& filters, wxArrayString& descriptions);
+
// 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.
// Resize the components of the control
void DoResize();
+
+ // Collapse & expand the tree, thus re-creating it from scratch:
+ void ReCreateTree();
+
protected:
void ExpandDir(wxTreeItemId parentId);
+ void CollapseDir(wxTreeItemId parentId);
void AddSection(const wxString& path, const wxString& name, int imageId = 0);
//void FindChildFiles(wxTreeItemId id, int dirFlags, wxArrayString& filenames);
~wxDirFilterListCtrl() {};
-//// Operations
+ //// Operations
void FillFilterList(const wxString& filter, int defaultFilter);
-//// Events
+ //// Events
void OnSelFilter(wxCommandEvent& event);
protected:
DECLARE_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
-//-----------------------------------------------------------------------------
-// wxGenericDirDialog
-//
-//-----------------------------------------------------------------------------
-
-class wxGenericDirDialog: public wxDialog
-{
-DECLARE_EVENT_TABLE()
-public:
- wxGenericDirDialog(): wxDialog() {}
- wxGenericDirDialog(wxWindow* parent, const wxString& title,
- const wxString& defaultPath = wxEmptyString, long style = wxDEFAULT_DIALOG_STYLE, const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxSize(450, 550), const wxString& name = "dialog");
-
- void OnCloseWindow(wxCloseEvent& event);
- void OnOK(wxCommandEvent& event);
-
- inline void SetMessage(const wxString& message) { m_message = message; }
- void SetPath(const wxString& path) ;
- inline void SetStyle(long style) { m_dialogStyle = style; }
-
- inline wxString GetMessage(void) const { return m_message; }
- wxString GetPath(void) const ;
- inline long GetStyle(void) const { return m_dialogStyle; }
-
-protected:
- wxString m_message;
- long m_dialogStyle;
- wxString m_path;
- wxGenericDirCtrl* m_dirCtrl;
-
-};
+#endif // wxUSE_DIRDLG
#endif
// _WX_DIRCTRLG_H_