diff --git a/src/PowerlevelsEditModels.h b/src/PowerlevelsEditModels.h
index 9aa955d2..515fdb56 100644
--- a/src/PowerlevelsEditModels.h
+++ b/src/PowerlevelsEditModels.h
@@ -48,12 +48,12 @@ public:
const QModelIndex &destinationParent,
int destinationChild) override;
- std::map<std::string, mtx::events::state::power_level_t, std::less<>> toEvents();
- mtx::events::state::power_level_t kick();
- mtx::events::state::power_level_t invite();
- mtx::events::state::power_level_t ban();
- mtx::events::state::power_level_t eventsDefault();
- mtx::events::state::power_level_t stateDefault();
+ std::map<std::string, mtx::events::state::power_level_t, std::less<>> toEvents() const;
+ mtx::events::state::power_level_t kick() const;
+ mtx::events::state::power_level_t invite() const;
+ mtx::events::state::power_level_t ban() const;
+ mtx::events::state::power_level_t eventsDefault() const;
+ mtx::events::state::power_level_t stateDefault() const;
struct Entry
{
@@ -106,8 +106,8 @@ public:
const QModelIndex &destinationParent,
int destinationChild) override;
- std::map<std::string, mtx::events::state::power_level_t, std::less<>> toUsers();
- mtx::events::state::power_level_t usersDefault();
+ std::map<std::string, mtx::events::state::power_level_t, std::less<>> toUsers() const;
+ mtx::events::state::power_level_t usersDefault() const;
struct Entry
{
@@ -122,38 +122,117 @@ public:
mtx::events::state::PowerLevels powerLevels_;
};
+class PowerlevelsSpacesListModel : public QAbstractListModel
+{
+ Q_OBJECT
+ Q_PROPERTY(bool applyToChildren READ applyToChildren WRITE setApplyToChildren NOTIFY
+ applyToChildrenChanged)
+ Q_PROPERTY(bool overwriteDiverged READ overwriteDiverged WRITE setOverwriteDiverged NOTIFY
+ overwriteDivergedChanged)
+
+signals:
+ void applyToChildrenChanged();
+ void overwriteDivergedChanged();
+
+public:
+ enum Roles
+ {
+ DisplayName,
+ AvatarUrl,
+ IsSpace,
+ IsEditable,
+ IsDifferentFromBase,
+ IsAlreadyUpToDate,
+ ApplyPermissions,
+ };
+
+ explicit PowerlevelsSpacesListModel(const std::string &room_id_,
+ const mtx::events::state::PowerLevels &pl,
+ QObject *parent = nullptr);
+
+ QHash<int, QByteArray> roleNames() const override;
+ int rowCount(const QModelIndex &) const override { return static_cast<int>(spaces.size()); }
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool
+ setData(const QModelIndex &index, const QVariant &value, int role = Qt::DisplayRole) override;
+
+ bool applyToChildren() const { return applyToChildren_; }
+ bool overwriteDiverged() const { return overwriteDiverged_; }
+
+ void setApplyToChildren(bool val)
+ {
+ applyToChildren_ = val;
+ emit applyToChildrenChanged();
+ updateToDefaults();
+ }
+ void setOverwriteDiverged(bool val)
+ {
+ overwriteDiverged_ = val;
+ emit overwriteDivergedChanged();
+ updateToDefaults();
+ }
+
+ void updateToDefaults();
+
+ Q_INVOKABLE void commit();
+
+ struct Entry
+ {
+ ~Entry() = default;
+
+ std::string roomid;
+ mtx::events::state::PowerLevels pl;
+ bool apply = false;
+ };
+
+ std::string room_id;
+ QVector<Entry> spaces;
+ mtx::events::state::PowerLevels oldPowerLevels_, newPowerlevels_;
+
+ bool applyToChildren_ = true, overwriteDiverged_ = false;
+};
+
class PowerlevelEditingModels : public QObject
{
Q_OBJECT
Q_PROPERTY(PowerlevelsUserListModel *users READ users CONSTANT)
Q_PROPERTY(PowerlevelsTypeListModel *types READ types CONSTANT)
+ Q_PROPERTY(PowerlevelsSpacesListModel *spaces READ spaces CONSTANT)
Q_PROPERTY(qlonglong adminLevel READ adminLevel NOTIFY adminLevelChanged)
Q_PROPERTY(qlonglong moderatorLevel READ moderatorLevel NOTIFY moderatorLevelChanged)
Q_PROPERTY(qlonglong defaultUserLevel READ defaultUserLevel NOTIFY defaultUserLevelChanged)
+ Q_PROPERTY(bool isSpace READ isSpace CONSTANT)
signals:
void adminLevelChanged();
void moderatorLevelChanged();
void defaultUserLevelChanged();
+private:
+ mtx::events::state::PowerLevels calculateNewPowerlevel() const;
+
public:
explicit PowerlevelEditingModels(QString room_id, QObject *parent = nullptr);
PowerlevelsUserListModel *users() { return &users_; }
PowerlevelsTypeListModel *types() { return &types_; }
+ PowerlevelsSpacesListModel *spaces() { return &spaces_; }
qlonglong adminLevel() const
{
return powerLevels_.state_level(to_string(mtx::events::EventType::RoomPowerLevels));
}
qlonglong moderatorLevel() const { return powerLevels_.redact; }
qlonglong defaultUserLevel() const { return powerLevels_.users_default; }
+ bool isSpace() const;
Q_INVOKABLE void commit();
+ Q_INVOKABLE void updateSpacesModel();
Q_INVOKABLE void addRole(int pl);
mtx::events::state::PowerLevels powerLevels_;
PowerlevelsTypeListModel types_;
PowerlevelsUserListModel users_;
+ PowerlevelsSpacesListModel spaces_;
std::string room_id_;
};
|