HAL
settings_manager.cpp
Go to the documentation of this file.
3 #include <QDir>
4 #include <QApplication>
5 #include <QDesktopWidget>
6 #include <QRect>
7 
8 namespace hal
9 {
10  SettingsManager* SettingsManager:: inst = nullptr;
11 
13  {
14  if(!inst)
15  inst = new SettingsManager;
16 
17  return inst;
18  }
19 
20  SettingsManager::SettingsManager(QObject* parent)
21  : QObject(parent)
22  {
24  QDir defaultConfigDir(QString::fromStdString(utils::get_config_directory().string()));
25 
26  mUserSettingsFile = new QSettings(userConfigDir.absoluteFilePath("guisettings.ini"), QSettings::IniFormat);
27  mDefaultSettingsFile = new QSettings(defaultConfigDir.absoluteFilePath("guidefaults.ini"), QSettings::IniFormat);
28  }
29 
31  {
32  mSettingsList.append(item);
33 
34  QString tag = item->tag();
35  if (mDefaultSettingsFile->contains(tag))
36  item->setDefaultValue(mDefaultSettingsFile->value(tag));
37 
38  if (mUserSettingsFile->contains(tag))
39  item->restoreFromSettings(mUserSettingsFile->value(tag));
40 
42 
43  // qDebug() << "new setting " << item << " " << item->tag();
44  }
45 
47  {
48  SettingsItem* item = static_cast<SettingsItem*>(obj);
49  mSettingsList.removeAll(item);
50  }
51 
53  {
54  for(SettingsItem* item : mSettingsList)
55  if (item->value() != item->defaultValue())
56  mUserSettingsFile->setValue(item->tag(), item->value());
57  else
58  mUserSettingsFile->remove(item->tag());
59 
60  mUserSettingsFile->sync();
61  }
62 
64  {
65  return mDefaultSettingsFile->value(tag);
66  }
67 
69  {
70  return mUserSettingsFile->value(tag);
71  }
72 
74  {
75  return mUserSettingsFile->value("MainWindow/position", QPoint(0, 0)).toPoint();
76  }
77 
79  {
81  return mUserSettingsFile->value("MainWindow/size", rect.size()).toSize();
82  }
83 
85  {
86  mUserSettingsFile->setValue("MainWindow/position", pos);
87  mUserSettingsFile->setValue("MainWindow/size", size);
88  mUserSettingsFile->sync();
89  }
90 
92  {
93  LoggerSettings settings;
94  settings.infoSeverity = mUserSettingsFile->value("Logger/infoSeverity", QVariant(true)).toBool();
95  settings.debugSeverity = mUserSettingsFile->value("Logger/debugSeverity", QVariant(false)).toBool();
96  settings.warningSeverity = mUserSettingsFile->value("Logger/warningSeverity", QVariant(true)).toBool();
97  settings.errorSeverity = mUserSettingsFile->value("Logger/errorSeverity", QVariant(true)).toBool();
98 
99  return settings;
100  }
101 
103  {
104  mUserSettingsFile->setValue("Logger/infoSeverity", settings.infoSeverity);
105  mUserSettingsFile->setValue("Logger/debugSeverity", settings.debugSeverity);
106  mUserSettingsFile->setValue("Logger/warningSeverity", settings.warningSeverity);
107  mUserSettingsFile->setValue("Logger/errorSeverity", settings.errorSeverity);
108  mUserSettingsFile->sync();
109  }
110 }
The interface for the logical part of a setting.
Definition: settings_item.h:46
virtual QString tag() const
virtual void restoreFromSettings(const QVariant &val)
virtual void setDefaultValue(const QVariant &dv)=0
Manages and persists the settings on the lowest level.
void saveLoggerSettings(const LoggerSettings &settings)
void registerSetting(SettingsItem *item)
QVariant defaultValue(const QString &tag) const
void mainWindowSaveGeometry(const QPoint &pos, const QSize &size)
QVariant settingsValue(const QString &tag) const
LoggerSettings loggerSettings() const
QList< SettingsItem * > mSettingsList
void handleItemDestroyed(QObject *obj)
static SettingsManager * instance()
QSize mainWindowSize() const
QPoint mainWindowPosition() const
std::filesystem::path get_config_directory()
Definition: utils.cpp:163
std::filesystem::path get_user_config_directory()
Definition: utils.cpp:171
QDesktopWidget * desktop()
const QRect screenGeometry(const QWidget *widget) const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void destroyed(QObject *obj)
QSize size() const const
bool contains(const QString &key) const const
void remove(const QString &key)
void setValue(const QString &key, const QVariant &value)
void sync()
QVariant value(const QString &key, const QVariant &defaultValue) const const
QString fromStdString(const std::string &str)
bool toBool() const const
QPoint toPoint() const const
QSize toSize() const const