Add function to look up role number from role name

master
Jos van den Oever 2018-05-19 17:08:18 +02:00
parent 9822dcef07
commit b8fcb67112
10 changed files with 110 additions and 2 deletions

View File

@ -221,6 +221,17 @@ QVariant FibonacciList::data(const QModelIndex &index, int role) const
return QVariant();
}
int FibonacciList::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> FibonacciList::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "fibonacciNumber");
@ -435,6 +446,17 @@ QVariant FileSystemTree::data(const QModelIndex &index, int role) const
return QVariant();
}
int FileSystemTree::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> FileSystemTree::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "fileIcon");
@ -648,6 +670,17 @@ QVariant Processes::data(const QModelIndex &index, int role) const
return QVariant();
}
int Processes::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> Processes::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "cmd");
@ -856,6 +889,17 @@ QVariant TimeSeries::data(const QModelIndex &index, int role) const
return QVariant();
}
int TimeSeries::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> TimeSeries::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "cos");

View File

@ -99,6 +99,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@ -143,6 +144,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@ -192,6 +194,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@ -239,6 +242,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;

View File

@ -82,6 +82,7 @@ void writeHeaderItemModel(QTextStream& h, const Object& o) {
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@ -451,6 +452,17 @@ Qt::ItemFlags %1::flags(const QModelIndex &i) const
cpp << " }\n";
}
cpp << " }\n return QVariant();\n}\n\n";
cpp << "int " << o.name << "::role(const char* name) const {\n";
cpp << " auto names = roleNames();\n";
cpp << " auto i = names.constBegin();\n";
cpp << " while (i != names.constEnd()) {\n";
cpp << " if (i.value() == name) {\n";
cpp << " return i.key();\n";
cpp << " }\n";
cpp << " ++i;\n";
cpp << " }\n";
cpp << " return -1;\n";
cpp << "}\n";
cpp << "QHash<int, QByteArray> " << o.name << "::roleNames() const {\n";
cpp << " QHash<int, QByteArray> names = QAbstractItemModel::roleNames();\n";
for (int i = 0; i < o.itemProperties.size(); ++i) {

View File

@ -72,8 +72,8 @@ void TestRustList::testAccessByDefaultRole()
// GIVEN
NoRole norole;
QSignalSpy spy(&norole, &NoRole::dataChanged);
auto ageRole = Qt::UserRole + 0;
auto nameRole = Qt::UserRole + 1;
auto ageRole = norole.role("userAge");
auto nameRole = norole.role("userName");
// WHEN
const QModelIndex index(norole.index(0,0));

View File

@ -154,6 +154,17 @@ QVariant NoRole::data(const QModelIndex &index, int role) const
return QVariant();
}
int NoRole::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> NoRole::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "userAge");
@ -314,6 +325,17 @@ QVariant Persons::data(const QModelIndex &index, int role) const
return QVariant();
}
int Persons::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> Persons::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "userName");

View File

@ -31,6 +31,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
@ -74,6 +75,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;

View File

@ -485,6 +485,17 @@ QVariant List::data(const QModelIndex &index, int role) const
return QVariant();
}
int List::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> List::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "boolean");

View File

@ -30,6 +30,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;

View File

@ -151,6 +151,17 @@ QVariant Persons::data(const QModelIndex &index, int role) const
return QVariant();
}
int Persons::role(const char* name) const {
auto names = roleNames();
auto i = names.constBegin();
while (i != names.constEnd()) {
if (i.value() == name) {
return i.key();
}
++i;
}
return -1;
}
QHash<int, QByteArray> Persons::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
names.insert(Qt::UserRole + 0, "userName");

View File

@ -30,6 +30,7 @@ public:
void fetchMore(const QModelIndex &parent) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
int role(const char* name) const;
QHash<int, QByteArray> roleNames() const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;