Add getters for all model itemproperies

master
Jos van den Oever 2017-09-01 02:33:20 +02:00
parent 5afb953c41
commit 3388f68de5
10 changed files with 229 additions and 117 deletions

View File

@ -25,7 +25,7 @@ add_custom_command(
add_custom_target(rust_target DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/rust/${RUST_TARGET_DIR}/librust.a")
list(APPEND DemoLibs "${CMAKE_CURRENT_SOURCE_DIR}/rust/${RUST_TARGET_DIR}/librust.a")
list(APPEND DemoLibs Qt5::Widgets Qt5::Svg)
list(APPEND DemoLibs Qt5::Widgets Qt5::Svg pthread dl)
if (Qt5Quick_FOUND)
list(APPEND DemoLibs Qt5::Quick)
endif()

View File

@ -177,23 +177,25 @@ Qt::ItemFlags FibonacciList::flags(const QModelIndex &i) const
auto flags = QAbstractItemModel::flags(i);
return flags;
}
QVariant FibonacciList::data(const QModelIndex &index, int role) const
QVariant FibonacciList::result(int row) const
{
QVariant v;
v = fibonacci_list_data_result(m_d, row);
return v;
}
QVariant FibonacciList::data(const QModelIndex &index, int role) const
{
Q_ASSERT(rowCount(index.parent()) > index.row());
QString s;
QByteArray b;
switch (index.column()) {
case 0:
switch (role) {
case Qt::DisplayRole:
case Qt::UserRole + 0:
v = fibonacci_list_data_result(m_d, index.row());
break;
return result(index.row());
}
break;
}
return v;
return QVariant();
}
QHash<int, QByteArray> FibonacciList::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
@ -318,75 +320,96 @@ Qt::ItemFlags FileSystemTree::flags(const QModelIndex &i) const
auto flags = QAbstractItemModel::flags(i);
return flags;
}
QVariant FileSystemTree::data(const QModelIndex &index, int role) const
QVariant FileSystemTree::fileIcon(const QModelIndex& index) const
{
QVariant v;
Q_ASSERT(rowCount(index.parent()) > index.row());
QString s;
QByteArray b;
file_system_tree_data_file_icon(m_d, index.internalId(), &b, set_qbytearray);
if (!b.isNull()) v.setValue<QByteArray>(b);
return v;
}
QVariant FileSystemTree::fileName(const QModelIndex& index) const
{
QVariant v;
QString s;
file_system_tree_data_file_name(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
return v;
}
QVariant FileSystemTree::filePath(const QModelIndex& index) const
{
QVariant v;
QString s;
file_system_tree_data_file_path(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
return v;
}
QVariant FileSystemTree::filePermissions(const QModelIndex& index) const
{
QVariant v;
v = file_system_tree_data_file_permissions(m_d, index.internalId());
return v;
}
QVariant FileSystemTree::fileSize(const QModelIndex& index) const
{
QVariant v;
v = file_system_tree_data_file_size(m_d, index.internalId());
return v;
}
QVariant FileSystemTree::fileType(const QModelIndex& index) const
{
QVariant v;
v = file_system_tree_data_file_type(m_d, index.internalId());
return v;
}
QVariant FileSystemTree::data(const QModelIndex &index, int role) const
{
Q_ASSERT(rowCount(index.parent()) > index.row());
switch (index.column()) {
case 0:
switch (role) {
case Qt::DecorationRole:
case Qt::UserRole + 0:
file_system_tree_data_file_icon(m_d, index.internalId(), &b, set_qbytearray);
if (!b.isNull()) v.setValue<QByteArray>(b);
break;
return fileIcon(index);
case Qt::DisplayRole:
case Qt::UserRole + 1:
file_system_tree_data_file_name(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
break;
return fileName(index);
case Qt::UserRole + 2:
file_system_tree_data_file_path(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
break;
return filePath(index);
case Qt::UserRole + 3:
v = file_system_tree_data_file_permissions(m_d, index.internalId());
break;
return filePermissions(index);
case Qt::UserRole + 4:
v = file_system_tree_data_file_size(m_d, index.internalId());
break;
return fileSize(index);
case Qt::UserRole + 5:
v = file_system_tree_data_file_type(m_d, index.internalId());
break;
return fileType(index);
}
break;
case 1:
switch (role) {
case Qt::DisplayRole:
case Qt::UserRole + 4:
v = file_system_tree_data_file_size(m_d, index.internalId());
break;
return fileSize(index);
}
break;
case 2:
switch (role) {
case Qt::DisplayRole:
case Qt::UserRole + 2:
file_system_tree_data_file_path(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
break;
return filePath(index);
}
break;
case 3:
switch (role) {
case Qt::DisplayRole:
case Qt::UserRole + 3:
v = file_system_tree_data_file_permissions(m_d, index.internalId());
break;
return filePermissions(index);
}
break;
case 4:
switch (role) {
case Qt::DisplayRole:
case Qt::UserRole + 5:
v = file_system_tree_data_file_type(m_d, index.internalId());
break;
return fileType(index);
}
break;
}
return v;
return QVariant();
}
QHash<int, QByteArray> FileSystemTree::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
@ -520,60 +543,90 @@ Qt::ItemFlags Processes::flags(const QModelIndex &i) const
auto flags = QAbstractItemModel::flags(i);
return flags;
}
QVariant Processes::data(const QModelIndex &index, int role) const
QVariant Processes::cmd(const QModelIndex& index) const
{
QVariant v;
Q_ASSERT(rowCount(index.parent()) > index.row());
QString s;
QByteArray b;
processes_data_cmd(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
return v;
}
QVariant Processes::cpuPercentage(const QModelIndex& index) const
{
QVariant v;
v = processes_data_cpu_percentage(m_d, index.internalId());
return v;
}
QVariant Processes::cpuUsage(const QModelIndex& index) const
{
QVariant v;
v = processes_data_cpu_usage(m_d, index.internalId());
return v;
}
QVariant Processes::memory(const QModelIndex& index) const
{
QVariant v;
v = processes_data_memory(m_d, index.internalId());
return v;
}
QVariant Processes::name(const QModelIndex& index) const
{
QVariant v;
QString s;
processes_data_name(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
return v;
}
QVariant Processes::pid(const QModelIndex& index) const
{
QVariant v;
v = processes_data_pid(m_d, index.internalId());
return v;
}
QVariant Processes::uid(const QModelIndex& index) const
{
QVariant v;
v = processes_data_uid(m_d, index.internalId());
return v;
}
QVariant Processes::data(const QModelIndex &index, int role) const
{
Q_ASSERT(rowCount(index.parent()) > index.row());
switch (index.column()) {
case 0:
switch (role) {
case Qt::UserRole + 0:
processes_data_cmd(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
break;
return cmd(index);
case Qt::UserRole + 1:
v = processes_data_cpu_percentage(m_d, index.internalId());
break;
return cpuPercentage(index);
case Qt::UserRole + 2:
v = processes_data_cpu_usage(m_d, index.internalId());
break;
return cpuUsage(index);
case Qt::UserRole + 3:
v = processes_data_memory(m_d, index.internalId());
break;
return memory(index);
case Qt::DisplayRole:
case Qt::UserRole + 4:
processes_data_name(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
break;
return name(index);
case Qt::ToolTipRole:
case Qt::UserRole + 5:
v = processes_data_pid(m_d, index.internalId());
break;
return pid(index);
case Qt::UserRole + 6:
v = processes_data_uid(m_d, index.internalId());
break;
return uid(index);
}
break;
case 1:
switch (role) {
case Qt::DisplayRole:
case Qt::UserRole + 2:
v = processes_data_cpu_usage(m_d, index.internalId());
break;
return cpuUsage(index);
}
break;
case 2:
switch (role) {
case Qt::DisplayRole:
case Qt::UserRole + 3:
v = processes_data_memory(m_d, index.internalId());
break;
return memory(index);
}
break;
}
return v;
return QVariant();
}
QHash<int, QByteArray> Processes::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();
@ -692,36 +745,41 @@ Qt::ItemFlags TimeSeries::flags(const QModelIndex &i) const
}
return flags;
}
QVariant TimeSeries::data(const QModelIndex &index, int role) const
QVariant TimeSeries::input(int row) const
{
QVariant v;
v = time_series_data_input(m_d, row);
return v;
}
QVariant TimeSeries::result(int row) const
{
QVariant v;
v = time_series_data_result(m_d, row);
return v;
}
QVariant TimeSeries::data(const QModelIndex &index, int role) const
{
Q_ASSERT(rowCount(index.parent()) > index.row());
QString s;
QByteArray b;
switch (index.column()) {
case 0:
switch (role) {
case Qt::DisplayRole:
case Qt::EditRole:
case Qt::UserRole + 0:
v = time_series_data_input(m_d, index.row());
break;
return input(index.row());
case Qt::UserRole + 1:
v = time_series_data_result(m_d, index.row());
break;
return result(index.row());
}
break;
case 1:
switch (role) {
case Qt::DisplayRole:
case Qt::EditRole:
case Qt::UserRole + 1:
v = time_series_data_result(m_d, index.row());
break;
return result(index.row());
}
break;
}
return v;
return QVariant();
}
QHash<int, QByteArray> TimeSeries::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();

View File

@ -109,6 +109,7 @@ signals:
private:
QHash<QPair<int,Qt::ItemDataRole>, QVariant> m_headerData;
void initHeaderData();
QVariant result(int row) const;
signals:
};
@ -149,6 +150,12 @@ signals:
private:
QHash<QPair<int,Qt::ItemDataRole>, QVariant> m_headerData;
void initHeaderData();
QVariant fileIcon(const QModelIndex& index) const;
QVariant fileName(const QModelIndex& index) const;
QVariant filePath(const QModelIndex& index) const;
QVariant filePermissions(const QModelIndex& index) const;
QVariant fileSize(const QModelIndex& index) const;
QVariant fileType(const QModelIndex& index) const;
signals:
void pathChanged();
};
@ -190,6 +197,13 @@ signals:
private:
QHash<QPair<int,Qt::ItemDataRole>, QVariant> m_headerData;
void initHeaderData();
QVariant cmd(const QModelIndex& index) const;
QVariant cpuPercentage(const QModelIndex& index) const;
QVariant cpuUsage(const QModelIndex& index) const;
QVariant memory(const QModelIndex& index) const;
QVariant name(const QModelIndex& index) const;
QVariant pid(const QModelIndex& index) const;
QVariant uid(const QModelIndex& index) const;
signals:
void activeChanged();
};
@ -228,6 +242,8 @@ signals:
private:
QHash<QPair<int,Qt::ItemDataRole>, QVariant> m_headerData;
void initHeaderData();
QVariant input(int row) const;
QVariant result(int row) const;
signals:
};
#endif // BINDINGS_H

View File

@ -8,7 +8,7 @@ class SortedModel : public QSortFilterProxyModel {
Q_OBJECT
public:
SortedModel() :QSortFilterProxyModel() {}
bool filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const;
bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const;
Q_INVOKABLE QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {
return QSortFilterProxyModel::data(index, role);
}

View File

@ -35,7 +35,7 @@ QString cGetType(const BindingTypeProperties& type) {
return type.name + "*, " + type.name.toLower() + "_set";
}
void writeHeaderItemModel(QTextStream& h) {
void writeHeaderItemModel(QTextStream& h, const Object& o) {
h << QString(R"(
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
@ -58,6 +58,19 @@ private:
QHash<QPair<int,Qt::ItemDataRole>, QVariant> m_headerData;
void initHeaderData();
)");
for (auto ip: o.itemProperties) {
if (o.type == ObjectType::List) {
h << QString(" QVariant %1(int row) const;\n").arg(ip.name);
} else {
h << QString(" QVariant %1(const QModelIndex& index) const;\n").arg(ip.name);
}
/*
if (ip.write) {
r << QString(" fn set_%1(&mut self, item: usize, %2) -> bool;\n")
.arg(snakeCase(ip.name), rustType(ip));
}
*/
}
}
bool isColumnWrite(const Object& o, int col) {
@ -224,14 +237,39 @@ Qt::ItemFlags %1::flags(const QModelIndex &i) const
cpp << " flags |= Qt::ItemIsEditable;\n }\n";
}
}
cpp << QString(R"( return flags;
}
cpp << " return flags;\n}\n";
for (auto ip: o.itemProperties) {
QString idx = index;
if (o.type == ObjectType::List) {
idx = ", row";
cpp << QString("QVariant %1::%2(int row) const\n{\n")
.arg(o.name, ip.name);
} else {
cpp << QString("QVariant %1::%2(const QModelIndex& index) const\n{\n")
.arg(o.name, ip.name);
}
cpp << " QVariant v;\n";
if (ip.type.name == "QString") {
cpp << " QString s;\n";
cpp << QString(" %1_data_%2(m_d%4, &s, set_%3);\n")
.arg(lcname, snakeCase(ip.name), ip.type.name.toLower(), idx);
cpp << " if (!s.isNull()) v.setValue<QString>(s);\n";
} else if (ip.type.name == "QByteArray") {
cpp << " QByteArray b;\n";
cpp << QString(" %1_data_%2(m_d%4, &b, set_%3);\n")
.arg(lcname, snakeCase(ip.name), ip.type.name.toLower(), idx);
cpp << " if (!b.isNull()) v.setValue<QByteArray>(b);\n";
} else {
cpp << QString(" v = %1_data_%2(m_d%3);\n")
.arg(lcname, snakeCase(ip.name), idx);
}
cpp << " return v;\n";
cpp << "}\n";
}
cpp << QString(R"(
QVariant %1::data(const QModelIndex &index, int role) const
{
QVariant v;
Q_ASSERT(rowCount(index.parent()) > index.row());
QString s;
QByteArray b;
switch (index.column()) {
)").arg(o.name);
@ -249,24 +287,15 @@ QVariant %1::data(const QModelIndex &index, int role) const
cpp << QString(" case Qt::%1:\n").arg(metaRoles.valueToKey(role));
}
cpp << QString(" case Qt::UserRole + %1:\n").arg(i);
if (ip.type.name == "QString") {
cpp << QString(" %1_data_%2(m_d%4, &s, set_%3);\n")
.arg(lcname, snakeCase(ip.name), ip.type.name.toLower(), index);
cpp << " if (!s.isNull()) v.setValue<QString>(s);\n";
} else if (ip.type.name == "QByteArray") {
cpp << QString(" %1_data_%2(m_d%4, &b, set_%3);\n")
.arg(lcname, snakeCase(ip.name), ip.type.name.toLower(), index);
cpp << " if (!b.isNull()) v.setValue<QByteArray>(b);\n";
if (o.type == ObjectType::List) {
cpp << QString(" return %1(index.row());\n").arg(ip.name);
} else {
cpp << QString(" v = %1_data_%2(m_d%3);\n")
.arg(lcname, snakeCase(ip.name), index);
cpp << QString(" return %1(index);\n").arg(ip.name);
}
cpp << " break;\n";
}
cpp << " }\n";
cpp << " break;\n";
}
cpp << " }\n return v;\n}\n";
cpp << " }\n return QVariant();\n}\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) {
@ -388,7 +417,7 @@ public:
}
}
if (baseType(o) == "QAbstractItemModel") {
writeHeaderItemModel(h);
writeHeaderItemModel(h, o);
}
h << "signals:" << endl;
for (auto p: o.properties) {

View File

@ -40,6 +40,7 @@ function(rust_test NAME DIRECTORY)
Qt5::Core
Qt5::Test
"${DIR}/${RUST_TARGET_DIR}/librust.a"
pthread dl
)
set_property(TARGET ${NAME}
APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.h"

View File

@ -115,25 +115,28 @@ Qt::ItemFlags Persons::flags(const QModelIndex &i) const
}
return flags;
}
QVariant Persons::data(const QModelIndex &index, int role) const
QVariant Persons::userName(int row) const
{
QVariant v;
Q_ASSERT(rowCount(index.parent()) > index.row());
QString s;
QByteArray b;
persons_data_user_name(m_d, row, &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
return v;
}
QVariant Persons::data(const QModelIndex &index, int role) const
{
Q_ASSERT(rowCount(index.parent()) > index.row());
switch (index.column()) {
case 0:
switch (role) {
case Qt::DisplayRole:
case Qt::EditRole:
case Qt::UserRole + 0:
persons_data_user_name(m_d, index.row(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
break;
return userName(index.row());
}
break;
}
return v;
return QVariant();
}
QHash<int, QByteArray> Persons::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();

View File

@ -40,6 +40,7 @@ signals:
private:
QHash<QPair<int,Qt::ItemDataRole>, QVariant> m_headerData;
void initHeaderData();
QVariant userName(int row) const;
signals:
};
#endif // TEST_LIST_RUST_H

View File

@ -133,25 +133,28 @@ Qt::ItemFlags Persons::flags(const QModelIndex &i) const
}
return flags;
}
QVariant Persons::data(const QModelIndex &index, int role) const
QVariant Persons::userName(const QModelIndex& index) const
{
QVariant v;
Q_ASSERT(rowCount(index.parent()) > index.row());
QString s;
QByteArray b;
persons_data_user_name(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
return v;
}
QVariant Persons::data(const QModelIndex &index, int role) const
{
Q_ASSERT(rowCount(index.parent()) > index.row());
switch (index.column()) {
case 0:
switch (role) {
case Qt::DisplayRole:
case Qt::EditRole:
case Qt::UserRole + 0:
persons_data_user_name(m_d, index.internalId(), &s, set_qstring);
if (!s.isNull()) v.setValue<QString>(s);
break;
return userName(index);
}
break;
}
return v;
return QVariant();
}
QHash<int, QByteArray> Persons::roleNames() const {
QHash<int, QByteArray> names = QAbstractItemModel::roleNames();

View File

@ -40,6 +40,7 @@ signals:
private:
QHash<QPair<int,Qt::ItemDataRole>, QVariant> m_headerData;
void initHeaderData();
QVariant userName(const QModelIndex& index) const;
signals:
};
#endif // TEST_TREE_RUST_H