SPDX-FileCopyrightText: 2024 Evgeny Chesnokov <echesnokov@astralinux.ru>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <QAbstractListModel>
class KeyboardConfig;
class LayoutUnit;
class QItemSelectionModel;
class UserLayoutModel final : public QAbstractListModel
{
Q_OBJECT
enum Roles {
LayoutRole = Qt::UserRole + 1,
LayoutNameRole,
VariantRole,
VariantNameRole,
DisplayNameRole,
ShortcutRole,
};
public:
explicit UserLayoutModel(KeyboardConfig *config, QObject *parent) noexcept;
Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
Q_INVOKABLE QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
QHash<int, QByteArray> roleNames() const override;
void reset();
void clear();
Q_INVOKABLE void move(int oldIndex, int newIndex);
Q_INVOKABLE void remove(int index);
Q_INVOKABLE void addLayout(const QString &layout, const QString &variant, const QKeySequence &shortcut, const QString &displayName = QString());
Q_INVOKABLE void setSingleLayout(const QString &layout, const QString &variant, const QKeySequence &shortcut, const QString &displayName = QString());
private:
QItemSelectionModel *const m_selectionModel;
KeyboardConfig *const m_config;
};