Merge pull request #28 from 02JanDal/feature_editor
Button for opening an editor for the custom.json file
This commit is contained in:
commit
d62e175cca
18
MultiMC.cpp
18
MultiMC.cpp
@ -8,6 +8,7 @@
|
|||||||
#include <QLibraryInfo>
|
#include <QLibraryInfo>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
|
||||||
#include "gui/dialogs/VersionSelectDialog.h"
|
#include "gui/dialogs/VersionSelectDialog.h"
|
||||||
#include "logic/lists/InstanceList.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("CentralModsDir", "mods"));
|
||||||
m_settings->registerSetting(new Setting("LWJGLDir", "lwjgl"));
|
m_settings->registerSetting(new Setting("LWJGLDir", "lwjgl"));
|
||||||
|
|
||||||
|
// Editors
|
||||||
|
m_settings->registerSetting(new Setting("JsonEditor", QString()));
|
||||||
|
|
||||||
// Console
|
// Console
|
||||||
m_settings->registerSetting(new Setting("ShowConsole", true));
|
m_settings->registerSetting(new Setting("ShowConsole", true));
|
||||||
m_settings->registerSetting(new Setting("AutoCloseConsole", true));
|
m_settings->registerSetting(new Setting("AutoCloseConsole", true));
|
||||||
@ -550,4 +554,18 @@ QString MultiMC::getExitUpdatePath() const
|
|||||||
return m_updateOnExitPath;
|
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"
|
#include "MultiMC.moc"
|
||||||
|
11
MultiMC.h
11
MultiMC.h
@ -6,7 +6,6 @@
|
|||||||
#include "logger/QsLog.h"
|
#include "logger/QsLog.h"
|
||||||
#include "logger/QsLogDest.h"
|
#include "logger/QsLogDest.h"
|
||||||
|
|
||||||
|
|
||||||
class MinecraftVersionList;
|
class MinecraftVersionList;
|
||||||
class LWJGLVersionList;
|
class LWJGLVersionList;
|
||||||
class HttpMetaCache;
|
class HttpMetaCache;
|
||||||
@ -101,12 +100,12 @@ public:
|
|||||||
/*!
|
/*!
|
||||||
* Installs update from the given update files directory.
|
* 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.
|
* 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.
|
* Gets the path to install updates from on exit.
|
||||||
@ -114,6 +113,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
QString getExitUpdatePath() const;
|
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:
|
private:
|
||||||
void initLogger();
|
void initLogger();
|
||||||
|
|
||||||
|
@ -97,6 +97,7 @@ void OneSixModEditDialog::updateVersionControls()
|
|||||||
ui->revertBtn->setEnabled(customVersion);
|
ui->revertBtn->setEnabled(customVersion);
|
||||||
ui->forgeBtn->setEnabled(true);
|
ui->forgeBtn->setEnabled(true);
|
||||||
ui->liteloaderBtn->setEnabled(LiteLoaderInstaller(m_inst->intendedVersionId()).canApply());
|
ui->liteloaderBtn->setEnabled(LiteLoaderInstaller(m_inst->intendedVersionId()).canApply());
|
||||||
|
ui->customEditorBtn->setEnabled(customVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OneSixModEditDialog::disableVersionControls()
|
void OneSixModEditDialog::disableVersionControls()
|
||||||
@ -105,6 +106,7 @@ void OneSixModEditDialog::disableVersionControls()
|
|||||||
ui->revertBtn->setEnabled(false);
|
ui->revertBtn->setEnabled(false);
|
||||||
ui->forgeBtn->setEnabled(false);
|
ui->forgeBtn->setEnabled(false);
|
||||||
ui->liteloaderBtn->setEnabled(false);
|
ui->liteloaderBtn->setEnabled(false);
|
||||||
|
ui->customEditorBtn->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OneSixModEditDialog::on_customizeBtn_clicked()
|
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()
|
void OneSixModEditDialog::on_forgeBtn_clicked()
|
||||||
{
|
{
|
||||||
VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
|
VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
|
||||||
|
@ -47,6 +47,7 @@ slots:
|
|||||||
void on_liteloaderBtn_clicked();
|
void on_liteloaderBtn_clicked();
|
||||||
void on_customizeBtn_clicked();
|
void on_customizeBtn_clicked();
|
||||||
void on_revertBtn_clicked();
|
void on_revertBtn_clicked();
|
||||||
|
void on_customEditorBtn_clicked();
|
||||||
void updateVersionControls();
|
void updateVersionControls();
|
||||||
void disableVersionControls();
|
void disableVersionControls();
|
||||||
|
|
||||||
|
@ -143,6 +143,20 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
<item>
|
||||||
<spacer name="verticalSpacer_7">
|
<spacer name="verticalSpacer_7">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -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->sortByNameBtn, Sort_Name);
|
||||||
ui->sortingModeGroup->setId(ui->sortLastLaunchedBtn, Sort_LastLaunch);
|
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());
|
loadSettings(MMC->settings().get());
|
||||||
updateCheckboxStuff();
|
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)
|
void SettingsDialog::on_maximizedCheckBox_clicked(bool checked)
|
||||||
{
|
{
|
||||||
Q_UNUSED(checked);
|
Q_UNUSED(checked);
|
||||||
@ -172,6 +206,18 @@ void SettingsDialog::applySettings(SettingsObject *s)
|
|||||||
s->set("CentralModsDir", ui->modsDirTextBox->text());
|
s->set("CentralModsDir", ui->modsDirTextBox->text());
|
||||||
s->set("LWJGLDir", ui->lwjglDirTextBox->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
|
// Console
|
||||||
s->set("ShowConsole", ui->showConsoleCheck->isChecked());
|
s->set("ShowConsole", ui->showConsoleCheck->isChecked());
|
||||||
s->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked());
|
s->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked());
|
||||||
@ -226,6 +272,9 @@ void SettingsDialog::loadSettings(SettingsObject *s)
|
|||||||
ui->modsDirTextBox->setText(s->get("CentralModsDir").toString());
|
ui->modsDirTextBox->setText(s->get("CentralModsDir").toString());
|
||||||
ui->lwjglDirTextBox->setText(s->get("LWJGLDir").toString());
|
ui->lwjglDirTextBox->setText(s->get("LWJGLDir").toString());
|
||||||
|
|
||||||
|
// Editors
|
||||||
|
ui->jsonEditorTextBox->setText(s->get("JsonEditor").toString());
|
||||||
|
|
||||||
// Console
|
// Console
|
||||||
ui->showConsoleCheck->setChecked(s->get("ShowConsole").toBool());
|
ui->showConsoleCheck->setChecked(s->get("ShowConsole").toBool());
|
||||||
ui->autoCloseConsoleCheck->setChecked(s->get("AutoCloseConsole").toBool());
|
ui->autoCloseConsoleCheck->setChecked(s->get("AutoCloseConsole").toBool());
|
||||||
|
@ -55,6 +55,8 @@ slots:
|
|||||||
|
|
||||||
void on_lwjglDirBrowseBtn_clicked();
|
void on_lwjglDirBrowseBtn_clicked();
|
||||||
|
|
||||||
|
void on_jsonEditorBrowseBtn_clicked();
|
||||||
|
|
||||||
void on_maximizedCheckBox_clicked(bool checked);
|
void on_maximizedCheckBox_clicked(bool checked);
|
||||||
|
|
||||||
void on_buttonBox_accepted();
|
void on_buttonBox_accepted();
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>526</width>
|
<width>526</width>
|
||||||
<height>599</height>
|
<height>628</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -39,7 +39,7 @@
|
|||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>General</string>
|
<string>General</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="generalTabLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="sortingModeBox">
|
<widget class="QGroupBox" name="sortingModeBox">
|
||||||
<property name="enabled">
|
<property name="enabled">
|
||||||
@ -236,6 +236,32 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
<item>
|
||||||
<spacer name="generalTabSpacer">
|
<spacer name="generalTabSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
Loading…
Reference in New Issue
Block a user