From 2505ebb9a3c407b4c54963aa1af241d2674e5eb2 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 25 Sep 2022 10:53:23 +0200 Subject: [PATCH] WIP: some debugging --- .../net_tracer/db_plugin/dbNetTracerIO.h | 2 +- .../NetTracerTechComponentEditor.ui | 3 + .../layNetTracerTechComponentEditor.cc | 113 ++++++++++++++---- 3 files changed, 91 insertions(+), 27 deletions(-) diff --git a/src/plugins/tools/net_tracer/db_plugin/dbNetTracerIO.h b/src/plugins/tools/net_tracer/db_plugin/dbNetTracerIO.h index 82dedb2c1..422584323 100644 --- a/src/plugins/tools/net_tracer/db_plugin/dbNetTracerIO.h +++ b/src/plugins/tools/net_tracer/db_plugin/dbNetTracerIO.h @@ -534,7 +534,7 @@ public: iterator end () { - return m_connectivity.begin (); + return m_connectivity.end (); } db::NetTracerTechnologyComponent *clone () const diff --git a/src/plugins/tools/net_tracer/lay_plugin/NetTracerTechComponentEditor.ui b/src/plugins/tools/net_tracer/lay_plugin/NetTracerTechComponentEditor.ui index 8ee37634a..825513c9f 100644 --- a/src/plugins/tools/net_tracer/lay_plugin/NetTracerTechComponentEditor.ui +++ b/src/plugins/tools/net_tracer/lay_plugin/NetTracerTechComponentEditor.ui @@ -105,6 +105,9 @@ 1 + + false + Name diff --git a/src/plugins/tools/net_tracer/lay_plugin/layNetTracerTechComponentEditor.cc b/src/plugins/tools/net_tracer/lay_plugin/layNetTracerTechComponentEditor.cc index 3d8293d78..cfe49d8d4 100644 --- a/src/plugins/tools/net_tracer/lay_plugin/layNetTracerTechComponentEditor.cc +++ b/src/plugins/tools/net_tracer/lay_plugin/layNetTracerTechComponentEditor.cc @@ -49,7 +49,83 @@ namespace lay { -// @@@ TODO: edit on double-click +// ----------------------------------------------------------------------------------------- +// NetTracerTechComponentColumnDelegate definition and implementation + +class NetTracerTechComponentColumnDelegate + : public QItemDelegate +{ +public: + NetTracerTechComponentColumnDelegate (QWidget *parent, db::NetTracerTechnologyComponent *data) + : QItemDelegate (parent), mp_data (data) + { + // .. nothing yet .. + } + + QWidget *createEditor (QWidget *parent, const QStyleOptionViewItem & /*option*/, const QModelIndex & /*index*/) const + { + return new QLineEdit (parent); + } + + void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex & /*index*/) const + { + editor->setGeometry(option.rect); + } + + void setEditorData (QWidget *widget, const QModelIndex &index) const + { + QLineEdit *editor = dynamic_cast (widget); + if (editor) { + int n = index.model ()->data (index, Qt::UserRole).toInt (); + if (mp_data->size () > size_t (n)) { + if (index.column () == 0) { + std::string name = mp_data->begin () [n].name (); + editor->setText (tl::to_qstring (name)); + editor->setPlaceholderText (tr ("(default)")); + } else if (index.column () == 1) { + editor->setText (tl::to_qstring (mp_data->begin () [n].description ())); + } + } + } + } + + void setModelData (QWidget *widget, QAbstractItemModel *model, const QModelIndex &index) const + { + QLineEdit *editor = dynamic_cast (widget); + if (editor) { + + int n = model->data (index, Qt::UserRole).toInt (); + if (mp_data->size () > size_t (n)) { + + std::string text = tl::to_string (editor->text ()); + if (index.column () == 0 && text.empty ()) { + model->setData (index, QVariant (tr ("(default)")), Qt::DisplayRole); + } else { + model->setData (index, QVariant (tl::to_qstring (text)), Qt::DisplayRole); + } + + if (index.column () == 0) { + mp_data->begin () [n].set_name (text); + } else if (index.column () == 1) { + mp_data->begin () [n].set_description (text); + } + + } + + } + } + + QSize sizeHint (const QStyleOptionViewItem &option, const QModelIndex &index) const + { + QWidget *editor = createEditor (0, option, index); + QSize size = editor->sizeHint (); + delete editor; + return size - QSize (2, 2); + } + +private: + db::NetTracerTechnologyComponent *mp_data; +}; // ----------------------------------------------------------------------------------- // NetTracerTechComponentEditor implementation @@ -68,7 +144,6 @@ NetTracerTechComponentEditor::NetTracerTechComponentEditor (QWidget *parent) stack_tree->header ()->setStretchLastSection (true); connect (stack_tree, SIGNAL (currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT (current_item_changed(QTreeWidgetItem *, QTreeWidgetItem *))); - connect (stack_tree, SIGNAL (itemChanged(QTreeWidgetItem *, int)), this, SLOT (item_changed(QTreeWidgetItem *, int))); } void @@ -96,27 +171,10 @@ NetTracerTechComponentEditor::setup () m_data.push_back (db::NetTracerConnectivity ()); } - update (); -} + stack_tree->setItemDelegateForColumn (0, new NetTracerTechComponentColumnDelegate (stack_tree, &m_data)); + stack_tree->setItemDelegateForColumn (1, new NetTracerTechComponentColumnDelegate (stack_tree, &m_data)); -void -NetTracerTechComponentEditor::item_changed (QTreeWidgetItem *item, int column) -{ - int row = stack_tree->indexOfTopLevelItem (item); - if (row >= 0 && row < int (m_data.size ())) { - if (column == 0) { - std::string n = tl::to_string (item->data (column, Qt::EditRole)); - m_data.begin ()[row].set_name (n); - if (n.empty ()) { - item->setData (column, Qt::DisplayRole, tr ("(default)")); - } else { - item->setData (column, Qt::DisplayRole, tl::to_qstring (n)); - } - } - if (column == 1) { - m_data.begin ()[row].set_description (tl::to_string (item->data (column, Qt::EditRole))); - } - } + update (); } void @@ -291,19 +349,22 @@ NetTracerTechComponentEditor::update () QTreeWidgetItem *item = new QTreeWidgetItem (stack_tree); item->setFlags (item->flags () | Qt::ItemIsEditable); - if (l->name ().empty ()) { + std::string name = l->name (); + if (name.empty ()) { item->setData (0, Qt::DisplayRole, QVariant (tr ("(default)"))); } else { - item->setData (0, Qt::DisplayRole, QVariant (tl::to_qstring (l->name ()))); + item->setData (0, Qt::DisplayRole, QVariant (tl::to_qstring (name))); } - item->setData (0, Qt::EditRole, QVariant (tl::to_qstring (l->name ()))); item->setData (1, Qt::DisplayRole, QVariant (tl::to_qstring (l->description ()))); item->setData (0, Qt::UserRole, QVariant (n)); } - current_item_changed (0, 0); + if (! stack_tree->currentItem () && stack_tree->topLevelItemCount () > 0) { + stack_tree->setCurrentItem (stack_tree->topLevelItem (0)); + } + current_item_changed (stack_tree->currentItem (), 0); } }