mirror-chatterino2/src/widgets/dialogs/SettingsDialog.cpp

227 lines
6.4 KiB
C++
Raw Normal View History

2018-06-26 15:11:45 +02:00
#include "widgets/dialogs/SettingsDialog.hpp"
2018-06-26 14:09:39 +02:00
#include "Application.hpp"
#include "util/LayoutCreator.hpp"
#include "widgets/helper/SettingsDialogTab.hpp"
#include "widgets/settingspages/AboutPage.hpp"
#include "widgets/settingspages/AccountsPage.hpp"
#include "widgets/settingspages/AppearancePage.hpp"
#include "widgets/settingspages/BehaviourPage.hpp"
2018-06-26 17:42:35 +02:00
#include "widgets/settingspages/BrowserExtensionPage.hpp"
2018-06-26 14:09:39 +02:00
#include "widgets/settingspages/CommandPage.hpp"
#include "widgets/settingspages/EmotesPage.hpp"
2018-06-26 17:42:35 +02:00
#include "widgets/settingspages/ExternalToolsPage.hpp"
2018-06-26 14:09:39 +02:00
#include "widgets/settingspages/HighlightingPage.hpp"
#include "widgets/settingspages/IgnoreusersPage.hpp"
2018-06-26 17:42:35 +02:00
#include "widgets/settingspages/KeyboardSettingsPage.hpp"
2018-06-26 14:09:39 +02:00
#include "widgets/settingspages/LogsPage.hpp"
#include "widgets/settingspages/ModerationPage.hpp"
#include "widgets/settingspages/SpecialChannelsPage.hpp"
2017-01-02 03:02:32 +01:00
2018-01-12 23:33:04 +01:00
#include <QDialogButtonBox>
2017-01-01 18:43:52 +01:00
2017-04-14 17:52:22 +02:00
namespace chatterino {
2017-01-18 21:30:23 +01:00
2018-01-02 02:15:11 +01:00
SettingsDialog *SettingsDialog::handle = nullptr;
2017-01-01 18:43:52 +01:00
SettingsDialog::SettingsDialog()
2018-06-11 15:04:54 +02:00
: BaseWindow(nullptr, BaseWindow::DisableCustomScaling)
2017-01-01 18:43:52 +01:00
{
2018-01-12 23:09:05 +01:00
this->initUi();
2017-01-02 03:02:32 +01:00
2017-07-02 12:36:50 +02:00
this->addTabs();
2018-01-25 20:49:49 +01:00
this->scaleChangedEvent(this->getScale());
2017-01-02 03:02:32 +01:00
}
2018-01-12 23:09:05 +01:00
void SettingsDialog::initUi()
{
2018-06-26 17:06:17 +02:00
LayoutCreator<SettingsDialog> layoutCreator(this);
2017-04-13 16:06:23 +02:00
2018-01-12 23:09:05 +01:00
// tab pages
layoutCreator.emplace<QWidget>()
2018-06-11 15:04:54 +02:00
.assign(&this->ui_.tabContainerContainer)
2018-01-12 23:09:05 +01:00
.emplace<QVBoxLayout>()
.withoutMargin()
2018-06-11 15:04:54 +02:00
.assign(&this->ui_.tabContainer);
2017-01-02 03:02:32 +01:00
2018-01-12 23:09:05 +01:00
// right side layout
2018-01-13 02:00:02 +01:00
auto right = layoutCreator.emplace<QVBoxLayout>().withoutMargin();
2017-01-02 03:02:32 +01:00
{
2018-06-11 15:04:54 +02:00
right.emplace<QStackedLayout>().assign(&this->ui_.pageStack).withoutMargin();
2017-01-02 03:02:32 +01:00
2018-01-12 23:09:05 +01:00
auto buttons = right.emplace<QDialogButtonBox>(Qt::Horizontal);
2017-07-02 12:36:50 +02:00
{
2018-06-11 15:04:54 +02:00
this->ui_.okButton = buttons->addButton("Ok", QDialogButtonBox::YesRole);
this->ui_.cancelButton = buttons->addButton("Cancel", QDialogButtonBox::NoRole);
2017-07-02 12:36:50 +02:00
}
}
2017-01-22 12:46:35 +01:00
2018-01-12 23:09:05 +01:00
// ---- misc
2018-06-11 15:04:54 +02:00
this->ui_.tabContainerContainer->setObjectName("tabWidget");
this->ui_.pageStack->setObjectName("pages");
2017-01-22 12:46:35 +01:00
2018-06-11 15:04:54 +02:00
QObject::connect(this->ui_.okButton, &QPushButton::clicked, this,
2018-01-12 23:09:05 +01:00
&SettingsDialog::okButtonClicked);
2018-06-11 15:04:54 +02:00
QObject::connect(this->ui_.cancelButton, &QPushButton::clicked, this,
2018-01-12 23:09:05 +01:00
&SettingsDialog::cancelButtonClicked);
}
2017-01-22 12:46:35 +01:00
2018-01-12 23:09:05 +01:00
SettingsDialog *SettingsDialog::getHandle()
{
2018-01-12 23:09:05 +01:00
return SettingsDialog::handle;
}
2017-01-22 12:46:35 +01:00
2018-01-12 23:09:05 +01:00
void SettingsDialog::addTabs()
{
2018-06-11 15:04:54 +02:00
this->ui_.tabContainer->setSpacing(0);
2018-01-24 15:34:04 +01:00
2018-06-26 17:06:17 +02:00
this->addTab(new AccountsPage);
2018-04-25 20:35:32 +02:00
2018-06-11 15:04:54 +02:00
this->ui_.tabContainer->addSpacing(16);
2018-04-25 20:35:32 +02:00
2018-06-26 17:06:17 +02:00
this->addTab(new AppearancePage);
this->addTab(new BehaviourPage);
2018-04-25 20:35:32 +02:00
2018-06-11 15:04:54 +02:00
this->ui_.tabContainer->addSpacing(16);
2018-04-25 20:35:32 +02:00
2018-06-26 17:06:17 +02:00
this->addTab(new CommandPage);
// this->addTab(new EmotesPage);
this->addTab(new HighlightingPage);
this->addTab(new IgnoreUsersPage);
2018-01-24 15:34:04 +01:00
2018-06-11 15:04:54 +02:00
this->ui_.tabContainer->addSpacing(16);
2018-01-24 15:34:04 +01:00
2018-06-26 17:06:17 +02:00
this->addTab(new KeyboardSettingsPage);
// this->addTab(new LogsPage);
this->addTab(new ModerationPage);
// this->addTab(new SpecialChannelsPage);
this->addTab(new BrowserExtensionPage);
this->addTab(new ExternalToolsPage);
2018-06-11 15:04:54 +02:00
this->ui_.tabContainer->addStretch(1);
2018-06-26 17:06:17 +02:00
this->addTab(new AboutPage, Qt::AlignBottom);
2017-01-02 03:02:32 +01:00
}
2018-06-26 17:06:17 +02:00
void SettingsDialog::addTab(SettingsPage *page, Qt::Alignment alignment)
2017-01-02 03:02:32 +01:00
{
2018-01-13 00:18:18 +01:00
auto tab = new SettingsDialogTab(this, page, page->getIconResource());
2017-01-02 03:02:32 +01:00
2018-06-11 15:04:54 +02:00
this->ui_.pageStack->addWidget(page);
this->ui_.tabContainer->addWidget(tab, 0, alignment);
2018-01-12 23:09:05 +01:00
this->tabs.push_back(tab);
2017-01-02 03:02:32 +01:00
2018-01-12 23:09:05 +01:00
if (this->tabs.size() == 1) {
2017-07-02 12:36:50 +02:00
this->select(tab);
2017-01-02 03:02:32 +01:00
}
}
2017-04-12 17:46:44 +02:00
void SettingsDialog::select(SettingsDialogTab *tab)
2017-01-02 03:02:32 +01:00
{
2018-06-11 15:04:54 +02:00
this->ui_.pageStack->setCurrentWidget(tab->getSettingsPage());
2017-01-02 03:02:32 +01:00
2017-07-02 12:36:50 +02:00
if (this->selectedTab != nullptr) {
this->selectedTab->setSelected(false);
this->selectedTab->setStyleSheet("color: #FFF");
2017-01-02 03:02:32 +01:00
}
2017-01-01 18:43:52 +01:00
2017-01-02 03:02:32 +01:00
tab->setSelected(true);
2017-02-02 00:25:57 +01:00
tab->setStyleSheet("background: #555; color: #FFF");
2017-07-02 12:36:50 +02:00
this->selectedTab = tab;
2017-01-01 18:43:52 +01:00
}
void SettingsDialog::showDialog(PreferredTab preferredTab)
{
static SettingsDialog *instance = new SettingsDialog();
instance->refresh();
switch (preferredTab) {
case SettingsDialog::PreferredTab::Accounts: {
instance->select(instance->tabs.at(0));
} break;
}
instance->show();
instance->activateWindow();
instance->raise();
instance->setFocus();
}
void SettingsDialog::refresh()
{
2018-01-12 23:09:05 +01:00
// this->ui.accountSwitchWidget->refresh();
getApp()->settings->saveSnapshot();
for (auto *tab : this->tabs) {
tab->getSettingsPage()->onShow();
}
}
2018-01-25 20:49:49 +01:00
void SettingsDialog::scaleChangedEvent(float newDpi)
{
QFile file(":/qss/settings.qss");
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
styleSheet.replace("<font-size>", QString::number((int)(14 * newDpi)));
styleSheet.replace("<checkbox-size>", QString::number((int)(14 * newDpi)));
for (SettingsDialogTab *tab : this->tabs) {
tab->setFixedHeight((int)(30 * newDpi));
}
this->setStyleSheet(styleSheet);
2018-06-11 15:04:54 +02:00
this->ui_.tabContainerContainer->setFixedWidth((int)(200 * newDpi));
}
2018-04-18 09:33:05 +02:00
void SettingsDialog::themeRefreshEvent()
{
BaseWindow::themeRefreshEvent();
QPalette palette;
palette.setColor(QPalette::Background, QColor("#444"));
this->setPalette(palette);
}
2018-01-12 23:09:05 +01:00
// void SettingsDialog::setChildrensFont(QLayout *object, QFont &font, int indent)
//{
// // for (QWidget *widget : this->widgets) {
// // widget->setFont(font);
// // }
// // for (int i = 0; i < object->count(); i++) {
// // if (object->itemAt(i)->layout()) {
// // setChildrensFont(object->layout()->itemAt(i)->layout(), font, indent + 2);
// // }
2018-01-12 23:09:05 +01:00
// // if (object->itemAt(i)->widget()) {
// // object->itemAt(i)->widget()->setFont(font);
2018-01-12 23:09:05 +01:00
// // if (object->itemAt(i)->widget()->layout() &&
// // !object->itemAt(i)->widget()->layout()->isEmpty()) {
// // setChildrensFont(object->itemAt(i)->widget()->layout(), font, indent +
// 2);
// // }
// // }
// // }
//}
2018-01-12 23:09:05 +01:00
///// Widget creation helpers
2017-04-12 17:46:44 +02:00
void SettingsDialog::okButtonClicked()
2017-01-24 19:51:57 +01:00
{
this->close();
}
2017-04-12 17:46:44 +02:00
void SettingsDialog::cancelButtonClicked()
2017-01-24 19:51:57 +01:00
{
2018-01-12 23:09:05 +01:00
for (auto &tab : this->tabs) {
tab->getSettingsPage()->cancel();
}
getApp()->settings->restoreSnapshot();
2017-01-24 19:51:57 +01:00
this->close();
}
2017-04-14 17:52:22 +02:00
} // namespace chatterino