Skip to content
Snippets Groups Projects
Commit 8b5c7b2f authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Add placeholder timeline model

parent 8e611abe
Branches
Tags
No related merge requests found
...@@ -192,6 +192,7 @@ set(SRC_FILES ...@@ -192,6 +192,7 @@ set(SRC_FILES
# Timeline # Timeline
src/timeline2/TimelineViewManager.cpp src/timeline2/TimelineViewManager.cpp
src/timeline2/TimelineModel.cpp
#src/timeline/TimelineViewManager.cpp #src/timeline/TimelineViewManager.cpp
#src/timeline/TimelineItem.cpp #src/timeline/TimelineItem.cpp
#src/timeline/TimelineView.cpp #src/timeline/TimelineView.cpp
...@@ -335,6 +336,7 @@ qt5_wrap_cpp(MOC_HEADERS ...@@ -335,6 +336,7 @@ qt5_wrap_cpp(MOC_HEADERS
# Timeline # Timeline
src/timeline2/TimelineViewManager.h src/timeline2/TimelineViewManager.h
src/timeline2/TimelineModel.h
#src/timeline/TimelineItem.h #src/timeline/TimelineItem.h
#src/timeline/TimelineView.h #src/timeline/TimelineView.h
#src/timeline/TimelineViewManager.h #src/timeline/TimelineViewManager.h
......
...@@ -4,8 +4,19 @@ Rectangle { ...@@ -4,8 +4,19 @@ Rectangle {
anchors.fill: parent anchors.fill: parent
Text { Text {
visible: !timeline
anchors.centerIn: parent anchors.centerIn: parent
text: qsTr("No room open") text: qsTr("No room open")
font.pointSize: 24 font.pointSize: 24
} }
ListView {
visible: timeline != undefined
anchors.fill: parent
model: timeline
delegate: Text {
text: userId
}
}
} }
#include "TimelineModel.h"
#include "Utils.h"
QHash<int, QByteArray>
TimelineModel::roleNames() const
{
return {
{Type, "type"},
{Body, "body"},
{FormattedBody, "formattedBody"},
{UserId, "userId"},
{UserName, "userName"},
{Timestamp, "timestamp"},
};
}
int
TimelineModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return (int)this->eventOrder.size();
}
QVariant
TimelineModel::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 && index.row() >= (int)eventOrder.size())
return QVariant();
QString id = eventOrder[index.row()];
switch (role) {
case UserId:
return QVariant(QString(""));
default:
return QVariant();
}
}
QColor
TimelineModel::userColor(QString id, QColor background)
{
if (!userColors.count(id))
userColors.insert(
{id, QColor(utils::generateContrastingHexColor(id, background.name()))});
return userColors.at(id);
}
#pragma once
#include <map>
#include <vector>
#include <QAbstractListModel>
#include <QColor>
#include <mtx/events/collections.hpp>
class TimelineModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit TimelineModel(QObject *parent = 0)
: QAbstractListModel(parent)
{}
enum Roles
{
Type,
Body,
FormattedBody,
UserId,
UserName,
Timestamp,
};
QHash<int, QByteArray> roleNames() const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
Q_INVOKABLE QColor userColor(QString id, QColor background);
private:
std::map<QString, mtx::events::collections::TimelineEvents> events;
std::vector<QString> eventOrder;
std::map<QString, QColor> userColors;
};
#include "TimelineViewManager.h" #include "TimelineViewManager.h"
#include <QMetaType>
#include <QQmlContext>
#include "Logging.h"
TimelineViewManager::TimelineViewManager(QWidget *parent) TimelineViewManager::TimelineViewManager(QWidget *parent)
{ {
view = new QQuickView(); view = new QQuickView();
container = QWidget::createWindowContainer(view, parent); container = QWidget::createWindowContainer(view, parent);
container->setMinimumSize(200, 200); container->setMinimumSize(200, 200);
view->setSource(QUrl("qrc:///qml/TimelineView.qml")); view->setSource(QUrl("qrc:///qml/TimelineView.qml"));
// view->rootContext()->setContextProperty(room); }
void
TimelineViewManager::initialize(const mtx::responses::Rooms &rooms)
{
for (auto it = rooms.join.cbegin(); it != rooms.join.cend(); ++it) {
addRoom(QString::fromStdString(it->first));
}
sync(rooms);
}
void
TimelineViewManager::addRoom(const QString &room_id)
{
if (!models.contains(room_id))
models.insert(room_id, QSharedPointer<TimelineModel>(new TimelineModel()));
}
void
TimelineViewManager::setHistoryView(const QString &room_id)
{
nhlog::ui()->info("Trying to activate room {}", room_id.toStdString());
auto room = models.find(room_id);
if (room != models.end()) {
view->rootContext()->setContextProperty("timeline",
QVariant::fromValue(room.value().data()));
nhlog::ui()->info("Activated room {}", room_id.toStdString());
}
}
void
TimelineViewManager::initWithMessages(const std::map<QString, mtx::responses::Timeline> &msgs)
{
for (const auto &e : msgs) {
addRoom(e.first);
}
} }
#pragma once #pragma once
#include <QQuickView> #include <QQuickView>
#include <QSharedPointer>
#include <QWidget> #include <QWidget>
#include <mtx/responses.hpp> #include <mtx/responses.hpp>
#include "Cache.h" #include "Cache.h"
#include "TimelineModel.h"
#include "Utils.h" #include "Utils.h"
// temporary for stubs // temporary for stubs
...@@ -19,11 +21,11 @@ public: ...@@ -19,11 +21,11 @@ public:
TimelineViewManager(QWidget *parent = 0); TimelineViewManager(QWidget *parent = 0);
QWidget *getWidget() const { return container; } QWidget *getWidget() const { return container; }
void initialize(const mtx::responses::Rooms &rooms) {} void initialize(const mtx::responses::Rooms &rooms);
void addRoom(const QString &room_id) {} void addRoom(const QString &room_id);
void sync(const mtx::responses::Rooms &rooms) {} void sync(const mtx::responses::Rooms &rooms) {}
void clearAll() {} void clearAll() { models.clear(); }
signals: signals:
void clearRoomMessageCount(QString roomid); void clearRoomMessageCount(QString roomid);
...@@ -32,9 +34,10 @@ signals: ...@@ -32,9 +34,10 @@ signals:
public slots: public slots:
void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids) {} void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids) {}
void removeTimelineEvent(const QString &room_id, const QString &event_id) {} void removeTimelineEvent(const QString &room_id, const QString &event_id) {}
void initWithMessages(const std::map<QString, mtx::responses::Timeline> &msgs) {} void initWithMessages(const std::map<QString, mtx::responses::Timeline> &msgs);
void setHistoryView(const QString &room_id);
void setHistoryView(const QString &room_id) {}
void queueTextMessage(const QString &msg) {} void queueTextMessage(const QString &msg) {}
void queueReplyMessage(const QString &reply, const RelatedInfo &related) {} void queueReplyMessage(const QString &reply, const RelatedInfo &related) {}
void queueEmoteMessage(const QString &msg) {} void queueEmoteMessage(const QString &msg) {}
...@@ -67,6 +70,8 @@ public slots: ...@@ -67,6 +70,8 @@ public slots:
private: private:
QQuickView *view; QQuickView *view;
QWidget *container; QWidget *container;
QHash<QString, QSharedPointer<TimelineModel>> models;
}; };
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment