File: filedlg.h

package info (click to toggle)
wxpython4.0 4.2.3%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 221,752 kB
  • sloc: cpp: 962,555; python: 230,573; ansic: 170,731; makefile: 51,756; sh: 9,342; perl: 1,564; javascript: 584; php: 326; xml: 200
file content (305 lines) | stat: -rw-r--r-- 11,919 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
/////////////////////////////////////////////////////////////////////////////
// Name:        wx/filedlg.h
// Purpose:     wxFileDialog base header
// Author:      Robert Roebling
// Modified by:
// Created:     8/17/99
// Copyright:   (c) Robert Roebling
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#ifndef _WX_FILEDLG_H_BASE_
#define _WX_FILEDLG_H_BASE_

#include "wx/defs.h"

#if wxUSE_FILEDLG

#include "wx/dialog.h"
#include "wx/arrstr.h"

// this symbol is defined for the platforms which support multiple
// ('|'-separated) filters in the file dialog
#if defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXMAC__)
    #define wxHAS_MULTIPLE_FILEDLG_FILTERS
#endif

class WXDLLIMPEXP_FWD_CORE wxFileDialogCustomizeHook;

//----------------------------------------------------------------------------
// wxFileDialog data
//----------------------------------------------------------------------------

/*
    The flags below must coexist with the following flags in m_windowStyle
    #define wxCAPTION               0x20000000
    #define wxMAXIMIZE              0x00002000
    #define wxCLOSE_BOX             0x00001000
    #define wxSYSTEM_MENU           0x00000800
    wxBORDER_NONE   =               0x00200000
    #define wxRESIZE_BORDER         0x00000040
    #define wxDIALOG_NO_PARENT      0x00000020
*/

enum
{
    wxFD_OPEN              = 0x0001,
    wxFD_SAVE              = 0x0002,
    wxFD_OVERWRITE_PROMPT  = 0x0004,
    wxFD_NO_FOLLOW         = 0x0008,
    wxFD_FILE_MUST_EXIST   = 0x0010,
    wxFD_CHANGE_DIR        = 0x0080,
    wxFD_PREVIEW           = 0x0100,
    wxFD_MULTIPLE          = 0x0200,
    wxFD_SHOW_HIDDEN       = 0x0400
};

#define wxFD_DEFAULT_STYLE      wxFD_OPEN

#if wxABI_VERSION >= 30201

// Flags for wxFileDialog::AddShortcut().
enum
{
    wxFD_SHORTCUT_TOP       = 0x0001,
    wxFD_SHORTCUT_BOTTOM    = 0x0002
};

#endif // wxABI_VERSION >= 3.2.1

extern WXDLLIMPEXP_DATA_CORE(const char) wxFileDialogNameStr[];
extern WXDLLIMPEXP_DATA_CORE(const char) wxFileSelectorPromptStr[];
extern WXDLLIMPEXP_DATA_CORE(const char) wxFileSelectorDefaultWildcardStr[];

//----------------------------------------------------------------------------
// wxFileDialogBase
//----------------------------------------------------------------------------

class WXDLLIMPEXP_CORE wxFileDialogBase: public wxDialog
{
public:
    wxFileDialogBase () { Init(); }

    wxFileDialogBase(wxWindow *parent,
                     const wxString& message = wxASCII_STR(wxFileSelectorPromptStr),
                     const wxString& defaultDir = wxEmptyString,
                     const wxString& defaultFile = wxEmptyString,
                     const wxString& wildCard = wxASCII_STR(wxFileSelectorDefaultWildcardStr),
                     long style = wxFD_DEFAULT_STYLE,
                     const wxPoint& pos = wxDefaultPosition,
                     const wxSize& sz = wxDefaultSize,
                     const wxString& name = wxASCII_STR(wxFileDialogNameStr))
    {
        Init();
        Create(parent, message, defaultDir, defaultFile, wildCard, style, pos, sz, name);
    }

    virtual ~wxFileDialogBase() {}


    bool Create(wxWindow *parent,
                const wxString& message = wxASCII_STR(wxFileSelectorPromptStr),
                const wxString& defaultDir = wxEmptyString,
                const wxString& defaultFile = wxEmptyString,
                const wxString& wildCard = wxASCII_STR(wxFileSelectorDefaultWildcardStr),
                long style = wxFD_DEFAULT_STYLE,
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& sz = wxDefaultSize,
                const wxString& name = wxASCII_STR(wxFileDialogNameStr));

    bool HasFdFlag(int flag) const { return HasFlag(flag); }

    virtual void SetMessage(const wxString& message) { m_message = message; }
    virtual void SetPath(const wxString& path);
    virtual void SetDirectory(const wxString& dir);
    virtual void SetFilename(const wxString& name);
    virtual void SetWildcard(const wxString& wildCard) { m_wildCard = wildCard; }
    virtual void SetFilterIndex(int filterIndex) { m_filterIndex = filterIndex; }

    virtual wxString GetMessage() const { return m_message; }
    virtual wxString GetPath() const
    {
        wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetPaths() instead" );
        return m_path;
    }

    virtual void GetPaths(wxArrayString& paths) const { paths.Empty(); paths.Add(m_path); }
    virtual wxString GetDirectory() const { return m_dir; }
    virtual wxString GetFilename() const
    {
        wxCHECK_MSG( !HasFlag(wxFD_MULTIPLE), wxString(), "When using wxFD_MULTIPLE, must call GetFilenames() instead" );
        return m_fileName;
    }
    virtual void GetFilenames(wxArrayString& files) const { files.Empty(); files.Add(m_fileName); }
    virtual wxString GetWildcard() const { return m_wildCard; }
    virtual int GetFilterIndex() const { return m_filterIndex; }

    virtual wxString GetCurrentlySelectedFilename() const
        { return m_currentlySelectedFilename; }

    virtual int GetCurrentlySelectedFilterIndex () const
        { return m_currentlySelectedFilterIndex; }


#if defined(__WXUNIVERSAL__) || !(defined(__WXMSW__) || defined(__WXGTK20__))
#if wxABI_VERSION >= 30201
    // Add a shortcut to the given directory in the sidebar containing such
    // shortcuts if supported.
    bool AddShortcut(const wxString& directory, int flags = 0);
#endif // wxABI_VERSION >= 3.2.1
#endif // Platforms without native implementation.

    // A customize hook methods will be called by wxFileDialog later if this
    // function returns true, see its documentation for details.
    //
    // Note that the customizeHook object must remain alive at least until
    // ShowModal() returns.
    //
    // If this function returns false, it means that customizing the file
    // dialog is not supported on this platforms.
    virtual bool SetCustomizeHook(wxFileDialogCustomizeHook& customizeHook);


    // Extra controls support is deprecated now as it doesn't allow to use the
    // contemporary file dialogs under MSW, use wxFileDialogCustomize-based
    // API above instead in the new code.

    // this function is called with wxFileDialog as parameter and should
    // create the window containing the extra controls we want to show in it
    typedef wxWindow *(*ExtraControlCreatorFunction)(wxWindow*);

    virtual bool SupportsExtraControl() const { return false; }

    bool SetExtraControlCreator(ExtraControlCreatorFunction creator);
    wxWindow *GetExtraControl() const { return m_extraControl; }

    // Utility functions

    // Append first extension to filePath from a ';' separated extensionList
    // if filePath = "path/foo.bar" just return it as is
    // if filePath = "foo[.]" and extensionList = "*.jpg;*.png" return "foo.jpg"
    // if the extension is "*.j?g" (has wildcards) or "jpg" then return filePath
    static wxString AppendExtension(const wxString &filePath,
                                    const wxString &extensionList);

    // Set the filter index to match the given extension.
    //
    // This is always valid to call, even if the extension is empty or the
    // filter list doesn't contain it, the function will just do nothing in
    // these cases.
    void SetFilterIndexFromExt(const wxString& ext);

protected:
    wxString      m_message;
    wxString      m_dir;
    wxString      m_path;       // Full path
    wxString      m_fileName;
    wxString      m_wildCard;
    int           m_filterIndex;

    // Currently selected, but not yet necessarily accepted by the user, file.
    // This should be updated whenever the selection in the control changes by
    // the platform-specific code to provide a useful implementation of
    // GetCurrentlySelectedFilename().
    wxString      m_currentlySelectedFilename;

    // Currently selected, but not yet necessarily accepted by the user, file
    // type (a.k.a. filter) index. This should be updated whenever the
    // selection in the control changes by the platform-specific code to
    // provide a useful implementation of GetCurrentlySelectedFilterIndex().
    int           m_currentlySelectedFilterIndex;

    wxFileDialogCustomizeHook* m_customizeHook;

    wxWindow*     m_extraControl;

    // create and return the extra control using the given parent
    wxWindow* CreateExtraControlWithParent(wxWindow* parent) const;
    // returns true if control is created, also sets m_extraControl
    bool CreateExtraControl();
    // destroy m_extraControl and reset it to NULL
    void DestroyExtraControl();
    // return true if SetExtraControlCreator() was called
    bool HasExtraControlCreator() const
        { return m_extraControlCreator != NULL; }
    // Helper function for native file dialog usage where no wx events
    // are processed.
    void UpdateExtraControlUI();
    // Helper function simply transferring data from custom controls if they
    // are used -- must be called if the dialog was accepted.
    void TransferDataFromExtraControl();

    // Stub virtual functions for forward binary compatibility. DO NOT USE.
    virtual void* WXReservedFileDialog1(void*);
    virtual void* WXReservedFileDialog2(void*);

private:
    ExtraControlCreatorFunction m_extraControlCreator;

    void Init();
    wxDECLARE_DYNAMIC_CLASS(wxFileDialogBase);
    wxDECLARE_NO_COPY_CLASS(wxFileDialogBase);
};


//----------------------------------------------------------------------------
// wxFileDialog convenience functions
//----------------------------------------------------------------------------

// File selector - backward compatibility
WXDLLIMPEXP_CORE wxString
wxFileSelector(const wxString& message = wxASCII_STR(wxFileSelectorPromptStr),
               const wxString& default_path = wxEmptyString,
               const wxString& default_filename = wxEmptyString,
               const wxString& default_extension = wxEmptyString,
               const wxString& wildcard = wxASCII_STR(wxFileSelectorDefaultWildcardStr),
               int flags = 0,
               wxWindow *parent = NULL,
               int x = wxDefaultCoord, int y = wxDefaultCoord);

// An extended version of wxFileSelector
WXDLLIMPEXP_CORE wxString
wxFileSelectorEx(const wxString& message = wxASCII_STR(wxFileSelectorPromptStr),
                 const wxString& default_path = wxEmptyString,
                 const wxString& default_filename = wxEmptyString,
                 int *indexDefaultExtension = NULL,
                 const wxString& wildcard = wxASCII_STR(wxFileSelectorDefaultWildcardStr),
                 int flags = 0,
                 wxWindow *parent = NULL,
                 int x = wxDefaultCoord, int y = wxDefaultCoord);

// Ask for filename to load
WXDLLIMPEXP_CORE wxString
wxLoadFileSelector(const wxString& what,
                   const wxString& extension,
                   const wxString& default_name = wxEmptyString,
                   wxWindow *parent = NULL);

// Ask for filename to save
WXDLLIMPEXP_CORE wxString
wxSaveFileSelector(const wxString& what,
                   const wxString& extension,
                   const wxString& default_name = wxEmptyString,
                   wxWindow *parent = NULL);


#if defined (__WXUNIVERSAL__)
    #define wxHAS_GENERIC_FILEDIALOG
    #include "wx/generic/filedlgg.h"
#elif defined(__WXMSW__)
    #include "wx/msw/filedlg.h"
#elif defined(__WXMOTIF__)
    #include "wx/motif/filedlg.h"
#elif defined(__WXGTK20__)
    #include "wx/gtk/filedlg.h"     // GTK+ > 2.4 has native version
#elif defined(__WXGTK__)
    #include "wx/gtk1/filedlg.h"
#elif defined(__WXMAC__)
    #include "wx/osx/filedlg.h"
#elif defined(__WXQT__)
    #include "wx/qt/filedlg.h"
#endif

#endif // wxUSE_FILEDLG

#endif // _WX_FILEDLG_H_BASE_