|
1 | 1 | #include "MouseSim.hpp" |
| 2 | +#include <AboutBox.hpp> |
2 | 3 |
|
3 | 4 | #include <QAction> |
4 | 5 | #include <QCoreApplication> |
5 | 6 | #include <QMenu> |
| 7 | +#include <QMessageBox> |
| 8 | +#include <QSettings> |
| 9 | +#include <QSharedMemory> |
6 | 10 | #include <QTimer> |
7 | 11 |
|
8 | 12 | #include <Windows.h> |
9 | 13 |
|
10 | 14 | MouseSim::MouseSim() |
11 | 15 | { |
12 | | - enableAction = new QAction(tr("&Enable"), this); |
13 | | - connect(enableAction, SIGNAL(triggered()), this, SLOT(enable())); |
| 16 | + m_mem = new QSharedMemory("MouseSimRunning", this); |
| 17 | + if (!m_mem->create(1)) QTimer::singleShot(0, qApp, SLOT(quit())); |
14 | 18 |
|
15 | | - disableAction = new QAction(tr("&Disable"), this); |
16 | | - connect(disableAction, SIGNAL(triggered()), this, SLOT(disable())); |
| 19 | + QImage img = QImage(":/icons/mouse_16.png"); |
| 20 | + m_activated = new QIcon(QPixmap::fromImage(img)); |
| 21 | + QSize size = img.size(); |
| 22 | + int width = size.width(), |
| 23 | + height = size.height(); |
| 24 | + |
| 25 | + for (int i = 0; i < width; ++i) { |
| 26 | + for (int j = 0; j < height; ++j) { |
| 27 | + QRgb pixel = img.pixel(i, j); |
| 28 | + int gray = qGray(pixel), |
| 29 | + alpha = qAlpha(pixel); |
| 30 | + img.setPixel(i, j, qRgba(gray, gray, gray, alpha)); |
| 31 | + } |
| 32 | + } |
| 33 | + m_deactivated = new QIcon(QPixmap::fromImage(img)); |
| 34 | + |
| 35 | + m_settings = new QSettings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat); |
| 36 | + bool checked = !m_settings->value("MouseSim", QVariant("")).toString().isEmpty(); |
| 37 | + |
| 38 | + m_enableAction = new QAction("&Enable", this); |
| 39 | + m_disableAction = new QAction("&Disable", this); |
| 40 | + m_autostartAction = new QAction("Autostart &MouseSim", this); |
| 41 | + m_autostartAction->setCheckable(true); |
| 42 | + m_autostartAction->setChecked(checked); |
| 43 | + m_aboutAction = new QAction("&About MouseSim", this); |
| 44 | + m_quitAction = new QAction("&Quit", this); |
17 | 45 |
|
18 | | - quitAction = new QAction(tr("&Quit"), this); |
19 | | - connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); |
| 46 | + connect(m_enableAction, &QAction::triggered, this, &MouseSim::enable); |
| 47 | + connect(m_disableAction, &QAction::triggered, this, &MouseSim::disable); |
| 48 | + connect(m_autostartAction, &QAction::triggered, this, &MouseSim::autostart); |
| 49 | + connect(m_aboutAction, &QAction::triggered, this, &MouseSim::about); |
| 50 | + connect(m_quitAction, &QAction::triggered, qApp, &QCoreApplication::quit); |
20 | 51 |
|
21 | | - trayIconMenu = new QMenu(this); |
22 | | - trayIconMenu->addAction(enableAction); |
23 | | - trayIconMenu->addAction(disableAction); |
24 | | - trayIconMenu->addSeparator(); |
25 | | - trayIconMenu->addAction(quitAction); |
| 52 | + m_trayIconMenu = new QMenu(this); |
| 53 | + m_trayIconMenu->addAction(m_enableAction); |
| 54 | + m_trayIconMenu->addAction(m_disableAction); |
| 55 | + m_trayIconMenu->addAction(m_autostartAction); |
| 56 | + m_trayIconMenu->addAction(m_aboutAction); |
| 57 | + m_trayIconMenu->addSeparator(); |
| 58 | + m_trayIconMenu->addAction(m_quitAction); |
26 | 59 |
|
27 | | - trayIcon = new QSystemTrayIcon(this); |
28 | | - trayIcon->setContextMenu(trayIconMenu); |
| 60 | + m_trayIcon = new QSystemTrayIcon(this); |
| 61 | + m_trayIcon->setContextMenu(m_trayIconMenu); |
29 | 62 |
|
30 | | - connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), |
31 | | - this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); |
| 63 | + connect(m_trayIcon, &QSystemTrayIcon::activated, this, &MouseSim::iconActivated); |
32 | 64 |
|
33 | 65 | m_timer = new QTimer(this); |
34 | | - connect(m_timer, SIGNAL(timeout()), this, SLOT(sendInput())); |
| 66 | + connect(m_timer, &QTimer::timeout, this, &MouseSim::sendInput); |
35 | 67 |
|
36 | 68 | enable(); |
37 | | - trayIcon->show(); |
| 69 | + m_trayIcon->show(); |
| 70 | +} |
| 71 | + |
| 72 | +MouseSim::~MouseSim() |
| 73 | +{ |
| 74 | + m_mem->detach(); |
38 | 75 | } |
39 | 76 |
|
40 | 77 | void MouseSim::iconActivated(QSystemTrayIcon::ActivationReason reason) |
@@ -65,18 +102,37 @@ void MouseSim::sendInput() |
65 | 102 | void MouseSim::enable() |
66 | 103 | { |
67 | 104 | m_timer->start(1000); |
68 | | - trayIcon->setIcon(QIcon(":/images/mouse.png")); |
69 | | - trayIcon->setToolTip("MouseSim: Enabled"); |
| 105 | + m_trayIcon->setIcon(*m_activated); |
| 106 | + m_trayIcon->setToolTip("MouseSim: Enabled"); |
70 | 107 | sendInput(); |
71 | | - enableAction->setDisabled(true); |
72 | | - disableAction->setEnabled(true); |
| 108 | + m_enableAction->setDisabled(true); |
| 109 | + m_disableAction->setEnabled(true); |
73 | 110 | } |
74 | 111 |
|
75 | 112 | void MouseSim::disable() |
76 | 113 | { |
77 | 114 | m_timer->stop(); |
78 | | - trayIcon->setIcon(QIcon(":/images/mouse-gray.png")); |
79 | | - trayIcon->setToolTip("MouseSim: Disabled"); |
80 | | - disableAction->setDisabled(true); |
81 | | - enableAction->setEnabled(true); |
| 115 | + |
| 116 | + m_trayIcon->setIcon(*m_deactivated); |
| 117 | + m_trayIcon->setToolTip("MouseSim: Disabled"); |
| 118 | + m_disableAction->setDisabled(true); |
| 119 | + m_enableAction->setEnabled(true); |
| 120 | +} |
| 121 | + |
| 122 | +void MouseSim::autostart(bool enabled) |
| 123 | +{ |
| 124 | + if (enabled) { |
| 125 | + m_settings->setValue("MouseSim", "\"" + QCoreApplication::applicationFilePath().replace("/", "\\") + "\""); |
| 126 | + } else { |
| 127 | + m_settings->remove("MouseSim"); |
| 128 | + } |
| 129 | +} |
| 130 | + |
| 131 | +void MouseSim::about() |
| 132 | +{ |
| 133 | + QMessageBox about(this); |
| 134 | + about.setText(MOUSESIM_ABOUTBOX); |
| 135 | + about.setStyleSheet("qproperty-alignment: AlignCenter;"); |
| 136 | + about.setWindowTitle("About MouseSim"); |
| 137 | + about.exec(); |
82 | 138 | } |
0 commit comments