summary refs log tree commit diff
path: root/src/timeline/TimelineView.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-17 21:23:46 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-17 21:23:46 +0200
commita0ae6cf5d583bb650b7164dbe602b7552a201814 (patch)
treec831eba0640000f1fd767122d35932d82a1f3987 /src/timeline/TimelineView.cc
parentUpdate issue template (diff)
downloadnheko-a0ae6cf5d583bb650b7164dbe602b7552a201814.tar.xz
Add ability to redact messages
Diffstat (limited to 'src/timeline/TimelineView.cc')
-rw-r--r--src/timeline/TimelineView.cc45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc

index 7e281e03..ded5ad2c 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc
@@ -491,6 +491,7 @@ TimelineView::updatePendingMessage(int txn_id, QString event_id) if (msg.widget) { msg.widget->setEventId(event_id); msg.widget->markReceived(); + eventIds_[event_id] = msg.widget; } pending_sent_msgs_.append(msg); @@ -591,6 +592,9 @@ TimelineView::isPendingMessage(const QString &txnid, void TimelineView::removePendingMessage(const QString &txnid) { + if (txnid.isEmpty()) + return; + for (auto it = pending_sent_msgs_.begin(); it != pending_sent_msgs_.end(); ++it) { if (QString::number(it->txn_id) == txnid) { int index = std::distance(pending_sent_msgs_.begin(), it); @@ -739,3 +743,44 @@ TimelineView::toggleScrollDownButton() scrollDownBtn_->hide(); } } + +void +TimelineView::removeEvent(const QString &event_id) +{ + if (!eventIds_.contains(event_id)) { + qWarning() << "unknown event_id couldn't be removed:" << event_id; + return; + } + + auto removedItem = eventIds_[event_id]; + + // Find the next and the previous widgets in the timeline + auto prevItem = qobject_cast<TimelineItem *>(relativeWidget(removedItem, -1)); + auto nextItem = qobject_cast<TimelineItem *>(relativeWidget(removedItem, 1)); + + // If it's a TimelineItem add an avatar. + if (prevItem) + prevItem->addAvatar(); + + if (nextItem) + nextItem->addAvatar(); + + // Finally remove the event. + removedItem->deleteLater(); + eventIds_.remove(event_id); +} + +QWidget * +TimelineView::relativeWidget(TimelineItem *item, int dt) const +{ + int pos = scroll_layout_->indexOf(item); + + if (pos == -1) + return nullptr; + + pos = pos + dt; + + bool isOutOfBounds = (pos <= 0 || pos > scroll_layout_->count() - 1); + + return isOutOfBounds ? nullptr : scroll_layout_->itemAt(pos)->widget(); +}