aboutsummaryrefslogtreecommitdiff
path: root/accounts_model.h
diff options
context:
space:
mode:
Diffstat (limited to 'accounts_model.h')
-rw-r--r--accounts_model.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/accounts_model.h b/accounts_model.h
new file mode 100644
index 0000000..5541f7e
--- /dev/null
+++ b/accounts_model.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include <QAbstractListModel>
+#include <deltachat.h>
+
+#include "eventemitter.h"
+#include "context.h"
+
+class AccountsModel : public QAbstractListModel {
+ Q_OBJECT
+ Q_PROPERTY(size_t accountCount READ accountCount NOTIFY accountCountChanged)
+ Q_PROPERTY(uint32_t selectedAccount READ selectedAccount WRITE setSelectedAccount NOTIFY selectedAccountChanged)
+
+public:
+ enum AccountRoles {
+ NumberRole = Qt::UserRole + 1
+ };
+ explicit AccountsModel(QObject *parent = nullptr);
+ ~AccountsModel();
+
+ int rowCount(const QModelIndex & parent = QModelIndex()) const;
+
+ QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
+
+ size_t accountCount() const;
+
+ uint32_t selectedAccount();
+ void setSelectedAccount(uint32_t selectedAccount);
+
+ Q_INVOKABLE uint32_t addAccount();
+ Q_INVOKABLE void removeAccount(uint32_t accountId);
+ Q_INVOKABLE uint32_t importAccount(const QString &filename);
+ Q_INVOKABLE Context *getSelectedAccount();
+
+ Q_INVOKABLE void startIo();
+ Q_INVOKABLE void stopIo();
+ Q_INVOKABLE void maybeNetwork();
+
+ Q_INVOKABLE DcAccountsEventEmitter *getEventEmitter();
+
+signals:
+ void accountCountChanged();
+ void selectedAccountChanged();
+
+protected:
+ QHash<int, QByteArray> roleNames() const;
+
+private:
+ dc_accounts_t *m_accounts{nullptr};
+ uint32_t m_selectedAccount{0};
+};