# HG changeset patch # User František Kučera # Date 1551972051 -3600 # Node ID 49560660d230e447e7d76ec98282a7dd14e22cbb # Parent 6ba51911d539f7f37070dee59131f9990498a5a5 emit MotionEvent and ButtonEvent + display button status diff -r 6ba51911d539 -r 49560660d230 src/SpacenavReceiver.h --- a/src/SpacenavReceiver.h Thu Mar 07 15:41:38 2019 +0100 +++ b/src/SpacenavReceiver.h Thu Mar 07 16:20:51 2019 +0100 @@ -22,7 +22,8 @@ #include "SpacenavWrapper.h" -Q_DECLARE_METATYPE(SpacenavWrapper::Event) +Q_DECLARE_METATYPE(SpacenavWrapper::Event::MotionEvent) +Q_DECLARE_METATYPE(SpacenavWrapper::Event::ButtonEvent) class SpacenavReceiver : public QThread { Q_OBJECT @@ -37,10 +38,12 @@ void run() { while (true) { SpacenavWrapper::Event e = spnav.waitEvent(); - emit spacenavEvent(e); + if (e.type == SpacenavWrapper::Event::Type::MOTION) emit spacenavMotionEvent(e.motion); + if (e.type == SpacenavWrapper::Event::Type::BUTTON) emit spacenavButtonEvent(e.button); } } signals: - void spacenavEvent(SpacenavWrapper::Event e); + void spacenavMotionEvent(SpacenavWrapper::Event::MotionEvent e); + void spacenavButtonEvent(SpacenavWrapper::Event::ButtonEvent e); }; \ No newline at end of file diff -r 6ba51911d539 -r 49560660d230 src/SpacenavWindow.cpp --- a/src/SpacenavWindow.cpp Thu Mar 07 15:41:38 2019 +0100 +++ b/src/SpacenavWindow.cpp Thu Mar 07 16:20:51 2019 +0100 @@ -20,11 +20,19 @@ SpacenavWindow::SpacenavWindow() { widget.setupUi(this); + resize(640, 480); + setWindowTitle("Spacenav Demo"); } SpacenavWindow::~SpacenavWindow() { } -void SpacenavWindow::spacenavEvent(SpacenavWrapper::Event e) { - setWindowTitle("event!"); +void SpacenavWindow::spacenavMotionEvent(SpacenavWrapper::Event::MotionEvent e) { + setWindowTitle("m event!"); } + +void SpacenavWindow::spacenavButtonEvent(SpacenavWrapper::Event::ButtonEvent e) { + setWindowTitle("b event!"); + if (e.number == 0) widget.button0->setChecked(e.pressed); + if (e.number == 1) widget.button1->setChecked(e.pressed); +} diff -r 6ba51911d539 -r 49560660d230 src/SpacenavWindow.h --- a/src/SpacenavWindow.h Thu Mar 07 15:41:38 2019 +0100 +++ b/src/SpacenavWindow.h Thu Mar 07 16:20:51 2019 +0100 @@ -26,7 +26,8 @@ SpacenavWindow(); virtual ~SpacenavWindow(); public slots: - void spacenavEvent(SpacenavWrapper::Event e); + void spacenavMotionEvent(SpacenavWrapper::Event::MotionEvent e); + void spacenavButtonEvent(SpacenavWrapper::Event::ButtonEvent e); private: Ui::SpacenavWindow widget; }; diff -r 6ba51911d539 -r 49560660d230 src/SpacenavWindow.ui --- a/src/SpacenavWindow.ui Thu Mar 07 15:41:38 2019 +0100 +++ b/src/SpacenavWindow.ui Thu Mar 07 16:20:51 2019 +0100 @@ -14,17 +14,49 @@ SpacenavWindow - + - 60 - 60 - 88 - 34 + 130 + 40 + 111 + 111 + + + + + + + 40 + 40 + 80 + 111 - PushButton + left + + + true + + + false + + + + + + 260 + 40 + 80 + 111 + + + + right + + + true @@ -34,7 +66,7 @@ 0 0 800 - 30 + 23 diff -r 6ba51911d539 -r 49560660d230 src/SpacenavWrapper.cpp --- a/src/SpacenavWrapper.cpp Thu Mar 07 15:41:38 2019 +0100 +++ b/src/SpacenavWrapper.cpp Thu Mar 07 16:20:51 2019 +0100 @@ -58,19 +58,22 @@ spnav_event event; if (spnav_wait_event(&event)) { - - // TODO: copy fields + e.type = event.type == SPNAV_EVENT_MOTION ? SpacenavWrapper::Event::Type::MOTION : SpacenavWrapper::Event::Type::BUTTON; - - // TODO: remove logging if (event.type == SPNAV_EVENT_MOTION) { - std::wcout << L"xxx motion event: t(" << event.motion.x << L", " << event.motion.y << L", " << event.motion.z << L") "; - std::wcout << L"r(" << event.motion.rx << L", " << event.motion.ry << L", " << event.motion.rz << L")" << std::endl; + e.motion.x = event.motion.x; + e.motion.y = event.motion.y; + e.motion.z = event.motion.z; + e.motion.rx = event.motion.rx; + e.motion.ry = event.motion.ry; + e.motion.rz = event.motion.rz; + e.motion.type = event.motion.type; + e.motion.period = event.motion.period; } else { /* SPNAV_EVENT_BUTTON */ - std::wcout << L"xxx button " << (event.button.press ? "press" : "release") << L" event b(" << event.button.bnum << L")" << std::endl; + e.button.number = event.button.bnum; + e.button.pressed = event.button.press; } - return e; } else { // TODO: throw exception diff -r 6ba51911d539 -r 49560660d230 src/SpacenavWrapper.h --- a/src/SpacenavWrapper.h Thu Mar 07 15:41:38 2019 +0100 +++ b/src/SpacenavWrapper.h Thu Mar 07 16:20:51 2019 +0100 @@ -29,6 +29,35 @@ public: class Event { + public: + + enum class Type { + MOTION, + BUTTON + }; + + class MotionEvent { + public: + int x; + int y; + int z; + int rx; + int ry; + int rz; + int type; + unsigned int period; + }; + + class ButtonEvent { + public: + int number; + bool pressed; + }; + + Type type; + MotionEvent motion; + ButtonEvent button; + }; SpacenavWrapper(); diff -r 6ba51911d539 -r 49560660d230 src/spacenav-demo-qt.cpp --- a/src/spacenav-demo-qt.cpp Thu Mar 07 15:41:38 2019 +0100 +++ b/src/spacenav-demo-qt.cpp Thu Mar 07 16:20:51 2019 +0100 @@ -32,7 +32,8 @@ SpacenavWindow w; w.show(); - QObject::connect(&t, &SpacenavReceiver::spacenavEvent, &w, &SpacenavWindow::spacenavEvent, Qt::ConnectionType::QueuedConnection); + QObject::connect(&t, &SpacenavReceiver::spacenavMotionEvent, &w, &SpacenavWindow::spacenavMotionEvent, Qt::ConnectionType::QueuedConnection); + QObject::connect(&t, &SpacenavReceiver::spacenavButtonEvent, &w, &SpacenavWindow::spacenavButtonEvent, Qt::ConnectionType::QueuedConnection); t.start(); int qtResultCode = app.exec();