Files
ResInsight/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiFieldHandle.cpp

149 lines
5.4 KiB
C++
Raw Normal View History

#include "cafPdmUiFieldHandle.h"
#include "cafAssert.h"
#include "cafPdmFieldHandle.h"
2017-04-19 22:25:31 +02:00
#include "cafPdmUiModelChangeDetector.h"
#include "cafPdmUiObjectHandle.h"
#include "cafPdmUiEditorHandle.h"
namespace caf
{
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmUiFieldHandle::PdmUiFieldHandle(PdmFieldHandle* owner, bool giveOwnership)
: m_isAutoAddingOptionFromValue(true)
{
m_owner = owner;
owner->addCapability(this, giveOwnership);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
PdmUiFieldHandle::~PdmUiFieldHandle() {}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmFieldHandle* PdmUiFieldHandle::fieldHandle()
{
return m_owner;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QVariant PdmUiFieldHandle::uiValue() const
{
return QVariant();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> PdmUiFieldHandle::valueOptions(bool* useOptionsOnly) const
{
return QList<PdmOptionItemInfo>();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiFieldHandle::notifyFieldChanged(const QVariant& oldFieldValue, const QVariant& newFieldValue)
{
if (!this->isQVariantDataEqual( oldFieldValue, newFieldValue))
{
PdmFieldHandle* fieldHandle = this->fieldHandle();
CAF_ASSERT(fieldHandle && fieldHandle->ownerObject());
PdmObjectHandle* ownerObjectHandle = fieldHandle->ownerObject();
{
bool noOwnerObject = true;
// Object editors
PdmUiObjectHandle* uiObjHandle = uiObj(ownerObjectHandle);
if (uiObjHandle)
{
uiObjHandle->fieldChangedByUi(fieldHandle, oldFieldValue, newFieldValue);
uiObjHandle->updateConnectedEditors();
noOwnerObject = false;
}
// Field editors
for (const auto& editorForThisField : m_editors)
{
PdmUiEditorHandle* editorContainingThisField = editorForThisField->topMostContainingEditor();
bool editorContainingThisFieldIsNotUpdated = !uiObjHandle->hasEditor(editorContainingThisField);
if (noOwnerObject || editorContainingThisFieldIsNotUpdated)
{
editorContainingThisField->updateUi();
}
}
}
if (ownerObjectHandle->parentField() && ownerObjectHandle->parentField()->ownerObject())
{
PdmUiObjectHandle* uiObjHandle = uiObj(ownerObjectHandle->parentField()->ownerObject());
if (uiObjHandle)
{
uiObjHandle->childFieldChangedByUi(ownerObjectHandle->parentField());
// If updateConnectedEditors() is required, this has to be called in childFieldChangedByUi()
}
}
PdmUiModelChangeDetector::instance()->setModelChanged();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmUiFieldHandle::isAutoAddingOptionFromValue() const
{
return m_isAutoAddingOptionFromValue;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiFieldHandle::setAutoAddingOptionFromValue(bool isAddingValue)
{
m_isAutoAddingOptionFromValue = isAddingValue;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiFieldHandle::setValueFromUiEditor(const QVariant& uiValue) {}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool PdmUiFieldHandle::isQVariantDataEqual(const QVariant& oldUiBasedQVariant, const QVariant& newUiBasedQVariant) const
{
CAF_ASSERT(false);
return false;
}
//--------------------------------------------------------------------------------------------------
/// Implementation of uiCapability() defined in cafPdmFieldHandle.h
//--------------------------------------------------------------------------------------------------
PdmUiFieldHandle* PdmFieldHandle::uiCapability()
{
PdmUiFieldHandle* uiField = capability<PdmUiFieldHandle>();
CAF_ASSERT(uiField);
return uiField;
}
} // End of namespace caf