diff options
author | Petr Mrázek <peterix@gmail.com> | 2018-11-15 00:36:47 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2018-11-15 00:36:47 +0100 |
commit | a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8 (patch) | |
tree | 9ef4104434793e8847277c0bcbc6d49af9185545 | |
parent | 5603133822880d7c00507e2eed26f0b2f5d1a164 (diff) | |
download | MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar.gz MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar.lz MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.tar.xz MultiMC-a8e77f0ecc2f6e15896b1d6171fd66c73478d5e8.zip |
NOISSUE remove some nonsense and dead code
-rw-r--r-- | api/logic/CMakeLists.txt | 4 | ||||
-rw-r--r-- | api/logic/minecraft/MinecraftInstance.cpp | 11 | ||||
-rw-r--r-- | api/logic/minecraft/ModsModel.cpp | 374 | ||||
-rw-r--r-- | api/logic/minecraft/ModsModel.h | 123 | ||||
-rw-r--r-- | api/logic/minecraft/SimpleModList.cpp | 41 | ||||
-rw-r--r-- | application/CMakeLists.txt | 3 | ||||
-rw-r--r-- | application/InstancePageProvider.h | 17 | ||||
-rw-r--r-- | application/MainWindow.cpp | 2 | ||||
-rw-r--r-- | application/pages/instance/NewModFolderPage.cpp | 177 | ||||
-rw-r--r-- | application/pages/instance/NewModFolderPage.h | 97 | ||||
-rw-r--r-- | application/pages/instance/NewModFolderPage.ui | 180 |
11 files changed, 12 insertions, 1017 deletions
diff --git a/api/logic/CMakeLists.txt b/api/logic/CMakeLists.txt index 5d20b7a9..b8e45b30 100644 --- a/api/logic/CMakeLists.txt +++ b/api/logic/CMakeLists.txt @@ -275,8 +275,6 @@ set(MINECRAFT_SOURCES minecraft/VersionFilterData.cpp minecraft/Mod.h minecraft/Mod.cpp - minecraft/ModsModel.h - minecraft/ModsModel.cpp minecraft/SimpleModList.h minecraft/SimpleModList.cpp minecraft/World.h @@ -471,6 +469,8 @@ set(LOGIC_SOURCES ${FLAME_SOURCES} ) +message(STATUS "FOO! ${LOGIC_SOURCES}") + add_library(MultiMC_logic SHARED ${LOGIC_SOURCES}) set_target_properties(MultiMC_logic PROPERTIES CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN 1) diff --git a/api/logic/minecraft/MinecraftInstance.cpp b/api/logic/minecraft/MinecraftInstance.cpp index 77647960..f649a744 100644 --- a/api/logic/minecraft/MinecraftInstance.cpp +++ b/api/logic/minecraft/MinecraftInstance.cpp @@ -26,7 +26,6 @@ #include "meta/VersionList.h" #include "SimpleModList.h" -#include "ModsModel.h" #include "WorldList.h" #include "icons/IIconList.h" @@ -896,16 +895,6 @@ std::shared_ptr<SimpleModList> MinecraftInstance::loaderModList() const return m_loader_mod_list; } -std::shared_ptr<ModsModel> MinecraftInstance::modsModel() const -{ - if (!m_mods_model) - { - m_mods_model.reset(new ModsModel(loaderModsDir(), coreModsDir(), modsCacheLocation())); - } - m_mods_model->update(); - return m_mods_model; -} - std::shared_ptr<SimpleModList> MinecraftInstance::coreModList() const { if (!m_core_mod_list) diff --git a/api/logic/minecraft/ModsModel.cpp b/api/logic/minecraft/ModsModel.cpp deleted file mode 100644 index e401618a..00000000 --- a/api/logic/minecraft/ModsModel.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/* Copyright 2013-2018 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "ModsModel.h" -#include <FileSystem.h> -#include <QMimeData> -#include <QUrl> -#include <QUuid> -#include <QString> -#include <QFileSystemWatcher> -#include <QDebug> - -ModsModel::ModsModel(const QString &mainDir, const QString &coreDir, const QString &cacheLocation) - :QAbstractListModel(), m_mainDir(mainDir), m_coreDir(coreDir) -{ - FS::ensureFolderPathExists(m_mainDir.absolutePath()); - m_mainDir.setFilter(QDir::Readable | QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs | - QDir::NoSymLinks); - m_mainDir.setSorting(QDir::Name | QDir::IgnoreCase | QDir::LocaleAware); - m_watcher = new QFileSystemWatcher(this); - connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(directoryChanged(QString))); -} - -void ModsModel::startWatching() -{ - if(is_watching) - return; - - update(); - - is_watching = m_watcher->addPath(m_mainDir.absolutePath()); - if (is_watching) - { - qDebug() << "Started watching " << m_mainDir.absolutePath(); - } - else - { - qDebug() << "Failed to start watching " << m_mainDir.absolutePath(); - } -} - -void ModsModel::stopWatching() -{ - if(!is_watching) - return; - - is_watching = !m_watcher->removePath(m_mainDir.absolutePath()); - if (!is_watching) - { - qDebug() << "Stopped watching " << m_mainDir.absolutePath(); - } - else - { - qDebug() << "Failed to stop watching " << m_mainDir.absolutePath(); - } -} - -bool ModsModel::update() -{ - if (!isValid()) - return false; - - QList<Mod> orderedMods; - QList<Mod> newMods; - m_mainDir.refresh(); - auto folderContents = m_mainDir.entryInfoList(); - bool orderOrStateChanged = false; - - // if there are any untracked files... - if (folderContents.size()) - { - // the order surely changed! - for (auto entry : folderContents) - { - newMods.append(Mod(entry)); - } - orderedMods.append(newMods); - orderOrStateChanged = true; - } - // otherwise, if we were already tracking some mods - else if (mods.size()) - { - // if the number doesn't match, order changed. - if (mods.size() != orderedMods.size()) - orderOrStateChanged = true; - // if it does match, compare the mods themselves - else - for (int i = 0; i < mods.size(); i++) - { - if (!mods[i].strongCompare(orderedMods[i])) - { - orderOrStateChanged = true; - break; - } - } - } - beginResetModel(); - mods.swap(orderedMods); - endResetModel(); - if (orderOrStateChanged) - { - emit changed(); - } - return true; -} - -void ModsModel::directoryChanged(QString path) -{ - update(); -} - -bool ModsModel::isValid() -{ - return m_mainDir.exists() && m_mainDir.isReadable(); -} - -bool ModsModel::installMod(const QString &filename) -{ - // NOTE: fix for GH-1178: remove trailing slash to avoid issues with using the empty result of QFileInfo::fileName - QFileInfo fileinfo(FS::NormalizePath(filename)); - - qDebug() << "installing: " << fileinfo.absoluteFilePath(); - - if (!fileinfo.exists() || !fileinfo.isReadable()) - { - return false; - } - Mod m(fileinfo); - if (!m.valid()) - return false; - - auto type = m.type(); - if (type == Mod::MOD_UNKNOWN) - return false; - if (type == Mod::MOD_SINGLEFILE || type == Mod::MOD_ZIPFILE || type == Mod::MOD_LITEMOD) - { - QString newpath = FS::PathCombine(m_mainDir.path(), fileinfo.fileName()); - if (!QFile::copy(fileinfo.filePath(), newpath)) - return false; - FS::updateTimestamp(newpath); - m.repath(newpath); - update(); - return true; - } - else if (type == Mod::MOD_FOLDER) - { - QString from = fileinfo.filePath(); - QString to = FS::PathCombine(m_mainDir.path(), fileinfo.fileName()); - if (!FS::copy(from, to)()) - return false; - m.repath(to); - update(); - return true; - } - return false; -} - -bool ModsModel::enableMods(const QModelIndexList& indexes, bool enable) -{ - if(indexes.isEmpty()) - return true; - - for (auto i: indexes) - { - Mod &m = mods[i.row()]; - m.enable(enable); - emit dataChanged(i, i); - } - emit changed(); - return true; -} - -bool ModsModel::deleteMods(const QModelIndexList& indexes) -{ - if(indexes.isEmpty()) - return true; - - for (auto i: indexes) - { - Mod &m = mods[i.row()]; - m.destroy(); - } - emit changed(); - return true; -} - -int ModsModel::columnCount(const QModelIndex &parent) const -{ - return NUM_COLUMNS; -} - -QVariant ModsModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - - int row = index.row(); - int column = index.column(); - - if (row < 0 || row >= mods.size()) - return QVariant(); - - switch (role) - { - case Qt::DisplayRole: - switch (column) - { - case NameColumn: - return mods[row].name(); - case VersionColumn: - return mods[row].version(); - case DateColumn: - return mods[row].dateTimeChanged(); - case LocationColumn: - return "Unknown"; - - default: - return QVariant(); - } - - case Qt::ToolTipRole: - return mods[row].mmc_id(); - - case Qt::CheckStateRole: - switch (column) - { - case ActiveColumn: - return mods[row].enabled() ? Qt::Checked : Qt::Unchecked; - default: - return QVariant(); - } - default: - return QVariant(); - } -} - -bool ModsModel::setData(const QModelIndex &index, const QVariant &value, int role) -{ - if (index.row() < 0 || index.row() >= rowCount(index) || !index.isValid()) - { - return false; - } - - if (role == Qt::CheckStateRole) - { - auto &mod = mods[index.row()]; - if (mod.enable(!mod.enabled())) - { - emit dataChanged(index, index); - return true; - } - } - return false; -} - -QVariant ModsModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - switch (role) - { - case Qt::DisplayRole: - switch (section) - { - case ActiveColumn: - return QString(); - case NameColumn: - return tr("Name"); - case VersionColumn: - return tr("Version"); - case DateColumn: - return tr("Last changed"); - case LocationColumn: - return tr("Location"); - default: - return QVariant(); - } - - case Qt::ToolTipRole: - switch (section) - { - case ActiveColumn: - return tr("Is the mod enabled?"); - case NameColumn: - return tr("The name of the mod."); - case VersionColumn: - return tr("The version of the mod."); - case DateColumn: - return tr("The date and time this mod was last changed (or added)."); - case LocationColumn: - return tr("Where the mod is located (inside or outside the instance)."); - default: - return QVariant(); - } - default: - return QVariant(); - } - return QVariant(); -} - -Qt::ItemFlags ModsModel::flags(const QModelIndex &index) const -{ - Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index); - if (index.isValid()) - return Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled | - defaultFlags; - else - return Qt::ItemIsDropEnabled | defaultFlags; -} - -Qt::DropActions ModsModel::supportedDropActions() const -{ - // copy from outside, move from within and other mod lists - return Qt::CopyAction | Qt::MoveAction; -} - -QStringList ModsModel::mimeTypes() const -{ - QStringList types; - types << "text/uri-list"; - return types; -} - -bool ModsModel::dropMimeData(const QMimeData* data, Qt::DropAction action, int, int, const QModelIndex&) -{ - if (action == Qt::IgnoreAction) - { - return true; - } - - // check if the action is supported - if (!data || !(action & supportedDropActions())) - { - return false; - } - - // files dropped from outside? - if (data->hasUrls()) - { - bool was_watching = is_watching; - if (was_watching) - { - stopWatching(); - } - auto urls = data->urls(); - for (auto url : urls) - { - // only local files may be dropped... - if (!url.isLocalFile()) - { - continue; - } - // TODO: implement not only copy, but also move - // FIXME: handle errors here - installMod(url.toLocalFile()); - } - if (was_watching) - { - startWatching(); - } - return true; - } - return false; -} diff --git a/api/logic/minecraft/ModsModel.h b/api/logic/minecraft/ModsModel.h deleted file mode 100644 index b8980ac4..00000000 --- a/api/logic/minecraft/ModsModel.h +++ /dev/null @@ -1,123 +0,0 @@ -/* Copyright 2013-2018 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include <QList> -#include <QString> -#include <QDir> -#include <QAbstractListModel> - -#include "minecraft/Mod.h" - -#include "multimc_logic_export.h" - -class LegacyInstance; -class BaseInstance; -class QFileSystemWatcher; - -/** - * A legacy mod list. - * Backed by a folder. - */ -class MULTIMC_LOGIC_EXPORT ModsModel : public QAbstractListModel -{ - Q_OBJECT -public: - enum Columns - { - ActiveColumn = 0, - NameColumn, - DateColumn, - VersionColumn, - LocationColumn, - NUM_COLUMNS - }; - ModsModel(const QString &mainDir, const QString &coreDir, const QString &cacheFile); - - virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; - Qt::DropActions supportedDropActions() const override; - - /// flags, mostly to support drag&drop - virtual Qt::ItemFlags flags(const QModelIndex &index) const override; - QStringList mimeTypes() const override; - bool dropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent) override; - - virtual int rowCount(const QModelIndex &) const override - { - return size(); - } - ; - virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - virtual int columnCount(const QModelIndex &parent) const override; - - size_t size() const - { - return mods.size(); - } - ; - bool empty() const - { - return size() == 0; - } - Mod &operator[](size_t index) - { - return mods[index]; - } - - /// Reloads the mod list and returns true if the list changed. - virtual bool update(); - - /** - * Adds the given mod to the list at the given index - if the list supports custom ordering - */ - bool installMod(const QString& filename); - - /// Deletes all the selected mods - virtual bool deleteMods(const QModelIndexList &indexes); - - /// Enable or disable listed mods - virtual bool enableMods(const QModelIndexList &indexes, bool enable = true); - - void startWatching(); - void stopWatching(); - - virtual bool isValid(); - - QDir dir() - { - return m_mainDir; - } - - const QList<Mod> & allMods() - { - return mods; - } - -private -slots: - void directoryChanged(QString path); - -signals: - void changed(); - -protected: - QFileSystemWatcher *m_watcher; - bool is_watching = false; - QDir m_mainDir; - QDir m_coreDir; - QList<Mod> mods; -}; diff --git a/api/logic/minecraft/SimpleModList.cpp b/api/logic/minecraft/SimpleModList.cpp index adab5ba4..147be72a 100644 --- a/api/logic/minecraft/SimpleModList.cpp +++ b/api/logic/minecraft/SimpleModList.cpp @@ -71,47 +71,18 @@ bool SimpleModList::update() if (!isValid()) return false; - QList<Mod> orderedMods; QList<Mod> newMods; m_dir.refresh(); - auto folderContents = m_dir.entryInfoList(); - bool orderOrStateChanged = false; - - // if there are any untracked files... - if (folderContents.size()) + for (auto entry : m_dir.entryInfoList()) { - // the order surely changed! - for (auto entry : folderContents) - { - newMods.append(Mod(entry)); - } - orderedMods.append(newMods); - orderOrStateChanged = true; - } - // otherwise, if we were already tracking some mods - else if (mods.size()) - { - // if the number doesn't match, order changed. - if (mods.size() != orderedMods.size()) - orderOrStateChanged = true; - // if it does match, compare the mods themselves - else - for (int i = 0; i < mods.size(); i++) - { - if (!mods[i].strongCompare(orderedMods[i])) - { - orderOrStateChanged = true; - break; - } - } + newMods.append(Mod(entry)); } + beginResetModel(); - mods.swap(orderedMods); + mods.swap(newMods); endResetModel(); - if (orderOrStateChanged) - { - emit changed(); - } + + emit changed(); return true; } diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt index 2ba23828..30fa8464 100644 --- a/application/CMakeLists.txt +++ b/application/CMakeLists.txt @@ -90,8 +90,6 @@ SET(MULTIMC_SOURCES pages/instance/ResourcePackPage.h pages/instance/ModFolderPage.cpp pages/instance/ModFolderPage.h - pages/instance/NewModFolderPage.cpp - pages/instance/NewModFolderPage.h pages/instance/NotesPage.cpp pages/instance/NotesPage.h pages/instance/LogPage.cpp @@ -229,7 +227,6 @@ SET(MULTIMC_UIS # Instance pages pages/instance/VersionPage.ui pages/instance/ModFolderPage.ui - pages/instance/NewModFolderPage.ui pages/instance/LogPage.ui pages/instance/InstanceSettingsPage.ui pages/instance/NotesPage.ui diff --git a/application/InstancePageProvider.h b/application/InstancePageProvider.h index ae279d94..e72ba797 100644 --- a/application/InstancePageProvider.h +++ b/application/InstancePageProvider.h @@ -7,7 +7,6 @@ #include "pages/instance/LogPage.h" #include "pages/instance/VersionPage.h" #include "pages/instance/ModFolderPage.h" -#include "pages/instance/NewModFolderPage.h" #include "pages/instance/ResourcePackPage.h" #include "pages/instance/TexturePackPage.h" #include "pages/instance/NotesPage.h" @@ -38,19 +37,9 @@ public: if(onesix) { values.append(new VersionPage(onesix.get())); - if(ENV.isFeatureEnabled("NewModsPage")) - { - auto modsPage = new NewModFolderPage(onesix.get(), onesix->modsModel(), "mods", "loadermods", tr("Mods"), "Mods-page"); - modsPage->setFilter("%1 (*.zip *.jar *.litemod)"); - values.append(modsPage); - } - else - { - auto modsPage = new ModFolderPage(onesix.get(), onesix->loaderModList(), "mods", "loadermods", tr("Loader mods"), "Loader-mods"); - modsPage->setFilter("%1 (*.zip *.jar *.litemod)"); - values.append(modsPage); - } - + auto modsPage = new ModFolderPage(onesix.get(), onesix->loaderModList(), "mods", "loadermods", tr("Loader mods"), "Loader-mods"); + modsPage->setFilter("%1 (*.zip *.jar *.litemod)"); + values.append(modsPage); values.append(new CoreModFolderPage(onesix.get(), onesix->coreModList(), "coremods", "coremods", tr("Core mods"), "Core-mods")); values.append(new ResourcePackPage(onesix.get())); values.append(new TexturePackPage(onesix.get())); diff --git a/application/MainWindow.cpp b/application/MainWindow.cpp index 2b6d0c0e..595e0615 100644 --- a/application/MainWindow.cpp +++ b/application/MainWindow.cpp @@ -825,7 +825,7 @@ MainWindow::~MainWindow() void MainWindow::konamiTriggered() { - ENV.enableFeature("NewModsPage"); + // ENV.enableFeature("NewModsPage"); qDebug() << "Super Secret Mode ACTIVATED!"; } diff --git a/application/pages/instance/NewModFolderPage.cpp b/application/pages/instance/NewModFolderPage.cpp deleted file mode 100644 index da65bc9a..00000000 --- a/application/pages/instance/NewModFolderPage.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright 2013-2018 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "NewModFolderPage.h" -#include "ui_NewModFolderPage.h" - -#include <QMessageBox> -#include <QEvent> -#include <QKeyEvent> -#include <QAbstractItemModel> - -#include "MultiMC.h" -#include "dialogs/CustomMessageBox.h" -#include "dialogs/ModEditDialogCommon.h" -#include <GuiUtil.h> -#include "minecraft/ModsModel.h" -#include "minecraft/Mod.h" -#include "minecraft/VersionFilterData.h" -#include "minecraft/ComponentList.h" -#include <DesktopServices.h> - -NewModFolderPage::NewModFolderPage(BaseInstance *inst, std::shared_ptr<ModsModel> mods, QString id, - QString iconName, QString displayName, QString helpPage, - QWidget *parent) - : QWidget(parent), ui(new Ui::NewModFolderPage) -{ - ui->setupUi(this); - ui->tabWidget->tabBar()->hide(); - m_inst = inst; - m_mods = mods; - m_id = id; - m_displayName = displayName; - m_iconName = iconName; - m_helpName = helpPage; - m_fileSelectionFilter = "%1 (*.zip *.jar)"; - m_filterModel = new QSortFilterProxyModel(this); - m_filterModel->setDynamicSortFilter(true); - m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); - m_filterModel->setSortCaseSensitivity(Qt::CaseInsensitive); - m_filterModel->setSourceModel(m_mods.get()); - m_filterModel->setFilterKeyColumn(-1); - ui->modTreeView->setModel(m_filterModel); - ui->modTreeView->installEventFilter(this); - ui->modTreeView->sortByColumn(1, Qt::AscendingOrder); - auto smodel = ui->modTreeView->selectionModel(); - connect(smodel, &QItemSelectionModel::currentChanged, this, &NewModFolderPage::modCurrent); - connect(ui->filterEdit, &QLineEdit::textChanged, this, &NewModFolderPage::on_filterTextChanged ); -} - -void NewModFolderPage::openedImpl() -{ - m_mods->startWatching(); -} - -void NewModFolderPage::closedImpl() -{ - m_mods->stopWatching(); -} - -void NewModFolderPage::on_filterTextChanged(const QString& newContents) -{ - m_viewFilter = newContents; - m_filterModel->setFilterFixedString(m_viewFilter); -} - - -NewModFolderPage::~NewModFolderPage() -{ - m_mods->stopWatching(); - delete ui; -} - -bool NewModFolderPage::shouldDisplay() const -{ - if (m_inst) - return !m_inst->isRunning(); - return true; -} - -bool NewModFolderPage::modListFilter(QKeyEvent *keyEvent) -{ - switch (keyEvent->key()) - { - case Qt::Key_Delete: - on_rmModBtn_clicked(); - return true; - case Qt::Key_Plus: - on_addModBtn_clicked(); - return true; - default: - break; - } - return QWidget::eventFilter(ui->modTreeView, keyEvent); -} - -bool NewModFolderPage::eventFilter(QObject *obj, QEvent *ev) -{ - if (ev->type() != QEvent::KeyPress) - { - return QWidget::eventFilter(obj, ev); - } - QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev); - if (obj == ui->modTreeView) - return modListFilter(keyEvent); - return QWidget::eventFilter(obj, ev); -} - -void NewModFolderPage::on_addModBtn_clicked() -{ - auto list = GuiUtil::BrowseForFiles( - m_helpName, - tr("Select %1", - "Select whatever type of files the page contains. Example: 'Loader Mods'") - .arg(m_displayName), - m_fileSelectionFilter.arg(m_displayName), MMC->settings()->get("CentralModsDir").toString(), - this->parentWidget()); - if (!list.empty()) - { - for (auto filename : list) - { - m_mods->installMod(filename); - } - } -} - -void NewModFolderPage::on_enableModBtn_clicked() -{ - auto selection = m_filterModel->mapSelectionToSource(ui->modTreeView->selectionModel()->selection()); - m_mods->enableMods(selection.indexes(), true); -} - -void NewModFolderPage::on_disableModBtn_clicked() -{ - auto selection = m_filterModel->mapSelectionToSource(ui->modTreeView->selectionModel()->selection()); - m_mods->enableMods(selection.indexes(), false); -} - -void NewModFolderPage::on_rmModBtn_clicked() -{ - auto selection = m_filterModel->mapSelectionToSource(ui->modTreeView->selectionModel()->selection()); - m_mods->deleteMods(selection.indexes()); -} - -void NewModFolderPage::on_configFolderBtn_clicked() -{ - DesktopServices::openDirectory(m_inst->instanceConfigFolder(), true); -} - -void NewModFolderPage::on_viewModBtn_clicked() -{ - DesktopServices::openDirectory(m_mods->dir().absolutePath(), true); -} - -void NewModFolderPage::modCurrent(const QModelIndex ¤t, const QModelIndex &previous) -{ - if (!current.isValid()) - { - ui->frame->clear(); - return; - } - auto sourceCurrent = m_filterModel->mapToSource(current); - int row = sourceCurrent.row(); - Mod &m = m_mods->operator[](row); - ui->frame->updateWithMod(m); -} diff --git a/application/pages/instance/NewModFolderPage.h b/application/pages/instance/NewModFolderPage.h deleted file mode 100644 index 5446a607..00000000 --- a/application/pages/instance/NewModFolderPage.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright 2013-2018 MultiMC Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include <QWidget> - -#include "minecraft/MinecraftInstance.h" -#include "pages/BasePage.h" -#include <MultiMC.h> - -class SimpleModList; -namespace Ui -{ -class NewModFolderPage; -} - -class NewModFolderPage : public QWidget, public BasePage -{ - Q_OBJECT - -public: - explicit NewModFolderPage(BaseInstance *inst, std::shared_ptr<ModsModel> mods, QString id, - QString iconName, QString displayName, QString helpPage = "", - QWidget *parent = 0); - virtual ~NewModFolderPage(); - - void setFilter(const QString & filter) - { - m_fileSelectionFilter = filter; - } - - virtual QString displayName() const override - { - return m_displayName; - } - virtual QIcon icon() const override - { - return MMC->getThemedIcon(m_iconName); - } - virtual QString id() const override - { - return m_id; - } - virtual QString helpPage() const override - { - return m_helpName; - } - virtual bool shouldDisplay() const override; - - virtual void openedImpl() override; - virtual void closedImpl() override; -protected: - bool eventFilter(QObject *obj, QEvent *ev) override; - bool modListFilter(QKeyEvent *ev); - -protected: - BaseInstance *m_inst; - -protected: - Ui::NewModFolderPage *ui; - std::shared_ptr<ModsModel> m_mods; - QSortFilterProxyModel *m_filterModel; - QString m_iconName; - QString m_id; - QString m_displayName; - QString m_helpName; - QString m_fileSelectionFilter; - QString m_viewFilter; - -public -slots: - void modCurrent(const QModelIndex ¤t, const QModelIndex &previous); - -private -slots: - void on_filterTextChanged(const QString & newContents); - void on_addModBtn_clicked(); - void on_rmModBtn_clicked(); - void on_viewModBtn_clicked(); - void on_enableModBtn_clicked(); - void on_disableModBtn_clicked(); - void on_configFolderBtn_clicked(); -}; - diff --git a/application/pages/instance/NewModFolderPage.ui b/application/pages/instance/NewModFolderPage.ui deleted file mode 100644 index 48c36383..00000000 --- a/application/pages/instance/NewModFolderPage.ui +++ /dev/null @@ -1,180 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>NewModFolderPage</class> - <widget class="QWidget" name="NewModFolderPage"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>723</width> - <height>532</height> - </rect> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QTabWidget" name="tabWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tab"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <attribute name="title"> - <string notr="true">Tab 1</string> - </attribute> - <layout class="QGridLayout" name="gridLayout" columnstretch="0,1,0"> - <item row="0" column="2"> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QPushButton" name="addModBtn"> - <property name="text"> - <string>&Add</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="rmModBtn"> - <property name="text"> - <string>&Remove</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="enableModBtn"> - <property name="text"> - <string>Enable</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="disableModBtn"> - <property name="text"> - <string>Disable</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="configFolderBtn"> - <property name="toolTip"> - <string>Open the 'config' folder in the system file manager.</string> - </property> - <property name="text"> - <string>View configs</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="viewModBtn"> - <property name="text"> - <string>&View Folder</string> - </property> - </widget> - </item> - </layout> - </item> - <item row="1" column="0" colspan="3"> - <widget class="MCModInfoFrame" name="frame"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="0" column="0" colspan="2"> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="1" column="1"> - <widget class="QLineEdit" name="filterEdit"> - <property name="clearButtonEnabled"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="filterLabel"> - <property name="text"> - <string>Filter:</string> - </property> - </widget> - </item> - <item row="0" column="0" colspan="3"> - <widget class="ModListView" name="modTreeView"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="dragDropMode"> - <enum>QAbstractItemView::DropOnly</enum> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>ModListView</class> - <extends>QTreeView</extends> - <header>widgets/ModListView.h</header> - </customwidget> - <customwidget> - <class>MCModInfoFrame</class> - <extends>QFrame</extends> - <header>widgets/MCModInfoFrame.h</header> - <container>1</container> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>tabWidget</tabstop> - <tabstop>modTreeView</tabstop> - <tabstop>filterEdit</tabstop> - <tabstop>addModBtn</tabstop> - <tabstop>rmModBtn</tabstop> - <tabstop>enableModBtn</tabstop> - <tabstop>disableModBtn</tabstop> - <tabstop>configFolderBtn</tabstop> - <tabstop>viewModBtn</tabstop> - </tabstops> - <resources/> - <connections/> -</ui> |