summaryrefslogtreecommitdiffstats
path: root/application/pages
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2015-09-06 23:35:58 +0200
committerPetr Mrázek <peterix@gmail.com>2015-09-06 23:35:58 +0200
commit38693e1d6ca7f05d9488348ddf298488d1cc0995 (patch)
treed99551fc3ebbef931d10ee45cb34f2ee791cc1fe /application/pages
parent40b233448c7a3977d45831b8aa6cf31019c03940 (diff)
downloadMultiMC-38693e1d6ca7f05d9488348ddf298488d1cc0995.tar
MultiMC-38693e1d6ca7f05d9488348ddf298488d1cc0995.tar.gz
MultiMC-38693e1d6ca7f05d9488348ddf298488d1cc0995.tar.lz
MultiMC-38693e1d6ca7f05d9488348ddf298488d1cc0995.tar.xz
MultiMC-38693e1d6ca7f05d9488348ddf298488d1cc0995.zip
GH-1047 parse world files and integrate MCEdit with world page
Diffstat (limited to 'application/pages')
-rw-r--r--application/pages/WorldListPage.cpp104
-rw-r--r--application/pages/WorldListPage.h6
-rw-r--r--application/pages/WorldListPage.ui209
3 files changed, 225 insertions, 94 deletions
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 <QEvent>
#include <QKeyEvent>
+#include <QClipboard>
#include <QMessageBox>
+#include <QTreeView>
+
+
+#include "MultiMC.h"
WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr<WorldList> worlds, QString id,
QString iconName, QString displayName, QString helpPage,
@@ -28,8 +33,20 @@ WorldListPage::WorldListPage(BaseInstance *inst, std::shared_ptr<WorldList> 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 &current, const QModelIndex &previous)
+{
+ QModelIndex index = getSelectedWorld();
+ bool enable = index.isValid();
+ ui->copySeedBtn->setEnabled(enable);
+ ui->mcEditBtn->setEnabled(enable);
+ ui->rmWorldBtn->setEnabled(enable);
+}
diff --git a/application/pages/WorldListPage.h b/application/pages/WorldListPage.h
index d3de5d3c..c79f1be6 100644
--- a/application/pages/WorldListPage.h
+++ b/application/pages/WorldListPage.h
@@ -67,6 +67,9 @@ protected:
BaseInstance *m_inst;
private:
+ QModelIndex getSelectedWorld();
+
+private:
Ui::WorldListPage *ui;
std::shared_ptr<WorldList> m_worlds;
QString m_iconName;
@@ -75,6 +78,9 @@ private:
QString m_helpName;
private slots:
+ void on_copySeedBtn_clicked();
+ void on_mcEditBtn_clicked();
void on_rmWorldBtn_clicked();
void on_viewFolderBtn_clicked();
+ void worldChanged(const QModelIndex &current, const QModelIndex &previous);
};
diff --git a/application/pages/WorldListPage.ui b/application/pages/WorldListPage.ui
index b8100acd..9d396fa6 100644
--- a/application/pages/WorldListPage.ui
+++ b/application/pages/WorldListPage.ui
@@ -1,94 +1,125 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
- <class>WorldListPage</class>
- <widget class="QWidget" name="WorldListPage">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>723</width>
- <height>532</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Mods</string>
- </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">
- <attribute name="title">
- <string>Tab 1</string>
- </attribute>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QTreeView" name="worldTreeView">
- <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>
- <item row="0" column="1">
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QPushButton" name="rmWorldBtn">
- <property name="text">
- <string>&amp;Remove</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="viewFolderBtn">
- <property name="text">
- <string>&amp;View Folder</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </widget>
- </item>
+ <class>WorldListPage</class>
+ <widget class="QWidget" name="WorldListPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>723</width>
+ <height>532</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Mods</string>
+ </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">
+ <attribute name="title">
+ <string>Tab 1</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QTreeView" name="worldTreeView">
+ <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>
+ <property name="sortingEnabled">
+ <bool>true</bool>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <attribute name="headerStretchLastSection">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QPushButton" name="mcEditBtn">
+ <property name="text">
+ <string>MCEdit</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="copySeedBtn">
+ <property name="text">
+ <string>Copy Seed</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="rmWorldBtn">
+ <property name="text">
+ <string>&amp;Remove</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="viewFolderBtn">
+ <property name="text">
+ <string>&amp;View Folder</string>
+ </property>
+ </widget>
+ </item>
</layout>
+ </item>
+ </layout>
+ </widget>
</widget>
- <resources/>
- <connections/>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>tabWidget</tabstop>
+ <tabstop>worldTreeView</tabstop>
+ <tabstop>mcEditBtn</tabstop>
+ <tabstop>copySeedBtn</tabstop>
+ <tabstop>rmWorldBtn</tabstop>
+ <tabstop>viewFolderBtn</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
</ui>