2018-01-12 23:09:05 +01:00
|
|
|
#include "appearancepage.hpp"
|
|
|
|
|
2018-04-27 22:11:19 +02:00
|
|
|
#include "application.hpp"
|
|
|
|
#include "util/layoutcreator.hpp"
|
|
|
|
#include "util/removescrollareabackground.hpp"
|
|
|
|
|
2018-01-12 23:09:05 +01:00
|
|
|
#include <QFontDialog>
|
|
|
|
#include <QFormLayout>
|
|
|
|
#include <QGroupBox>
|
|
|
|
#include <QLabel>
|
|
|
|
#include <QPushButton>
|
2018-04-25 20:35:32 +02:00
|
|
|
#include <QScrollArea>
|
2018-04-03 02:55:32 +02:00
|
|
|
#include <QSlider>
|
2018-01-12 23:09:05 +01:00
|
|
|
#include <QVBoxLayout>
|
|
|
|
|
|
|
|
#define THEME_ITEMS "White", "Light", "Dark", "Black"
|
|
|
|
|
2018-04-25 20:35:32 +02:00
|
|
|
#define TAB_X "Show close button"
|
2018-01-12 23:09:05 +01:00
|
|
|
#define TAB_PREF "Hide preferences button (ctrl+p to show)"
|
|
|
|
#define TAB_USER "Hide user button"
|
|
|
|
|
|
|
|
#define SCROLL_SMOOTH "Enable smooth scrolling"
|
|
|
|
#define SCROLL_NEWMSG "Enable smooth scrolling for new messages"
|
|
|
|
|
2018-04-25 20:35:32 +02:00
|
|
|
#define LAST_MSG "Mark the last message you read (dotted line)"
|
|
|
|
|
2018-01-17 18:36:12 +01:00
|
|
|
// clang-format off
|
|
|
|
#define TIMESTAMP_FORMATS "hh:mm a", "h:mm a", "hh:mm:ss a", "h:mm:ss a", "HH:mm", "H:mm", "HH:mm:ss", "H:mm:ss"
|
|
|
|
// clang-format on
|
2018-01-12 23:09:05 +01:00
|
|
|
|
|
|
|
namespace chatterino {
|
|
|
|
namespace widgets {
|
|
|
|
namespace settingspages {
|
|
|
|
|
|
|
|
AppearancePage::AppearancePage()
|
2018-04-25 20:35:32 +02:00
|
|
|
: SettingsPage("Look", ":/images/theme.svg")
|
2018-01-12 23:09:05 +01:00
|
|
|
{
|
2018-04-27 22:11:19 +02:00
|
|
|
auto app = getApp();
|
2018-01-12 23:09:05 +01:00
|
|
|
util::LayoutCreator<AppearancePage> layoutCreator(this);
|
2018-04-25 20:35:32 +02:00
|
|
|
|
|
|
|
auto scroll = layoutCreator.emplace<QScrollArea>();
|
|
|
|
auto widget = scroll.emplaceScrollAreaWidget();
|
|
|
|
util::removeScrollAreaBackground(*scroll, *widget);
|
|
|
|
|
|
|
|
auto layout = widget.setLayoutType<QVBoxLayout>();
|
2018-01-12 23:09:05 +01:00
|
|
|
|
|
|
|
auto application =
|
|
|
|
layout.emplace<QGroupBox>("Application").emplace<QVBoxLayout>().withoutMargin();
|
|
|
|
{
|
|
|
|
auto form = application.emplace<QFormLayout>();
|
|
|
|
|
|
|
|
// clang-format off
|
2018-04-27 22:11:19 +02:00
|
|
|
form->addRow("Theme:", this->createComboBox({THEME_ITEMS}, app->themes->themeName));
|
2018-04-25 20:35:32 +02:00
|
|
|
form->addRow("Theme color:", this->createThemeColorChanger());
|
|
|
|
form->addRow("Font:", this->createFontChanger());
|
|
|
|
|
2018-04-28 13:48:49 +02:00
|
|
|
form->addRow("Tabs:", this->createCheckBox(TAB_X, app->settings->showTabCloseButton));
|
2018-04-25 20:35:32 +02:00
|
|
|
#ifndef USEWINSDK
|
2018-04-27 22:11:19 +02:00
|
|
|
form->addRow("", this->createCheckBox(TAB_PREF, app->settings->hidePreferencesButton));
|
|
|
|
form->addRow("", this->createCheckBox(TAB_USER, app->settings->hideUserButton));
|
2018-04-25 20:35:32 +02:00
|
|
|
#endif
|
|
|
|
|
2018-04-27 22:11:19 +02:00
|
|
|
form->addRow("Scrolling:", this->createCheckBox(SCROLL_SMOOTH, app->settings->enableSmoothScrolling));
|
|
|
|
form->addRow("", this->createCheckBox(SCROLL_NEWMSG, app->settings->enableSmoothScrollingNewMessages));
|
2018-01-12 23:09:05 +01:00
|
|
|
// clang-format on
|
|
|
|
}
|
|
|
|
|
2018-04-25 20:35:32 +02:00
|
|
|
auto messages = layout.emplace<QGroupBox>("Messages").emplace<QVBoxLayout>();
|
2018-01-12 23:09:05 +01:00
|
|
|
{
|
2018-04-27 22:11:19 +02:00
|
|
|
messages.append(this->createCheckBox("Show timestamp", app->settings->showTimestamps));
|
2018-04-25 20:35:32 +02:00
|
|
|
auto tbox = messages.emplace<QHBoxLayout>().withoutMargin();
|
2018-01-12 23:09:05 +01:00
|
|
|
{
|
2018-01-17 18:36:12 +01:00
|
|
|
tbox.emplace<QLabel>("timestamp format (a = am/pm):");
|
2018-04-27 22:11:19 +02:00
|
|
|
tbox.append(this->createComboBox({TIMESTAMP_FORMATS}, app->settings->timestampFormat));
|
2018-01-24 15:08:22 +01:00
|
|
|
tbox->addStretch(1);
|
2018-01-12 23:09:05 +01:00
|
|
|
}
|
2018-04-21 00:40:17 +02:00
|
|
|
|
2018-04-27 22:11:19 +02:00
|
|
|
messages.append(this->createCheckBox("Show badges", app->settings->showBadges));
|
|
|
|
auto checkbox = this->createCheckBox("Seperate messages", app->settings->seperateMessages);
|
2018-04-21 00:40:17 +02:00
|
|
|
checkbox->setEnabled(false);
|
|
|
|
messages.append(checkbox);
|
2018-04-27 22:11:19 +02:00
|
|
|
messages.append(this->createCheckBox("Show message length while typing",
|
|
|
|
app->settings->showMessageLength));
|
2018-04-25 20:35:32 +02:00
|
|
|
|
2018-04-27 22:11:19 +02:00
|
|
|
messages.append(this->createCheckBox(LAST_MSG, app->settings->showLastMessageIndicator));
|
2018-04-25 20:35:32 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
auto emotes = layout.emplace<QGroupBox>("Emotes").setLayoutType<QVBoxLayout>();
|
|
|
|
{
|
|
|
|
emotes.append(
|
2018-04-27 22:11:19 +02:00
|
|
|
this->createCheckBox("Enable Twitch emotes", app->settings->enableTwitchEmotes));
|
|
|
|
emotes.append(this->createCheckBox("Enable BetterTTV emotes for Twitch",
|
|
|
|
app->settings->enableBttvEmotes));
|
2018-04-25 20:35:32 +02:00
|
|
|
emotes.append(this->createCheckBox("Enable FrankerFaceZ emotes for Twitch",
|
2018-04-27 22:11:19 +02:00
|
|
|
app->settings->enableFfzEmotes));
|
|
|
|
emotes.append(this->createCheckBox("Enable emojis", app->settings->enableEmojis));
|
|
|
|
emotes.append(
|
|
|
|
this->createCheckBox("Enable animations", app->settings->enableGifAnimations));
|
2018-01-12 23:09:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
layout->addStretch(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
QLayout *AppearancePage::createThemeColorChanger()
|
|
|
|
{
|
2018-04-27 22:11:19 +02:00
|
|
|
auto app = getApp();
|
2018-01-12 23:09:05 +01:00
|
|
|
QHBoxLayout *layout = new QHBoxLayout;
|
|
|
|
|
2018-04-27 22:11:19 +02:00
|
|
|
auto &themeHue = app->themes->themeHue;
|
2018-01-12 23:09:05 +01:00
|
|
|
|
|
|
|
// SLIDER
|
|
|
|
QSlider *slider = new QSlider(Qt::Horizontal);
|
|
|
|
layout->addWidget(slider);
|
2018-01-23 13:34:26 +01:00
|
|
|
slider->setValue(std::min(std::max(themeHue.getValue(), 0.0), 1.0) * 100);
|
2018-01-12 23:09:05 +01:00
|
|
|
|
|
|
|
// BUTTON
|
|
|
|
QPushButton *button = new QPushButton;
|
|
|
|
layout->addWidget(button);
|
|
|
|
button->setFlat(true);
|
|
|
|
button->setFixedWidth(64);
|
|
|
|
|
2018-04-27 22:11:19 +02:00
|
|
|
auto setButtonColor = [button, app](int value) mutable {
|
2018-01-23 13:34:26 +01:00
|
|
|
double newValue = value / 100.0;
|
2018-04-27 22:11:19 +02:00
|
|
|
app->themes->themeHue.setValue(newValue);
|
2018-01-12 23:09:05 +01:00
|
|
|
|
|
|
|
QPalette pal = button->palette();
|
|
|
|
QColor color;
|
|
|
|
color.setHsvF(newValue, 1.0, 1.0, 1.0);
|
|
|
|
pal.setColor(QPalette::Button, color);
|
|
|
|
button->setAutoFillBackground(true);
|
|
|
|
button->setPalette(pal);
|
|
|
|
button->update();
|
2018-02-06 00:10:30 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
// SIGNALS
|
|
|
|
QObject::connect(slider, &QSlider::valueChanged, this, setButtonColor);
|
2018-01-12 23:09:05 +01:00
|
|
|
|
2018-02-06 00:10:30 +01:00
|
|
|
setButtonColor(themeHue * 100);
|
2018-01-12 23:09:05 +01:00
|
|
|
|
|
|
|
return layout;
|
|
|
|
}
|
|
|
|
|
|
|
|
QLayout *AppearancePage::createFontChanger()
|
|
|
|
{
|
|
|
|
QHBoxLayout *layout = new QHBoxLayout;
|
|
|
|
|
|
|
|
auto &fontManager = singletons::FontManager::getInstance();
|
|
|
|
|
|
|
|
// LABEL
|
|
|
|
QLabel *label = new QLabel();
|
|
|
|
layout->addWidget(label);
|
|
|
|
|
|
|
|
auto updateFontFamilyLabel = [label, &fontManager](auto) {
|
|
|
|
label->setText(QString::fromStdString(fontManager.currentFontFamily.getValue()) + ", " +
|
|
|
|
QString::number(fontManager.currentFontSize) + "pt");
|
|
|
|
};
|
|
|
|
|
|
|
|
fontManager.currentFontFamily.connectSimple(updateFontFamilyLabel, this->managedConnections);
|
|
|
|
fontManager.currentFontSize.connectSimple(updateFontFamilyLabel, this->managedConnections);
|
|
|
|
|
|
|
|
// BUTTON
|
|
|
|
QPushButton *button = new QPushButton("Select");
|
|
|
|
layout->addWidget(button);
|
|
|
|
button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Policy::Fixed);
|
|
|
|
|
|
|
|
QObject::connect(button, &QPushButton::clicked, []() {
|
|
|
|
auto &fontManager = singletons::FontManager::getInstance();
|
|
|
|
QFontDialog dialog(fontManager.getFont(singletons::FontManager::Medium, 1.));
|
|
|
|
|
|
|
|
dialog.connect(&dialog, &QFontDialog::fontSelected, [](const QFont &font) {
|
|
|
|
auto &fontManager = singletons::FontManager::getInstance();
|
|
|
|
fontManager.currentFontFamily = font.family().toStdString();
|
|
|
|
fontManager.currentFontSize = font.pointSize();
|
|
|
|
});
|
|
|
|
|
|
|
|
dialog.show();
|
|
|
|
dialog.exec();
|
|
|
|
});
|
|
|
|
|
|
|
|
return layout;
|
|
|
|
}
|
2018-04-03 02:55:32 +02:00
|
|
|
|
2018-01-12 23:09:05 +01:00
|
|
|
} // namespace settingspages
|
|
|
|
} // namespace widgets
|
|
|
|
} // namespace chatterino
|