Qt: Add a signal when the game list selection is changed

This commit is contained in:
Connor McLaughlin 2020-01-24 14:49:46 +10:00
parent 99af858562
commit 67710ca184
3 changed files with 20 additions and 3 deletions

View file

@ -269,6 +269,8 @@ void GameListWidget::initialize(QtHostInterface* host_interface)
m_table_view->resizeColumnsToContents();
connect(m_table_view, &QTableView::doubleClicked, this, &GameListWidget::onTableViewItemDoubleClicked);
connect(m_table_view->selectionModel(), &QItemSelectionModel::currentChanged, this,
&GameListWidget::onSelectionModelCurrentChanged);
insertWidget(0, m_table_view);
setCurrentIndex(0);
@ -289,6 +291,19 @@ void GameListWidget::onTableViewItemDoubleClicked(const QModelIndex& index)
emit bootEntryRequested(&entry);
}
void GameListWidget::onSelectionModelCurrentChanged(const QModelIndex& current, const QModelIndex& previous)
{
const QModelIndex source_index = m_table_sort_model->mapToSource(current);
if (!source_index.isValid() || source_index.row() >= static_cast<int>(m_game_list->GetEntryCount()))
{
emit entrySelected(nullptr);
return;
}
const GameList::GameListEntry& entry = m_game_list->GetEntries().at(source_index.row());
emit entrySelected(&entry);
}
void GameListWidget::resizeEvent(QResizeEvent* event)
{
QStackedWidget::resizeEvent(event);

View file

@ -19,11 +19,13 @@ public:
void initialize(QtHostInterface* host_interface);
Q_SIGNALS:
void bootEntryRequested(const GameList::GameListEntry& entry);
void entrySelected(const GameList::GameListEntry* entry);
void bootEntryRequested(const GameList::GameListEntry* entry);
private Q_SLOTS:
void onGameListRefreshed();
void onTableViewItemDoubleClicked(const QModelIndex& index);
void onSelectionModelCurrentChanged(const QModelIndex& current, const QModelIndex& previous);
protected:
void resizeEvent(QResizeEvent* event);

View file

@ -260,9 +260,9 @@ void MainWindow::connectSignals()
connect(m_host_interface, &QtHostInterface::emulationPaused, this, &MainWindow::onEmulationPaused);
connect(m_host_interface, &QtHostInterface::toggleFullscreenRequested, this, &MainWindow::toggleFullscreen);
connect(m_game_list_widget, &GameListWidget::bootEntryRequested, [this](const GameList::GameListEntry& entry) {
connect(m_game_list_widget, &GameListWidget::bootEntryRequested, [this](const GameList::GameListEntry* entry) {
// if we're not running, boot the system, otherwise swap discs
QString path = QString::fromStdString(entry.path);
QString path = QString::fromStdString(entry->path);
if (!m_emulation_running)
{
m_host_interface->bootSystem(path, QString());