Files
chatterino2/src/widgets/dialogs/BadgePickerDialog.cpp
nerix 86e71c8bd9 Migrate to C++ 20 & switch to websocketpp develop branch (#4252)
* feat: c++ 20

* fix: c++ 20 deprecations

* fix(msvc): warnings

* chore: add changelog entry

* fix: formatting

* Update websocketpp to the `develop` branch

* Specify other template type in FlagsEnum != operator

* Remove the user of simple template ids in our websocketpp template class

Also standardizes the file a bit by using nested namespaces, using
pragma once

* fix: turn `MAGIC_MESSAGE_SUFFIX` into a `QString`

* hacky unhacky hacky const char hack

Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
2022-12-24 11:56:11 +00:00

75 lines
2.0 KiB
C++

#include "BadgePickerDialog.hpp"
#include "providers/twitch/TwitchBadges.hpp"
#include "singletons/Resources.hpp"
#include <QDialogButtonBox>
#include <QSizePolicy>
#include <QVBoxLayout>
namespace chatterino {
BadgePickerDialog::BadgePickerDialog(QList<DisplayBadge> badges,
QWidget *parent)
: QDialog(parent)
{
this->dropdown_ = new QComboBox;
auto vbox = new QVBoxLayout(this);
auto buttonBox =
new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
vbox->addWidget(this->dropdown_);
vbox->addWidget(buttonBox);
QObject::connect(buttonBox, &QDialogButtonBox::accepted, [this] {
this->accept();
this->close();
});
QObject::connect(buttonBox, &QDialogButtonBox::rejected, [this] {
this->reject();
this->close();
});
this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
this->setWindowFlags(
(this->windowFlags() & ~(Qt::WindowContextHelpButtonHint)) |
Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
// Add items.
for (const auto &item : badges)
{
this->dropdown_->addItem(item.displayName(), item.badgeName());
}
const auto updateBadge = [=, this](int index) {
BadgeOpt badge;
if (index >= 0 && index < badges.size())
{
badge = badges[index];
}
this->currentBadge_ = badge;
};
QObject::connect(this->dropdown_,
QOverload<int>::of(&QComboBox::currentIndexChanged),
updateBadge);
updateBadge(0);
// Set icons.
TwitchBadges::instance()->getBadgeIcons(
badges,
[&dropdown = this->dropdown_](QString identifier, const QIconPtr icon) {
if (!dropdown)
return;
int index = dropdown->findData(identifier);
if (index != -1)
{
dropdown->setItemIcon(index, *icon);
}
});
}
} // namespace chatterino