Made buttons on ModsFolderPage enabled all the time
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
parent
480faca559
commit
0d2105dec4
@ -1112,36 +1112,27 @@ JavaVersion MinecraftInstance::getJavaVersion()
|
|||||||
|
|
||||||
std::shared_ptr<ModFolderModel> MinecraftInstance::loaderModList()
|
std::shared_ptr<ModFolderModel> MinecraftInstance::loaderModList()
|
||||||
{
|
{
|
||||||
if (!m_loader_mod_list)
|
if (!m_loader_mod_list) {
|
||||||
{
|
|
||||||
bool is_indexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool();
|
bool is_indexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool();
|
||||||
m_loader_mod_list.reset(new ModFolderModel(modsRoot(), this, is_indexed));
|
m_loader_mod_list.reset(new ModFolderModel(modsRoot(), this, is_indexed));
|
||||||
m_loader_mod_list->disableInteraction(isRunning());
|
|
||||||
connect(this, &BaseInstance::runningStatusChanged, m_loader_mod_list.get(), &ModFolderModel::disableInteraction);
|
|
||||||
}
|
}
|
||||||
return m_loader_mod_list;
|
return m_loader_mod_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<ModFolderModel> MinecraftInstance::coreModList()
|
std::shared_ptr<ModFolderModel> MinecraftInstance::coreModList()
|
||||||
{
|
{
|
||||||
if (!m_core_mod_list)
|
if (!m_core_mod_list) {
|
||||||
{
|
|
||||||
bool is_indexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool();
|
bool is_indexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool();
|
||||||
m_core_mod_list.reset(new ModFolderModel(coreModsDir(), this, is_indexed));
|
m_core_mod_list.reset(new ModFolderModel(coreModsDir(), this, is_indexed));
|
||||||
m_core_mod_list->disableInteraction(isRunning());
|
|
||||||
connect(this, &BaseInstance::runningStatusChanged, m_core_mod_list.get(), &ModFolderModel::disableInteraction);
|
|
||||||
}
|
}
|
||||||
return m_core_mod_list;
|
return m_core_mod_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<ModFolderModel> MinecraftInstance::nilModList()
|
std::shared_ptr<ModFolderModel> MinecraftInstance::nilModList()
|
||||||
{
|
{
|
||||||
if (!m_nil_mod_list)
|
if (!m_nil_mod_list) {
|
||||||
{
|
|
||||||
bool is_indexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool();
|
bool is_indexed = !APPLICATION->settings()->get("ModMetadataDisabled").toBool();
|
||||||
m_nil_mod_list.reset(new ModFolderModel(nilModsDir(), this, is_indexed, false));
|
m_nil_mod_list.reset(new ModFolderModel(nilModsDir(), this, is_indexed, false));
|
||||||
m_nil_mod_list->disableInteraction(isRunning());
|
|
||||||
connect(this, &BaseInstance::runningStatusChanged, m_nil_mod_list.get(), &ModFolderModel::disableInteraction);
|
|
||||||
}
|
}
|
||||||
return m_nil_mod_list;
|
return m_nil_mod_list;
|
||||||
}
|
}
|
||||||
|
@ -213,16 +213,11 @@ bool ModFolderModel::uninstallMod(const QString& filename, bool preserve_metadat
|
|||||||
|
|
||||||
bool ModFolderModel::deleteMods(const QModelIndexList& indexes)
|
bool ModFolderModel::deleteMods(const QModelIndexList& indexes)
|
||||||
{
|
{
|
||||||
if(!m_can_interact) {
|
if (indexes.isEmpty())
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(indexes.isEmpty())
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
for (auto i: indexes)
|
for (auto i : indexes) {
|
||||||
{
|
if (i.column() != 0) {
|
||||||
if(i.column() != 0) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto m = at(i.row());
|
auto m = at(i.row());
|
||||||
|
@ -74,10 +74,6 @@ bool ResourceFolderModel::stopWatching(const QStringList paths)
|
|||||||
|
|
||||||
bool ResourceFolderModel::installResource(QString original_path)
|
bool ResourceFolderModel::installResource(QString original_path)
|
||||||
{
|
{
|
||||||
if (!m_can_interact) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: fix for GH-1178: remove trailing slash to avoid issues with using the empty result of QFileInfo::fileName
|
// NOTE: fix for GH-1178: remove trailing slash to avoid issues with using the empty result of QFileInfo::fileName
|
||||||
original_path = FS::NormalizePath(original_path);
|
original_path = FS::NormalizePath(original_path);
|
||||||
QFileInfo file_info(original_path);
|
QFileInfo file_info(original_path);
|
||||||
@ -168,9 +164,6 @@ bool ResourceFolderModel::uninstallResource(QString file_name)
|
|||||||
|
|
||||||
bool ResourceFolderModel::deleteResources(const QModelIndexList& indexes)
|
bool ResourceFolderModel::deleteResources(const QModelIndexList& indexes)
|
||||||
{
|
{
|
||||||
if (!m_can_interact)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (indexes.isEmpty())
|
if (indexes.isEmpty())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -189,11 +182,8 @@ bool ResourceFolderModel::deleteResources(const QModelIndexList& indexes)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ResourceFolderModel::setResourceEnabled(const QModelIndexList &indexes, EnableAction action)
|
bool ResourceFolderModel::setResourceEnabled(const QModelIndexList& indexes, EnableAction action)
|
||||||
{
|
{
|
||||||
if (!m_can_interact)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (indexes.isEmpty())
|
if (indexes.isEmpty())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -246,15 +236,18 @@ bool ResourceFolderModel::update()
|
|||||||
connect(m_current_update_task.get(), &Task::succeeded, this, &ResourceFolderModel::onUpdateSucceeded,
|
connect(m_current_update_task.get(), &Task::succeeded, this, &ResourceFolderModel::onUpdateSucceeded,
|
||||||
Qt::ConnectionType::QueuedConnection);
|
Qt::ConnectionType::QueuedConnection);
|
||||||
connect(m_current_update_task.get(), &Task::failed, this, &ResourceFolderModel::onUpdateFailed, Qt::ConnectionType::QueuedConnection);
|
connect(m_current_update_task.get(), &Task::failed, this, &ResourceFolderModel::onUpdateFailed, Qt::ConnectionType::QueuedConnection);
|
||||||
connect(m_current_update_task.get(), &Task::finished, this, [=] {
|
connect(
|
||||||
m_current_update_task.reset();
|
m_current_update_task.get(), &Task::finished, this,
|
||||||
if (m_scheduled_update) {
|
[=] {
|
||||||
m_scheduled_update = false;
|
m_current_update_task.reset();
|
||||||
update();
|
if (m_scheduled_update) {
|
||||||
} else {
|
m_scheduled_update = false;
|
||||||
emit updateFinished();
|
update();
|
||||||
}
|
} else {
|
||||||
}, Qt::ConnectionType::QueuedConnection);
|
emit updateFinished();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Qt::ConnectionType::QueuedConnection);
|
||||||
|
|
||||||
QThreadPool::globalInstance()->start(m_current_update_task.get());
|
QThreadPool::globalInstance()->start(m_current_update_task.get());
|
||||||
|
|
||||||
@ -344,15 +337,9 @@ Qt::DropActions ResourceFolderModel::supportedDropActions() const
|
|||||||
Qt::ItemFlags ResourceFolderModel::flags(const QModelIndex& index) const
|
Qt::ItemFlags ResourceFolderModel::flags(const QModelIndex& index) const
|
||||||
{
|
{
|
||||||
Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index);
|
Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index);
|
||||||
auto flags = defaultFlags;
|
auto flags = defaultFlags | Qt::ItemIsDropEnabled;
|
||||||
if (!m_can_interact) {
|
if (index.isValid())
|
||||||
flags &= ~Qt::ItemIsDropEnabled;
|
flags |= Qt::ItemIsUserCheckable;
|
||||||
} else {
|
|
||||||
flags |= Qt::ItemIsDropEnabled;
|
|
||||||
if (index.isValid()) {
|
|
||||||
flags |= Qt::ItemIsUserCheckable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -425,16 +412,17 @@ QVariant ResourceFolderModel::data(const QModelIndex& index, int role) const
|
|||||||
if (column == NAME_COLUMN) {
|
if (column == NAME_COLUMN) {
|
||||||
if (at(row).isSymLinkUnder(instDirPath())) {
|
if (at(row).isSymLinkUnder(instDirPath())) {
|
||||||
return m_resources[row]->internal_id() +
|
return m_resources[row]->internal_id() +
|
||||||
tr("\nWarning: This resource is symbolically linked from elsewhere. Editing it will also change the original."
|
tr("\nWarning: This resource is symbolically linked from elsewhere. Editing it will also change the original."
|
||||||
"\nCanonical Path: %1")
|
"\nCanonical Path: %1")
|
||||||
.arg(at(row).fileinfo().canonicalFilePath());;
|
.arg(at(row).fileinfo().canonicalFilePath());
|
||||||
|
;
|
||||||
}
|
}
|
||||||
if (at(row).isMoreThanOneHardLink()) {
|
if (at(row).isMoreThanOneHardLink()) {
|
||||||
return m_resources[row]->internal_id() +
|
return m_resources[row]->internal_id() +
|
||||||
tr("\nWarning: This resource is hard linked elsewhere. Editing it will also change the original.");
|
tr("\nWarning: This resource is hard linked elsewhere. Editing it will also change the original.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_resources[row]->internal_id();
|
return m_resources[row]->internal_id();
|
||||||
case Qt::DecorationRole: {
|
case Qt::DecorationRole: {
|
||||||
if (column == NAME_COLUMN && (at(row).isSymLinkUnder(instDirPath()) || at(row).isMoreThanOneHardLink()))
|
if (column == NAME_COLUMN && (at(row).isSymLinkUnder(instDirPath()) || at(row).isMoreThanOneHardLink()))
|
||||||
@ -511,16 +499,6 @@ SortType ResourceFolderModel::columnToSortKey(size_t column) const
|
|||||||
return m_column_sort_keys.at(column);
|
return m_column_sort_keys.at(column);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResourceFolderModel::enableInteraction(bool enabled)
|
|
||||||
{
|
|
||||||
if (m_can_interact == enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_can_interact = enabled;
|
|
||||||
if (size())
|
|
||||||
emit dataChanged(index(0), index(size() - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Standard Proxy Model for createFilterProxyModel */
|
/* Standard Proxy Model for createFilterProxyModel */
|
||||||
[[nodiscard]] bool ResourceFolderModel::ProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
|
[[nodiscard]] bool ResourceFolderModel::ProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
|
||||||
{
|
{
|
||||||
@ -556,6 +534,7 @@ void ResourceFolderModel::enableInteraction(bool enabled)
|
|||||||
return (compare_result.first > 0);
|
return (compare_result.first > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ResourceFolderModel::instDirPath() const {
|
QString ResourceFolderModel::instDirPath() const
|
||||||
|
{
|
||||||
return QFileInfo(m_instance->instanceRoot()).absoluteFilePath();
|
return QFileInfo(m_instance->instanceRoot()).absoluteFilePath();
|
||||||
}
|
}
|
||||||
|
@ -11,8 +11,8 @@
|
|||||||
|
|
||||||
#include "BaseInstance.h"
|
#include "BaseInstance.h"
|
||||||
|
|
||||||
#include "tasks/Task.h"
|
|
||||||
#include "tasks/ConcurrentTask.h"
|
#include "tasks/ConcurrentTask.h"
|
||||||
|
#include "tasks/Task.h"
|
||||||
|
|
||||||
class QSortFilterProxyModel;
|
class QSortFilterProxyModel;
|
||||||
|
|
||||||
@ -129,10 +129,6 @@ class ResourceFolderModel : public QAbstractListModel {
|
|||||||
|
|
||||||
QString instDirPath() const;
|
QString instDirPath() const;
|
||||||
|
|
||||||
public slots:
|
|
||||||
void enableInteraction(bool enabled);
|
|
||||||
void disableInteraction(bool disabled) { enableInteraction(!disabled); }
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updateFinished();
|
void updateFinished();
|
||||||
|
|
||||||
@ -181,15 +177,17 @@ class ResourceFolderModel : public QAbstractListModel {
|
|||||||
* if the resource is complex and has more stuff to parse.
|
* if the resource is complex and has more stuff to parse.
|
||||||
*/
|
*/
|
||||||
virtual void onParseSucceeded(int ticket, QString resource_id);
|
virtual void onParseSucceeded(int ticket, QString resource_id);
|
||||||
virtual void onParseFailed(int ticket, QString resource_id) { Q_UNUSED(ticket); Q_UNUSED(resource_id); }
|
virtual void onParseFailed(int ticket, QString resource_id)
|
||||||
|
{
|
||||||
|
Q_UNUSED(ticket);
|
||||||
|
Q_UNUSED(resource_id);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Represents the relationship between a column's index (represented by the list index), and it's sorting key.
|
// Represents the relationship between a column's index (represented by the list index), and it's sorting key.
|
||||||
// As such, the order in with they appear is very important!
|
// As such, the order in with they appear is very important!
|
||||||
QList<SortType> m_column_sort_keys = { SortType::ENABLED, SortType::NAME, SortType::DATE };
|
QList<SortType> m_column_sort_keys = { SortType::ENABLED, SortType::NAME, SortType::DATE };
|
||||||
|
|
||||||
bool m_can_interact = true;
|
|
||||||
|
|
||||||
QDir m_dir;
|
QDir m_dir;
|
||||||
BaseInstance* m_instance;
|
BaseInstance* m_instance;
|
||||||
QFileSystemWatcher m_watcher;
|
QFileSystemWatcher m_watcher;
|
||||||
|
@ -86,9 +86,7 @@ ModFolderPage::ModFolderPage(BaseInstance* inst, std::shared_ptr<ModFolderModel>
|
|||||||
ui->actionsToolbar->insertActionAfter(ui->actionAddItem, ui->actionUpdateItem);
|
ui->actionsToolbar->insertActionAfter(ui->actionAddItem, ui->actionUpdateItem);
|
||||||
connect(ui->actionUpdateItem, &QAction::triggered, this, &ModFolderPage::updateMods);
|
connect(ui->actionUpdateItem, &QAction::triggered, this, &ModFolderPage::updateMods);
|
||||||
|
|
||||||
auto check_allow_update = [this] {
|
auto check_allow_update = [this] { return ui->treeView->selectionModel()->hasSelection() || !m_model->empty(); };
|
||||||
return (!m_instance || !m_instance->isRunning()) && (ui->treeView->selectionModel()->hasSelection() || !m_model->empty());
|
|
||||||
};
|
|
||||||
|
|
||||||
connect(ui->treeView->selectionModel(), &QItemSelectionModel::selectionChanged, this,
|
connect(ui->treeView->selectionModel(), &QItemSelectionModel::selectionChanged, this,
|
||||||
[this, check_allow_update] { ui->actionUpdateItem->setEnabled(check_allow_update()); });
|
[this, check_allow_update] { ui->actionUpdateItem->setEnabled(check_allow_update()); });
|
||||||
@ -101,22 +99,9 @@ ModFolderPage::ModFolderPage(BaseInstance* inst, std::shared_ptr<ModFolderModel>
|
|||||||
|
|
||||||
connect(mods.get(), &ModFolderModel::updateFinished, this,
|
connect(mods.get(), &ModFolderModel::updateFinished, this,
|
||||||
[this, check_allow_update] { ui->actionUpdateItem->setEnabled(check_allow_update()); });
|
[this, check_allow_update] { ui->actionUpdateItem->setEnabled(check_allow_update()); });
|
||||||
|
|
||||||
connect(m_instance, &BaseInstance::runningStatusChanged, this, &ModFolderPage::runningStateChanged);
|
|
||||||
ModFolderPage::runningStateChanged(m_instance && m_instance->isRunning());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModFolderPage::runningStateChanged(bool running)
|
|
||||||
{
|
|
||||||
ui->actionDownloadItem->setEnabled(!running);
|
|
||||||
ui->actionUpdateItem->setEnabled(!running);
|
|
||||||
ui->actionAddItem->setEnabled(!running);
|
|
||||||
ui->actionEnableItem->setEnabled(!running);
|
|
||||||
ui->actionDisableItem->setEnabled(!running);
|
|
||||||
ui->actionRemoveItem->setEnabled(!running);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ModFolderPage::shouldDisplay() const
|
bool ModFolderPage::shouldDisplay() const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -205,8 +190,7 @@ void ModFolderPage::updateMods()
|
|||||||
message = tr("All selected mods are up-to-date! :)");
|
message = tr("All selected mods are up-to-date! :)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CustomMessageBox::selectable(this, tr("Update checker"), message)
|
CustomMessageBox::selectable(this, tr("Update checker"), message)->exec();
|
||||||
->exec();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,8 +59,7 @@ class ModFolderPage : public ExternalResourcesPage {
|
|||||||
bool onSelectionChanged(const QModelIndex& current, const QModelIndex& previous) override;
|
bool onSelectionChanged(const QModelIndex& current, const QModelIndex& previous) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void runningStateChanged(bool running);
|
void removeItems(const QItemSelection& selection) override;
|
||||||
void removeItems(const QItemSelection &selection) override;
|
|
||||||
|
|
||||||
void installMods();
|
void installMods();
|
||||||
void updateMods();
|
void updateMods();
|
||||||
|
Loading…
Reference in New Issue
Block a user