[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive/next] src: jogshuttle: use custom event
From: Vincent PINON <vincent.pinon () laposte ! net>
Date: 2014-04-30 20:27:50
Message-ID: E1Wfb6c-0003AX-5F () scm ! kde ! org
[Download RAW message or body]
Git commit 34336d5d281b09ab1ff834b54db346ccdbac56d6 by Vincent PINON, on behalf of Ed Rogalsky.
Committed on 18/03/2014 at 21:39.
Pushed by vpinon into branch 'next'.
jogshuttle: use custom event
Conflicts:
src/jogshuttle.cpp
M +34 -42 src/jogshuttle.cpp
M +25 -4 src/jogshuttle.h
http://commits.kde.org/kdenlive/34336d5d281b09ab1ff834b54db346ccdbac56d6
diff --git a/src/jogshuttle.cpp b/src/jogshuttle.cpp
index 8125c02..94d8ebe 100644
--- a/src/jogshuttle.cpp
+++ b/src/jogshuttle.cpp
@@ -37,14 +37,12 @@
#include <unistd.h>
-// Constants for the signals sent.
-#define JOG_BACK1 10001
-#define JOG_FWD1 10002
-#define KEY_EVENT_OFFSET 20000
-
-// middle value for shuttle, will be +/-MAX_SHUTTLE_RANGE
-#define JOG_STOP 10020
-#define MAX_SHUTTLE_RANGE 7
+namespace MediaCtrl
+{
+ const QEvent::Type KeyEvent = (QEvent::Type)QEvent::registerEventType();
+ const QEvent::Type JogEvent = (QEvent::Type)QEvent::registerEventType();
+ const QEvent::Type ShuttleEvent = (QEvent::Type)QEvent::registerEventType();
+}
void ShuttleThread::init(QObject *parent, const QString &device)
{
@@ -66,7 +64,7 @@ void ShuttleThread::stop()
void ShuttleThread::run()
{
kDebug() << "------- STARTING SHUTTLE: " << m_device;
- struct media_ctrl mc;
+ media_ctrl mc;
// open device
media_ctrl_open_dev(&mc, m_device.toUtf8().data());
@@ -109,7 +107,7 @@ void ShuttleThread::run()
} else if (result > 0) {
// we have input
if (FD_ISSET(mc.fd, &readset)) {
- struct media_ctrl_event mev;
+ media_ctrl_event mev;
mev.type = MEDIA_CTRL_EVENT_NONE;
// read input
media_ctrl_read_event(&mc, &mev);
@@ -126,7 +124,7 @@ void ShuttleThread::run()
media_ctrl_close(&mc);
}
-void ShuttleThread::handleEvent(const struct media_ctrl_event& ev)
+void ShuttleThread::handleEvent(const media_ctrl_event& ev)
{
if (ev.type == MEDIA_CTRL_EVENT_KEY)
key(ev);
@@ -136,34 +134,31 @@ void ShuttleThread::handleEvent(const struct media_ctrl_event& ev)
shuttle(ev);
}
-void ShuttleThread::key(const struct media_ctrl_event& ev)
+void ShuttleThread::key(const media_ctrl_event& ev)
{
if (ev.value == KEY_PRESS) {
- int code = ev.index + 1;
QApplication::postEvent(m_parent,
- new QEvent((QEvent::Type)(KEY_EVENT_OFFSET + code)));
+ new MediaCtrlEvent(MediaCtrl::KeyEvent, ev.index + 1));
}
}
-void ShuttleThread::shuttle(const struct media_ctrl_event& ev)
+void ShuttleThread::shuttle(const media_ctrl_event& ev)
{
int value = ev.value / 2;
- if (value > MAX_SHUTTLE_RANGE || value < -MAX_SHUTTLE_RANGE) {
- kDebug() << "Jog shuttle value is out of range: " << MAX_SHUTTLE_RANGE;
+ if (value > MaxShuttleRange || value < -MaxShuttleRange) {
+ kDebug() << "Jog shuttle value is out of range: " << MaxShuttleRange;
return;
}
QApplication::postEvent(m_parent,
- new QEvent((QEvent::Type) (JOG_STOP + (value))));
+ new MediaCtrlEvent(MediaCtrl::ShuttleEvent, value));
}
-void ShuttleThread::jog(const struct media_ctrl_event& ev)
+void ShuttleThread::jog(const media_ctrl_event& ev)
{
- if (ev.value < 0)
- QApplication::postEvent(m_parent, new QEvent((QEvent::Type) JOG_BACK1));
- else if (ev.value > 0)
- QApplication::postEvent(m_parent, new QEvent((QEvent::Type) JOG_FWD1));
+ QApplication::postEvent(m_parent,
+ new MediaCtrlEvent(MediaCtrl::JogEvent, ev.value));
}
JogShuttle::JogShuttle(const QString &device, QObject *parent) :
@@ -209,27 +204,24 @@ void JogShuttle::stopDevice()
void JogShuttle::customEvent(QEvent* e)
{
- int code = e->type();
+ QEvent::Type type = e->type();
+
+ if (type == MediaCtrl::KeyEvent) {
+ MediaCtrlEvent* mev = (MediaCtrlEvent*)e;
+ emit button(mev->value());
+ } else if (type == MediaCtrl::JogEvent) {
+ MediaCtrlEvent* mev = (MediaCtrlEvent*)e;
+ int value = mev->value();
- // handle simple job events
- switch (code) {
- case JOG_BACK1:
+ if (value < 0) {
emit jogBack();
- return;
- case JOG_FWD1:
+ } else if (value > 0) {
emit jogForward();
- return;
- }
-
- // FIXME: this is a bad shuttle indication
- int shuttle_pos = code - JOG_STOP;
- if (shuttle_pos >= -MAX_SHUTTLE_RANGE && shuttle_pos <= MAX_SHUTTLE_RANGE) {
- emit shuttlePos(shuttle_pos);
- return;
+ }
+ } else if (type == MediaCtrl::ShuttleEvent) {
+ MediaCtrlEvent* mev = (MediaCtrlEvent*)e;
+ emit shuttlePos(mev->value());
}
-
- // we've got a key event.
- emit button(e->type() - KEY_EVENT_OFFSET);
}
QString JogShuttle::canonicalDevice(const QString& device)
@@ -253,7 +245,7 @@ DeviceMap JogShuttle::enumerateDevices(const QString& devPath)
kDebug() << QString(" [%1] ").arg(fileName);
kDebug() << QString(" [%1] ").arg(fileLink);
- struct media_ctrl mc;
+ media_ctrl mc;
media_ctrl_open_dev(&mc, (char*)fileLink.toUtf8().data());
if (mc.fd > 0 && mc.device) {
devs.insert(QString(mc.device->name), devFullPath);
@@ -268,7 +260,7 @@ DeviceMap JogShuttle::enumerateDevices(const QString& devPath)
int JogShuttle::keysCount(const QString& devPath)
{
- struct media_ctrl mc;
+ media_ctrl mc;
int keysCount = 0;
QString fileLink = canonicalDevice(devPath);
diff --git a/src/jogshuttle.h b/src/jogshuttle.h
index 6cfc86f..d2fb381 100644
--- a/src/jogshuttle.h
+++ b/src/jogshuttle.h
@@ -23,10 +23,26 @@
#include <QThread>
#include <QObject>
+#include <QEvent>
#include <QMap>
#include <media_ctrl/mediactrl.h>
+class MediaCtrlEvent : public QEvent
+{
+public:
+ MediaCtrlEvent(QEvent::Type type, int value) :
+ QEvent(type),
+ m_value(value)
+ {
+ }
+
+ int value() { return m_value; }
+
+private:
+ int m_value;
+};
+
class ShuttleThread : public QThread
{
@@ -38,10 +54,15 @@ public:
void stop();
private:
- void handleEvent(const struct media_ctrl_event& ev);
- void jog(const struct media_ctrl_event& ev);
- void shuttle(const struct media_ctrl_event& ev);
- void key(const struct media_ctrl_event& ev);
+ enum
+ {
+ MaxShuttleRange = 7
+ };
+
+ void handleEvent(const media_ctrl_event& ev);
+ void jog(const media_ctrl_event& ev);
+ void shuttle(const media_ctrl_event& ev);
+ void key(const media_ctrl_event& ev);
QString m_device;
QObject *m_parent;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic