Implement browse for global data pack folder

Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
TheKodeToad
2025-03-26 01:04:04 +00:00
parent ea82d44aab
commit 5bdc0b3871
2 changed files with 24 additions and 1 deletions

View File

@@ -36,6 +36,7 @@
*/
#include "MinecraftSettingsWidget.h"
#include <QFileDialog>
#include "Application.h"
#include "BuildConfig.h"
@@ -103,7 +104,8 @@ MinecraftSettingsWidget::MinecraftSettingsWidget(MinecraftInstancePtr instance,
connect(m_ui->globalDataPacksGroupBox, &QGroupBox::toggled, this,
[this](bool value) { m_instance->settings()->set("GlobalDataPacksEnabled", value); });
connect(m_ui->dataPacksPathEdit, &QLineEdit::editingFinished, this,
[this]() { m_instance->settings()->set("GlobalDataPacksPath", m_ui->dataPacksPathEdit->text()); });
[this] { m_instance->settings()->set("GlobalDataPacksPath", m_ui->dataPacksPathEdit->text()); });
connect(m_ui->dataPacksPathBrowse, &QPushButton::clicked, this, &MinecraftSettingsWidget::selectDataPacksFolder);
}
m_ui->maximizedWarning->hide();
@@ -472,3 +474,23 @@ bool MinecraftSettingsWidget::isQuickPlaySupported()
{
return m_instance->traits().contains("feature:is_quick_play_singleplayer");
}
void MinecraftSettingsWidget::selectDataPacksFolder()
{
QString path = QFileDialog::getExistingDirectory(this, tr("Select Global Data Packs Folder"), m_instance->instanceRoot());
if (path.isEmpty())
return;
// if it's inside the instance dir, set path relative to .minecraft
// (so that if it's directly in instance dir it will still lead with .. but more than two levels up are kept absolute)
const QUrl instanceRootUrl = QUrl::fromLocalFile(m_instance->instanceRoot());
const QUrl pathUrl = QUrl::fromLocalFile(path);
if (instanceRootUrl.isParentOf(pathUrl))
path = QDir(m_instance->gameRoot()).relativeFilePath(path);
m_ui->dataPacksPathEdit->setText(path);
m_instance->settings()->set("GlobalDataPacksPath", path);
}

View File

@@ -56,6 +56,7 @@ class MinecraftSettingsWidget : public QWidget {
void openGlobalSettings();
void updateAccountsMenu(const SettingsObject& settings);
bool isQuickPlaySupported();
void selectDataPacksFolder();
MinecraftInstancePtr m_instance;
Ui::MinecraftSettingsWidget* m_ui;