summary refs log tree commit diff
path: root/src/GridImagePackModel.h
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-05-19 03:15:55 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2023-05-20 00:57:47 +0200
commit0dfdba4316c18fe92f0d0b441236361091cdc758 (patch)
treeccc50e004bbe4f3e12692053e25fa556634c0ff1 /src/GridImagePackModel.h
parentMerge pull request #1456 from Nheko-Reborn/inputfocus (diff)
downloadnheko-0dfdba4316c18fe92f0d0b441236361091cdc758.tar.xz
Add rows to stickerpicker
Diffstat (limited to 'src/GridImagePackModel.h')
-rw-r--r--src/GridImagePackModel.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/GridImagePackModel.h b/src/GridImagePackModel.h
new file mode 100644

index 00000000..1345b103 --- /dev/null +++ b/src/GridImagePackModel.h
@@ -0,0 +1,72 @@ +// SPDX-FileCopyrightText: Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include <QAbstractListModel> +#include <QObject> +#include <QString> + +#include <mtx/events/mscs/image_packs.hpp> + +struct StickerImage +{ + Q_GADGET + Q_PROPERTY(QString url MEMBER url CONSTANT) + Q_PROPERTY(QString shortcode MEMBER shortcode CONSTANT) + Q_PROPERTY(QString body MEMBER body CONSTANT) + Q_PROPERTY(QStringList descriptor READ descriptor CONSTANT) + +public: + QStringList descriptor() const + { + if (descriptor_.size() == 3) + return QStringList{ + QString::fromStdString(descriptor_[0]), + QString::fromStdString(descriptor_[1]), + QString::fromStdString(descriptor_[2]), + }; + else + return {}; + } + + QString url; + QString shortcode; + QString body; + + std::vector<std::string> descriptor_; // roomid, statekey, shortcode +}; + +class GridImagePackModel final : public QAbstractListModel +{ + Q_OBJECT +public: + enum Roles + { + PackName = Qt::UserRole, + Row, + }; + + GridImagePackModel(const std::string &roomId, bool stickers, QObject *parent = nullptr); + QHash<int, QByteArray> roleNames() const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role) const override; + +private: + std::string room_id; + + struct PackDesc + { + QString packname; + QString packavatar; + std::string room_id, state_key; + + std::vector<std::pair<mtx::events::msc2545::PackImage, QString>> images; + std::size_t firstRow; + }; + + std::vector<PackDesc> packs; + std::vector<size_t> rowToPack; + int columns = 3; +};