From d3aa3694f2d305b6f38f71809efb5dfc87b51061 Mon Sep 17 00:00:00 2001 From: TranRed Date: Wed, 17 Jul 2019 16:49:16 +0200 Subject: [PATCH 01/29] Merge pull request #1 from TranRed/subbutton Added Subscribe option to channel menu --- src/widgets/splits/Split.cpp | 10 ++++++++++ src/widgets/splits/Split.hpp | 1 + src/widgets/splits/SplitHeader.cpp | 3 +++ 3 files changed, 14 insertions(+) diff --git a/src/widgets/splits/Split.cpp b/src/widgets/splits/Split.cpp index c53d0285..58fd15c2 100644 --- a/src/widgets/splits/Split.cpp +++ b/src/widgets/splits/Split.cpp @@ -636,6 +636,16 @@ void Split::showViewerList() viewerDock->activateWindow(); } +void Split::openSubPage() +{ + ChannelPtr channel = this->getChannel(); + + if (auto twitchChannel = dynamic_cast(channel.get())) + { + QDesktopServices::openUrl(twitchChannel->subscriptionUrl()); + } +} + void Split::copyToClipboard() { QApplication::clipboard()->setText(this->view_->getSelectedText()); diff --git a/src/widgets/splits/Split.hpp b/src/widgets/splits/Split.hpp index 95db3015..edfca352 100644 --- a/src/widgets/splits/Split.hpp +++ b/src/widgets/splits/Split.hpp @@ -129,6 +129,7 @@ public slots: void copyToClipboard(); void showSearch(); void showViewerList(); + void openSubPage(); void reloadChannelAndSubscriberEmotes(); }; diff --git a/src/widgets/splits/SplitHeader.cpp b/src/widgets/splits/SplitHeader.cpp index 3754ae96..c63f373d 100644 --- a/src/widgets/splits/SplitHeader.cpp +++ b/src/widgets/splits/SplitHeader.cpp @@ -284,9 +284,12 @@ std::unique_ptr SplitHeader::createMainMenu() // sub menu auto moreMenu = new QMenu("More", this); + moreMenu->addAction("Show viewer list", this->split_, &Split::showViewerList); + moreMenu->addAction("Subscribe", this->split_, &Split::openSubPage); + auto action = new QAction(this); action->setText("Notify when live"); action->setCheckable(true); From e64f37d288adba0570b8079b80fd0540a7576fb4 Mon Sep 17 00:00:00 2001 From: TranRed Date: Wed, 17 Jul 2019 16:50:03 +0200 Subject: [PATCH 02/29] Made 8 customizable timeout buttons changed fixed timeout buttons to be read from settings --- src/singletons/Settings.hpp | 53 ++++++++++++++++ src/widgets/dialogs/UserInfoPopup.cpp | 90 +++++++++++++++++++-------- src/widgets/dialogs/UserInfoPopup.hpp | 4 +- 3 files changed, 119 insertions(+), 28 deletions(-) diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp index f54de6c6..1e483003 100644 --- a/src/singletons/Settings.hpp +++ b/src/singletons/Settings.hpp @@ -195,6 +195,59 @@ public: QStringSetting cachePath = {"/cache/path", ""}; + /// Timeout buttons + QStringSetting timeoutDurationPerUnit1 = { + "/timeouts/timeoutDurationPerUnit1", "1"}; + QStringSetting timeoutDurationUnit1 = {"/timeouts/timeoutDurationUnit1", + "s"}; + IntSetting timeoutDurationInSec1 = {"/timeouts/timeoutDurationInSec1", 1}; + + QStringSetting timeoutDurationPerUnit2 = { + "/timeouts/timeoutDurationPerUnit2", "30"}; + QStringSetting timeoutDurationUnit2 = {"/timeouts/timeoutDurationUnit2", + "s"}; + IntSetting timeoutDurationInSec2 = {"/timeouts/timeoutDurationInSec1", 30}; + + QStringSetting timeoutDurationPerUnit3 = { + "/timeouts/timeoutDurationPerUnit3", "1"}; + QStringSetting timeoutDurationUnit3 = {"/timeouts/timeoutDurationUnit3", + "m"}; + IntSetting timeoutDurationInSec3 = {"/timeouts/timeoutDurationInSec3", 60}; + + QStringSetting timeoutDurationPerUnit4 = { + "/timeouts/timeoutDurationPerUnit4", "5"}; + QStringSetting timeoutDurationUnit4 = {"/timeouts/timeoutDurationUnit4", + "s"}; + IntSetting timeoutDurationInSec4 = {"/timeouts/timeoutDurationInSec4", 300}; + + QStringSetting timeoutDurationPerUnit5 = { + "/timeouts/timeoutDurationPerUnit5", "30"}; + QStringSetting timeoutDurationUnit5 = {"/timeouts/timeoutDurationUnit5", + "m"}; + IntSetting timeoutDurationInSec5 = {"/timeouts/timeoutDurationInSec5", + 1800}; + + QStringSetting timeoutDurationPerUnit6 = { + "/timeouts/timeoutDurationPerUnit6", "1"}; + QStringSetting timeoutDurationUnit6 = {"/timeouts/timeoutDurationUnit6", + "h"}; + IntSetting timeoutDurationInSec6 = {"/timeouts/timeoutDurationInSec6", + 3600}; + + QStringSetting timeoutDurationPerUnit7 = { + "/timeouts/timeoutDurationPerUnit7", "1"}; + QStringSetting timeoutDurationUnit7 = {"/timeouts/timeoutDurationUnit7", + "d"}; + IntSetting timeoutDurationInSec7 = {"/timeouts/timeoutDurationInSec7", + 86400}; + + QStringSetting timeoutDurationPerUnit8 = { + "/timeouts/timeoutDurationPerUnit8", "1"}; + QStringSetting timeoutDurationUnit8 = {"/timeouts/timeoutDurationUnit8", + "w"}; + IntSetting timeoutDurationInSec8 = {"/timeouts/timeoutDurationInSec8", + 604800}; + private: void updateModerationActions(); }; diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index f326d9cc..80ccdcf0 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -8,6 +8,7 @@ #include "providers/twitch/PartialTwitchUser.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "singletons/Resources.hpp" +#include "singletons/Settings.hpp" #include "util/LayoutCreator.hpp" #include "util/PostToThread.hpp" #include "widgets/Label.hpp" @@ -366,6 +367,9 @@ void UserInfoPopup::updateUserData() this->loadAvatar(QUrl(obj.value("logo").toString())); + this->loadProfileBanner( + QUrl(obj.value("profile_banner").toString())); + return Success; }); @@ -450,6 +454,31 @@ void UserInfoPopup::loadAvatar(const QUrl &url) }); } +void UserInfoPopup::loadProfileBanner(const QUrl &url) +{ + QNetworkRequest req(url); + static auto manager = new QNetworkAccessManager(); + auto *reply = manager->get(req); + + QObject::connect(reply, &QNetworkReply::finished, this, [=] { + if (reply->error() == QNetworkReply::NoError) + { + const auto data = reply->readAll(); + + // might want to cache the banner image + QPixmap banner; + banner.loadFromData(data); + this->ui_.profileBanner = + banner.scaled(600, 200, Qt::KeepAspectRatio); + } + else + { + QPixmap emptyBanner; + this->ui_.profileBanner = emptyBanner; + } + }); +} + // // TimeoutWidget // @@ -464,7 +493,7 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget() QColor color2(255, 255, 255, 0); int buttonWidth = 24; - int buttonWidth2 = 32; + int buttonWidth2 = 40; int buttonHeight = 32; layout->setSpacing(16); @@ -515,14 +544,7 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget() auto a = hbox.emplace(); a->getLabel().setText(std::get<0>(item)); - if (std::get<0>(item).length() > 1) - { - a->setScaleIndependantSize(buttonWidth2, buttonHeight); - } - else - { - a->setScaleIndependantSize(buttonWidth, buttonHeight); - } + a->setScaleIndependantSize(buttonWidth2, buttonHeight); a->setBorderColor(color1); QObject::connect(a.getElement(), &EffectLabel2::leftClicked, @@ -536,24 +558,38 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget() addButton(Unban, "unban", getApp()->resources->buttons.unban); - addTimeouts("sec", {{"1", 1}}); - addTimeouts("min", { - {"1", 1 * 60}, - {"5", 5 * 60}, - {"10", 10 * 60}, - }); - addTimeouts("hour", { - {"1", 1 * 60 * 60}, - {"4", 4 * 60 * 60}, - }); - addTimeouts("days", { - {"1", 1 * 60 * 60 * 24}, - {"3", 3 * 60 * 60 * 24}, - }); - addTimeouts("weeks", { - {"1", 1 * 60 * 60 * 24 * 7}, - {"2", 2 * 60 * 60 * 24 * 7}, - }); + addTimeouts("Timeouts", + {{getSettings()->timeoutDurationPerUnit1.getValue() + + getSettings()->timeoutDurationUnit1.getValue(), + getSettings()->timeoutDurationInSec1.getValue()}, + + {getSettings()->timeoutDurationPerUnit2.getValue() + + getSettings()->timeoutDurationUnit2.getValue(), + getSettings()->timeoutDurationInSec2.getValue()}, + + {getSettings()->timeoutDurationPerUnit3.getValue() + + getSettings()->timeoutDurationUnit3.getValue(), + getSettings()->timeoutDurationInSec3.getValue()}, + + {getSettings()->timeoutDurationPerUnit4.getValue() + + getSettings()->timeoutDurationUnit4.getValue(), + getSettings()->timeoutDurationInSec4.getValue()}, + + {getSettings()->timeoutDurationPerUnit5.getValue() + + getSettings()->timeoutDurationUnit5.getValue(), + getSettings()->timeoutDurationInSec5.getValue()}, + + {getSettings()->timeoutDurationPerUnit6.getValue() + + getSettings()->timeoutDurationUnit6.getValue(), + getSettings()->timeoutDurationInSec6.getValue()}, + + {getSettings()->timeoutDurationPerUnit7.getValue() + + getSettings()->timeoutDurationUnit7.getValue(), + getSettings()->timeoutDurationInSec7.getValue()}, + + {getSettings()->timeoutDurationPerUnit8.getValue() + + getSettings()->timeoutDurationUnit8.getValue(), + getSettings()->timeoutDurationInSec8.getValue()}}); addButton(Ban, "ban", getApp()->resources->buttons.ban); } diff --git a/src/widgets/dialogs/UserInfoPopup.hpp b/src/widgets/dialogs/UserInfoPopup.hpp index 59437d3d..8699f8dd 100644 --- a/src/widgets/dialogs/UserInfoPopup.hpp +++ b/src/widgets/dialogs/UserInfoPopup.hpp @@ -29,6 +29,7 @@ private: void updateUserData(); void loadAvatar(const QUrl &url); + void loadProfileBanner(const QUrl &url); bool isMod_; bool isBroadcaster_; @@ -42,8 +43,9 @@ private: struct { Button *avatarButton = nullptr; - // RippleEffectLabel2 *viewLogs = nullptr; + // RippleEffectLabel2 *viewLogs = nullptr; + QPixmap profileBanner; Label *nameLabel = nullptr; Label *viewCountLabel = nullptr; Label *followerCountLabel = nullptr; From 24faaf87349933b894f377b44afbf65b22f7bc4f Mon Sep 17 00:00:00 2001 From: TranRed Date: Thu, 18 Jul 2019 23:02:55 +0200 Subject: [PATCH 03/29] created first version of settingstab: Timeouts scuffed prototype To-Dos: - make the UI look cleaner - clean up copy&pasted coding --- src/singletons/Settings.hpp | 2 +- src/widgets/settingspages/AdvancedPage.cpp | 530 +++++++++++++++++++++ src/widgets/settingspages/AdvancedPage.hpp | 11 + 3 files changed, 542 insertions(+), 1 deletion(-) diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp index 1e483003..25441c04 100644 --- a/src/singletons/Settings.hpp +++ b/src/singletons/Settings.hpp @@ -206,7 +206,7 @@ public: "/timeouts/timeoutDurationPerUnit2", "30"}; QStringSetting timeoutDurationUnit2 = {"/timeouts/timeoutDurationUnit2", "s"}; - IntSetting timeoutDurationInSec2 = {"/timeouts/timeoutDurationInSec1", 30}; + IntSetting timeoutDurationInSec2 = {"/timeouts/timeoutDurationInSec2", 30}; QStringSetting timeoutDurationPerUnit3 = { "/timeouts/timeoutDurationPerUnit3", "1"}; diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index 739abd68..02831d88 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -3,6 +3,7 @@ #include "Application.hpp" #include "controllers/taggedusers/TaggedUsersController.hpp" #include "controllers/taggedusers/TaggedUsersModel.hpp" +#include "debug/Log.hpp" #include "singletons/Logging.hpp" #include "singletons/Paths.hpp" #include "util/Helpers.hpp" @@ -72,7 +73,536 @@ AdvancedPage::AdvancedPage() }); // Logs end + QStringList units = QStringList(); + units.append("s"); + units.append("m"); + units.append("h"); + units.append("d"); + units.append("w"); + + auto timeoutLayout = tabs.appendTab(new QVBoxLayout, "Timeouts"); + auto infoLabel = timeoutLayout.emplace(); + infoLabel->setText("Customize your timeout buttons in seconds (s), " + "minutes (m), hours (h), days (d) or weeks (w)."); + auto maxLabel = timeoutLayout.emplace(); + maxLabel->setText("Maximum timeout duration is 2 weeks = 14 days = 336 " + "hours = 20,160 minutes = 1,209,600 seconds."); + + auto timeout1 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput1 = new QLineEdit; + lineEditDurationInput1->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput1->setText( + getSettings()->timeoutDurationPerUnit1); + lineEditDurationInput1->setAlignment(Qt::AlignRight); + timeout1.append(lineEditDurationInput1); + + QComboBox *timeoutDurationUnit1 = new QComboBox(); + timeoutDurationUnit1->addItems(units); + timeoutDurationUnit1->setCurrentText( + getSettings()->timeoutDurationUnit1); + timeout1.append(timeoutDurationUnit1); + + QSpinBox *spinBoxDurationCalculated1 = new QSpinBox; + spinBoxDurationCalculated1->setRange(1, 1209600); + spinBoxDurationCalculated1->setValue( + getSettings()->timeoutDurationInSec1); + spinBoxDurationCalculated1->setReadOnly(true); + spinBoxDurationCalculated1->setAlignment(Qt::AlignRight); + timeout1.append(spinBoxDurationCalculated1); + + QObject::connect(lineEditDurationInput1, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput1, + getSettings()->timeoutDurationUnit1, + *spinBoxDurationCalculated1, + getSettings()->timeoutDurationPerUnit1); + }); + + QObject::connect(spinBoxDurationCalculated1, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated1->value(), + getSettings()->timeoutDurationInSec1); + }); + + QObject::connect(timeoutDurationUnit1, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit1->currentText(), + getSettings()->timeoutDurationUnit1); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput1, + getSettings()->timeoutDurationUnit1, + *spinBoxDurationCalculated1, + getSettings()->timeoutDurationPerUnit1); + }); + + auto secondsLabel = timeout1.emplace(); + secondsLabel->setText("seconds"); + } + + auto timeout2 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput2 = new QLineEdit; + lineEditDurationInput2->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput2->setText( + getSettings()->timeoutDurationPerUnit2); + lineEditDurationInput2->setAlignment(Qt::AlignRight); + timeout2.append(lineEditDurationInput2); + + QComboBox *timeoutDurationUnit2 = new QComboBox(); + timeoutDurationUnit2->addItems(units); + timeoutDurationUnit2->setCurrentText( + getSettings()->timeoutDurationUnit2); + timeout2.append(timeoutDurationUnit2); + + QSpinBox *spinBoxDurationCalculated2 = new QSpinBox; + spinBoxDurationCalculated2->setRange(1, 1209600); + spinBoxDurationCalculated2->setValue( + getSettings()->timeoutDurationInSec2); + spinBoxDurationCalculated2->setReadOnly(true); + spinBoxDurationCalculated2->setAlignment(Qt::AlignRight); + timeout2.append(spinBoxDurationCalculated2); + + QObject::connect(lineEditDurationInput2, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput2, + getSettings()->timeoutDurationUnit2, + *spinBoxDurationCalculated2, + getSettings()->timeoutDurationPerUnit2); + }); + + QObject::connect(spinBoxDurationCalculated2, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated2->value(), + getSettings()->timeoutDurationInSec2); + }); + + QObject::connect(timeoutDurationUnit2, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit2->currentText(), + getSettings()->timeoutDurationUnit2); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput2, + getSettings()->timeoutDurationUnit2, + *spinBoxDurationCalculated2, + getSettings()->timeoutDurationPerUnit2); + }); + + auto secondsLabel = timeout2.emplace(); + secondsLabel->setText("seconds"); + } + + auto timeout3 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput3 = new QLineEdit; + lineEditDurationInput3->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput3->setText( + getSettings()->timeoutDurationPerUnit3); + lineEditDurationInput3->setAlignment(Qt::AlignRight); + timeout3.append(lineEditDurationInput3); + + QComboBox *timeoutDurationUnit3 = new QComboBox(); + timeoutDurationUnit3->addItems(units); + timeoutDurationUnit3->setCurrentText( + getSettings()->timeoutDurationUnit3); + timeout3.append(timeoutDurationUnit3); + + QSpinBox *spinBoxDurationCalculated3 = new QSpinBox; + spinBoxDurationCalculated3->setRange(1, 1209600); + spinBoxDurationCalculated3->setValue( + getSettings()->timeoutDurationInSec3); + spinBoxDurationCalculated3->setReadOnly(true); + spinBoxDurationCalculated3->setAlignment(Qt::AlignRight); + timeout3.append(spinBoxDurationCalculated3); + + QObject::connect(lineEditDurationInput3, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput3, + getSettings()->timeoutDurationUnit3, + *spinBoxDurationCalculated3, + getSettings()->timeoutDurationPerUnit3); + }); + + QObject::connect(spinBoxDurationCalculated3, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated3->value(), + getSettings()->timeoutDurationInSec3); + }); + + QObject::connect(timeoutDurationUnit3, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit3->currentText(), + getSettings()->timeoutDurationUnit3); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput3, + getSettings()->timeoutDurationUnit3, + *spinBoxDurationCalculated3, + getSettings()->timeoutDurationPerUnit3); + }); + + auto secondsLabel = timeout3.emplace(); + secondsLabel->setText("seconds"); + } + auto timeout4 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput4 = new QLineEdit; + lineEditDurationInput4->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput4->setText( + getSettings()->timeoutDurationPerUnit4); + lineEditDurationInput4->setAlignment(Qt::AlignRight); + timeout4.append(lineEditDurationInput4); + + QComboBox *timeoutDurationUnit4 = new QComboBox(); + timeoutDurationUnit4->addItems(units); + timeoutDurationUnit4->setCurrentText( + getSettings()->timeoutDurationUnit4); + timeout4.append(timeoutDurationUnit4); + + QSpinBox *spinBoxDurationCalculated4 = new QSpinBox; + spinBoxDurationCalculated4->setRange(1, 1209600); + spinBoxDurationCalculated4->setValue( + getSettings()->timeoutDurationInSec4); + spinBoxDurationCalculated4->setReadOnly(true); + spinBoxDurationCalculated4->setAlignment(Qt::AlignRight); + timeout4.append(spinBoxDurationCalculated4); + + QObject::connect(lineEditDurationInput4, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput4, + getSettings()->timeoutDurationUnit4, + *spinBoxDurationCalculated4, + getSettings()->timeoutDurationPerUnit4); + }); + + QObject::connect(spinBoxDurationCalculated4, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated4->value(), + getSettings()->timeoutDurationInSec4); + }); + + QObject::connect(timeoutDurationUnit4, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit4->currentText(), + getSettings()->timeoutDurationUnit4); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput4, + getSettings()->timeoutDurationUnit4, + *spinBoxDurationCalculated4, + getSettings()->timeoutDurationPerUnit4); + }); + + auto secondsLabel = timeout4.emplace(); + secondsLabel->setText("seconds"); + } + auto timeout5 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput5 = new QLineEdit; + lineEditDurationInput5->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput5->setText( + getSettings()->timeoutDurationPerUnit5); + lineEditDurationInput5->setAlignment(Qt::AlignRight); + timeout5.append(lineEditDurationInput5); + + QComboBox *timeoutDurationUnit5 = new QComboBox(); + timeoutDurationUnit5->addItems(units); + timeoutDurationUnit5->setCurrentText( + getSettings()->timeoutDurationUnit5); + timeout5.append(timeoutDurationUnit5); + + QSpinBox *spinBoxDurationCalculated5 = new QSpinBox; + spinBoxDurationCalculated5->setRange(1, 1209600); + spinBoxDurationCalculated5->setValue( + getSettings()->timeoutDurationInSec5); + spinBoxDurationCalculated5->setReadOnly(true); + spinBoxDurationCalculated5->setAlignment(Qt::AlignRight); + timeout5.append(spinBoxDurationCalculated5); + + QObject::connect(lineEditDurationInput5, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput5, + getSettings()->timeoutDurationUnit5, + *spinBoxDurationCalculated5, + getSettings()->timeoutDurationPerUnit5); + }); + + QObject::connect(spinBoxDurationCalculated5, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated5->value(), + getSettings()->timeoutDurationInSec5); + }); + + QObject::connect(timeoutDurationUnit5, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit5->currentText(), + getSettings()->timeoutDurationUnit5); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput5, + getSettings()->timeoutDurationUnit5, + *spinBoxDurationCalculated5, + getSettings()->timeoutDurationPerUnit5); + }); + + auto secondsLabel = timeout5.emplace(); + secondsLabel->setText("seconds"); + } + auto timeout6 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput6 = new QLineEdit; + lineEditDurationInput6->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput6->setText( + getSettings()->timeoutDurationPerUnit6); + lineEditDurationInput6->setAlignment(Qt::AlignRight); + timeout6.append(lineEditDurationInput6); + + QComboBox *timeoutDurationUnit6 = new QComboBox(); + timeoutDurationUnit6->addItems(units); + timeoutDurationUnit6->setCurrentText( + getSettings()->timeoutDurationUnit6); + timeout6.append(timeoutDurationUnit6); + + QSpinBox *spinBoxDurationCalculated6 = new QSpinBox; + spinBoxDurationCalculated6->setRange(1, 1209600); + spinBoxDurationCalculated6->setValue( + getSettings()->timeoutDurationInSec6); + spinBoxDurationCalculated6->setReadOnly(true); + spinBoxDurationCalculated6->setAlignment(Qt::AlignRight); + timeout6.append(spinBoxDurationCalculated6); + + QObject::connect(lineEditDurationInput6, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput6, + getSettings()->timeoutDurationUnit6, + *spinBoxDurationCalculated6, + getSettings()->timeoutDurationPerUnit6); + }); + + QObject::connect(spinBoxDurationCalculated6, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated6->value(), + getSettings()->timeoutDurationInSec6); + }); + + QObject::connect(timeoutDurationUnit6, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit6->currentText(), + getSettings()->timeoutDurationUnit6); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput6, + getSettings()->timeoutDurationUnit6, + *spinBoxDurationCalculated6, + getSettings()->timeoutDurationPerUnit6); + }); + + auto secondsLabel = timeout6.emplace(); + secondsLabel->setText("seconds"); + } + + auto timeout7 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput7 = new QLineEdit; + lineEditDurationInput7->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput7->setText( + getSettings()->timeoutDurationPerUnit7); + lineEditDurationInput7->setAlignment(Qt::AlignRight); + timeout7.append(lineEditDurationInput7); + + QComboBox *timeoutDurationUnit7 = new QComboBox(); + timeoutDurationUnit7->addItems(units); + timeoutDurationUnit7->setCurrentText( + getSettings()->timeoutDurationUnit7); + timeout7.append(timeoutDurationUnit7); + + QSpinBox *spinBoxDurationCalculated7 = new QSpinBox; + spinBoxDurationCalculated7->setRange(1, 1209600); + spinBoxDurationCalculated7->setValue( + getSettings()->timeoutDurationInSec7); + spinBoxDurationCalculated7->setReadOnly(true); + spinBoxDurationCalculated7->setAlignment(Qt::AlignRight); + timeout7.append(spinBoxDurationCalculated7); + + QObject::connect(lineEditDurationInput7, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput7, + getSettings()->timeoutDurationUnit7, + *spinBoxDurationCalculated7, + getSettings()->timeoutDurationPerUnit7); + }); + + QObject::connect(spinBoxDurationCalculated7, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated7->value(), + getSettings()->timeoutDurationInSec7); + }); + + QObject::connect(timeoutDurationUnit7, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit7->currentText(), + getSettings()->timeoutDurationUnit7); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput7, + getSettings()->timeoutDurationUnit7, + *spinBoxDurationCalculated7, + getSettings()->timeoutDurationPerUnit7); + }); + + auto secondsLabel = timeout7.emplace(); + secondsLabel->setText("seconds"); + } + auto timeout8 = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput8 = new QLineEdit; + lineEditDurationInput8->setValidator( + new QIntValidator(1, 1209600, this)); + lineEditDurationInput8->setText( + getSettings()->timeoutDurationPerUnit8); + lineEditDurationInput8->setAlignment(Qt::AlignRight); + timeout8.append(lineEditDurationInput8); + + QComboBox *timeoutDurationUnit8 = new QComboBox(); + timeoutDurationUnit8->addItems(units); + timeoutDurationUnit8->setCurrentText( + getSettings()->timeoutDurationUnit8); + timeout8.append(timeoutDurationUnit8); + + QSpinBox *spinBoxDurationCalculated8 = new QSpinBox; + spinBoxDurationCalculated8->setRange(1, 1209600); + spinBoxDurationCalculated8->setValue( + getSettings()->timeoutDurationInSec8); + spinBoxDurationCalculated8->setReadOnly(true); + spinBoxDurationCalculated8->setAlignment(Qt::AlignRight); + timeout8.append(spinBoxDurationCalculated8); + + QObject::connect(lineEditDurationInput8, &QLineEdit::textChanged, + [=] { + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput8, + getSettings()->timeoutDurationUnit8, + *spinBoxDurationCalculated8, + getSettings()->timeoutDurationPerUnit8); + }); + + QObject::connect(spinBoxDurationCalculated8, + qOverload(&QSpinBox::valueChanged), [=] { + AdvancedPage::calculatedDurationChanged( + spinBoxDurationCalculated8->value(), + getSettings()->timeoutDurationInSec8); + }); + + QObject::connect(timeoutDurationUnit8, + &QComboBox::currentTextChanged, [=] { + AdvancedPage::timeoutUnitChanged( + timeoutDurationUnit8->currentText(), + getSettings()->timeoutDurationUnit8); + + AdvancedPage::timeoutDurationChanged( + *lineEditDurationInput8, + getSettings()->timeoutDurationUnit8, + *spinBoxDurationCalculated8, + getSettings()->timeoutDurationPerUnit8); + }); + + auto secondsLabel = timeout8.emplace(); + secondsLabel->setText("seconds"); + } } } +void AdvancedPage::timeoutDurationChanged(QLineEdit &durationPerUnit, + const QString &unit, + QSpinBox &durationInSec, + QStringSetting settingDurationPerUnit) +{ + int valueInUnit = durationPerUnit.text().toInt(); + int valueInSec; + if (unit == "s") + { + valueInSec = valueInUnit; + } + else if (unit == "m") + { + if (valueInUnit > 20160) + { + durationPerUnit.setText("20160"); + return; + } + valueInSec = valueInUnit * 60; + } + else if (unit == "h") + { + if (valueInUnit > 336) + { + durationPerUnit.setText("336"); + return; + } + valueInSec = valueInUnit * 60 * 60; + } + else if (unit == "d") + { + if (valueInUnit > 14) + { + durationPerUnit.setText("14"); + return; + } + valueInSec = valueInUnit * 24 * 60 * 60; + } + else if (unit == "w") + { + if (valueInUnit > 2) + { + durationPerUnit.setText("2"); + return; + } + valueInSec = valueInUnit * 7 * 24 * 60 * 60; + } + + durationInSec.setValue(valueInSec); + settingDurationPerUnit = durationPerUnit.text(); +} +void AdvancedPage::calculatedDurationChanged(const int durationInSec, + IntSetting settingDurationInSec) +{ + settingDurationInSec = durationInSec; +} + +void AdvancedPage::timeoutUnitChanged(const QString newUnit, + QStringSetting settingUnit) +{ + settingUnit = newUnit; +} + } // namespace chatterino diff --git a/src/widgets/settingspages/AdvancedPage.hpp b/src/widgets/settingspages/AdvancedPage.hpp index ecc3d629..26b0fdcd 100644 --- a/src/widgets/settingspages/AdvancedPage.hpp +++ b/src/widgets/settingspages/AdvancedPage.hpp @@ -8,6 +8,17 @@ class AdvancedPage : public SettingsPage { public: AdvancedPage(); + + void timeoutDurationChanged(QLineEdit &durationPerUnit, const QString &unit, + QSpinBox &durationInSec, + QStringSetting settingDurationInUnit); + + void calculatedDurationChanged(const int durationInSec, + IntSetting settingDurationInSec); + + void timeoutUnitChanged(const QString newUnit, QStringSetting settingUnit); + +private: }; } // namespace chatterino From 7a3673e9f649dc0d4bc22826ccf2512573f785b4 Mon Sep 17 00:00:00 2001 From: TranRed Date: Thu, 18 Jul 2019 23:34:40 +0200 Subject: [PATCH 04/29] changed max custom timeout input to 99 simplicity --- src/widgets/settingspages/AdvancedPage.cpp | 36 ++++++++++++---------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index 02831d88..8c0ae16d 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -87,12 +87,16 @@ AdvancedPage::AdvancedPage() auto maxLabel = timeoutLayout.emplace(); maxLabel->setText("Maximum timeout duration is 2 weeks = 14 days = 336 " "hours = 20,160 minutes = 1,209,600 seconds."); + auto allowedLabel = timeoutLayout.emplace(); + allowedLabel->setText("For simplicity only values from 1 to 99 are allowed here." + "Using the units accordingly is highly recommended." + "For abitrary timeout durations use the /timeout command."); auto timeout1 = timeoutLayout.emplace().withoutMargin(); { QLineEdit *lineEditDurationInput1 = new QLineEdit; lineEditDurationInput1->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput1->setText( getSettings()->timeoutDurationPerUnit1); lineEditDurationInput1->setAlignment(Qt::AlignRight); @@ -105,7 +109,7 @@ AdvancedPage::AdvancedPage() timeout1.append(timeoutDurationUnit1); QSpinBox *spinBoxDurationCalculated1 = new QSpinBox; - spinBoxDurationCalculated1->setRange(1, 1209600); + spinBoxDurationCalculated1->setRange(1, 99); spinBoxDurationCalculated1->setValue( getSettings()->timeoutDurationInSec1); spinBoxDurationCalculated1->setReadOnly(true); @@ -149,7 +153,7 @@ AdvancedPage::AdvancedPage() { QLineEdit *lineEditDurationInput2 = new QLineEdit; lineEditDurationInput2->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput2->setText( getSettings()->timeoutDurationPerUnit2); lineEditDurationInput2->setAlignment(Qt::AlignRight); @@ -162,7 +166,7 @@ AdvancedPage::AdvancedPage() timeout2.append(timeoutDurationUnit2); QSpinBox *spinBoxDurationCalculated2 = new QSpinBox; - spinBoxDurationCalculated2->setRange(1, 1209600); + spinBoxDurationCalculated2->setRange(1, 99); spinBoxDurationCalculated2->setValue( getSettings()->timeoutDurationInSec2); spinBoxDurationCalculated2->setReadOnly(true); @@ -206,7 +210,7 @@ AdvancedPage::AdvancedPage() { QLineEdit *lineEditDurationInput3 = new QLineEdit; lineEditDurationInput3->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput3->setText( getSettings()->timeoutDurationPerUnit3); lineEditDurationInput3->setAlignment(Qt::AlignRight); @@ -219,7 +223,7 @@ AdvancedPage::AdvancedPage() timeout3.append(timeoutDurationUnit3); QSpinBox *spinBoxDurationCalculated3 = new QSpinBox; - spinBoxDurationCalculated3->setRange(1, 1209600); + spinBoxDurationCalculated3->setRange(1, 99); spinBoxDurationCalculated3->setValue( getSettings()->timeoutDurationInSec3); spinBoxDurationCalculated3->setReadOnly(true); @@ -262,7 +266,7 @@ AdvancedPage::AdvancedPage() { QLineEdit *lineEditDurationInput4 = new QLineEdit; lineEditDurationInput4->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput4->setText( getSettings()->timeoutDurationPerUnit4); lineEditDurationInput4->setAlignment(Qt::AlignRight); @@ -275,7 +279,7 @@ AdvancedPage::AdvancedPage() timeout4.append(timeoutDurationUnit4); QSpinBox *spinBoxDurationCalculated4 = new QSpinBox; - spinBoxDurationCalculated4->setRange(1, 1209600); + spinBoxDurationCalculated4->setRange(1, 99); spinBoxDurationCalculated4->setValue( getSettings()->timeoutDurationInSec4); spinBoxDurationCalculated4->setReadOnly(true); @@ -318,7 +322,7 @@ AdvancedPage::AdvancedPage() { QLineEdit *lineEditDurationInput5 = new QLineEdit; lineEditDurationInput5->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput5->setText( getSettings()->timeoutDurationPerUnit5); lineEditDurationInput5->setAlignment(Qt::AlignRight); @@ -331,7 +335,7 @@ AdvancedPage::AdvancedPage() timeout5.append(timeoutDurationUnit5); QSpinBox *spinBoxDurationCalculated5 = new QSpinBox; - spinBoxDurationCalculated5->setRange(1, 1209600); + spinBoxDurationCalculated5->setRange(1, 99); spinBoxDurationCalculated5->setValue( getSettings()->timeoutDurationInSec5); spinBoxDurationCalculated5->setReadOnly(true); @@ -374,7 +378,7 @@ AdvancedPage::AdvancedPage() { QLineEdit *lineEditDurationInput6 = new QLineEdit; lineEditDurationInput6->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput6->setText( getSettings()->timeoutDurationPerUnit6); lineEditDurationInput6->setAlignment(Qt::AlignRight); @@ -387,7 +391,7 @@ AdvancedPage::AdvancedPage() timeout6.append(timeoutDurationUnit6); QSpinBox *spinBoxDurationCalculated6 = new QSpinBox; - spinBoxDurationCalculated6->setRange(1, 1209600); + spinBoxDurationCalculated6->setRange(1, 99); spinBoxDurationCalculated6->setValue( getSettings()->timeoutDurationInSec6); spinBoxDurationCalculated6->setReadOnly(true); @@ -431,7 +435,7 @@ AdvancedPage::AdvancedPage() { QLineEdit *lineEditDurationInput7 = new QLineEdit; lineEditDurationInput7->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput7->setText( getSettings()->timeoutDurationPerUnit7); lineEditDurationInput7->setAlignment(Qt::AlignRight); @@ -444,7 +448,7 @@ AdvancedPage::AdvancedPage() timeout7.append(timeoutDurationUnit7); QSpinBox *spinBoxDurationCalculated7 = new QSpinBox; - spinBoxDurationCalculated7->setRange(1, 1209600); + spinBoxDurationCalculated7->setRange(1, 99); spinBoxDurationCalculated7->setValue( getSettings()->timeoutDurationInSec7); spinBoxDurationCalculated7->setReadOnly(true); @@ -487,7 +491,7 @@ AdvancedPage::AdvancedPage() { QLineEdit *lineEditDurationInput8 = new QLineEdit; lineEditDurationInput8->setValidator( - new QIntValidator(1, 1209600, this)); + new QIntValidator(1, 99, this)); lineEditDurationInput8->setText( getSettings()->timeoutDurationPerUnit8); lineEditDurationInput8->setAlignment(Qt::AlignRight); @@ -500,7 +504,7 @@ AdvancedPage::AdvancedPage() timeout8.append(timeoutDurationUnit8); QSpinBox *spinBoxDurationCalculated8 = new QSpinBox; - spinBoxDurationCalculated8->setRange(1, 1209600); + spinBoxDurationCalculated8->setRange(1, 99); spinBoxDurationCalculated8->setValue( getSettings()->timeoutDurationInSec8); spinBoxDurationCalculated8->setReadOnly(true); From c45bb144e99d03b2c395db733d4899d592667ef7 Mon Sep 17 00:00:00 2001 From: TranRed Date: Fri, 19 Jul 2019 13:15:50 +0200 Subject: [PATCH 05/29] Fixed spinbox ranges --- src/widgets/settingspages/AdvancedPage.cpp | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index 8c0ae16d..d00c097a 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -88,9 +88,12 @@ AdvancedPage::AdvancedPage() maxLabel->setText("Maximum timeout duration is 2 weeks = 14 days = 336 " "hours = 20,160 minutes = 1,209,600 seconds."); auto allowedLabel = timeoutLayout.emplace(); - allowedLabel->setText("For simplicity only values from 1 to 99 are allowed here." - "Using the units accordingly is highly recommended." - "For abitrary timeout durations use the /timeout command."); + allowedLabel->setText( + "For simplicity only values from 1 to 99 are allowed here. Using " + "the units accordingly is highly recommended."); + auto commandLabel = timeoutLayout.emplace(); + commandLabel->setText( + "For abitrary timeout durations use the /timeout command."); auto timeout1 = timeoutLayout.emplace().withoutMargin(); { @@ -109,7 +112,7 @@ AdvancedPage::AdvancedPage() timeout1.append(timeoutDurationUnit1); QSpinBox *spinBoxDurationCalculated1 = new QSpinBox; - spinBoxDurationCalculated1->setRange(1, 99); + spinBoxDurationCalculated1->setRange(1, 1209600); spinBoxDurationCalculated1->setValue( getSettings()->timeoutDurationInSec1); spinBoxDurationCalculated1->setReadOnly(true); @@ -166,7 +169,7 @@ AdvancedPage::AdvancedPage() timeout2.append(timeoutDurationUnit2); QSpinBox *spinBoxDurationCalculated2 = new QSpinBox; - spinBoxDurationCalculated2->setRange(1, 99); + spinBoxDurationCalculated2->setRange(1, 1209600); spinBoxDurationCalculated2->setValue( getSettings()->timeoutDurationInSec2); spinBoxDurationCalculated2->setReadOnly(true); @@ -223,7 +226,7 @@ AdvancedPage::AdvancedPage() timeout3.append(timeoutDurationUnit3); QSpinBox *spinBoxDurationCalculated3 = new QSpinBox; - spinBoxDurationCalculated3->setRange(1, 99); + spinBoxDurationCalculated3->setRange(1, 1209600); spinBoxDurationCalculated3->setValue( getSettings()->timeoutDurationInSec3); spinBoxDurationCalculated3->setReadOnly(true); @@ -279,7 +282,7 @@ AdvancedPage::AdvancedPage() timeout4.append(timeoutDurationUnit4); QSpinBox *spinBoxDurationCalculated4 = new QSpinBox; - spinBoxDurationCalculated4->setRange(1, 99); + spinBoxDurationCalculated4->setRange(1, 1209600); spinBoxDurationCalculated4->setValue( getSettings()->timeoutDurationInSec4); spinBoxDurationCalculated4->setReadOnly(true); @@ -335,7 +338,7 @@ AdvancedPage::AdvancedPage() timeout5.append(timeoutDurationUnit5); QSpinBox *spinBoxDurationCalculated5 = new QSpinBox; - spinBoxDurationCalculated5->setRange(1, 99); + spinBoxDurationCalculated5->setRange(1, 1209600); spinBoxDurationCalculated5->setValue( getSettings()->timeoutDurationInSec5); spinBoxDurationCalculated5->setReadOnly(true); @@ -391,7 +394,7 @@ AdvancedPage::AdvancedPage() timeout6.append(timeoutDurationUnit6); QSpinBox *spinBoxDurationCalculated6 = new QSpinBox; - spinBoxDurationCalculated6->setRange(1, 99); + spinBoxDurationCalculated6->setRange(1, 1209600); spinBoxDurationCalculated6->setValue( getSettings()->timeoutDurationInSec6); spinBoxDurationCalculated6->setReadOnly(true); @@ -448,7 +451,7 @@ AdvancedPage::AdvancedPage() timeout7.append(timeoutDurationUnit7); QSpinBox *spinBoxDurationCalculated7 = new QSpinBox; - spinBoxDurationCalculated7->setRange(1, 99); + spinBoxDurationCalculated7->setRange(1, 1209600); spinBoxDurationCalculated7->setValue( getSettings()->timeoutDurationInSec7); spinBoxDurationCalculated7->setReadOnly(true); @@ -504,7 +507,7 @@ AdvancedPage::AdvancedPage() timeout8.append(timeoutDurationUnit8); QSpinBox *spinBoxDurationCalculated8 = new QSpinBox; - spinBoxDurationCalculated8->setRange(1, 99); + spinBoxDurationCalculated8->setRange(1, 1209600); spinBoxDurationCalculated8->setValue( getSettings()->timeoutDurationInSec8); spinBoxDurationCalculated8->setReadOnly(true); From 00ad80d93de1315450ac7f34e0601ccf5b64ead1 Mon Sep 17 00:00:00 2001 From: TranRed Date: Fri, 19 Jul 2019 16:20:31 +0200 Subject: [PATCH 06/29] unscuffed settings tab removed copy past cody in favor of an itsy-bitsy more flexible solution --- src/widgets/settingspages/AdvancedPage.cpp | 684 +++++++-------------- src/widgets/settingspages/AdvancedPage.hpp | 26 +- 2 files changed, 234 insertions(+), 476 deletions(-) diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index d00c097a..17375323 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -73,6 +73,8 @@ AdvancedPage::AdvancedPage() }); // Logs end + + // Timeoutbuttons QStringList units = QStringList(); units.append("s"); units.append("m"); @@ -80,6 +82,65 @@ AdvancedPage::AdvancedPage() units.append("d"); units.append("w"); + QStringList initDurationsPerUnit; + initDurationsPerUnit = QStringList(); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit1)); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit2)); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit3)); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit4)); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit5)); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit6)); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit7)); + initDurationsPerUnit.append( + QString(getSettings()->timeoutDurationPerUnit8)); + + QStringList::iterator itDurationPerUnit; + itDurationPerUnit = initDurationsPerUnit.begin(); + + QStringList initUnits; + initUnits = QStringList(); + initUnits.append(QString(getSettings()->timeoutDurationUnit1)); + initUnits.append(QString(getSettings()->timeoutDurationUnit2)); + initUnits.append(QString(getSettings()->timeoutDurationUnit3)); + initUnits.append(QString(getSettings()->timeoutDurationUnit4)); + initUnits.append(QString(getSettings()->timeoutDurationUnit5)); + initUnits.append(QString(getSettings()->timeoutDurationUnit6)); + initUnits.append(QString(getSettings()->timeoutDurationUnit7)); + initUnits.append(QString(getSettings()->timeoutDurationUnit8)); + + QStringList::iterator itUnit; + itUnit = initUnits.begin(); + + std::list initDurationsInSec; + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec1)); + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec2)); + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec3)); + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec4)); + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec5)); + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec6)); + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec7)); + initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec8)); + + std::list::iterator itDurationInSec; + itDurationInSec = initDurationsInSec.begin(); + + for (int i = 0; i < 8; i++) + { + durationInputs.append(new QLineEdit()); + unitInputs.append(new QComboBox()); + durationsCalculated.append(new QSpinBox()); + } + itDurationInput = durationInputs.begin(); + itUnitInput = unitInputs.begin(); + itDurationsCalculated = durationsCalculated.begin(); + auto timeoutLayout = tabs.appendTab(new QVBoxLayout, "Timeouts"); auto infoLabel = timeoutLayout.emplace(); infoLabel->setText("Customize your timeout buttons in seconds (s), " @@ -95,494 +156,95 @@ AdvancedPage::AdvancedPage() commandLabel->setText( "For abitrary timeout durations use the /timeout command."); - auto timeout1 = timeoutLayout.emplace().withoutMargin(); + // build one line for each customizable button + for (int i = 0; i < 8; i++) { - QLineEdit *lineEditDurationInput1 = new QLineEdit; - lineEditDurationInput1->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput1->setText( - getSettings()->timeoutDurationPerUnit1); - lineEditDurationInput1->setAlignment(Qt::AlignRight); - timeout1.append(lineEditDurationInput1); + auto timeout = timeoutLayout.emplace().withoutMargin(); + { + QLineEdit *lineEditDurationInput = *itDurationInput; + lineEditDurationInput->setObjectName(QString::number(i)); + lineEditDurationInput->setValidator( + new QIntValidator(1, 99, this)); + lineEditDurationInput->setText(*itDurationPerUnit); + lineEditDurationInput->setAlignment(Qt::AlignRight); + timeout.append(lineEditDurationInput); - QComboBox *timeoutDurationUnit1 = new QComboBox(); - timeoutDurationUnit1->addItems(units); - timeoutDurationUnit1->setCurrentText( - getSettings()->timeoutDurationUnit1); - timeout1.append(timeoutDurationUnit1); + QComboBox *timeoutDurationUnit = *itUnitInput; + timeoutDurationUnit->setObjectName(QString::number(i)); + timeoutDurationUnit->addItems(units); + timeoutDurationUnit->setCurrentText(*itUnit); + timeout.append(timeoutDurationUnit); - QSpinBox *spinBoxDurationCalculated1 = new QSpinBox; - spinBoxDurationCalculated1->setRange(1, 1209600); - spinBoxDurationCalculated1->setValue( - getSettings()->timeoutDurationInSec1); - spinBoxDurationCalculated1->setReadOnly(true); - spinBoxDurationCalculated1->setAlignment(Qt::AlignRight); - timeout1.append(spinBoxDurationCalculated1); + QSpinBox *spinBoxDurationCalculated = *itDurationsCalculated; + spinBoxDurationCalculated->setObjectName(QString::number(i)); + spinBoxDurationCalculated->setRange(1, 1209600); + spinBoxDurationCalculated->setValue(*itDurationInSec); + spinBoxDurationCalculated->setReadOnly(true); + spinBoxDurationCalculated->setAlignment(Qt::AlignRight); + timeout.append(spinBoxDurationCalculated); - QObject::connect(lineEditDurationInput1, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput1, - getSettings()->timeoutDurationUnit1, - *spinBoxDurationCalculated1, - getSettings()->timeoutDurationPerUnit1); - }); + QObject::connect(lineEditDurationInput, &QLineEdit::textChanged, + this, &AdvancedPage::timeoutDurationChanged); - QObject::connect(spinBoxDurationCalculated1, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated1->value(), - getSettings()->timeoutDurationInSec1); - }); + QObject::connect(timeoutDurationUnit, + &QComboBox::currentTextChanged, this, + &AdvancedPage::timeoutUnitChanged); - QObject::connect(timeoutDurationUnit1, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit1->currentText(), - getSettings()->timeoutDurationUnit1); + QObject::connect(spinBoxDurationCalculated, + qOverload(&QSpinBox::valueChanged), this, + &AdvancedPage::calculatedDurationChanged); - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput1, - getSettings()->timeoutDurationUnit1, - *spinBoxDurationCalculated1, - getSettings()->timeoutDurationPerUnit1); - }); + auto secondsLabel = timeout.emplace(); + secondsLabel->setText("seconds"); + } - auto secondsLabel = timeout1.emplace(); - secondsLabel->setText("seconds"); - } - - auto timeout2 = timeoutLayout.emplace().withoutMargin(); - { - QLineEdit *lineEditDurationInput2 = new QLineEdit; - lineEditDurationInput2->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput2->setText( - getSettings()->timeoutDurationPerUnit2); - lineEditDurationInput2->setAlignment(Qt::AlignRight); - timeout2.append(lineEditDurationInput2); - - QComboBox *timeoutDurationUnit2 = new QComboBox(); - timeoutDurationUnit2->addItems(units); - timeoutDurationUnit2->setCurrentText( - getSettings()->timeoutDurationUnit2); - timeout2.append(timeoutDurationUnit2); - - QSpinBox *spinBoxDurationCalculated2 = new QSpinBox; - spinBoxDurationCalculated2->setRange(1, 1209600); - spinBoxDurationCalculated2->setValue( - getSettings()->timeoutDurationInSec2); - spinBoxDurationCalculated2->setReadOnly(true); - spinBoxDurationCalculated2->setAlignment(Qt::AlignRight); - timeout2.append(spinBoxDurationCalculated2); - - QObject::connect(lineEditDurationInput2, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput2, - getSettings()->timeoutDurationUnit2, - *spinBoxDurationCalculated2, - getSettings()->timeoutDurationPerUnit2); - }); - - QObject::connect(spinBoxDurationCalculated2, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated2->value(), - getSettings()->timeoutDurationInSec2); - }); - - QObject::connect(timeoutDurationUnit2, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit2->currentText(), - getSettings()->timeoutDurationUnit2); - - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput2, - getSettings()->timeoutDurationUnit2, - *spinBoxDurationCalculated2, - getSettings()->timeoutDurationPerUnit2); - }); - - auto secondsLabel = timeout2.emplace(); - secondsLabel->setText("seconds"); - } - - auto timeout3 = timeoutLayout.emplace().withoutMargin(); - { - QLineEdit *lineEditDurationInput3 = new QLineEdit; - lineEditDurationInput3->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput3->setText( - getSettings()->timeoutDurationPerUnit3); - lineEditDurationInput3->setAlignment(Qt::AlignRight); - timeout3.append(lineEditDurationInput3); - - QComboBox *timeoutDurationUnit3 = new QComboBox(); - timeoutDurationUnit3->addItems(units); - timeoutDurationUnit3->setCurrentText( - getSettings()->timeoutDurationUnit3); - timeout3.append(timeoutDurationUnit3); - - QSpinBox *spinBoxDurationCalculated3 = new QSpinBox; - spinBoxDurationCalculated3->setRange(1, 1209600); - spinBoxDurationCalculated3->setValue( - getSettings()->timeoutDurationInSec3); - spinBoxDurationCalculated3->setReadOnly(true); - spinBoxDurationCalculated3->setAlignment(Qt::AlignRight); - timeout3.append(spinBoxDurationCalculated3); - - QObject::connect(lineEditDurationInput3, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput3, - getSettings()->timeoutDurationUnit3, - *spinBoxDurationCalculated3, - getSettings()->timeoutDurationPerUnit3); - }); - - QObject::connect(spinBoxDurationCalculated3, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated3->value(), - getSettings()->timeoutDurationInSec3); - }); - - QObject::connect(timeoutDurationUnit3, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit3->currentText(), - getSettings()->timeoutDurationUnit3); - - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput3, - getSettings()->timeoutDurationUnit3, - *spinBoxDurationCalculated3, - getSettings()->timeoutDurationPerUnit3); - }); - - auto secondsLabel = timeout3.emplace(); - secondsLabel->setText("seconds"); - } - auto timeout4 = timeoutLayout.emplace().withoutMargin(); - { - QLineEdit *lineEditDurationInput4 = new QLineEdit; - lineEditDurationInput4->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput4->setText( - getSettings()->timeoutDurationPerUnit4); - lineEditDurationInput4->setAlignment(Qt::AlignRight); - timeout4.append(lineEditDurationInput4); - - QComboBox *timeoutDurationUnit4 = new QComboBox(); - timeoutDurationUnit4->addItems(units); - timeoutDurationUnit4->setCurrentText( - getSettings()->timeoutDurationUnit4); - timeout4.append(timeoutDurationUnit4); - - QSpinBox *spinBoxDurationCalculated4 = new QSpinBox; - spinBoxDurationCalculated4->setRange(1, 1209600); - spinBoxDurationCalculated4->setValue( - getSettings()->timeoutDurationInSec4); - spinBoxDurationCalculated4->setReadOnly(true); - spinBoxDurationCalculated4->setAlignment(Qt::AlignRight); - timeout4.append(spinBoxDurationCalculated4); - - QObject::connect(lineEditDurationInput4, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput4, - getSettings()->timeoutDurationUnit4, - *spinBoxDurationCalculated4, - getSettings()->timeoutDurationPerUnit4); - }); - - QObject::connect(spinBoxDurationCalculated4, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated4->value(), - getSettings()->timeoutDurationInSec4); - }); - - QObject::connect(timeoutDurationUnit4, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit4->currentText(), - getSettings()->timeoutDurationUnit4); - - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput4, - getSettings()->timeoutDurationUnit4, - *spinBoxDurationCalculated4, - getSettings()->timeoutDurationPerUnit4); - }); - - auto secondsLabel = timeout4.emplace(); - secondsLabel->setText("seconds"); - } - auto timeout5 = timeoutLayout.emplace().withoutMargin(); - { - QLineEdit *lineEditDurationInput5 = new QLineEdit; - lineEditDurationInput5->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput5->setText( - getSettings()->timeoutDurationPerUnit5); - lineEditDurationInput5->setAlignment(Qt::AlignRight); - timeout5.append(lineEditDurationInput5); - - QComboBox *timeoutDurationUnit5 = new QComboBox(); - timeoutDurationUnit5->addItems(units); - timeoutDurationUnit5->setCurrentText( - getSettings()->timeoutDurationUnit5); - timeout5.append(timeoutDurationUnit5); - - QSpinBox *spinBoxDurationCalculated5 = new QSpinBox; - spinBoxDurationCalculated5->setRange(1, 1209600); - spinBoxDurationCalculated5->setValue( - getSettings()->timeoutDurationInSec5); - spinBoxDurationCalculated5->setReadOnly(true); - spinBoxDurationCalculated5->setAlignment(Qt::AlignRight); - timeout5.append(spinBoxDurationCalculated5); - - QObject::connect(lineEditDurationInput5, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput5, - getSettings()->timeoutDurationUnit5, - *spinBoxDurationCalculated5, - getSettings()->timeoutDurationPerUnit5); - }); - - QObject::connect(spinBoxDurationCalculated5, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated5->value(), - getSettings()->timeoutDurationInSec5); - }); - - QObject::connect(timeoutDurationUnit5, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit5->currentText(), - getSettings()->timeoutDurationUnit5); - - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput5, - getSettings()->timeoutDurationUnit5, - *spinBoxDurationCalculated5, - getSettings()->timeoutDurationPerUnit5); - }); - - auto secondsLabel = timeout5.emplace(); - secondsLabel->setText("seconds"); - } - auto timeout6 = timeoutLayout.emplace().withoutMargin(); - { - QLineEdit *lineEditDurationInput6 = new QLineEdit; - lineEditDurationInput6->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput6->setText( - getSettings()->timeoutDurationPerUnit6); - lineEditDurationInput6->setAlignment(Qt::AlignRight); - timeout6.append(lineEditDurationInput6); - - QComboBox *timeoutDurationUnit6 = new QComboBox(); - timeoutDurationUnit6->addItems(units); - timeoutDurationUnit6->setCurrentText( - getSettings()->timeoutDurationUnit6); - timeout6.append(timeoutDurationUnit6); - - QSpinBox *spinBoxDurationCalculated6 = new QSpinBox; - spinBoxDurationCalculated6->setRange(1, 1209600); - spinBoxDurationCalculated6->setValue( - getSettings()->timeoutDurationInSec6); - spinBoxDurationCalculated6->setReadOnly(true); - spinBoxDurationCalculated6->setAlignment(Qt::AlignRight); - timeout6.append(spinBoxDurationCalculated6); - - QObject::connect(lineEditDurationInput6, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput6, - getSettings()->timeoutDurationUnit6, - *spinBoxDurationCalculated6, - getSettings()->timeoutDurationPerUnit6); - }); - - QObject::connect(spinBoxDurationCalculated6, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated6->value(), - getSettings()->timeoutDurationInSec6); - }); - - QObject::connect(timeoutDurationUnit6, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit6->currentText(), - getSettings()->timeoutDurationUnit6); - - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput6, - getSettings()->timeoutDurationUnit6, - *spinBoxDurationCalculated6, - getSettings()->timeoutDurationPerUnit6); - }); - - auto secondsLabel = timeout6.emplace(); - secondsLabel->setText("seconds"); - } - - auto timeout7 = timeoutLayout.emplace().withoutMargin(); - { - QLineEdit *lineEditDurationInput7 = new QLineEdit; - lineEditDurationInput7->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput7->setText( - getSettings()->timeoutDurationPerUnit7); - lineEditDurationInput7->setAlignment(Qt::AlignRight); - timeout7.append(lineEditDurationInput7); - - QComboBox *timeoutDurationUnit7 = new QComboBox(); - timeoutDurationUnit7->addItems(units); - timeoutDurationUnit7->setCurrentText( - getSettings()->timeoutDurationUnit7); - timeout7.append(timeoutDurationUnit7); - - QSpinBox *spinBoxDurationCalculated7 = new QSpinBox; - spinBoxDurationCalculated7->setRange(1, 1209600); - spinBoxDurationCalculated7->setValue( - getSettings()->timeoutDurationInSec7); - spinBoxDurationCalculated7->setReadOnly(true); - spinBoxDurationCalculated7->setAlignment(Qt::AlignRight); - timeout7.append(spinBoxDurationCalculated7); - - QObject::connect(lineEditDurationInput7, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput7, - getSettings()->timeoutDurationUnit7, - *spinBoxDurationCalculated7, - getSettings()->timeoutDurationPerUnit7); - }); - - QObject::connect(spinBoxDurationCalculated7, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated7->value(), - getSettings()->timeoutDurationInSec7); - }); - - QObject::connect(timeoutDurationUnit7, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit7->currentText(), - getSettings()->timeoutDurationUnit7); - - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput7, - getSettings()->timeoutDurationUnit7, - *spinBoxDurationCalculated7, - getSettings()->timeoutDurationPerUnit7); - }); - - auto secondsLabel = timeout7.emplace(); - secondsLabel->setText("seconds"); - } - auto timeout8 = timeoutLayout.emplace().withoutMargin(); - { - QLineEdit *lineEditDurationInput8 = new QLineEdit; - lineEditDurationInput8->setValidator( - new QIntValidator(1, 99, this)); - lineEditDurationInput8->setText( - getSettings()->timeoutDurationPerUnit8); - lineEditDurationInput8->setAlignment(Qt::AlignRight); - timeout8.append(lineEditDurationInput8); - - QComboBox *timeoutDurationUnit8 = new QComboBox(); - timeoutDurationUnit8->addItems(units); - timeoutDurationUnit8->setCurrentText( - getSettings()->timeoutDurationUnit8); - timeout8.append(timeoutDurationUnit8); - - QSpinBox *spinBoxDurationCalculated8 = new QSpinBox; - spinBoxDurationCalculated8->setRange(1, 1209600); - spinBoxDurationCalculated8->setValue( - getSettings()->timeoutDurationInSec8); - spinBoxDurationCalculated8->setReadOnly(true); - spinBoxDurationCalculated8->setAlignment(Qt::AlignRight); - timeout8.append(spinBoxDurationCalculated8); - - QObject::connect(lineEditDurationInput8, &QLineEdit::textChanged, - [=] { - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput8, - getSettings()->timeoutDurationUnit8, - *spinBoxDurationCalculated8, - getSettings()->timeoutDurationPerUnit8); - }); - - QObject::connect(spinBoxDurationCalculated8, - qOverload(&QSpinBox::valueChanged), [=] { - AdvancedPage::calculatedDurationChanged( - spinBoxDurationCalculated8->value(), - getSettings()->timeoutDurationInSec8); - }); - - QObject::connect(timeoutDurationUnit8, - &QComboBox::currentTextChanged, [=] { - AdvancedPage::timeoutUnitChanged( - timeoutDurationUnit8->currentText(), - getSettings()->timeoutDurationUnit8); - - AdvancedPage::timeoutDurationChanged( - *lineEditDurationInput8, - getSettings()->timeoutDurationUnit8, - *spinBoxDurationCalculated8, - getSettings()->timeoutDurationPerUnit8); - }); - - auto secondsLabel = timeout8.emplace(); - secondsLabel->setText("seconds"); + ++itDurationPerUnit; + ++itUnit; + ++itDurationInSec; + ++itDurationInput; + ++itUnitInput; + ++itDurationsCalculated; } } + // Timeoutbuttons end } -void AdvancedPage::timeoutDurationChanged(QLineEdit &durationPerUnit, - const QString &unit, - QSpinBox &durationInSec, - QStringSetting settingDurationPerUnit) +void AdvancedPage::timeoutDurationChanged(const QString &newDuration) { - int valueInUnit = durationPerUnit.text().toInt(); + QObject *sender = QObject::sender(); + int index = sender->objectName().toInt(); + + itDurationInput = durationInputs.begin() + index; + QLineEdit *durationPerUnit = *itDurationInput; + + itUnitInput = unitInputs.begin() + index; + QComboBox *cbUnit = *itUnitInput; + QString unit = cbUnit->currentText(); + + itDurationsCalculated = durationsCalculated.begin() + index; + QSpinBox *sbDurationInSec = *itDurationsCalculated; + + int valueInUnit = newDuration.toInt(); int valueInSec; + log(newDuration); + log(unit); if (unit == "s") { valueInSec = valueInUnit; } else if (unit == "m") { - if (valueInUnit > 20160) - { - durationPerUnit.setText("20160"); - return; - } valueInSec = valueInUnit * 60; } else if (unit == "h") { - if (valueInUnit > 336) - { - durationPerUnit.setText("336"); - return; - } valueInSec = valueInUnit * 60 * 60; } else if (unit == "d") { if (valueInUnit > 14) { - durationPerUnit.setText("14"); + durationPerUnit->setText("14"); return; } valueInSec = valueInUnit * 24 * 60 * 60; @@ -591,25 +253,113 @@ void AdvancedPage::timeoutDurationChanged(QLineEdit &durationPerUnit, { if (valueInUnit > 2) { - durationPerUnit.setText("2"); + durationPerUnit->setText("2"); return; } valueInSec = valueInUnit * 7 * 24 * 60 * 60; } - durationInSec.setValue(valueInSec); - settingDurationPerUnit = durationPerUnit.text(); + sbDurationInSec->setValue(valueInSec); + + switch (index) + { + case 0: + getSettings()->timeoutDurationPerUnit1 = newDuration; + break; + case 1: + getSettings()->timeoutDurationPerUnit2 = newDuration; + break; + case 2: + getSettings()->timeoutDurationPerUnit3 = newDuration; + break; + case 3: + getSettings()->timeoutDurationPerUnit4 = newDuration; + break; + case 4: + getSettings()->timeoutDurationPerUnit5 = newDuration; + break; + case 5: + getSettings()->timeoutDurationPerUnit6 = newDuration; + break; + case 6: + getSettings()->timeoutDurationPerUnit7 = newDuration; + break; + case 7: + getSettings()->timeoutDurationPerUnit8 = newDuration; + break; + } } -void AdvancedPage::calculatedDurationChanged(const int durationInSec, - IntSetting settingDurationInSec) +void AdvancedPage::calculatedDurationChanged(const int &newDurationInSec) { - settingDurationInSec = durationInSec; + QObject *sender = QObject::sender(); + int index = sender->objectName().toInt(); + + switch (index) + { + case 0: + getSettings()->timeoutDurationInSec1 = newDurationInSec; + break; + case 1: + getSettings()->timeoutDurationInSec2 = newDurationInSec; + break; + case 2: + getSettings()->timeoutDurationInSec3 = newDurationInSec; + break; + case 3: + getSettings()->timeoutDurationInSec4 = newDurationInSec; + break; + case 4: + getSettings()->timeoutDurationInSec5 = newDurationInSec; + break; + case 5: + getSettings()->timeoutDurationInSec6 = newDurationInSec; + break; + case 6: + getSettings()->timeoutDurationInSec7 = newDurationInSec; + break; + case 7: + getSettings()->timeoutDurationInSec8 = newDurationInSec; + break; + } } -void AdvancedPage::timeoutUnitChanged(const QString newUnit, - QStringSetting settingUnit) +void AdvancedPage::timeoutUnitChanged(const QString &newUnit) { - settingUnit = newUnit; + QObject *sender = QObject::sender(); + int index = sender->objectName().toInt(); + + switch (index) + { + case 0: + getSettings()->timeoutDurationUnit1 = newUnit; + break; + case 1: + getSettings()->timeoutDurationUnit2 = newUnit; + break; + case 2: + getSettings()->timeoutDurationUnit3 = newUnit; + break; + case 3: + getSettings()->timeoutDurationUnit4 = newUnit; + break; + case 4: + getSettings()->timeoutDurationUnit5 = newUnit; + break; + case 5: + getSettings()->timeoutDurationUnit6 = newUnit; + break; + case 6: + getSettings()->timeoutDurationUnit7 = newUnit; + break; + case 7: + getSettings()->timeoutDurationUnit8 = newUnit; + break; + } + + itDurationInput = durationInputs.begin() + index; + QLineEdit *durationPerUnit = *itDurationInput; + + AdvancedPage::timeoutDurationChanged(durationPerUnit->text()); } } // namespace chatterino diff --git a/src/widgets/settingspages/AdvancedPage.hpp b/src/widgets/settingspages/AdvancedPage.hpp index 26b0fdcd..d7729425 100644 --- a/src/widgets/settingspages/AdvancedPage.hpp +++ b/src/widgets/settingspages/AdvancedPage.hpp @@ -9,16 +9,24 @@ class AdvancedPage : public SettingsPage public: AdvancedPage(); - void timeoutDurationChanged(QLineEdit &durationPerUnit, const QString &unit, - QSpinBox &durationInSec, - QStringSetting settingDurationInUnit); - - void calculatedDurationChanged(const int durationInSec, - IntSetting settingDurationInSec); - - void timeoutUnitChanged(const QString newUnit, QStringSetting settingUnit); - private: + // list needed for dynamic timeout settings + QList durationInputs; + QList unitInputs; + QList durationsCalculated; + + // iterators used in dynamic timeout settings + + QList::iterator itDurationInput; + QList::iterator itUnitInput; + QList::iterator itDurationsCalculated; + +private slots: + void timeoutDurationChanged(const QString &newDuration); + + void calculatedDurationChanged(const int &newDurationInSec); + + void timeoutUnitChanged(const QString &newUnit); }; } // namespace chatterino From dc01cbf2a3c57493cf1b4e52668a442c6dc6ae4f Mon Sep 17 00:00:00 2001 From: TranRed Date: Fri, 19 Jul 2019 17:34:25 +0200 Subject: [PATCH 07/29] simplified settings page UI simplfied UI and removed unneccessary code --- src/widgets/settingspages/AdvancedPage.cpp | 116 ++++++--------------- src/widgets/settingspages/AdvancedPage.hpp | 6 -- 2 files changed, 32 insertions(+), 90 deletions(-) diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index 17375323..98f36f20 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -3,7 +3,6 @@ #include "Application.hpp" #include "controllers/taggedusers/TaggedUsersController.hpp" #include "controllers/taggedusers/TaggedUsersModel.hpp" -#include "debug/Log.hpp" #include "singletons/Logging.hpp" #include "singletons/Paths.hpp" #include "util/Helpers.hpp" @@ -118,55 +117,46 @@ AdvancedPage::AdvancedPage() QStringList::iterator itUnit; itUnit = initUnits.begin(); - std::list initDurationsInSec; - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec1)); - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec2)); - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec3)); - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec4)); - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec5)); - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec6)); - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec7)); - initDurationsInSec.push_back(int(getSettings()->timeoutDurationInSec8)); - - std::list::iterator itDurationInSec; - itDurationInSec = initDurationsInSec.begin(); - for (int i = 0; i < 8; i++) { durationInputs.append(new QLineEdit()); unitInputs.append(new QComboBox()); - durationsCalculated.append(new QSpinBox()); } itDurationInput = durationInputs.begin(); itUnitInput = unitInputs.begin(); - itDurationsCalculated = durationsCalculated.begin(); auto timeoutLayout = tabs.appendTab(new QVBoxLayout, "Timeouts"); - auto infoLabel = timeoutLayout.emplace(); - infoLabel->setText("Customize your timeout buttons in seconds (s), " - "minutes (m), hours (h), days (d) or weeks (w)."); - auto maxLabel = timeoutLayout.emplace(); - maxLabel->setText("Maximum timeout duration is 2 weeks = 14 days = 336 " - "hours = 20,160 minutes = 1,209,600 seconds."); - auto allowedLabel = timeoutLayout.emplace(); - allowedLabel->setText( - "For simplicity only values from 1 to 99 are allowed here. Using " - "the units accordingly is highly recommended."); - auto commandLabel = timeoutLayout.emplace(); - commandLabel->setText( - "For abitrary timeout durations use the /timeout command."); + auto texts = timeoutLayout.emplace().withoutMargin(); + { + auto infoLabel = texts.emplace(); + infoLabel->setText( + "Customize your timeout buttons in seconds (s), " + "minutes (m), hours (h), days (d) or weeks (w)."); + + infoLabel->setAlignment(Qt::AlignCenter); + + auto maxLabel = texts.emplace(); + maxLabel->setText("(maximum timeout duration = 2 w)"); + maxLabel->setAlignment(Qt::AlignCenter); + } + texts->setContentsMargins(0, 0, 0, 15); + texts->setSizeConstraint(QLayout::SetMaximumSize); // build one line for each customizable button for (int i = 0; i < 8; i++) { auto timeout = timeoutLayout.emplace().withoutMargin(); { + auto buttonLabel = timeout.emplace(); + buttonLabel->setText("Button " + QString::number(i + 1) + ": "); + QLineEdit *lineEditDurationInput = *itDurationInput; lineEditDurationInput->setObjectName(QString::number(i)); lineEditDurationInput->setValidator( new QIntValidator(1, 99, this)); lineEditDurationInput->setText(*itDurationPerUnit); lineEditDurationInput->setAlignment(Qt::AlignRight); + lineEditDurationInput->setMaximumWidth(30); timeout.append(lineEditDurationInput); QComboBox *timeoutDurationUnit = *itUnitInput; @@ -175,14 +165,6 @@ AdvancedPage::AdvancedPage() timeoutDurationUnit->setCurrentText(*itUnit); timeout.append(timeoutDurationUnit); - QSpinBox *spinBoxDurationCalculated = *itDurationsCalculated; - spinBoxDurationCalculated->setObjectName(QString::number(i)); - spinBoxDurationCalculated->setRange(1, 1209600); - spinBoxDurationCalculated->setValue(*itDurationInSec); - spinBoxDurationCalculated->setReadOnly(true); - spinBoxDurationCalculated->setAlignment(Qt::AlignRight); - timeout.append(spinBoxDurationCalculated); - QObject::connect(lineEditDurationInput, &QLineEdit::textChanged, this, &AdvancedPage::timeoutDurationChanged); @@ -190,21 +172,18 @@ AdvancedPage::AdvancedPage() &QComboBox::currentTextChanged, this, &AdvancedPage::timeoutUnitChanged); - QObject::connect(spinBoxDurationCalculated, - qOverload(&QSpinBox::valueChanged), this, - &AdvancedPage::calculatedDurationChanged); - auto secondsLabel = timeout.emplace(); - secondsLabel->setText("seconds"); + timeout->addStretch(); } + timeout->setContentsMargins(40, 0, 0, 0); + timeout->setSizeConstraint(QLayout::SetMaximumSize); ++itDurationPerUnit; ++itUnit; - ++itDurationInSec; ++itDurationInput; ++itUnitInput; - ++itDurationsCalculated; } + timeoutLayout->addStretch(); } // Timeoutbuttons end } @@ -221,13 +200,9 @@ void AdvancedPage::timeoutDurationChanged(const QString &newDuration) QComboBox *cbUnit = *itUnitInput; QString unit = cbUnit->currentText(); - itDurationsCalculated = durationsCalculated.begin() + index; - QSpinBox *sbDurationInSec = *itDurationsCalculated; - int valueInUnit = newDuration.toInt(); int valueInSec; - log(newDuration); - log(unit); + if (unit == "s") { valueInSec = valueInUnit; @@ -259,66 +234,39 @@ void AdvancedPage::timeoutDurationChanged(const QString &newDuration) valueInSec = valueInUnit * 7 * 24 * 60 * 60; } - sbDurationInSec->setValue(valueInSec); - switch (index) { case 0: getSettings()->timeoutDurationPerUnit1 = newDuration; + getSettings()->timeoutDurationInSec1 = valueInSec; break; case 1: getSettings()->timeoutDurationPerUnit2 = newDuration; + getSettings()->timeoutDurationInSec2 = valueInSec; break; case 2: getSettings()->timeoutDurationPerUnit3 = newDuration; + getSettings()->timeoutDurationInSec3 = valueInSec; break; case 3: getSettings()->timeoutDurationPerUnit4 = newDuration; + getSettings()->timeoutDurationInSec4 = valueInSec; break; case 4: getSettings()->timeoutDurationPerUnit5 = newDuration; + getSettings()->timeoutDurationInSec5 = valueInSec; break; case 5: getSettings()->timeoutDurationPerUnit6 = newDuration; + getSettings()->timeoutDurationInSec6 = valueInSec; break; case 6: getSettings()->timeoutDurationPerUnit7 = newDuration; + getSettings()->timeoutDurationInSec7 = valueInSec; break; case 7: getSettings()->timeoutDurationPerUnit8 = newDuration; - break; - } -} -void AdvancedPage::calculatedDurationChanged(const int &newDurationInSec) -{ - QObject *sender = QObject::sender(); - int index = sender->objectName().toInt(); - - switch (index) - { - case 0: - getSettings()->timeoutDurationInSec1 = newDurationInSec; - break; - case 1: - getSettings()->timeoutDurationInSec2 = newDurationInSec; - break; - case 2: - getSettings()->timeoutDurationInSec3 = newDurationInSec; - break; - case 3: - getSettings()->timeoutDurationInSec4 = newDurationInSec; - break; - case 4: - getSettings()->timeoutDurationInSec5 = newDurationInSec; - break; - case 5: - getSettings()->timeoutDurationInSec6 = newDurationInSec; - break; - case 6: - getSettings()->timeoutDurationInSec7 = newDurationInSec; - break; - case 7: - getSettings()->timeoutDurationInSec8 = newDurationInSec; + getSettings()->timeoutDurationInSec8 = valueInSec; break; } } diff --git a/src/widgets/settingspages/AdvancedPage.hpp b/src/widgets/settingspages/AdvancedPage.hpp index d7729425..d492407b 100644 --- a/src/widgets/settingspages/AdvancedPage.hpp +++ b/src/widgets/settingspages/AdvancedPage.hpp @@ -13,19 +13,13 @@ private: // list needed for dynamic timeout settings QList durationInputs; QList unitInputs; - QList durationsCalculated; // iterators used in dynamic timeout settings - QList::iterator itDurationInput; QList::iterator itUnitInput; - QList::iterator itDurationsCalculated; private slots: void timeoutDurationChanged(const QString &newDuration); - - void calculatedDurationChanged(const int &newDurationInSec); - void timeoutUnitChanged(const QString &newUnit); }; From f417006d6a741f1d50a470d8334cd76c04b7ef1a Mon Sep 17 00:00:00 2001 From: TranRed Date: Sat, 20 Jul 2019 18:49:17 +0200 Subject: [PATCH 08/29] Added channelView with last messages to user popup currently uses last messages from that channel - might want to use online logs later (or make a setting for that) --- src/widgets/dialogs/UserInfoPopup.cpp | 21 +++++++++++++++++++++ src/widgets/dialogs/UserInfoPopup.hpp | 2 ++ 2 files changed, 23 insertions(+) diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index 80ccdcf0..fd9633e4 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -5,6 +5,7 @@ #include "common/NetworkRequest.hpp" #include "controllers/accounts/AccountController.hpp" #include "controllers/highlights/HighlightController.hpp" +#include "messages/Message.hpp" #include "providers/twitch/PartialTwitchUser.hpp" #include "providers/twitch/TwitchChannel.hpp" #include "singletons/Resources.hpp" @@ -15,6 +16,8 @@ #include "widgets/dialogs/LogsPopup.hpp" #include "widgets/helper/EffectLabel.hpp" #include "widgets/helper/Line.hpp" +#include "widgets/helper/ChannelView.hpp" + #include #include @@ -200,6 +203,11 @@ UserInfoPopup::UserInfoPopup() }); } + // fourth line (last messages) + this->lastMessages_ = new ChannelView(); + this->lastMessages_->setScaleIndependantHeight(150); + layout.append(this->lastMessages_); + this->setStyleSheet("font-size: 11pt;"); this->installEvents(); @@ -338,6 +346,19 @@ void UserInfoPopup::setData(const QString &name, const ChannelPtr &channel) this->updateUserData(); this->userStateChanged_.invoke(); + + LimitedQueueSnapshot snapshot = this->channel_->getMessageSnapshot(); + ChannelPtr channelPtr(new Channel("search", Channel::Type::None)); + for (size_t i = 0; i < snapshot.size(); i++) + { + MessagePtr message = snapshot[i]; + if ( message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0) + { + channelPtr->addMessage(message); + } + } + + this->lastMessages_->setChannel(channelPtr); } void UserInfoPopup::updateUserData() diff --git a/src/widgets/dialogs/UserInfoPopup.hpp b/src/widgets/dialogs/UserInfoPopup.hpp index 8699f8dd..9a603b40 100644 --- a/src/widgets/dialogs/UserInfoPopup.hpp +++ b/src/widgets/dialogs/UserInfoPopup.hpp @@ -1,6 +1,7 @@ #pragma once #include "widgets/BaseWindow.hpp" +#include "widgets/helper/ChannelView.hpp" #include @@ -36,6 +37,7 @@ private: QString userName_; QString userId_; ChannelPtr channel_; + ChannelView* lastMessages_; pajlada::Signals::NoArgSignal userStateChanged_; From 94ffc66b2a514e76ca159c509ac48889c3e2a136 Mon Sep 17 00:00:00 2001 From: TranRed Date: Sat, 20 Jul 2019 22:42:01 +0200 Subject: [PATCH 09/29] extracted latest messages logic into its own method --- src/widgets/dialogs/UserInfoPopup.cpp | 34 +++++++++++++++------------ src/widgets/dialogs/UserInfoPopup.hpp | 3 ++- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index fd9633e4..92a7f395 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -204,9 +204,9 @@ UserInfoPopup::UserInfoPopup() } // fourth line (last messages) - this->lastMessages_ = new ChannelView(); - this->lastMessages_->setScaleIndependantHeight(150); - layout.append(this->lastMessages_); + this->latestMessages_ = new ChannelView(); + this->latestMessages_->setScaleIndependantHeight(150); + layout.append(this->latestMessages_); this->setStyleSheet("font-size: 11pt;"); @@ -347,18 +347,7 @@ void UserInfoPopup::setData(const QString &name, const ChannelPtr &channel) this->userStateChanged_.invoke(); - LimitedQueueSnapshot snapshot = this->channel_->getMessageSnapshot(); - ChannelPtr channelPtr(new Channel("search", Channel::Type::None)); - for (size_t i = 0; i < snapshot.size(); i++) - { - MessagePtr message = snapshot[i]; - if ( message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0) - { - channelPtr->addMessage(message); - } - } - - this->lastMessages_->setChannel(channelPtr); + this->fillLatestMessages(); } void UserInfoPopup::updateUserData() @@ -625,4 +614,19 @@ void UserInfoPopup::TimeoutWidget::paintEvent(QPaintEvent *) // / 2); } +void UserInfoPopup::fillLatestMessages(){ + LimitedQueueSnapshot snapshot = this->channel_->getMessageSnapshot(); + ChannelPtr channelPtr(new Channel("search", Channel::Type::None)); + for (size_t i = 0; i < snapshot.size(); i++) + { + MessagePtr message = snapshot[i]; + if ( message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0) + { + channelPtr->addMessage(message); + } + } + + this->latestMessages_->setChannel(channelPtr); +} + } // namespace chatterino diff --git a/src/widgets/dialogs/UserInfoPopup.hpp b/src/widgets/dialogs/UserInfoPopup.hpp index 9a603b40..d65ca146 100644 --- a/src/widgets/dialogs/UserInfoPopup.hpp +++ b/src/widgets/dialogs/UserInfoPopup.hpp @@ -28,6 +28,7 @@ protected: private: void installEvents(); void updateUserData(); + void fillLatestMessages(); void loadAvatar(const QUrl &url); void loadProfileBanner(const QUrl &url); @@ -37,7 +38,7 @@ private: QString userName_; QString userId_; ChannelPtr channel_; - ChannelView* lastMessages_; + ChannelView* latestMessages_; pajlada::Signals::NoArgSignal userStateChanged_; From 125774ecb24194a3f43150c71d2b8821cb314100 Mon Sep 17 00:00:00 2001 From: TranRed Date: Sun, 21 Jul 2019 09:36:18 +0200 Subject: [PATCH 10/29] excluded inline whispers from latest messages in userpopup --- src/widgets/dialogs/UserInfoPopup.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index 92a7f395..dbd7631c 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -620,7 +620,8 @@ void UserInfoPopup::fillLatestMessages(){ for (size_t i = 0; i < snapshot.size(); i++) { MessagePtr message = snapshot[i]; - if ( message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0) + if ( message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0 + && !message->flags.has(MessageFlag::Whisper) ) { channelPtr->addMessage(message); } From 54b162afdddc55629ef2d24171ae86c918d88e03 Mon Sep 17 00:00:00 2001 From: TranRed Date: Thu, 25 Jul 2019 13:55:37 +0200 Subject: [PATCH 11/29] removed experimental profile banner code for now --- src/widgets/dialogs/UserInfoPopup.cpp | 38 ++++----------------------- src/widgets/dialogs/UserInfoPopup.hpp | 4 +-- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index dbd7631c..9fd1671c 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -14,10 +14,9 @@ #include "util/PostToThread.hpp" #include "widgets/Label.hpp" #include "widgets/dialogs/LogsPopup.hpp" +#include "widgets/helper/ChannelView.hpp" #include "widgets/helper/EffectLabel.hpp" #include "widgets/helper/Line.hpp" -#include "widgets/helper/ChannelView.hpp" - #include #include @@ -377,9 +376,6 @@ void UserInfoPopup::updateUserData() this->loadAvatar(QUrl(obj.value("logo").toString())); - this->loadProfileBanner( - QUrl(obj.value("profile_banner").toString())); - return Success; }); @@ -464,31 +460,6 @@ void UserInfoPopup::loadAvatar(const QUrl &url) }); } -void UserInfoPopup::loadProfileBanner(const QUrl &url) -{ - QNetworkRequest req(url); - static auto manager = new QNetworkAccessManager(); - auto *reply = manager->get(req); - - QObject::connect(reply, &QNetworkReply::finished, this, [=] { - if (reply->error() == QNetworkReply::NoError) - { - const auto data = reply->readAll(); - - // might want to cache the banner image - QPixmap banner; - banner.loadFromData(data); - this->ui_.profileBanner = - banner.scaled(600, 200, Qt::KeepAspectRatio); - } - else - { - QPixmap emptyBanner; - this->ui_.profileBanner = emptyBanner; - } - }); -} - // // TimeoutWidget // @@ -614,14 +585,15 @@ void UserInfoPopup::TimeoutWidget::paintEvent(QPaintEvent *) // / 2); } -void UserInfoPopup::fillLatestMessages(){ +void UserInfoPopup::fillLatestMessages() +{ LimitedQueueSnapshot snapshot = this->channel_->getMessageSnapshot(); ChannelPtr channelPtr(new Channel("search", Channel::Type::None)); for (size_t i = 0; i < snapshot.size(); i++) { MessagePtr message = snapshot[i]; - if ( message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0 - && !message->flags.has(MessageFlag::Whisper) ) + if (message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0 + && !message->flags.has(MessageFlag::Whisper)) { channelPtr->addMessage(message); } diff --git a/src/widgets/dialogs/UserInfoPopup.hpp b/src/widgets/dialogs/UserInfoPopup.hpp index d65ca146..4a07f2f9 100644 --- a/src/widgets/dialogs/UserInfoPopup.hpp +++ b/src/widgets/dialogs/UserInfoPopup.hpp @@ -31,14 +31,13 @@ private: void fillLatestMessages(); void loadAvatar(const QUrl &url); - void loadProfileBanner(const QUrl &url); bool isMod_; bool isBroadcaster_; QString userName_; QString userId_; ChannelPtr channel_; - ChannelView* latestMessages_; + ChannelView *latestMessages_; pajlada::Signals::NoArgSignal userStateChanged_; @@ -48,7 +47,6 @@ private: Button *avatarButton = nullptr; // RippleEffectLabel2 *viewLogs = nullptr; - QPixmap profileBanner; Label *nameLabel = nullptr; Label *viewCountLabel = nullptr; Label *followerCountLabel = nullptr; From 015fc155d569dbe6f493ac63c94fb7fa128f1b07 Mon Sep 17 00:00:00 2001 From: TranRed Date: Sun, 18 Aug 2019 18:42:48 +0200 Subject: [PATCH 12/29] Refactored settings made settings use Vectors instead of 8 single setting entries --- src/singletons/Settings.hpp | 52 +------- src/widgets/dialogs/UserInfoPopup.cpp | 85 ++++++++----- src/widgets/dialogs/UserInfoPopup.hpp | 2 + src/widgets/settingspages/AdvancedPage.cpp | 133 +++------------------ 4 files changed, 80 insertions(+), 192 deletions(-) diff --git a/src/singletons/Settings.hpp b/src/singletons/Settings.hpp index 25441c04..3e04b290 100644 --- a/src/singletons/Settings.hpp +++ b/src/singletons/Settings.hpp @@ -196,57 +196,9 @@ public: QStringSetting cachePath = {"/cache/path", ""}; /// Timeout buttons - QStringSetting timeoutDurationPerUnit1 = { - "/timeouts/timeoutDurationPerUnit1", "1"}; - QStringSetting timeoutDurationUnit1 = {"/timeouts/timeoutDurationUnit1", - "s"}; - IntSetting timeoutDurationInSec1 = {"/timeouts/timeoutDurationInSec1", 1}; - QStringSetting timeoutDurationPerUnit2 = { - "/timeouts/timeoutDurationPerUnit2", "30"}; - QStringSetting timeoutDurationUnit2 = {"/timeouts/timeoutDurationUnit2", - "s"}; - IntSetting timeoutDurationInSec2 = {"/timeouts/timeoutDurationInSec2", 30}; - - QStringSetting timeoutDurationPerUnit3 = { - "/timeouts/timeoutDurationPerUnit3", "1"}; - QStringSetting timeoutDurationUnit3 = {"/timeouts/timeoutDurationUnit3", - "m"}; - IntSetting timeoutDurationInSec3 = {"/timeouts/timeoutDurationInSec3", 60}; - - QStringSetting timeoutDurationPerUnit4 = { - "/timeouts/timeoutDurationPerUnit4", "5"}; - QStringSetting timeoutDurationUnit4 = {"/timeouts/timeoutDurationUnit4", - "s"}; - IntSetting timeoutDurationInSec4 = {"/timeouts/timeoutDurationInSec4", 300}; - - QStringSetting timeoutDurationPerUnit5 = { - "/timeouts/timeoutDurationPerUnit5", "30"}; - QStringSetting timeoutDurationUnit5 = {"/timeouts/timeoutDurationUnit5", - "m"}; - IntSetting timeoutDurationInSec5 = {"/timeouts/timeoutDurationInSec5", - 1800}; - - QStringSetting timeoutDurationPerUnit6 = { - "/timeouts/timeoutDurationPerUnit6", "1"}; - QStringSetting timeoutDurationUnit6 = {"/timeouts/timeoutDurationUnit6", - "h"}; - IntSetting timeoutDurationInSec6 = {"/timeouts/timeoutDurationInSec6", - 3600}; - - QStringSetting timeoutDurationPerUnit7 = { - "/timeouts/timeoutDurationPerUnit7", "1"}; - QStringSetting timeoutDurationUnit7 = {"/timeouts/timeoutDurationUnit7", - "d"}; - IntSetting timeoutDurationInSec7 = {"/timeouts/timeoutDurationInSec7", - 86400}; - - QStringSetting timeoutDurationPerUnit8 = { - "/timeouts/timeoutDurationPerUnit8", "1"}; - QStringSetting timeoutDurationUnit8 = {"/timeouts/timeoutDurationUnit8", - "w"}; - IntSetting timeoutDurationInSec8 = {"/timeouts/timeoutDurationInSec8", - 604800}; + ChatterinoSetting> timeoutDurationsPerUnit = { "/timeouts/timeoutDurationsPerUnit", { "1", "30", "1", "5", "30", "1", "1", "1" }}; + ChatterinoSetting> timeoutDurationUnits = { "/timeouts/timeoutDurationUnits", { "s", "s", "m", "m", "m", "h", "d", "w" }}; private: void updateModerationActions(); diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index 9fd1671c..cc461d99 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -539,38 +539,35 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget() addButton(Unban, "unban", getApp()->resources->buttons.unban); - addTimeouts("Timeouts", - {{getSettings()->timeoutDurationPerUnit1.getValue() + - getSettings()->timeoutDurationUnit1.getValue(), - getSettings()->timeoutDurationInSec1.getValue()}, + std::vector durationsPerUnit = + getSettings()->timeoutDurationsPerUnit; - {getSettings()->timeoutDurationPerUnit2.getValue() + - getSettings()->timeoutDurationUnit2.getValue(), - getSettings()->timeoutDurationInSec2.getValue()}, + std::vector durationUnits = getSettings()->timeoutDurationUnits; - {getSettings()->timeoutDurationPerUnit3.getValue() + - getSettings()->timeoutDurationUnit3.getValue(), - getSettings()->timeoutDurationInSec3.getValue()}, + addTimeouts( + "Timeouts", + {{durationsPerUnit[0] + durationUnits[0], + calculateTimeoutDuration(durationsPerUnit[0], durationUnits[0])}, - {getSettings()->timeoutDurationPerUnit4.getValue() + - getSettings()->timeoutDurationUnit4.getValue(), - getSettings()->timeoutDurationInSec4.getValue()}, + {durationsPerUnit[1] + durationUnits[1], + calculateTimeoutDuration(durationsPerUnit[1], durationUnits[1])}, - {getSettings()->timeoutDurationPerUnit5.getValue() + - getSettings()->timeoutDurationUnit5.getValue(), - getSettings()->timeoutDurationInSec5.getValue()}, + {durationsPerUnit[2] + durationUnits[2], + calculateTimeoutDuration(durationsPerUnit[2], durationUnits[2])}, - {getSettings()->timeoutDurationPerUnit6.getValue() + - getSettings()->timeoutDurationUnit6.getValue(), - getSettings()->timeoutDurationInSec6.getValue()}, + {durationsPerUnit[3] + durationUnits[3], + calculateTimeoutDuration(durationsPerUnit[3], durationUnits[3])}, - {getSettings()->timeoutDurationPerUnit7.getValue() + - getSettings()->timeoutDurationUnit7.getValue(), - getSettings()->timeoutDurationInSec7.getValue()}, + {durationsPerUnit[4] + durationUnits[4], + calculateTimeoutDuration(durationsPerUnit[4], durationUnits[4])}, - {getSettings()->timeoutDurationPerUnit8.getValue() + - getSettings()->timeoutDurationUnit8.getValue(), - getSettings()->timeoutDurationInSec8.getValue()}}); + {durationsPerUnit[5] + durationUnits[5], + calculateTimeoutDuration(durationsPerUnit[5], durationUnits[5])}, + + {durationsPerUnit[6] + durationUnits[6], + calculateTimeoutDuration(durationsPerUnit[6], durationUnits[6])}, + {durationsPerUnit[7] + durationUnits[7], + calculateTimeoutDuration(durationsPerUnit[7], durationUnits[7])}}); addButton(Ban, "ban", getApp()->resources->buttons.ban); } @@ -587,13 +584,15 @@ void UserInfoPopup::TimeoutWidget::paintEvent(QPaintEvent *) void UserInfoPopup::fillLatestMessages() { - LimitedQueueSnapshot snapshot = this->channel_->getMessageSnapshot(); + LimitedQueueSnapshot snapshot = + this->channel_->getMessageSnapshot(); ChannelPtr channelPtr(new Channel("search", Channel::Type::None)); for (size_t i = 0; i < snapshot.size(); i++) { MessagePtr message = snapshot[i]; - if (message->loginName.compare(this->userName_, Qt::CaseInsensitive) == 0 - && !message->flags.has(MessageFlag::Whisper)) + if (message->loginName.compare(this->userName_, Qt::CaseInsensitive) == + 0 && + !message->flags.has(MessageFlag::Whisper)) { channelPtr->addMessage(message); } @@ -602,4 +601,34 @@ void UserInfoPopup::fillLatestMessages() this->latestMessages_->setChannel(channelPtr); } +int UserInfoPopup::calculateTimeoutDuration(const QString &durationPerUnit, + const QString &unit) +{ + int valueInUnit = durationPerUnit.toInt(); + int valueInSec = 0; + + if (unit == "s") + { + valueInSec = valueInUnit; + } + else if (unit == "m") + { + valueInSec = valueInUnit * 60; + } + else if (unit == "h") + { + valueInSec = valueInUnit * 60 * 60; + } + else if (unit == "d") + { + valueInSec = valueInUnit * 24 * 60 * 60; + } + else if (unit == "w") + { + valueInSec = valueInUnit * 7 * 24 * 60 * 60; + } + + return valueInSec; +} + } // namespace chatterino diff --git a/src/widgets/dialogs/UserInfoPopup.hpp b/src/widgets/dialogs/UserInfoPopup.hpp index 4a07f2f9..68e6a26a 100644 --- a/src/widgets/dialogs/UserInfoPopup.hpp +++ b/src/widgets/dialogs/UserInfoPopup.hpp @@ -34,6 +34,8 @@ private: bool isMod_; bool isBroadcaster_; + static int calculateTimeoutDuration(const QString &durationPerUnit, const QString &unit); + QString userName_; QString userId_; ChannelPtr channel_; diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index 98f36f20..414089a2 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -81,41 +81,15 @@ AdvancedPage::AdvancedPage() units.append("d"); units.append("w"); - QStringList initDurationsPerUnit; - initDurationsPerUnit = QStringList(); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit1)); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit2)); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit3)); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit4)); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit5)); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit6)); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit7)); - initDurationsPerUnit.append( - QString(getSettings()->timeoutDurationPerUnit8)); + std::vector durationsPerUnit = + getSettings()->timeoutDurationsPerUnit; + std::vector::iterator itDurationPerUnit; + itDurationPerUnit = durationsPerUnit.begin(); - QStringList::iterator itDurationPerUnit; - itDurationPerUnit = initDurationsPerUnit.begin(); - - QStringList initUnits; - initUnits = QStringList(); - initUnits.append(QString(getSettings()->timeoutDurationUnit1)); - initUnits.append(QString(getSettings()->timeoutDurationUnit2)); - initUnits.append(QString(getSettings()->timeoutDurationUnit3)); - initUnits.append(QString(getSettings()->timeoutDurationUnit4)); - initUnits.append(QString(getSettings()->timeoutDurationUnit5)); - initUnits.append(QString(getSettings()->timeoutDurationUnit6)); - initUnits.append(QString(getSettings()->timeoutDurationUnit7)); - initUnits.append(QString(getSettings()->timeoutDurationUnit8)); - - QStringList::iterator itUnit; - itUnit = initUnits.begin(); + std::vector durationUnits = + getSettings()->timeoutDurationUnits; + std::vector::iterator itUnit; + itUnit = durationUnits.begin(); for (int i = 0; i < 8; i++) { @@ -172,7 +146,6 @@ AdvancedPage::AdvancedPage() &QComboBox::currentTextChanged, this, &AdvancedPage::timeoutUnitChanged); - auto secondsLabel = timeout.emplace(); timeout->addStretch(); } timeout->setContentsMargins(40, 0, 0, 0); @@ -201,28 +174,15 @@ void AdvancedPage::timeoutDurationChanged(const QString &newDuration) QString unit = cbUnit->currentText(); int valueInUnit = newDuration.toInt(); - int valueInSec; - if (unit == "s") - { - valueInSec = valueInUnit; - } - else if (unit == "m") - { - valueInSec = valueInUnit * 60; - } - else if (unit == "h") - { - valueInSec = valueInUnit * 60 * 60; - } - else if (unit == "d") + // safety mechanism for setting days and weeks + if (unit == "d") { if (valueInUnit > 14) { durationPerUnit->setText("14"); return; } - valueInSec = valueInUnit * 24 * 60 * 60; } else if (unit == "w") { @@ -231,44 +191,12 @@ void AdvancedPage::timeoutDurationChanged(const QString &newDuration) durationPerUnit->setText("2"); return; } - valueInSec = valueInUnit * 7 * 24 * 60 * 60; } - switch (index) - { - case 0: - getSettings()->timeoutDurationPerUnit1 = newDuration; - getSettings()->timeoutDurationInSec1 = valueInSec; - break; - case 1: - getSettings()->timeoutDurationPerUnit2 = newDuration; - getSettings()->timeoutDurationInSec2 = valueInSec; - break; - case 2: - getSettings()->timeoutDurationPerUnit3 = newDuration; - getSettings()->timeoutDurationInSec3 = valueInSec; - break; - case 3: - getSettings()->timeoutDurationPerUnit4 = newDuration; - getSettings()->timeoutDurationInSec4 = valueInSec; - break; - case 4: - getSettings()->timeoutDurationPerUnit5 = newDuration; - getSettings()->timeoutDurationInSec5 = valueInSec; - break; - case 5: - getSettings()->timeoutDurationPerUnit6 = newDuration; - getSettings()->timeoutDurationInSec6 = valueInSec; - break; - case 6: - getSettings()->timeoutDurationPerUnit7 = newDuration; - getSettings()->timeoutDurationInSec7 = valueInSec; - break; - case 7: - getSettings()->timeoutDurationPerUnit8 = newDuration; - getSettings()->timeoutDurationInSec8 = valueInSec; - break; - } + std::vector durationsPerUnit = + getSettings()->timeoutDurationsPerUnit; + durationsPerUnit[index] = newDuration; + getSettings()->timeoutDurationsPerUnit = durationsPerUnit; } void AdvancedPage::timeoutUnitChanged(const QString &newUnit) @@ -276,38 +204,15 @@ void AdvancedPage::timeoutUnitChanged(const QString &newUnit) QObject *sender = QObject::sender(); int index = sender->objectName().toInt(); - switch (index) - { - case 0: - getSettings()->timeoutDurationUnit1 = newUnit; - break; - case 1: - getSettings()->timeoutDurationUnit2 = newUnit; - break; - case 2: - getSettings()->timeoutDurationUnit3 = newUnit; - break; - case 3: - getSettings()->timeoutDurationUnit4 = newUnit; - break; - case 4: - getSettings()->timeoutDurationUnit5 = newUnit; - break; - case 5: - getSettings()->timeoutDurationUnit6 = newUnit; - break; - case 6: - getSettings()->timeoutDurationUnit7 = newUnit; - break; - case 7: - getSettings()->timeoutDurationUnit8 = newUnit; - break; - } - itDurationInput = durationInputs.begin() + index; QLineEdit *durationPerUnit = *itDurationInput; + // safety mechanism for changing units (i.e. to days or weeks) AdvancedPage::timeoutDurationChanged(durationPerUnit->text()); + + std::vector durationUnits = getSettings()->timeoutDurationUnits; + durationUnits[index] = newUnit; + getSettings()->timeoutDurationUnits = durationUnits; } } // namespace chatterino From ebce0c985a6fbf1821ebc317b7084a14ed9e81d1 Mon Sep 17 00:00:00 2001 From: TranRed Date: Sun, 18 Aug 2019 18:44:49 +0200 Subject: [PATCH 13/29] added missing empty line --- src/widgets/dialogs/UserInfoPopup.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index cc461d99..b63c3d6d 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -566,6 +566,7 @@ UserInfoPopup::TimeoutWidget::TimeoutWidget() {durationsPerUnit[6] + durationUnits[6], calculateTimeoutDuration(durationsPerUnit[6], durationUnits[6])}, + {durationsPerUnit[7] + durationUnits[7], calculateTimeoutDuration(durationsPerUnit[7], durationUnits[7])}}); From 0e3ab64bd228d0c8d746a2a2cfec19f98aa0057c Mon Sep 17 00:00:00 2001 From: TranRed Date: Sun, 18 Aug 2019 18:57:30 +0200 Subject: [PATCH 14/29] deleted unused QStringList --- src/widgets/settingspages/AdvancedPage.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index 414089a2..010773eb 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -74,13 +74,6 @@ AdvancedPage::AdvancedPage() // Logs end // Timeoutbuttons - QStringList units = QStringList(); - units.append("s"); - units.append("m"); - units.append("h"); - units.append("d"); - units.append("w"); - std::vector durationsPerUnit = getSettings()->timeoutDurationsPerUnit; std::vector::iterator itDurationPerUnit; From 5cd067aab09dfab5a2b1b9ea26b78f04d9d139ab Mon Sep 17 00:00:00 2001 From: TranRed Date: Thu, 22 Aug 2019 21:33:50 +0200 Subject: [PATCH 15/29] readded used "unused" variable --- src/widgets/settingspages/AdvancedPage.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/widgets/settingspages/AdvancedPage.cpp b/src/widgets/settingspages/AdvancedPage.cpp index 010773eb..8e103ebd 100644 --- a/src/widgets/settingspages/AdvancedPage.cpp +++ b/src/widgets/settingspages/AdvancedPage.cpp @@ -74,6 +74,13 @@ AdvancedPage::AdvancedPage() // Logs end // Timeoutbuttons + QStringList unitsForDropdown = QStringList(); + unitsForDropdown.append("s"); + unitsForDropdown.append("m"); + unitsForDropdown.append("h"); + unitsForDropdown.append("d"); + unitsForDropdown.append("w"); + std::vector durationsPerUnit = getSettings()->timeoutDurationsPerUnit; std::vector::iterator itDurationPerUnit; @@ -128,7 +135,7 @@ AdvancedPage::AdvancedPage() QComboBox *timeoutDurationUnit = *itUnitInput; timeoutDurationUnit->setObjectName(QString::number(i)); - timeoutDurationUnit->addItems(units); + timeoutDurationUnit->addItems(unitsForDropdown); timeoutDurationUnit->setCurrentText(*itUnit); timeout.append(timeoutDurationUnit); From 0ce5e7f529152ec5deed3b41d025261e590f0b4f Mon Sep 17 00:00:00 2001 From: TranRed Date: Sat, 24 Aug 2019 11:00:55 +0200 Subject: [PATCH 16/29] added border to Buttons added border to Buttons deleted unused variables renamed some vars --- src/widgets/dialogs/UserInfoPopup.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/widgets/dialogs/UserInfoPopup.cpp b/src/widgets/dialogs/UserInfoPopup.cpp index b63c3d6d..55d9f98a 100644 --- a/src/widgets/dialogs/UserInfoPopup.cpp +++ b/src/widgets/dialogs/UserInfoPopup.cpp @@ -90,6 +90,10 @@ UserInfoPopup::UserInfoPopup() auto usercard = user.emplace(this); usercard->getLabel().setText("Usercard"); + QColor borderColor(255, 255, 255, 80); + usercard->setBorderColor(borderColor); + viewLogs->setBorderColor(borderColor); + auto mod = user.emplace