src/SpacenavWindow.cpp
author František Kučera <franta-hg@frantovo.cz>
Thu, 07 Mar 2019 18:33:22 +0100
branchv_0
changeset 9 d3716f03efcd
parent 8 f351c261cbfd
child 11 aaa89fe98b63
permissions -rw-r--r--
display status – connection type (domain socket or X11)

/**
 * Spacenav Demo Qt
 * Copyright © 2019 František Kučera (Frantovo.cz, GlobalCode.info)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

#include "SpacenavWindow.h"

SpacenavWindow::SpacenavWindow() {
	widget.setupUi(this);
	resize(640, 480);
	setWindowTitle("Spacenav Demo");

	std::vector<QCheckBox*> buttons{ widget.button0, widget.button1};
	for (QCheckBox* b : buttons) b->setEnabled(false);

	std::vector<QProgressBar*> motions{
		widget.motionX, widget.motionY, widget.motionZ,
		widget.rotationX, widget.rotationY, widget.rotationZ
	};

	for (QProgressBar* m : motions) {
		m->setMinimum(-500);
		m->setMaximum(500);
		m->setValue(0);
		m->setFormat("%v");
	}

	widget.period->setMinimum(0);
	widget.period->setMaximum(100);
	widget.period->setValue(0);
	widget.period->setFormat("%v ms");
	widget.period->setToolTip("duration in milliseconds from the last change");
}

SpacenavWindow::~SpacenavWindow() {
}

void SpacenavWindow::spacenavMotionEvent(SpacenavWrapper::Event::MotionEvent e) {
	widget.motionX->setValue(e.x);
	widget.motionY->setValue(e.y);
	widget.motionZ->setValue(e.z);
	
	widget.rotationX->setValue(e.rx);
	widget.rotationY->setValue(e.ry);
	widget.rotationZ->setValue(e.rz);
	
	widget.period->setValue(e.period);
	// std::wcerr << L"period: " << e.period << std::endl;
}

void SpacenavWindow::spacenavButtonEvent(SpacenavWrapper::Event::ButtonEvent e) {
	if (e.number == 0) widget.button0->setChecked(e.pressed);
	if (e.number == 1) widget.button1->setChecked(e.pressed);
}

void SpacenavWindow::spacenavConnectionStatus(SpacenavWrapper::ConnectionStatus s) {
	if (s == SpacenavWrapper::ConnectionStatus::DOMAIN_SOCKET) widget.connection->setText("connected through: domain socket");
	if (s == SpacenavWrapper::ConnectionStatus::X11) widget.connection->setText("connected through: X11");
}