mirror-chatterino2/src/widgets/settingspages/HighlightingPage.cpp

159 lines
6.3 KiB
C++
Raw Normal View History

2018-06-26 14:09:39 +02:00
#include "HighlightingPage.hpp"
2018-01-12 23:09:05 +01:00
2018-06-26 14:09:39 +02:00
#include "Application.hpp"
#include "controllers/highlights/HighlightBlacklistModel.hpp"
2018-06-26 14:09:39 +02:00
#include "controllers/highlights/HighlightController.hpp"
#include "controllers/highlights/HighlightModel.hpp"
#include "controllers/highlights/UserHighlightModel.hpp"
2018-06-26 14:09:39 +02:00
#include "debug/Log.hpp"
2018-06-28 19:46:45 +02:00
#include "singletons/Settings.hpp"
2018-06-26 14:09:39 +02:00
#include "util/LayoutCreator.hpp"
#include "util/StandardItemHelper.hpp"
#include "widgets/helper/EditableModelView.hpp"
2018-01-13 02:00:02 +01:00
#include <QFileDialog>
2018-06-21 13:02:34 +02:00
#include <QHeaderView>
2018-01-13 02:00:02 +01:00
#include <QListWidget>
#include <QPushButton>
2018-04-26 20:58:32 +02:00
#include <QStandardItemModel>
2018-01-13 02:00:02 +01:00
#include <QTabWidget>
#include <QTableView>
2018-01-13 02:00:02 +01:00
#include <QTextEdit>
#define ENABLE_HIGHLIGHTS "Enable Highlighting"
#define HIGHLIGHT_MSG "Highlight messages containing your name"
#define PLAY_SOUND "Play sound when your name is mentioned"
#define FLASH_TASKBAR "Flash taskbar when your name is mentioned"
2018-08-06 21:17:03 +02:00
#define ALWAYS_PLAY \
"Always play highlight sound (Even if Chatterino is focused)"
2018-01-13 02:00:02 +01:00
2018-01-12 23:09:05 +01:00
namespace chatterino {
2018-01-12 23:09:05 +01:00
HighlightingPage::HighlightingPage()
2018-08-09 06:22:55 +02:00
: SettingsPage("Highlights", ":/settings/notifications.svg")
2018-01-12 23:09:05 +01:00
{
auto app = getApp();
2018-06-26 17:06:17 +02:00
LayoutCreator<HighlightingPage> layoutCreator(this);
2018-01-13 02:00:02 +01:00
auto layout = layoutCreator.emplace<QVBoxLayout>().withoutMargin();
{
// GENERAL
2018-08-06 21:17:03 +02:00
// layout.append(this->createCheckBox(ENABLE_HIGHLIGHTS,
// getSettings()->enableHighlights));
2018-01-13 02:00:02 +01:00
// TABS
auto tabs = layout.emplace<QTabWidget>();
{
// HIGHLIGHTS
2018-07-05 16:22:25 +02:00
auto highlights = tabs.appendTab(new QVBoxLayout, "Phrases");
2018-01-13 02:00:02 +01:00
{
2018-06-26 17:06:17 +02:00
EditableModelView *view =
2018-08-06 21:17:03 +02:00
highlights
.emplace<EditableModelView>(
app->highlights->createModel(nullptr))
.getElement();
2018-08-06 21:17:03 +02:00
view->setTitles({"Pattern", "Flash\ntaskbar", "Play\nsound",
"Enable\nregex"});
view->getTableView()->horizontalHeader()->setSectionResizeMode(
QHeaderView::Fixed);
view->getTableView()->horizontalHeader()->setSectionResizeMode(
0, QHeaderView::Stretch);
2018-08-06 21:17:03 +02:00
// fourtf: make class extrend BaseWidget and add this to
// dpiChanged
2018-04-25 20:35:32 +02:00
QTimer::singleShot(1, [view] {
view->getTableView()->resizeColumnsToContents();
2018-05-06 12:52:47 +02:00
view->getTableView()->setColumnWidth(0, 200);
2018-04-25 20:35:32 +02:00
});
2018-01-13 02:00:02 +01:00
view->addButtonPressed.connect([] {
getApp()->highlights->phrases.appendItem(
2018-06-26 17:06:17 +02:00
HighlightPhrase{"my phrase", true, false, false});
2018-04-26 20:58:32 +02:00
});
2018-01-13 02:00:02 +01:00
}
2018-07-05 16:22:25 +02:00
auto pingUsers = tabs.appendTab(new QVBoxLayout, "Users");
2018-01-13 02:00:02 +01:00
{
EditableModelView *view =
2018-08-06 21:17:03 +02:00
pingUsers
.emplace<EditableModelView>(
app->highlights->createUserModel(nullptr))
.getElement();
2018-01-13 02:00:02 +01:00
2018-08-06 21:17:03 +02:00
view->setTitles({"Username", "Flash\ntaskbar", "Play\nsound",
"Enable\nregex"});
view->getTableView()->horizontalHeader()->setSectionResizeMode(
QHeaderView::Fixed);
view->getTableView()->horizontalHeader()->setSectionResizeMode(
0, QHeaderView::Stretch);
2018-01-13 02:00:02 +01:00
2018-08-06 21:17:03 +02:00
// fourtf: make class extrend BaseWidget and add this to
// dpiChanged
QTimer::singleShot(1, [view] {
view->getTableView()->resizeColumnsToContents();
view->getTableView()->setColumnWidth(0, 200);
});
2018-01-13 02:00:02 +01:00
view->addButtonPressed.connect([] {
2018-07-05 16:22:25 +02:00
getApp()->highlights->highlightedUsers.appendItem(
2018-08-06 21:17:03 +02:00
HighlightPhrase{"highlighted user", true, false,
false});
2018-01-13 02:00:02 +01:00
});
}
2018-08-06 21:17:03 +02:00
auto disabledUsers =
tabs.appendTab(new QVBoxLayout, "Excluded Users");
{
EditableModelView *view =
2018-07-05 16:22:25 +02:00
disabledUsers
2018-08-06 21:17:03 +02:00
.emplace<EditableModelView>(
app->highlights->createBlacklistModel(nullptr))
.getElement();
2018-07-05 16:22:25 +02:00
view->setTitles({"Pattern", "Enable\nregex"});
2018-08-06 21:17:03 +02:00
view->getTableView()->horizontalHeader()->setSectionResizeMode(
QHeaderView::Fixed);
view->getTableView()->horizontalHeader()->setSectionResizeMode(
0, QHeaderView::Stretch);
2018-08-06 21:17:03 +02:00
// fourtf: make class extrend BaseWidget and add this to
// dpiChanged
QTimer::singleShot(1, [view] {
view->getTableView()->resizeColumnsToContents();
view->getTableView()->setColumnWidth(0, 200);
});
view->addButtonPressed.connect([] {
2018-07-05 16:22:25 +02:00
getApp()->highlights->blacklistedUsers.appendItem(
HighlightBlacklistUser{"blacklisted user", false});
});
}
2018-01-13 02:00:02 +01:00
}
2018-04-26 23:07:02 +02:00
// MISC
auto customSound = layout.emplace<QHBoxLayout>().withoutMargin();
{
2018-08-06 21:17:03 +02:00
customSound.append(this->createCheckBox(
"Custom sound", getSettings()->customHighlightSound));
2018-08-06 21:17:03 +02:00
auto selectFile =
customSound.emplace<QPushButton>("Select custom sound file");
QObject::connect(selectFile.getElement(), &QPushButton::clicked,
this, [this, app] {
auto fileName = QFileDialog::getOpenFileName(
this, tr("Open Sound"), "",
tr("Audio Files (*.mp3 *.wav)"));
getSettings()->pathHighlightSound = fileName;
2018-08-06 21:17:03 +02:00
});
2018-04-26 23:07:02 +02:00
}
2018-08-06 21:17:03 +02:00
layout.append(createCheckBox(ALWAYS_PLAY,
getSettings()->highlightAlwaysPlaySound));
2018-01-13 02:00:02 +01:00
}
// ---- misc
2018-07-06 19:23:47 +02:00
this->disabledUsersChangedTimer_.setSingleShot(true);
2018-01-13 02:00:02 +01:00
}
2018-01-12 23:09:05 +01:00
} // namespace chatterino