00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef VRS_QT_REMOTELOOKAT_H
00032 #define VRS_QT_REMOTELOOKAT_H
00033
00034 #include <vrs/qt3/config.h>
00035 #include <vrs/sharedobj.h>
00036
00037 namespace VRS {
00038
00039 class TwoPointConnection;
00040 class LookAt;
00041 class Canvas;
00042 class Callback;
00043
00044 class VRS_QT3_API RemoteLookAt : public SharedObj {
00063 public:
00064
00065 RemoteLookAt(LookAt* target, TwoPointConnection* connection, Canvas* canvas);
00069 ~RemoteLookAt();
00070
00071 enum State { MasterState, SlaveState, IndependentState, MasterRequestedState, SlaveRequestedState };
00072 VRS_SERIALIZABLE_CLASS_ENUM(State);
00073 State getState() const;
00076 enum Role { MasterRole, SlaveRole, IndependentRole };
00077 VRS_SERIALIZABLE_CLASS_ENUM(Role);
00078 void sendRoleRequest(Role role);
00085 void answerRoleRequest(bool accept = true);
00089 void registerRoleChangeCB(Callback1<Role>* cb);
00100 void registerRoleChangeAnswerCB(Callback1<bool>* cb);
00105 void registerIndependentCB(Callback* cb);
00109 VRS_TYPEINFO(RemoteLookAt, SharedObj);
00110
00111 private:
00112
00113 void onReceive(SharedObj*);
00114 void onLookAtModification(SharedObj*);
00115
00116 State state_;
00117 SO<TwoPointConnection> connection_;
00118 SO<LookAt> lookat_;
00119 SO<Canvas> canvas_;
00120 SO<Callback1<Role> > roleChangeCB_;
00121 SO<Callback1<bool> > roleChangeAnswerCB_;
00122 SO<Callback> independentCB_;
00123
00124 SO<Callback1<SharedObj*> > modCB_;
00125 SO<Callback1<SharedObj*> > receiveCB_;
00126
00127 enum IncomingRequest { None, MasterReq, SlaveReq } incomingRequest_;
00128 VRS_SERIALIZABLE_CLASS_ENUM(IncomingRequest);
00129 };
00130
00131 }
00132
00133 #endif // VRS_REMOTELOOKAT_H