summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Dalheimer <jan@dalheimer.de>2013-12-29 17:51:16 +0100
committerJan Dalheimer <jan@dalheimer.de>2013-12-29 17:51:16 +0100
commit3380bc75633c63e8569b76981ac29528c58943ce (patch)
tree50df3e448edcb6ecfc68702698b318609327f360
parent654f444f55de58f5cf0477e3b08b8f18e8d60831 (diff)
downloadMultiMC-3380bc75633c63e8569b76981ac29528c58943ce.tar
MultiMC-3380bc75633c63e8569b76981ac29528c58943ce.tar.gz
MultiMC-3380bc75633c63e8569b76981ac29528c58943ce.tar.lz
MultiMC-3380bc75633c63e8569b76981ac29528c58943ce.tar.xz
MultiMC-3380bc75633c63e8569b76981ac29528c58943ce.zip
Launch an editor for the custom.json file. Also allow overriding of the system default editor
-rw-r--r--MultiMC.cpp18
-rw-r--r--MultiMC.h11
-rw-r--r--gui/dialogs/OneSixModEditDialog.cpp10
-rw-r--r--gui/dialogs/OneSixModEditDialog.h1
-rw-r--r--gui/dialogs/OneSixModEditDialog.ui14
-rw-r--r--gui/dialogs/SettingsDialog.cpp32
-rw-r--r--gui/dialogs/SettingsDialog.h2
-rw-r--r--gui/dialogs/SettingsDialog.ui34
8 files changed, 117 insertions, 5 deletions
diff --git a/MultiMC.cpp b/MultiMC.cpp
index 71d0e5a7..24cdd077 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;
}
+void MultiMC::openJsonEditor(const QString &filename)
+{
+ const QString file = QDir::current().absoluteFilePath(filename);
+ if (m_settings->get("JsonEditor").toString().isEmpty())
+ {
+ QDesktopServices::openUrl(QUrl::fromLocalFile(file));
+ }
+ else
+ {
+ QProcess::startDetached(m_settings->get("JsonEditor").toString(),
+ QStringList() << file);
+ }
+}
+
#include "MultiMC.moc"
diff --git a/MultiMC.h b/MultiMC.h
index 4a33fb69..17113181 100644
--- a/MultiMC.h
+++ b/MultiMC.h
@@ -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
+ */
+ void openJsonEditor(const QString &filename);
+
private:
void initLogger();
diff --git a/gui/dialogs/OneSixModEditDialog.cpp b/gui/dialogs/OneSixModEditDialog.cpp
index d8b84d3e..e575c868 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,14 @@ void OneSixModEditDialog::on_revertBtn_clicked()
}
}
+void OneSixModEditDialog::on_customEditorBtn_clicked()
+{
+ if (m_inst->versionIsCustom())
+ {
+ MMC->openJsonEditor(m_inst->instanceRoot() + "/custom.json");
+ }
+}
+
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..a95a8e83 100644
--- a/gui/dialogs/SettingsDialog.cpp
+++ b/gui/dialogs/SettingsDialog.cpp
@@ -125,6 +125,23 @@ void SettingsDialog::on_lwjglDirBrowseBtn_clicked()
}
}
+void SettingsDialog::on_jsonEditorBrowseBtn_clicked()
+{
+ QString raw_file = QFileDialog::getOpenFileName(
+ this, tr("JSON Editor"),
+ ui->jsonEditorTextBox->text().isEmpty()
+ ? QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation).first()
+ : ui->jsonEditorTextBox->text());
+ QString cooked_file = NormalizePath(raw_file);
+
+ // it has to exist and be an executable
+ if (!cooked_file.isEmpty() && QFileInfo(cooked_file).exists() &&
+ QFileInfo(cooked_file).isExecutable())
+ {
+ ui->jsonEditorTextBox->setText(cooked_file);
+ }
+}
+
void SettingsDialog::on_maximizedCheckBox_clicked(bool checked)
{
Q_UNUSED(checked);
@@ -172,6 +189,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 +255,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..ca8c7391 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,36 @@
</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">
+ <property name="clearButtonEnabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </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>