#4744 AppFwk : Auto scroll to first checked item

This commit is contained in:
Magne Sjaastad 2019-09-20 14:18:52 +02:00
parent f7b53aa666
commit daf4132dec
2 changed files with 50 additions and 0 deletions

View File

@ -52,6 +52,7 @@
#include <QPalette>
#include <QSortFilterProxyModel>
#include <QStyleOption>
#include <QTimer>
#include <QTreeView>
#include <algorithm>
@ -374,6 +375,10 @@ void PdmUiTreeSelectionEditor::configureAndUpdateUi(const QString& uiConfigName)
}
}
}
// It is required to use a timer here, as the layout of the widgets are handled by events
// Calling scrollTo() here has no effect, or scrolls to wrong location
QTimer::singleShot(150, this, SLOT(slotScrollToFirstCheckedItem()));
}
//--------------------------------------------------------------------------------------------------
@ -647,6 +652,49 @@ void PdmUiTreeSelectionEditor::slotClicked(const QModelIndex& index)
currentChanged(index);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiTreeSelectionEditor::slotScrollToFirstCheckedItem()
{
auto firstVisibleIndex = m_treeView->indexAt(m_treeView->viewport()->rect().topLeft());
auto lastVisibleIndex = m_treeView->indexAt(m_treeView->viewport()->rect().bottomRight());
if (!firstVisibleIndex.isValid())
{
return;
}
if (!lastVisibleIndex.isValid())
{
return;
}
for (int i = firstVisibleIndex.row(); i < lastVisibleIndex.row(); i++)
{
auto treeViewIndex = m_proxyModel->index(i, 0);
if (m_proxyModel->data(treeViewIndex, Qt::CheckStateRole).toBool())
{
// Do nothing if there is a checked and visible item in the view
return;
}
}
for (int i = 0; i < m_proxyModel->rowCount(); i++)
{
auto treeViewIndex = m_proxyModel->index(i, 0);
if (m_proxyModel->data(treeViewIndex, Qt::CheckStateRole).toBool())
{
// Scroll to the first checked item if no checked items are visible
m_treeView->scrollTo(treeViewIndex);
return;
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -115,6 +115,8 @@ private slots:
void slotClicked(const QModelIndex& index);
void slotScrollToFirstCheckedItem();
private:
void currentChanged(const QModelIndex& current);