From 34d1d49dbf3d57d14b2df6ca511613a08443f4ec Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Sat, 5 Mar 2011 22:06:59 +0600 Subject: [PATCH] Impemented controling via keyboard --- src/mainwindow.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/mainwindow.h | 3 +++ src/playerform.cpp | 20 ++++++++++-------- src/playerform.h | 9 +++++---- 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4f561dd..7e2ee18 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -134,6 +134,13 @@ MainWindow::MainWindow(QWidget *parent) : _hw_zoom_policy_changed(); config.setValue("fmtx/enabled", "no"); setWindowTitle("SomePlayer"); + + QList widgets = ui->centralWidget->findChildren(); + foreach (QWidget *widget, widgets) { + if (widget->objectName() != "searchLine") { + widget->installEventFilter(this); + } + } } MainWindow::~MainWindow() @@ -419,3 +426,53 @@ void MainWindow::_fmtx_settings_changed() { system("fmtx_client -p 0 2>&1 >/dev/null"); } } + +bool MainWindow::eventFilter(QObject *obj, QEvent *event) { + if (event->type() != QEvent::KeyPress) { + return QObject::eventFilter(obj, event); + } + QKeyEvent *keyEvent = (QKeyEvent *) event; + + switch (keyEvent->key()) { + case Qt::Key_Space: + _player_form->toggle(); + break; + case Qt::Key_Enter: + // TODO + break; + case Qt::Key_Right: + _player_form->next(); + break; + case Qt::Key_Left: + _player_form->prev(); + break; + case Qt::Key_S: + _player_form->stop(); + break; + case Qt::Key_F: + _fullscreen(!isFullScreen()); + break; + case Qt::Key_R: + _player_form->toggleRandom(); + break; + case Qt::Key_V: + _player_form->toggleView(); + break; + case Qt::Key_M: + _directory_form->show(); + break; + case Qt::Key_L: + _library_form->show(); + break; + case Qt::Key_E: + _player_form->toggleRepeat(); + break; + case Qt::Key_Control: + _player_form->toggleToolsWidget(); + break; + default: + return QObject::eventFilter(obj, event); + } + + return true; +} diff --git a/src/mainwindow.h b/src/mainwindow.h index c0bfda8..8f49a71 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -56,6 +56,9 @@ public: private: Ui::MainWindow *ui; +protected: + bool eventFilter(QObject *, QEvent *); + signals: void landscapeMode(); void portraitMode(); diff --git a/src/playerform.cpp b/src/playerform.cpp index 515d328..0b9a81b 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -116,7 +116,7 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : _pls_sort_form->hide(); connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library())); - connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_toggle_view())); + connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(toggleView())); connect(ui->playlistView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex))); connect(ui->playpauseButton, SIGNAL(clicked()), _player, SLOT(toggle())); connect(ui->nextButton, SIGNAL(clicked()), _player, SLOT(next())); @@ -124,8 +124,8 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(ui->prevButton, SIGNAL(clicked()), _player, SLOT(prev())); connect(_player, SIGNAL(trackChanged(Track)), this, SLOT(_track_changed(Track))); connect(_player, SIGNAL(tick(int,int)), this, SLOT(_tick(int,int))); - connect(ui->randomButton, SIGNAL(clicked()), this, SLOT(_toggle_random())); - connect(ui->repeatButton, SIGNAL(clicked()), this, SLOT(_toggle_repeat())); + connect(ui->randomButton, SIGNAL(clicked()), this, SLOT(toggleRandom())); + connect(ui->repeatButton, SIGNAL(clicked()), this, SLOT(toggleRepeat())); connect(ui->seekSlider, SIGNAL(sliderMoved(int)), _player, SLOT(seek(int))); connect(ui->playlistView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(_sort_playlist())); connect(__clear_playlist, SIGNAL(triggered()), this, SIGNAL(clearPlaylist())); @@ -138,7 +138,7 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : connect(_player, SIGNAL(trackDone(Track)), _lib, SLOT(updateTrackCount(Track))); connect(_tag_resolver, SIGNAL(decoded(Track)), this, SLOT(_track_decoded(Track))); connect(ui->dirButton, SIGNAL(clicked()), this, SLOT(_dirview())); - connect(ui->moreButton, SIGNAL(clicked()), this, SLOT(_tools_widget_toggle())); + connect(ui->moreButton, SIGNAL(clicked()), this, SLOT(toggleToolsWidget())); connect(_tools_widget, SIGNAL(search(QString)), this, SLOT(search(QString))); connect(_tools_widget, SIGNAL(nextSearch()), this, SLOT(nextItem())); connect(_tools_widget, SIGNAL(prevSearch()), this, SLOT(prevItem())); @@ -198,7 +198,7 @@ void PlayerForm::reload(bool reread) { } } -void PlayerForm::_toggle_view() { +void PlayerForm::toggleView() { int index = ui->stackedWidget->currentIndex(); index = (!index % 2); if (index) { @@ -339,7 +339,7 @@ void PlayerForm::_state_changed(PlayerState state) { } } -void PlayerForm::_toggle_random() { +void PlayerForm::toggleRandom() { _player->toggleRandom(); if (_player->random()) { ui->randomButton->setIcon(QIcon(":/icons/"+_icons_theme+"/random_on.png")); @@ -348,7 +348,7 @@ void PlayerForm::_toggle_random() { } } -void PlayerForm::_toggle_repeat() { +void PlayerForm::toggleRepeat() { _player->toggleRepeat(); if (_player->repeat() == REPEAT_ALL) { ui->repeatButton->setIcon(QIcon(":/icons/"+_icons_theme+"/repeat_all.png")); @@ -599,7 +599,7 @@ void PlayerForm::portraitMode() { _pls_sort_form->portraitMode(); } -void PlayerForm::_tools_widget_toggle() { +void PlayerForm::toggleToolsWidget() { if (_tools_widget->isVisible()) { ui->moreButton->setIcon(QIcon(":/icons/"+_icons_theme+"/more.png")); _tools_widget->hide(); @@ -822,3 +822,7 @@ void PlayerForm::_playlist_sorted() { ui->playlistView->setColumnWidth(0, 50); _track_renderer->setActiveRow(_current_playlist.tracks().indexOf(_player->current())); } + +void PlayerForm::toggle() { + _player->toggle(); +} diff --git a/src/playerform.h b/src/playerform.h index 9606b77..ff8afbb 100644 --- a/src/playerform.h +++ b/src/playerform.h @@ -86,15 +86,19 @@ public slots: void play(Track); void next(); void prev(); + void toggle(); + void toggleRandom(); + void toggleView(); void showCountdown(QString); void hideCountdown(); void updateTranslations(); void updateTrackColor(); + void toggleRepeat(); + void toggleToolsWidget(); private slots: void _library(); void _dirview(); - void _toggle_view(); void _process_click(QModelIndex); void _track_changed(Track); void _tick(int, int); @@ -110,10 +114,7 @@ private slots: void _edit_tags(); void _c_edit_tags(); void _state_changed(PlayerState); - void _toggle_repeat(); - void _toggle_random(); void _track_decoded(Track); - void _tools_widget_toggle(); void _display_cover(QImage); void _toggle_extra_buttons(); void _start_playlist(); -- 1.7.9.5