mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-20 02:50:46 -06:00
383 lines
12 KiB
C++
383 lines
12 KiB
C++
#include "Settings.h"
|
|
|
|
#include <QApplication>
|
|
#include <QDir>
|
|
#include <QSettings>
|
|
#include <QColor>
|
|
#include <QFontInfo>
|
|
#include <QLocale>
|
|
#include <QStandardPaths>
|
|
#include <QPalette>
|
|
|
|
QHash<QString, QVariant> Settings::m_hCache;
|
|
|
|
QVariant Settings::getValue(const QString& group, const QString& name)
|
|
{
|
|
// Have a look in the cache first
|
|
auto cacheIndex = m_hCache.find(group + name);
|
|
if(cacheIndex != m_hCache.end())
|
|
{
|
|
return cacheIndex.value();
|
|
} else {
|
|
// Nothing found in the cache, so get the value from the settings file or get the default value if there is no value set yet
|
|
QSettings settings(QApplication::organizationName(), QApplication::organizationName());
|
|
QVariant value = settings.value(group + "/" + name, getDefaultValue(group, name));
|
|
|
|
// Store this value in the cache for further usage and return it afterwards
|
|
m_hCache.insert(group + name, value);
|
|
return value;
|
|
}
|
|
}
|
|
|
|
void Settings::setValue(const QString& group, const QString& name, const QVariant& value, bool dont_save_to_disk)
|
|
{
|
|
// Sometime the value has to be saved for the current session only but get discarded when the application exits.
|
|
// In order to achieve this this flag can be set which disables the save to disk mechanism and only leaves the save to cache part active.
|
|
if(dont_save_to_disk == false)
|
|
{
|
|
// Set the group and save the given value
|
|
QSettings settings(QApplication::organizationName(), QApplication::organizationName());
|
|
settings.beginGroup(group);
|
|
settings.setValue(name, value);
|
|
settings.endGroup();
|
|
}
|
|
|
|
// Also change it in the cache
|
|
m_hCache[group + name] = value;
|
|
}
|
|
|
|
QVariant Settings::getDefaultValue(const QString& group, const QString& name)
|
|
{
|
|
// db/defaultencoding?
|
|
if(group == "db" && name == "defaultencoding")
|
|
return "UTF-8";
|
|
|
|
// db/savedefaultlocation?
|
|
if(group == "db" && name == "savedefaultlocation")
|
|
return 2;
|
|
|
|
// db/defaultlocation?
|
|
if(group == "db" && name == "defaultlocation")
|
|
return QDir::homePath();
|
|
|
|
// db/lastlocation?
|
|
if(group == "db" && name == "lastlocation")
|
|
return getValue("db", "defaultlocation");
|
|
|
|
// db/hideschemalinebreaks?
|
|
if(group == "db" && name == "hideschemalinebreaks")
|
|
return true;
|
|
|
|
// db/foreignkeys?
|
|
if(group == "db" && name == "foreignkeys")
|
|
return true;
|
|
|
|
// db/prefetchsize?
|
|
if(group == "db" && name == "prefetchsize")
|
|
return 50000;
|
|
|
|
// db/defaultsqltext?
|
|
if(group == "db" && name == "defaultsqltext")
|
|
return "";
|
|
|
|
// exportcsv/firstrowheader?
|
|
if(group == "exportcsv" && name == "firstrowheader")
|
|
return true;
|
|
|
|
// exportcsv/separator?
|
|
if(group == "exportcsv" && name == "separator")
|
|
return ',';
|
|
|
|
// exportcsv/quotecharacter?
|
|
if(group == "exportcsv" && name == "quotecharacter")
|
|
return '"';
|
|
|
|
// importcsv group?
|
|
if(group == "importcsv")
|
|
{
|
|
if(name == "firstrowheader")
|
|
return false;
|
|
if(name == "trimfields")
|
|
return true;
|
|
if(name == "separatetables")
|
|
return false;
|
|
if(name == "separator")
|
|
return ',';
|
|
if(name == "quotecharacter")
|
|
return '"';
|
|
if(name == "encoding")
|
|
return "UTF-8";
|
|
}
|
|
|
|
// exportsql group?
|
|
if(group == "exportsql")
|
|
{
|
|
if(name == "insertcolnames" || name == "insertmultiple")
|
|
return false;
|
|
if(name == "oldschema")
|
|
return 0;
|
|
}
|
|
|
|
// newline character
|
|
if (group == "exportcsv" && name == "newlinecharacters")
|
|
#ifdef Q_OS_WIN
|
|
return "\r\n";
|
|
#else
|
|
return "\n";
|
|
#endif
|
|
|
|
// exportjson/prettyprint?
|
|
if(group == "exportjson" && name == "prettyprint")
|
|
return true;
|
|
|
|
// MainWindow/geometry?
|
|
if(group == "MainWindow" && name == "geometry")
|
|
return "";
|
|
|
|
// MainWindow/windowState?
|
|
if(group == "MainWindow" && name == "windowState")
|
|
return "";
|
|
|
|
// SQLLogDock/Log?
|
|
if(group == "SQLLogDock" && name == "Log")
|
|
return "Application";
|
|
|
|
// General/recentFileList?
|
|
if(group == "General" && name == "recentFileList")
|
|
return QStringList();
|
|
|
|
// General/language?
|
|
if(group == "General" && name == "language")
|
|
return QLocale::system().name();
|
|
|
|
// General/toolbarStyle
|
|
if(group == "General" && name == "toolbarStyle")
|
|
return static_cast<int>(Qt::ToolButtonTextBesideIcon);
|
|
|
|
if(group == "General" && name == "DBFileExtensions")
|
|
return QObject::tr("SQLite database files (*.db *.sqlite *.sqlite3 *.db3)");
|
|
|
|
// checkversion group?
|
|
if(group == "checkversion")
|
|
{
|
|
if(name == "enabled")
|
|
return true;
|
|
if(name == "ignmajor")
|
|
return 999;
|
|
if(name == "ignminor" || name == "ignpatch")
|
|
return 0;
|
|
}
|
|
|
|
// Data Browser/NULL Fields
|
|
if(group == "databrowser")
|
|
{
|
|
if(name == "font")
|
|
return QFont().defaultFamily();
|
|
if(name == "fontsize")
|
|
return 10;
|
|
if(name == "symbol_limit")
|
|
return 5000;
|
|
if(name == "complete_threshold")
|
|
return 1000;
|
|
if(name == "indent_compact")
|
|
return false;
|
|
if(name == "auto_switch_mode")
|
|
return true;
|
|
if(name == "null_text")
|
|
return "NULL";
|
|
if(name == "blob_text")
|
|
return "BLOB";
|
|
if(name == "filter_escape")
|
|
return "\\";
|
|
if(name == "filter_delay")
|
|
return 200;
|
|
if(name == "null_fg_colour")
|
|
return QColor(Qt::lightGray).name();
|
|
if(name == "null_bg_colour")
|
|
return QPalette().color(QPalette::Active, QPalette::Base).name();
|
|
if(name == "reg_fg_colour")
|
|
return QPalette().color(QPalette::Active, QPalette::Text).name();
|
|
if(name == "reg_bg_colour")
|
|
return QPalette().color(QPalette::Active, QPalette::Base).name();
|
|
if(name == "bin_fg_colour")
|
|
return QColor(Qt::lightGray).name();
|
|
if(name == "bin_bg_colour")
|
|
return QPalette().color(QPalette::Active, QPalette::Base).name();
|
|
}
|
|
|
|
// syntaxhighlighter?
|
|
if(group == "syntaxhighlighter")
|
|
{
|
|
// Bold? Only tables, functions and keywords are bold by default
|
|
if(name.right(4) == "bold")
|
|
return name == "keyword_bold" || name == "table_bold" || name == "function_bold";
|
|
|
|
// Italic? Nothing by default
|
|
if(name.right(6) == "italic")
|
|
return false;
|
|
|
|
// Underline? Nothing by default
|
|
if(name.right(9) == "underline")
|
|
return false;
|
|
|
|
// Colour?
|
|
if(name.right(6) == "colour")
|
|
{
|
|
QColor backgroundColour = QPalette().color(QPalette::Active, QPalette::Base);
|
|
QColor foregroundColour = QPalette().color(QPalette::Active, QPalette::Text);
|
|
|
|
if(name == "foreground_colour")
|
|
return foregroundColour.name();
|
|
else if(name == "background_colour")
|
|
return backgroundColour.name();
|
|
|
|
// Detect and provide sensible defaults for dark themes
|
|
if (backgroundColour.value() < foregroundColour.value()) {
|
|
if(name == "keyword_colour")
|
|
return QColor(82, 148, 226).name();
|
|
else if(name == "function_colour")
|
|
return QColor(Qt::yellow).name();
|
|
else if(name == "table_colour")
|
|
return QColor(Qt::cyan).name();
|
|
else if(name == "comment_colour")
|
|
return QColor(Qt::green).name();
|
|
else if(name == "identifier_colour")
|
|
return QColor(Qt::magenta).name();
|
|
else if(name == "string_colour")
|
|
return QColor(Qt::lightGray).name();
|
|
else if(name == "currentline_colour")
|
|
return backgroundColour.lighter(150).name();
|
|
else if(name == "background_colour")
|
|
return backgroundColour.name();
|
|
} else {
|
|
if(name == "keyword_colour")
|
|
return QColor(Qt::darkBlue).name();
|
|
else if(name == "function_colour")
|
|
return QColor(Qt::blue).name();
|
|
else if(name == "table_colour")
|
|
return QColor(Qt::darkCyan).name();
|
|
else if(name == "comment_colour")
|
|
return QColor(Qt::darkGreen).name();
|
|
else if(name == "identifier_colour")
|
|
return QColor(Qt::darkMagenta).name();
|
|
else if(name == "string_colour")
|
|
return QColor(Qt::red).name();
|
|
else if(name == "currentline_colour")
|
|
return QColor(236, 236, 245).name();
|
|
else if(name == "background_colour")
|
|
return backgroundColour.name();
|
|
}
|
|
}
|
|
}
|
|
|
|
// editor/font?
|
|
if(group == "editor" && name == "font")
|
|
{
|
|
QFont font("Monospace");
|
|
font.setStyleHint(QFont::TypeWriter);
|
|
return QFontInfo(font).family();
|
|
}
|
|
|
|
// editor/fontsize or log/fontsize?
|
|
if((group == "editor" || group == "log") && name == "fontsize")
|
|
#ifdef Q_OS_MAC
|
|
// Use 12 pt size as the default on OSX
|
|
return 12;
|
|
#else
|
|
return 9;
|
|
#endif
|
|
|
|
if(group == "editor")
|
|
{
|
|
if(name == "tabsize")
|
|
{
|
|
return 4;
|
|
}
|
|
}
|
|
|
|
// editor/wrap_lines
|
|
if(group == "editor" && name == "wrap_lines")
|
|
return 0; // QsciScintilla::WrapNone
|
|
|
|
// editor/identifier_quotes
|
|
if(group == "editor" && name == "identifier_quotes")
|
|
return 0; // sqlb::DoubleQuotes
|
|
|
|
// editor/auto_completion?
|
|
if(group == "editor" && name == "auto_completion")
|
|
return true;
|
|
|
|
// editor/upper_keywords?
|
|
if(group == "editor" && name == "upper_keywords")
|
|
return true;
|
|
|
|
// editor/error_indicators?
|
|
if(group == "editor" && name == "error_indicators")
|
|
return true;
|
|
|
|
// editor/horizontal_tiling?
|
|
if(group == "editor" && name == "horizontal_tiling")
|
|
return false;
|
|
|
|
// extensions/list?
|
|
if(group == "extensions" && name == "list")
|
|
return QStringList();
|
|
|
|
// extensions/disableregex?
|
|
if(group == "extension" && name == "disableregex")
|
|
return false;
|
|
|
|
// extensions/enable_load_extension?
|
|
if(group == "extension" && name == "enable_load_extension")
|
|
return false;
|
|
|
|
// PlotDock/lineType or pointShape?
|
|
if(group == "PlotDock")
|
|
{
|
|
// QCPGraph::lsLine
|
|
if(name == "lineType")
|
|
return 1;
|
|
|
|
// QCPScatterStyle::ssDisk
|
|
if(name == "pointShape")
|
|
return 4;
|
|
}
|
|
|
|
|
|
// SchemaDock Drag & drop settings
|
|
if(group == "SchemaDock")
|
|
{
|
|
if(name == "dropQualifiedNames")
|
|
return false;
|
|
|
|
if(name == "dropEnquotedNames")
|
|
return true;
|
|
}
|
|
|
|
// Remote settings?
|
|
if(group == "remote")
|
|
{
|
|
// Enable the File → Remote menu by default
|
|
if(name == "active")
|
|
return true;
|
|
|
|
// Clone directory
|
|
if(name == "clonedirectory")
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
|
|
return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
|
#else
|
|
return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
|
|
#endif
|
|
}
|
|
|
|
// Unknown combination of group and name? Return an invalid QVariant!
|
|
return QVariant();
|
|
}
|
|
|
|
void Settings::restoreDefaults ()
|
|
{
|
|
QSettings settings(QApplication::organizationName(), QApplication::organizationName());
|
|
settings.clear();
|
|
m_hCache.clear();
|
|
}
|