Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F425
bug3210.diff
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Authored By
xplanes
Jan 21 2010, 9:32 AM
2010-01-21 09:32:01 (UTC+1)
Size
12 KB
Referenced Files
None
Subscribers
None
bug3210.diff
View Options
Index: Core/Code/Controllers/mitkSlicesCoordinator.cpp
===================================================================
--- Core/Code/Controllers/mitkSlicesCoordinator.cpp (revision 21081)
+++ Core/Code/Controllers/mitkSlicesCoordinator.cpp (working copy)
@@ -19,6 +19,7 @@
#include <mitkApplicationCursor.h>
+#include "mitkBaseRenderer.h"
namespace mitk {
@@ -61,24 +62,35 @@
}
}
-void SlicesCoordinator::ResetMouseCursor()
+void SlicesCoordinator::ResetMouseCursor( BaseRenderer* renderer )
{
if ( m_MouseCursorSet )
{
- ApplicationCursor::GetInstance()->PopCursor();
+ vtkRenderWindow* vtkWindow = NULL;
+ if ( renderer != NULL )
+ {
+ vtkWindow = renderer->GetRenderWindow();
+ }
+ ApplicationCursor::GetInstance( )->PopCursor( vtkWindow );
m_MouseCursorSet = false;
}
}
-void SlicesCoordinator::SetMouseCursor( const char *xpm[], int hotspotX, int hotspotY )
+void SlicesCoordinator::SetMouseCursor( BaseRenderer* renderer, const char *xpm[], int hotspotX, int hotspotY )
{
+ vtkRenderWindow* vtkWindow = NULL;
+ if ( renderer != NULL )
+ {
+ vtkWindow = renderer->GetRenderWindow();
+ }
+
// Remove previously set mouse cursor
if ( m_MouseCursorSet )
{
- ApplicationCursor::GetInstance()->PopCursor();
+ ApplicationCursor::GetInstance( )->PopCursor( vtkWindow );
}
- ApplicationCursor::GetInstance()->PushCursor( xpm, hotspotX, hotspotY );
+ ApplicationCursor::GetInstance( )->PushCursor( vtkWindow, xpm, hotspotX, hotspotY );
m_MouseCursorSet = true;
}
Index: Core/Code/Controllers/mitkSlicesCoordinator.h
===================================================================
--- Core/Code/Controllers/mitkSlicesCoordinator.h (revision 21081)
+++ Core/Code/Controllers/mitkSlicesCoordinator.h (working copy)
@@ -27,6 +27,7 @@
class SliceNavigationController;
class Action;
class StateEvent;
+class BaseRenderer;
/**
* \brief Coordinates a list of SliceNavigationControllers.
@@ -75,7 +76,7 @@
*
* Should be used by subclasses and from external application instead
* of using QmitkApplicationCursor directly to avoid conflicts. */
- void ResetMouseCursor();
+ void ResetMouseCursor( BaseRenderer* renderer );
protected:
@@ -89,7 +90,7 @@
*
* Use this in subclasses instead of using QmitkApplicationCursor directly.
*/
- void SetMouseCursor( const char *xpm[], int hotspotX, int hotspotY );
+ void SetMouseCursor( BaseRenderer* renderer, const char *xpm[], int hotspotX, int hotspotY );
/** for implementation in subclasses */
virtual void OnSliceControllerAdded(SliceNavigationController* snc);
Index: Core/Code/Controllers/mitkSlicesRotator.cpp
===================================================================
--- Core/Code/Controllers/mitkSlicesRotator.cpp (revision 21081)
+++ Core/Code/Controllers/mitkSlicesRotator.cpp (working copy)
@@ -557,12 +557,14 @@
}
case AcROTATESTART:
{
- this->SetMouseCursor( rotate_cursor_xpm, 0, 0 );
+ BaseRenderer* renderer = stateEvent->GetEvent()->GetSender();
+ this->SetMouseCursor( renderer, rotate_cursor_xpm, 0, 0 );
break;
}
case AcROTATEEND:
{
- this->ResetMouseCursor();
+ BaseRenderer* renderer = stateEvent->GetEvent()->GetSender();
+ this->ResetMouseCursor( renderer );
break;
}
default:
Index: Core/Code/DataManagement/mitkApplicationCursor.cpp
===================================================================
--- Core/Code/DataManagement/mitkApplicationCursor.cpp (revision 21081)
+++ Core/Code/DataManagement/mitkApplicationCursor.cpp (working copy)
@@ -20,7 +20,7 @@
#include <iostream>
mitk::ApplicationCursor* mitk::ApplicationCursor::m_Instance = NULL;
-mitk::ApplicationCursorImplementation* mitk::ApplicationCursor::m_Implementation = NULL;
+std::map<vtkRenderWindow*, mitk::ApplicationCursorImplementation*> mitk::ApplicationCursor::m_Win2Instance;
namespace mitk {
@@ -38,42 +38,47 @@
return m_Instance;
}
-void ApplicationCursor::RegisterImplementation(ApplicationCursorImplementation* implementation)
+void ApplicationCursor::RegisterImplementation(
+ vtkRenderWindow *window,
+ ApplicationCursorImplementation* implementation)
{
- m_Implementation = implementation;
+ m_Win2Instance[ window ] = implementation;
}
-void ApplicationCursor::PushCursor(const char* XPM[], int hotspotX, int hotspotY)
+void ApplicationCursor::PushCursor( vtkRenderWindow *window, const char* XPM[], int hotspotX, int hotspotY)
{
- if (m_Implementation)
+ ApplicationCursorImplementation* instance = GetImpl( window );
+ if ( instance )
{
- m_Implementation->PushCursor(XPM, hotspotX, hotspotY);
+ instance->PushCursor(XPM, hotspotX, hotspotY);
}
else
{
- MITK_ERROR << "in mitk::ApplicationCursor::PushCursor(): no implementation registered." << std::endl;
+ MITK_ERROR << "in mitk::ApplicationCursor::GetCursorPosition(): no implementation registered." << std::endl;
throw std::logic_error("No implementation registered for mitk::ApplicationCursor.");
}
}
-void ApplicationCursor::PopCursor()
+void ApplicationCursor::PopCursor( vtkRenderWindow *window )
{
- if (m_Implementation)
+ ApplicationCursorImplementation* instance = GetImpl( window );
+ if (instance)
{
- m_Implementation->PopCursor();
+ instance->PopCursor();
}
else
{
- MITK_ERROR << "in mitk::ApplicationCursor::PopCursor(): no implementation registered." << std::endl;
+ MITK_ERROR << "in mitk::ApplicationCursor::SetCursorPosition(): no implementation registered." << std::endl;
throw std::logic_error("No implementation registered for mitk::ApplicationCursor.");
}
}
-const Point2I ApplicationCursor::GetCursorPosition()
+const Point2I ApplicationCursor::GetCursorPosition( vtkRenderWindow *window )
{
- if (m_Implementation)
+ ApplicationCursorImplementation* instance = GetImpl( window );
+ if (instance)
{
- return m_Implementation->GetCursorPosition();
+ return instance->GetCursorPosition();
}
else
{
@@ -82,11 +87,12 @@
}
}
-void ApplicationCursor::SetCursorPosition(const Point2I& p)
+void ApplicationCursor::SetCursorPosition( vtkRenderWindow *window, const Point2I& p)
{
- if (m_Implementation)
+ ApplicationCursorImplementation* instance = GetImpl( window );
+ if (instance)
{
- m_Implementation->SetCursorPosition(p);
+ instance->SetCursorPosition(p);
}
else
{
@@ -95,5 +101,26 @@
}
}
+ApplicationCursorImplementation* ApplicationCursor::GetImpl( vtkRenderWindow *window )
+{
+ ApplicationCursorImplementation* instance = NULL;
+ std::map<vtkRenderWindow*, mitk::ApplicationCursorImplementation*>::iterator it;
+ it = m_Win2Instance.find( window );
+
+ // When there's only one instance, use always NULL as key
+ // else, use the vtkRenderWindow pointer
+ if ( it == m_Win2Instance.end( ) )
+ {
+ instance = m_Win2Instance[ NULL ];
+ }
+ else
+ {
+ instance = m_Win2Instance[ window ];
+ }
+
+ return instance;
+}
+
} // namespace
+
Index: Core/Code/DataManagement/mitkApplicationCursor.h
===================================================================
--- Core/Code/DataManagement/mitkApplicationCursor.h (revision 21081)
+++ Core/Code/DataManagement/mitkApplicationCursor.h (working copy)
@@ -21,6 +21,8 @@
#include "mitkCommon.h"
#include "mitkVector.h"
+class vtkRenderWindow;
+
namespace mitk
{
@@ -70,31 +72,38 @@
/// This class is a singleton.
static ApplicationCursor* GetInstance();
- /// To be called by a toolkit specific ApplicationCursorImplementation.
- static void RegisterImplementation(ApplicationCursorImplementation* implementation);
+ /** To be called by a toolkit specific ApplicationCursorImplementation.
+ Each window will have its own cursor manager
+ */
+ static void RegisterImplementation(
+ vtkRenderWindow *window,
+ ApplicationCursorImplementation* implementation);
/// Change the current application cursor
- void PushCursor(const char* XPM[], int hotspotX = -1, int hotspotY = -1);
+ void PushCursor( vtkRenderWindow *window, const char* XPM[], int hotspotX = -1, int hotspotY = -1);
/// Restore the previous cursor
- void PopCursor();
+ void PopCursor( vtkRenderWindow *window );
/// Get absolute mouse position on screen
/// \return (-1, -1) if querying mouse position is not possible
- const Point2I GetCursorPosition();
+ const Point2I GetCursorPosition( vtkRenderWindow *window );
/// Set absolute mouse position on screen
- void SetCursorPosition(const Point2I&);
+ void SetCursorPosition( vtkRenderWindow *window, const Point2I&);
protected:
+ ///
+ ApplicationCursorImplementation* GetImpl( vtkRenderWindow *window );
+
/// Purposely hidden - singleton
ApplicationCursor();
private:
- static ApplicationCursorImplementation* m_Implementation;
+ static std::map<vtkRenderWindow*, mitk::ApplicationCursorImplementation*> m_Win2Instance;
static ApplicationCursor* m_Instance;
};
Index: CoreUI/Qmitk/QmitkApplicationCursor.cpp
===================================================================
--- CoreUI/Qmitk/QmitkApplicationCursor.cpp (revision 21081)
+++ CoreUI/Qmitk/QmitkApplicationCursor.cpp (working copy)
@@ -25,7 +25,7 @@
QmitkApplicationCursor::QmitkApplicationCursor()
{
- mitk::ApplicationCursor::RegisterImplementation(this);
+ mitk::ApplicationCursor::RegisterImplementation(NULL, this);
}
void QmitkApplicationCursor::PushCursor(const char* XPM[], int hotspotX, int hotspotY)
Index: CoreUI/Qmitk/QmitkStdMultiWidget.cpp
===================================================================
--- CoreUI/Qmitk/QmitkStdMultiWidget.cpp (revision 21081)
+++ CoreUI/Qmitk/QmitkStdMultiWidget.cpp (working copy)
@@ -1570,12 +1570,12 @@
break;
case PLANE_MODE_ROTATION:
- m_SlicesRotator->ResetMouseCursor();
+ m_SlicesRotator->ResetMouseCursor( NULL );
gi->RemoveListener( m_SlicesRotator );
break;
case PLANE_MODE_SWIVEL:
- m_SlicesSwiveller->ResetMouseCursor();
+ m_SlicesSwiveller->ResetMouseCursor( NULL );
gi->RemoveListener( m_SlicesSwiveller );
break;
}
@@ -1715,7 +1715,7 @@
// Notify MainTemplate GUI that this mode has been deselected
emit WidgetPlaneModeRotation( false );
- m_SlicesRotator->ResetMouseCursor();
+ m_SlicesRotator->ResetMouseCursor( NULL );
gi->RemoveListener( m_SlicesRotator );
break;
@@ -1723,7 +1723,7 @@
// Notify MainTemplate GUI that this mode has been deselected
emit WidgetPlaneModeSwivel( false );
- m_SlicesSwiveller->ResetMouseCursor();
+ m_SlicesSwiveller->ResetMouseCursor( NULL );
gi->RemoveListener( m_SlicesSwiveller );
break;
}
Index: Modules/MitkExt/Interactions/mitkRegionGrowingTool.cpp
===================================================================
--- Modules/MitkExt/Interactions/mitkRegionGrowingTool.cpp (revision 21081)
+++ Modules/MitkExt/Interactions/mitkRegionGrowingTool.cpp (working copy)
@@ -266,7 +266,7 @@
// 3.2.1 Remember Y cursor position and initial seed point
//m_ScreenYPositionAtStart = static_cast<int>(positionEvent->GetDisplayPosition()[1]);
- m_LastScreenPosition = ApplicationCursor::GetInstance()->GetCursorPosition();
+ m_LastScreenPosition = ApplicationCursor::GetInstance()->GetCursorPosition( NULL );
m_ScreenYDifference = 0;
m_SeedPointMemoryOffset = projectedPointIn2D[1] * m_OriginalPicSlice->n[0] + projectedPointIn2D[0];
@@ -335,8 +335,8 @@
{
ApplicationCursor* cursor = ApplicationCursor::GetInstance();
if (!cursor) return false;
- m_ScreenYDifference += cursor->GetCursorPosition()[1] - m_LastScreenPosition[1];
- cursor->SetCursorPosition( m_LastScreenPosition );
+ m_ScreenYDifference += cursor->GetCursorPosition(NULL)[1] - m_LastScreenPosition[1];
+ cursor->SetCursorPosition( NULL, m_LastScreenPosition );
m_LowerThreshold = m_InitialLowerThreshold + static_cast<int>( m_ScreenYDifference * m_MouseDistanceScaleFactor );
if (m_LowerThreshold < 1) m_LowerThreshold = 1;
File Metadata
Details
Attached
Mime Type
text/plain
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
409
Default Alt Text
bug3210.diff (12 KB)
Attached To
Mode
T3210: Modified mitk::ApplicationCursor to work with wxWidgets using vtkRenderWindow to map all the implementations
Attached
Detach File
Event Timeline
xplanes
added a comment.
Jan 21 2010, 9:32 AM
2010-01-21 09:32:01 (UTC+1)
Comment Actions
Unified patch
Log In to Comment