# HG changeset patch # User František Kučera # Date 1567120932 -7200 # Node ID 2705911938b4b0444ff4e50b9126d6c6d34d3441 # Parent 00783e323e66a7b139b1787eb8f5bbe780ea5d32 GUI for mouse configuration over D-Bus daemon diff -r 00783e323e66 -r 2705911938b4 cadMousePro-gui/nbproject/configurations.xml --- a/cadMousePro-gui/nbproject/configurations.xml Thu Aug 29 22:20:18 2019 +0200 +++ b/cadMousePro-gui/nbproject/configurations.xml Fri Aug 30 01:22:12 2019 +0200 @@ -61,6 +61,7 @@ + MouseMainWindow.cpp MouseMainWindow.h cadMouseProGUI.cpp @@ -69,6 +70,9 @@ displayName="cadMousePro-gui_autogen" projectFiles="true" root="build/Debug/src/cadMousePro-gui_autogen"> + + build/Debug/src/cadMousePro-gui_autogen/EWIEGA46WW/moc_MouseMainWindow.cpp + build/Debug/src/cadMousePro-gui_autogen/S5VNLJ26FI/moc_Proxy.cpp @@ -131,6 +135,11 @@ + + /usr/include/x86_64-linux-gnu/qt5/QtDBus build/qt/src/generated-sources build/qt/src/cadMousePro-gui_autogen/S5VNLJ26FI + src + build/qt/src/cadMousePro-gui_autogen/EWIEGA46WW + /usr/include/x86_64-linux-gnu/qt5/QtGui + /usr/include/x86_64-linux-gnu/qt5/QtWidgets build/qt/src/cadMousePro-gui_autogen /usr/include/x86_64-linux-gnu/qt5 build/qt/src @@ -205,20 +218,6 @@ - - - - /usr/include/x86_64-linux-gnu/qt5/QtCore - /usr/include/x86_64-linux-gnu/qt5/QtDBus - build/Debug/src/generated-sources - /usr/include/x86_64-linux-gnu/qt5/QtWidgets - src - /usr/include/x86_64-linux-gnu/qt5/QtGui - build/Debug/src - /usr/include/x86_64-linux-gnu/qt5 - - - @@ -251,14 +250,38 @@ src build/Debug/src/cadMousePro-gui_autogen/EWIEGA46WW /usr/include/x86_64-linux-gnu/qt5/QtGui + /usr/include/x86_64-linux-gnu/qt5/QtWidgets build/Debug/src/cadMousePro-gui_autogen /usr/include/x86_64-linux-gnu/qt5 build/Debug/src + + + + /usr/include/x86_64-linux-gnu/qt5/QtCore + /usr/include/x86_64-linux-gnu/qt5/QtWidgets + /usr/include/x86_64-linux-gnu/qt5/QtDBus + build/Debug/src/generated-sources + src + /usr/include/x86_64-linux-gnu/qt5/QtGui + /usr/include/x86_64-linux-gnu/qt5 + build/Debug/src + + + + + src + /usr/include/x86_64-linux-gnu/qt5/QtCore + /usr/include/x86_64-linux-gnu/qt5/QtGui + /usr/include/x86_64-linux-gnu/qt5/QtWidgets + /usr/include/x86_64-linux-gnu/qt5/QtDBus + /usr/include/x86_64-linux-gnu/qt5 + build/qt/src + @@ -291,6 +314,8 @@ true + + diff -r 00783e323e66 -r 2705911938b4 cadMousePro-gui/src/CMakeLists.txt --- a/cadMousePro-gui/src/CMakeLists.txt Thu Aug 29 22:20:18 2019 +0200 +++ b/cadMousePro-gui/src/CMakeLists.txt Fri Aug 30 01:22:12 2019 +0200 @@ -30,6 +30,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/generated-sources/Proxy.h ${CMAKE_CURRENT_BINARY_DIR}/generated-sources/Proxy.cpp MouseMainWindow.h + MouseMainWindow.cpp cadMouseProGUI.cpp ) diff -r 00783e323e66 -r 2705911938b4 cadMousePro-gui/src/MouseMainWindow.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cadMousePro-gui/src/MouseMainWindow.cpp Fri Aug 30 01:22:12 2019 +0200 @@ -0,0 +1,96 @@ +/** + * cadMousePro + * 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 . + */ +#include +#include + +#include "MouseMainWindow.h" + +MouseMainWindow::MouseMainWindow() { + proxy = new InfoGlobalcodeMouseCadMouseProInterface("info.globalcode.mouse.cadMousePro", "/info/globalcode/mouse/cadMousePro", connection, this); + + resize(640, 480); + setWindowTitle("cadMousePro"); + centralwidget = new QWidget(this); + formLayout = new QFormLayout(centralwidget); + + int f = 0; + + formLayout->setWidget(f++, QFormLayout::LabelRole, new QLabel("How does the mouse feel:", centralwidget)); + + statusProxy->setEnabled(false); + statusUPower->setEnabled(false); + statusDevice->setEnabled(false); + + formLayout->setWidget(f++, QFormLayout::FieldRole, statusProxy); + formLayout->setWidget(f++, QFormLayout::FieldRole, statusUPower); + formLayout->setWidget(f++, QFormLayout::FieldRole, statusDevice); + + + + QPushButton* refreshButton = new QPushButton("Refresh", this); + formLayout->setWidget(f++, QFormLayout::FieldRole, refreshButton); + connect(refreshButton, &QPushButton::clicked, this, &MouseMainWindow::refresh); + + + + formLayout->setWidget(f++, QFormLayout::LabelRole, new QLabel("Talk to your mouse:", centralwidget)); + + configureLiftOffDetection->setChecked(true); + formLayout->setWidget(f++, QFormLayout::FieldRole, configureLiftOffDetection); + formLayout->setWidget(f++, QFormLayout::FieldRole, configureSmartScrolling); + configureFrequency250->setChecked(true); + formLayout->setWidget(f++, QFormLayout::FieldRole, configureFrequency125); + formLayout->setWidget(f++, QFormLayout::FieldRole, configureFrequency250); + formLayout->setWidget(f++, QFormLayout::FieldRole, configureFrequency500); + formLayout->setWidget(f++, QFormLayout::FieldRole, configureFrequency1000); + + QPushButton* configureButton = new QPushButton("Configure", this); + configureButton->setToolTip("n.b. current interface is write-only and the controls above just configures the mouse – does not show current configuration"); + formLayout->setWidget(f++, QFormLayout::FieldRole, configureButton); + connect(configureButton, &QPushButton::clicked, this, &MouseMainWindow::configure); + + + message->setReadOnly(true); + formLayout->setWidget(f++, QFormLayout::LabelRole, new QLabel("Mouse responds:", this)); + formLayout->setWidget(f++, QFormLayout::FieldRole, message); + + setCentralWidget(centralwidget); + refresh(); +} + +void MouseMainWindow::refresh() { + statusProxy->setChecked(proxy->isValid()); + statusDevice->setChecked(proxy->devicePresent()); + +} + +void MouseMainWindow::configure() { + int frequency; // TODO: get value from the group + if (configureFrequency125->isChecked()) frequency = 125; + else if (configureFrequency250->isChecked()) frequency = 250; + else if (configureFrequency500->isChecked()) frequency = 500; + else if (configureFrequency1000->isChecked()) frequency = 1000; + else frequency = 250; + + auto response = proxy->configure(configureLiftOffDetection->isChecked(), configureSmartScrolling->isChecked(), frequency); + + response.waitForFinished(); + if (response.isError()) message->setText("Error: " + response.error().message()); + else message->setText("mouse configured"); + +} diff -r 00783e323e66 -r 2705911938b4 cadMousePro-gui/src/MouseMainWindow.h --- a/cadMousePro-gui/src/MouseMainWindow.h Thu Aug 29 22:20:18 2019 +0200 +++ b/cadMousePro-gui/src/MouseMainWindow.h Fri Aug 30 01:22:12 2019 +0200 @@ -18,18 +18,43 @@ #pragma once #include +#include +#include +#include +#include +#include +#include + +#include "generated-sources/Proxy.h" class MouseMainWindow : public QMainWindow { - Q_OBJECT public: - MouseMainWindow() { - resize(640, 480); - setWindowTitle("cadMousePro"); - - } + MouseMainWindow(); virtual ~MouseMainWindow() { } +private: + QWidget* centralwidget; + QFormLayout* formLayout; + QCheckBox* statusProxy = new QCheckBox("connected to Daemon", this); + QCheckBox* statusUPower = new QCheckBox("connected to UPower", this); + QCheckBox* statusDevice = new QCheckBox("present", this); + + QCheckBox* configureSmartScrolling = new QCheckBox("smart scrolling (free wheel)", this); + QCheckBox* configureLiftOffDetection = new QCheckBox("lift-off detection", this); + QRadioButton* configureFrequency125 = new QRadioButton("125 Hz", this); + QRadioButton* configureFrequency250 = new QRadioButton("250 Hz", this); + QRadioButton* configureFrequency500 = new QRadioButton("500 Hz", this); + QRadioButton* configureFrequency1000 = new QRadioButton("1000 Hz", this); + + QLineEdit* message = new QLineEdit(this); + + QDBusConnection connection = QDBusConnection::systemBus(); + InfoGlobalcodeMouseCadMouseProInterface* proxy; + +private slots: + void refresh(); + void configure(); }; \ No newline at end of file diff -r 00783e323e66 -r 2705911938b4 cadMousePro-gui/src/cadMouseProGUI.cpp --- a/cadMousePro-gui/src/cadMouseProGUI.cpp Thu Aug 29 22:20:18 2019 +0200 +++ b/cadMousePro-gui/src/cadMouseProGUI.cpp Fri Aug 30 01:22:12 2019 +0200 @@ -15,34 +15,15 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include +#include -#include -#include - -#include "generated-sources/Proxy.h" #include "MouseMainWindow.h" int main(int argc, char** argv) { - - std::wcout << L"cadMousePro GUI" << std::endl; + QApplication qtApplication(argc, argv); - - QApplication qtApplication(argc, argv); - MouseMainWindow window; window.show(); - - - QDBusConnection connection = QDBusConnection::systemBus(); - - InfoGlobalcodeMouseCadMouseProInterface* proxy = new InfoGlobalcodeMouseCadMouseProInterface("info.globalcode.mouse.cadMousePro", "/info/globalcode/mouse/cadMousePro", connection, &qtApplication); - - std::wcout << (proxy->isValid() ? L"connected" : L"disconnected") << std::endl; - std::wcout << (proxy->devicePresent() ? L"mouse found" : L"mouse not found") << std::endl; - std::wcout << L"mouse name: " << proxy->deviceName().toStdWString() << std::endl; - std::wcout << connection.lastError().message().toStdWString() << std::endl; return qtApplication.exec(); - }