From 7855d6265d4d584dc7dfd9446f4f13da469306d7 Mon Sep 17 00:00:00 2001 From: Rasmus Karlsson Date: Sun, 8 Oct 2017 16:31:16 +0200 Subject: [PATCH] Split tab-creation up into separate functions --- src/widgets/settingsdialog.cpp | 334 ++++++++++++++++++--------------- src/widgets/settingsdialog.hpp | 22 ++- 2 files changed, 204 insertions(+), 152 deletions(-) diff --git a/src/widgets/settingsdialog.cpp b/src/widgets/settingsdialog.cpp index f0c9ac53d..517bc3deb 100644 --- a/src/widgets/settingsdialog.cpp +++ b/src/widgets/settingsdialog.cpp @@ -72,69 +72,94 @@ SettingsDialog::SettingsDialog() void SettingsDialog::addTabs() { + this->addTab(this->createAccountsTab(), "Accounts", ":/images/Message_16xLG.png"); + + this->addTab(this->createAppearanceTab(), "Appearance", + ":/images/AppearanceEditorPart_16x.png"); + + this->addTab(this->createBehaviourTab(), "Behaviour", ":/images/AppearanceEditorPart_16x.png"); + + this->addTab(this->createCommandsTab(), "Commands", ":/images/CustomActionEditor_16x.png"); + + this->addTab(this->createEmotesTab(), "Emotes", ":/images/Emoji_Color_1F60A_19.png"); + + this->addTab(this->createIgnoredUsersTab(), "Ignored Users", + ":/images/StatusAnnotations_Blocked_16xLG_color.png"); + + this->addTab(this->createIgnoredMessagesTab(), "Ignored Messages", ":/images/Filter_16x.png"); + + this->addTab(this->createLinksTab(), "Links", ":/images/VSO_Link_blue_16x.png"); + + this->addTab(this->createLogsTab(), "Logs", ":/images/VSO_Link_blue_16x.png"); + + this->addTab(this->createHighlightingTab(), "Highlighting", ":/images/format_Bold_16xLG.png"); + + this->addTab(this->createWhispersTab(), "Whispers", ":/images/Message_16xLG.png"); + + // Add stretch + this->ui.tabs.addStretch(1); +} + +QVBoxLayout *SettingsDialog::createAccountsTab() +{ + auto layout = new QVBoxLayout(); SettingsManager &settings = SettingsManager::getInstance(); - QVBoxLayout *vbox; + // add remove buttons + auto buttonBox = new QDialogButtonBox(this); - // Accounts - vbox = new QVBoxLayout(); + auto addButton = new QPushButton("Add", this); + auto removeButton = new QPushButton("Remove", this); - { - // add remove buttons - auto buttonBox = new QDialogButtonBox(this); + connect(addButton, &QPushButton::clicked, []() { + // TODO: fix memory leak :bbaper: + auto loginWidget = new LoginWidget(); + loginWidget->show(); + }); - auto addButton = new QPushButton("Add", this); - auto removeButton = new QPushButton("Remove", this); + connect(removeButton, &QPushButton::clicked, []() { + qDebug() << "TODO: Implement"; // + }); - connect(addButton, &QPushButton::clicked, []() { - // TODO: fix memory leak :bbaper: - auto loginWidget = new LoginWidget(); - loginWidget->show(); - }); + buttonBox->addButton(addButton, QDialogButtonBox::YesRole); + buttonBox->addButton(removeButton, QDialogButtonBox::NoRole); - connect(removeButton, &QPushButton::clicked, []() { - qDebug() << "TODO: Implement"; // - }); + layout->addWidget(buttonBox); - buttonBox->addButton(addButton, QDialogButtonBox::YesRole); - buttonBox->addButton(removeButton, QDialogButtonBox::NoRole); + // listview + auto listWidget = new QListWidget(this); - vbox->addWidget(buttonBox); - - // listview - auto listWidget = new QListWidget(this); - - for (auto &user : AccountManager::getInstance().getTwitchUsers()) { - listWidget->addItem(user.getUserName()); - } - - if (listWidget->count() > 0) { - const auto ¤tUser = AccountManager::getInstance().getTwitchUser(); - QString currentUsername = currentUser.getUserName(); - for (int i = 0; i < listWidget->count(); ++i) { - QString itemText = listWidget->item(i)->text(); - if (itemText.compare(currentUsername, Qt::CaseInsensitive) == 0) { - listWidget->setCurrentRow(i); - break; - } - } - } - - QObject::connect(listWidget, &QListWidget::clicked, this, [&, listWidget] { - if (!listWidget->selectedItems().isEmpty()) { - AccountManager::getInstance().setCurrentTwitchUser( - listWidget->currentItem()->text()); - } - }); - - vbox->addWidget(listWidget); + for (auto &user : AccountManager::getInstance().getTwitchUsers()) { + listWidget->addItem(user.getUserName()); } - // vbox->addStretch(1); - addTab(vbox, "Accounts", ":/images/Message_16xLG.png"); + if (listWidget->count() > 0) { + const auto ¤tUser = AccountManager::getInstance().getTwitchUser(); + QString currentUsername = currentUser.getUserName(); + for (int i = 0; i < listWidget->count(); ++i) { + QString itemText = listWidget->item(i)->text(); + if (itemText.compare(currentUsername, Qt::CaseInsensitive) == 0) { + listWidget->setCurrentRow(i); + break; + } + } + } - // Appearance - vbox = new QVBoxLayout(); + QObject::connect(listWidget, &QListWidget::clicked, this, [&, listWidget] { + if (!listWidget->selectedItems().isEmpty()) { + AccountManager::getInstance().setCurrentTwitchUser(listWidget->currentItem()->text()); + } + }); + + layout->addWidget(listWidget); + + return layout; +} + +QVBoxLayout *SettingsDialog::createAppearanceTab() +{ + SettingsManager &settings = SettingsManager::getInstance(); + auto layout = this->createTabLayout(); { auto group = new QGroupBox("Application"); @@ -257,7 +282,7 @@ void SettingsDialog::addTabs() group->setLayout(form); - vbox->addWidget(group); + layout->addWidget(group); } { @@ -287,97 +312,104 @@ void SettingsDialog::addTabs() group->setLayout(v); - vbox->addWidget(group); + layout->addWidget(group); } + return layout; +} - vbox->addStretch(1); +QVBoxLayout *SettingsDialog::createBehaviourTab() +{ + SettingsManager &settings = SettingsManager::getInstance(); + auto layout = this->createTabLayout(); - addTab(vbox, "Appearance", ":/images/AppearanceEditorPart_16x.png"); + auto form = new QFormLayout(); - // Behaviour - vbox = new QVBoxLayout(); + form->addRow("Window:", createCheckbox("Window always on top", settings.windowTopMost)); + // form->addRow("Messages:", createCheckbox("Mention users with a @ (except in + // commands)", + // settings.mentionUsersWithAt)); + form->addRow("Messages:", createCheckbox("Hide input box if empty", settings.hideEmptyInput)); + form->addRow( + "", createCheckbox("Show last read message indicator", settings.showLastMessageIndicator)); - { - auto form = new QFormLayout(); + // auto v = new QVBoxLayout(); + // v->addWidget(new QLabel("Mouse scroll speed")); - form->addRow("Window:", createCheckbox("Window always on top", settings.windowTopMost)); - // form->addRow("Messages:", createCheckbox("Mention users with a @ (except in - // commands)", - // settings.mentionUsersWithAt)); - form->addRow("Messages:", - createCheckbox("Hide input box if empty", settings.hideEmptyInput)); - form->addRow("", createCheckbox("Show last read message indicator", - settings.showLastMessageIndicator)); + auto scroll = new QSlider(Qt::Horizontal); + form->addRow("Mouse scroll speed:", scroll); - // auto v = new QVBoxLayout(); - // v->addWidget(new QLabel("Mouse scroll speed")); + form->addRow("Streamlink path:", createLineEdit(settings.streamlinkPath)); + form->addRow(this->createCombobox( + "Preferred quality:", settings.preferredQuality, + {"Choose", "Source", "High", "Medium", "Low", "Audio only"}, + [](const QString &newValue, pajlada::Settings::Setting &setting) { + setting = newValue.toStdString(); + })); - auto scroll = new QSlider(Qt::Horizontal); - form->addRow("Mouse scroll speed:", scroll); + // v->addWidget(scroll); + // v->addStretch(1); + // vbox->addLayout(v); + layout->addLayout(form); - form->addRow("Streamlink path:", createLineEdit(settings.streamlinkPath)); - form->addRow(this->createCombobox( - "Preferred quality:", settings.preferredQuality, - {"Choose", "Source", "High", "Medium", "Low", "Audio only"}, - [](const QString &newValue, pajlada::Settings::Setting &setting) { - setting = newValue.toStdString(); - })); + return layout; +} - // v->addWidget(scroll); - // v->addStretch(1); - // vbox->addLayout(v); - vbox->addLayout(form); - } +QVBoxLayout *SettingsDialog::createCommandsTab() +{ + auto layout = this->createTabLayout(); - vbox->addStretch(1); + return layout; +} - addTab(vbox, "Behaviour", ":/images/AppearanceEditorPart_16x.png"); +QVBoxLayout *SettingsDialog::createEmotesTab() +{ + SettingsManager &settings = SettingsManager::getInstance(); + auto layout = this->createTabLayout(); - // Commands - vbox = new QVBoxLayout(); + layout->addWidget(createCheckbox("Enable Twitch Emotes", settings.enableTwitchEmotes)); + layout->addWidget(createCheckbox("Enable BetterTTV Emotes", settings.enableBttvEmotes)); + layout->addWidget(createCheckbox("Enable FrankerFaceZ Emotes", settings.enableFfzEmotes)); + layout->addWidget(createCheckbox("Enable Gif Emotes", settings.enableGifs)); + layout->addWidget(createCheckbox("Enable Emojis", settings.enableEmojis)); - vbox->addWidget(new QLabel()); + layout->addWidget(createCheckbox("Enable Twitch Emotes", settings.enableTwitchEmotes)); - vbox->addStretch(1); + return layout; +} - addTab(vbox, "Commands", ":/images/CustomActionEditor_16x.png"); +QVBoxLayout *SettingsDialog::createIgnoredUsersTab() +{ + auto layout = this->createTabLayout(); - // Emotes - vbox = new QVBoxLayout(); + return layout; +} - vbox->addWidget(createCheckbox("Enable Twitch Emotes", settings.enableTwitchEmotes)); - vbox->addWidget(createCheckbox("Enable BetterTTV Emotes", settings.enableBttvEmotes)); - vbox->addWidget(createCheckbox("Enable FrankerFaceZ Emotes", settings.enableFfzEmotes)); - vbox->addWidget(createCheckbox("Enable Gif Emotes", settings.enableGifs)); - vbox->addWidget(createCheckbox("Enable Emojis", settings.enableEmojis)); +QVBoxLayout *SettingsDialog::createIgnoredMessagesTab() +{ + auto layout = this->createTabLayout(); - vbox->addWidget(createCheckbox("Enable Twitch Emotes", settings.enableTwitchEmotes)); + return layout; +} - vbox->addStretch(1); - addTab(vbox, "Emotes", ":/images/Emoji_Color_1F60A_19.png"); +QVBoxLayout *SettingsDialog::createLinksTab() +{ + auto layout = this->createTabLayout(); - // Ignored Users - vbox = new QVBoxLayout(); - vbox->addStretch(1); - addTab(vbox, "Ignored Users", ":/images/StatusAnnotations_Blocked_16xLG_color.png"); + return layout; +} - // Ignored Messages - vbox = new QVBoxLayout(); - vbox->addStretch(1); - addTab(vbox, "Ignored Messages", ":/images/Filter_16x.png"); +QVBoxLayout *SettingsDialog::createLogsTab() +{ + auto layout = this->createTabLayout(); - // Links - vbox = new QVBoxLayout(); - vbox->addStretch(1); - addTab(vbox, "Links", ":/images/VSO_Link_blue_16x.png"); + return layout; +} - // Logging - vbox = new QVBoxLayout(); - vbox->addStretch(1); - addTab(vbox, "Logs", ":/images/VSO_Link_blue_16x.png"); +QVBoxLayout *SettingsDialog::createHighlightingTab() +{ + SettingsManager &settings = SettingsManager::getInstance(); + auto layout = this->createTabLayout(); - // Highlighting - vbox = new QVBoxLayout(); auto highlights = new QListWidget(); auto highlightUserBlacklist = new QTextEdit(); globalHighlights = highlights; @@ -388,13 +420,13 @@ void SettingsDialog::addTabs() auto customSound = new QHBoxLayout(); auto soundForm = new QFormLayout(); { - vbox->addWidget(createCheckbox("Enable Highlighting", settings.enableHighlights)); - vbox->addWidget(createCheckbox("Highlight messages containing your name", - settings.enableHighlightsSelf)); - vbox->addWidget(createCheckbox("Play sound when your name is mentioned", - settings.enableHighlightSound)); - vbox->addWidget(createCheckbox("Flash taskbar when your name is mentioned", - settings.enableHighlightTaskbar)); + layout->addWidget(createCheckbox("Enable Highlighting", settings.enableHighlights)); + layout->addWidget(createCheckbox("Highlight messages containing your name", + settings.enableHighlightsSelf)); + layout->addWidget(createCheckbox("Play sound when your name is mentioned", + settings.enableHighlightSound)); + layout->addWidget(createCheckbox("Flash taskbar when your name is mentioned", + settings.enableHighlightTaskbar)); customSound->addWidget(createCheckbox("Custom sound", settings.customHighlightSound)); auto selectBtn = new QPushButton("Select"); QObject::connect(selectBtn, &QPushButton::clicked, this, [&settings, this] { @@ -407,7 +439,6 @@ void SettingsDialog::addTabs() soundForm->addRow(customSound); - { auto hbox = new QHBoxLayout(); auto addBtn = new QPushButton("Add"); @@ -483,8 +514,8 @@ void SettingsDialog::addTabs() delete highlights->selectedItems().first(); } }); - vbox->addLayout(soundForm); - vbox->addWidget( + layout->addLayout(soundForm); + layout->addWidget( createCheckbox("Always play highlight sound (Even if Chatterino is focused)", settings.highlightAlwaysPlaySound)); auto layoutVbox = new QVBoxLayout(); @@ -502,37 +533,37 @@ void SettingsDialog::addTabs() layoutVbox->addWidget(btnWidget); highlightWidget->setLayout(layoutVbox); - highlightTab->addTab(highlightWidget,"Highlights"); - highlightTab->addTab(highlightUserBlacklist,"Disabled Users"); - vbox->addWidget(highlightTab); + highlightTab->addTab(highlightWidget, "Highlights"); + highlightTab->addTab(highlightUserBlacklist, "Disabled Users"); + layout->addWidget(highlightTab); - vbox->addLayout(hbox); + layout->addLayout(hbox); } - QObject::connect(&this->ui.okButton, &QPushButton::clicked, this, [=, &settings](){ - QStringList list = highlightUserBlacklist->toPlainText().split("\n",QString::SkipEmptyParts); + QObject::connect(&this->ui.okButton, &QPushButton::clicked, this, [=, &settings]() { + QStringList list = + highlightUserBlacklist->toPlainText().split("\n", QString::SkipEmptyParts); list.removeDuplicates(); settings.highlightUserBlacklist.set(list.join("\n") + "\n"); }); - settings.highlightUserBlacklist.valueChanged.connect([=](const QString &str){ - highlightUserBlacklist->setPlainText(str); - }); + settings.highlightUserBlacklist.valueChanged.connect( + [=](const QString &str) { highlightUserBlacklist->setPlainText(str); }); - vbox->addStretch(1); - addTab(vbox, "Highlighting", ":/images/format_Bold_16xLG.png"); - - // Whispers - vbox = new QVBoxLayout(); - vbox->addStretch(1); - addTab(vbox, "Whispers", ":/images/Message_16xLG.png"); - - // Add stretch - this->ui.tabs.addStretch(1); + return layout; } -void SettingsDialog::addTab(QLayout *layout, QString title, QString imageRes) +QVBoxLayout *SettingsDialog::createWhispersTab() { + auto layout = this->createTabLayout(); + + return layout; +} + +void SettingsDialog::addTab(QBoxLayout *layout, QString title, QString imageRes) +{ + layout->addStretch(1); + auto widget = new QWidget(); widget->setLayout(layout); @@ -575,6 +606,13 @@ void SettingsDialog::showDialog() } /// Widget creation helpers +QVBoxLayout *SettingsDialog::createTabLayout() +{ + auto layout = new QVBoxLayout(); + + return layout; +} + QCheckBox *SettingsDialog::createCheckbox(const QString &title, Setting &setting) { auto checkbox = new QCheckBox(title); diff --git a/src/widgets/settingsdialog.hpp b/src/widgets/settingsdialog.hpp index 643864fcd..20307055a 100644 --- a/src/widgets/settingsdialog.hpp +++ b/src/widgets/settingsdialog.hpp @@ -30,6 +30,7 @@ public: void select(SettingsDialogTab *tab); static void showDialog(); + private: SettingsSnapshot snapshot; @@ -45,23 +46,36 @@ private: QPushButton cancelButton; } ui; - void addTab(QLayout *layout, QString title, QString imageRes); + void addTab(QBoxLayout *layout, QString title, QString imageRes); void addTabs(); + QVBoxLayout *createAccountsTab(); + QVBoxLayout *createAppearanceTab(); + QVBoxLayout *createMessagesTab(); + QVBoxLayout *createBehaviourTab(); + QVBoxLayout *createCommandsTab(); + QVBoxLayout *createEmotesTab(); + QVBoxLayout *createIgnoredUsersTab(); + QVBoxLayout *createIgnoredMessagesTab(); + QVBoxLayout *createLinksTab(); + QVBoxLayout *createLogsTab(); + QVBoxLayout *createHighlightingTab(); + QVBoxLayout *createWhispersTab(); SettingsDialogTab *selectedTab = nullptr; QListWidget *globalHighlights; /// Widget creation helpers + QVBoxLayout *createTabLayout(); QCheckBox *createCheckbox(const QString &title, Setting &setting); QCheckBox *createCheckbox(const QString &title, pajlada::Settings::Setting &setting); QHBoxLayout *createCombobox(const QString &title, pajlada::Settings::Setting &setting, QStringList items, std::function &)> cb); - QHBoxLayout *createCombobox(const QString &title, pajlada::Settings::Setting &setting, - QStringList items, - std::function &)> cb); + QHBoxLayout *createCombobox( + const QString &title, pajlada::Settings::Setting &setting, QStringList items, + std::function &)> cb); QLineEdit *createLineEdit(pajlada::Settings::Setting &setting); void okButtonClicked();