solve highlighted tabs

This commit is contained in:
unknown 2024-10-17 18:56:14 +02:00
parent a2af8e791b
commit 5f862c5e5e
2 changed files with 63 additions and 17 deletions

View file

@ -305,20 +305,41 @@ 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->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();
}
}
}
void NotebookTab::setSelected(bool value)
{
@ -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_ &&

View file

@ -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_;
};