diff --git a/ApplicationExeCode/Resources/ResInsight.qrc b/ApplicationExeCode/Resources/ResInsight.qrc index efe7e9278b..87939b1318 100644 --- a/ApplicationExeCode/Resources/ResInsight.qrc +++ b/ApplicationExeCode/Resources/ResInsight.qrc @@ -290,6 +290,7 @@ cloud-and-server.svg Cloud.svg CloudBlobs.svg + pin.svg fs_CellFace.glsl diff --git a/ApplicationExeCode/Resources/pin.svg b/ApplicationExeCode/Resources/pin.svg new file mode 100644 index 0000000000..d18608c5c9 --- /dev/null +++ b/ApplicationExeCode/Resources/pin.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ApplicationLibCode/Commands/ToolCommands/RicAddFieldToQuickAccessFeature.cpp b/ApplicationLibCode/Commands/ToolCommands/RicAddFieldToQuickAccessFeature.cpp index e2351254c6..c0a7184eb0 100644 --- a/ApplicationLibCode/Commands/ToolCommands/RicAddFieldToQuickAccessFeature.cpp +++ b/ApplicationLibCode/Commands/ToolCommands/RicAddFieldToQuickAccessFeature.cpp @@ -18,15 +18,12 @@ #include "RicAddFieldToQuickAccessFeature.h" -/* -#include "RiaApplication.h" +#include "RimFieldReference.h" +#include "RimPinnedFieldCollection.h" -#include "Rim3dOverlayInfoConfig.h" -#include "RimGridView.h" +#include "cafPdmUiPropertyViewDialog.h" -#include "RiuViewer.h" -#include "RiuViewerCommands.h" -*/ +#include "Riu3DMainWindowTools.h" #include @@ -41,6 +38,20 @@ void RicAddFieldToQuickAccessFeature::onActionTriggered( bool isChecked ) if ( objects.empty() ) return; auto firstObject = objects.front(); + + RimFieldReference fieldRef; + fieldRef.setObject( firstObject ); + + caf::PdmUiPropertyViewDialog propertyDialog( Riu3DMainWindowTools::mainWindowWidget(), &fieldRef, "Select Field", "" ); + if ( propertyDialog.exec() == QDialog::Accepted ) + { + auto field = fieldRef.field(); + if ( field ) + { + RimPinnedFieldCollection::instance()->addField( field ); + RimPinnedFieldCollection::instance()->updateAllRequiredEditors(); + } + } } //-------------------------------------------------------------------------------------------------- @@ -48,6 +59,6 @@ void RicAddFieldToQuickAccessFeature::onActionTriggered( bool isChecked ) //-------------------------------------------------------------------------------------------------- void RicAddFieldToQuickAccessFeature::setupActionLook( QAction* actionToSetup ) { - actionToSetup->setText( "Add Field To Quick Access" ); - // actionToSetup->setIcon( QIcon( ":/SummaryEnsemble.svg" ) ); + actionToSetup->setText( "Pin Field To Quick Access" ); + actionToSetup->setIcon( QIcon( ":/pin.svg" ) ); } diff --git a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp index 927648c78b..3eb927ad90 100644 --- a/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -1125,6 +1125,8 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder << "RicPasteAsciiDataCurveFeature"; menuBuilder << "RicPasteSummaryCaseFeature"; menuBuilder.addSeparator(); + menuBuilder << "RicAddFieldToQuickAccessFeature"; + menuBuilder.addSeparator(); menuBuilder << "RicCopyReferencesToClipboardFeature"; menuBuilder << "RicLinkViewFeature"; diff --git a/ApplicationLibCode/ProjectDataModel/RimFieldReference.cpp b/ApplicationLibCode/ProjectDataModel/RimFieldReference.cpp index 723a9a0657..bcddbd466e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimFieldReference.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimFieldReference.cpp @@ -31,6 +31,20 @@ RimFieldReference::RimFieldReference() CAF_PDM_InitFieldNoDefault( &m_fieldName, "FieldName", "FieldName" ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFieldReference::setObject( caf::PdmObject* object ) +{ + m_object = object; + + std::vector fieldNames = RimFieldReference::fieldNames( object ); + if ( !fieldNames.empty() ) + { + m_fieldName = fieldNames[0]; + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -38,10 +52,29 @@ void RimFieldReference::setField( caf::PdmFieldHandle* field ) { if ( !field ) return; - auto ownerObject = field->ownerObject(); + auto ownerObject = dynamic_cast( field->ownerObject() ); if ( !ownerObject ) return; - setField( field->ownerObject(), field->keyword() ); + setField( ownerObject, field->keyword() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimFieldReference::fieldNames( caf::PdmObject* object ) +{ + std::vector names; + + if ( object ) + { + auto allFields = object->fields(); + for ( auto field : allFields ) + { + names.push_back( field->keyword() ); + } + } + + return names; } //-------------------------------------------------------------------------------------------------- @@ -49,12 +82,44 @@ void RimFieldReference::setField( caf::PdmFieldHandle* field ) //-------------------------------------------------------------------------------------------------- void RimFieldReference::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - if ( field() ) +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimFieldReference::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) +{ + QList options; + + if ( fieldNeedingOptions == &m_fieldName ) { - uiOrdering.add( field() ); + auto fieldNames = RimFieldReference::fieldNames( m_object ); + for ( const auto& name : fieldNames ) + { + options.push_back( caf::PdmOptionItemInfo( name, name ) ); + } + } + else if ( fieldNeedingOptions == &m_object ) + { + if ( m_objectsForSelection.empty() ) + { + if ( m_object ) + { + QString text = m_object()->uiName(); + options.push_back( caf::PdmOptionItemInfo( text, m_object ) ); + } + } + else + { + for ( auto obj : m_objectsForSelection ) + { + QString text = obj->uiName(); + options.push_back( caf::PdmOptionItemInfo( text, obj ) ); + } + } } - uiOrdering.skipRemainingFields(); + return options; } //-------------------------------------------------------------------------------------------------- @@ -70,7 +135,7 @@ caf::PdmFieldHandle* RimFieldReference::field() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -caf::PdmObjectHandle* RimFieldReference::object() const +caf::PdmObject* RimFieldReference::object() const { return m_object; } @@ -78,7 +143,15 @@ caf::PdmObjectHandle* RimFieldReference::object() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimFieldReference::setField( caf::PdmObjectHandle* object, const QString& fieldName ) +void RimFieldReference::setObjectsForSelection( const std::vector& objectsForSelection ) +{ + m_objectsForSelection = objectsForSelection; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFieldReference::setField( caf::PdmObject* object, const QString& fieldName ) { m_object = object; m_fieldName = fieldName; diff --git a/ApplicationLibCode/ProjectDataModel/RimFieldReference.h b/ApplicationLibCode/ProjectDataModel/RimFieldReference.h index 5435686686..e03e457dbf 100644 --- a/ApplicationLibCode/ProjectDataModel/RimFieldReference.h +++ b/ApplicationLibCode/ProjectDataModel/RimFieldReference.h @@ -37,17 +37,25 @@ class RimFieldReference : public caf::PdmObject public: RimFieldReference(); + void setObject( caf::PdmObject* object ); + void setField( caf::PdmFieldHandle* field ); caf::PdmFieldHandle* field() const; - caf::PdmObjectHandle* object() const; + caf::PdmObject* object() const; + void setObjectsForSelection( const std::vector& objectsForSelection ); private: - void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; + void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; + QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; - void setField( caf::PdmObjectHandle* object, const QString& fieldName ); + void setField( caf::PdmObject* object, const QString& fieldName ); + + static std::vector fieldNames( caf::PdmObject* object ); private: - caf::PdmPtrField m_object; - caf::PdmField m_fieldName; + caf::PdmPtrField m_object; + caf::PdmField m_fieldName; + + std::vector m_objectsForSelection; }; diff --git a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp index d12d60d24a..4542933259 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp @@ -131,11 +131,7 @@ void RimPinnedFieldCollection::defineUiOrdering( QString uiConfigName, caf::PdmU for ( auto fieldRef : fieldRefs ) { group->add( fieldRef->field() ); - } - - if ( !fieldRefs.empty() ) - { - group->add( fieldRefs.front()->selectObjectButton(), { .newRow = false } ); + group->add( fieldRef->selectObjectButton(), { .newRow = false } ); } } } diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp index af8c8d3314..3a3a477b53 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp @@ -139,6 +139,14 @@ QString RiuDockWidgetTools::mainWindowUndoStackName() return "dockUndoStack_mainWindow"; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::mainWindowQuickAccessName() +{ + return "dockQuickAccess_mainWindow"; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -147,6 +155,14 @@ QString RiuDockWidgetTools::plotMainWindowPlotManagerName() return "dockSummaryPlotManager"; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::plotWindowQuickAccessName() +{ + return "dockQuickAccess_plotWindow"; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -383,6 +399,8 @@ QIcon RiuDockWidgetTools::dockIcon( const QString dockWidgetName ) return QIcon( ":/graph.svg" ); else if ( dockWidgetName == plotMainWindowCloudTreeName() ) return QIcon( ":/Cloud.svg" ); + else if ( dockWidgetName == plotWindowQuickAccessName() || dockWidgetName == mainWindowQuickAccessName() ) + return QIcon( ":/pin.svg" ); return QIcon( ":/view.svg" ); } diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h index 40e8d95e89..55423cac9c 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h @@ -58,6 +58,7 @@ public: static QString mainWindowMessagesName(); static QString mainWindowMohrsCirclePlotName(); static QString mainWindowUndoStackName(); + static QString mainWindowQuickAccessName(); static QString mainWindowProjectTreeName(); static QString mainWindowDataSourceTreeName(); @@ -74,6 +75,7 @@ public: static QString plotMainWindowMessagesName(); static QString plotMainWindowUndoStackName(); static QString plotMainWindowPlotManagerName(); + static QString plotWindowQuickAccessName(); static QString dockState3DEclipseName(); static QString dockState3DGeoMechName(); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index 1209845d3f..a7566e6eab 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -822,7 +822,8 @@ void RiuMainWindow::createDockPanels() } { - auto dockWidget = RiuDockWidgetTools::createDockWidget( "Quick Access", "Quick Access", dockManager() ); + auto dockWidget = + RiuDockWidgetTools::createDockWidget( "Quick Access", RiuDockWidgetTools::mainWindowQuickAccessName(), dockManager() ); m_pinnedFieldView = new caf::PdmUiPropertyView( dockWidget ); dockWidget->setWidget( m_pinnedFieldView );