diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-09-06 23:35:58 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-09-06 23:35:58 +0200 |
commit | 38693e1d6ca7f05d9488348ddf298488d1cc0995 (patch) | |
tree | d99551fc3ebbef931d10ee45cb34f2ee791cc1fe /application/pages | |
parent | 40b233448c7a3977d45831b8aa6cf31019c03940 (diff) | |
download | MultiMC-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.cpp | 104 | ||||
-rw-r--r-- | application/pages/WorldListPage.h | 6 | ||||
-rw-r--r-- | application/pages/WorldListPage.ui | 209 |
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 ¤t, 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 ¤t, 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>&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>&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>&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>&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> |