#3291 Fix by differensiating between dynamic and default pickEventHandlers

This commit is contained in:
Jacob Støren committed 2018-08-30 15:43:55 +02:00
1 parent 67aa41eeae
commit bddaf9d602
9 files changed
+77 -24

No files matched your search

@@ -107,8 +107,9 @@
// 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_viewer(ownerViewer)
{
if ( sm_pickEventHandlers.empty() )
if ( sm_defaultPickEventHandlers.empty() )
{
addPickEventHandler(RicIntersectionPickEventHandler::instance());
addPickEventHandler(Ric3dWellLogCurvePickEventHandler::instance());
addPickEventHandler(RicWellPathPickEventHandler::instance());
addDefaultPickEventHandler(RicIntersectionPickEventHandler::instance());
addDefaultPickEventHandler(Ric3dWellLogCurvePickEventHandler::instance());
addDefaultPickEventHandler(RicWellPathPickEventHandler::instance());
}
}
@@ -530,9 +531,14 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY, Qt::KeyboardM
Ric3DPickEvent viewerEventObject(pickItemInfos,
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;
}
@@ -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)
{
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 )
{
sm_pickEventHandlers.erase(it);
sm_defaultPickEventHandlers.erase(it);
break;
}
}
@@ -25,6 +25,7 @@
#include <QObject>
#include <QPointer>
class RicDefaultPickEventHandler;
class RicPickEventHandler;
class RimEclipseView;
class RimGeoMechView;
@@ -59,8 +60,8 @@ public:
void displayContextMenu(QMouseEvent* event);
void handlePickAction(int winPosX, int winPosY, Qt::KeyboardModifiers keyboardModifiers);
static void addPickEventHandler(RicPickEventHandler* pickEventHandler);
static void removePickEventHandler(RicPickEventHandler* pickEventHandler);
static void setPickEventHandler(RicPickEventHandler* pickEventHandler);
static void removePickEventHandlerIfActive(RicPickEventHandler* pickEventHandler);
cvf::Vec3d lastPickPositionInDomainCoords() const;
private:
@@ -75,6 +76,9 @@ private:
bool handleOverlayItemPicking(int winPosX, int winPosY);
static void addDefaultPickEventHandler(RicDefaultPickEventHandler* pickEventHandler);
static void removeDefaultPickEventHandler(RicDefaultPickEventHandler* pickEventHandler);
private:
size_t m_currentGridIdx;
size_t m_currentCellIndex;
@@ -82,5 +86,7 @@ private:
cvf::Vec3d m_currentPickPositionInDomainCoords;
caf::PdmPointer<Rim3dView> m_reservoirView;
QPointer<RiuViewer> m_viewer;
static std::vector<RicPickEventHandler*> sm_pickEventHandlers;
static RicPickEventHandler* sm_overridingPickHandler;
static std::vector<RicDefaultPickEventHandler*> sm_defaultPickEventHandlers;
};