From 152873d8602e26f2ee31aed78116e0c710b0d248 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Fri, 16 Dec 2022 23:09:24 +0100 Subject: [PATCH] auto save configuration --- include/mainwindow.h | 11 ++++++++ src/mainwindow.cpp | 65 ++++++++++++++++++++++++++++++++++++++------ ui/mainwindow.ui | 6 ++-- 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/include/mainwindow.h b/include/mainwindow.h index 9aef2af..da5b081 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -12,6 +12,9 @@ QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE +class QTimer; + + class MainWindow : public QMainWindow { Q_OBJECT @@ -23,6 +26,9 @@ protected: virtual void closeEvent(QCloseEvent* event) override; virtual void resizeEvent(QResizeEvent *event) override; +public slots: + void resetSaveTimer(); + private slots: void toggleMainswitch(bool); void aatoggled(bool); @@ -34,6 +40,8 @@ private slots: void applyRunes(); void autoWriteChanged(); + void saveConfig(); + void initDone(); signals: void requestTabChange(int tabindex); @@ -42,7 +50,10 @@ private: void onPosChange(Position newpos); // to trigger the signal from a QObject void onFail(); // get triggerd, when the autoacceptor fails (lost connection) + bool loading; Ui::MainWindow *ui; + QTimer* saveTimer; + QTimer* initDoneTimer; std::thread lolaathread; DataDragon dd; Config conf; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index e69db4b..0926372 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,12 +1,18 @@ #include "mainwindow.h" #include "ui_mainwindow.h" +#include + #include -MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), dd(QLocale().name().toStdString()), +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), loading(true), ui(new Ui::MainWindow), saveTimer(new QTimer(this)), dd(QLocale().name().toStdString()), lolaa(conf.getConfig(), dd, std::bind(&MainWindow::onFail, this), std::bind(&MainWindow::onPosChange, this, std::placeholders::_1)) { ui->setupUi(this); + saveTimer->setInterval(std::chrono::minutes(1)); + saveTimer->setSingleShot(true); + QObject::connect(saveTimer, &QTimer::timeout, this, &MainWindow::saveConfig); + ui->copyrightlabel->setText(ui->copyrightlabel->text().arg(LOLAA_VERSION)); lolaa.setOnRuneChangeFunc(std::bind(&RuneDisplay::setRunes, ui->runedisplay, std::placeholders::_1)); @@ -19,8 +25,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi SettingsTab* tab = (SettingsTab*) ui->tabWidget->widget(tabnr); tab->setup(*rc.getPositionConfig(tab->getPosition()), &dd); - QObject::connect(tab, SIGNAL( changed(Position, LolAutoAccept::State) ), this, SLOT( tabchanged(Position, LolAutoAccept::State) )); - QObject::connect(tab, SIGNAL( toggled(Position, LolAutoAccept::State, bool) ), this, SLOT( tabtoggled(Position, LolAutoAccept::State, bool) )); + QObject::connect(tab, &SettingsTab::changed, this, &MainWindow::tabchanged); + QObject::connect(tab, &SettingsTab::toggled, this, &MainWindow::tabtoggled); } ui->enableAll->setChecked(rc.enabledAutoAccept); @@ -34,6 +40,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi lolaa.setAutoWriteText(rc.enabledAutoWrite, rc.autoWriteText); resizeEvent(nullptr); + + // a timer to delay the loading flag a short time until all other signals are processed + initDoneTimer = new QTimer(this); + initDoneTimer->setSingleShot(true); + initDoneTimer->setInterval(std::chrono::milliseconds(1)); // schedule for first event loop + QObject::connect(initDoneTimer, &QTimer::timeout, this, &MainWindow::initDone, Qt::QueuedConnection); + initDoneTimer->start(); } MainWindow::~MainWindow() { @@ -53,8 +66,13 @@ void MainWindow::resizeEvent([[maybe_unused]] QResizeEvent *event) { ui->verticalLayoutWidget->setMinimumSize(ui->centralwidget->size()); } +void MainWindow::resetSaveTimer() { + saveTimer->start(); + qDebug() << "resetTimer"; +} + void MainWindow::toggleMainswitch(bool state) { - Log::info << "mainswitch toggled: " << state; + qDebug() << "mainswitch toggled: " << state; if(state) { if(!lolaa.init()) { @@ -78,44 +96,73 @@ void MainWindow::toggleMainswitch(bool state) { } void MainWindow::aatoggled(bool state) { - Log::info << "enableAll checkbox toggled " << state; + if( loading ) return; + + qDebug() << "enableAll checkbox toggled " << state; lolaa.setEnabled(state, LolAutoAccept::State::LOBBY); conf.getConfig().enabledAutoAccept = state; + resetSaveTimer(); } void MainWindow::smitewarntoggled(bool state) { - Log::info << "smitewarn checkbox toggled " << state; + if( loading ) return; + + qDebug() << "smitewarn checkbox toggled " << state; lolaa.setSmiteWarn(state); conf.getConfig().enabledSmiteWarn = state; + resetSaveTimer(); } void MainWindow::tabtoggled(Position p, LolAutoAccept::State s, bool state) { - Log::info << "checkbox toggled " << state << " position: " << p << " state: " << (int) s; + if( loading ) return; + + qDebug() << "checkbox toggled " << state << " position: " << p << " state: " << (int) s; lolaa.setEnabled(state, s); lolaa.reload(); + resetSaveTimer(); } void MainWindow::tabchanged(Position p, LolAutoAccept::State s) { - Log::info << "edited position: " << p << " state: " << (int) s; + if( loading ) return; + + qDebug() << "edited position: " << p << " state: " << (int) s; lolaa.reload(); + resetSaveTimer(); } void MainWindow::applyRunes() { - Log::info << "applyRunes pressed"; + qDebug() << "applyRunes pressed"; lolaa.applyRunes(); } void MainWindow::autoWriteChanged() { + if( loading ) return; + bool enabled = ui->enableAutoWrite->isChecked(); const std::string text = ui->autoWriteText->toPlainText().toStdString(); + lolaa.setAutoWriteText(enabled, text); + conf.getConfig().enabledAutoWrite = enabled; conf.getConfig().autoWriteText = text; + + resetSaveTimer(); +} + +void MainWindow::saveConfig() { + conf.save(); +} + +void MainWindow::initDone() { + loading = false; + initDoneTimer->deleteLater(); + initDoneTimer = nullptr; + qDebug() << "loading done"; } void MainWindow::onPosChange(Position newpos) { diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 700e0e2..813a667 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -7,7 +7,7 @@ 0 0 579 - 633 + 788 @@ -35,7 +35,7 @@ 809 - + QLayout::SetDefaultConstraint @@ -76,7 +76,7 @@ QTabWidget::Rounded - 1 + 4 Qt::ElideNone