summaryrefslogtreecommitdiffstats
path: root/application/pages/WorldListPage.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2018-03-19 02:36:12 +0100
committerPetr Mrázek <peterix@gmail.com>2018-03-27 09:25:36 +0200
commit8e44ab2338f4ca63d58de4b3329c384df9d6c053 (patch)
tree60b915ec620221656d1c3a42f40124b15e9e69f0 /application/pages/WorldListPage.cpp
parent4c7ea0f99a23f73fd3cae87f7dfaab89922a2311 (diff)
downloadMultiMC-8e44ab2338f4ca63d58de4b3329c384df9d6c053.tar
MultiMC-8e44ab2338f4ca63d58de4b3329c384df9d6c053.tar.gz
MultiMC-8e44ab2338f4ca63d58de4b3329c384df9d6c053.tar.lz
MultiMC-8e44ab2338f4ca63d58de4b3329c384df9d6c053.tar.xz
MultiMC-8e44ab2338f4ca63d58de4b3329c384df9d6c053.zip
NOISSUE redo new instance dialog
Diffstat (limited to 'application/pages/WorldListPage.cpp')
-rw-r--r--application/pages/WorldListPage.cpp330
1 files changed, 0 insertions, 330 deletions
diff --git a/application/pages/WorldListPage.cpp b/application/pages/WorldListPage.cpp
deleted file mode 100644
index 56a7e791..00000000
--- a/application/pages/WorldListPage.cpp
+++ /dev/null
@@ -1,330 +0,0 @@
-/* Copyright 2015-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 "WorldListPage.h"
-#include "ui_WorldListPage.h"
-#include "minecraft/WorldList.h"
-#include <DesktopServices.h>
-#include "dialogs/ModEditDialogCommon.h"
-#include <QEvent>
-#include <QKeyEvent>
-#include <QClipboard>
-#include <QMessageBox>
-#include <QTreeView>
-#include <QInputDialog>
-#include <tools/MCEditTool.h>
-
-#include "MultiMC.h"
-#include <GuiUtil.h>
-#include <QProcess>
-#include <FileSystem.h>
-
-WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr<WorldList> worlds, QString id,
- QString iconName, QString displayName, QString helpPage,
- QWidget *parent)
- : QWidget(parent), m_inst(inst), ui(new Ui::WorldListPage), m_worlds(worlds), m_iconName(iconName), m_id(id), m_displayName(displayName), m_helpName(helpPage)
-{
- ui->setupUi(this);
- ui->tabWidget->tabBar()->hide();
- QSortFilterProxyModel * proxy = new QSortFilterProxyModel(this);
- proxy->setSortCaseSensitivity(Qt::CaseInsensitive);
- proxy->setSourceModel(m_worlds.get());
- ui->worldTreeView->setSortingEnabled(true);
- ui->worldTreeView->setModel(proxy);
- ui->worldTreeView->installEventFilter(this);
-
- auto head = ui->worldTreeView->header();
-
- head->setSectionResizeMode(0, QHeaderView::Stretch);
- head->setSectionResizeMode(1, QHeaderView::ResizeToContents);
- connect(ui->worldTreeView->selectionModel(),
- SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this,
- SLOT(worldChanged(const QModelIndex &, const QModelIndex &)));
- worldChanged(QModelIndex(), QModelIndex());
-}
-
-void WorldListPage::opened()
-{
- m_worlds->startWatching();
-}
-
-void WorldListPage::closed()
-{
- m_worlds->stopWatching();
-}
-
-WorldListPage::~WorldListPage()
-{
- m_worlds->stopWatching();
- delete ui;
-}
-
-bool WorldListPage::shouldDisplay() const
-{
- return true;
-}
-
-bool WorldListPage::worldListFilter(QKeyEvent *keyEvent)
-{
- switch (keyEvent->key())
- {
- case Qt::Key_Delete:
- on_rmWorldBtn_clicked();
- return true;
- default:
- break;
- }
- return QWidget::eventFilter(ui->worldTreeView, keyEvent);
-}
-
-bool WorldListPage::eventFilter(QObject *obj, QEvent *ev)
-{
- if (ev->type() != QEvent::KeyPress)
- {
- return QWidget::eventFilter(obj, ev);
- }
- QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
- if (obj == ui->worldTreeView)
- return worldListFilter(keyEvent);
- return QWidget::eventFilter(obj, ev);
-}
-
-void WorldListPage::on_rmWorldBtn_clicked()
-{
- auto proxiedIndex = getSelectedWorld();
-
- if(!proxiedIndex.isValid())
- return;
-
- auto result = QMessageBox::question(this,
- tr("Are you sure?"),
- tr("This will remove the selected world permenantly.\n"
- "The world will be gone forever (A LONG TIME).\n"
- "\n"
- "Do you want to continue?"));
- if(result != QMessageBox::Yes)
- {
- return;
- }
- m_worlds->stopWatching();
- m_worlds->deleteWorld(proxiedIndex.row());
- m_worlds->startWatching();
-}
-
-void WorldListPage::on_viewFolderBtn_clicked()
-{
- DesktopServices::openDirectory(m_worlds->dir().absolutePath(), true);
-}
-
-QModelIndex WorldListPage::getSelectedWorld()
-{
- auto index = ui->worldTreeView->selectionModel()->currentIndex();
-
- auto proxy = (QSortFilterProxyModel *) ui->worldTreeView->model();
- return proxy->mapToSource(index);
-}
-
-void WorldListPage::on_copySeedBtn_clicked()
-{
- QModelIndex index = getSelectedWorld();
-
- if (!index.isValid())
- {
- return;
- }
- int64_t seed = m_worlds->data(index, WorldList::SeedRole).toLongLong();
- MMC->clipboard()->setText(QString::number(seed));
-}
-
-void WorldListPage::on_mcEditBtn_clicked()
-{
- if(m_mceditStarting)
- return;
-
- auto mcedit = MMC->mcedit();
-
- const QString mceditPath = mcedit->path();
-
- QModelIndex index = getSelectedWorld();
-
- if (!index.isValid())
- {
- return;
- }
-
- if(!worldSafetyNagQuestion())
- return;
-
- auto fullPath = m_worlds->data(index, WorldList::FolderRole).toString();
-
- auto program = mcedit->getProgramPath();
- if(program.size())
- {
-#ifdef Q_OS_WIN32
- if(!QProcess::startDetached(program, {fullPath}, mceditPath))
- {
- mceditError();
- }
-#else
- m_mceditProcess.reset(new LoggedProcess());
- m_mceditProcess->setDetachable(true);
- connect(m_mceditProcess.get(), &LoggedProcess::stateChanged, this, &WorldListPage::mceditState);
- m_mceditProcess->start(program, {fullPath});
- m_mceditProcess->setWorkingDirectory(mceditPath);
- m_mceditStarting = true;
-#endif
- }
- else
- {
- QMessageBox::warning(
- this->parentWidget(),
- tr("No MCEdit found or set up!"),
- tr("You do not have MCEdit set up or it was moved.\nYou can set it up in the global settings.")
- );
- }
-}
-
-void WorldListPage::mceditError()
-{
- QMessageBox::warning(
- this->parentWidget(),
- tr("MCEdit failed to start!"),
- tr("MCEdit failed to start.\nIt may be necessary to reinstall it.")
- );
-}
-
-void WorldListPage::mceditState(LoggedProcess::State state)
-{
- bool failed = false;
- switch(state)
- {
- case LoggedProcess::NotRunning:
- case LoggedProcess::Starting:
- return;
- case LoggedProcess::FailedToStart:
- case LoggedProcess::Crashed:
- case LoggedProcess::Aborted:
- {
- failed = true;
- }
- case LoggedProcess::Running:
- case LoggedProcess::Finished:
- {
- m_mceditStarting = false;
- break;
- }
- }
- if(failed)
- {
- mceditError();
- }
-}
-
-void WorldListPage::worldChanged(const QModelIndex &current, const QModelIndex &previous)
-{
- QModelIndex index = getSelectedWorld();
- bool enable = index.isValid();
- ui->copySeedBtn->setEnabled(enable);
- ui->mcEditBtn->setEnabled(enable);
- ui->rmWorldBtn->setEnabled(enable);
- ui->copyBtn->setEnabled(enable);
- ui->renameBtn->setEnabled(enable);
-}
-
-void WorldListPage::on_addBtn_clicked()
-{
- auto list = GuiUtil::BrowseForFiles(
- m_helpName,
- tr("Select a Minecraft world zip"),
- tr("Minecraft World Zip File (*.zip)"), QString(), this->parentWidget());
- if (!list.empty())
- {
- m_worlds->stopWatching();
- for (auto filename : list)
- {
- m_worlds->installWorld(QFileInfo(filename));
- }
- m_worlds->startWatching();
- }
-}
-
-bool WorldListPage::isWorldSafe(QModelIndex)
-{
- return !m_inst->isRunning();
-}
-
-bool WorldListPage::worldSafetyNagQuestion()
-{
- if(!isWorldSafe(getSelectedWorld()))
- {
- auto result = QMessageBox::question(this, tr("Copy World"), tr("Changing a world while Minecraft is running is potentially unsafe.\nDo you wish to proceed?"));
- if(result == QMessageBox::No)
- {
- return false;
- }
- }
- return true;
-}
-
-
-void WorldListPage::on_copyBtn_clicked()
-{
- QModelIndex index = getSelectedWorld();
- if (!index.isValid())
- {
- return;
- }
-
- if(!worldSafetyNagQuestion())
- return;
-
- auto worldVariant = m_worlds->data(index, WorldList::ObjectRole);
- auto world = (World *) worldVariant.value<void *>();
- bool ok = false;
- QString name = QInputDialog::getText(this, tr("World name"), tr("Enter a new name for the copy."), QLineEdit::Normal, world->name(), &ok);
-
- if (ok && name.length() > 0)
- {
- world->install(m_worlds->dir().absolutePath(), name);
- }
-}
-
-void WorldListPage::on_renameBtn_clicked()
-{
- QModelIndex index = getSelectedWorld();
- if (!index.isValid())
- {
- return;
- }
-
- if(!worldSafetyNagQuestion())
- return;
-
- auto worldVariant = m_worlds->data(index, WorldList::ObjectRole);
- auto world = (World *) worldVariant.value<void *>();
-
- bool ok = false;
- QString name = QInputDialog::getText(this, tr("World name"), tr("Enter a new world name."), QLineEdit::Normal, world->name(), &ok);
-
- if (ok && name.length() > 0)
- {
- world->rename(name);
- }
-}
-
-void WorldListPage::on_refreshBtn_clicked()
-{
- m_worlds->update();
-}