Call display update once after setting toggle state for a selection of wells

p4#: 21417
This commit is contained in:
Magne Sjaastad 2013-04-25 08:47:01 +02:00
parent 6cd54f0caf
commit c0bfc9bbe1
3 changed files with 51 additions and 3 deletions

View File

@ -965,3 +965,40 @@ RimCase* RimUiTreeModelPdm::caseFromItemIndex(const QModelIndex& itemIndex)
return rimCase;
}
//--------------------------------------------------------------------------------------------------
/// Set toggle state for list of model indices.
///
/// NOTE: Set toggle state directly on object, does not use setValueFromUi()
/// The caller must make sure the relevant dependencies are updated
//--------------------------------------------------------------------------------------------------
void RimUiTreeModelPdm::setObjectToggleStateForSelection(QModelIndexList selectedIndexes, int state)
{
bool toggleOn = (state == Qt::Checked);
foreach (QModelIndex index, selectedIndexes)
{
if (!index.isValid())
{
continue;
}
caf::PdmUiTreeItem* treeItem = UiTreeModelPdm::getTreeItemFromIndex(index);
assert(treeItem);
caf::PdmObject* obj = treeItem->dataObject();
assert(obj);
if (obj && obj->objectToggleField())
{
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>* >(obj->objectToggleField());
if (field)
{
// Does not use setValueFromUi(), so the caller must make sure dependencies are updated
field->v() = toggleOn;
emitDataChanged(index);
}
}
}
}

View File

@ -80,6 +80,7 @@ public:
virtual QStringList mimeTypes() const;
RimIdenticalGridCaseGroup* gridCaseGroupFromItemIndex(const QModelIndex& itemIndex);
void setObjectToggleStateForSelection(QModelIndexList selectedIndexes, int state);
private slots:
void slotRefreshScriptTree(QString path);
@ -87,7 +88,6 @@ private slots:
private:
void clearClipboard();
RimCase* caseFromItemIndex(const QModelIndex& itemIndex);
private:
QFileSystemWatcher* m_scriptChangeDetector;
};

View File

@ -1177,9 +1177,20 @@ bool RimUiTreeView::checkAndHandleToggleOfMultipleSelection()
state = Qt::Checked;
}
foreach (QModelIndex mi, selectedIndexes)
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
myModel->setObjectToggleStateForSelection(selectedIndexes, state);
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(curr);
RimWell* well = dynamic_cast<RimWell*>(uiItem->dataObject().p());
if (well)
{
model()->setData(mi, state, Qt::CheckStateRole);
RimReservoirView* reservoirView = NULL;
well->firstAncestorOfType(reservoirView);
if (reservoirView)
{
reservoirView->createDisplayModelAndRedraw();
}
}
return true;