mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
TP #4177: Context Toggle commands now toggles children if one parent is selected.
THe command names are renamed as well, to make it more clear what is going on. p4#: 22360
This commit is contained in:
parent
4f70139dd4
commit
dbeabc3240
@ -1002,9 +1002,6 @@ RimCase* RimUiTreeModelPdm::caseFromItemIndex(const QModelIndex& itemIndex)
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// 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)
|
||||
{
|
||||
@ -1025,36 +1022,44 @@ void RimUiTreeModelPdm::setObjectToggleStateForSelection(QModelIndexList selecte
|
||||
caf::PdmObject* obj = treeItem->dataObject();
|
||||
assert(obj);
|
||||
|
||||
if (obj && obj->objectToggleField())
|
||||
if (selectedIndexes.size() != 1)
|
||||
{
|
||||
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>* >(obj->objectToggleField());
|
||||
if (field)
|
||||
if (obj && obj->objectToggleField())
|
||||
{
|
||||
// Does not use setValueFromUi(), so the caller must make sure dependencies are updated
|
||||
if (state == RimUiTreeView::TOGGLE_ON) field->setValueFromUi(true);
|
||||
if (state == RimUiTreeView::TOGGLE_OFF) field->setValueFromUi(false);
|
||||
if (state == RimUiTreeView::TOGGLE) field->setValueFromUi(!(field->v()));
|
||||
|
||||
//emitDataChanged(index);
|
||||
//field->updateConnectedEditors();
|
||||
|
||||
/* caf::PdmObject* ownerObj = field->ownerObject();
|
||||
|
||||
RimReservoirView* resView = dynamic_cast<RimReservoirView*>(ownerObj);
|
||||
if(resView) resViewsToUpdate.insert(resView);
|
||||
else if (ownerObj)
|
||||
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>* >(obj->objectToggleField());
|
||||
if (field)
|
||||
{
|
||||
ownerObj->firstAncestorOfType(resView);
|
||||
if (resView) resViewsToUpdate.insert(resView);
|
||||
}*/
|
||||
if (state == RimUiTreeView::TOGGLE_ON) field->setValueFromUi(true);
|
||||
if (state == RimUiTreeView::TOGGLE_OFF) field->setValueFromUi(false);
|
||||
if (state == RimUiTreeView::TOGGLE) field->setValueFromUi(!(field->v()));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// If only one item is selected, loop over its children, and toggle them instead of the
|
||||
// selected item directly
|
||||
|
||||
for (int cIdx = 0; cIdx < treeItem->childCount(); ++ cIdx)
|
||||
{
|
||||
caf::PdmUiTreeItem* child = treeItem->child(cIdx);
|
||||
if (!child) continue;
|
||||
|
||||
caf::PdmObject* childObj = child->dataObject();
|
||||
|
||||
if (childObj && childObj->objectToggleField())
|
||||
{
|
||||
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>* >(childObj->objectToggleField());
|
||||
if (field)
|
||||
{
|
||||
if (state == RimUiTreeView::TOGGLE_ON) field->setValueFromUi(true);
|
||||
if (state == RimUiTreeView::TOGGLE_OFF) field->setValueFromUi(false);
|
||||
if (state == RimUiTreeView::TOGGLE) field->setValueFromUi(!(field->v()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* for (std::set<RimReservoirView*>::iterator it = resViewsToUpdate.begin(); it != resViewsToUpdate.end(); ++it)
|
||||
{
|
||||
(*it)->createDisplayModelAndRedraw();
|
||||
}*/
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -1480,9 +1480,23 @@ void RimUiTreeView::appendToggleItemActions(QMenu& contextMenu)
|
||||
contextMenu.addSeparator();
|
||||
}
|
||||
|
||||
contextMenu.addAction(QString("Toggle"), this, SLOT(slotToggleItems()));
|
||||
contextMenu.addAction(QString("Toggle All On"), this, SLOT(slotToggleItemsOn()));
|
||||
contextMenu.addAction(QString("Toggle All Off"), this, SLOT(slotToggleItemsOff()));
|
||||
if (selectionModel()->selectedIndexes().size() > 1)
|
||||
{
|
||||
contextMenu.addAction(QString("On"), this, SLOT(slotToggleItemsOn()));
|
||||
contextMenu.addAction(QString("Off"), this, SLOT(slotToggleItemsOff()));
|
||||
contextMenu.addAction(QString("Toggle"), this, SLOT(slotToggleItems()));
|
||||
}
|
||||
else
|
||||
{
|
||||
QModelIndex mIdx = selectionModel()->selectedIndexes()[0];
|
||||
caf::PdmUiTreeItem* treeItem = caf::UiTreeModelPdm::getTreeItemFromIndex(mIdx);
|
||||
if (treeItem && treeItem->childCount())
|
||||
{
|
||||
contextMenu.addAction(QString("Sub Items On"), this, SLOT(slotToggleItemsOn()));
|
||||
contextMenu.addAction(QString("Sub Items Off"), this, SLOT(slotToggleItemsOff()));
|
||||
contextMenu.addAction(QString("Toggle Sub items"), this, SLOT(slotToggleItems()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1499,72 +1513,11 @@ void RimUiTreeView::slotToggleItems()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimUiTreeView::executeSelectionToggleOperation(SelectionToggleType toggleState)
|
||||
{
|
||||
/*
|
||||
int nextCheckBoxState = 0;
|
||||
|
||||
if (toggleState == TOGGLE_ON)
|
||||
{
|
||||
nextCheckBoxState = Qt::Checked;
|
||||
}
|
||||
else if (toggleState == TOGGLE_OFF)
|
||||
{
|
||||
nextCheckBoxState = Qt::Unchecked;
|
||||
}
|
||||
else if (toggleState == TOGGLE)
|
||||
{
|
||||
QModelIndex curr = currentIndex();
|
||||
|
||||
// Check if the current model index supports checkable items
|
||||
if (model()->flags(curr) & Qt::ItemIsUserCheckable)
|
||||
{
|
||||
QModelIndexList selectedIndexes = selectionModel()->selectedIndexes();
|
||||
if (selectedIndexes.contains(curr))
|
||||
{
|
||||
QVariant currentState = model()->data(curr, Qt::CheckStateRole);
|
||||
int state = currentState.toInt();
|
||||
if (state == Qt::Checked)
|
||||
{
|
||||
nextCheckBoxState = Qt::Unchecked;
|
||||
}
|
||||
else
|
||||
{
|
||||
nextCheckBoxState = Qt::Checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
|
||||
// caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex());
|
||||
|
||||
// Special handling for wells
|
||||
// Set toggle state for all wells without triggering model update,
|
||||
// and perform a single display model update at last
|
||||
//RimWell* well = dynamic_cast<RimWell*>(uiItem->dataObject().p());
|
||||
//if (well)
|
||||
{
|
||||
myModel->setObjectToggleStateForSelection(selectionModel()->selectedIndexes(), toggleState);
|
||||
myModel->setObjectToggleStateForSelection(selectionModel()->selectedIndexes(), toggleState);
|
||||
|
||||
//RimReservoirView* reservoirView = NULL;
|
||||
//well->firstAncestorOfType(reservoirView);
|
||||
//if (reservoirView)
|
||||
//{
|
||||
// reservoirView->createDisplayModelAndRedraw();
|
||||
//}
|
||||
|
||||
return;
|
||||
}
|
||||
/*
|
||||
foreach (QModelIndex index, selectionModel()->selectedIndexes())
|
||||
{
|
||||
if (!index.isValid())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
myModel->setData(index, nextCheckBoxState, Qt::CheckStateRole);
|
||||
}
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user