mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3291 Fix by differensiating between dynamic and default pickEventHandlers
This commit is contained in:
parent
67aa41eeae
commit
bddaf9d602
@ -51,11 +51,21 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
/// A static always-on pick handler used in the RiuViewerCommand
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
class RicPickEventHandler
|
class RicDefaultPickEventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual bool handlePickEvent(const Ric3DPickEvent& eventObject) = 0;
|
virtual bool handlePickEvent(const Ric3DPickEvent& eventObject) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//==================================================================================================
|
||||||
|
/// A temporary, dynamic pick handler that overrides the default ones
|
||||||
|
//==================================================================================================
|
||||||
|
class RicPickEventHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual bool handlePickEvent(const Ric3DPickEvent& eventObject) = 0;
|
||||||
|
virtual void notifyUnregistered() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
class Ric3dWellLogCurvePickEventHandler : public RicPickEventHandler
|
class Ric3dWellLogCurvePickEventHandler : public RicDefaultPickEventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static Ric3dWellLogCurvePickEventHandler* instance();
|
static Ric3dWellLogCurvePickEventHandler* instance();
|
||||||
|
@ -45,6 +45,14 @@ RicCreateWellTargetsPickEventHandler::~RicCreateWellTargetsPickEventHandler()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicCreateWellTargetsPickEventHandler::notifyUnregistered()
|
||||||
|
{
|
||||||
|
m_geometryToAddTargetsTo->enableTargetPointPicking(false);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -37,5 +37,6 @@ protected:
|
|||||||
caf::PdmPointer<RimWellPathGeometryDef> m_geometryToAddTargetsTo;
|
caf::PdmPointer<RimWellPathGeometryDef> m_geometryToAddTargetsTo;
|
||||||
|
|
||||||
virtual bool handlePickEvent(const Ric3DPickEvent& eventObject) override;
|
virtual bool handlePickEvent(const Ric3DPickEvent& eventObject) override;
|
||||||
|
virtual void notifyUnregistered() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
class RicIntersectionPickEventHandler : public RicPickEventHandler
|
class RicIntersectionPickEventHandler : public RicDefaultPickEventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static RicIntersectionPickEventHandler* instance();
|
static RicIntersectionPickEventHandler* instance();
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
class RicWellPathPickEventHandler : public RicPickEventHandler
|
class RicWellPathPickEventHandler : public RicDefaultPickEventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static RicWellPathPickEventHandler* instance();
|
static RicWellPathPickEventHandler* instance();
|
||||||
|
@ -79,7 +79,7 @@ RimWellPathGeometryDef::RimWellPathGeometryDef()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimWellPathGeometryDef::~RimWellPathGeometryDef()
|
RimWellPathGeometryDef::~RimWellPathGeometryDef()
|
||||||
{
|
{
|
||||||
RiuViewerCommands::removePickEventHandler(m_pickTargetsEventHandler);
|
RiuViewerCommands::removePickEventHandlerIfActive(m_pickTargetsEventHandler);
|
||||||
|
|
||||||
delete m_pickTargetsEventHandler;
|
delete m_pickTargetsEventHandler;
|
||||||
|
|
||||||
@ -197,12 +197,12 @@ void RimWellPathGeometryDef::enableTargetPointPicking(bool isEnabling)
|
|||||||
if (isEnabling)
|
if (isEnabling)
|
||||||
{
|
{
|
||||||
m_pickPointsEnabled = true;
|
m_pickPointsEnabled = true;
|
||||||
RiuViewerCommands::addPickEventHandler(m_pickTargetsEventHandler);
|
RiuViewerCommands::setPickEventHandler(m_pickTargetsEventHandler);
|
||||||
updateConnectedEditors();
|
updateConnectedEditors();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RiuViewerCommands::removePickEventHandler(m_pickTargetsEventHandler);
|
RiuViewerCommands::removePickEventHandlerIfActive(m_pickTargetsEventHandler);
|
||||||
m_pickPointsEnabled = false;
|
m_pickPointsEnabled = false;
|
||||||
updateConnectedEditors();
|
updateConnectedEditors();
|
||||||
}
|
}
|
||||||
|
@ -107,8 +107,9 @@
|
|||||||
// RiaViewerCommands
|
// RiaViewerCommands
|
||||||
//
|
//
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
|
RicPickEventHandler* RiuViewerCommands::sm_overridingPickHandler = nullptr;
|
||||||
|
|
||||||
std::vector<RicPickEventHandler*> RiuViewerCommands::sm_pickEventHandlers;
|
std::vector<RicDefaultPickEventHandler*> RiuViewerCommands::sm_defaultPickEventHandlers;
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@ -121,11 +122,11 @@ RiuViewerCommands::RiuViewerCommands(RiuViewer* ownerViewer)
|
|||||||
, m_currentPickPositionInDomainCoords(cvf::Vec3d::UNDEFINED)
|
, m_currentPickPositionInDomainCoords(cvf::Vec3d::UNDEFINED)
|
||||||
, m_viewer(ownerViewer)
|
, m_viewer(ownerViewer)
|
||||||
{
|
{
|
||||||
if ( sm_pickEventHandlers.empty() )
|
if ( sm_defaultPickEventHandlers.empty() )
|
||||||
{
|
{
|
||||||
addPickEventHandler(RicIntersectionPickEventHandler::instance());
|
addDefaultPickEventHandler(RicIntersectionPickEventHandler::instance());
|
||||||
addPickEventHandler(Ric3dWellLogCurvePickEventHandler::instance());
|
addDefaultPickEventHandler(Ric3dWellLogCurvePickEventHandler::instance());
|
||||||
addPickEventHandler(RicWellPathPickEventHandler::instance());
|
addDefaultPickEventHandler(RicWellPathPickEventHandler::instance());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,9 +531,14 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY, Qt::KeyboardM
|
|||||||
Ric3DPickEvent viewerEventObject(pickItemInfos,
|
Ric3DPickEvent viewerEventObject(pickItemInfos,
|
||||||
m_reservoirView);
|
m_reservoirView);
|
||||||
|
|
||||||
for ( size_t i = 0; i < sm_pickEventHandlers.size(); i++ )
|
if (sm_overridingPickHandler && sm_overridingPickHandler->handlePickEvent(viewerEventObject))
|
||||||
{
|
{
|
||||||
if ( sm_pickEventHandlers[i]->handlePickEvent(viewerEventObject) )
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( size_t i = 0; i < sm_defaultPickEventHandlers.size(); i++ )
|
||||||
|
{
|
||||||
|
if ( sm_defaultPickEventHandlers[i]->handlePickEvent(viewerEventObject) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -877,6 +883,28 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY, Qt::KeyboardM
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuViewerCommands::setPickEventHandler(RicPickEventHandler* pickEventHandler)
|
||||||
|
{
|
||||||
|
if (sm_overridingPickHandler) sm_overridingPickHandler->notifyUnregistered();
|
||||||
|
|
||||||
|
sm_overridingPickHandler = pickEventHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuViewerCommands::removePickEventHandlerIfActive(RicPickEventHandler* pickEventHandler)
|
||||||
|
{
|
||||||
|
if (sm_overridingPickHandler == pickEventHandler)
|
||||||
|
{
|
||||||
|
sm_overridingPickHandler = nullptr;
|
||||||
|
if (pickEventHandler) pickEventHandler->notifyUnregistered();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -888,25 +916,25 @@ cvf::Vec3d RiuViewerCommands::lastPickPositionInDomainCoords() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RiuViewerCommands::addPickEventHandler(RicPickEventHandler* pickEventHandler)
|
void RiuViewerCommands::addDefaultPickEventHandler(RicDefaultPickEventHandler* pickEventHandler)
|
||||||
{
|
{
|
||||||
removePickEventHandler(pickEventHandler);
|
removeDefaultPickEventHandler(pickEventHandler);
|
||||||
if (pickEventHandler)
|
if (pickEventHandler)
|
||||||
{
|
{
|
||||||
sm_pickEventHandlers.push_back(pickEventHandler);
|
sm_defaultPickEventHandlers.push_back(pickEventHandler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RiuViewerCommands::removePickEventHandler(RicPickEventHandler* pickEventHandler)
|
void RiuViewerCommands::removeDefaultPickEventHandler(RicDefaultPickEventHandler* pickEventHandler)
|
||||||
{
|
{
|
||||||
for ( auto it = sm_pickEventHandlers.begin(); it != sm_pickEventHandlers.end(); ++it )
|
for ( auto it = sm_defaultPickEventHandlers.begin(); it != sm_defaultPickEventHandlers.end(); ++it )
|
||||||
{
|
{
|
||||||
if ( *it == pickEventHandler )
|
if ( *it == pickEventHandler )
|
||||||
{
|
{
|
||||||
sm_pickEventHandlers.erase(it);
|
sm_defaultPickEventHandlers.erase(it);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
|
||||||
|
class RicDefaultPickEventHandler;
|
||||||
class RicPickEventHandler;
|
class RicPickEventHandler;
|
||||||
class RimEclipseView;
|
class RimEclipseView;
|
||||||
class RimGeoMechView;
|
class RimGeoMechView;
|
||||||
@ -59,8 +60,8 @@ public:
|
|||||||
void displayContextMenu(QMouseEvent* event);
|
void displayContextMenu(QMouseEvent* event);
|
||||||
void handlePickAction(int winPosX, int winPosY, Qt::KeyboardModifiers keyboardModifiers);
|
void handlePickAction(int winPosX, int winPosY, Qt::KeyboardModifiers keyboardModifiers);
|
||||||
|
|
||||||
static void addPickEventHandler(RicPickEventHandler* pickEventHandler);
|
static void setPickEventHandler(RicPickEventHandler* pickEventHandler);
|
||||||
static void removePickEventHandler(RicPickEventHandler* pickEventHandler);
|
static void removePickEventHandlerIfActive(RicPickEventHandler* pickEventHandler);
|
||||||
|
|
||||||
cvf::Vec3d lastPickPositionInDomainCoords() const;
|
cvf::Vec3d lastPickPositionInDomainCoords() const;
|
||||||
private:
|
private:
|
||||||
@ -75,6 +76,9 @@ private:
|
|||||||
|
|
||||||
bool handleOverlayItemPicking(int winPosX, int winPosY);
|
bool handleOverlayItemPicking(int winPosX, int winPosY);
|
||||||
|
|
||||||
|
static void addDefaultPickEventHandler(RicDefaultPickEventHandler* pickEventHandler);
|
||||||
|
static void removeDefaultPickEventHandler(RicDefaultPickEventHandler* pickEventHandler);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
size_t m_currentGridIdx;
|
size_t m_currentGridIdx;
|
||||||
size_t m_currentCellIndex;
|
size_t m_currentCellIndex;
|
||||||
@ -82,5 +86,7 @@ private:
|
|||||||
cvf::Vec3d m_currentPickPositionInDomainCoords;
|
cvf::Vec3d m_currentPickPositionInDomainCoords;
|
||||||
caf::PdmPointer<Rim3dView> m_reservoirView;
|
caf::PdmPointer<Rim3dView> m_reservoirView;
|
||||||
QPointer<RiuViewer> m_viewer;
|
QPointer<RiuViewer> m_viewer;
|
||||||
static std::vector<RicPickEventHandler*> sm_pickEventHandlers;
|
|
||||||
|
static RicPickEventHandler* sm_overridingPickHandler;
|
||||||
|
static std::vector<RicDefaultPickEventHandler*> sm_defaultPickEventHandlers;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user