Audacity 3.2.0
FileDialog.cpp
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 FileDialog.cpp
6
7 Leland Lucius
8
9*******************************************************************//*******************************************************************/
16
17#include "FileDialog.h"
18
20{
21 m_creator = NULL;
22 m_userdata = 0;
23}
24
26{
27 return m_creator != NULL;
28}
29
30void FileDialogBase::SetUserPaneCreator(UserPaneCreatorFunction creator, wxUIntPtr userdata)
31{
32 m_creator = creator;
33 m_userdata = userdata;
34}
35
36void FileDialogBase::CreateUserPane(wxWindow *parent)
37{
38 if (m_creator)
39 {
40 (*m_creator)(parent, m_userdata);
41 }
42}
43
44//
45// Copied from wx 3.0.2 and modified to support additional features
46//
48// Name: src/common/fldlgcmn.cpp
49// Purpose: wxFileDialog common functions
50// Author: John Labenski
51// Modified by: Leland Lucius
52// Created: 14.06.03 (extracted from src/*/filedlg.cpp)
53// Copyright: (c) Robert Roebling
54// Licence: wxWindows licence
56
57//----------------------------------------------------------------------------
58// FileDialog convenience functions
59//----------------------------------------------------------------------------
60
61wxString FileSelector(const wxString& title,
62 const wxString& defaultDir,
63 const wxString& defaultFileName,
64 const wxString& defaultExtension,
65 const wxString& filter,
66 int flags,
67 wxWindow *parent,
68 int x, int y)
69{
70 // The defaultExtension, if non-empty, is
71 // appended to the filename if the user fails to type an extension. The new
72 // implementation (taken from FileSelectorEx) appends the extension
73 // automatically, by looking at the filter specification. In fact this
74 // should be better than the native Microsoft implementation because
75 // Windows only allows *one* default extension, whereas here we do the
76 // right thing depending on the filter the user has chosen.
77
78 // If there's a default extension specified but no filter, we create a
79 // suitable filter.
80
81 wxString filter2;
82 if ( !defaultExtension.empty() && filter.empty() )
83 filter2 = wxString(wxT("*.")) + defaultExtension;
84 else if ( !filter.empty() )
85 filter2 = filter;
86
87 FileDialog fileDialog(parent, title, defaultDir,
88 defaultFileName, filter2,
89 flags, wxPoint(x, y));
90
91 // if filter is of form "All files (*)|*|..." set correct filter index
92 if ( !defaultExtension.empty() && filter2.find(wxT('|')) != wxString::npos )
93 {
94 int filterIndex = 0;
95
96 wxArrayString descriptions, filters;
97 // don't care about errors, handled already by FileDialog
98 (void)wxParseCommonDialogsFilter(filter2, descriptions, filters);
99 for (size_t n=0; n<filters.GetCount(); n++)
100 {
101 if (filters[n].Contains(defaultExtension))
102 {
103 filterIndex = n;
104 break;
105 }
106 }
107
108 if (filterIndex > 0)
109 fileDialog.SetFilterIndex(filterIndex);
110 }
111
112 wxString filename;
113 if ( fileDialog.ShowModal() == wxID_OK )
114 {
115 filename = fileDialog.GetPath();
116 }
117
118 return filename;
119}
120
121//----------------------------------------------------------------------------
122// FileSelectorEx
123//----------------------------------------------------------------------------
124
125wxString FileSelectorEx(const wxString& title,
126 const wxString& defaultDir,
127 const wxString& defaultFileName,
128 int* defaultFilterIndex,
129 const wxString& filter,
130 int flags,
131 wxWindow* parent,
132 int x,
133 int y)
134
135{
136 FileDialog fileDialog(parent,
137 title,
138 defaultDir,
139 defaultFileName,
140 filter,
141 flags, wxPoint(x, y));
142
143 wxString filename;
144 if ( fileDialog.ShowModal() == wxID_OK )
145 {
146 if ( defaultFilterIndex )
147 *defaultFilterIndex = fileDialog.GetFilterIndex();
148
149 filename = fileDialog.GetPath();
150 }
151
152 return filename;
153}
154
wxT("CloseDown"))
wxString FileSelector(const wxString &title, const wxString &defaultDir, const wxString &defaultFileName, const wxString &defaultExtension, const wxString &filter, int flags, wxWindow *parent, int x, int y)
Definition: FileDialog.cpp:61
wxString FileSelectorEx(const wxString &title, const wxString &defaultDir, const wxString &defaultFileName, int *defaultFilterIndex, const wxString &filter, int flags, wxWindow *parent, int x, int y)
Definition: FileDialog.cpp:125
static const auto title
virtual void SetUserPaneCreator(UserPaneCreatorFunction creator, wxUIntPtr userdata)
Definition: FileDialog.cpp:30
void CreateUserPane(wxWindow *parent)
Definition: FileDialog.cpp:36
wxUIntPtr m_userdata
Definition: FileDialog.h:41
virtual bool HasUserPaneCreator() const
Definition: FileDialog.cpp:25
UserPaneCreatorFunction m_creator
Definition: FileDialog.h:40
Dialog used to present platform specific "Save As" dialog with custom controls.
virtual int GetFilterIndex() const
virtual wxString GetPath() const
virtual void SetFilterIndex(int filterIndex)
virtual int ShowModal()
constexpr size_t npos(-1)