#922 AppFwk : Introduced PdmUiFieldHandleInterface and made setValueFromUiEditor private

This commit is contained in:
Magne Sjaastad 2016-10-20 11:31:11 +02:00
parent 1106bd4381
commit 454805b9de
9 changed files with 48 additions and 19 deletions

View File

@ -97,13 +97,17 @@ void CmdFieldChangeExec::redo()
{
if (m_commandData->m_redoFieldValueSerialized.isEmpty())
{
// We end up here only when the user actually has done something in the actual living Gui editor.
{
QXmlStreamWriter xmlStream(&m_commandData->m_undoFieldValueSerialized);
writeFieldDataToValidXmlDocument(xmlStream, xmlFieldHandle);
}
// This function will notify field change, no need to explicitly call notification
uiFieldHandle->setValueFromUi(m_commandData->m_newUiValue);
// The ui value might be an index into the option entry cache, so we need to set the value
// and be aware of the option entries, and then serialize the actual field value we ended up with.
uiFieldHandle->setValueFromUiEditor(m_commandData->m_newUiValue);
{
QXmlStreamWriter xmlStream(&m_commandData->m_redoFieldValueSerialized);

View File

@ -36,6 +36,7 @@ set( PROJECT_FILES
cafPdmPtrField.inl
cafPdmReferenceHelper.cpp
cafPdmReferenceHelper.h
cafPdmUiFieldHandleInterface.h
cafPdmValueField.h
cafNotificationCenter.cpp

View File

@ -38,10 +38,13 @@
#endif
#include "cafPdmValueField.h"
#include "cafInternalPdmValueFieldSpecializations.h"
#include "cafPdmUiFieldHandleInterface.h"
#include <QVariant>
#include <vector>
#include <QVariant>
#include <assert.h>
@ -116,16 +119,16 @@ void caf::PdmDataValueField<DataType>::setValueWithFieldChanged(const DataType&
{
assert(isInitializedByInitFieldMacro());
PdmUiFieldHandle* uiFieldHandle = uiCapability();
if (uiFieldHandle)
PdmUiFieldHandleInterface* uiFieldHandleInterface = capability<PdmUiFieldHandleInterface>();
if (uiFieldHandleInterface)
{
QVariant oldValue = uiFieldHandle->toUiBasedQVariant();
QVariant oldValue = uiFieldHandleInterface->toUiBasedQVariant();
m_fieldValue = fieldValue;
QVariant newUiBasedQVariant = uiFieldHandle->toUiBasedQVariant();
QVariant newUiBasedQVariant = uiFieldHandleInterface->toUiBasedQVariant();
uiFieldHandle->notifyFieldChanged(oldValue, newUiBasedQVariant);
uiFieldHandleInterface->notifyFieldChanged(oldValue, newUiBasedQVariant);
}
else
{

View File

@ -0,0 +1,18 @@
#pragma once
#include <QVariant>
namespace caf
{
class PdmUiFieldHandleInterface
{
public:
PdmUiFieldHandleInterface() {}
virtual ~PdmUiFieldHandleInterface() {}
virtual QVariant toUiBasedQVariant() const { return QVariant(); }
virtual void notifyFieldChanged(const QVariant& oldUiBasedQVariant, const QVariant& newUiBasedQVariant) { };
};
} // End of namespace caf

View File

@ -16,7 +16,7 @@ public:
// Gui generalized interface
public:
virtual QVariant uiValue() const;
virtual void setValueFromUi(const QVariant& uiValue);
virtual void setValueFromUiEditor(const QVariant& uiValue);
virtual QList<PdmOptionItemInfo> valueOptions(bool* useOptionsOnly);
virtual QVariant toUiBasedQVariant() const;
@ -43,7 +43,7 @@ public:
// Gui generalized interface
public:
virtual QVariant uiValue() const { return QVariant();}
virtual void setValueFromUi(const QVariant& uiValue) { }
virtual void setValueFromUiEditor(const QVariant& uiValue) { }
virtual QList<PdmOptionItemInfo> valueOptions(bool* useOptionsOnly) { return QList<PdmOptionItemInfo>(); }
virtual QVariant toUiBasedQVariant() const { return QVariant(); }
@ -62,7 +62,7 @@ public:
// Gui generalized interface
public:
virtual QVariant uiValue() const { return QVariant(); }
virtual void setValueFromUi(const QVariant& uiValue) { }
virtual void setValueFromUiEditor(const QVariant& uiValue) { }
virtual QList<PdmOptionItemInfo> valueOptions(bool* useOptionsOnly) { return QList<PdmOptionItemInfo>(); }
virtual QVariant toUiBasedQVariant() const { return QVariant(); }

View File

@ -16,7 +16,7 @@ namespace caf
//--------------------------------------------------------------------------------------------------
template<typename FieldType >
void caf::PdmFieldUiCap<FieldType>::setValueFromUi(const QVariant& uiValue)
void caf::PdmFieldUiCap<FieldType>::setValueFromUiEditor(const QVariant& uiValue)
{
QVariant oldUiBasedQVariant = toUiBasedQVariant();

View File

@ -89,7 +89,7 @@ void PdmUiCommandSystemProxy::setUiValueToField(PdmUiFieldHandle* uiFieldHandle,
}
else
{
uiFieldHandle->setValueFromUi(newUiValue);
uiFieldHandle->setValueFromUiEditor(newUiValue);
}
}
}

View File

@ -93,9 +93,7 @@ void PdmUiFieldEditorHandle::createWidgets(QWidget * parent)
}
//--------------------------------------------------------------------------------------------------
/// Well this is food for thought. How do we spawn commands, without making us
/// dependent on the command system. It should be optional to use, and not depending on the command "library"
/// JJS
///
//--------------------------------------------------------------------------------------------------
void PdmUiFieldEditorHandle::setValueToField(const QVariant& newUiValue)
{

View File

@ -2,13 +2,14 @@
#include "cafPdmUiItem.h"
#include "cafPdmFieldCapability.h"
#include "cafPdmUiFieldHandleInterface.h"
namespace caf
{
class PdmFieldHandle;
class PdmUiFieldHandle : public PdmUiItem, public PdmFieldCapability
class PdmUiFieldHandle : public PdmUiItem, public PdmFieldCapability, public PdmUiFieldHandleInterface
{
public:
PdmUiFieldHandle(PdmFieldHandle* owner, bool giveOwnership);
@ -20,15 +21,19 @@ public:
// The QVariant encapsulates the real value, or an index into the valueOptions
virtual QVariant uiValue() const { return QVariant(); }
virtual void setValueFromUi(const QVariant& uiValue) { }
virtual QList<PdmOptionItemInfo>
valueOptions(bool* useOptionsOnly) { return QList<PdmOptionItemInfo>(); }
virtual QVariant toUiBasedQVariant() const { return QVariant(); }
void notifyFieldChanged(const QVariant& oldUiBasedQVariant, const QVariant& newUiBasedQVariant);
virtual void notifyFieldChanged(const QVariant& oldUiBasedQVariant, const QVariant& newUiBasedQVariant);
bool isAutoAddingOptionFromValue() const { return m_isAutoAddingOptionFromValue; }
void setAutoAddingOptionFromValue(bool isAddingValue) { m_isAutoAddingOptionFromValue = isAddingValue;}
private:
friend class PdmUiCommandSystemProxy;
friend class CmdFieldChangeExec;
virtual void setValueFromUiEditor(const QVariant& uiValue) { }
private:
PdmFieldHandle* m_owner;
bool m_isAutoAddingOptionFromValue;