![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: $ $Revision: $ $State: $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 00015 #include <vrvCore/vrvCore.h> 00016 #include <vrvUtil/signalslib.h> 00017 #include <vrvUtil/event_signal.h> 00018 #include <vrvUtil/DtVirtualBaseClass.h> 00019 #include <vrvCore/DtUniqueID.h> 00020 00021 namespace makVrv 00022 { 00023 00024 class DtWidgetAgent; 00025 class DtWidgetSignaler; 00026 class DtSharedSettingsManager; 00027 class DtEventQueueInterface; 00028 00031 class DT_DLL_VRVCORE DtWidgetEventSignals 00032 { 00033 public: 00034 00036 void connectAll(DtWidgetEventSignals& emmitter); 00037 00039 boost::signal<void (int x, int y)> signal_mouseEnter; 00040 00042 boost::signal<void (int x, int y)> signal_mouseMove; 00043 00045 boost::signal<void ()> signal_mouseLeave; 00046 00048 boost::signal<void (int button)> signal_mouseButtonPress; 00049 00051 boost::signal<void (int button)> signal_mouseButtonRelease; 00052 00053 protected: 00054 void emitMouseEnter(int x, int y); 00055 void emitMouseMove(int x,int y); 00056 void emitMouseLeave(); 00057 void emitMouseButtonPress(int button); 00058 void emitMouseButtonRelease(int button); 00059 00060 }; 00061 00066 class DT_DLL_VRVCORE DtWidgetInstanceSignaler : public DtWidgetEventSignals 00067 { 00068 public: 00069 DtWidgetInstanceSignaler( DtWidgetSignaler& widgetSignaler, 00070 DtWidgetAgent& agent); 00071 ~DtWidgetInstanceSignaler(); 00072 00074 const DtWidgetAgent& widgetAgent() const; 00075 00076 protected: 00077 DtWidgetAgent& myAgent; 00078 DtWidgetSignaler& mySignaler; 00079 00080 }; 00081 00082 00088 class DT_DLL_VRVCORE DtWidgetSignaler : public DtVirtualBaseClass 00089 { 00090 public: 00091 00092 friend class DtWidgetInstanceSignaler; 00093 friend class DtWidgetPicker; 00094 00097 static DtWidgetSignaler& instance(const DtSharedSettingsManager&); 00098 00101 static DtWidgetSignaler& instance(DtEventQueueInterface&); 00102 00106 static DtWidgetSignaler* findInstance(DtEventQueueInterface*); 00107 00109 virtual ~DtWidgetSignaler(); 00110 00111 void emitMouseEntered(DtUniqueID, int x, int y); 00112 void emitMouseMoved(DtUniqueID, int x, int y); 00113 void emitMouseLeft(DtUniqueID); 00114 void emitMouseButtonPressed(DtUniqueID, int button); 00115 void emitMouseButtonReleased(DtUniqueID, int button); 00116 00117 protected: 00118 00119 //Signal emitted when changing an element attribute has been requested. 00120 event_signal< void(DtUniqueID, int x, int y)> signal_mouseEntered; 00121 event_signal< void(DtUniqueID, int x, int y)> signal_mouseMoved; 00122 event_signal< void(DtUniqueID) > signal_mouseLeft; 00123 event_signal< void(DtUniqueID, int button) > signal_mouseButtonPressed; 00124 event_signal< void(DtUniqueID, int button) > signal_mouseButtonReleased; 00125 00126 void dispatch_mouseEntered(DtUniqueID, int x, int y); 00127 void dispatch_mouseMoved(DtUniqueID, int x, int y); 00128 void dispatch_mouseLeft(DtUniqueID); 00129 void dispatch_mouseButtonPressed(DtUniqueID,int button); 00130 void dispatch_mouseButtonReleased(DtUniqueID,int button); 00131 00132 00133 protected: 00134 DtWidgetSignaler(DtEventQueueInterface& eqi); 00135 00136 void addInstance(DtWidgetInstanceSignaler*); 00137 void removeInstance(DtWidgetInstanceSignaler*); 00138 00139 typedef std::map<DtUniqueID,DtWidgetInstanceSignaler*> WidgetInstanceMap; 00140 WidgetInstanceMap myInstances; 00141 00142 private: 00143 DtWidgetSignaler(const DtWidgetSignaler&); 00144 DtWidgetSignaler& operator=(const DtWidgetSignaler&); 00145 }; 00146 00147 } 00148