mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2148 AppFwk : Move creation of QModelIndex after insertion of new items
This commit is contained in:
parent
9cbd0973dc
commit
c1f8487666
@ -197,14 +197,14 @@ void PdmUiTreeViewModel::updateSubTree(PdmUiItem* pdmRoot)
|
|||||||
class RecursiveUpdateData
|
class RecursiveUpdateData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RecursiveUpdateData(QModelIndex mi, PdmUiTreeOrdering* existingChild, PdmUiTreeOrdering* sourceChild)
|
RecursiveUpdateData(int row, PdmUiTreeOrdering* existingChild, PdmUiTreeOrdering* sourceChild)
|
||||||
: m_modelIndex(mi),
|
: m_row(row),
|
||||||
m_existingChild(existingChild),
|
m_existingChild(existingChild),
|
||||||
m_sourceChild(sourceChild)
|
m_sourceChild(sourceChild)
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
QModelIndex m_modelIndex;
|
int m_row;
|
||||||
PdmUiTreeOrdering* m_existingChild;
|
PdmUiTreeOrdering* m_existingChild;
|
||||||
PdmUiTreeOrdering* m_sourceChild;
|
PdmUiTreeOrdering* m_sourceChild;
|
||||||
};
|
};
|
||||||
@ -214,7 +214,9 @@ public:
|
|||||||
/// calling begin..() end..() to make the UI update accordingly.
|
/// calling begin..() end..() to make the UI update accordingly.
|
||||||
/// This assumes that all the items have a pointer an unique PdmObject
|
/// This assumes that all the items have a pointer an unique PdmObject
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void PdmUiTreeViewModel::updateSubTreeRecursive(const QModelIndex& existingSubTreeRootModIdx, PdmUiTreeOrdering* existingSubTreeRoot, PdmUiTreeOrdering* sourceSubTreeRoot)
|
void PdmUiTreeViewModel::updateSubTreeRecursive(const QModelIndex& existingSubTreeRootModIdx,
|
||||||
|
PdmUiTreeOrdering* existingSubTreeRoot,
|
||||||
|
PdmUiTreeOrdering* sourceSubTreeRoot)
|
||||||
{
|
{
|
||||||
// Build map for source items
|
// Build map for source items
|
||||||
std::map<caf::PdmUiItem*, int> sourceTreeMap;
|
std::map<caf::PdmUiItem*, int> sourceTreeMap;
|
||||||
@ -309,13 +311,10 @@ void PdmUiTreeViewModel::updateSubTreeRecursive(const QModelIndex& existingSubTr
|
|||||||
{
|
{
|
||||||
newMergedOrdering.push_back(existingSubTreeRoot->child(it->second));
|
newMergedOrdering.push_back(existingSubTreeRoot->child(it->second));
|
||||||
|
|
||||||
QModelIndex mi = index(static_cast<int>(newMergedOrdering.size() - 1), 0, existingSubTreeRootModIdx);
|
int rowIndexToBeUpdated = static_cast<int>(newMergedOrdering.size() - 1);
|
||||||
if (mi.isValid())
|
recursiveUpdateData.push_back(RecursiveUpdateData(rowIndexToBeUpdated,
|
||||||
{
|
existingSubTreeRoot->child(it->second),
|
||||||
// Do not insert an invalid index, as this causes flickering and reset of project tree expanded state
|
sourceChild));
|
||||||
|
|
||||||
recursiveUpdateData.push_back(RecursiveUpdateData(mi, existingSubTreeRoot->child(it->second), sourceChild));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -361,7 +360,12 @@ void PdmUiTreeViewModel::updateSubTreeRecursive(const QModelIndex& existingSubTr
|
|||||||
|
|
||||||
for (size_t i = 0; i < recursiveUpdateData.size(); i++)
|
for (size_t i = 0; i < recursiveUpdateData.size(); i++)
|
||||||
{
|
{
|
||||||
updateSubTreeRecursive(recursiveUpdateData[i].m_modelIndex, recursiveUpdateData[i].m_existingChild, recursiveUpdateData[i].m_sourceChild);
|
// Using the index() function here is OK, as new items has been inserted in the previous for-loop
|
||||||
|
// This code used to be executed before insertion of new items, and caused creation of invalid indices
|
||||||
|
QModelIndex mi = index(recursiveUpdateData[i].m_row, 0, existingSubTreeRootModIdx);
|
||||||
|
CAF_ASSERT(mi.isValid());
|
||||||
|
|
||||||
|
updateSubTreeRecursive(mi, recursiveUpdateData[i].m_existingChild, recursiveUpdateData[i].m_sourceChild);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user