Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commita79a11d22dcb1bb0cbe47874d7f8ff5d58f2271a (patch)
Author
 MageJohn <magejohnyjtp@gmail.com>
2019-02-18 23:34:31 +0000
Committer
 MageJohn <magejohnyjtp@gmail.com>
2019-02-18 23:34:31 +0000
Files37d3347671d5080a75c3c65c4be8a6b0b7e7d2ed
lead-a79a11d22dcb1bb0cbe47874d7f8ff5d58f2271a.tar
lead-a79a11d22dcb1bb0cbe47874d7f8ff5d58f2271a.tar.gz
lead-a79a11d22dcb1bb0cbe47874d7f8ff5d58f2271a.zip
Parentfe8218f49006190ee779a80173b5cf54eed1ca92 (diff)
Implement basic delay support
The ini file now has two entries for each corner, one for the action to be performed and one for the interval after which it will be performed if the mouse doesn't leave the hot corner/edge. This is a little inelegant, and I'd like to make the ini file nicer at some point.
3 files changed, 62 insertions, 16 deletions
-rw-r--r--src/app.cpp30
-rw-r--r--src/sensor.cpp38
-rw-r--r--src/sensor.h10
diff --git a/src/app.cpp b/src/app.cpp
index 0e3075a..1b63b72 100644
--- a/src/app.cpp
+++ b/src/app.cpp
@@ -30,6 +30,7 @@ SOFTWARE.
#include <QDebug>
#include <QScreen>
#include <QFileSystemWatcher>
+#include <QVariant>
#define SENSOR_WIDTH 5
#define SENSOR_HEIGHT 5
@@ -136,29 +137,40 @@ void
App::loadSensor(QScreen* screen, QString name, int x, int y, int w, int h)
{
- QString key = screen->name() + "/" + name;
+ QString action = screen->name() + "/" + name + "-" + "action";
+ QString interval = screen->name() + "/" + name + "-" + "interval";
+ if (!settings.contains(interval))
+ {
+ qDebug() << "App::loadSensor() interval for " << name << " not found; setting to 0";
+
+ // set default
+ settings.setValue(interval, QVariant(0));
+ }
- if (!settings.contains(key) )
+ if (!settings.contains(action))
{
- qDebug() << "App::loadSensor() key " << name << " not found";
+ qDebug() << "App::loadSensor() action for " << name << " not found; creating empty key";
- // restore missing key
- settings.setValue(key, QString());
+ // restore missing action
+ settings.setValue(action, QString());
return;
}
- if (settings.value(key).toString().isEmpty())
+ if (settings.value(action).toString().isEmpty())
{
- qDebug() << "App::loadSensor() key " << name << " is empty";
+ qDebug() << "App::loadSensor() action for " << name << " is empty";
return;
}
// create sensor and save in list so we can delete all sensors on delete
- sensors.append( new Sensor(x, y, w, h, settings.value(key).toString()) );
+ qDebug() << "App::loadSensor() action for " << name << " is " << settings.value(action).toString();
+ qDebug() << "App::loadSensor() interval for " << name << " is " << settings.value(interval).toInt();
+
+ sensors.append( new Sensor(x, y, w, h, settings.value(action).toString(), settings.value(interval).toInt()) );
}
-} // namespace \ No newline at end of file
+} // namespace
diff --git a/src/sensor.cpp b/src/sensor.cpp
index d84f0a2..49fd149 100644
--- a/src/sensor.cpp
+++ b/src/sensor.cpp
@@ -34,12 +34,18 @@ SOFTWARE.
namespace Lead {
-Sensor::Sensor(int x, int y, int w, int h, QString action):
- QWidget()
+Sensor::Sensor(int x, int y, int w, int h, QString action, int interval):
+ QWidget(),
+ action(action),
+ interval(interval)
{
- qDebug() << "lead::Sensor() " << x << "," << y << "," << w << "," << h << " : " << action;
+ qDebug() << "lead::Sensor() " << x << "," << y << "," << w << "," << h << " : action=" << action << " : interval=" << interval;
- this->action = action;
+ this->timer = new QTimer(this);
+ this->timer->setSingleShot(true);
+ this->timer->setInterval(interval);
+
+ connect(this->timer, SIGNAL(timeout()), this, SLOT(activate()));
//setStyleSheet("background-color:red;");
setGeometry(x, y, w, h);
@@ -51,13 +57,33 @@ Sensor::Sensor(int x, int y, int w, int h, QString action):
Sensor::~Sensor()
-{}
+{
+ delete this->timer;
+}
void
Sensor::enterEvent(QEvent * event)
{
- qDebug() << "lead::Sensor::enterEvent() " << this->x() << ":" << this->y() << " action: " << this->action;
+ qDebug() << "lead::Sensor::enterEvent() " << this->x() << ":" << this->y() << " interval: " << this->interval;
+
+ this->timer->start();
+}
+
+
+void
+Sensor::leaveEvent(QEvent * event)
+{
+ qDebug() << "lead::Sensor::leaveEvent() " << this->x() << ":" << this->y() << " interval: " << this->interval;
+
+ this->timer->stop();
+}
+
+
+void
+Sensor::activate()
+{
+ qDebug() << "lead::Sensor::activate() " << this->x() << ":" << this->y() << " action: " << this->action;
QProcess::startDetached(action);
}
diff --git a/src/sensor.h b/src/sensor.h
index 0a400b6..ed5add8 100644
--- a/src/sensor.h
+++ b/src/sensor.h
@@ -30,6 +30,7 @@ SOFTWARE.
#include <QWidget>
#include <QScreen>
+#include <QTimer>
namespace Lead {
@@ -40,14 +41,21 @@ class Sensor : public QWidget
Q_OBJECT
public:
- explicit Sensor(int x, int y, int w, int h, QString action);
+ explicit Sensor(int x, int y, int w, int h, QString action, int interval);
~Sensor();
protected:
void enterEvent(QEvent * event);
+ void leaveEvent(QEvent * event);
private:
QString action;
+ QTimer *timer;
+ int interval;
+
+public slots:
+ void activate();
+
};