diff options
author | Sky <git@bunnies.cc> | 2013-12-30 06:04:32 -0800 |
---|---|---|
committer | Sky <git@bunnies.cc> | 2013-12-30 06:04:32 -0800 |
commit | d62e175cca3d1a9e16741623442f8bdd5c107c02 (patch) | |
tree | 9b82e5fd20529ac1ead260b2e7e7f60d54b476e6 | |
parent | 654f444f55de58f5cf0477e3b08b8f18e8d60831 (diff) | |
parent | 76438f6afe4b29b3436bc32ba18e7f4dbdfa636d (diff) | |
download | MultiMC-d62e175cca3d1a9e16741623442f8bdd5c107c02.tar MultiMC-d62e175cca3d1a9e16741623442f8bdd5c107c02.tar.gz MultiMC-d62e175cca3d1a9e16741623442f8bdd5c107c02.tar.lz MultiMC-d62e175cca3d1a9e16741623442f8bdd5c107c02.tar.xz MultiMC-d62e175cca3d1a9e16741623442f8bdd5c107c02.zip |
Merge pull request #28 from 02JanDal/feature_editor
Button for opening an editor for the custom.json file
-rw-r--r-- | MultiMC.cpp | 18 | ||||
-rw-r--r-- | MultiMC.h | 11 | ||||
-rw-r--r-- | gui/dialogs/OneSixModEditDialog.cpp | 13 | ||||
-rw-r--r-- | gui/dialogs/OneSixModEditDialog.h | 1 | ||||
-rw-r--r-- | gui/dialogs/OneSixModEditDialog.ui | 14 | ||||
-rw-r--r-- | gui/dialogs/SettingsDialog.cpp | 49 | ||||
-rw-r--r-- | gui/dialogs/SettingsDialog.h | 2 | ||||
-rw-r--r-- | gui/dialogs/SettingsDialog.ui | 30 |
8 files changed, 133 insertions, 5 deletions
diff --git a/MultiMC.cpp b/MultiMC.cpp index 71d0e5a7..865d0cf1 100644 --- a/MultiMC.cpp +++ b/MultiMC.cpp @@ -8,6 +8,7 @@ #include <QLibraryInfo> #include <QMessageBox> #include <QStringList> +#include <QDesktopServices> #include "gui/dialogs/VersionSelectDialog.h" #include "logic/lists/InstanceList.h" @@ -382,6 +383,9 @@ void MultiMC::initGlobalSettings() m_settings->registerSetting(new Setting("CentralModsDir", "mods")); m_settings->registerSetting(new Setting("LWJGLDir", "lwjgl")); + // Editors + m_settings->registerSetting(new Setting("JsonEditor", QString())); + // Console m_settings->registerSetting(new Setting("ShowConsole", true)); m_settings->registerSetting(new Setting("AutoCloseConsole", true)); @@ -550,4 +554,18 @@ QString MultiMC::getExitUpdatePath() const return m_updateOnExitPath; } +bool MultiMC::openJsonEditor(const QString &filename) +{ + const QString file = QDir::current().absoluteFilePath(filename); + if (m_settings->get("JsonEditor").toString().isEmpty()) + { + return QDesktopServices::openUrl(QUrl::fromLocalFile(file)); + } + else + { + return QProcess::startDetached(m_settings->get("JsonEditor").toString(), + QStringList() << file); + } +} + #include "MultiMC.moc" @@ -6,7 +6,6 @@ #include "logger/QsLog.h" #include "logger/QsLogDest.h" - class MinecraftVersionList; class LWJGLVersionList; class HttpMetaCache; @@ -101,12 +100,12 @@ public: /*! * Installs update from the given update files directory. */ - void installUpdates(const QString& updateFilesDir, bool restartOnFinish=false); + void installUpdates(const QString &updateFilesDir, bool restartOnFinish = false); /*! * Sets MultiMC to install updates from the given directory when it exits. */ - void setUpdateOnExit(const QString& updateFilesDir); + void setUpdateOnExit(const QString &updateFilesDir); /*! * Gets the path to install updates from on exit. @@ -114,6 +113,12 @@ public: */ QString getExitUpdatePath() const; + /*! + * Opens a json file using either a system default editor, or, if note empty, the editor + * specified in the settings + */ + bool openJsonEditor(const QString &filename); + private: void initLogger(); diff --git a/gui/dialogs/OneSixModEditDialog.cpp b/gui/dialogs/OneSixModEditDialog.cpp index d8b84d3e..3982f17d 100644 --- a/gui/dialogs/OneSixModEditDialog.cpp +++ b/gui/dialogs/OneSixModEditDialog.cpp @@ -97,6 +97,7 @@ void OneSixModEditDialog::updateVersionControls() ui->revertBtn->setEnabled(customVersion); ui->forgeBtn->setEnabled(true); ui->liteloaderBtn->setEnabled(LiteLoaderInstaller(m_inst->intendedVersionId()).canApply()); + ui->customEditorBtn->setEnabled(customVersion); } void OneSixModEditDialog::disableVersionControls() @@ -105,6 +106,7 @@ void OneSixModEditDialog::disableVersionControls() ui->revertBtn->setEnabled(false); ui->forgeBtn->setEnabled(false); ui->liteloaderBtn->setEnabled(false); + ui->customEditorBtn->setEnabled(false); } void OneSixModEditDialog::on_customizeBtn_clicked() @@ -134,6 +136,17 @@ void OneSixModEditDialog::on_revertBtn_clicked() } } +void OneSixModEditDialog::on_customEditorBtn_clicked() +{ + if (m_inst->versionIsCustom()) + { + if (!MMC->openJsonEditor(m_inst->instanceRoot() + "/custom.json")) + { + QMessageBox::warning(this, tr("Error"), tr("Unable to open custom.json, check the settings")); + } + } +} + void OneSixModEditDialog::on_forgeBtn_clicked() { VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this); diff --git a/gui/dialogs/OneSixModEditDialog.h b/gui/dialogs/OneSixModEditDialog.h index 09bd7946..2510c59c 100644 --- a/gui/dialogs/OneSixModEditDialog.h +++ b/gui/dialogs/OneSixModEditDialog.h @@ -47,6 +47,7 @@ slots: void on_liteloaderBtn_clicked(); void on_customizeBtn_clicked(); void on_revertBtn_clicked(); + void on_customEditorBtn_clicked(); void updateVersionControls(); void disableVersionControls(); diff --git a/gui/dialogs/OneSixModEditDialog.ui b/gui/dialogs/OneSixModEditDialog.ui index ad20cd73..899e0cbf 100644 --- a/gui/dialogs/OneSixModEditDialog.ui +++ b/gui/dialogs/OneSixModEditDialog.ui @@ -144,6 +144,20 @@ </widget> </item> <item> + <widget class="Line" name="line_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="customEditorBtn"> + <property name="text"> + <string>Open custom.json</string> + </property> + </widget> + </item> + <item> <spacer name="verticalSpacer_7"> <property name="orientation"> <enum>Qt::Vertical</enum> diff --git a/gui/dialogs/SettingsDialog.cpp b/gui/dialogs/SettingsDialog.cpp index 131cb5c3..30a973da 100644 --- a/gui/dialogs/SettingsDialog.cpp +++ b/gui/dialogs/SettingsDialog.cpp @@ -40,6 +40,10 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::Se ui->sortingModeGroup->setId(ui->sortByNameBtn, Sort_Name); ui->sortingModeGroup->setId(ui->sortLastLaunchedBtn, Sort_LastLaunch); +#if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) + ui->jsonEditorTextBox->setClearButtonEnabled(true); +#endif + loadSettings(MMC->settings().get()); updateCheckboxStuff(); } @@ -125,6 +129,36 @@ void SettingsDialog::on_lwjglDirBrowseBtn_clicked() } } +void SettingsDialog::on_jsonEditorBrowseBtn_clicked() +{ + QString raw_file = QFileDialog::getOpenFileName( + this, tr("JSON Editor"), + ui->jsonEditorTextBox->text().isEmpty() + #if defined(Q_OS_LINUX) + ? QString("/usr/bin") + #else + ? QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation).first() + #endif + : ui->jsonEditorTextBox->text()); + QString cooked_file = NormalizePath(raw_file); + + if (cooked_file.isEmpty()) + { + return; + } + + // it has to exist and be an executable + if (QFileInfo(cooked_file).exists() && + QFileInfo(cooked_file).isExecutable()) + { + ui->jsonEditorTextBox->setText(cooked_file); + } + else + { + QMessageBox::warning(this, tr("Invalid"), tr("The file chosen does not seem to be an executable")); + } +} + void SettingsDialog::on_maximizedCheckBox_clicked(bool checked) { Q_UNUSED(checked); @@ -172,6 +206,18 @@ void SettingsDialog::applySettings(SettingsObject *s) s->set("CentralModsDir", ui->modsDirTextBox->text()); s->set("LWJGLDir", ui->lwjglDirTextBox->text()); + // Editors + QString jsonEditor = ui->jsonEditorTextBox->text(); + if (!jsonEditor.isEmpty() && (!QFileInfo(jsonEditor).exists() || !QFileInfo(jsonEditor).isExecutable())) + { + QString found = QStandardPaths::findExecutable(jsonEditor); + if (!found.isEmpty()) + { + jsonEditor = found; + } + } + s->set("JsonEditor", jsonEditor); + // Console s->set("ShowConsole", ui->showConsoleCheck->isChecked()); s->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked()); @@ -226,6 +272,9 @@ void SettingsDialog::loadSettings(SettingsObject *s) ui->modsDirTextBox->setText(s->get("CentralModsDir").toString()); ui->lwjglDirTextBox->setText(s->get("LWJGLDir").toString()); + // Editors + ui->jsonEditorTextBox->setText(s->get("JsonEditor").toString()); + // Console ui->showConsoleCheck->setChecked(s->get("ShowConsole").toBool()); ui->autoCloseConsoleCheck->setChecked(s->get("AutoCloseConsole").toBool()); diff --git a/gui/dialogs/SettingsDialog.h b/gui/dialogs/SettingsDialog.h index 36fc4797..01357c91 100644 --- a/gui/dialogs/SettingsDialog.h +++ b/gui/dialogs/SettingsDialog.h @@ -55,6 +55,8 @@ slots: void on_lwjglDirBrowseBtn_clicked(); + void on_jsonEditorBrowseBtn_clicked(); + void on_maximizedCheckBox_clicked(bool checked); void on_buttonBox_accepted(); diff --git a/gui/dialogs/SettingsDialog.ui b/gui/dialogs/SettingsDialog.ui index 4d06d1f8..4c05b883 100644 --- a/gui/dialogs/SettingsDialog.ui +++ b/gui/dialogs/SettingsDialog.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>526</width> - <height>599</height> + <height>628</height> </rect> </property> <property name="sizePolicy"> @@ -39,7 +39,7 @@ <attribute name="title"> <string>General</string> </attribute> - <layout class="QVBoxLayout" name="generalTabLayout"> + <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QGroupBox" name="sortingModeBox"> <property name="enabled"> @@ -237,6 +237,32 @@ </widget> </item> <item> + <widget class="QGroupBox" name="editorsBox"> + <property name="title"> + <string>External Editors (leave empty for system default)</string> + </property> + <layout class="QGridLayout" name="foldersBoxLayout_2"> + <item row="0" column="1"> + <widget class="QLineEdit" name="jsonEditorTextBox"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="labelJsonEditor"> + <property name="text"> + <string>JSON Editor:</string> + </property> + </widget> + </item> + <item row="0" column="2"> + <widget class="QToolButton" name="jsonEditorBrowseBtn"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <spacer name="generalTabSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> |