1 /*!********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 @file SelectFile.cpp
6
7 Paul Licameli split from FileNames.cpp
8
9 **********************************************************************/
10
11 #include "SelectFile.h"
12 #include "FileNames.h"
13 #include "widgets/FileDialog/FileDialog.h"
14 #include "widgets/AudacityMessageBox.h"
15
16 FilePath
SelectFile(FileNames::Operation op,const TranslatableString & message,const FilePath & default_path,const FilePath & default_filename,const FileExtension & default_extension,const FileTypes & fileTypes,int flags,wxWindow * parent)17 SelectFile(FileNames::Operation op,
18 const TranslatableString& message,
19 const FilePath& default_path,
20 const FilePath& default_filename,
21 const FileExtension& default_extension,
22 const FileTypes& fileTypes,
23 int flags,
24 wxWindow *parent)
25 {
26 return WithDefaultPath(op, default_path, [&](const FilePath &path) {
27 wxString filter;
28 if ( !default_extension.empty() )
29 filter = wxT("*.") + default_extension;
30 return FileSelector(
31 message.Translation(), path, default_filename, filter,
32 FormatWildcard( fileTypes ),
33 flags, parent, wxDefaultCoord, wxDefaultCoord);
34 });
35 }
36
37 #if defined(__WXMSW__)
38 static wxCharBuffer mFilename;
39
40 //
41 // On Windows, wxString::mb_str() can return a NULL pointer if the
42 // conversion to multi-byte fails. So, based on direction intent,
43 // returns a pointer to an empty string or prompts for a NEW name.
44 //
VerifyFilename(const wxString & s,bool input)45 char *VerifyFilename(const wxString &s, bool input)
46 {
47 static wxCharBuffer buf;
48 wxString name = s;
49
50 if (input) {
51 if ((char *) (const char *)name.mb_str() == NULL) {
52 name = wxEmptyString;
53 }
54 }
55 else {
56 wxFileName ff(name);
57 FileExtension ext;
58 while ((char *) (const char *)name.mb_str() == NULL) {
59 AudacityMessageBox(
60 XO(
61 "The specified filename could not be converted due to Unicode character use."));
62
63 ext = ff.GetExt();
64 name = SelectFile(FileNames::Operation::_None,
65 XO("Specify New Filename:"),
66 wxEmptyString,
67 name,
68 ext,
69 { ext.empty()
70 ? FileNames::AllFiles
71 : FileNames::FileType{ {}, { ext } }
72 },
73 wxFD_SAVE | wxRESIZE_BORDER,
74 wxGetTopLevelParent(NULL));
75 }
76 }
77
78 mFilename = name.mb_str();
79
80 return (char *) (const char *) mFilename;
81 }
82 #endif
83