summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-30 12:55:30 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-30 12:55:30 +0200
commitdeb1a6e2925acb4ab339fc071e5ea58ab96b5bb4 (patch)
tree781f5b742d2b2f0749092bef9d23b1fe5420c269 /include
parentfdb76bb5c1bdce765479442a70ddca80b867caa6 (diff)
Simplify timeline item creation
Diffstat (limited to 'include')
-rw-r--r--include/TimelineView.h36
1 files changed, 26 insertions, 10 deletions
diff --git a/include/TimelineView.h b/include/TimelineView.h
index 715d8a9a..5453ea5c 100644
--- a/include/TimelineView.h
+++ b/include/TimelineView.h
@@ -90,16 +90,14 @@ public:
const QString &room_id,
QWidget *parent = 0);
- TimelineItem *createTimelineItem(const events::MessageEvent<msgs::Image> &e,
- bool with_sender);
- TimelineItem *createTimelineItem(const events::MessageEvent<msgs::Notice> &e,
- bool with_sender);
- TimelineItem *createTimelineItem(const events::MessageEvent<msgs::Text> &e,
- bool with_sender);
- TimelineItem *createTimelineItem(const events::MessageEvent<msgs::Emote> &e,
- bool with_sender);
- TimelineItem *createTimelineItem(const events::MessageEvent<msgs::File> &e,
- bool with_sender);
+ // For events with custom display widgets.
+ template<class Event, class Widget>
+ TimelineItem *createTimelineItem(const Event &event, bool withSender);
+
+ // For events without custom display widgets.
+ // TODO: All events should have custom widgets.
+ template<class Event>
+ TimelineItem *createTimelineItem(const Event &event, bool withSender);
// Add new events at the end of the timeline.
int addEvents(const Timeline &timeline);
@@ -222,3 +220,21 @@ TimelineView::addUserMessage(const QString &url, const QString &filename)
PendingMessage message(MsgType, txn_id, url, filename, "", view_item);
handleNewUserMessage(message);
}
+
+template<class Event>
+TimelineItem *
+TimelineView::createTimelineItem(const Event &event, bool withSender)
+{
+ TimelineItem *item = new TimelineItem(event, withSender, scroll_widget_);
+ return item;
+}
+
+template<class Event, class Widget>
+TimelineItem *
+TimelineView::createTimelineItem(const Event &event, bool withSender)
+{
+ auto eventWidget = new Widget(client_, event);
+ auto item = new TimelineItem(eventWidget, event, withSender, scroll_widget_);
+
+ return item;
+}