From 38693e1d6ca7f05d9488348ddf298488d1cc0995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 6 Sep 2015 23:35:58 +0200 Subject: GH-1047 parse world files and integrate MCEdit with world page --- application/pages/WorldListPage.cpp | 104 ++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 5 deletions(-) (limited to 'application/pages/WorldListPage.cpp') diff --git a/application/pages/WorldListPage.cpp b/application/pages/WorldListPage.cpp index de31f519..8b95b2b0 100644 --- a/application/pages/WorldListPage.cpp +++ b/application/pages/WorldListPage.cpp @@ -19,7 +19,12 @@ #include "dialogs/ModEditDialogCommon.h" #include #include +#include #include +#include + + +#include "MultiMC.h" WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr worlds, QString id, QString iconName, QString displayName, QString helpPage, @@ -28,8 +33,20 @@ WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr worl { ui->setupUi(this); ui->tabWidget->tabBar()->hide(); - ui->worldTreeView->setModel(m_worlds.get()); + QSortFilterProxyModel * proxy = new QSortFilterProxyModel(this); + 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() @@ -79,12 +96,12 @@ bool WorldListPage::eventFilter(QObject *obj, QEvent *ev) return worldListFilter(keyEvent); return QWidget::eventFilter(obj, ev); } + void WorldListPage::on_rmWorldBtn_clicked() { - int first, last; - auto list = ui->worldTreeView->selectionModel()->selectedRows(); + auto proxiedIndex = getSelectedWorld(); - if (!lastfirst(list, first, last)) + if(!proxiedIndex.isValid()) return; auto result = QMessageBox::question(this, @@ -98,7 +115,7 @@ void WorldListPage::on_rmWorldBtn_clicked() return; } m_worlds->stopWatching(); - m_worlds->deleteWorlds(first, last); + m_worlds->deleteWorld(proxiedIndex.row()); m_worlds->startWatching(); } @@ -106,3 +123,80 @@ void WorldListPage::on_viewFolderBtn_clicked() { openDirInDefaultProgram(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() +{ + const QString mceditPath = MMC->settings()->get("MCEditPath").toString(); + + QModelIndex index = getSelectedWorld(); + + if (!index.isValid()) + { + return; + } + + auto fullPath = m_worlds->data(index, WorldList::FolderRole).toString(); + +#ifdef Q_OS_OSX + QProcess *process = new QProcess(); + connect(process, SIGNAL(finished(int, QProcess::ExitStatus)), process, SLOT(deleteLater())); + process->setProgram(mceditPath); + process->setArguments(QStringList() << fullPath); + process->start(); +#else + QDir mceditDir(mceditPath); + QString program; + #ifdef Q_OS_LINUX + if (mceditDir.exists("mcedit.py")) + { + program = mceditDir.absoluteFilePath("mcedit.py"); + } + else if (mceditDir.exists("mcedit.sh")) + { + program = mceditDir.absoluteFilePath("mcedit.sh"); + } + #elif defined(Q_OS_WIN32) + if (mceditDir.exists("mcedit.exe")) + { + program = mceditDir.absoluteFilePath("mcedit.exe"); + } + else if (mceditDir.exists("mcedit2.exe")) + { + program = mceditDir.absoluteFilePath("mcedit2.exe"); + } + #endif + if(program.size()) + { + QProcess::startDetached(program, QStringList() << fullPath, mceditPath); + } +#endif +} + +void WorldListPage::worldChanged(const QModelIndex ¤t, const QModelIndex &previous) +{ + QModelIndex index = getSelectedWorld(); + bool enable = index.isValid(); + ui->copySeedBtn->setEnabled(enable); + ui->mcEditBtn->setEnabled(enable); + ui->rmWorldBtn->setEnabled(enable); +} -- cgit v1.2.3