starting udate geant sloid

This commit is contained in:
AndreaRigoni
2026-04-16 11:07:06 +00:00
parent 83af9a180f
commit 987d783fdb
10 changed files with 220 additions and 132 deletions

View File

@@ -10,6 +10,7 @@
#include <QList>
#include <QShortcut>
#include <QItemSelectionModel>
#include <functional>
ContextPanel::ContextPanel(QWidget* parent)
: QWidget(parent)
@@ -105,15 +106,34 @@ void ContextPanel::selectObject(uLib::Object* obj) {
return;
}
for (int i = 0; i < m_model->rowCount(); ++i) {
QModelIndex idx = m_model->index(i, 0);
if (idx.internalPointer() == obj) {
QSignalBlocker blocker(m_treeView->selectionModel());
m_treeView->selectionModel()->select(idx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
m_treeView->scrollTo(idx);
m_propertiesPanel->setObject(obj); // Explicitly update properties too
return;
// Recursive search helper
std::function<QModelIndex(const QModelIndex&)> findIdx = [&](const QModelIndex& parent) -> QModelIndex {
for (int i = 0; i < m_model->rowCount(parent); ++i) {
QModelIndex idx = m_model->index(i, 0, parent);
if (idx.internalPointer() == obj) return idx;
if (m_model->rowCount(idx) > 0) {
QModelIndex childIdx = findIdx(idx);
if (childIdx.isValid()) return childIdx;
}
}
return QModelIndex();
};
QModelIndex targetIdx = findIdx(QModelIndex());
if (targetIdx.isValid()) {
QSignalBlocker blocker(m_treeView->selectionModel());
// Expand parents so the selection is visible
QModelIndex p = targetIdx.parent();
while (p.isValid()) {
m_treeView->expand(p);
p = p.parent();
}
m_treeView->selectionModel()->select(targetIdx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
m_treeView->scrollTo(targetIdx);
m_propertiesPanel->setObject(obj);
}
}