1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-26 09:08:44 +02:00
audacity/src/FileNames.h
Leland Lucius cbf1bb558e AUP3: Removes OD code related to project file handling
This removes all of the OnDemand code embedded throughout
    the main codebase. Individual files related specifically
    to OD have been left in place, but removed from the build.
2020-07-01 01:14:05 -05:00

206 lines
6.7 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
FileNames.h
James Crook
**********************************************************************/
#ifndef __AUDACITY_FILE_NAMES__
#define __AUDACITY_FILE_NAMES__
#include "Audacity.h"
#include <wx/dir.h> // for wxDIR_FILES
#include <wx/string.h> // function return value
#include "audacity/Types.h"
#include "MemoryX.h"
class wxFileName;
class wxFileNameWrapper;
namespace FileNames
{
// A description of a type of file
struct FileType {
FileType() = default;
FileType( TranslatableString d, FileExtensions e, bool a = false )
: description{ std::move( d ) }
, extensions( std::move( e ) )
, appendExtensions{ a }
{}
TranslatableString description;
FileExtensions extensions;
// Whether to extend the displayed description with mention of the
// extensions:
bool appendExtensions = false;
};
// Frequently used types
extern const FileType
AllFiles // *
, AudacityProjects // *.aup
, DynamicLibraries // depends on the operating system
, TextFiles // *.txt
, XMLFiles; // *.xml, *.XML
using FileTypes = std::vector< FileType >;
// Convert fileTypes into a single string as expected by wxWidgets file
// selection dialog
wxString FormatWildcard( const FileTypes &fileTypes );
// This exists to compensate for bugs in wxCopyFile:
bool DoCopyFile(
const FilePath& file1, const FilePath& file2, bool overwrite = true);
// wxWidgets doesn't have a function to do this: make a hard file-system
// link if possible. It might not be, as when the paths are on different
// storage devices.
bool HardLinkFile( const FilePath& file1, const FilePath& file2);
wxString MkDir(const wxString &Str);
wxString TempDir();
const FilePath &DefaultTempDir();
void SetDefaultTempDir( const FilePath &tempDir );
bool IsTempDirectoryNameOK( const FilePath & Name );
bool IsMidi(const FilePath &fName);
/** \brief A list of directories that should be searched for Audacity files
* (plug-ins, help files, etc.).
*
* On Unix this will include the directory Audacity was installed into,
* plus the current user's .audacity-data/Plug-Ins directory. Additional
* directories can be specified using the AUDACITY_PATH environment
* variable. On Windows or Mac OS, this will include the directory
* which contains the Audacity program. */
const FilePaths &AudacityPathList();
void SetAudacityPathList( FilePaths list );
// originally an ExportMultipleDialog method. Append suffix if newName appears in otherNames.
void MakeNameUnique(
FilePaths &otherNames, wxFileName &newName);
wxString LowerCaseAppNameInPath( const wxString & dirIn);
/** \brief Audacity user data directory
*
* Where audacity keeps its settings and other user data squirreled away,
* by default ~/.audacity-data/ on Unix, Application Data/Audacity on
* windows system */
FilePath DataDir();
FilePath ResourcesDir();
FilePath AutoSaveDir();
FilePath HtmlHelpDir();
FilePath HtmlHelpIndexFile(bool quick);
FilePath LegacyChainDir();
FilePath MacroDir();
FilePath NRPDir();
FilePath NRPFile();
FilePath PluginRegistry();
FilePath PluginSettings();
FilePath BaseDir();
FilePath ModulesDir();
/** \brief The user plug-in directory (not a system one)
*
* This returns the string path to where the user may have put plug-ins
* if they don't have system admin rights. Under default settings, it's
* <DataDir>/Plug-Ins/ */
FilePath PlugInDir();
FilePath ThemeDir();
FilePath ThemeComponentsDir();
FilePath ThemeCachePng();
FilePath ThemeCacheAsCee();
FilePath ThemeComponent(const wxString &Str);
FilePath ThemeCacheHtm();
FilePath ThemeImageDefsAsCee();
// Obtain name of loaded module that contains address
FilePath PathFromAddr(void *addr);
bool IsPathAvailable( const FilePath & Path);
wxFileNameWrapper DefaultToDocumentsFolder
(const wxString &preference);
// If not None, determines a preference key (for the default path string) to
// be read and updated
enum class Operation {
// _ on None to defeat some macro that is expanding this.
_None,
Open,
Export
};
wxString FindDefaultPath(Operation op);
void UpdateDefaultPath(Operation op, const FilePath &path);
// F is a function taking a wxString, returning wxString
template<typename F>
wxString WithDefaultPath
(Operation op, const FilePath &defaultPath, F function)
{
auto path = defaultPath;
if (path.empty())
path = FileNames::FindDefaultPath(op);
auto result = function(path);
FileNames::UpdateDefaultPath(op, result);
return result;
}
wxString
SelectFile(Operation op, // op matters only when default_path is empty
const TranslatableString& message,
const FilePath& default_path,
const FilePath& default_filename,
const FileExtension& default_extension,
const FileTypes& fileTypes,
int flags,
wxWindow *parent);
// Useful functions for working with search paths
void AddUniquePathToPathList(const FilePath &path,
FilePaths &pathList);
void AddMultiPathsToPathList(const wxString &multiPathString,
FilePaths &pathList);
void FindFilesInPathList(const wxString & pattern,
const FilePaths & pathList,
FilePaths &results,
int flags = wxDIR_FILES);
/** \brief Protect against Unicode to multi-byte conversion failures
* on Windows */
#if defined(__WXMSW__)
char *VerifyFilename(const wxString &s, bool input = true);
#endif
// wxString compare function for sorting case, which is needed to load correctly.
int CompareNoCase(const wxString& first, const wxString& second);
};
// Use this macro to wrap all filenames and pathnames that get
// passed directly to a system call, like opening a file, creating
// a directory, checking to see that a file exists, etc...
#if defined(__WXMSW__)
// Note, on Windows we don't define an OSFILENAME() to prevent accidental use.
// See VerifyFilename() for an explanation.
#define OSINPUT(X) FileNames::VerifyFilename(X, true)
#define OSOUTPUT(X) FileNames::VerifyFilename(X, false)
#elif defined(__WXMAC__)
#define OSFILENAME(X) ((char *) (const char *)(X).fn_str())
#define OSINPUT(X) OSFILENAME(X)
#define OSOUTPUT(X) OSFILENAME(X)
#else
#define OSFILENAME(X) ((char *) (const char *)(X).mb_str())
#define OSINPUT(X) OSFILENAME(X)
#define OSOUTPUT(X) OSFILENAME(X)
#endif
#endif