#include #include #include #include #include #include #include #include "VMouse.h" #include static port_id = 1040; class VMouseWriter : public RpcWriter { public: VMouseWriter(const char* host, int port); void Request(int); }; VMouseWriter::VMouseWriter ( const char* host, int port ) : RpcWriter(host, port, true, false) {} void VMouseWriter::Request(int w) { RpcHdr rpchdr(0); *_server << rpchdr << w; _server->flush(); } VMouse::VMouse(const char* name, const char* host) : VMouse_core(name) { Graphic* parent; parent = _pbutton1->Parent(); parent->Remove(_pbutton1); parent = _pbutton2->Parent(); parent->Remove(_pbutton2); parent = _pbutton3->Parent(); parent->Remove(_pbutton3); _vwriter = new VMouseWriter(host, port_id); } VMouse::~VMouse () { delete _vwriter; } void VMouse::Handle (Event& e) { if (e.leftmouse) { Sim_Press(_button1, _pbutton1, e); } if (e.middlemouse) { Sim_Press(_button2, _pbutton2, e); } if (e.rightmouse) { Sim_Press(_button3, _pbutton3, e); } } void VMouse::Sim_Press(Graphic* orig, Graphic* porig, Event& e) { Canvas* screen = _myglass->GetCanvas(); Graphic* parent; if (e.eventType == DownEvent) { parent = orig->Parent(); if (parent != nil) { orig->Erase(screen); parent->Remove(orig); parent->Append(porig); porig->Draw(screen); if (e.leftmouse) { _vwriter->Request(1); } else if (e.middlemouse) { _vwriter->Request(2); } else if (e.rightmouse) { _vwriter->Request(3); } } } else if (e.eventType == UpEvent) { parent = porig->Parent(); if (parent != nil) { porig->Erase(screen); parent->Remove(porig); parent->Append(orig); orig->Draw(screen); } } }