From e1f5fd8146646b66170df3227812763accfa8a59 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 6 Feb 2024 20:06:07 +0100 Subject: [PATCH] wip table editor color --- .../RicNewPolylineTargetFeature.cpp | 55 ++++++++----------- .../ProjectDataModel/CMakeLists_files.cmake | 1 + .../Polygons/RimPolygonInView.cpp | 7 ++- .../RimPolylinePickerInterface.cpp | 48 ++++++++++++++++ .../RimPolylinePickerInterface.h | 2 + .../cafPdmUiTableViewEditor.cpp | 1 + 6 files changed, 82 insertions(+), 32 deletions(-) create mode 100644 ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.cpp diff --git a/ApplicationLibCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp b/ApplicationLibCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp index 013eadff30..eec85c6ce3 100644 --- a/ApplicationLibCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp +++ b/ApplicationLibCode/Commands/WellPathCommands/RicNewPolylineTargetFeature.cpp @@ -21,21 +21,23 @@ CAF_CMD_SOURCE_INIT( RicNewPolylineTargetFeature, "RicNewPolylineTargetFeature" #include "RimCase.h" #include "RimGridView.h" +#include "RimPolylinePickerInterface.h" #include "RimPolylineTarget.h" #include "RimProject.h" -#include "RimUserDefinedPolylinesAnnotation.h" + #include "cafSelectionManager.h" -#include #include "cvfBoundingBox.h" +#include + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicNewPolylineTargetFeature::isCommandEnabled() const { { - std::vector objects; + std::vector objects; caf::SelectionManager::instance()->objectsByType( &objects ); if ( !objects.empty() ) @@ -66,7 +68,7 @@ void RicNewPolylineTargetFeature::onActionTriggered( bool isChecked ) if ( !selectedTargets.empty() ) { auto firstTarget = selectedTargets.front(); - RimUserDefinedPolylinesAnnotation* polylineDef = firstTarget->firstAncestorOrThisOfTypeAsserted(); + auto polylineDef = firstTarget->firstAncestorOrThisOfTypeAsserted(); auto afterBeforePair = polylineDef->findActiveTargetsAroundInsertionPoint( firstTarget ); @@ -109,49 +111,40 @@ void RicNewPolylineTargetFeature::onActionTriggered( bool isChecked ) return; } - std::vector polylineDefs; + std::vector polylineDefs; caf::SelectionManager::instance()->objectsByType( &polylineDefs ); if ( !polylineDefs.empty() ) { auto* polylineDef = polylineDefs[0]; std::vector activeTargets = polylineDef->activeTargets(); - size_t targetCount = activeTargets.size(); + cvf::Vec3d newPos = cvf::Vec3d::ZERO; - if ( targetCount == 0 ) + size_t targetCount = activeTargets.size(); + if ( targetCount > 1 ) + { + newPos = activeTargets[targetCount - 1]->targetPointXYZ(); + cvf::Vec3d nextLastToLast = newPos - activeTargets[targetCount - 2]->targetPointXYZ(); + newPos += 0.5 * nextLastToLast; + } + else if ( targetCount > 0 ) + { + newPos = activeTargets[targetCount - 1]->targetPointXYZ() + cvf::Vec3d( 0, 0, 200 ); + } + else { - auto defaultPos = cvf::Vec3d::ZERO; - - // Set decent position std::vector gridViews; RimProject::current()->allVisibleGridViews( gridViews ); if ( !gridViews.empty() ) { auto minPos = gridViews.front()->ownerCase()->allCellsBoundingBox().min(); - defaultPos = minPos; + newPos = minPos; } - - polylineDef->appendTarget( defaultPos ); } - else - { - cvf::Vec3d newPos = cvf::Vec3d::ZERO; - - if ( targetCount > 1 ) - { - newPos = activeTargets[targetCount - 1]->targetPointXYZ(); - cvf::Vec3d nextLastToLast = newPos - activeTargets[targetCount - 2]->targetPointXYZ(); - newPos += 0.5 * nextLastToLast; - } - else if ( targetCount > 0 ) - { - newPos = activeTargets[targetCount - 1]->targetPointXYZ() + cvf::Vec3d( 0, 0, 200 ); - } - auto* newTarget = new RimPolylineTarget; - newTarget->setAsPointTargetXYD( { newPos[0], newPos[1], -newPos[2] } ); - polylineDef->insertTarget( nullptr, newTarget ); - } + auto* newTarget = new RimPolylineTarget; + newTarget->setAsPointTargetXYD( { newPos[0], newPos[1], -newPos[2] } ); + polylineDef->insertTarget( nullptr, newTarget ); polylineDef->updateEditorsAndVisualization(); } diff --git a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake index 6b50a735aa..d3366768f1 100644 --- a/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ProjectDataModel/CMakeLists_files.cmake @@ -267,6 +267,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RimResultSelectionUi.cpp ${CMAKE_CURRENT_LIST_DIR}/RimPlotRectAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimEmCase.cpp + ${CMAKE_CURRENT_LIST_DIR}/RimPolylinePickerInterface.cpp ) if(RESINSIGHT_USE_QT_CHARTS) diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp index 32ad4bc664..4c30110b1d 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp @@ -160,7 +160,7 @@ std::vector RimPolygonInView::activeTargets() const //-------------------------------------------------------------------------------------------------- bool RimPolygonInView::pickingEnabled() const { - return true; + return m_enablePicking(); } //-------------------------------------------------------------------------------------------------- @@ -253,6 +253,11 @@ void RimPolygonInView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin //-------------------------------------------------------------------------------------------------- void RimPolygonInView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) { + if ( changedField == &m_enablePicking ) + { + updateAllRequiredEditors(); + } + updateVisualization(); } diff --git a/ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.cpp b/ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.cpp new file mode 100644 index 0000000000..9ca78cfffd --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.cpp @@ -0,0 +1,48 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2020 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RimPolylinePickerInterface.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::pair + RimPolylinePickerInterface::findActiveTargetsAroundInsertionPoint( const RimPolylineTarget* targetToInsertBefore ) +{ + auto targets = activeTargets(); + + RimPolylineTarget* before = nullptr; + RimPolylineTarget* after = nullptr; + + bool foundTarget = false; + for ( const auto& wt : targets ) + { + if ( wt == targetToInsertBefore ) + { + foundTarget = true; + } + + if ( wt->isEnabled() && !after && foundTarget ) after = wt; + + if ( wt->isEnabled() && !foundTarget ) before = wt; + } + + return { before, after }; +} diff --git a/ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.h b/ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.h index 5a99bed648..26e53beaf9 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.h +++ b/ApplicationLibCode/ProjectDataModel/RimPolylinePickerInterface.h @@ -33,4 +33,6 @@ class RimPolylinePickerInterface virtual std::vector activeTargets() const = 0; virtual bool pickingEnabled() const = 0; virtual caf::PickEventHandler* pickEventHandler() const = 0; + + std::pair findActiveTargetsAroundInsertionPoint( const RimPolylineTarget* targetToInsertBefore ); }; diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTableViewEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiTableViewEditor.cpp index 71ee591f97..0bb864dbfd 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTableViewEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTableViewEditor.cpp @@ -196,6 +196,7 @@ void PdmUiTableViewEditor::configureAndUpdateUi( const QString& uiConfigName ) QPalette myPalette( m_tableView->palette() ); myPalette.setColor( QPalette::Base, editorAttrib.baseColor ); m_tableView->setPalette( myPalette ); + m_tableView->repaint(); // Drop target settings m_tableView->setAcceptDrops( editorAttrib.enableDropTarget );