#7342 Property Editor : Support multi-select of objects of same type

This commit is contained in:
Magne Sjaastad 2021-02-08 08:33:10 +01:00
parent f14386314e
commit 14c09f30cf
3 changed files with 12 additions and 14 deletions

View File

@ -1423,10 +1423,9 @@ void RiuMainWindow::selectedObjectsChanged()
m_projectTreeView->selectedUiItems( uiItems ); m_projectTreeView->selectedUiItems( uiItems );
caf::PdmObjectHandle* firstSelectedObject = nullptr; caf::PdmObjectHandle* firstSelectedObject = nullptr;
if ( !uiItems.empty() )
if ( uiItems.size() == 1 )
{ {
firstSelectedObject = dynamic_cast<caf::PdmObjectHandle*>( uiItems[0] ); firstSelectedObject = dynamic_cast<caf::PdmObjectHandle*>( uiItems.front() );
} }
updateUiFieldsFromActiveResult( firstSelectedObject ); updateUiFieldsFromActiveResult( firstSelectedObject );
@ -1439,7 +1438,7 @@ void RiuMainWindow::selectedObjectsChanged()
if ( !firstSelectedObject ) if ( !firstSelectedObject )
{ {
caf::PdmFieldHandle* selectedField = dynamic_cast<caf::PdmFieldHandle*>( uiItems[0] ); caf::PdmFieldHandle* selectedField = dynamic_cast<caf::PdmFieldHandle*>( uiItems.front() );
if ( selectedField ) firstSelectedObject = selectedField->ownerObject(); if ( selectedField ) firstSelectedObject = selectedField->ownerObject();
} }

View File

@ -832,10 +832,9 @@ void RiuPlotMainWindow::selectedObjectsChanged()
m_projectTreeView->selectedUiItems( uiItems ); m_projectTreeView->selectedUiItems( uiItems );
caf::PdmObjectHandle* firstSelectedObject = nullptr; caf::PdmObjectHandle* firstSelectedObject = nullptr;
if ( !uiItems.empty() )
if ( uiItems.size() == 1 )
{ {
firstSelectedObject = dynamic_cast<caf::PdmObjectHandle*>( uiItems[0] ); firstSelectedObject = dynamic_cast<caf::PdmObjectHandle*>( uiItems.front() );
} }
m_pdmUiPropertyView->showProperties( firstSelectedObject ); m_pdmUiPropertyView->showProperties( firstSelectedObject );
@ -846,7 +845,7 @@ void RiuPlotMainWindow::selectedObjectsChanged()
if ( !firstSelectedObject ) if ( !firstSelectedObject )
{ {
caf::PdmFieldHandle* selectedField = dynamic_cast<caf::PdmFieldHandle*>( uiItems[0] ); caf::PdmFieldHandle* selectedField = dynamic_cast<caf::PdmFieldHandle*>( uiItems.front() );
if ( selectedField ) firstSelectedObject = selectedField->ownerObject(); if ( selectedField ) firstSelectedObject = selectedField->ownerObject();
} }

View File

@ -90,18 +90,18 @@ void PdmUiCommandSystemProxy::setUiValueToField( PdmUiFieldHandle* uiFieldHandle
fieldsToUpdate.push_back( editorField ); fieldsToUpdate.push_back( editorField );
// For level 1 selection, find all fields with same keyword // For level 1 selection, find all fields with same keyword
// Todo: Should traverse the ui ordering and find all fields with same keyword and same ownerobject type. // Todo: Should traverse the ui ordering and find all fields with same keyword and same owner object type.
// Until we do, fields embedded into the property panel from a different object will not work with // Until we do, fields embedded into the property panel from a different object will not work with
// multiselection edit For now we only makes sure we have same ownerobject type // multi selection edit For now we only makes sure we have same owner object type
{ {
std::vector<PdmUiItem*> items; std::vector<PdmUiItem*> items;
int selectionLevel = 1; // = 0; int selectionLevel = 0;
SelectionManager::instance()->selectedItems( items, selectionLevel ); SelectionManager::instance()->selectedItems( items, selectionLevel );
for ( size_t i = 0; i < items.size(); i++ ) for ( auto& item : items )
{ {
PdmObjectHandle* objectHandle = dynamic_cast<PdmObjectHandle*>( items[i] ); PdmObjectHandle* objectHandle = dynamic_cast<PdmObjectHandle*>( item );
if ( objectHandle && typeid( *objectHandle ) == fieldOwnerTypeId ) if ( objectHandle && typeid( *objectHandle ) == fieldOwnerTypeId )
{ {
// An object is selected, find field with same keyword as the current field being edited // An object is selected, find field with same keyword as the current field being edited
@ -115,7 +115,7 @@ void PdmUiCommandSystemProxy::setUiValueToField( PdmUiFieldHandle* uiFieldHandle
{ {
// Todo Remove when dust has settled. Selection manager is not supposed to select single fields // Todo Remove when dust has settled. Selection manager is not supposed to select single fields
// A field is selected, check if keywords are identical // A field is selected, check if keywords are identical
PdmUiFieldHandle* itemFieldHandle = dynamic_cast<PdmUiFieldHandle*>( items[i] ); PdmUiFieldHandle* itemFieldHandle = dynamic_cast<PdmUiFieldHandle*>( item );
if ( itemFieldHandle ) if ( itemFieldHandle )
{ {
PdmFieldHandle* field = itemFieldHandle->fieldHandle(); PdmFieldHandle* field = itemFieldHandle->fieldHandle();