Implemented requested changes

changed setting from String to int.
changed EnumCase

I used createComboBox only has an implementation that handles stringsettings. I implemented my own combobox to handle the ToastsSettings now. Not sure if this is the best way. Won't come up with something smarter for now.
This commit is contained in:
TranRed 2019-04-27 18:15:41 +02:00 committed by pajlada
parent c20629c165
commit 2a590adba7
5 changed files with 67 additions and 33 deletions

View file

@ -173,9 +173,9 @@ public:
"qrc:/sounds/ping3.wav"}; "qrc:/sounds/ping3.wav"};
BoolSetting notificationToast = {"/notifications/enableToast", false}; BoolSetting notificationToast = {"/notifications/enableToast", false};
QStringSetting openFromToast = { IntSetting openFromToast = {
"/notifications/openFromToast", "/notifications/openFromToast",
Toasts::findStringFromReaction(ToastReactions::openInBrowser)}; static_cast<int>(ToastReactions::OpenInBrowser)};
/// External tools /// External tools
// Streamlink // Streamlink

View file

@ -28,16 +28,16 @@
namespace chatterino { namespace chatterino {
std::map<ToastReactions, QString> Toasts::reactionToString = { std::map<ToastReactions, QString> Toasts::reactionToString = {
{ToastReactions::openInBrowser, OPEN_IN_BROWSER}, {ToastReactions::OpenInBrowser, OPEN_IN_BROWSER},
{ToastReactions::openInPlayer, OPEN_PLAYER_IN_BROWSER}, {ToastReactions::OpenInPlayer, OPEN_PLAYER_IN_BROWSER},
{ToastReactions::openInStreamlink, OPEN_IN_STREAMLINK}, {ToastReactions::OpenInStreamlink, OPEN_IN_STREAMLINK},
{ToastReactions::dontOpen, DONT_OPEN}}; {ToastReactions::DontOpen, DONT_OPEN}};
std::map<QString, ToastReactions> Toasts::stringToReaction = { std::map<QString, ToastReactions> Toasts::stringToReaction = {
{OPEN_IN_BROWSER, ToastReactions::openInBrowser}, {OPEN_IN_BROWSER, ToastReactions::OpenInBrowser},
{OPEN_PLAYER_IN_BROWSER, ToastReactions::openInPlayer}, {OPEN_PLAYER_IN_BROWSER, ToastReactions::OpenInPlayer},
{OPEN_IN_STREAMLINK, ToastReactions::openInStreamlink}, {OPEN_IN_STREAMLINK, ToastReactions::OpenInStreamlink},
{DONT_OPEN, ToastReactions::dontOpen}}; {DONT_OPEN, ToastReactions::DontOpen}};
bool Toasts::isEnabled() bool Toasts::isEnabled()
{ {
@ -61,6 +61,13 @@ QString Toasts::findStringFromReaction(const ToastReactions &reaction)
} }
} }
QString Toasts::findStringFromReaction(
const pajlada::Settings::Setting<int> &value)
{
int i = static_cast<int>(value);
return Toasts::findStringFromReaction(static_cast<ToastReactions>(i));
}
ToastReactions Toasts::findReactionFromString(const QString &string) ToastReactions Toasts::findReactionFromString(const QString &string)
{ {
auto iterator = Toasts::stringToReaction.find(string); auto iterator = Toasts::stringToReaction.find(string);
@ -70,7 +77,7 @@ ToastReactions Toasts::findReactionFromString(const QString &string)
} }
else else
{ {
return ToastReactions::dontOpen; return ToastReactions::DontOpen;
} }
} }
void Toasts::sendChannelNotification(const QString &channelName, Platform p) void Toasts::sendChannelNotification(const QString &channelName, Platform p)
@ -125,23 +132,24 @@ public:
void toastActivated() const void toastActivated() const
{ {
QString link; QString link;
switch (Toasts::findReactionFromString(getSettings()->openFromToast)) switch (static_cast<ToastReactions>(
getSettings()->openFromToast.getValue()))
{ {
case ToastReactions::openInBrowser: case ToastReactions::OpenInBrowser:
if (platform_ == Platform::Twitch) if (platform_ == Platform::Twitch)
{ {
link = "http://www.twitch.tv/" + channelName_; link = "http://www.twitch.tv/" + channelName_;
} }
QDesktopServices::openUrl(QUrl(link)); QDesktopServices::openUrl(QUrl(link));
break; break;
case ToastReactions::openInPlayer: case ToastReactions::OpenInPlayer:
if (platform_ == Platform::Twitch) if (platform_ == Platform::Twitch)
{ {
link = "https://player.twitch.tv/?channel=" + channelName_; link = "https://player.twitch.tv/?channel=" + channelName_;
} }
QDesktopServices::openUrl(QUrl(link)); QDesktopServices::openUrl(QUrl(link));
break; break;
case ToastReactions::openInStreamlink: case ToastReactions::OpenInStreamlink:
{ {
openStreamlinkForChannel(channelName_); openStreamlinkForChannel(channelName_);
break; break;
@ -173,10 +181,11 @@ void Toasts::sendWindowsNotification(const QString &channelName, Platform p)
std::wstring widestr = std::wstring(utf8_text.begin(), utf8_text.end()); std::wstring widestr = std::wstring(utf8_text.begin(), utf8_text.end());
templ.setTextField(widestr, WinToastLib::WinToastTemplate::FirstLine); templ.setTextField(widestr, WinToastLib::WinToastTemplate::FirstLine);
if (Toasts::findReactionFromString(getSettings()->openFromToast) != if (static_cast<ToastReactions>(getSettings()->openFromToast.getValue()) !=
ToastReactions::dontOpen) ToastReactions::DontOpen)
{ {
QString mode = getSettings()->openFromToast; QString mode =
Toasts::findStringFromReaction(getSettings()->openFromToast);
mode = mode.toLower(); mode = mode.toLower();
templ.setTextField(L"Click here to " + mode.toStdWString(), templ.setTextField(L"Click here to " + mode.toStdWString(),

View file

@ -8,10 +8,10 @@ namespace chatterino {
enum class Platform : uint8_t; enum class Platform : uint8_t;
enum class ToastReactions { enum class ToastReactions {
openInBrowser, OpenInBrowser = 0,
openInPlayer, OpenInPlayer = 1,
openInStreamlink, OpenInStreamlink = 2,
dontOpen DontOpen = 3
}; };
class Toasts final : public Singleton class Toasts final : public Singleton
@ -19,6 +19,8 @@ class Toasts final : public Singleton
public: public:
void sendChannelNotification(const QString &channelName, Platform p); void sendChannelNotification(const QString &channelName, Platform p);
static QString findStringFromReaction(const ToastReactions &reaction); static QString findStringFromReaction(const ToastReactions &reaction);
static QString findStringFromReaction(
const pajlada::Settings::Setting<int> &reaction);
static ToastReactions findReactionFromString(const QString &string); static ToastReactions findReactionFromString(const QString &string);
static std::map<ToastReactions, QString> reactionToString; static std::map<ToastReactions, QString> reactionToString;
static std::map<QString, ToastReactions> stringToReaction; static std::map<QString, ToastReactions> stringToReaction;

View file

@ -24,7 +24,6 @@ NotificationPage::NotificationPage()
: SettingsPage("Notifications", ":/settings/notification2.svg") : SettingsPage("Notifications", ":/settings/notification2.svg")
{ {
LayoutCreator<NotificationPage> layoutCreator(this); LayoutCreator<NotificationPage> layoutCreator(this);
auto layout = layoutCreator.emplace<QVBoxLayout>().withoutMargin(); auto layout = layoutCreator.emplace<QVBoxLayout>().withoutMargin();
{ {
auto tabs = layout.emplace<QTabWidget>(); auto tabs = layout.emplace<QTabWidget>();
@ -46,17 +45,12 @@ NotificationPage::NotificationPage()
->setSizePolicy(QSizePolicy::Maximum, ->setSizePolicy(QSizePolicy::Maximum,
QSizePolicy::Preferred); QSizePolicy::Preferred);
// implementation of custom combobox done
// because addComboBox only can handle strings-settings
// int setting for the ToastReaction is desired
openIn openIn
.append(this->createComboBox( .append(this->createToastReactionComboBox(
{Toasts::findStringFromReaction( this->managedConnections_))
ToastReactions::openInBrowser),
Toasts::findStringFromReaction(
ToastReactions::openInPlayer),
Toasts::findStringFromReaction(
ToastReactions::openInStreamlink),
Toasts::findStringFromReaction(
ToastReactions::dontOpen)},
getSettings()->openFromToast))
->setSizePolicy(QSizePolicy::Maximum, ->setSizePolicy(QSizePolicy::Maximum,
QSizePolicy::Preferred); QSizePolicy::Preferred);
} }
@ -140,4 +134,31 @@ NotificationPage::NotificationPage()
} }
} }
} }
QComboBox *NotificationPage::createToastReactionComboBox(
std::vector<pajlada::Signals::ScopedConnection> managedConnections)
{
QComboBox *toastReactionOptions = new QComboBox();
for (int i = 0; i <= static_cast<int>(ToastReactions::DontOpen); i++)
{
toastReactionOptions->insertItem(
i, Toasts::findStringFromReaction(static_cast<ToastReactions>(i)));
}
// update when setting changes
pajlada::Settings::Setting<int> setting = getSettings()->openFromToast;
setting.connect(
[toastReactionOptions](const int &index, auto) {
toastReactionOptions->setCurrentIndex(index);
},
managedConnections);
QObject::connect(toastReactionOptions, &QComboBox::currentTextChanged,
[setting](const QString &newValue) {
getSettings()->openFromToast.setValue(static_cast<int>(
Toasts::findReactionFromString(newValue)));
});
return toastReactionOptions;
}
} // namespace chatterino } // namespace chatterino

View file

@ -15,6 +15,8 @@ public:
NotificationPage(); NotificationPage();
private: private:
QComboBox *createToastReactionComboBox(
std::vector<pajlada::Signals::ScopedConnection> managedConnections);
}; };
} // namespace chatterino } // namespace chatterino