mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 06:05:49 -06:00
951 lines
24 KiB
C++
951 lines
24 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// pgAdmin III - PostgreSQL Tools
|
|
//
|
|
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
|
|
// This software is released under the PostgreSQL Licence
|
|
//
|
|
// sysSettings.cpp - Settings handling class
|
|
//
|
|
// Note: This class stores and manages all the applications settings.
|
|
// Settings are all read in the ctor, but may be written either in
|
|
// the relevant SetXXX() member function for rarely written settings
|
|
// or in the dtor for regularly changed settings such as form sizes.
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "pgAdmin3.h"
|
|
|
|
|
|
// wxWindows headers
|
|
#include <wx/wx.h>
|
|
#include <wx/config.h>
|
|
#include <wx/fileconf.h>
|
|
#include <wx/url.h>
|
|
#include <wx/stdpaths.h>
|
|
#include <wx/wfstream.h>
|
|
#include <wx/filename.h>
|
|
#include <wx/dir.h>
|
|
// App headers
|
|
#include "utils/sysSettings.h"
|
|
#include "utils/sysLogger.h"
|
|
#include "utils/misc.h"
|
|
sysSettings::sysSettings(const wxString &name) : wxConfig(name)
|
|
{
|
|
appName = name;
|
|
// Open the default settings file
|
|
defaultSettings = NULL;
|
|
if (!settingsIni.IsEmpty())
|
|
{
|
|
wxFileInputStream fst(settingsIni);
|
|
defaultSettings = new wxFileConfig(fst);
|
|
}
|
|
|
|
// Convert settings from pre-1.5
|
|
long i, serverCount;
|
|
Read(wxT("Servers/Count"), &serverCount, 0L);
|
|
for (i = 1 ; i <= serverCount ; i++)
|
|
{
|
|
if (moveStringValue(wxT("Servers/Database%d"), wxT("Servers/%d/Database"), i))
|
|
{
|
|
moveStringValue(wxT("Servers/Description%d"), wxT("Servers/%d/Description"), i);
|
|
moveStringValue(wxT("Servers/LastDatabase%d"), wxT("Servers/%d/LastDatabase"), i);
|
|
moveStringValue(wxT("Servers/LastSchema%d"), wxT("Servers/%d/LastSchema"), i);
|
|
moveStringValue(wxT("Servers/Server%d"), wxT("Servers/%d/Server"), i);
|
|
moveStringValue(wxT("Servers/ServiceId%d"), wxT("Servers/%d/ServiceId"), i);
|
|
moveStringValue(wxT("Servers/StorePWD%d"), wxT("Servers/%d/StorePWD"), i);
|
|
moveStringValue(wxT("Servers/Rolename%d"), wxT("Servers/%d/Rolename"), i);
|
|
moveStringValue(wxT("Servers/Username%d"), wxT("Servers/%d/Username"), i);
|
|
moveLongValue(wxT("Servers/Port%d"), wxT("Servers/%d/Port"), i);
|
|
moveLongValue(wxT("Servers/SSL%d"), wxT("Servers/%d/SSL"), i);
|
|
}
|
|
}
|
|
}
|
|
|
|
sysSettings::~sysSettings()
|
|
{
|
|
#ifdef WIN32
|
|
wxRegKey key(wxRegKey::HKCU, "Software\\"+appName);
|
|
|
|
wxString fn= wxStandardPaths::Get().GetUserConfigDir() + wxT("\\postgresql\\autoSaveConfig.reg");
|
|
if (wxFileName::FileExists(fn)) wxRemoveFile(fn);
|
|
key.Export(fn);
|
|
#endif
|
|
if(defaultSettings)
|
|
{
|
|
delete defaultSettings;
|
|
defaultSettings = NULL;
|
|
}
|
|
}
|
|
|
|
bool sysSettings::GetDisplayOption(const wxString &objtype, bool GetDefault)
|
|
{
|
|
bool retval, def = true;
|
|
wxString engtype;
|
|
|
|
if (objtype == _("Databases"))
|
|
engtype = wxT("Databases");
|
|
else if (objtype == _("Tablespaces"))
|
|
engtype = wxT("Tablespaces");
|
|
else if (objtype == _("pgAgent Jobs"))
|
|
engtype = wxT("pgAgent Jobs");
|
|
else if (objtype == _("pgpro_scheduler"))
|
|
engtype = wxT("pgpro_scheduler");
|
|
else if (objtype == _("Groups/group Roles"))
|
|
engtype = wxT("Groups-login Roles");
|
|
else if (objtype == _("Users/login Roles"))
|
|
engtype = wxT("Users-login Roles");
|
|
else if (objtype == _("Resource Queues"))
|
|
engtype = wxT("Resource Queues");
|
|
else if (objtype == _("Resource Groups"))
|
|
engtype = wxT("Resource Groups");
|
|
else if (objtype == _("Catalogs"))
|
|
engtype = wxT("Catalogs");
|
|
else if (objtype == _("Casts"))
|
|
{
|
|
engtype = wxT("Casts");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Foreign Data Wrappers"))
|
|
{
|
|
engtype = wxT("Foreign Data Wrappers");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Foreign Servers"))
|
|
{
|
|
engtype = wxT("Foreign Servers");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("User Mappings"))
|
|
{
|
|
engtype = wxT("User Mappings");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Foreign Tables"))
|
|
{
|
|
engtype = wxT("Foreign Tables");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Languages"))
|
|
{
|
|
engtype = wxT("Languages");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Extensions"))
|
|
engtype = wxT("Extensions");
|
|
else if (objtype == _("Publications"))
|
|
engtype = wxT("Publications");
|
|
else if (objtype == _("Subscriptions"))
|
|
engtype = wxT("Subscriptions");
|
|
else if (objtype == _("Synonyms"))
|
|
engtype = wxT("Synonyms");
|
|
else if (objtype == _("Schemas"))
|
|
engtype = wxT("Schemas");
|
|
else if (objtype == _("Slony-I Clusters"))
|
|
engtype = wxT("Slony-I Clusters");
|
|
else if (objtype == _("Aggregates"))
|
|
{
|
|
engtype = wxT("Aggregates");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Conversions"))
|
|
{
|
|
engtype = wxT("Conversions");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Domains"))
|
|
engtype = wxT("Domains");
|
|
else if (objtype == _("Functions"))
|
|
engtype = wxT("Functions");
|
|
else if (objtype == _("Trigger Functions"))
|
|
engtype = wxT("Trigger Functions");
|
|
else if (objtype == _("Packages"))
|
|
engtype = wxT("Packages");
|
|
else if (objtype == _("Procedures"))
|
|
engtype = wxT("Procedures");
|
|
else if (objtype == _("Operators"))
|
|
{
|
|
engtype = wxT("Operators");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Operator Classes"))
|
|
{
|
|
engtype = wxT("Operator Classes");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Operator Families"))
|
|
{
|
|
engtype = wxT("Operator Families");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Sequences"))
|
|
engtype = wxT("Sequences");
|
|
else if (objtype == _("Tables"))
|
|
engtype = wxT("Tables");
|
|
else if (objtype == _("FTS Configurations"))
|
|
engtype = wxT("FTS Configurations");
|
|
else if (objtype == _("FTS Dictionaries"))
|
|
engtype = wxT("FTS Dictionaries");
|
|
else if (objtype == _("FTS Parsers"))
|
|
engtype = wxT("FTS Parsers");
|
|
else if (objtype == _("FTS Templates"))
|
|
engtype = wxT("FTS Templates");
|
|
else if (objtype == _("Types"))
|
|
{
|
|
engtype = wxT("Types");
|
|
def = false;
|
|
}
|
|
else if (objtype == _("Views"))
|
|
engtype = wxT("Views");
|
|
else if (objtype == _("External Tables"))
|
|
engtype = wxT("External Tables");
|
|
else if (objtype == _("Event Triggers"))
|
|
engtype = wxT("Event Triggers");
|
|
|
|
// If we just want the default, return it.
|
|
if (GetDefault)
|
|
return def;
|
|
|
|
// Otherwise get the reg value.
|
|
Read(wxT("Display/") + engtype, &retval, def);
|
|
return retval;
|
|
}
|
|
|
|
void sysSettings::SetDisplayOption(const wxString &objtype, bool display)
|
|
{
|
|
wxString engtype;
|
|
|
|
if (objtype == _("Databases")) engtype = wxT("Databases");
|
|
else if (objtype == _("Tablespaces")) engtype = wxT("Tablespaces");
|
|
else if (objtype == _("pgAgent Jobs")) engtype = wxT("pgAgent Jobs");
|
|
else if (objtype == _("pgpro_scheduler")) engtype = wxT("pgpro_scheduler");
|
|
else if (objtype == _("Groups/group Roles")) engtype = wxT("Groups-login Roles");
|
|
else if (objtype == _("Users/login Roles")) engtype = wxT("Users-login Roles");
|
|
else if (objtype == _("Resource Queues")) engtype = wxT("Resource Queues");
|
|
else if (objtype == _("Resource Groups")) engtype = wxT("Resource Groups");
|
|
else if (objtype == _("Catalogs")) engtype = wxT("Catalogs");
|
|
else if (objtype == _("Casts")) engtype = wxT("Casts");
|
|
else if (objtype == _("Foreign Data Wrappers")) engtype = wxT("Foreign Data Wrappers");
|
|
else if (objtype == _("Foreign Servers")) engtype = wxT("Foreign Servers");
|
|
else if (objtype == _("User Mappings")) engtype = wxT("User mappings");
|
|
else if (objtype == _("Foreign Tables")) engtype = wxT("Foreign Tables");
|
|
else if (objtype == _("Languages")) engtype = wxT("Languages");
|
|
else if (objtype == _("Event Triggers")) engtype = wxT("Event Triggers");
|
|
else if (objtype == _("Extensions")) engtype = wxT("Extensions");
|
|
else if (objtype == _("Publications")) engtype = wxT("Publications");
|
|
else if (objtype == _("Subscriptions")) engtype = wxT("Subscriptions");
|
|
else if (objtype == _("Synonyms")) engtype = wxT("Synonyms");
|
|
else if (objtype == _("Schemas")) engtype = wxT("Schemas");
|
|
else if (objtype == _("Slony-I Clusters")) engtype = wxT("Slony-I Clusters");
|
|
else if (objtype == _("Aggregates")) engtype = wxT("Aggregates");
|
|
else if (objtype == _("Conversions")) engtype = wxT("Conversions");
|
|
else if (objtype == _("Domains")) engtype = wxT("Domains");
|
|
else if (objtype == _("Functions")) engtype = wxT("Functions");
|
|
else if (objtype == _("Trigger Functions")) engtype = wxT("Trigger Functions");
|
|
else if (objtype == _("Packages")) engtype = wxT("Packages");
|
|
else if (objtype == _("Procedures")) engtype = wxT("Procedures");
|
|
else if (objtype == _("Operators")) engtype = wxT("Operators");
|
|
else if (objtype == _("Operator Classes")) engtype = wxT("Operator Classes");
|
|
else if (objtype == _("Operator Families")) engtype = wxT("Operator Families");
|
|
else if (objtype == _("Sequences")) engtype = wxT("Sequences");
|
|
else if (objtype == _("Tables")) engtype = wxT("Tables");
|
|
else if (objtype == _("FTS Configurations")) engtype = wxT("FTS Configurations");
|
|
else if (objtype == _("FTS Dictionaries")) engtype = wxT("FTS Dictionaries");
|
|
else if (objtype == _("FTS Parsers")) engtype = wxT("FTS Parsers");
|
|
else if (objtype == _("FTS Templates")) engtype = wxT("FTS Templates");
|
|
else if (objtype == _("Types")) engtype = wxT("Types");
|
|
else if (objtype == _("Views")) engtype = wxT("Views");
|
|
else if (objtype == _("External Tables")) engtype = wxT("External Tables");
|
|
|
|
WriteBool(wxT("Display/") + engtype, display);
|
|
}
|
|
|
|
bool sysSettings::moveStringValue(const wxChar *oldKey, const wxChar *newKey, int index)
|
|
{
|
|
wxString k1, k2;
|
|
if (index >= 0)
|
|
{
|
|
k1.Printf(oldKey, index);
|
|
k2.Printf(newKey, index);
|
|
}
|
|
else
|
|
{
|
|
k1 = oldKey;
|
|
k2 = newKey;
|
|
}
|
|
|
|
if (!Exists(k2) && Exists(k1))
|
|
{
|
|
wxString value;
|
|
Read(k1, &value, wxEmptyString);
|
|
Write(k2, value);
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
bool sysSettings::moveLongValue(const wxChar *oldKey, const wxChar *newKey, int index)
|
|
{
|
|
wxString k1, k2;
|
|
if (index >= 0)
|
|
{
|
|
k1.Printf(oldKey, index);
|
|
k2.Printf(newKey, index);
|
|
}
|
|
else
|
|
{
|
|
k1 = oldKey;
|
|
k2 = newKey;
|
|
}
|
|
|
|
if (!Exists(k2) && Exists(k1))
|
|
{
|
|
long value;
|
|
Read(k1, &value, 0L);
|
|
WriteLong(k2, value);
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Read a string value
|
|
bool sysSettings::Read(const wxString &key, wxString *str, const wxString &defaultVal) const
|
|
{
|
|
wxString actualDefault = defaultVal;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
defaultSettings->Read(key, &actualDefault, defaultVal);
|
|
|
|
return wxConfig::Read(key, str, actualDefault);
|
|
}
|
|
|
|
// Return a string value
|
|
wxString sysSettings::Read(const wxString &key, const wxString &defaultVal) const
|
|
{
|
|
wxString actualDefault = defaultVal;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
defaultSettings->Read(key, &actualDefault, defaultVal);
|
|
|
|
return wxConfig::Read(key, actualDefault);
|
|
}
|
|
|
|
// Read an int value
|
|
bool sysSettings::Read(const wxString &key, int *i, int defaultVal) const
|
|
{
|
|
int actualDefault = defaultVal;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
defaultSettings->Read(key, &actualDefault, defaultVal);
|
|
|
|
return wxConfig::Read(key, i, actualDefault);
|
|
}
|
|
|
|
// Read a long value
|
|
bool sysSettings::Read(const wxString &key, long *l, long defaultVal) const
|
|
{
|
|
long actualDefault = defaultVal;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
defaultSettings->Read(key, &actualDefault, defaultVal);
|
|
|
|
return wxConfig::Read(key, l, actualDefault);
|
|
}
|
|
|
|
|
|
// Return a long value
|
|
long sysSettings::Read(const wxString &key, long defaultVal) const
|
|
{
|
|
long actualDefault = defaultVal;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
defaultSettings->Read(key, &actualDefault, defaultVal);
|
|
|
|
return wxConfig::Read(key, actualDefault);
|
|
}
|
|
|
|
// Read a boolean value
|
|
bool sysSettings::Read(const wxString &key, bool *val, bool defaultVal) const
|
|
{
|
|
wxString actualDefault = BoolToStr(defaultVal);
|
|
wxString str;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
defaultSettings->Read(key, &actualDefault, BoolToStr(defaultVal));
|
|
|
|
Read(key, &str, actualDefault);
|
|
*val = StrToBool(str);
|
|
return true;
|
|
}
|
|
|
|
// Read a point value
|
|
wxPoint sysSettings::Read(const wxString &key, const wxPoint &defaultVal) const
|
|
{
|
|
wxPoint actualDefault = defaultVal;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
{
|
|
actualDefault.x = defaultSettings->Read(key + wxT("/Left"), defaultVal.x);
|
|
actualDefault.y = defaultSettings->Read(key + wxT("/Top"), defaultVal.y);
|
|
}
|
|
|
|
return wxPoint(wxConfig::Read(key + wxT("/Left"), actualDefault.x),
|
|
wxConfig::Read(key + wxT("/Top"), actualDefault.y));
|
|
}
|
|
|
|
// Read a size value
|
|
wxSize sysSettings::Read(const wxString &key, const wxSize &defaultVal) const
|
|
{
|
|
wxSize actualDefault = defaultVal;
|
|
|
|
// Get the default from the defaults file, in preference
|
|
// to the hardcoded value
|
|
if (defaultSettings)
|
|
{
|
|
actualDefault.x = defaultSettings->Read(key + wxT("/Width"), defaultVal.x);
|
|
actualDefault.y = defaultSettings->Read(key + wxT("/Height"), defaultVal.y);
|
|
}
|
|
|
|
return wxSize(wxConfig::Read(key + wxT("/Width"), actualDefault.x),
|
|
wxConfig::Read(key + wxT("/Height"), actualDefault.y));
|
|
}
|
|
|
|
// Write a boolean value
|
|
bool sysSettings::WriteBool(const wxString &key, bool value)
|
|
{
|
|
return Write(key, BoolToStr(value));
|
|
}
|
|
|
|
// Write a point value
|
|
bool sysSettings::WritePoint(const wxString &key, const wxPoint &value)
|
|
{
|
|
bool rc = wxConfig::Write(key + wxT("/Left"), value.x);
|
|
if (rc)
|
|
rc = wxConfig::Write(key + wxT("/Top"), value.y);
|
|
return rc;
|
|
}
|
|
|
|
// Write a size value
|
|
bool sysSettings::WriteSize(const wxString &key, const wxSize &value)
|
|
{
|
|
bool rc = wxConfig::Write(key + wxT("/Width"), value.x);
|
|
if (rc)
|
|
rc = wxConfig::Write(key + wxT("/Height"), value.y);
|
|
return rc;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Log
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
wxString sysSettings::GetLogFile()
|
|
{
|
|
wxString logFile;
|
|
|
|
// Try to get a vaguely usable default path.
|
|
char *homedir;
|
|
#ifdef __WXMSW__
|
|
char *homedrive;
|
|
#endif
|
|
|
|
wxString deflog;
|
|
|
|
#ifdef __WXMSW__
|
|
homedrive = getenv("HOMEDRIVE");
|
|
homedir = getenv("HOMEPATH");
|
|
#else
|
|
homedir = getenv("HOME");
|
|
#endif
|
|
|
|
if (!homedir)
|
|
deflog = wxT("pgadmin.log");
|
|
else
|
|
{
|
|
|
|
#ifdef __WXMSW__
|
|
#if wxCHECK_VERSION(2, 9, 5)
|
|
wxStandardPaths &paths = wxStandardPaths::Get();
|
|
#else
|
|
wxStandardPaths paths;
|
|
#endif
|
|
deflog = paths.GetDocumentsDir();
|
|
deflog += wxT("\\pgadmin.log");
|
|
#else
|
|
deflog = wxString::FromAscii(homedir);
|
|
deflog += wxT("/pgadmin.log");
|
|
#endif
|
|
}
|
|
|
|
Read(wxT("LogFile"), &logFile, deflog);
|
|
|
|
return logFile;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Help files
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
wxString sysSettings::GetSlonyHelpPath()
|
|
{
|
|
wxString path;
|
|
|
|
Read(wxT("SlonyHelpPath"), &path, wxT(""));
|
|
path = CleanHelpPath(path);
|
|
|
|
if (!HelpPathValid(path))
|
|
path = wxEmptyString;
|
|
|
|
return path;
|
|
}
|
|
|
|
wxString sysSettings::GetPgHelpPath()
|
|
{
|
|
wxString path;
|
|
|
|
Read(wxT("PostgreSQLHelpPath"), &path, wxT(""));
|
|
path = CleanHelpPath(path);
|
|
|
|
if (!HelpPathValid(path))
|
|
path = wxEmptyString;
|
|
|
|
return path;
|
|
}
|
|
|
|
wxString sysSettings::GetEdbHelpPath()
|
|
{
|
|
wxString path;
|
|
|
|
Read(wxT("EnterpriseDBHelpPath"), &path, wxT(""));
|
|
path = CleanHelpPath(path);
|
|
|
|
if (!HelpPathValid(path))
|
|
path = wxEmptyString;
|
|
|
|
return path;
|
|
}
|
|
|
|
wxString sysSettings::GetGpHelpPath()
|
|
{
|
|
wxString path;
|
|
|
|
Read(wxT("GreenplumDBHelpPath"), &path, wxT(""));
|
|
path = CleanHelpPath(path);
|
|
|
|
if (!HelpPathValid(path))
|
|
path = wxEmptyString;
|
|
|
|
return path;
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Copy quoting
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
int sysSettings::GetCopyQuoting()
|
|
{
|
|
wxString val;
|
|
|
|
Read(wxT("Copy/Quote"), &val, wxT("Strings"));
|
|
if (val == wxT("All"))
|
|
return 2;
|
|
else if (val == wxT("Strings"))
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
void sysSettings::SetCopyQuoting(const int i)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 2:
|
|
Write(wxT("Copy/Quote"), wxT("All"));
|
|
break;
|
|
case 1:
|
|
Write(wxT("Copy/Quote"), wxT("Strings"));
|
|
break;
|
|
case 0:
|
|
Write(wxT("Copy/Quote"), wxT("None"));
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Export quoting
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
int sysSettings::GetExportQuoting()
|
|
{
|
|
wxString val;
|
|
|
|
Read(wxT("Export/Quote"), &val, wxT("Strings"));
|
|
if (val == wxT("All"))
|
|
return 2;
|
|
else if (val == wxT("Strings"))
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
void sysSettings::SetExportQuoting(const int i)
|
|
{
|
|
switch (i)
|
|
{
|
|
case 2:
|
|
Write(wxT("Export/Quote"), wxT("All"));
|
|
break;
|
|
case 1:
|
|
Write(wxT("Export/Quote"), wxT("Strings"));
|
|
break;
|
|
case 0:
|
|
Write(wxT("Export/Quote"), wxT("None"));
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Export quoting
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
wxString sysSettings::GetExportRowSeparator()
|
|
{
|
|
wxString val;
|
|
#ifdef __WXMSW__
|
|
Read(wxT("Export/RowSeparator"), &val, wxT("CR/LF"));
|
|
#else
|
|
Read(wxT("Export/RowSeparator"), &val, wxT("LF"));
|
|
#endif
|
|
if (val == wxT("CR/LF"))
|
|
return wxT("\r\n");
|
|
else
|
|
return wxT("\n");
|
|
}
|
|
|
|
void sysSettings::SetExportRowSeparator(const wxString &s)
|
|
{
|
|
if (s == wxT("\r\n"))
|
|
Write(wxT("Export/RowSeparator"), wxT("CR/LF"));
|
|
else
|
|
Write(wxT("Export/RowSeparator"), wxT("LF"));
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// System Font
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
wxFont sysSettings::GetSystemFont()
|
|
{
|
|
wxString fontName;
|
|
|
|
Read(wxT("Font"), &fontName, wxEmptyString);
|
|
|
|
if (fontName.IsEmpty())
|
|
return wxSystemSettings::GetFont(wxSYS_ICONTITLE_FONT);
|
|
else
|
|
return wxFont(fontName);
|
|
}
|
|
|
|
void sysSettings::SetSystemFont(const wxFont &font)
|
|
{
|
|
wxString fontName = font.GetNativeFontInfoDesc();
|
|
|
|
if (fontName == wxSystemSettings::GetFont(wxSYS_ICONTITLE_FONT).GetNativeFontInfoDesc())
|
|
Write(wxT("Font"), wxString(wxEmptyString));
|
|
else
|
|
Write(wxT("Font"), fontName);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// SQL Font
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
wxFont sysSettings::GetSQLFont()
|
|
{
|
|
wxString fontName;
|
|
|
|
Read(wxT("frmQuery/Font"), &fontName, wxEmptyString);
|
|
|
|
if (fontName.IsEmpty())
|
|
{
|
|
#ifdef __WXMSW__
|
|
return wxFont(9, wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
|
|
#else
|
|
#ifdef __WXGTK__
|
|
return wxFont(10, wxTELETYPE, wxNORMAL, wxNORMAL);
|
|
#else
|
|
return wxFont(12, wxTELETYPE, wxNORMAL, wxNORMAL);
|
|
#endif
|
|
#endif
|
|
}
|
|
else
|
|
return wxFont(fontName);
|
|
}
|
|
|
|
void sysSettings::SetSQLFont(const wxFont &font)
|
|
{
|
|
wxString fontName = font.GetNativeFontInfoDesc();
|
|
|
|
Write(wxT("frmQuery/Font"), fontName);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Database Designer Font
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
wxFont sysSettings::GetDDFont()
|
|
{
|
|
wxString fontName;
|
|
|
|
Read(wxT("DDFont"), &fontName, wxEmptyString);
|
|
|
|
if (fontName.IsEmpty())
|
|
return wxSystemSettings::GetFont(wxSYS_ICONTITLE_FONT);
|
|
else
|
|
return wxFont(fontName);
|
|
}
|
|
|
|
void sysSettings::SetDDFont(const wxFont &font)
|
|
{
|
|
wxString fontName = font.GetNativeFontInfoDesc();
|
|
|
|
if (fontName == wxSystemSettings::GetFont(wxSYS_ICONTITLE_FONT).GetNativeFontInfoDesc())
|
|
Write(wxT("DDFont"), wxString(wxEmptyString));
|
|
else
|
|
Write(wxT("DDFont"), fontName);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Language
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
wxString sysSettings::GetCanonicalLanguageName()
|
|
{
|
|
const wxLanguageInfo *langInfo;
|
|
|
|
langInfo = wxLocale::GetLanguageInfo(Read(wxT("LanguageId"), wxLANGUAGE_DEFAULT));
|
|
|
|
if (langInfo)
|
|
return langInfo->CanonicalName;
|
|
|
|
return wxEmptyString;
|
|
}
|
|
|
|
void sysSettings::SetCanonicalLanguage(const wxLanguage &lang)
|
|
{
|
|
if (wxLocale::GetLanguageName(lang) != GetCanonicalLanguageName())
|
|
{
|
|
delete locale;
|
|
locale = new wxLocale();
|
|
if (locale->Init(lang))
|
|
{
|
|
#ifdef __LINUX__
|
|
{
|
|
wxLogNull noLog;
|
|
locale->AddCatalog(wxT("fileutils"));
|
|
}
|
|
#endif
|
|
locale->AddCatalog(wxT("pgadmin3"));
|
|
settings->WriteLong(wxT("LanguageId"), (long)lang);
|
|
}
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Get system wide configuration file names
|
|
//////////////////////////////////////////////////////////////////////////
|
|
wxString sysSettings::GetConfigFile(configFileName cfgname)
|
|
{
|
|
wxASSERT_MSG(cfgname == sysSettings::PGPASS,
|
|
wxT("Handles only pgpass configuration"));
|
|
if (cfgname == PGPASS)
|
|
{
|
|
#if wxCHECK_VERSION(2, 9, 5)
|
|
wxStandardPaths &stdp = wxStandardPaths::Get();
|
|
#else
|
|
wxStandardPaths stdp;
|
|
#endif
|
|
wxString fname;
|
|
bool bpsfile = wxGetEnv(wxT("PGPASSFILE"), &fname);
|
|
if (!bpsfile)
|
|
{
|
|
fname = stdp.GetUserConfigDir();
|
|
#ifdef WIN32
|
|
fname += wxT("\\postgresql");
|
|
if (!wxDirExists(fname))
|
|
wxMkdir(fname);
|
|
fname += wxT("\\pgpass.conf");
|
|
}
|
|
#else
|
|
fname += wxT("/.pgpass");
|
|
}
|
|
#endif
|
|
else
|
|
{
|
|
if(!wxFileName::FileExists(fname))
|
|
{
|
|
wxFileName dirTemp = wxFileName::DirName(fname);
|
|
/*
|
|
* wxFileName::DirName() does not return the directory path of
|
|
* the file. It assumes that the given path is of a directory,
|
|
* when the specified file/directory does not exist.
|
|
*
|
|
* Hence - removeing it to get the actual parent directory.
|
|
*/
|
|
dirTemp.RemoveLastDir();
|
|
|
|
if (!dirTemp.DirExists())
|
|
{
|
|
wxFileName dir = dirTemp;
|
|
|
|
// Decide which are folders we need to create
|
|
wxString sRemoveOnError = dirTemp.GetPath();
|
|
|
|
while(!dirTemp.DirExists())
|
|
{
|
|
sRemoveOnError = dirTemp.GetPath();
|
|
dirTemp.RemoveLastDir();
|
|
}
|
|
|
|
if (!dir.Mkdir(0755, wxPATH_MKDIR_FULL))
|
|
{
|
|
// In case of failure decide - we may need to delete
|
|
// the created directory structure from exists parent
|
|
// directory.
|
|
if (wxDir::Exists(sRemoveOnError))
|
|
wxFileName::Rmdir(sRemoveOnError);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
wxFile f;
|
|
if (!f.Exists(fname))
|
|
f.Create(fname, false, wxS_IRUSR | wxS_IWUSR);
|
|
|
|
return fname;
|
|
}
|
|
|
|
return wxT("");
|
|
}
|
|
|
|
|
|
wxString sysSettings::GetFavouritesFile()
|
|
{
|
|
wxString s, tmp;
|
|
|
|
#if wxCHECK_VERSION(2, 9, 5)
|
|
wxStandardPaths &stdp = wxStandardPaths::Get();
|
|
#else
|
|
wxStandardPaths stdp;
|
|
#endif
|
|
tmp = stdp.GetUserConfigDir();
|
|
#ifdef WIN32
|
|
tmp += wxT("\\postgresql");
|
|
if (!wxDirExists(tmp))
|
|
wxMkdir(tmp);
|
|
tmp += wxT("\\pgadmin_favourites.xml");
|
|
#else
|
|
tmp += wxT("/.pgadminfavourites");
|
|
#endif
|
|
|
|
Read(wxT("FavouritesFile"), &s, tmp);
|
|
|
|
return s;
|
|
}
|
|
|
|
|
|
wxString sysSettings::GetMacrosFile()
|
|
{
|
|
wxString s, tmp;
|
|
|
|
#if wxCHECK_VERSION(2, 9, 5)
|
|
wxStandardPaths &stdp = wxStandardPaths::Get();
|
|
#else
|
|
wxStandardPaths stdp;
|
|
#endif
|
|
tmp = stdp.GetUserConfigDir();
|
|
#ifdef WIN32
|
|
tmp += wxT("\\postgresql");
|
|
if (!wxDirExists(tmp))
|
|
wxMkdir(tmp);
|
|
tmp += wxT("\\pgadmin_macros.xml");
|
|
#else
|
|
tmp += wxT("/.pgadminmacros");
|
|
#endif
|
|
|
|
Read(wxT("MacrosFile"), &s, tmp);
|
|
|
|
return s;
|
|
}
|
|
wxString sysSettings::GetAutoReplaceFile()
|
|
{
|
|
wxString s, tmp;
|
|
|
|
#if wxCHECK_VERSION(2, 9, 5)
|
|
wxStandardPaths &stdp = wxStandardPaths::Get();
|
|
#else
|
|
wxStandardPaths stdp;
|
|
#endif
|
|
tmp = stdp.GetUserConfigDir();
|
|
#ifdef WIN32
|
|
tmp += wxT("\\postgresql");
|
|
if (!wxDirExists(tmp))
|
|
wxMkdir(tmp);
|
|
tmp += wxT("\\pgadmin_autoreplace.xml");
|
|
#else
|
|
tmp += wxT("/.pgadminautoreplace");
|
|
#endif
|
|
|
|
Read(wxT("AutoReplaceFile"), &s, tmp);
|
|
|
|
return s;
|
|
}
|
|
|
|
|
|
wxString sysSettings::GetHistoryFile()
|
|
{
|
|
wxString s, tmp;
|
|
|
|
#if wxCHECK_VERSION(2, 9, 5)
|
|
wxStandardPaths &stdp = wxStandardPaths::Get();
|
|
#else
|
|
wxStandardPaths stdp;
|
|
#endif
|
|
tmp = stdp.GetUserConfigDir();
|
|
#ifdef WIN32
|
|
tmp += wxT("\\postgresql");
|
|
if (!wxDirExists(tmp))
|
|
wxMkdir(tmp);
|
|
tmp += wxT("\\pgadmin_histoqueries.xml");
|
|
#else
|
|
tmp += wxT("/.pgadmin_histoqueries");
|
|
#endif
|
|
|
|
Read(wxT("History/File"), &s, tmp);
|
|
|
|
return s;
|
|
}
|
|
|