#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 );
caf::PdmObjectHandle* firstSelectedObject = nullptr;
if ( uiItems.size() == 1 )
if ( !uiItems.empty() )
{
firstSelectedObject = dynamic_cast<caf::PdmObjectHandle*>( uiItems[0] );
firstSelectedObject = dynamic_cast<caf::PdmObjectHandle*>( uiItems.front() );
}
updateUiFieldsFromActiveResult( firstSelectedObject );
@ -1439,7 +1438,7 @@ void RiuMainWindow::selectedObjectsChanged()
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();
}

View File

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

View File

@ -90,18 +90,18 @@ void PdmUiCommandSystemProxy::setUiValueToField( PdmUiFieldHandle* uiFieldHandle
fieldsToUpdate.push_back( editorField );
// 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
// 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;
int selectionLevel = 1; // = 0;
int selectionLevel = 0;
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 )
{
// 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
// A field is selected, check if keywords are identical
PdmUiFieldHandle* itemFieldHandle = dynamic_cast<PdmUiFieldHandle*>( items[i] );
PdmUiFieldHandle* itemFieldHandle = dynamic_cast<PdmUiFieldHandle*>( item );
if ( itemFieldHandle )
{
PdmFieldHandle* field = itemFieldHandle->fieldHandle();