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