MeVisLab Resolution Independence API
SoQtViewerProxy.h
Go to the documentation of this file.
1 /*************************************************************************************
2 **
3 ** Copyright 2007, MeVis Medical Solutions AG
4 **
5 ** The user may use this file in accordance with the license agreement provided with
6 ** the Software or, alternatively, in accordance with the terms contained in a
7 ** written agreement between the user and MeVis Medical Solutions AG.
8 **
9 ** For further information use the contact form at https://www.mevislab.de/contact
10 **
11 **************************************************************************************/
12 
13 #ifndef SO_QT_VIEWER_PROXY_H
14 #define SO_QT_VIEWER_PROXY_H
15 
17 
18 #include <QCursor>
19 
20 #include <SoViewerProxy.h>
21 
22 #include <Inventor/nodes/SoSubNode.h>
23 #include <Inventor/nodes/SoGroup.h>
24 
25 class SoQtRenderArea;
26 class SoAction;
27 
29 {
31 
32  /* This class also implements an easy mechanism to override predefined cursors:
33  Put a property called "OverrideCursorDirectory" into your MeVisLab
34  preferences file and point it to the directory with the alternative cursors in
35  PNG graphics format.
36 
37  Preferred cursor size is 32x32, the hot spot is always in the middle of the image.
38  If you need another hotspot, you can add the hotspot location in the filename
39  after an exclamation mark (but before the file ending), like
40 
41  otherCursor11!8,12.png
42 
43  For support of high resolution displays, add an additional file of size 64x64,
44  omitting the hotspot location, like this:
45 
46  otherCursor11@2x.png
47 
48  The base file name is usually the name of the enumeration value in lower case
49  with the underscores removed and the letters after the underscores in upper case.
50  Then append an eventual hotspot location and ".png".
51  Exceptions from this rule - with additional upper case letters - are:
52  moveFDiagCursor.png
53  moveBDiagCursor.png
54  moveInOutCursor.png
55  rotateXYCursor.png
56  crossFreeFormCursor.png
57  crossPolyLineCursor.png
58  */
59 
60 public:
62  SoQtViewerProxy (SoQtRenderArea* renderArea = nullptr);
64  ~SoQtViewerProxy() override {}
65 
68  void setCursor (int shapeID) override;
69 
72  void setForceCursor(int shapeID) override;
73 
75  int getCursor() { return _requestedShape; }
76 
78  bool hasShape (int shapeID) override;
79 
85  int defineCursor (const char* cursorImgFileName, int hotSpotX = -1, int hotSpotY = -1,
86  int id = -1) override;
87 
89  static bool forceDefineCursor (int id, const char* cursorImgFileName, int hotSpotX = -1, int hotSpotY = -1);
90 
98 
100  virtual void resetCursor();
101 
103  virtual void evaluateCursor();
104 
108  static void resetCursorCB (void* userData, SoAction* action);
109 
115  static void evaluateCursorCB (void* userData, SoAction* action);
116 
120  virtual bool actionMayChangeCursor(SoAction* action);
122 
125  bool getCurrentCursorPosition(int& x, int& y) override;
126 
130 
132  bool isInitialRendering() const override;
133 
135  bool isUserInterationEventInQueue() const override;
136 
138  static QCursor getCursor(int shapeID);
139 
141  static QPixmap getPixmap(int shapeID);
142 
144  static QPixmap getPixmap2x(int shapeID);
145 
149  static int getShapeID(const QCursor& cursor);
150 
152  static bool isSameCursor(const QCursor& a, const QCursor& b);
153 
156  double getDevicePixelRatio() override;
157 
158 protected:
160  SoQtRenderArea* _renderArea;
161 
164 
167 };
168 
169 //===========================================================================
170 
174 {
175  SO_NODE_HEADER(SoQtViewerProxyNode);
176 
177 public:
180  ~SoQtViewerProxyNode() override {}
181 
183  static void initClass();
184 
186  void GLRender(SoGLRenderAction *action) override;
187  void handleEvent(SoHandleEventAction *action) override;
188 
189 protected:
191 };
192 
193 
194 #endif // __SoQtViewerProxy_H
#define INVENTORGUIWRAPPER_API
Library initialization interface of the inventor GUI wrapper.
SoQtViewerProxyNode will put a SoViewerElement with the given SoQtViewerProxy into the scene and also...
~SoQtViewerProxyNode() override
void GLRender(SoGLRenderAction *action) override
set SoQtViewerProxy before scene traversal
SoQtViewerProxyNode(SoQtViewerProxy *proxy=nullptr)
Constructor.
SoQtViewerProxy * _proxy
static void initClass()
Initializes this class.
void handleEvent(SoHandleEventAction *action) override
bool isInitialRendering() const override
returns true if the viewer does the initial rendering after it became visible
int getCursor()
Returns the requested cursor shape.
static bool isSameCursor(const QCursor &a, const QCursor &b)
Compare cursor shapes:
static QPixmap getPixmap(int shapeID)
Get the QPixmap associated with the given shapeID in 1x resolution.
bool isUserInterationEventInQueue() const override
returns if a user interaction event is the the GUI event queue
bool getCurrentCursorPosition(int &x, int &y) override
Get current cursor position relative to the viewing window.
virtual void resetCursor()
reset stored cursor shape (must be called before event handling traversal)
static int getShapeID(const QCursor &cursor)
Get the shape ID associated with the given cursor.
static QCursor getCursor(int shapeID)
Get the QCursor associated with the given shapeID.
SoQtRenderArea * _renderArea
pointer to the actual viewer:
static void resetCursorCB(void *userData, SoAction *action)
This callback can be used together with a SoCallback node, userData must be set to the pointer to thi...
static void initializeDefaultCursors()
On some platforms it may not be possible to initialize the default cursors at any time,...
static bool forceDefineCursor(int id, const char *cursorImgFileName, int hotSpotX=-1, int hotSpotY=-1)
defineCursor simply calls this method, which will overwrite previous shapes
void setForceCursor(int shapeID) override
Enforce setting the cursor, even from mouseOverUpdates.
virtual bool actionMayChangeCursor(SoAction *action)
Returns if the given action may change the cursor, this is typically the case for SoHandleEvent actio...
SoQtViewerProxy(SoQtRenderArea *renderArea=nullptr)
This class implements access to the state of the SoQtMeVis viewer.
bool _cursorEnforced
cursor setting was enforced
int defineCursor(const char *cursorImgFileName, int hotSpotX=-1, int hotSpotY=-1, int id=-1) override
Define new cursor shape - successful operation is only guaranteed with PNG-Images with size 32x32,...
virtual void evaluateCursor()
evaluate set cursor shape (must be called after event handling traversal)
static QPixmap getPixmap2x(int shapeID)
Get the QPixmap associated with the given shapeID in 2x resolution.
static void evaluateCursorCB(void *userData, SoAction *action)
This callback can be used together with a SoCallback node, userData must be set to the pointer to thi...
void setCursor(int shapeID) override
Set cursor of viewer to pre- or user-defined shape, invalid positive values will set cursor to defaul...
int _requestedShape
currently requested cursor shape
~SoQtViewerProxy() override
Destructor.
bool hasShape(int shapeID) override
Check if this shape has already been defined.
This class gives access to state of a viewer during scene graph traversal.
Definition: SoViewerProxy.h:30
double getDevicePixelRatio() override
Returns the ratio between physical pixels and device-independent pixels for the viewer.