~ubuntu-dev/wxwidgets2.6/upstream-debian

« back to all changes in this revision

Viewing changes to include/wx/generic/dirctrlg.h

  • Committer: Daniel T Chen
  • Date: 2006-06-26 10:15:11 UTC
  • Revision ID: crimsun@ubuntu.com-20060626101511-a4436cec4c6d9b35
ImportĀ DebianĀ 2.6.3.2.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/////////////////////////////////////////////////////////////////////////////
 
2
// Name:        dirctrlg.h
 
3
// Purpose:     wxGenericDirCtrl class
 
4
//              Builds on wxDirCtrl class written by Robert Roebling for the
 
5
//              wxFile application, modified by Harm van der Heijden.
 
6
//              Further modified for Windows.
 
7
// Author:      Robert Roebling, Harm van der Heijden, Julian Smart et al
 
8
// Modified by:
 
9
// Created:     21/3/2000
 
10
// RCS-ID:      $Id: dirctrlg.h,v 1.30 2005/03/31 19:03:54 JS Exp $
 
11
// Copyright:   (c) Robert Roebling, Harm van der Heijden, Julian Smart
 
12
// Licence:     wxWindows licence
 
13
/////////////////////////////////////////////////////////////////////////////
 
14
 
 
15
#ifndef _WX_DIRCTRL_H_
 
16
#define _WX_DIRCTRL_H_
 
17
 
 
18
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 
19
#pragma interface "dirctrlg.h"
 
20
#endif
 
21
 
 
22
#if wxUSE_DIRDLG || wxUSE_FILEDLG
 
23
    #include "wx/imaglist.h"
 
24
#endif
 
25
 
 
26
#if wxUSE_DIRDLG
 
27
 
 
28
#include "wx/treectrl.h"
 
29
#include "wx/dialog.h"
 
30
#include "wx/dirdlg.h"
 
31
#include "wx/choice.h"
 
32
 
 
33
//-----------------------------------------------------------------------------
 
34
// classes
 
35
//-----------------------------------------------------------------------------
 
36
 
 
37
class WXDLLIMPEXP_CORE wxTextCtrl;
 
38
class WXDLLIMPEXP_CORE wxImageList;
 
39
class WXDLLIMPEXP_BASE wxHashTable;
 
40
 
 
41
//-----------------------------------------------------------------------------
 
42
// Extra styles for wxGenericDirCtrl
 
43
//-----------------------------------------------------------------------------
 
44
 
 
45
enum
 
46
{
 
47
    // Only allow directory viewing/selection, no files
 
48
    wxDIRCTRL_DIR_ONLY       = 0x0010,
 
49
    // When setting the default path, select the first file in the directory
 
50
    wxDIRCTRL_SELECT_FIRST   = 0x0020,
 
51
    // Show the filter list
 
52
    wxDIRCTRL_SHOW_FILTERS   = 0x0040,
 
53
    // Use 3D borders on internal controls
 
54
    wxDIRCTRL_3D_INTERNAL    = 0x0080,
 
55
    // Editable labels
 
56
    wxDIRCTRL_EDIT_LABELS    = 0x0100
 
57
};
 
58
 
 
59
//-----------------------------------------------------------------------------
 
60
// wxDirItemData
 
61
//-----------------------------------------------------------------------------
 
62
 
 
63
class WXDLLEXPORT wxDirItemData : public wxTreeItemData
 
64
{
 
65
public:
 
66
    wxDirItemData(const wxString& path, const wxString& name, bool isDir);
 
67
    ~wxDirItemData(){}
 
68
    void SetNewDirName(const wxString& path);
 
69
 
 
70
    bool HasSubDirs() const;
 
71
    bool HasFiles(const wxString& spec = wxEmptyString) const;
 
72
 
 
73
    wxString m_path, m_name;
 
74
    bool m_isHidden;
 
75
    bool m_isExpanded;
 
76
    bool m_isDir;
 
77
};
 
78
 
 
79
//-----------------------------------------------------------------------------
 
80
// wxDirCtrl
 
81
//-----------------------------------------------------------------------------
 
82
 
 
83
class WXDLLEXPORT wxDirFilterListCtrl;
 
84
 
 
85
class WXDLLEXPORT wxGenericDirCtrl: public wxControl
 
86
{
 
87
public:
 
88
    wxGenericDirCtrl();
 
89
    wxGenericDirCtrl(wxWindow *parent, const wxWindowID id = wxID_ANY,
 
90
              const wxString &dir = wxDirDialogDefaultFolderStr,
 
91
              const wxPoint& pos = wxDefaultPosition,
 
92
              const wxSize& size = wxDefaultSize,
 
93
              long style = wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER,
 
94
              const wxString& filter = wxEmptyString,
 
95
              int defaultFilter = 0,
 
96
              const wxString& name = wxTreeCtrlNameStr )
 
97
    {
 
98
        Init();
 
99
        Create(parent, id, dir, pos, size, style, filter, defaultFilter, name);
 
100
    }
 
101
 
 
102
    bool Create(wxWindow *parent, const wxWindowID id = wxID_ANY,
 
103
              const wxString &dir = wxDirDialogDefaultFolderStr,
 
104
              const wxPoint& pos = wxDefaultPosition,
 
105
              const wxSize& size = wxDefaultSize,
 
106
              long style = wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER,
 
107
              const wxString& filter = wxEmptyString,
 
108
              int defaultFilter = 0,
 
109
              const wxString& name = wxTreeCtrlNameStr );
 
110
 
 
111
    virtual void Init();
 
112
 
 
113
    virtual ~wxGenericDirCtrl();
 
114
 
 
115
    void OnExpandItem(wxTreeEvent &event );
 
116
    void OnCollapseItem(wxTreeEvent &event );
 
117
    void OnBeginEditItem(wxTreeEvent &event );
 
118
    void OnEndEditItem(wxTreeEvent &event );
 
119
    void OnSize(wxSizeEvent &event );
 
120
 
 
121
    // Try to expand as much of the given path as possible.
 
122
    virtual bool ExpandPath(const wxString& path);
 
123
 
 
124
    // Accessors
 
125
 
 
126
    virtual inline wxString GetDefaultPath() const { return m_defaultPath; }
 
127
    virtual void SetDefaultPath(const wxString& path) { m_defaultPath = path; }
 
128
 
 
129
    // Get dir or filename
 
130
    virtual wxString GetPath() const;
 
131
 
 
132
    // Get selected filename path only (else empty string).
 
133
    // I.e. don't count a directory as a selection
 
134
    virtual wxString GetFilePath() const;
 
135
    virtual void SetPath(const wxString& path);
 
136
 
 
137
    virtual void ShowHidden( bool show );
 
138
    virtual bool GetShowHidden() { return m_showHidden; }
 
139
 
 
140
    virtual wxString GetFilter() const { return m_filter; }
 
141
    virtual void SetFilter(const wxString& filter);
 
142
 
 
143
    virtual int GetFilterIndex() const { return m_currentFilter; }
 
144
    virtual void SetFilterIndex(int n);
 
145
 
 
146
    virtual wxTreeItemId GetRootId() { return m_rootId; }
 
147
 
 
148
    virtual wxTreeCtrl* GetTreeCtrl() const { return m_treeCtrl; }
 
149
    virtual wxDirFilterListCtrl* GetFilterListCtrl() const { return m_filterListCtrl; }
 
150
 
 
151
    // Helper
 
152
    virtual void SetupSections();
 
153
 
 
154
#if WXWIN_COMPATIBILITY_2_4
 
155
    // Parse the filter into an array of filters and an array of descriptions
 
156
    virtual int ParseFilter(const wxString& filterStr, wxArrayString& filters, wxArrayString& descriptions);
 
157
#endif // WXWIN_COMPATIBILITY_2_4
 
158
 
 
159
    // Find the child that matches the first part of 'path'.
 
160
    // E.g. if a child path is "/usr" and 'path' is "/usr/include"
 
161
    // then the child for /usr is returned.
 
162
    // If the path string has been used (we're at the leaf), done is set to true
 
163
    virtual wxTreeItemId FindChild(wxTreeItemId parentId, const wxString& path, bool& done);
 
164
 
 
165
    // Resize the components of the control
 
166
    virtual void DoResize();
 
167
 
 
168
    // Collapse & expand the tree, thus re-creating it from scratch:
 
169
    virtual void ReCreateTree();
 
170
 
 
171
    // Collapse the entire tree
 
172
    virtual void CollapseTree();
 
173
 
 
174
protected:
 
175
    virtual void ExpandRoot();
 
176
    virtual void ExpandDir(wxTreeItemId parentId);
 
177
    virtual void CollapseDir(wxTreeItemId parentId);
 
178
    virtual const wxTreeItemId AddSection(const wxString& path, const wxString& name, int imageId = 0);
 
179
    virtual wxTreeItemId AppendItem (const wxTreeItemId & parent,
 
180
                const wxString & text,
 
181
                int image = -1, int selectedImage = -1,
 
182
                wxTreeItemData * data = NULL);
 
183
    //void FindChildFiles(wxTreeItemId id, int dirFlags, wxArrayString& filenames);
 
184
    virtual wxTreeCtrl* CreateTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long treeStyle);
 
185
 
 
186
    // Extract description and actual filter from overall filter string
 
187
    bool ExtractWildcard(const wxString& filterStr, int n, wxString& filter, wxString& description);
 
188
 
 
189
private:
 
190
    bool            m_showHidden;
 
191
    wxTreeItemId    m_rootId;
 
192
    wxString        m_defaultPath; // Starting path
 
193
    long            m_styleEx; // Extended style
 
194
    wxString        m_filter;  // Wildcards in same format as per wxFileDialog
 
195
    int             m_currentFilter; // The current filter index
 
196
    wxString        m_currentFilterStr; // Current filter string
 
197
    wxTreeCtrl*     m_treeCtrl;
 
198
    wxDirFilterListCtrl* m_filterListCtrl;
 
199
 
 
200
private:
 
201
    DECLARE_EVENT_TABLE()
 
202
    DECLARE_DYNAMIC_CLASS(wxGenericDirCtrl)
 
203
    DECLARE_NO_COPY_CLASS(wxGenericDirCtrl)
 
204
};
 
205
 
 
206
//-----------------------------------------------------------------------------
 
207
// wxDirFilterListCtrl
 
208
//-----------------------------------------------------------------------------
 
209
 
 
210
class WXDLLEXPORT wxDirFilterListCtrl: public wxChoice
 
211
{
 
212
public:
 
213
    wxDirFilterListCtrl() { Init(); }
 
214
    wxDirFilterListCtrl(wxGenericDirCtrl* parent, const wxWindowID id = wxID_ANY,
 
215
              const wxPoint& pos = wxDefaultPosition,
 
216
              const wxSize& size = wxDefaultSize,
 
217
              long style = 0)
 
218
    {
 
219
        Init();
 
220
        Create(parent, id, pos, size, style);
 
221
    }
 
222
 
 
223
    bool Create(wxGenericDirCtrl* parent, const wxWindowID id = wxID_ANY,
 
224
              const wxPoint& pos = wxDefaultPosition,
 
225
              const wxSize& size = wxDefaultSize,
 
226
              long style = 0);
 
227
 
 
228
    void Init();
 
229
 
 
230
    ~wxDirFilterListCtrl() {}
 
231
 
 
232
    //// Operations
 
233
    void FillFilterList(const wxString& filter, int defaultFilter);
 
234
 
 
235
    //// Events
 
236
    void OnSelFilter(wxCommandEvent& event);
 
237
 
 
238
protected:
 
239
    wxGenericDirCtrl*    m_dirCtrl;
 
240
 
 
241
    DECLARE_EVENT_TABLE()
 
242
    DECLARE_CLASS(wxDirFilterListCtrl)
 
243
    DECLARE_NO_COPY_CLASS(wxDirFilterListCtrl)
 
244
};
 
245
 
 
246
#if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXPM__)
 
247
    #define wxDirCtrl wxGenericDirCtrl
 
248
#endif
 
249
 
 
250
// Symbols for accessing individual controls
 
251
#define wxID_TREECTRL          7000
 
252
#define wxID_FILTERLISTCTRL    7001
 
253
 
 
254
#endif // wxUSE_DIRDLG
 
255
 
 
256
//-------------------------------------------------------------------------
 
257
// wxFileIconsTable - use wxTheFileIconsTable which is created as necessary
 
258
//-------------------------------------------------------------------------
 
259
 
 
260
#if wxUSE_DIRDLG || wxUSE_FILEDLG
 
261
 
 
262
class WXDLLEXPORT wxFileIconsTable
 
263
{
 
264
public:
 
265
    wxFileIconsTable();
 
266
    ~wxFileIconsTable();
 
267
 
 
268
    enum iconId_Type
 
269
    {
 
270
        folder,
 
271
        folder_open,
 
272
        computer,
 
273
        drive,
 
274
        cdrom,
 
275
        floppy,
 
276
        removeable,
 
277
        file,
 
278
        executable
 
279
    };
 
280
 
 
281
    int GetIconID(const wxString& extension, const wxString& mime = wxEmptyString);
 
282
    wxImageList *GetSmallImageList();
 
283
 
 
284
protected:
 
285
    void Create();  // create on first use
 
286
 
 
287
    wxImageList *m_smallImageList;
 
288
    wxHashTable *m_HashTable;
 
289
};
 
290
 
 
291
// The global fileicons table
 
292
extern WXDLLEXPORT_DATA(wxFileIconsTable *) wxTheFileIconsTable;
 
293
 
 
294
#endif // wxUSE_DIRDLG || wxUSE_FILEDLG
 
295
 
 
296
#endif
 
297
    // _WX_DIRCTRLG_H_