Added checkbox for wells in treeview

p4#: 21325
This commit is contained in:
Magne Sjaastad 2013-04-17 08:25:32 +02:00
parent acbe8d23ee
commit ec2754ce30
4 changed files with 67 additions and 14 deletions

View File

@ -123,3 +123,11 @@ void RimWell::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmFieldHandle* RimWell::objectToggleField()
{
return &showWellPipes;
}

View File

@ -45,6 +45,7 @@ public:
RigSingleWellResultsData* wellResults() { return m_wellResults.p(); }
virtual caf::PdmFieldHandle* userDescriptionField();
virtual caf::PdmFieldHandle* objectToggleField();
virtual void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue );

View File

@ -146,6 +146,10 @@ public:
// Virtual interface to override in subclasses to support special behaviour if needed
public: // Virtual
virtual PdmFieldHandle* userDescriptionField() { return NULL; }
/// Field used to toggle object on/off in UI-related uses of the object (ie checkbox in treeview)
virtual PdmFieldHandle* objectToggleField() { return NULL; }
/// Method to reimplement to catch when the field has changed due to setUiValue()
virtual void fieldChangedByUi(const PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) {}
/// Method to re-implement to supply option values for a specific field

View File

@ -231,6 +231,21 @@ QVariant UiTreeModelPdm::data(const QModelIndex &index, int role /*= Qt::Display
else
return obj->uiWhatsThis();
}
else if (role == Qt::CheckStateRole)
{
if (obj->objectToggleField())
{
bool isToggledOn = obj->objectToggleField()->uiValue().toBool();
if (isToggledOn)
{
return Qt::Checked;
}
else
{
return Qt::Unchecked;
}
}
}
return QVariant();
}
@ -248,22 +263,35 @@ void UiTreeModelPdm::emitDataChanged(const QModelIndex& index)
//--------------------------------------------------------------------------------------------------
bool UiTreeModelPdm::setData(const QModelIndex &index, const QVariant &value, int role /*= Qt::EditRole*/)
{
if (index.isValid() && role == Qt::EditRole)
if (!index.isValid())
{
PdmUiTreeItem* treeItem = UiTreeModelPdm::getTreeItemFromIndex(index);
assert(treeItem);
PdmObject* obj = treeItem->dataObject();
if (obj->userDescriptionField())
{
obj->userDescriptionField()->setValueFromUi(value);
}
return false;
}
PdmUiTreeItem* treeItem = UiTreeModelPdm::getTreeItemFromIndex(index);
assert(treeItem);
PdmObject* obj = treeItem->dataObject();
assert(obj);
if (role == Qt::EditRole && obj->userDescriptionField())
{
obj->userDescriptionField()->setValueFromUi(value);
emitDataChanged(index);
return true;
}
else if (role == Qt::CheckStateRole && obj->objectToggleField())
{
bool toggleOn = (value == Qt::Checked);
obj->objectToggleField()->setValueFromUi(toggleOn);
emitDataChanged(index);
return true;
}
return false;
}
@ -277,18 +305,30 @@ Qt::ItemFlags UiTreeModelPdm::flags(const QModelIndex &index) const
if (!index.isValid())
return Qt::ItemIsEnabled;
Qt::ItemFlags flagMask = QAbstractItemModel::flags(index);
PdmUiTreeItem* treeItem = getTreeItemFromIndex(index);
if (treeItem)
{
PdmObject* pdmObject = treeItem->dataObject();
if (pdmObject && pdmObject->userDescriptionField() && !pdmObject->userDescriptionField()->isUiReadOnly())
if (pdmObject)
{
Qt::ItemFlags flagMask = QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
return flagMask;
if (pdmObject->userDescriptionField() && !pdmObject->userDescriptionField()->isUiReadOnly())
{
flagMask = flagMask | Qt::ItemIsEditable;
}
if (pdmObject->objectToggleField())
{
flagMask = flagMask | Qt::ItemIsUserCheckable;
}
}
}
else
{
flagMask = flagMask & (~Qt::ItemIsEditable);
}
Qt::ItemFlags flagMask = QAbstractItemModel::flags(index) & (~Qt::ItemIsEditable);
return flagMask;
}