added toggle for moderation mode

This commit is contained in:
fourtf 2018-01-17 16:52:51 +01:00
parent 01efa1f447
commit e694214243
17 changed files with 136 additions and 83 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -44,6 +44,8 @@
<file>images/commands.svg</file> <file>images/commands.svg</file>
<file>images/aboutlogo.png</file> <file>images/aboutlogo.png</file>
<file>images/about.svg</file> <file>images/about.svg</file>
<file>images/moderatormode_disabled.png</file>
<file>images/moderatormode_enabled.png</file>
</qresource> </qresource>
<qresource prefix="/qt/etc"> <qresource prefix="/qt/etc">
<file>qt.conf</file> <file>qt.conf</file>

View file

@ -61,7 +61,7 @@ void MessageLayout::removeFlags(Flags _flags)
// Layout // Layout
// return true if redraw is required // return true if redraw is required
bool MessageLayout::layout(int width, float scale) bool MessageLayout::layout(int width, float scale, MessageElement::Flags flags)
{ {
auto &emoteManager = singletons::EmoteManager::getInstance(); auto &emoteManager = singletons::EmoteManager::getInstance();
@ -114,20 +114,20 @@ bool MessageLayout::layout(int width, float scale)
return false; return false;
} }
this->actuallyLayout(width); this->actuallyLayout(width, flags);
this->invalidateBuffer(); this->invalidateBuffer();
return true; return true;
} }
void MessageLayout::actuallyLayout(int width) void MessageLayout::actuallyLayout(int width, MessageElement::Flags flags)
{ {
this->container.clear(); this->container.clear();
this->container.width = width; this->container.width = width;
this->container.scale = this->scale; this->container.scale = this->scale;
for (const std::unique_ptr<MessageElement> &element : this->message->getElements()) { for (const std::unique_ptr<MessageElement> &element : this->message->getElements()) {
element->addToContainer(this->container, MessageElement::Default); element->addToContainer(this->container, flags);
} }
if (this->height != this->container.getHeight()) { if (this->height != this->container.getHeight()) {

View file

@ -38,7 +38,7 @@ public:
void removeFlags(Flags flags); void removeFlags(Flags flags);
// Layout // Layout
bool layout(int width, float scale); bool layout(int width, float scale, MessageElement::Flags flags);
// Painting // Painting
void paint(QPainter &painter, int y, int messageIndex, Selection &selection); void paint(QPainter &painter, int y, int messageIndex, Selection &selection);
@ -75,7 +75,7 @@ private:
int collapsedHeight = 32; int collapsedHeight = 32;
// methods // methods
void actuallyLayout(int width); void actuallyLayout(int width, MessageElement::Flags flags);
void updateBuffer(QPixmap *pixmap, int messageIndex, Selection &selection); void updateBuffer(QPixmap *pixmap, int messageIndex, Selection &selection);
}; };

View file

@ -68,10 +68,6 @@ void ImageElement::addToContainer(MessageLayoutContainer &container, MessageElem
(new ImageLayoutElement(*this, this->image, size))->setLink(this->getLink())); (new ImageLayoutElement(*this, this->image, size))->setLink(this->getLink()));
} }
void ImageElement::update(UpdateFlags _flags)
{
}
// EMOTE // EMOTE
EmoteElement::EmoteElement(const util::EmoteData &_data, MessageElement::Flags flags) EmoteElement::EmoteElement(const util::EmoteData &_data, MessageElement::Flags flags)
: MessageElement(flags) : MessageElement(flags)
@ -106,10 +102,6 @@ void EmoteElement::addToContainer(MessageLayoutContainer &container, MessageElem
container.addElement((new ImageLayoutElement(*this, _image, size))->setLink(this->getLink())); container.addElement((new ImageLayoutElement(*this, _image, size))->setLink(this->getLink()));
} }
void EmoteElement::update(UpdateFlags _flags)
{
}
// TEXT // TEXT
TextElement::TextElement(const QString &text, MessageElement::Flags flags, TextElement::TextElement(const QString &text, MessageElement::Flags flags,
const MessageColor &_color, FontStyle _style) const MessageColor &_color, FontStyle _style)
@ -195,15 +187,6 @@ void TextElement::addToContainer(MessageLayoutContainer &container, MessageEleme
} }
} }
void TextElement::update(UpdateFlags _flags)
{
if (_flags & UpdateFlags::Update_Text) {
for (Word &word : this->words) {
word.width = -1;
}
}
}
// TIMESTAMP // TIMESTAMP
TimestampElement::TimestampElement() TimestampElement::TimestampElement()
: TimestampElement(QTime::currentTime()) : TimestampElement(QTime::currentTime())
@ -235,11 +218,6 @@ void TimestampElement::addToContainer(MessageLayoutContainer &container,
this->element->addToContainer(container, _flags); this->element->addToContainer(container, _flags);
} }
void TimestampElement::update(UpdateFlags _flags)
{
this->element->update(_flags);
}
TextElement *TimestampElement::formatTime(const QTime &time) TextElement *TimestampElement::formatTime(const QTime &time)
{ {
QString format = time.toString(singletons::SettingManager::getInstance().timestampFormat); QString format = time.toString(singletons::SettingManager::getInstance().timestampFormat);
@ -256,23 +234,24 @@ TwitchModerationElement::TwitchModerationElement()
void TwitchModerationElement::addToContainer(MessageLayoutContainer &container, void TwitchModerationElement::addToContainer(MessageLayoutContainer &container,
MessageElement::Flags _flags) MessageElement::Flags _flags)
{ {
QSize size((int)(container.scale * 16), (int)(container.scale * 16)); qDebug() << _flags;
for (const singletons::ModerationAction &m : if (_flags & MessageElement::ModeratorTools) {
singletons::SettingManager::getInstance().getModerationActions()) { QSize size((int)(container.scale * 16), (int)(container.scale * 16));
if (m.isImage()) {
container.addElement((new ImageLayoutElement(*this, m.getImage(), size)) for (const singletons::ModerationAction &m :
->setLink(Link(Link::UserAction, m.getAction()))); singletons::SettingManager::getInstance().getModerationActions()) {
} else { if (m.isImage()) {
container.addElement((new TextIconLayoutElement(*this, m.getLine1(), m.getLine2(), container.addElement((new ImageLayoutElement(*this, m.getImage(), size))
container.scale, size)) ->setLink(Link(Link::UserAction, m.getAction())));
->setLink(Link(Link::UserAction, m.getAction()))); } else {
container.addElement((new TextIconLayoutElement(*this, m.getLine1(), m.getLine2(),
container.scale, size))
->setLink(Link(Link::UserAction, m.getAction())));
}
} }
} }
} }
void TwitchModerationElement::update(UpdateFlags _flags)
{
}
} // namespace messages } // namespace messages
} // namespace chatterino } // namespace chatterino

View file

@ -122,7 +122,6 @@ public:
Flags getFlags() const; Flags getFlags() const;
virtual void addToContainer(MessageLayoutContainer &container, MessageElement::Flags flags) = 0; virtual void addToContainer(MessageLayoutContainer &container, MessageElement::Flags flags) = 0;
virtual void update(UpdateFlags flags) = 0;
protected: protected:
MessageElement(Flags flags); MessageElement(Flags flags);
@ -144,7 +143,6 @@ public:
virtual void addToContainer(MessageLayoutContainer &container, virtual void addToContainer(MessageLayoutContainer &container,
MessageElement::Flags flags) override; MessageElement::Flags flags) override;
virtual void update(UpdateFlags flags) override;
}; };
// contains emote data and will pick the emote based on : // contains emote data and will pick the emote based on :
@ -159,7 +157,6 @@ public:
virtual void addToContainer(MessageLayoutContainer &container, virtual void addToContainer(MessageLayoutContainer &container,
MessageElement::Flags flags) override; MessageElement::Flags flags) override;
virtual void update(UpdateFlags flags) override;
}; };
// contains a text, it will split it into words // contains a text, it will split it into words
@ -181,7 +178,6 @@ public:
virtual void addToContainer(MessageLayoutContainer &container, virtual void addToContainer(MessageLayoutContainer &container,
MessageElement::Flags flags) override; MessageElement::Flags flags) override;
virtual void update(UpdateFlags flags);
}; };
// contains a text, formated depending on the preferences // contains a text, formated depending on the preferences
@ -198,7 +194,6 @@ public:
virtual void addToContainer(MessageLayoutContainer &container, virtual void addToContainer(MessageLayoutContainer &container,
MessageElement::Flags flags) override; MessageElement::Flags flags) override;
virtual void update(UpdateFlags flags);
TextElement *formatTime(const QTime &time); TextElement *formatTime(const QTime &time);
}; };
@ -212,7 +207,6 @@ public:
virtual void addToContainer(MessageLayoutContainer &container, virtual void addToContainer(MessageLayoutContainer &container,
MessageElement::Flags flags) override; MessageElement::Flags flags) override;
virtual void update(UpdateFlags flags);
}; };
// adds bits as text, static image or animated image // adds bits as text, static image or animated image

View file

@ -265,7 +265,6 @@ inline void ParseCheermoteSets(std::vector<ResourceManager::JSONCheermoteSet> &s
} }
} // namespace } // namespace
ResourceManager::ResourceManager() ResourceManager::ResourceManager()
: badgeStaff(lli(":/images/staff_bg.png")) : badgeStaff(lli(":/images/staff_bg.png"))
, badgeAdmin(lli(":/images/admin_bg.png")) , badgeAdmin(lli(":/images/admin_bg.png"))
@ -285,6 +284,9 @@ ResourceManager::ResourceManager()
, cheerBadge1(lli(":/images/cheer1")) , cheerBadge1(lli(":/images/cheer1"))
, buttonBan(lli(":/images/button_ban.png", 0.25)) , buttonBan(lli(":/images/button_ban.png", 0.25))
, buttonTimeout(lli(":/images/button_timeout.png", 0.25)) , buttonTimeout(lli(":/images/button_timeout.png", 0.25))
, moderationmode_enabled(lli(":/images/moderatormode_enabled"))
, moderationmode_disabled(lli(":/images/moderatormode_disabled"))
, splitHeaderContext(lli(":/images/tool_moreCollapser_off16.png"))
{ {
this->loadDynamicTwitchBadges(); this->loadDynamicTwitchBadges();

View file

@ -36,6 +36,11 @@ public:
messages::Image *cheerBadge100; messages::Image *cheerBadge100;
messages::Image *cheerBadge1; messages::Image *cheerBadge1;
messages::Image *moderationmode_enabled;
messages::Image *moderationmode_disabled;
messages::Image *splitHeaderContext;
std::map<std::string, messages::Image *> cheerBadges; std::map<std::string, messages::Image *> cheerBadges;
struct BadgeVersion { struct BadgeVersion {

View file

@ -153,6 +153,8 @@ void ChannelView::actuallyLayoutMessages()
// (this->scrollBar.isVisible() ? width() - this->scrollBar.width() : width()) - 4; // (this->scrollBar.isVisible() ? width() - this->scrollBar.width() : width()) - 4;
int layoutWidth = LAYOUT_WIDTH; int layoutWidth = LAYOUT_WIDTH;
MessageElement::Flags flags = this->getFlags();
// layout the visible messages in the view // layout the visible messages in the view
if (messagesSnapshot.getLength() > start) { if (messagesSnapshot.getLength() > start) {
int y = int y =
@ -161,7 +163,7 @@ void ChannelView::actuallyLayoutMessages()
for (size_t i = start; i < messagesSnapshot.getLength(); ++i) { for (size_t i = start; i < messagesSnapshot.getLength(); ++i) {
auto message = messagesSnapshot[i]; auto message = messagesSnapshot[i];
redrawRequired |= message->layout(layoutWidth, this->getDpiMultiplier()); redrawRequired |= message->layout(layoutWidth, this->getDpiMultiplier(), flags);
y += message->getHeight(); y += message->getHeight();
@ -177,7 +179,7 @@ void ChannelView::actuallyLayoutMessages()
for (int i = (int)messagesSnapshot.getLength() - 1; i >= 0; i--) { for (int i = (int)messagesSnapshot.getLength() - 1; i >= 0; i--) {
auto *message = messagesSnapshot[i].get(); auto *message = messagesSnapshot[i].get();
message->layout(layoutWidth, this->getDpiMultiplier()); message->layout(layoutWidth, this->getDpiMultiplier(), flags);
h -= message->getHeight(); h -= message->getHeight();
@ -432,6 +434,21 @@ void ChannelView::setSelection(const SelectionItem &start, const SelectionItem &
// << max.charIndex; // << max.charIndex;
} }
messages::MessageElement::Flags ChannelView::getFlags() const
{
MessageElement::Flags flags = MessageElement::Default;
Split *split = dynamic_cast<Split *>(this->parentWidget());
if (split != nullptr) {
if (split->getModerationMode()) {
flags = (MessageElement::Flags)(flags | MessageElement::ModeratorTools);
}
}
return flags;
}
void ChannelView::paintEvent(QPaintEvent * /*event*/) void ChannelView::paintEvent(QPaintEvent * /*event*/)
{ {
// BENCH(timer); // BENCH(timer);
@ -536,7 +553,8 @@ void ChannelView::wheelEvent(QWheelEvent *event)
if (i == 0) { if (i == 0) {
desired = 0; desired = 0;
} else { } else {
snapshot[i - 1]->layout(LAYOUT_WIDTH, this->getDpiMultiplier()); snapshot[i - 1]->layout(LAYOUT_WIDTH, this->getDpiMultiplier(),
this->getFlags());
scrollFactor = 1; scrollFactor = 1;
currentScrollLeft = snapshot[i - 1]->getHeight(); currentScrollLeft = snapshot[i - 1]->getHeight();
} }
@ -558,7 +576,8 @@ void ChannelView::wheelEvent(QWheelEvent *event)
if (i == snapshotLength - 1) { if (i == snapshotLength - 1) {
desired = snapshot.getLength(); desired = snapshot.getLength();
} else { } else {
snapshot[i + 1]->layout(LAYOUT_WIDTH, this->getDpiMultiplier()); snapshot[i + 1]->layout(LAYOUT_WIDTH, this->getDpiMultiplier(),
this->getFlags());
scrollFactor = 1; scrollFactor = 1;
currentScrollLeft = snapshot[i + 1]->getHeight(); currentScrollLeft = snapshot[i + 1]->getHeight();

View file

@ -29,7 +29,7 @@ class ChannelView : public BaseWidget
public: public:
explicit ChannelView(BaseWidget *parent = 0); explicit ChannelView(BaseWidget *parent = 0);
~ChannelView(); virtual ~ChannelView();
void queueUpdate(); void queueUpdate();
Scrollbar &getScrollBar(); Scrollbar &getScrollBar();
@ -80,6 +80,7 @@ private:
void drawMessages(QPainter &painter); void drawMessages(QPainter &painter);
void setSelection(const messages::SelectionItem &start, const messages::SelectionItem &end); void setSelection(const messages::SelectionItem &start, const messages::SelectionItem &end);
messages::MessageElement::Flags getFlags() const;
SharedChannel channel; SharedChannel channel;

View file

@ -10,7 +10,7 @@ namespace widgets {
RippleEffectButton::RippleEffectButton(BaseWidget *parent) RippleEffectButton::RippleEffectButton(BaseWidget *parent)
: BaseWidget(parent) : BaseWidget(parent)
, pixmap(nullptr)
{ {
connect(&effectTimer, &QTimer::timeout, this, &RippleEffectButton::onMouseEffectTimeout); connect(&effectTimer, &QTimer::timeout, this, &RippleEffectButton::onMouseEffectTimeout);
@ -23,11 +23,36 @@ void RippleEffectButton::setMouseEffectColor(boost::optional<QColor> color)
this->mouseEffectColor = color; this->mouseEffectColor = color;
} }
void RippleEffectButton::setPixmap(const QPixmap *_pixmap)
{
this->pixmap = const_cast<QPixmap *>(_pixmap);
this->update();
}
const QPixmap *RippleEffectButton::getPixmap() const
{
return this->pixmap;
}
void RippleEffectButton::paintEvent(QPaintEvent *) void RippleEffectButton::paintEvent(QPaintEvent *)
{ {
QPainter painter(this); QPainter painter(this);
painter.setRenderHint(QPainter::SmoothPixmapTransform);
this->fancyPaint(painter); this->fancyPaint(painter);
if (this->pixmap != nullptr) {
QRect rect = this->rect();
int xD = 6 * this->getDpiMultiplier();
rect.moveLeft(xD);
rect.setRight(rect.right() - xD - xD);
rect.moveTop(xD);
rect.setBottom(rect.bottom() - xD - xD);
painter.drawPixmap(rect, *this->pixmap);
}
} }
void RippleEffectButton::fancyPaint(QPainter &painter) void RippleEffectButton::fancyPaint(QPainter &painter)

View file

@ -31,6 +31,8 @@ public:
RippleEffectButton(BaseWidget *parent); RippleEffectButton(BaseWidget *parent);
void setMouseEffectColor(boost::optional<QColor> color); void setMouseEffectColor(boost::optional<QColor> color);
void setPixmap(const QPixmap *pixmap);
const QPixmap *getPixmap() const;
signals: signals:
void clicked(); void clicked();
@ -50,6 +52,7 @@ protected:
void fancyPaint(QPainter &painter); void fancyPaint(QPainter &painter);
private: private:
QPixmap *pixmap;
QPoint mousePos; QPoint mousePos;
double hoverMultiplier = 0.0; double hoverMultiplier = 0.0;
QTimer effectTimer; QTimer effectTimer;

View file

@ -1,4 +1,5 @@
#include "widgets/helper/splitheader.hpp" #include "widgets/helper/splitheader.hpp"
#include "singletons/resourcemanager.hpp"
#include "singletons/thememanager.hpp" #include "singletons/thememanager.hpp"
#include "twitch/twitchchannel.hpp" #include "twitch/twitchchannel.hpp"
#include "util/layoutcreator.hpp" #include "util/layoutcreator.hpp"
@ -21,20 +22,20 @@ SplitHeader::SplitHeader(Split *_split)
{ {
this->setMouseTracking(true); this->setMouseTracking(true);
singletons::ResourceManager &resourceManager = singletons::ResourceManager::getInstance();
util::LayoutCreator<SplitHeader> layoutCreator(this); util::LayoutCreator<SplitHeader> layoutCreator(this);
auto layout = layoutCreator.emplace<QHBoxLayout>().withoutMargin(); auto layout = layoutCreator.emplace<QHBoxLayout>().withoutMargin();
{ {
// dropdown label // dropdown label
auto dropdown = layout.emplace<RippleEffectLabel>(this).assign(&this->dropdownLabel); auto dropdown = layout.emplace<RippleEffectButton>(this).assign(&this->dropdownButton);
dropdown->getLabel().setTextFormat(Qt::RichText);
dropdown->getLabel().setText("<img src=':/images/tool_moreCollapser_off16.png' />");
dropdown->getLabel().setScaledContents(true);
dropdown->setMouseTracking(true); dropdown->setMouseTracking(true);
dropdown->setPixmap(resourceManager.splitHeaderContext->getPixmap());
this->addDropdownItems(dropdown.getElement()); this->addDropdownItems(dropdown.getElement());
QObject::connect(dropdown.getElement(), &RippleEffectLabel::clicked, this, [this] { QObject::connect(dropdown.getElement(), &RippleEffectButton::clicked, this, [this] {
QTimer::singleShot(80, [&] { QTimer::singleShot(80, [&] {
this->dropdownMenu.move( this->dropdownMenu.move(
this->dropdownLabel->mapToGlobal(QPoint(0, this->dropdownLabel->height()))); this->dropdownButton->mapToGlobal(QPoint(0, this->dropdownButton->height())));
this->dropdownMenu.show(); this->dropdownMenu.show();
}); });
}); });
@ -50,11 +51,13 @@ SplitHeader::SplitHeader(Split *_split)
layout->addStretch(1); layout->addStretch(1);
// moderation mode // moderation mode
auto moderation = layout.emplace<RippleEffectLabel>(this).assign(&this->moderationLabel); auto moderator = layout.emplace<RippleEffectButton>(this).assign(&this->moderationButton);
moderation->setMouseTracking(true);
moderation->getLabel().setScaledContents(true); QObject::connect(moderator.getElement(), &RippleEffectButton::clicked, this, [this] {
moderation->getLabel().setTextFormat(Qt::RichText); this->split->setModerationMode(!this->split->getModerationMode());
moderation->getLabel().setText("<img src=':/images/moderator_bg.png' />"); });
this->updateModerationModeIcon();
} }
// ---- misc // ---- misc
@ -63,8 +66,6 @@ SplitHeader::SplitHeader(Split *_split)
this->updateChannelText(); this->updateChannelText();
// this->titleLabel.setAlignment(Qt::AlignCenter);
this->initializeChannelSignals(); this->initializeChannelSignals();
this->split->channelChanged.connect([this]() { this->split->channelChanged.connect([this]() {
@ -77,11 +78,8 @@ SplitHeader::~SplitHeader()
this->onlineStatusChangedConnection.disconnect(); this->onlineStatusChangedConnection.disconnect();
} }
void SplitHeader::addDropdownItems(RippleEffectLabel *label) void SplitHeader::addDropdownItems(RippleEffectButton *label)
{ {
connect(this->dropdownLabel, &RippleEffectLabel::clicked, this,
&SplitHeader::leftButtonClicked);
// clang-format off // clang-format off
this->dropdownMenu.addAction("Add new split", this->split, &Split::doAddSplit, QKeySequence(tr("Ctrl+T"))); this->dropdownMenu.addAction("Add new split", this->split, &Split::doAddSplit, QKeySequence(tr("Ctrl+T")));
this->dropdownMenu.addAction("Close split", this->split, &Split::doCloseSplit, QKeySequence(tr("Ctrl+W"))); this->dropdownMenu.addAction("Close split", this->split, &Split::doCloseSplit, QKeySequence(tr("Ctrl+W")));
@ -122,8 +120,8 @@ void SplitHeader::resizeEvent(QResizeEvent *event)
int w = 28 * getDpiMultiplier(); int w = 28 * getDpiMultiplier();
this->setFixedHeight(w); this->setFixedHeight(w);
this->dropdownLabel->setFixedWidth(w); this->dropdownButton->setFixedWidth(w);
this->moderationLabel->setFixedWidth(w); this->moderationButton->setFixedWidth(w);
} }
void SplitHeader::updateChannelText() void SplitHeader::updateChannelText()
@ -156,6 +154,14 @@ void SplitHeader::updateChannelText()
} }
} }
void SplitHeader::updateModerationModeIcon()
{
singletons::ResourceManager &resourceManager = singletons::ResourceManager::getInstance();
this->moderationButton->setPixmap(this->split->getModerationMode()
? resourceManager.moderationmode_enabled->getPixmap()
: resourceManager.moderationmode_disabled->getPixmap());
}
void SplitHeader::paintEvent(QPaintEvent *) void SplitHeader::paintEvent(QPaintEvent *)
{ {
QPainter painter(this); QPainter painter(this);
@ -203,10 +209,6 @@ void SplitHeader::mouseDoubleClickEvent(QMouseEvent *event)
} }
} }
void SplitHeader::leftButtonClicked()
{
}
void SplitHeader::rightButtonClicked() void SplitHeader::rightButtonClicked()
{ {
} }
@ -216,9 +218,9 @@ void SplitHeader::refreshTheme()
QPalette palette; QPalette palette;
palette.setColor(QPalette::Foreground, this->themeManager.splits.header.text); palette.setColor(QPalette::Foreground, this->themeManager.splits.header.text);
this->dropdownLabel->setPalette(palette); // this->dropdownButton->setPalette(palette);
this->titleLabel->setPalette(palette); this->titleLabel->setPalette(palette);
this->moderationLabel->setPalette(palette); // this->moderationLabel->setPalette(palette);
} }
void SplitHeader::menuMoveSplit() void SplitHeader::menuMoveSplit()

View file

@ -30,6 +30,7 @@ public:
// Update channel text from chat widget // Update channel text from chat widget
void updateChannelText(); void updateChannelText();
void updateModerationModeIcon();
protected: protected:
virtual void paintEvent(QPaintEvent *) override; virtual void paintEvent(QPaintEvent *) override;
@ -47,13 +48,12 @@ private:
boost::signals2::connection onlineStatusChangedConnection; boost::signals2::connection onlineStatusChangedConnection;
RippleEffectLabel *dropdownLabel; RippleEffectButton *dropdownButton;
SignalLabel *titleLabel; SignalLabel *titleLabel;
RippleEffectLabel *moderationLabel; RippleEffectButton *moderationButton;
QMenu dropdownMenu; QMenu dropdownMenu;
void leftButtonClicked();
void rightButtonClicked(); void rightButtonClicked();
virtual void refreshTheme() override; virtual void refreshTheme() override;
@ -64,7 +64,7 @@ private:
bool isLive; bool isLive;
public slots: public slots:
void addDropdownItems(RippleEffectLabel *label); void addDropdownItems(RippleEffectButton *label);
void menuMoveSplit(); void menuMoveSplit();
void menuReloadChannelEmotes(); void menuReloadChannelEmotes();

View file

@ -52,6 +52,7 @@ Split::Split(SplitContainer *parent, const std::string &_uuid)
, input(this) , input(this)
, flexSizeX(1) , flexSizeX(1)
, flexSizeY(1) , flexSizeY(1)
, moderationMode(false)
{ {
this->setMouseTracking(true); this->setMouseTracking(true);
@ -115,6 +116,8 @@ Split::Split(SplitContainer *parent, const std::string &_uuid)
this->input.show(); this->input.show();
} }
}); });
this->header.updateModerationModeIcon();
} }
Split::~Split() Split::~Split()
@ -168,6 +171,19 @@ double Split::getFlexSizeY()
return this->flexSizeY; return this->flexSizeY;
} }
void Split::setModerationMode(bool value)
{
if (value != this->moderationMode) {
this->moderationMode = value;
this->header.updateModerationModeIcon();
}
}
bool Split::getModerationMode() const
{
return this->moderationMode;
}
void Split::channelNameUpdated(const std::string &newChannelName) void Split::channelNameUpdated(const std::string &newChannelName)
{ {
auto &cman = singletons::ChannelManager::getInstance(); auto &cman = singletons::ChannelManager::getInstance();

View file

@ -62,6 +62,9 @@ public:
void setFlexSizeY(double y); void setFlexSizeY(double y);
double getFlexSizeY(); double getFlexSizeY();
void setModerationMode(bool value);
bool getModerationMode() const;
bool showChangeChannelPopup(const char *dialogTitle, bool empty = false); bool showChangeChannelPopup(const char *dialogTitle, bool empty = false);
void giveFocus(Qt::FocusReason reason); void giveFocus(Qt::FocusReason reason);
bool hasFocus() const; bool hasFocus() const;
@ -88,6 +91,8 @@ private:
double flexSizeX; double flexSizeX;
double flexSizeY; double flexSizeY;
bool moderationMode;
boost::signals2::connection channelIDChangedConnection; boost::signals2::connection channelIDChangedConnection;
void setChannel(SharedChannel newChannel); void setChannel(SharedChannel newChannel);