From d29249e0cf246b27c3960c1ddd813507ab7cb940 Mon Sep 17 00:00:00 2001 From: Jussi Kuokkanen Date: Sat, 9 Nov 2019 15:34:25 +0200 Subject: [PATCH] qt: update ReadableWidget --- src/modules/interface/qt/meson.build | 2 ++ .../interface/qt/widgets/ReadableBrowser.cpp | 35 +++++++++++++++---- .../interface/qt/widgets/ReadableBrowser.h | 9 ++++- .../interface/qt/widgets/ReadableWidget.cpp | 3 ++ .../interface/qt/widgets/ReadableWidget.h | 2 ++ 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/src/modules/interface/qt/meson.build b/src/modules/interface/qt/meson.build index fa1894a..21af400 100644 --- a/src/modules/interface/qt/meson.build +++ b/src/modules/interface/qt/meson.build @@ -8,6 +8,7 @@ moc_files = qt5.preprocess(moc_headers : [ 'MainWindow.h', 'widgets/EnumEditor.h', 'widgets/ReadableWidget.h', 'widgets/ReadableBrowser.h', + 'widgets/ReadableDisplay.h', 'data/AssignableManager.h', 'data/AssignableEditorDelegate.h'], dependencies : qt5_dep) @@ -19,6 +20,7 @@ sources = ['main.cpp', 'widgets/EnumEditor.cpp', 'widgets/ReadableWidget.cpp', 'widgets/ReadableBrowser.cpp', + 'widgets/ReadableDisplay.cpp', 'data/AssignableData.cpp', 'data/AssignableEditorDelegate.cpp', 'data/AssignableManager.cpp', diff --git a/src/modules/interface/qt/widgets/ReadableBrowser.cpp b/src/modules/interface/qt/widgets/ReadableBrowser.cpp index 478a2fa..0cf3d63 100644 --- a/src/modules/interface/qt/widgets/ReadableBrowser.cpp +++ b/src/modules/interface/qt/widgets/ReadableBrowser.cpp @@ -1,5 +1,6 @@ #include "ReadableBrowser.h" +#include #include ReadableBrowser::ReadableBrowser(ReadableManager *readableManager, QWidget *parent) : QWidget(parent) { @@ -30,32 +31,54 @@ void ReadableBrowser::genBrowserTree(QTreeView *treeView, QStandardItemModel *it if (node->name) { qDebug() << node->name; } - addBrowserItem(node, item); + QStandardItem *newItem = addBrowserItem(node, item); + + if (!node->constant && node->value_callback) { + tc_readable_result_t res = node->value_callback(node); + qDebug() << res.valid << res.data.uint_value; + } for (uint16_t i = 0; i < node->children_count; i++) { - traverse(node->children_nodes[i], item); + traverse(node->children_nodes[i], newItem); } }; //tc_readable_node_t *root = m_readableManager->root(); QVector rootNodes = m_readableManager->rootNodes(); for (tc_readable_node_t *node : m_readableManager->rootNodes()) { - traverse(node, parentItem); + // Start traversal from the first subitems of the root item + for (uint16_t i = 0; i < node->children_count; i++) { + traverse(node->children_nodes[i], parentItem); + } } treeView->setModel(itemModel); + + treeView->setDragEnabled(true); } -void ReadableBrowser::addBrowserItem(tc_readable_node_t* node, QStandardItem *parent) { +QStandardItem *ReadableBrowser::addBrowserItem(tc_readable_node_t* node, QStandardItem *parent) { // Don't add item for constants if (node->constant) { - return; + return nullptr; } if (!node->name) { - return; + return nullptr; } QStandardItem *item = new QStandardItem; item->setText(node->name); + item->setDragEnabled(true); + parent->appendRow(item); + + return item; +} + +void ReadableBrowser::mousePressEvent(QMouseEvent *event) { + /*if (event->button() == Qt::LeftButton) { + QDrag *drag = new QDrag(this); + Qt::DropAction dropAction = drag->exec(Qt::MoveAction); + qDebug() << drag->mimeData(); + }*/ } diff --git a/src/modules/interface/qt/widgets/ReadableBrowser.h b/src/modules/interface/qt/widgets/ReadableBrowser.h index fd6e3b4..50a023c 100644 --- a/src/modules/interface/qt/widgets/ReadableBrowser.h +++ b/src/modules/interface/qt/widgets/ReadableBrowser.h @@ -3,14 +3,19 @@ #include #include +#include +#include #include #include #include class ReadableBrowser : public QWidget { + Q_OBJECT public: ReadableBrowser(ReadableManager *readableManager, QWidget *parent = nullptr); ~ReadableBrowser(); +signals: + void itemDragStarted(QString &text); private: ReadableManager *m_readableManager; // ReadableManager instance that the browser is generated from @@ -19,5 +24,7 @@ private: QStandardItemModel *m_browserModel; void genBrowserTree(QTreeView *treeView, QStandardItemModel *itemModel); - void addBrowserItem(tc_readable_node_t* node, QStandardItem *parent); // Create a new item from 'node' + QStandardItem *addBrowserItem(tc_readable_node_t* node, QStandardItem *parent); // Return a newly created item that is a child of 'parent' + + void mousePressEvent(QMouseEvent *event); // Start the drag event for an item }; diff --git a/src/modules/interface/qt/widgets/ReadableWidget.cpp b/src/modules/interface/qt/widgets/ReadableWidget.cpp index 5d643d8..bcdd313 100644 --- a/src/modules/interface/qt/widgets/ReadableWidget.cpp +++ b/src/modules/interface/qt/widgets/ReadableWidget.cpp @@ -13,7 +13,10 @@ ReadableWidget::ReadableWidget(QWidget *parent) : QWidget(parent) { m_readableBrowser = new ReadableBrowser(m_readableManager); + m_readableDisplay = new ReadableDisplay; + m_tabWidget->addTab(m_readableBrowser, "Browser"); + m_tabWidget->addTab(m_readableDisplay, "Display"); m_mainLayout->addWidget(m_tabWidget); diff --git a/src/modules/interface/qt/widgets/ReadableWidget.h b/src/modules/interface/qt/widgets/ReadableWidget.h index c495680..b907b53 100644 --- a/src/modules/interface/qt/widgets/ReadableWidget.h +++ b/src/modules/interface/qt/widgets/ReadableWidget.h @@ -5,6 +5,7 @@ #include #include "ReadableBrowser.h" +#include "ReadableDisplay.h" #include class ReadableWidget : public QWidget { @@ -20,4 +21,5 @@ private: QVBoxLayout *m_mainLayout; ReadableManager *m_readableManager; + ReadableDisplay *m_readableDisplay; };