1 #pragma once
2 
3 #ifndef TNZ_CURSOR_INCLUDED
4 #define TNZ_CURSOR_INCLUDED
5 
6 //#include "tfilepath.h"
7 #include "tw/tw.h"
8 
9 #undef DVAPI
10 #undef DVVAR
11 #ifdef TWIN_EXPORTS
12 #define DVAPI DV_EXPORT_API
13 #define DVVAR DV_EXPORT_VAR
14 #else
15 #define DVAPI DV_IMPORT_API
16 #define DVVAR DV_IMPORT_VAR
17 #endif
18 
19 #ifdef WIN32
20 #pragma warning(push)
21 #pragma warning(disable : 4251)
22 #endif
23 
24 // forward decls
25 class TFilePath;
26 class TMouse;
27 class TCursor;
28 
29 class DVAPI TCursorFactory {
30 protected:
TCursorFactory()31   TCursorFactory() {}
32 
33   // typedef vector<TCursor*> CursorList;
34   // static CursorList m_cursorList;
35   typedef TCursor *CursorList[100];
36   static CursorList m_cursorList;
37 
38   static bool m_init;
39 
40 public:
41   enum {
42     CURSOR_NONE,                   // no cursor...
43     CURSOR_DEFAULT = CURSOR_NONE,  // window class cursor...
44     CURSOR_ARROW,
45     CURSOR_HAND,
46     CURSOR_HOURGLASS,
47     CURSOR_NO,
48     //#ifdef WIN32
49     CURSOR_DUMMY,
50 //#endif
51 #ifndef WIN32
52     CURSOR_DND,
53     CURSOR_QUESTION,
54 #endif
55     // ....
56     NUM_STOCK_CURSORS,
57     LAST_STOCK_CURSOR = NUM_STOCK_CURSORS - 1
58   };
59 
60   // public API
61   static void defineCursor(TWidget::CursorIndex new_cursor_id,
62                            const TFilePath &cursor_filename);
63   static void defineCursorAs(TWidget::CursorIndex new_cursor_id,
64                              TWidget::CursorIndex source);
65 
66 protected:
67   friend class TMouse;
68   static TCursor *getCursor(TWidget::CursorIndex cursor_id);
69   // PD methods
70   static TCursor *loadCursorFromFile(const TFilePath &cursor_filename);
71   static void init();
72 };
73 
74 class DVAPI TMouse {
75 public:
~TMouse()76   ~TMouse() {}
77 
78   // PD methods
79   void pushCursor(TWidget::CursorIndex id);
80   void popCursor();
81 
82   void setCursor(TWidget::CursorIndex id);
83 
84   enum CursorMode { MODE_NORMAL, MODE_HOURGLASS };
85   void setCursorMode(CursorMode mode);
86   // CursorMode getCursorMode();
87 
88 private:
89   void setCursor(TCursor *);
90   TWidget::CursorIndex m_currentCursorId;
91   // to enforce singleton...
92   TMouse();
93 
94 protected:
95   CursorMode m_cursorMode;
96 
97 public:
98   static TMouse theMouse;
99 };
100 
101 class DVAPI THourglassCursor {
102 public:
THourglassCursor()103   THourglassCursor() { TMouse::theMouse.setCursorMode(TMouse::MODE_HOURGLASS); }
~THourglassCursor()104   ~THourglassCursor() { TMouse::theMouse.setCursorMode(TMouse::MODE_NORMAL); }
105 };
106 
107 #ifdef WIN32
108 #pragma warning(pop)
109 #endif
110 
111 #endif
112