mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-21 22:24:07 +01:00
solve highlighted tabs
This commit is contained in:
parent
a2af8e791b
commit
5f862c5e5e
2 changed files with 63 additions and 17 deletions
|
@ -305,18 +305,39 @@ bool NotebookTab::isSelected() const
|
|||
}
|
||||
|
||||
void NotebookTab::updateHighlightSources(
|
||||
const std::unordered_map<ChannelPtr, HighlightEvent>
|
||||
&removedHighlightSources)
|
||||
const HighlightSources &removedHighlightSources)
|
||||
{
|
||||
for (const auto &[otherChannel, otherEvent] : removedHighlightSources)
|
||||
for (const auto &source : removedHighlightSources.newMessageSource)
|
||||
{
|
||||
this->highlightSources_.erase(otherChannel);
|
||||
this->highlightSources_.newMessageSource.erase(source);
|
||||
}
|
||||
|
||||
if (this->highlightSources_.empty())
|
||||
for (const auto &source : removedHighlightSources.highlightedSource)
|
||||
{
|
||||
this->highlightState_ = HighlightState::None;
|
||||
this->update();
|
||||
this->highlightSources_.highlightedSource.erase(source);
|
||||
}
|
||||
|
||||
if (!this->highlightSources_.highlightedSource.empty())
|
||||
{
|
||||
// keep HighlightState::Highlighted
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this->highlightSources_.newMessageSource.empty())
|
||||
{
|
||||
if (this->highlightState_ != HighlightState::NewMessage)
|
||||
{
|
||||
this->highlightState_ = HighlightState::NewMessage;
|
||||
this->update();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this->highlightState_ != HighlightState::None)
|
||||
{
|
||||
this->highlightState_ = HighlightState::None;
|
||||
this->update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -437,11 +458,30 @@ void NotebookTab::setHighlightState(HighlightState newHighlightStyle,
|
|||
return;
|
||||
}
|
||||
|
||||
if (!this->highlightSources_.contains(
|
||||
channelViewSource.underlyingChannel()))
|
||||
auto underlyingChannel = channelViewSource.underlyingChannel();
|
||||
|
||||
switch (newHighlightStyle)
|
||||
{
|
||||
this->highlightSources_.emplace(channelViewSource.underlyingChannel(),
|
||||
HighlightEvent{});
|
||||
case HighlightState::Highlighted: {
|
||||
if (!this->highlightSources_.highlightedSource.contains(
|
||||
underlyingChannel))
|
||||
{
|
||||
this->highlightSources_.highlightedSource.insert(
|
||||
underlyingChannel);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case HighlightState::NewMessage: {
|
||||
if (!this->highlightSources_.newMessageSource.contains(
|
||||
underlyingChannel))
|
||||
{
|
||||
this->highlightSources_.newMessageSource.insert(
|
||||
underlyingChannel);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case HighlightState::None:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!this->highlightEnabled_ &&
|
||||
|
|
|
@ -114,12 +114,20 @@ private:
|
|||
bool shouldMessageHighlight(const ChannelView &channelViewSource,
|
||||
const MessagePtr &message) const;
|
||||
|
||||
struct HighlightEvent {
|
||||
};
|
||||
struct HighlightSources {
|
||||
std::unordered_set<ChannelPtr> newMessageSource;
|
||||
std::unordered_set<ChannelPtr> highlightedSource;
|
||||
|
||||
void clear()
|
||||
{
|
||||
this->newMessageSource.clear();
|
||||
this->highlightedSource.clear();
|
||||
}
|
||||
|
||||
} highlightSources_;
|
||||
|
||||
void updateHighlightSources(
|
||||
const std::unordered_map<ChannelPtr, HighlightEvent>
|
||||
&removedHighlightSources);
|
||||
const HighlightSources &removedHighlightSources);
|
||||
|
||||
QPropertyAnimation positionChangedAnimation_;
|
||||
QPoint positionAnimationDesiredPoint_;
|
||||
|
@ -149,8 +157,6 @@ private:
|
|||
|
||||
QMenu menu_;
|
||||
|
||||
std::unordered_map<ChannelPtr, HighlightEvent> highlightSources_;
|
||||
|
||||
pajlada::Signals::SignalHolder managedConnections_;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue