Update toggle icon automatically on UI change and after read

This commit is contained in:
Magne Sjaastad committed 2026-10-17 13:23:22 +02:00
1 parent 95bee61f91
commit 3de9b3c1aa
37 files changed
+32 -147

No files matched your search

@@ -7,6 +7,9 @@ class PdmObjectCapability
public:
PdmObjectCapability() {}
virtual ~PdmObjectCapability() {}
// Called for each capability of an object after its fields are read, before PdmXmlObjectHandle::initAfterRead()
virtual void onAfterRead() {}
};
} // End namespace caf
@@ -72,6 +72,9 @@ void PdmUiFieldHandle::notifyFieldChanged( const QVariant& oldFieldValue, const
PdmUiObjectHandle* uiObjHandle = uiObj( ownerObjectHandle );
if ( uiObjHandle )
{
// Keep the icon in sync with the toggle field before notifying the object
if ( fieldHandle == uiObjHandle->objectToggleField() ) uiObjHandle->updateUiIconFromToggleField();
uiObjHandle->fieldChangedByUi( fieldHandle, oldFieldValue, newFieldValue );
uiObjHandle->updateConnectedEditors();
@@ -213,17 +213,23 @@ void PdmUiObjectHandle::expandUiTree( PdmUiTreeOrdering* root, const QString& ui
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiObjectHandle::updateUiIconFromToggleField()
void PdmUiObjectHandle::updateUiIconFromToggleField( const QString& uiConfigName )
{
if ( objectToggleField() )
{
PdmUiFieldHandle* uiFieldHandle = objectToggleField()->uiCapability();
if ( uiFieldHandle )
{
bool active = uiFieldHandle->uiValue().toBool();
updateUiIconFromState( active );
}
}
auto* toggleField = objectToggleField();
if ( !toggleField ) return;
auto* uiFieldHandle = toggleField->uiCapability();
if ( !uiFieldHandle ) return;
updateUiIconFromState( uiFieldHandle->uiValue().toBool(), uiConfigName );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiObjectHandle::onAfterRead()
{
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -47,7 +47,11 @@ public:
/// Field used to control if field change of and object should be covered by undo/redo framework
virtual bool useUndoRedoForFieldChanged() { return true; }
void updateUiIconFromToggleField();
// Updates the icon active state from the object toggle field. Done automatically when the toggle field is changed
// and after the object is read. Call explicitly when the toggle field is set without notification
void updateUiIconFromToggleField( const QString& uiConfigName = "" );
void onAfterRead() override;
/// Append actions to menu builder
virtual void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const {}
@@ -401,6 +401,11 @@ void PdmXmlObjectHandle::initAfterReadRecursively( PdmObjectHandle* object )
initAfterReadRecursively( children[cIdx] );
}
for ( auto& [capability, takeOwnership] : object->m_capabilities )
{
capability->onAfterRead();
}
PdmXmlObjectHandle* xmlObject = xmlObj( object );
if ( xmlObject )
{