starting udate geant sloid
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user