From 4ed67413ac33f0814b76ffc76ad8c1dae734febf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 4 Aug 2019 21:13:50 +0200 Subject: [PATCH] GH-988 add ability to toggle mods with keyboard --- api/logic/minecraft/mod/ModFolderModel.cpp | 20 +++++++++++++++++--- api/logic/minecraft/mod/ModFolderModel.h | 9 +++++---- application/pages/instance/ModFolderPage.cpp | 9 +++++++++ application/pages/instance/ModFolderPage.h | 1 + 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/api/logic/minecraft/mod/ModFolderModel.cpp b/api/logic/minecraft/mod/ModFolderModel.cpp index c9a69995..14907dea 100644 --- a/api/logic/minecraft/mod/ModFolderModel.cpp +++ b/api/logic/minecraft/mod/ModFolderModel.cpp @@ -312,15 +312,29 @@ bool ModFolderModel::enableMods(const QModelIndexList& indexes, bool enable) if(indexes.isEmpty()) return true; - for (auto i: indexes) + for (auto index: indexes) { - Mod &m = mods[i.row()]; + Mod &m = mods[index.row()]; m.enable(enable); - emit dataChanged(i, i); + emit dataChanged(index, index); } return true; } +void ModFolderModel::toggleEnabled(const QModelIndex& index) +{ + if(interaction_disabled) { + return; + } + if(!index.isValid()) { + return; + } + + Mod &m = mods[index.row()]; + m.enable(!m.enabled()); + emit dataChanged(index, index); +} + bool ModFolderModel::deleteMods(const QModelIndexList& indexes) { if(interaction_disabled) { diff --git a/api/logic/minecraft/mod/ModFolderModel.h b/api/logic/minecraft/mod/ModFolderModel.h index ff56be4a..624345be 100644 --- a/api/logic/minecraft/mod/ModFolderModel.h +++ b/api/logic/minecraft/mod/ModFolderModel.h @@ -82,7 +82,7 @@ public: } /// Reloads the mod list and returns true if the list changed. - virtual bool update(); + bool update(); /** * Adds the given mod to the list at the given index - if the list supports custom ordering @@ -90,15 +90,16 @@ public: bool installMod(const QString& filename); /// Deletes all the selected mods - virtual bool deleteMods(const QModelIndexList &indexes); + bool deleteMods(const QModelIndexList &indexes); /// Enable or disable listed mods - virtual bool enableMods(const QModelIndexList &indexes, bool enable = true); + bool enableMods(const QModelIndexList &indexes, bool enable = true); + void toggleEnabled(const QModelIndex &index); void startWatching(); void stopWatching(); - virtual bool isValid(); + bool isValid(); QDir dir() { diff --git a/application/pages/instance/ModFolderPage.cpp b/application/pages/instance/ModFolderPage.cpp index 97002824..9e987e95 100644 --- a/application/pages/instance/ModFolderPage.cpp +++ b/application/pages/instance/ModFolderPage.cpp @@ -139,6 +139,7 @@ ModFolderPage::ModFolderPage( ui->modTreeView->sortByColumn(1, Qt::AscendingOrder); ui->modTreeView->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->modTreeView, &ModListView::customContextMenuRequested, this, &ModFolderPage::ShowContextMenu); + connect(ui->modTreeView, &ModListView::activated, this, &ModFolderPage::modItemActivated); auto smodel = ui->modTreeView->selectionModel(); connect(smodel, &QItemSelectionModel::currentChanged, this, &ModFolderPage::modCurrent); @@ -146,6 +147,14 @@ ModFolderPage::ModFolderPage( connect(m_inst, &BaseInstance::runningStatusChanged, this, &ModFolderPage::on_RunningState_changed); } +void ModFolderPage::modItemActivated(const QModelIndex& index) +{ + auto modsModelIndex = m_filterModel->mapToSource(index); + if(modsModelIndex.isValid()) { + m_mods->toggleEnabled(modsModelIndex); + } +} + QMenu * ModFolderPage::createPopupMenu() { QMenu* filteredMenu = QMainWindow::createPopupMenu(); diff --git a/application/pages/instance/ModFolderPage.h b/application/pages/instance/ModFolderPage.h index a99ab161..d49d25c3 100644 --- a/application/pages/instance/ModFolderPage.h +++ b/application/pages/instance/ModFolderPage.h @@ -94,6 +94,7 @@ slots: private slots: + void modItemActivated(const QModelIndex &index); void on_filterTextChanged(const QString & newContents); void on_RunningState_changed(bool running); void on_actionAdd_triggered();