diff options
Diffstat (limited to 'application')
-rw-r--r-- | application/pages/VersionPage.cpp | 172 | ||||
-rw-r--r-- | application/pages/VersionPage.h | 29 | ||||
-rw-r--r-- | application/pages/VersionPage.ui | 98 |
3 files changed, 234 insertions, 65 deletions
diff --git a/application/pages/VersionPage.cpp b/application/pages/VersionPage.cpp index ab4aecf6..bb310eea 100644 --- a/application/pages/VersionPage.cpp +++ b/application/pages/VersionPage.cpp @@ -67,16 +67,14 @@ VersionPage::VersionPage(OneSixInstance *inst, QWidget *parent) m_version = m_inst->getMinecraftProfile(); if (m_version) { - ui->libraryTreeView->setModel(m_version.get()); - ui->libraryTreeView->installEventFilter(this); - ui->libraryTreeView->setSelectionMode(QAbstractItemView::SingleSelection); - connect(ui->libraryTreeView->selectionModel(), &QItemSelectionModel::currentChanged, + ui->packageView->setModel(m_version.get()); + ui->packageView->installEventFilter(this); + ui->packageView->setSelectionMode(QAbstractItemView::SingleSelection); + connect(ui->packageView->selectionModel(), &QItemSelectionModel::currentChanged, this, &VersionPage::versionCurrent); updateVersionControls(); // select first item. - auto index = ui->libraryTreeView->model()->index(0,0); - if(index.isValid()) - ui->libraryTreeView->setCurrentIndex(index); + preselect(0); } else { @@ -95,14 +93,15 @@ void VersionPage::updateVersionControls() { ui->forgeBtn->setEnabled(true); ui->liteloaderBtn->setEnabled(true); + updateButtons(); } void VersionPage::disableVersionControls() { ui->forgeBtn->setEnabled(false); ui->liteloaderBtn->setEnabled(false); - ui->reloadLibrariesBtn->setEnabled(false); - ui->removeLibraryBtn->setEnabled(false); + ui->reloadBtn->setEnabled(false); + updateButtons(); } bool VersionPage::reloadMinecraftProfile() @@ -126,21 +125,22 @@ bool VersionPage::reloadMinecraftProfile() } } -void VersionPage::on_reloadLibrariesBtn_clicked() +void VersionPage::on_reloadBtn_clicked() { reloadMinecraftProfile(); } -void VersionPage::on_removeLibraryBtn_clicked() +void VersionPage::on_removeBtn_clicked() { - if (ui->libraryTreeView->currentIndex().isValid()) + if (ui->packageView->currentIndex().isValid()) { // FIXME: use actual model, not reloading. - if (!m_version->remove(ui->libraryTreeView->currentIndex().row())) + if (!m_version->remove(ui->packageView->currentIndex().row())) { QMessageBox::critical(this, tr("Error"), tr("Couldn't remove file")); } } + updateButtons(); } void VersionPage::on_jarmodBtn_clicked() @@ -150,9 +150,10 @@ void VersionPage::on_jarmodBtn_clicked() { m_version->installJarMods(list); } + updateButtons(); } -void VersionPage::on_resetLibraryOrderBtn_clicked() +void VersionPage::on_resetOrderBtn_clicked() { try { @@ -162,43 +163,36 @@ void VersionPage::on_resetLibraryOrderBtn_clicked() { QMessageBox::critical(this, tr("Error"), e.cause()); } + updateButtons(); } -void VersionPage::on_moveLibraryUpBtn_clicked() +void VersionPage::on_moveUpBtn_clicked() { - if (ui->libraryTreeView->selectionModel()->selectedRows().isEmpty()) - { - return; - } try { - const int row = ui->libraryTreeView->selectionModel()->selectedRows().first().row(); - m_version->move(row, MinecraftProfile::MoveUp); + m_version->move(currentRow(), MinecraftProfile::MoveUp); } catch (MMCError &e) { QMessageBox::critical(this, tr("Error"), e.cause()); } + updateButtons(); } -void VersionPage::on_moveLibraryDownBtn_clicked() +void VersionPage::on_moveDownBtn_clicked() { - if (ui->libraryTreeView->selectionModel()->selectedRows().isEmpty()) - { - return; - } try { - const int row = ui->libraryTreeView->selectionModel()->selectedRows().first().row(); - m_version->move(row, MinecraftProfile::MoveDown); + m_version->move(currentRow(), MinecraftProfile::MoveDown); } catch (MMCError &e) { QMessageBox::critical(this, tr("Error"), e.cause()); } + updateButtons(); } -void VersionPage::on_changeMCVersionBtn_clicked() +void VersionPage::on_changeVersionBtn_clicked() { VersionSelectDialog vselect(m_inst->versionList().get(), tr("Change Minecraft version"), this); @@ -239,6 +233,7 @@ void VersionPage::on_changeMCVersionBtn_clicked() ProgressDialog tDialog(this); connect(updateTask.get(), SIGNAL(failed(QString)), SLOT(onGameUpdateError(QString))); tDialog.exec(updateTask.get()); + updateButtons(); } void VersionPage::on_forgeBtn_clicked() @@ -253,6 +248,7 @@ void VersionPage::on_forgeBtn_clicked() ProgressDialog dialog(this); dialog.exec( ForgeInstaller().createInstallTask(m_inst, vselect.selectedVersion(), this)); + preselect(m_version->rowCount(QModelIndex())-1); } } @@ -269,32 +265,59 @@ void VersionPage::on_liteloaderBtn_clicked() ProgressDialog dialog(this); dialog.exec( LiteLoaderInstaller().createInstallTask(m_inst, vselect.selectedVersion(), this)); + preselect(m_version->rowCount(QModelIndex())-1); } } void VersionPage::versionCurrent(const QModelIndex ¤t, const QModelIndex &previous) { - if (!current.isValid()) + currentIdx = current.row(); + updateButtons(currentIdx); +} + +void VersionPage::preselect(int row) +{ + if(row < 0) { - ui->removeLibraryBtn->setDisabled(true); - ui->moveLibraryDownBtn->setDisabled(true); - ui->moveLibraryUpBtn->setDisabled(true); + row = 0; } - else + if(row >= m_version->rowCount(QModelIndex())) { - bool enabled = m_version->canRemove(current.row()); - ui->removeLibraryBtn->setEnabled(enabled); - ui->moveLibraryDownBtn->setEnabled(enabled); - ui->moveLibraryUpBtn->setEnabled(enabled); + row = m_version->rowCount(QModelIndex()) - 1; + } + if(row < 0) + { + return; } - QString selectedId = m_version->versionFileId(current.row()); - if (selectedId == "net.minecraft") + auto model_index = m_version->index(row); + ui->packageView->selectionModel()->select(model_index, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows); + updateButtons(row); +} + +void VersionPage::updateButtons(int row) +{ + if(row == -1) + row = currentRow(); + auto patch = m_version->versionPatch(row); + if (!patch) { - ui->changeMCVersionBtn->setEnabled(true); + ui->removeBtn->setDisabled(true); + ui->moveDownBtn->setDisabled(true); + ui->moveUpBtn->setDisabled(true); + ui->changeVersionBtn->setDisabled(true); + ui->editBtn->setDisabled(true); + ui->customizeBtn->setDisabled(true); + ui->revertBtn->setDisabled(true); } else { - ui->changeMCVersionBtn->setEnabled(false); + ui->removeBtn->setEnabled(patch->isRemovable()); + ui->moveDownBtn->setEnabled(patch->isMoveable()); + ui->moveUpBtn->setEnabled(patch->isMoveable()); + ui->changeVersionBtn->setEnabled(patch->isVersionChangeable()); + ui->editBtn->setEnabled(patch->isEditable()); + ui->customizeBtn->setEnabled(patch->isCustomizable()); + ui->revertBtn->setEnabled(patch->isRevertible()); } } @@ -303,3 +326,68 @@ void VersionPage::onGameUpdateError(QString error) CustomMessageBox::selectable(this, tr("Error updating instance"), error, QMessageBox::Warning)->show(); } + +ProfilePatchPtr VersionPage::current() +{ + auto row = currentRow(); + if(row < 0) + { + return nullptr; + } + return m_version->versionPatch(row); +} + +int VersionPage::currentRow() +{ + if (ui->packageView->selectionModel()->selectedRows().isEmpty()) + { + return -1; + } + return ui->packageView->selectionModel()->selectedRows().first().row(); +} + +void VersionPage::on_customizeBtn_clicked() +{ + auto version = currentRow(); + if(version == -1) + { + return; + } + if(!m_version->customize(version)) + { + // TODO: some error box here + } + updateButtons(); + preselect(currentIdx); +} + +void VersionPage::on_editBtn_clicked() +{ + auto version = current(); + if(!version) + { + return; + } + auto filename = version->getPatchFilename(); + if(!QFileInfo::exists(filename)) + { + qWarning() << "file" << filename << "can't be opened for editing, doesn't exist!"; + return; + } + MMC->openJsonEditor(filename); +} + +void VersionPage::on_revertBtn_clicked() +{ + auto version = currentRow(); + if(version == -1) + { + return; + } + if(!m_version->revert(version)) + { + // TODO: some error box here + } + updateButtons(); + preselect(currentIdx); +} diff --git a/application/pages/VersionPage.h b/application/pages/VersionPage.h index 0965edeb..45732b25 100644 --- a/application/pages/VersionPage.h +++ b/application/pages/VersionPage.h @@ -46,22 +46,29 @@ public: return "Instance-version"; } virtual bool shouldDisplay() const; -private -slots: - // version tab +private slots: void on_forgeBtn_clicked(); void on_liteloaderBtn_clicked(); - void on_reloadLibrariesBtn_clicked(); - void on_removeLibraryBtn_clicked(); - void on_resetLibraryOrderBtn_clicked(); - void on_moveLibraryUpBtn_clicked(); - void on_moveLibraryDownBtn_clicked(); + void on_reloadBtn_clicked(); + void on_removeBtn_clicked(); + void on_resetOrderBtn_clicked(); + void on_moveUpBtn_clicked(); + void on_moveDownBtn_clicked(); void on_jarmodBtn_clicked(); + void on_revertBtn_clicked(); + void on_editBtn_clicked(); + void on_customizeBtn_clicked(); void updateVersionControls(); void disableVersionControls(); - void on_changeMCVersionBtn_clicked(); + void on_changeVersionBtn_clicked(); + +private: + ProfilePatchPtr current(); + int currentRow(); + void updateButtons(int row = -1); + void preselect(int row = 0); protected: /// FIXME: this shouldn't be necessary! @@ -71,9 +78,9 @@ private: Ui::VersionPage *ui; std::shared_ptr<MinecraftProfile> m_version; OneSixInstance *m_inst; + int currentIdx = 0; -public -slots: +public slots: void versionCurrent(const QModelIndex ¤t, const QModelIndex &previous); private slots: diff --git a/application/pages/VersionPage.ui b/application/pages/VersionPage.ui index 67a556c8..1216229f 100644 --- a/application/pages/VersionPage.ui +++ b/application/pages/VersionPage.ui @@ -11,7 +11,7 @@ </rect> </property> <property name="windowTitle"> - <string>Version</string> + <string>Package Versions</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <property name="leftMargin"> @@ -37,7 +37,7 @@ </attribute> <layout class="QHBoxLayout" name="horizontalLayout"> <item> - <widget class="ModListView" name="libraryTreeView"> + <widget class="ModListView" name="packageView"> <property name="verticalScrollBarPolicy"> <enum>Qt::ScrollBarAlwaysOn</enum> </property> @@ -65,16 +65,19 @@ </widget> </item> <item> - <widget class="QPushButton" name="changeMCVersionBtn"> + <widget class="QPushButton" name="changeVersionBtn"> + <property name="toolTip"> + <string>Change version of the selected package.</string> + </property> <property name="text"> <string>Change version</string> </property> </widget> </item> <item> - <widget class="QPushButton" name="moveLibraryUpBtn"> + <widget class="QPushButton" name="moveUpBtn"> <property name="toolTip"> - <string>This isn't implemented yet.</string> + <string>Make the selected package apply sooner.</string> </property> <property name="text"> <string>Move up</string> @@ -82,9 +85,9 @@ </widget> </item> <item> - <widget class="QPushButton" name="moveLibraryDownBtn"> + <widget class="QPushButton" name="moveDownBtn"> <property name="toolTip"> - <string>This isn't implemented yet.</string> + <string>Make the selected package apply later.</string> </property> <property name="text"> <string>Move down</string> @@ -92,13 +95,59 @@ </widget> </item> <item> - <widget class="QPushButton" name="removeLibraryBtn"> + <widget class="QPushButton" name="removeBtn"> + <property name="toolTip"> + <string>Remove selected package from the instance.</string> + </property> <property name="text"> <string>Remove</string> </property> </widget> </item> <item> + <widget class="LineSeparator" name="separator_4" native="true"/> + </item> + <item> + <widget class="QLabel" name="label_10"> + <property name="text"> + <string>Edit</string> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="customizeBtn"> + <property name="toolTip"> + <string>Customize selected package.</string> + </property> + <property name="text"> + <string>Customize</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="editBtn"> + <property name="toolTip"> + <string>Edit selected package.</string> + </property> + <property name="text"> + <string>Edit</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="revertBtn"> + <property name="toolTip"> + <string>Revert the selected package to default.</string> + </property> + <property name="text"> + <string>Revert</string> + </property> + </widget> + </item> + <item> <widget class="LineSeparator" name="separator" native="true"/> </item> <item> @@ -114,7 +163,7 @@ <item> <widget class="QPushButton" name="forgeBtn"> <property name="toolTip"> - <string>Replace any current custom version with Minecraft Forge</string> + <string>Install the Minecraft Forge package.</string> </property> <property name="text"> <string>Install Forge</string> @@ -123,6 +172,9 @@ </item> <item> <widget class="QPushButton" name="liteloaderBtn"> + <property name="toolTip"> + <string>Install the LiteLoader package.</string> + </property> <property name="text"> <string>Install LiteLoader</string> </property> @@ -130,6 +182,9 @@ </item> <item> <widget class="QPushButton" name="jarmodBtn"> + <property name="toolTip"> + <string>Add a mod into the Minecraft jar file.</string> + </property> <property name="text"> <string>Add jar mod</string> </property> @@ -149,9 +204,9 @@ </widget> </item> <item> - <widget class="QPushButton" name="resetLibraryOrderBtn"> + <widget class="QPushButton" name="resetOrderBtn"> <property name="toolTip"> - <string>This isn't implemented yet.</string> + <string>Reset apply order of packages.</string> </property> <property name="text"> <string>Reset order</string> @@ -159,7 +214,10 @@ </widget> </item> <item> - <widget class="QPushButton" name="reloadLibrariesBtn"> + <widget class="QPushButton" name="reloadBtn"> + <property name="toolTip"> + <string>Reload all packages.</string> + </property> <property name="text"> <string>Reload</string> </property> @@ -199,6 +257,22 @@ <container>1</container> </customwidget> </customwidgets> + <tabstops> + <tabstop>tabWidget</tabstop> + <tabstop>packageView</tabstop> + <tabstop>changeVersionBtn</tabstop> + <tabstop>moveUpBtn</tabstop> + <tabstop>moveDownBtn</tabstop> + <tabstop>removeBtn</tabstop> + <tabstop>customizeBtn</tabstop> + <tabstop>editBtn</tabstop> + <tabstop>revertBtn</tabstop> + <tabstop>forgeBtn</tabstop> + <tabstop>liteloaderBtn</tabstop> + <tabstop>jarmodBtn</tabstop> + <tabstop>resetOrderBtn</tabstop> + <tabstop>reloadBtn</tabstop> + </tabstops> <resources/> <connections/> </ui> |