diff options
Diffstat (limited to 'src/gui_qt.cc')
| -rw-r--r-- | src/gui_qt.cc | 49 |
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_; |
