Added ActivityModel in new tray backend, implemented as delegate in UI
authorDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Thu, 2 Jan 2020 09:39:53 +0000 (10:39 +0100)
committerDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Thu, 2 Jan 2020 09:39:53 +0000 (10:39 +0100)
Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
src/gui/systray.cpp
src/gui/tray/UserModel.cpp
src/gui/tray/UserModel.h
src/gui/tray/window.qml

index 642b49453be356083b8ce39162aebdd9e0e34878..97d6a1a03444bd68c729f0afd14600363f7f2388 100644 (file)
@@ -48,6 +48,7 @@ Systray::Systray() // TODO: make singleton, provide ::instance()
 
     engine->addImageProvider("avatars", new ImageProvider);
     engine->rootContext()->setContextProperty("userModelBackend", UserModel::instance());
+    engine->rootContext()->setContextProperty("activityModel", ActivityModel::instance());
     engine->rootContext()->setContextProperty("systrayBackend", this);
 
     // TODO: hack to pass the icon to QML
index 2b89b0cc93cd56557c1882ba4ed6d3db2714eba3..95591226f1e68ad49eb580cb54eaf5cd1b8f39a7 100644 (file)
@@ -23,7 +23,7 @@ void User::setCurrentUser(const bool &isCurrent)
     _isCurrentUser = isCurrent;
 }
 
-FolderUser::getFolder()
+Folder *User::getFolder()
 {
     foreach (Folder *folder, FolderMan::instance()->map()) {
         if (folder->accountState() == _account.data()) {
@@ -99,12 +99,6 @@ UserModel::UserModel(QObject *parent)
     , _currentUserId()
 {
     // TODO: Remember selected user from last quit via settings file
-    //  this is the reason why this looks like an unnecessary double check atm
-    /*if (AccountManager::instance()->accounts().size() > 0) {
-        addUser(AccountManager::instance()->accounts().first(), true);
-    } else {
-        return;
-    }*/
     if (AccountManager::instance()->accounts().size() > 0) {
         initUserList();
     }
@@ -212,6 +206,76 @@ QHash<int, QByteArray> UserModel::roleNames() const
 
 /*-------------------------------------------------------------------------------------*/
 
+QString UserActivity::type() const
+{
+    return "Test";
+}
+QString UserActivity::fileName() const
+{
+    return "Test";
+}
+
+QString UserActivity::info() const
+{
+    return "Test";
+}
+
+
+ActivityModel *ActivityModel::_instance = nullptr;
+
+ActivityModel *ActivityModel::instance()
+{
+    if (_instance == nullptr) {
+        _instance = new ActivityModel();
+    }
+    return _instance;
+}
+
+ActivityModel::ActivityModel(QObject *parent)
+    : QAbstractListModel()
+{
+}
+
+QHash<int, QByteArray> ActivityModel::roleNames() const
+{
+    QHash<int, QByteArray> roles;
+    roles[TypeRole] = "type";
+    roles[FileNameRole] = "filename";
+    roles[InfoRole] = "info";
+    return roles;
+}
+
+int ActivityModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return _activities.count();
+}
+
+QVariant ActivityModel::data(const QModelIndex &index, int role) const
+{
+    if (index.row() < 0 || index.row() >= _activities.count()) {
+        return QVariant();
+    }
+
+    const UserActivity &activity = _activities[index.row()];
+    if (role == TypeRole)
+        return activity.type();
+    else if (role == FileNameRole)
+        return activity.fileName();
+    else if (role == InfoRole)
+        return activity.info();
+    return QVariant();
+}
+
+void ActivityModel::addActivity(const UserActivity &activity)
+{
+    beginInsertRows(QModelIndex(), rowCount(), rowCount());
+    _activities << activity;
+    endInsertRows();
+}
+
+/*-------------------------------------------------------------------------------------*/
+
 ImageProvider::ImageProvider()
     : QQuickImageProvider(QQuickImageProvider::Image)
 {
index 848798d83bebeed3d7c5be1ce95625950fbccedc..35eb3f9c2d4f1a07b05cdb55fbf724ce74676ebd 100644 (file)
@@ -21,7 +21,7 @@ public:
     bool isConnected() const;
     bool isCurrentUser() const;
     void setCurrentUser(const bool &isCurrent);
-    FoldergetFolder();
+    Folder *getFolder();
     void openLocalFolder();
     QString name() const;
     QString server() const;
@@ -85,6 +85,40 @@ private:
     void initUserList();
 };
 
+class UserActivity
+{
+public:
+    QString type() const;
+    QString fileName() const;
+    QString info() const;
+};
+
+class ActivityModel : public QAbstractListModel
+{
+    Q_OBJECT
+public:
+    static ActivityModel *instance();
+    virtual ~ActivityModel() {};
+
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+    void addActivity(const UserActivity &activity);
+
+    enum ActivityRoles {
+        TypeRole = Qt::UserRole + 1,
+        FileNameRole,
+        InfoRole
+    };
+
+protected:
+    QHash<int, QByteArray> roleNames() const;
+
+private:
+    static ActivityModel *_instance;
+    ActivityModel(QObject *parent = 0);
+    QList<UserActivity> _activities;
+};
+
 class ImageProvider : public QQuickImageProvider
 {
 public:
index 803d8fbae72646f14bc2a621612b20b7d1f35b67..28e61f466518a6a0e14cdfa5da12e7df008d6a28 100644 (file)
@@ -263,7 +263,6 @@ Window {
                     Layout.preferredHeight: (trayWindowHeaderBackground.height)\r
                     flat: true\r
 \r
-                    //icon.source: "../../theme/white/talk-app.svg"\r
                     icon.source: "qrc:///client/theme/white/talk-app.svg"\r
                     icon.color: "transparent"\r
 \r
@@ -291,7 +290,6 @@ Window {
                     Layout.preferredHeight: (trayWindowHeaderBackground.height)\r
                     flat: true\r
 \r
-                    //icon.source: "../../theme/white/more-apps.svg"\r
                     icon.source: "qrc:///client/theme/white/more-apps.svg"\r
                     icon.color: "transparent"\r
 \r
@@ -355,10 +353,6 @@ Window {
             }\r
         }   // Rectangle trayWindowHeaderBackground\r
 \r
-        ListModel {\r
-            id: activityListModel\r
-        }\r
-\r
         ListView {\r
             id: activityListView\r
             anchors.top: trayWindowHeaderBackground.bottom\r
@@ -366,7 +360,7 @@ Window {
             height: trayWindowBackground.height - trayWindowHeaderBackground.height\r
             clip: true\r
 \r
-            model: activityListModel\r
+            model: activityModel\r
 \r
             delegate: RowLayout {\r
                 id: activityItem\r
@@ -389,12 +383,12 @@ Window {
                     Layout.alignment: Qt.AlignLeft\r
                     Text {\r
                         id: activityTextTitle\r
-                        text: name\r
+                        text: filename\r
                         font.pointSize: 9\r
                     }\r
                     Text {\r
                         id: activityTextInfo\r
-                        text: "Lorem ipsum dolor sit amet"\r
+                        text: info\r
                         font.pointSize: 8\r
                     }\r
                 }\r