summaryrefslogtreecommitdiff
path: root/src/gui_qt.cc
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@yahoo.com>2017-07-22 23:18:26 +0200
committerJoel Klinghed <the_jk@yahoo.com>2017-07-22 23:19:37 +0200
commita3da855cddff3c3c71311af6ce3e7629a459024d (patch)
tree7ed8cad6256f74fb83632f608891ceeb32e1f59a /src/gui_qt.cc
parentd9e1e04c09a99b2a507e071f434fd394f4781051 (diff)
Add application config for GUI
QT5 stored in .config/org.the_jk/tp.Monitor.conf on Linux GTK stored in dconf
Diffstat (limited to 'src/gui_qt.cc')
-rw-r--r--src/gui_qt.cc49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/gui_qt.cc b/src/gui_qt.cc
index dcfd320..d54975e 100644
--- a/src/gui_qt.cc
+++ b/src/gui_qt.cc
@@ -19,6 +19,7 @@
#include <QMimeData>
#include <QProgressBar>
#include <QPushButton>
+#include <QSettings>
#include <QSocketNotifier>
#include <QSplitter>
#include <QStatusBar>
@@ -35,6 +36,7 @@
#include <vector>
#include "gui_about.hh"
+#include "gui_config.hh"
#include "gui_form.hh"
#include "gui_formapply.hh"
#include "gui_htmlattrtext.hh"
@@ -315,12 +317,50 @@ private:
GuiListModel* const model_;
};
+class QtGuiConfig : public GuiConfig {
+public:
+ QtGuiConfig()
+ : settings_(new QSettings("org.the_jk", "tp.Monitor")) {
+ }
+
+ ~QtGuiConfig() override {
+ settings_->sync();
+ }
+
+ using Config::get;
+ std::string const& get(std::string const& key,
+ std::string const& fallback) override {
+ memory_[key] = settings_->value(QString::fromStdString(key),
+ QString::fromStdString(fallback))
+ .toString().toStdString();
+ return memory_[key];
+ }
+ char const* get(std::string const& key, char const* fallback) override {
+ auto k = QString::fromStdString(key);
+ if (!settings_->contains(k)) return fallback;
+ memory_[key] = settings_->value(k).toString().toStdString();
+ return memory_[key].c_str();
+ }
+ bool is_set(std::string const& key) override {
+ return settings_->contains(QString::fromStdString(key));
+ }
+
+ void set(std::string const& key, std::string const& value) override {
+ settings_->setValue(QString::fromStdString(key),
+ QString::fromStdString(value));
+ }
+
+private:
+ std::unique_ptr<QSettings> settings_;
+ std::unordered_map<std::string, std::string> memory_;
+};
+
class QtGuiMain : public GuiMain, public QtGuiWindow {
public:
QtGuiMain(std::string const& title, uint32_t width, uint32_t height)
: title_(title), width_(width), height_(height), split_(0.7),
- menu_(nullptr), statusbar_(nullptr), splitter_(nullptr),
- top_(nullptr), bottom_(nullptr) {
+ menu_(nullptr), statusbar_(nullptr), config_(new QtGuiConfig()),
+ splitter_(nullptr), top_(nullptr), bottom_(nullptr) {
}
void set_menu(GuiMenu* menu) override {
@@ -438,6 +478,10 @@ public:
clipboard->setMimeData(mimedata);
}
+ Config* config() override {
+ return config_.get();
+ }
+
private:
static bool valid_utf8(std::string const& data) {
QTextCodec::ConverterState state;
@@ -480,6 +524,7 @@ private:
std::unique_ptr<QMainWindow> main_;
std::unique_ptr<SizeHintLayout> layout_;
std::unique_ptr<QWidget> center_;
+ std::unique_ptr<QtGuiConfig> config_;
QSplitter* splitter_;
QWidget* top_;
QTextEdit* bottom_;