Tree view Toggle Cmmands: Reimplemented to use PDM. Fixed missing update.

p4#: 22342
This commit is contained in:
Jacob Støren 2013-09-07 10:18:28 +02:00
parent 55337bd1b1
commit c3c50ae62e
3 changed files with 38 additions and 15 deletions

View File

@ -55,6 +55,7 @@
#include "RimWellPathCollection.h" #include "RimWellPathCollection.h"
#include "RimOilField.h" #include "RimOilField.h"
#include "RimAnalysisModels.h" #include "RimAnalysisModels.h"
#include "RimUiTreeView.h"
@ -1009,6 +1010,8 @@ void RimUiTreeModelPdm::setObjectToggleStateForSelection(QModelIndexList selecte
{ {
bool toggleOn = (state == Qt::Checked); bool toggleOn = (state == Qt::Checked);
std::set<RimReservoirView*> resViewsToUpdate;
foreach (QModelIndex index, selectedIndexes) foreach (QModelIndex index, selectedIndexes)
{ {
if (!index.isValid()) if (!index.isValid())
@ -1028,11 +1031,29 @@ void RimUiTreeModelPdm::setObjectToggleStateForSelection(QModelIndexList selecte
if (field) if (field)
{ {
// Does not use setValueFromUi(), so the caller must make sure dependencies are updated // Does not use setValueFromUi(), so the caller must make sure dependencies are updated
field->v() = toggleOn; 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); //emitDataChanged(index);
//field->updateConnectedEditors();
/* caf::PdmObject* ownerObj = field->ownerObject();
RimReservoirView* resView = dynamic_cast<RimReservoirView*>(ownerObj);
if(resView) resViewsToUpdate.insert(resView);
else if (ownerObj)
{
ownerObj->firstAncestorOfType(resView);
if (resView) resViewsToUpdate.insert(resView);
}*/
} }
} }
} }
/* for (std::set<RimReservoirView*>::iterator it = resViewsToUpdate.begin(); it != resViewsToUpdate.end(); ++it)
{
(*it)->createDisplayModelAndRedraw();
}*/
} }

View File

@ -1495,6 +1495,7 @@ void RimUiTreeView::slotToggleItems()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimUiTreeView::executeSelectionToggleOperation(SelectionToggleType toggleState) void RimUiTreeView::executeSelectionToggleOperation(SelectionToggleType toggleState)
{ {
/*
int nextCheckBoxState = 0; int nextCheckBoxState = 0;
if (toggleState == TOGGLE_ON) if (toggleState == TOGGLE_ON)
@ -1528,28 +1529,28 @@ void RimUiTreeView::executeSelectionToggleOperation(SelectionToggleType toggleSt
} }
} }
} }
*/
RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model()); RimUiTreeModelPdm* myModel = dynamic_cast<RimUiTreeModelPdm*>(model());
caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex()); // caf::PdmUiTreeItem* uiItem = myModel->getTreeItemFromIndex(currentIndex());
// Special handling for wells // Special handling for wells
// Set toggle state for all wells without triggering model update, // Set toggle state for all wells without triggering model update,
// and perform a single display model update at last // and perform a single display model update at last
RimWell* well = dynamic_cast<RimWell*>(uiItem->dataObject().p()); //RimWell* well = dynamic_cast<RimWell*>(uiItem->dataObject().p());
if (well) //if (well)
{ {
myModel->setObjectToggleStateForSelection(selectionModel()->selectedIndexes(), nextCheckBoxState); myModel->setObjectToggleStateForSelection(selectionModel()->selectedIndexes(), toggleState);
RimReservoirView* reservoirView = NULL; //RimReservoirView* reservoirView = NULL;
well->firstAncestorOfType(reservoirView); //well->firstAncestorOfType(reservoirView);
if (reservoirView) //if (reservoirView)
{ //{
reservoirView->createDisplayModelAndRedraw(); // reservoirView->createDisplayModelAndRedraw();
} //}
return; return;
} }
/*
foreach (QModelIndex index, selectionModel()->selectedIndexes()) foreach (QModelIndex index, selectionModel()->selectedIndexes())
{ {
if (!index.isValid()) if (!index.isValid())
@ -1559,6 +1560,7 @@ void RimUiTreeView::executeSelectionToggleOperation(SelectionToggleType toggleSt
myModel->setData(index, nextCheckBoxState, Qt::CheckStateRole); myModel->setData(index, nextCheckBoxState, Qt::CheckStateRole);
} }
*/
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -104,7 +104,7 @@ private slots:
signals: signals:
void selectedObjectChanged( caf::PdmObject* pdmObject ); void selectedObjectChanged( caf::PdmObject* pdmObject );
private: public:
enum SelectionToggleType enum SelectionToggleType
{ {
TOGGLE_ON, TOGGLE_ON,