]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/generic/dirdlgg.h
bugfixes, bugfixes, bugfixes...
[wxWidgets.git] / include / wx / generic / dirdlgg.h
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: dirdlgg.h
3// Purpose: wxDirDialog
4// Author: Harm van der Heijden and Robert Roebling
5// Modified by:
6// Created: 12/12/98
7// Copyright: (c) Harm van der Heijden and Robert Roebling
8// RCS-ID: $Id$
9// Licence: wxWindows licence
10//
11// Notes: wxDirDialog class written by Harm van der Heijden,
12// uses wxDirCtrl class written by Robert Roebling for the
13// wxFile application, modified by Harm van der Heijden
14//
15// Description: This generic dirdialog implementation defines three classes:
16// 1) wxDirItemData(public wxTreeItemData) stores pathname and
17// displayed name for each item in the directory tree
18// 2) wxDirCtrl(public wxTreeCtrl) is a tree widget that
19// displays a directory tree. It is possible to define sections
20// for fast access to parts of the file system (such as the
21// user's homedir, /usr/local, /tmp ...etc), similar to
22// Win95 Explorer's shortcuts to 'My Computer', 'Desktop', etc.
23// 3) wxDirDialog is the dialog box itself. The user can choose
24// a directory by navigating the tree, or by typing a dir
25// in an inputbox. The inputbox displays paths selected in the
26// tree. It is possible to create new directories. The user
27// will automatically be prompted for dir creation if he
28// enters a non-existing dir.
29//
30// TODO/BUGS: - standard sections only have reasonable defaults for Unix
31// (but others are easily added in wxDirCtrl::SetupSections)
32// - No direct support for "show hidden" toggle. Partly due
33// to laziness on my part and partly because
34// wxFindFirst/NextFile never seems to find hidden dirs
35// anyway.
36// - No automatic update of the tree (branch) after directory
37// creation.
38// - I call wxBeginBusyCursor while expanding items (creating
39// a new branch might take a few seconds, especially if a
40// CDROM drive or something is involved) but that doesn't
41// seem to do anything. Need to look into that.
42// - Am still looking for an efficient way to delete wxTreeCtrl
43// branches. DeleteChildren has disappeared and
44// CollapseAndReset( parent ) deletes the parent as well.
45// - The dialog window layout is done using wxConstraints. It
46// works, but it's not as simple as I'd like it to be (see
47// comments in wxDirDialog::doSize)
48//
49/////////////////////////////////////////////////////////////////////////////
50
51#ifndef _WX_DIRDLGG_H_
52#define _WX_DIRDLGG_H_
53
54#ifdef __GNUG__
55#pragma interface "dirdlgg.h"
56#endif
57
58#include "wx/defs.h"
59
60#if wxUSE_DIRDLG
61
62#include "wx/dialog.h"
63#include "wx/checkbox.h"
64#include "wx/treectrl.h"
65
66//-----------------------------------------------------------------------------
67// data
68//-----------------------------------------------------------------------------
69
70WXDLLEXPORT_DATA(extern const wxChar*) wxFileSelectorPromptStr;
71WXDLLEXPORT_DATA(extern const wxChar*) wxDirDialogDefaultFolderStr;
72
73//-----------------------------------------------------------------------------
74// classes
75//-----------------------------------------------------------------------------
76
77class wxDirItemData;
78class wxDirCtrl;
79class wxDirDialog;
80
81//-----------------------------------------------------------------------------
82// wxDirItemData
83//-----------------------------------------------------------------------------
84
85class WXDLLEXPORT wxDirItemData : public wxTreeItemData
86{
87public:
88 wxDirItemData(wxString& path, wxString& name);
89 ~wxDirItemData();
90 bool HasSubDirs();
91 void SetNewDirName( wxString path );
92 wxString m_path, m_name;
93 bool m_isHidden;
94 bool m_hasSubDirs;
95};
96
97//-----------------------------------------------------------------------------
98// wxDirCtrl
99//-----------------------------------------------------------------------------
100
101class WXDLLEXPORT wxDirCtrl: public wxTreeCtrl
102{
103public:
104 bool m_showHidden;
105 wxTreeItemId m_rootId;
106
107 wxDirCtrl();
108 wxDirCtrl(wxWindow *parent, const wxWindowID id = -1,
109 const wxString &dir = wxDirDialogDefaultFolderStr,
110 const wxPoint& pos = wxDefaultPosition,
111 const wxSize& size = wxDefaultSize,
112 const long style = wxTR_HAS_BUTTONS,
113 const wxString& name = wxTreeCtrlNameStr );
114 void ShowHidden( const bool yesno );
115 void OnExpandItem(wxTreeEvent &event );
116 void OnCollapseItem(wxTreeEvent &event );
117 void OnBeginEditItem(wxTreeEvent &event );
118 void OnEndEditItem(wxTreeEvent &event );
119
120protected:
121 friend class wxDirDialog;
122
123 void CreateItems(const wxTreeItemId &parent);
124 void SetupSections();
125 wxArrayString m_paths, m_names;
126
127private:
128 DECLARE_EVENT_TABLE()
129 DECLARE_DYNAMIC_CLASS(wxDirCtrl)
130};
131
132//-----------------------------------------------------------------------------
133// wxDirDialog
134//-----------------------------------------------------------------------------
135
136class WXDLLEXPORT wxDirDialog: public wxDialog
137{
138public:
139 wxDirDialog() {}
140 wxDirDialog(wxWindow *parent,
141 const wxString& message = wxFileSelectorPromptStr,
142 const wxString& defaultPath = wxEmptyString,
143 long style = 0, const wxPoint& pos = wxDefaultPosition);
144 inline void SetMessage(const wxString& message) { m_message = message; }
145 inline void SetPath(const wxString& path) { m_path = path; }
146 inline void SetStyle(long style) { m_dialogStyle = style; }
147
148 inline wxString GetMessage() const { return m_message; }
149 inline wxString GetPath() const { return m_path; }
150 inline long GetStyle() const { return m_dialogStyle; }
151
152 int ShowModal();
153
154 void OnTreeSelected( wxTreeEvent &event );
155 void OnTreeKeyDown( wxTreeEvent &event );
156 void OnOK(wxCommandEvent& event);
157 void OnCancel(wxCommandEvent& event);
158 void OnNew(wxCommandEvent& event);
159 // void OnCheck(wxCommandEvent& event);
160
161protected:
162 // implementation
163 wxString m_message;
164 long m_dialogStyle;
165 wxString m_path;
166 wxDirCtrl *m_dir;
167 wxTextCtrl *m_input;
168 wxCheckBox *m_check; // not yet used
169 wxButton *m_ok, *m_cancel, *m_new;
170
171private:
172 DECLARE_EVENT_TABLE()
173 DECLARE_DYNAMIC_CLASS(wxDirDialog)
174};
175
176#endif
177
178#endif
179 // _WX_DIRDLGG_H_
180