Split tab-creation up into separate functions

This commit is contained in:
Rasmus Karlsson 2017-10-08 16:31:16 +02:00
parent 23651fd513
commit 7855d6265d
2 changed files with 204 additions and 152 deletions

View file

@ -72,14 +72,39 @@ SettingsDialog::SettingsDialog()
void SettingsDialog::addTabs() 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(); SettingsManager &settings = SettingsManager::getInstance();
QVBoxLayout *vbox;
// Accounts
vbox = new QVBoxLayout();
{
// add remove buttons // add remove buttons
auto buttonBox = new QDialogButtonBox(this); auto buttonBox = new QDialogButtonBox(this);
@ -99,7 +124,7 @@ void SettingsDialog::addTabs()
buttonBox->addButton(addButton, QDialogButtonBox::YesRole); buttonBox->addButton(addButton, QDialogButtonBox::YesRole);
buttonBox->addButton(removeButton, QDialogButtonBox::NoRole); buttonBox->addButton(removeButton, QDialogButtonBox::NoRole);
vbox->addWidget(buttonBox); layout->addWidget(buttonBox);
// listview // listview
auto listWidget = new QListWidget(this); auto listWidget = new QListWidget(this);
@ -122,19 +147,19 @@ void SettingsDialog::addTabs()
QObject::connect(listWidget, &QListWidget::clicked, this, [&, listWidget] { QObject::connect(listWidget, &QListWidget::clicked, this, [&, listWidget] {
if (!listWidget->selectedItems().isEmpty()) { if (!listWidget->selectedItems().isEmpty()) {
AccountManager::getInstance().setCurrentTwitchUser( AccountManager::getInstance().setCurrentTwitchUser(listWidget->currentItem()->text());
listWidget->currentItem()->text());
} }
}); });
vbox->addWidget(listWidget); layout->addWidget(listWidget);
return layout;
} }
// vbox->addStretch(1); QVBoxLayout *SettingsDialog::createAppearanceTab()
addTab(vbox, "Accounts", ":/images/Message_16xLG.png"); {
SettingsManager &settings = SettingsManager::getInstance();
// Appearance auto layout = this->createTabLayout();
vbox = new QVBoxLayout();
{ {
auto group = new QGroupBox("Application"); auto group = new QGroupBox("Application");
@ -257,7 +282,7 @@ void SettingsDialog::addTabs()
group->setLayout(form); group->setLayout(form);
vbox->addWidget(group); layout->addWidget(group);
} }
{ {
@ -287,27 +312,25 @@ void SettingsDialog::addTabs()
group->setLayout(v); group->setLayout(v);
vbox->addWidget(group); layout->addWidget(group);
}
return layout;
} }
vbox->addStretch(1); QVBoxLayout *SettingsDialog::createBehaviourTab()
addTab(vbox, "Appearance", ":/images/AppearanceEditorPart_16x.png");
// Behaviour
vbox = new QVBoxLayout();
{ {
SettingsManager &settings = SettingsManager::getInstance();
auto layout = this->createTabLayout();
auto form = new QFormLayout(); auto form = new QFormLayout();
form->addRow("Window:", createCheckbox("Window always on top", settings.windowTopMost)); form->addRow("Window:", createCheckbox("Window always on top", settings.windowTopMost));
// form->addRow("Messages:", createCheckbox("Mention users with a @ (except in // form->addRow("Messages:", createCheckbox("Mention users with a @ (except in
// commands)", // commands)",
// settings.mentionUsersWithAt)); // settings.mentionUsersWithAt));
form->addRow("Messages:", form->addRow("Messages:", createCheckbox("Hide input box if empty", settings.hideEmptyInput));
createCheckbox("Hide input box if empty", settings.hideEmptyInput)); form->addRow(
form->addRow("", createCheckbox("Show last read message indicator", "", createCheckbox("Show last read message indicator", settings.showLastMessageIndicator));
settings.showLastMessageIndicator));
// auto v = new QVBoxLayout(); // auto v = new QVBoxLayout();
// v->addWidget(new QLabel("Mouse scroll speed")); // v->addWidget(new QLabel("Mouse scroll speed"));
@ -326,58 +349,67 @@ void SettingsDialog::addTabs()
// v->addWidget(scroll); // v->addWidget(scroll);
// v->addStretch(1); // v->addStretch(1);
// vbox->addLayout(v); // vbox->addLayout(v);
vbox->addLayout(form); layout->addLayout(form);
return layout;
} }
vbox->addStretch(1); QVBoxLayout *SettingsDialog::createCommandsTab()
{
auto layout = this->createTabLayout();
addTab(vbox, "Behaviour", ":/images/AppearanceEditorPart_16x.png"); return layout;
}
// Commands QVBoxLayout *SettingsDialog::createEmotesTab()
vbox = new QVBoxLayout(); {
SettingsManager &settings = SettingsManager::getInstance();
auto layout = this->createTabLayout();
vbox->addWidget(new QLabel()); 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->addStretch(1); layout->addWidget(createCheckbox("Enable Twitch Emotes", settings.enableTwitchEmotes));
addTab(vbox, "Commands", ":/images/CustomActionEditor_16x.png"); return layout;
}
// Emotes QVBoxLayout *SettingsDialog::createIgnoredUsersTab()
vbox = new QVBoxLayout(); {
auto layout = this->createTabLayout();
vbox->addWidget(createCheckbox("Enable Twitch Emotes", settings.enableTwitchEmotes)); return layout;
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));
vbox->addWidget(createCheckbox("Enable Twitch Emotes", settings.enableTwitchEmotes)); QVBoxLayout *SettingsDialog::createIgnoredMessagesTab()
{
auto layout = this->createTabLayout();
vbox->addStretch(1); return layout;
addTab(vbox, "Emotes", ":/images/Emoji_Color_1F60A_19.png"); }
// Ignored Users QVBoxLayout *SettingsDialog::createLinksTab()
vbox = new QVBoxLayout(); {
vbox->addStretch(1); auto layout = this->createTabLayout();
addTab(vbox, "Ignored Users", ":/images/StatusAnnotations_Blocked_16xLG_color.png");
// Ignored Messages return layout;
vbox = new QVBoxLayout(); }
vbox->addStretch(1);
addTab(vbox, "Ignored Messages", ":/images/Filter_16x.png");
// Links QVBoxLayout *SettingsDialog::createLogsTab()
vbox = new QVBoxLayout(); {
vbox->addStretch(1); auto layout = this->createTabLayout();
addTab(vbox, "Links", ":/images/VSO_Link_blue_16x.png");
// Logging return layout;
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 highlights = new QListWidget();
auto highlightUserBlacklist = new QTextEdit(); auto highlightUserBlacklist = new QTextEdit();
globalHighlights = highlights; globalHighlights = highlights;
@ -388,12 +420,12 @@ void SettingsDialog::addTabs()
auto customSound = new QHBoxLayout(); auto customSound = new QHBoxLayout();
auto soundForm = new QFormLayout(); auto soundForm = new QFormLayout();
{ {
vbox->addWidget(createCheckbox("Enable Highlighting", settings.enableHighlights)); layout->addWidget(createCheckbox("Enable Highlighting", settings.enableHighlights));
vbox->addWidget(createCheckbox("Highlight messages containing your name", layout->addWidget(createCheckbox("Highlight messages containing your name",
settings.enableHighlightsSelf)); settings.enableHighlightsSelf));
vbox->addWidget(createCheckbox("Play sound when your name is mentioned", layout->addWidget(createCheckbox("Play sound when your name is mentioned",
settings.enableHighlightSound)); settings.enableHighlightSound));
vbox->addWidget(createCheckbox("Flash taskbar when your name is mentioned", layout->addWidget(createCheckbox("Flash taskbar when your name is mentioned",
settings.enableHighlightTaskbar)); settings.enableHighlightTaskbar));
customSound->addWidget(createCheckbox("Custom sound", settings.customHighlightSound)); customSound->addWidget(createCheckbox("Custom sound", settings.customHighlightSound));
auto selectBtn = new QPushButton("Select"); auto selectBtn = new QPushButton("Select");
@ -407,7 +439,6 @@ void SettingsDialog::addTabs()
soundForm->addRow(customSound); soundForm->addRow(customSound);
{ {
auto hbox = new QHBoxLayout(); auto hbox = new QHBoxLayout();
auto addBtn = new QPushButton("Add"); auto addBtn = new QPushButton("Add");
@ -483,8 +514,8 @@ void SettingsDialog::addTabs()
delete highlights->selectedItems().first(); delete highlights->selectedItems().first();
} }
}); });
vbox->addLayout(soundForm); layout->addLayout(soundForm);
vbox->addWidget( layout->addWidget(
createCheckbox("Always play highlight sound (Even if Chatterino is focused)", createCheckbox("Always play highlight sound (Even if Chatterino is focused)",
settings.highlightAlwaysPlaySound)); settings.highlightAlwaysPlaySound));
auto layoutVbox = new QVBoxLayout(); auto layoutVbox = new QVBoxLayout();
@ -504,35 +535,35 @@ void SettingsDialog::addTabs()
highlightTab->addTab(highlightWidget, "Highlights"); highlightTab->addTab(highlightWidget, "Highlights");
highlightTab->addTab(highlightUserBlacklist, "Disabled Users"); highlightTab->addTab(highlightUserBlacklist, "Disabled Users");
vbox->addWidget(highlightTab); layout->addWidget(highlightTab);
vbox->addLayout(hbox); layout->addLayout(hbox);
} }
QObject::connect(&this->ui.okButton, &QPushButton::clicked, this, [=, &settings]() { QObject::connect(&this->ui.okButton, &QPushButton::clicked, this, [=, &settings]() {
QStringList list = highlightUserBlacklist->toPlainText().split("\n",QString::SkipEmptyParts); QStringList list =
highlightUserBlacklist->toPlainText().split("\n", QString::SkipEmptyParts);
list.removeDuplicates(); list.removeDuplicates();
settings.highlightUserBlacklist.set(list.join("\n") + "\n"); settings.highlightUserBlacklist.set(list.join("\n") + "\n");
}); });
settings.highlightUserBlacklist.valueChanged.connect([=](const QString &str){ settings.highlightUserBlacklist.valueChanged.connect(
highlightUserBlacklist->setPlainText(str); [=](const QString &str) { highlightUserBlacklist->setPlainText(str); });
});
vbox->addStretch(1); return layout;
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);
} }
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(); auto widget = new QWidget();
widget->setLayout(layout); widget->setLayout(layout);
@ -575,6 +606,13 @@ void SettingsDialog::showDialog()
} }
/// Widget creation helpers /// Widget creation helpers
QVBoxLayout *SettingsDialog::createTabLayout()
{
auto layout = new QVBoxLayout();
return layout;
}
QCheckBox *SettingsDialog::createCheckbox(const QString &title, Setting<bool> &setting) QCheckBox *SettingsDialog::createCheckbox(const QString &title, Setting<bool> &setting)
{ {
auto checkbox = new QCheckBox(title); auto checkbox = new QCheckBox(title);

View file

@ -30,6 +30,7 @@ public:
void select(SettingsDialogTab *tab); void select(SettingsDialogTab *tab);
static void showDialog(); static void showDialog();
private: private:
SettingsSnapshot snapshot; SettingsSnapshot snapshot;
@ -45,22 +46,35 @@ private:
QPushButton cancelButton; QPushButton cancelButton;
} ui; } ui;
void addTab(QLayout *layout, QString title, QString imageRes); void addTab(QBoxLayout *layout, QString title, QString imageRes);
void addTabs(); 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; SettingsDialogTab *selectedTab = nullptr;
QListWidget *globalHighlights; QListWidget *globalHighlights;
/// Widget creation helpers /// Widget creation helpers
QVBoxLayout *createTabLayout();
QCheckBox *createCheckbox(const QString &title, Setting<bool> &setting); QCheckBox *createCheckbox(const QString &title, Setting<bool> &setting);
QCheckBox *createCheckbox(const QString &title, pajlada::Settings::Setting<bool> &setting); QCheckBox *createCheckbox(const QString &title, pajlada::Settings::Setting<bool> &setting);
QHBoxLayout *createCombobox(const QString &title, pajlada::Settings::Setting<int> &setting, QHBoxLayout *createCombobox(const QString &title, pajlada::Settings::Setting<int> &setting,
QStringList items, QStringList items,
std::function<void(QString, pajlada::Settings::Setting<int> &)> cb); std::function<void(QString, pajlada::Settings::Setting<int> &)> cb);
QHBoxLayout *createCombobox(const QString &title, pajlada::Settings::Setting<std::string> &setting, QHBoxLayout *createCombobox(
QStringList items, const QString &title, pajlada::Settings::Setting<std::string> &setting, QStringList items,
std::function<void(QString, pajlada::Settings::Setting<std::string> &)> cb); std::function<void(QString, pajlada::Settings::Setting<std::string> &)> cb);
QLineEdit *createLineEdit(pajlada::Settings::Setting<std::string> &setting); QLineEdit *createLineEdit(pajlada::Settings::Setting<std::string> &setting);