Add WiimotedevShortcuts class, support for nunchuk & classic controller
This commit is contained in:
parent
65fb6ad16f
commit
93acd26444
@ -487,6 +487,9 @@ if(NOT APPLE AND NOT WIN32)
|
|||||||
list(APPEND SOURCES wiimotedev/interface.cpp)
|
list(APPEND SOURCES wiimotedev/interface.cpp)
|
||||||
list(APPEND HEADERS wiimotedev/interface.h)
|
list(APPEND HEADERS wiimotedev/interface.h)
|
||||||
|
|
||||||
|
list(APPEND SOURCES wiimotedev/shortcuts.cpp)
|
||||||
|
list(APPEND HEADERS wiimotedev/shortcuts.h)
|
||||||
|
|
||||||
list(APPEND SOURCES ui/wiimotedevshortcutsconfig.cpp)
|
list(APPEND SOURCES ui/wiimotedevshortcutsconfig.cpp)
|
||||||
list(APPEND HEADERS ui/wiimotedevshortcutsconfig.h)
|
list(APPEND HEADERS ui/wiimotedevshortcutsconfig.h)
|
||||||
list(APPEND UI ui/wiimotedevshortcutsconfig.ui)
|
list(APPEND UI ui/wiimotedevshortcutsconfig.ui)
|
||||||
|
@ -69,7 +69,7 @@
|
|||||||
#include "widgets/trackslider.h"
|
#include "widgets/trackslider.h"
|
||||||
|
|
||||||
#ifdef ENABLE_WIIMOTEDEV
|
#ifdef ENABLE_WIIMOTEDEV
|
||||||
#include "wiimotedev/interface.h"
|
# include "wiimotedev/shortcuts.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_GSTREAMER
|
#ifdef HAVE_GSTREAMER
|
||||||
@ -138,8 +138,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
|||||||
organise_dialog_(new OrganiseDialog(task_manager_)),
|
organise_dialog_(new OrganiseDialog(task_manager_)),
|
||||||
queue_manager_(new QueueManager),
|
queue_manager_(new QueueManager),
|
||||||
#ifdef ENABLE_WIIMOTEDEV
|
#ifdef ENABLE_WIIMOTEDEV
|
||||||
wiimotedev_buttons_(0),
|
wiimotedev_shortcuts_(NULL),
|
||||||
wiimotedev_iface_(NULL),
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_VISUALISATIONS
|
#ifdef ENABLE_VISUALISATIONS
|
||||||
visualisation_(new VisualisationContainer),
|
visualisation_(new VisualisationContainer),
|
||||||
@ -580,10 +579,7 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
|
|||||||
library_->StartThreads();
|
library_->StartThreads();
|
||||||
|
|
||||||
#ifdef ENABLE_WIIMOTEDEV
|
#ifdef ENABLE_WIIMOTEDEV
|
||||||
wiimotedev_iface_ = new DBusDeviceEventsInterface(WIIMOTEDEV_DBUS_SERVICE_NAME, WIIMOTEDEV_DBUS_EVENTS_OBJECT,
|
wiimotedev_shortcuts_ = new WiimotedevShortcuts(player_, this);
|
||||||
QDBusConnection::systemBus(), this);
|
|
||||||
|
|
||||||
connect(wiimotedev_iface_, SIGNAL(dbusWiimoteButtons(quint32,quint64)), this, SLOT(DbusWiimoteButtons(quint32,quint64)));
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1427,34 +1423,3 @@ void MainWindow::PlaylistCopyToDevice() {
|
|||||||
organise_dialog_->SetCopy(true);
|
organise_dialog_->SetCopy(true);
|
||||||
organise_dialog_->show();
|
organise_dialog_->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_WIIMOTEDEV
|
|
||||||
void MainWindow::DbusWiimoteButtons(quint32 id, quint64 value) {
|
|
||||||
if (!id) return;
|
|
||||||
|
|
||||||
quint64 buttons = value & ~WIIMOTE_TILT_MASK;
|
|
||||||
if (wiimotedev_buttons_ == buttons) return;
|
|
||||||
|
|
||||||
if ((!(wiimotedev_buttons_ & WIIMOTE_BTN_SHIFT_LEFT) &&
|
|
||||||
(value & WIIMOTE_BTN_SHIFT_LEFT)) ||
|
|
||||||
(!(wiimotedev_buttons_ & WIIMOTE_BTN_LEFT) &&
|
|
||||||
(value & WIIMOTE_BTN_LEFT))) player_->Previous();
|
|
||||||
|
|
||||||
|
|
||||||
if ((!(wiimotedev_buttons_ & WIIMOTE_BTN_SHIFT_RIGHT) &&
|
|
||||||
(value & WIIMOTE_BTN_SHIFT_RIGHT)) ||
|
|
||||||
(!(wiimotedev_buttons_ & WIIMOTE_BTN_RIGHT) &&
|
|
||||||
(value & WIIMOTE_BTN_RIGHT))) player_->Next();
|
|
||||||
|
|
||||||
if (!(wiimotedev_buttons_ & WIIMOTE_BTN_PLUS) &&
|
|
||||||
(value & WIIMOTE_BTN_PLUS)) player_->VolumeUp();
|
|
||||||
|
|
||||||
if (!(wiimotedev_buttons_ & WIIMOTE_BTN_MINUS) &&
|
|
||||||
(value & WIIMOTE_BTN_MINUS)) player_->VolumeDown();
|
|
||||||
|
|
||||||
if (!(wiimotedev_buttons_ & WIIMOTE_BTN_A) &&
|
|
||||||
(value & WIIMOTE_BTN_A)) player_->PlayPause();
|
|
||||||
|
|
||||||
wiimotedev_buttons_ = buttons;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -34,7 +34,6 @@ class AddStreamDialog;
|
|||||||
class AlbumCoverManager;
|
class AlbumCoverManager;
|
||||||
class CommandlineOptions;
|
class CommandlineOptions;
|
||||||
class Database;
|
class Database;
|
||||||
class DBusDeviceEventsInterface;
|
|
||||||
class DeviceManager;
|
class DeviceManager;
|
||||||
class EditTagDialog;
|
class EditTagDialog;
|
||||||
class Equalizer;
|
class Equalizer;
|
||||||
@ -58,6 +57,7 @@ class Song;
|
|||||||
class SystemTrayIcon;
|
class SystemTrayIcon;
|
||||||
class TaskManager;
|
class TaskManager;
|
||||||
class TranscodeDialog;
|
class TranscodeDialog;
|
||||||
|
class WiimotedevShortcuts;
|
||||||
class VisualisationContainer;
|
class VisualisationContainer;
|
||||||
class Ui_MainWindow;
|
class Ui_MainWindow;
|
||||||
|
|
||||||
@ -171,10 +171,6 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
|||||||
|
|
||||||
void SongSaveComplete();
|
void SongSaveComplete();
|
||||||
|
|
||||||
#ifdef ENABLE_WIIMOTEDEV
|
|
||||||
void DbusWiimoteButtons(quint32 id, quint64 value);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SaveGeometry();
|
void SaveGeometry();
|
||||||
void AddFilesToPlaylist(bool clear_first, const QList<QUrl>& urls);
|
void AddFilesToPlaylist(bool clear_first, const QList<QUrl>& urls);
|
||||||
@ -216,8 +212,7 @@ class MainWindow : public QMainWindow, public PlatformInterface {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_WIIMOTEDEV
|
#ifdef ENABLE_WIIMOTEDEV
|
||||||
DBusDeviceEventsInterface* wiimotedev_iface_;
|
WiimotedevShortcuts *wiimotedev_shortcuts_;
|
||||||
quint64 wiimotedev_buttons_;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QMenu* playlist_menu_;
|
QMenu* playlist_menu_;
|
||||||
|
116
src/wiimotedev/shortcuts.cpp
Normal file
116
src/wiimotedev/shortcuts.cpp
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/* This file is part of Clementine.
|
||||||
|
|
||||||
|
Clementine 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.
|
||||||
|
|
||||||
|
Clementine 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 Clementine. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
#include "wiimotedev/shortcuts.h"
|
||||||
|
#include "wiimotedev/interface.h"
|
||||||
|
|
||||||
|
const char* WiimotedevShortcuts::kSettingsGroup = "Wiimotedev";
|
||||||
|
|
||||||
|
WiimotedevShortcuts::WiimotedevShortcuts(Player *player, QObject *parent)
|
||||||
|
:QObject(parent),
|
||||||
|
player_(player),
|
||||||
|
wiimotedev_iface_(NULL),
|
||||||
|
wiimotedev_buttons_(0)
|
||||||
|
{
|
||||||
|
settings_.beginGroup(WiimotedevShortcuts::kSettingsGroup);
|
||||||
|
ReloadSettings();
|
||||||
|
|
||||||
|
wiimotedev_iface_ = new DBusDeviceEventsInterface(WIIMOTEDEV_DBUS_SERVICE_NAME,
|
||||||
|
WIIMOTEDEV_DBUS_EVENTS_OBJECT,
|
||||||
|
QDBusConnection::systemBus(),
|
||||||
|
this);
|
||||||
|
|
||||||
|
connect(wiimotedev_iface_, SIGNAL(dbusWiimoteGeneralButtons(quint32,quint64)),
|
||||||
|
this, SLOT(DbusWiimoteGeneralButtons(quint32, quint64)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void WiimotedevShortcuts::SetEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
if (!enabled) {
|
||||||
|
disconnect(this, 0, player_, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(this, SIGNAL(Next()), player_, SLOT(Next()));
|
||||||
|
connect(this, SIGNAL(Previous()), player_, SLOT(Previous()));
|
||||||
|
connect(this, SIGNAL(Play()), player_, SLOT(Play()));
|
||||||
|
connect(this, SIGNAL(Stop()), player_, SLOT(Stop()));
|
||||||
|
connect(this, SIGNAL(IncVolume()), player_, SLOT(VolumeUp()));
|
||||||
|
connect(this, SIGNAL(DecVolume()), player_, SLOT(VolumeDown()));
|
||||||
|
connect(this, SIGNAL(Mute()), player_, SLOT(Mute()));
|
||||||
|
connect(this, SIGNAL(Pause()), player_, SLOT(Pause()));
|
||||||
|
connect(this, SIGNAL(TogglePause()), player_, SLOT(PlayPause()));
|
||||||
|
connect(this, SIGNAL(SeekBackward()), player_, SLOT(SeekBackward()));
|
||||||
|
connect(this, SIGNAL(SeekForward()), player_, SLOT(SeekForward()));
|
||||||
|
connect(this, SIGNAL(ShowOSD()), player_, SLOT(ShowOSD()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void WiimotedevShortcuts::ReloadSettings() {
|
||||||
|
settings_.sync();
|
||||||
|
quint64 value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("next_track"), quint64(WIIMOTE_BTN_RIGHT)).toInt()) actions_[PlayerNextTrack] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("previous_track"), quint64(WIIMOTE_BTN_LEFT)).toInt()) actions_[PlayerPreviousTrack] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("play"), quint64(0)).toInt()) actions_[PlayerPlay] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("stop"), quint64(0)).toInt()) actions_[PlayerStop] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("inc_volume"), quint64(WIIMOTE_BTN_PLUS)).toInt()) actions_[PlayerIncVolume] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("dec_volume"), quint64(WIIMOTE_BTN_MINUS)).toInt()) actions_[PlayerDecVolume] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("mute"), quint64(0)).toInt()) actions_[PlayerMute] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("pause"), quint64(0)).toInt()) actions_[PlayerPause] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("togglepause"), quint64(WIIMOTE_BTN_1)).toInt()) actions_[PlayerTogglePause] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("seek_backward"), quint64(WIIMOTE_BTN_UP)).toInt()) actions_[PlayerSeekBackward] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("seek_forward"), quint64(WIIMOTE_BTN_DOWN)).toInt()) actions_[PlayerSeekForward] = value;
|
||||||
|
if (value = settings_.value(QString::fromUtf8("show_osd"), quint64(WIIMOTE_BTN_2)).toInt()) actions_[PlayerShowOSD] = value;
|
||||||
|
|
||||||
|
SetEnabled(settings_.value(QString::fromUtf8("enabled"), quint64(true)).toBool());
|
||||||
|
}
|
||||||
|
|
||||||
|
void WiimotedevShortcuts::EmitRequest(quint32 action) {
|
||||||
|
switch (action) {
|
||||||
|
case PlayerNextTrack: emit Next(); break;
|
||||||
|
case PlayerPreviousTrack: emit Previous(); break;
|
||||||
|
case PlayerPlay: emit Play(); break;
|
||||||
|
case PlayerStop: emit Stop(); break;
|
||||||
|
case PlayerIncVolume: emit IncVolume(); break;
|
||||||
|
case PlayerDecVolume: emit DecVolume(); break;
|
||||||
|
case PlayerMute: emit Mute(); break;
|
||||||
|
case PlayerPause: emit Pause(); break;
|
||||||
|
case PlayerTogglePause: emit TogglePause(); break;
|
||||||
|
case PlayerSeekBackward: emit SeekBackward(); break;
|
||||||
|
case PlayerSeekForward: emit SeekForward(); break;
|
||||||
|
case PlayerStopAfter: emit StopAfter(); break;
|
||||||
|
case PlayerShowOSD: emit ShowOSD(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WiimotedevShortcuts::DbusWiimoteGeneralButtons(quint32 id, quint64 value) {
|
||||||
|
if (id != 1) return;
|
||||||
|
|
||||||
|
quint64 buttons = value & ~(WIIMOTE_TILT_MASK | NUNCHUK_TILT_MASK);
|
||||||
|
|
||||||
|
if (wiimotedev_buttons_ == buttons) return;
|
||||||
|
|
||||||
|
QMapIterator< quint32, quint64> actions(actions_);
|
||||||
|
|
||||||
|
while (actions.hasNext()) {
|
||||||
|
actions.next();
|
||||||
|
if (actions.value() == 0) continue;
|
||||||
|
if ((actions.value() & buttons) == actions.value()) EmitRequest(actions.key());
|
||||||
|
}
|
||||||
|
|
||||||
|
wiimotedev_buttons_ = buttons;
|
||||||
|
}
|
85
src/wiimotedev/shortcuts.h
Normal file
85
src/wiimotedev/shortcuts.h
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
/* This file is part of Clementine.
|
||||||
|
|
||||||
|
Clementine 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.
|
||||||
|
|
||||||
|
Clementine 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 Clementine. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SHORTCUTS_H
|
||||||
|
#define SHORTCUTS_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QMap>
|
||||||
|
#include "core/player.h"
|
||||||
|
|
||||||
|
class DBusDeviceEventsInterface;
|
||||||
|
class QSettings;
|
||||||
|
|
||||||
|
class WiimotedevShortcuts :public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
static const char* kSettingsGroup;
|
||||||
|
|
||||||
|
WiimotedevShortcuts(Player *player = 0, QObject *parent = 0);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void ReloadSettings();
|
||||||
|
void SetEnabled(bool enabled);
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void DbusWiimoteGeneralButtons(quint32 id, quint64 value);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void EmitRequest(quint32 action);
|
||||||
|
|
||||||
|
DBusDeviceEventsInterface* wiimotedev_iface_;
|
||||||
|
Player* player_;
|
||||||
|
quint64 wiimotedev_buttons_;
|
||||||
|
QSettings settings_;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum action {
|
||||||
|
PlayerNextTrack,
|
||||||
|
PlayerPreviousTrack,
|
||||||
|
PlayerPlay,
|
||||||
|
PlayerStop,
|
||||||
|
PlayerIncVolume,
|
||||||
|
PlayerDecVolume,
|
||||||
|
PlayerMute,
|
||||||
|
PlayerPause,
|
||||||
|
PlayerTogglePause,
|
||||||
|
PlayerSeekBackward,
|
||||||
|
PlayerSeekForward,
|
||||||
|
PlayerStopAfter,
|
||||||
|
PlayerShowOSD
|
||||||
|
};
|
||||||
|
|
||||||
|
QMap < quint32, quint64> actions_;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void Next();
|
||||||
|
void Previous();
|
||||||
|
void Play();
|
||||||
|
void Stop();
|
||||||
|
void IncVolume();
|
||||||
|
void DecVolume();
|
||||||
|
void Mute();
|
||||||
|
void Pause();
|
||||||
|
void TogglePause();
|
||||||
|
void SeekBackward();
|
||||||
|
void SeekForward();
|
||||||
|
void StopAfter();
|
||||||
|
void ShowOSD();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SHORTCUTS_H
|
Loading…
x
Reference in New Issue
Block a user