Add an option to define new power levels
This commit is contained in:
parent
c25aeac4ca
commit
dc4a06517c
3 changed files with 273 additions and 129 deletions
|
|
@ -239,6 +239,7 @@ PowerlevelsTypeListModel::remove(int row)
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
PowerlevelsTypeListModel::add(int row, QString type)
|
||||
{
|
||||
|
|
@ -261,6 +262,23 @@ PowerlevelsTypeListModel::add(int row, QString type)
|
|||
endInsertRows();
|
||||
}
|
||||
|
||||
void
|
||||
PowerlevelsTypeListModel::addRole(int64_t role)
|
||||
{
|
||||
for (int i = 0; i < types.size(); i++) {
|
||||
if (types[i].pl < role) {
|
||||
beginInsertRows(QModelIndex(), i, i);
|
||||
types.insert(i, Entry{"", role});
|
||||
endInsertRows();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
beginInsertRows(QModelIndex(), types.size(), types.size());
|
||||
types.push_back(Entry{"", role});
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
bool
|
||||
PowerlevelsTypeListModel::move(int from, int to)
|
||||
{
|
||||
|
|
@ -299,10 +317,19 @@ PowerlevelsTypeListModel::moveRows(const QModelIndex &,
|
|||
auto pl = types.at(destinationChild > 0 ? destinationChild - 1 : 0).pl;
|
||||
auto sourceItem = types.takeAt(sourceRow);
|
||||
sourceItem.pl = pl;
|
||||
|
||||
auto movedType = sourceItem.type;
|
||||
|
||||
if (destinationChild < sourceRow)
|
||||
types.insert(destinationChild, std::move(sourceItem));
|
||||
else
|
||||
types.insert(destinationChild - 1, std::move(sourceItem));
|
||||
|
||||
if (movedType == "m.room.power_levels")
|
||||
emit adminLevelChanged();
|
||||
else if (movedType == "redact")
|
||||
emit moderatorLevelChanged();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -454,6 +481,23 @@ PowerlevelsUserListModel::add(int row, QString user)
|
|||
endInsertRows();
|
||||
}
|
||||
|
||||
void
|
||||
PowerlevelsUserListModel::addRole(int64_t role)
|
||||
{
|
||||
for (int i = 0; i < users.size(); i++) {
|
||||
if (users[i].pl < role) {
|
||||
beginInsertRows(QModelIndex(), i, i);
|
||||
users.insert(i, Entry{"", role});
|
||||
endInsertRows();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
beginInsertRows(QModelIndex(), users.size(), users.size());
|
||||
users.push_back(Entry{"", role});
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
bool
|
||||
PowerlevelsUserListModel::move(int from, int to)
|
||||
{
|
||||
|
|
@ -492,10 +536,17 @@ PowerlevelsUserListModel::moveRows(const QModelIndex &,
|
|||
auto pl = users.at(destinationChild > 0 ? destinationChild - 1 : 0).pl;
|
||||
auto sourceItem = users.takeAt(sourceRow);
|
||||
sourceItem.pl = pl;
|
||||
|
||||
auto movedType = sourceItem.mxid;
|
||||
|
||||
if (destinationChild < sourceRow)
|
||||
users.insert(destinationChild, std::move(sourceItem));
|
||||
else
|
||||
users.insert(destinationChild - 1, std::move(sourceItem));
|
||||
|
||||
if (movedType == "default")
|
||||
emit defaultUserLevelChanged();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -508,7 +559,20 @@ PowerlevelEditingModels::PowerlevelEditingModels(QString room_id, QObject *paren
|
|||
, types_(room_id.toStdString(), powerLevels_, this)
|
||||
, users_(room_id.toStdString(), powerLevels_, this)
|
||||
, room_id_(room_id.toStdString())
|
||||
{}
|
||||
{
|
||||
connect(&types_,
|
||||
&PowerlevelsTypeListModel::adminLevelChanged,
|
||||
this,
|
||||
&PowerlevelEditingModels::adminLevelChanged);
|
||||
connect(&types_,
|
||||
&PowerlevelsTypeListModel::moderatorLevelChanged,
|
||||
this,
|
||||
&PowerlevelEditingModels::moderatorLevelChanged);
|
||||
connect(&users_,
|
||||
&PowerlevelsUserListModel::defaultUserLevelChanged,
|
||||
this,
|
||||
&PowerlevelEditingModels::defaultUserLevelChanged);
|
||||
}
|
||||
|
||||
void
|
||||
PowerlevelEditingModels::commit()
|
||||
|
|
@ -532,3 +596,14 @@ PowerlevelEditingModels::commit()
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
PowerlevelEditingModels::addRole(int pl)
|
||||
{
|
||||
for (const auto &e : types_.types)
|
||||
if (pl == int(e.pl))
|
||||
return;
|
||||
|
||||
types_.addRole(pl);
|
||||
users_.addRole(pl);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@ class PowerlevelsTypeListModel : public QAbstractListModel
|
|||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void adminLevelChanged();
|
||||
void moderatorLevelChanged();
|
||||
|
||||
public:
|
||||
enum Roles
|
||||
{
|
||||
|
|
@ -36,6 +40,7 @@ public:
|
|||
Q_INVOKABLE bool remove(int row);
|
||||
Q_INVOKABLE bool move(int from, int to);
|
||||
Q_INVOKABLE void add(int index, QString type);
|
||||
void addRole(int64_t role);
|
||||
|
||||
bool moveRows(const QModelIndex &sourceParent,
|
||||
int sourceRow,
|
||||
|
|
@ -50,7 +55,6 @@ public:
|
|||
mtx::events::state::power_level_t eventsDefault();
|
||||
mtx::events::state::power_level_t stateDefault();
|
||||
|
||||
private:
|
||||
struct Entry
|
||||
{
|
||||
~Entry() = default;
|
||||
|
|
@ -68,6 +72,9 @@ class PowerlevelsUserListModel : public QAbstractListModel
|
|||
{
|
||||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void defaultUserLevelChanged();
|
||||
|
||||
public:
|
||||
enum Roles
|
||||
{
|
||||
|
|
@ -91,6 +98,7 @@ public:
|
|||
Q_INVOKABLE bool remove(int row);
|
||||
Q_INVOKABLE bool move(int from, int to);
|
||||
Q_INVOKABLE void add(int index, QString user);
|
||||
void addRole(int64_t role);
|
||||
|
||||
bool moveRows(const QModelIndex &sourceParent,
|
||||
int sourceRow,
|
||||
|
|
@ -101,7 +109,6 @@ public:
|
|||
std::map<std::string, mtx::events::state::power_level_t, std::less<>> toUsers();
|
||||
mtx::events::state::power_level_t usersDefault();
|
||||
|
||||
private:
|
||||
struct Entry
|
||||
{
|
||||
~Entry() = default;
|
||||
|
|
@ -121,8 +128,14 @@ class PowerlevelEditingModels : public QObject
|
|||
|
||||
Q_PROPERTY(PowerlevelsUserListModel *users READ users CONSTANT)
|
||||
Q_PROPERTY(PowerlevelsTypeListModel *types READ types CONSTANT)
|
||||
Q_PROPERTY(qlonglong adminLevel READ adminLevel CONSTANT)
|
||||
Q_PROPERTY(qlonglong moderatorLevel READ moderatorLevel 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)
|
||||
|
||||
signals:
|
||||
void adminLevelChanged();
|
||||
void moderatorLevelChanged();
|
||||
void defaultUserLevelChanged();
|
||||
|
||||
public:
|
||||
explicit PowerlevelEditingModels(QString room_id, QObject *parent = nullptr);
|
||||
|
|
@ -134,8 +147,10 @@ public:
|
|||
return powerLevels_.state_level(to_string(mtx::events::EventType::RoomPowerLevels));
|
||||
}
|
||||
qlonglong moderatorLevel() const { return powerLevels_.redact; }
|
||||
qlonglong defaultUserLevel() const { return powerLevels_.users_default; }
|
||||
|
||||
Q_INVOKABLE void commit();
|
||||
Q_INVOKABLE void addRole(int pl);
|
||||
|
||||
mtx::events::state::PowerLevels powerLevels_;
|
||||
PowerlevelsTypeListModel types_;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue