diff options
author | Alex <robotbrain@robotbrain.info> | 2015-08-18 19:10:17 -0400 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-09-06 16:00:07 +0200 |
commit | 583e5946f4cd29f0a18bcc4fad5608de739aa113 (patch) | |
tree | a3386315509351bb936a68bce4d9bdc1ea2e4cd1 /application/pages/WorldListPage.cpp | |
parent | 16df6c16f315aaa30ea844c8ea90ad425f9d4c89 (diff) | |
download | MultiMC-583e5946f4cd29f0a18bcc4fad5608de739aa113.tar MultiMC-583e5946f4cd29f0a18bcc4fad5608de739aa113.tar.gz MultiMC-583e5946f4cd29f0a18bcc4fad5608de739aa113.tar.lz MultiMC-583e5946f4cd29f0a18bcc4fad5608de739aa113.tar.xz MultiMC-583e5946f4cd29f0a18bcc4fad5608de739aa113.zip |
GH-1047 World management for instances. Removal only currently.
Diffstat (limited to 'application/pages/WorldListPage.cpp')
-rw-r--r-- | application/pages/WorldListPage.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/application/pages/WorldListPage.cpp b/application/pages/WorldListPage.cpp new file mode 100644 index 00000000..662b7452 --- /dev/null +++ b/application/pages/WorldListPage.cpp @@ -0,0 +1,94 @@ +// +// Created by robotbrain on 8/18/15. +// + +#include "WorldListPage.h" +#include "ui_WorldListPage.h" +#include "minecraft/WorldList.h" +#include "dialogs/ModEditDialogCommon.h" +#include <QEvent> +#include <QKeyEvent> + +WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr<WorldList> worlds, QString id, + QString iconName, QString displayName, QString helpPage, + QWidget *parent) + : QWidget(parent), ui(new Ui::WorldListPage) +{ + ui->setupUi(this); + ui->tabWidget->tabBar()->hide(); + m_inst = inst; + m_worlds = worlds; + m_id = id; + m_displayName = displayName; + m_iconName = iconName; + m_helpName = helpPage; + ui->worldTreeView->setModel(m_worlds.get()); + ui->worldTreeView->installEventFilter(this); + auto smodel = ui->worldTreeView->selectionModel(); + connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), + SLOT(modCurrent(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 +{ + if (m_inst) + return !m_inst->isRunning(); + 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() +{ + int first, last; + auto list = ui->worldTreeView->selectionModel()->selectedRows(); + + if (!lastfirst(list, first, last)) + return; + m_worlds->stopWatching(); + m_worlds->deleteWorlds(first, last); + m_worlds->startWatching(); +} + +void WorldListPage::on_viewFolderBtn_clicked() +{ + openDirInDefaultProgram(m_worlds->dir().absolutePath(), true); +} |