Add wxStandardPaths::ConfigFileConv enum for clarity and safety
Use an enum instead of type-unsafe "int" for the second parameter of the recently added wxStandardPaths::MakeConfigFileName(). This also avoids unnatural dependency of wxStandardPaths on wxCONFIG_USE_SUBDIR constant defined in a higher level wxFileConfig class. No real changes, but just make things a bit more robust and hopefully more clear.
This commit is contained in:
@@ -29,7 +29,8 @@ public:
|
|||||||
virtual wxString GetUserLocalDataDir() const wxOVERRIDE;
|
virtual wxString GetUserLocalDataDir() const wxOVERRIDE;
|
||||||
virtual wxString GetPluginsDir() const wxOVERRIDE;
|
virtual wxString GetPluginsDir() const wxOVERRIDE;
|
||||||
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
|
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
|
||||||
virtual wxString MakeConfigFileName(const wxString& basename, int style) const wxOVERRIDE;
|
virtual wxString MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv conv) const wxOVERRIDE;
|
||||||
|
|
||||||
|
|
||||||
// MSW-specific methods
|
// MSW-specific methods
|
||||||
|
@@ -32,7 +32,8 @@ public:
|
|||||||
GetLocalizedResourcesDir(const wxString& lang,
|
GetLocalizedResourcesDir(const wxString& lang,
|
||||||
ResourceCat category = ResourceCat_None) const wxOVERRIDE;
|
ResourceCat category = ResourceCat_None) const wxOVERRIDE;
|
||||||
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
|
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
|
||||||
virtual wxString MakeConfigFileName(const wxString& basename, int style) const wxOVERRIDE;
|
virtual wxString MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv conv) const wxOVERRIDE;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Ctor is protected, use wxStandardPaths::Get() instead of instantiating
|
// Ctor is protected, use wxStandardPaths::Get() instead of instantiating
|
||||||
|
@@ -67,6 +67,14 @@ public:
|
|||||||
FileLayout_XDG // Recommended: use XDG specification.
|
FileLayout_XDG // Recommended: use XDG specification.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Naming convention for the config files under Unix.
|
||||||
|
enum ConfigFileConv
|
||||||
|
{
|
||||||
|
ConfigFileConv_Dot, // Classic Unix dot-file convention.
|
||||||
|
ConfigFileConv_Ext // Use .conf extension.
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// return the global standard paths object
|
// return the global standard paths object
|
||||||
static wxStandardPaths& Get();
|
static wxStandardPaths& Get();
|
||||||
|
|
||||||
@@ -162,7 +170,9 @@ public:
|
|||||||
|
|
||||||
virtual wxString GetUserDir(Dir userDir) const;
|
virtual wxString GetUserDir(Dir userDir) const;
|
||||||
|
|
||||||
virtual wxString MakeConfigFileName(const wxString& basename, int style) const = 0;
|
virtual wxString
|
||||||
|
MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv conv = ConfigFileConv_Ext) const = 0;
|
||||||
|
|
||||||
// virtual dtor for the base class
|
// virtual dtor for the base class
|
||||||
virtual ~wxStandardPathsBase();
|
virtual ~wxStandardPathsBase();
|
||||||
|
@@ -49,7 +49,8 @@ public:
|
|||||||
#ifndef __VMS
|
#ifndef __VMS
|
||||||
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
|
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
|
||||||
#endif
|
#endif
|
||||||
virtual wxString MakeConfigFileName(const wxString& basename, int style) const wxOVERRIDE;
|
virtual wxString MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv conv) const wxOVERRIDE;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Ctor is protected, use wxStandardPaths::Get() instead of instantiating
|
// Ctor is protected, use wxStandardPaths::Get() instead of instantiating
|
||||||
|
@@ -166,6 +166,35 @@ public:
|
|||||||
FileLayout_XDG
|
FileLayout_XDG
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Possible values for MakeConfigFileName() naming convention argument.
|
||||||
|
|
||||||
|
The values in this enum are only used under Unix and only when using
|
||||||
|
the classic Unix convention for file layout, in XDG mode, XDG naming
|
||||||
|
convention is used unconditionally.
|
||||||
|
|
||||||
|
@since 3.1.1
|
||||||
|
*/
|
||||||
|
enum ConfigFileConv
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
Use the class Unix dot-file convention.
|
||||||
|
|
||||||
|
Prepend the dot to the file base name.
|
||||||
|
|
||||||
|
This value is ignored when in XDG mode, where MakeConfigFileName()
|
||||||
|
always behaves as if ConfigFileConv_Ext was specified.
|
||||||
|
*/
|
||||||
|
ConfigFileConv_Dot,
|
||||||
|
|
||||||
|
/**
|
||||||
|
Use @c .conf extension for the file names.
|
||||||
|
|
||||||
|
This convention is always used in XDG mode.
|
||||||
|
*/
|
||||||
|
ConfigFileConv_Ext
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
MSW-specific function undoing the effect of IgnoreAppSubDir() calls.
|
MSW-specific function undoing the effect of IgnoreAppSubDir() calls.
|
||||||
|
|
||||||
@@ -500,16 +529,22 @@ public:
|
|||||||
FileLayout GetFileLayout() const;
|
FileLayout GetFileLayout() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return the file name which would be used by wxFileConfig as local,
|
Return the file name which would be used by wxFileConfig if it were
|
||||||
user-specific, file if it were constructed with @a basename.
|
constructed with @a basename.
|
||||||
|
|
||||||
@a style has the same meaning as in @ref wxConfigBase::wxConfigBase "wxConfig constructor"
|
@a conv is used to construct the name of the file under Unix and only
|
||||||
and can contain any combination of styles but only wxCONFIG_USE_SUBDIR bit is
|
matters when using the class file layout, i.e. if SetFileLayout() had
|
||||||
examined by this function.
|
@e not been called with @c FileLayout_XDG argument. In this case, this
|
||||||
|
argument is used to determine whether to use an extension or a leading
|
||||||
|
dot. When following XDG specification, the function always appends the
|
||||||
|
extension, regardless of @a conv value. Finally, this argument is not
|
||||||
|
used at all under non-Unix platforms.
|
||||||
|
|
||||||
Notice that this function cannot be used if @a basename is already a full path name.
|
@since 3.1.1
|
||||||
*/
|
*/
|
||||||
virtual wxString MakeConfigFileName(const wxString& basename, int style) const;
|
virtual wxString
|
||||||
|
MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv conv = ConfigFileConv_Ext) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
@@ -266,14 +266,28 @@ wxString wxFileConfig::GetLocalDir(int style)
|
|||||||
|
|
||||||
wxFileName wxFileConfig::GetGlobalFile(const wxString& szFile)
|
wxFileName wxFileConfig::GetGlobalFile(const wxString& szFile)
|
||||||
{
|
{
|
||||||
wxFileName fn(GetGlobalDir(), wxStandardPaths::Get().MakeConfigFileName(szFile, wxCONFIG_USE_SUBDIR));
|
wxStandardPathsBase& stdp = wxStandardPaths::Get();
|
||||||
return fn;
|
|
||||||
|
return wxFileName(GetGlobalDir(), stdp.MakeConfigFileName(szFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFileName wxFileConfig::GetLocalFile(const wxString& szFile, int style)
|
wxFileName wxFileConfig::GetLocalFile(const wxString& szFile, int style)
|
||||||
{
|
{
|
||||||
wxFileName fn(GetLocalDir(style), wxStandardPaths::Get().MakeConfigFileName(szFile, style));
|
wxStandardPathsBase& stdp = wxStandardPaths::Get();
|
||||||
return fn;
|
|
||||||
|
// If the config file is located in a subdirectory, we always use an
|
||||||
|
// extension for it, but we use just the leading dot if it is located
|
||||||
|
// directly in the home directory. Note that if wxStandardPaths is
|
||||||
|
// configured to follow XDG specification, all config files go to a
|
||||||
|
// subdirectory of XDG_CONFIG_HOME anyhow, so in this case we'll still end
|
||||||
|
// up using the extension even if wxCONFIG_USE_SUBDIR is not set, but this
|
||||||
|
// is the correct and expected (if a little confusing) behaviour.
|
||||||
|
const wxStandardPaths::ConfigFileConv
|
||||||
|
conv = style & wxCONFIG_USE_SUBDIR
|
||||||
|
? wxStandardPaths::ConfigFileConv_Ext
|
||||||
|
: wxStandardPaths::ConfigFileConv_Dot;
|
||||||
|
|
||||||
|
return wxFileName(GetLocalDir(style), stdp.MakeConfigFileName(szFile, conv));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -370,7 +370,9 @@ wxString wxStandardPaths::GetPluginsDir() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString wxStandardPaths::MakeConfigFileName(const wxString& basename, int WXUNUSED(style)) const
|
wxString
|
||||||
|
wxStandardPaths::MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv WXUNUSED(conv)) const
|
||||||
{
|
{
|
||||||
wxFileName fn(wxEmptyString, basename);
|
wxFileName fn(wxEmptyString, basename);
|
||||||
fn.SetExt(wxT("ini"));
|
fn.SetExt(wxT("ini"));
|
||||||
|
@@ -130,7 +130,9 @@ wxString wxStandardPaths::GetUserDir(Dir userDir) const
|
|||||||
return GetFMDirectory(dirType, NSUserDomainMask);
|
return GetFMDirectory(dirType, NSUserDomainMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxStandardPaths::MakeConfigFileName(const wxString& basename, int WXUNUSED(style)) const
|
wxString
|
||||||
|
wxStandardPaths::MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv WXUNUSED(conv)) const
|
||||||
{
|
{
|
||||||
wxFileName fn(wxEmptyString, basename);
|
wxFileName fn(wxEmptyString, basename);
|
||||||
fn.SetName(fn.GetName() + wxT(" Preferences"));
|
fn.SetName(fn.GetName() + wxT(" Preferences"));
|
||||||
|
@@ -33,7 +33,6 @@
|
|||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
#endif //WX_PRECOMP
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
#include "wx/fileconf.h"
|
|
||||||
#include "wx/filename.h"
|
#include "wx/filename.h"
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/textfile.h"
|
#include "wx/textfile.h"
|
||||||
@@ -334,30 +333,38 @@ wxString wxStandardPaths::GetUserDir(Dir userDir) const
|
|||||||
|
|
||||||
#endif // __VMS/!__VMS
|
#endif // __VMS/!__VMS
|
||||||
|
|
||||||
wxString wxStandardPaths::MakeConfigFileName(const wxString& basename, int style) const
|
wxString
|
||||||
|
wxStandardPaths::MakeConfigFileName(const wxString& basename,
|
||||||
|
ConfigFileConv conv) const
|
||||||
{
|
{
|
||||||
wxFileName fn(wxEmptyString, basename);
|
wxFileName fn(wxEmptyString, basename);
|
||||||
|
|
||||||
|
bool addExt = false;
|
||||||
|
|
||||||
switch ( GetFileLayout() )
|
switch ( GetFileLayout() )
|
||||||
{
|
{
|
||||||
case FileLayout_Classic:
|
case FileLayout_Classic:
|
||||||
if ( !(style & wxCONFIG_USE_SUBDIR) )
|
switch ( conv )
|
||||||
{
|
{
|
||||||
// The standard convention is to not use the extensions for the
|
case ConfigFileConv_Dot:
|
||||||
// config files in the home directory and just prepend a dot to
|
fn.SetName(wxT('.') + fn.GetName());
|
||||||
// them instead.
|
break;
|
||||||
fn.SetName(wxT('.') + fn.GetName());
|
|
||||||
break;
|
case ConfigFileConv_Ext:
|
||||||
|
addExt = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
//else: fall through to add the extension
|
break;
|
||||||
wxFALLTHROUGH;
|
|
||||||
|
|
||||||
case FileLayout_XDG:
|
case FileLayout_XDG:
|
||||||
// We always use the extension for the config files when using XDG
|
// Dot files are never used in XDG mode.
|
||||||
// layout as they don't go to the home directory anyhow.
|
addExt = true;
|
||||||
fn.SetExt(wxS("conf"));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( addExt )
|
||||||
|
fn.SetExt(wxS("conf"));
|
||||||
|
|
||||||
return fn.GetFullName();
|
return fn.GetFullName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user