mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-24 19:36:17 +00:00
Improve keyboard navigation in game list (#1132)
* Improve keyboard navigation * don't start game in elf viewer mode or gridview mode with empty item selected * fix eventFilter return
This commit is contained in:
parent
7b5d66e5c1
commit
dc96338c2e
6 changed files with 67 additions and 38 deletions
|
@ -2,6 +2,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <QDockWidget>
|
||||
#include <QKeyEvent>
|
||||
#include <QProgressDialog>
|
||||
|
||||
#include <common/scm_rev.h>
|
||||
|
@ -21,6 +22,7 @@
|
|||
|
||||
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
|
||||
ui->setupUi(this);
|
||||
installEventFilter(this);
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
|
@ -306,6 +308,7 @@ void MainWindow::CreateConnects() {
|
|||
});
|
||||
// List
|
||||
connect(ui->setlistModeListAct, &QAction::triggered, m_dock_widget.data(), [this]() {
|
||||
BackgroundMusicPlayer::getInstance().stopMusic();
|
||||
m_dock_widget->setWidget(m_game_list_frame.data());
|
||||
m_game_grid_frame->hide();
|
||||
m_elf_viewer->hide();
|
||||
|
@ -322,6 +325,7 @@ void MainWindow::CreateConnects() {
|
|||
});
|
||||
// Grid
|
||||
connect(ui->setlistModeGridAct, &QAction::triggered, m_dock_widget.data(), [this]() {
|
||||
BackgroundMusicPlayer::getInstance().stopMusic();
|
||||
m_dock_widget->setWidget(m_game_grid_frame.data());
|
||||
m_game_grid_frame->show();
|
||||
m_game_list_frame->hide();
|
||||
|
@ -338,6 +342,7 @@ void MainWindow::CreateConnects() {
|
|||
});
|
||||
// Elf
|
||||
connect(ui->setlistElfAct, &QAction::triggered, m_dock_widget.data(), [this]() {
|
||||
BackgroundMusicPlayer::getInstance().stopMusic();
|
||||
m_dock_widget->setWidget(m_elf_viewer.data());
|
||||
m_game_grid_frame->hide();
|
||||
m_game_list_frame->hide();
|
||||
|
@ -512,29 +517,6 @@ void MainWindow::CreateConnects() {
|
|||
isIconBlack = false;
|
||||
}
|
||||
});
|
||||
|
||||
connect(m_game_grid_frame.get(), &QTableWidget::cellClicked, this,
|
||||
&MainWindow::PlayBackgroundMusic);
|
||||
connect(m_game_list_frame.get(), &QTableWidget::cellClicked, this,
|
||||
&MainWindow::PlayBackgroundMusic);
|
||||
}
|
||||
|
||||
void MainWindow::PlayBackgroundMusic() {
|
||||
if (isGameRunning || !Config::getPlayBGM()) {
|
||||
BackgroundMusicPlayer::getInstance().stopMusic();
|
||||
return;
|
||||
}
|
||||
int itemID = isTableList ? m_game_list_frame->currentItem()->row()
|
||||
: m_game_grid_frame->crtRow * m_game_grid_frame->columnCnt +
|
||||
m_game_grid_frame->crtColumn;
|
||||
if (itemID > m_game_info->m_games.size() - 1) {
|
||||
// Can happen in grid mode
|
||||
BackgroundMusicPlayer::getInstance().stopMusic();
|
||||
return;
|
||||
}
|
||||
QString snd0path;
|
||||
Common::FS::PathToQString(snd0path, m_game_info->m_games[itemID].snd0_path);
|
||||
BackgroundMusicPlayer::getInstance().playMusic(snd0path);
|
||||
}
|
||||
|
||||
void MainWindow::StartGame() {
|
||||
|
@ -1047,3 +1029,17 @@ void MainWindow::OnLanguageChanged(const std::string& locale) {
|
|||
|
||||
LoadTranslation();
|
||||
}
|
||||
|
||||
bool MainWindow::eventFilter(QObject* obj, QEvent* event) {
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
|
||||
if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) {
|
||||
auto tblMode = Config::getTableMode();
|
||||
if (tblMode != 2 && (tblMode != 1 || m_game_grid_frame->IsValidCellSelected())) {
|
||||
StartGame();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return QMainWindow::eventFilter(obj, event);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue