Merge pull request #685 from byteduck/instance-accounts
This commit is contained in:
commit
3de681d2d6
@ -112,7 +112,15 @@ void LaunchController::decideAccount()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Select the account to use. If the instance has a specific account set, that will be used. Otherwise, the default account will be used
|
||||||
|
auto instanceAccountId = m_instance->settings()->get("InstanceAccountId").toString();
|
||||||
|
auto instanceAccountIndex = accounts->findAccountByProfileId(instanceAccountId);
|
||||||
|
if (instanceAccountIndex == -1) {
|
||||||
m_accountToUse = accounts->defaultAccount();
|
m_accountToUse = accounts->defaultAccount();
|
||||||
|
} else {
|
||||||
|
m_accountToUse = accounts->at(instanceAccountIndex);
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_accountToUse)
|
if (!m_accountToUse)
|
||||||
{
|
{
|
||||||
// If no default account is set, ask the user which one to use.
|
// If no default account is set, ask the user which one to use.
|
||||||
|
@ -192,6 +192,10 @@ void MinecraftInstance::loadSpecificSettings()
|
|||||||
m_settings->registerSetting("JoinServerOnLaunch", false);
|
m_settings->registerSetting("JoinServerOnLaunch", false);
|
||||||
m_settings->registerSetting("JoinServerOnLaunchAddress", "");
|
m_settings->registerSetting("JoinServerOnLaunchAddress", "");
|
||||||
|
|
||||||
|
// Use account for instance, this does not have a global override
|
||||||
|
m_settings->registerSetting("UseAccountForInstance", false);
|
||||||
|
m_settings->registerSetting("InstanceAccountId", "");
|
||||||
|
|
||||||
qDebug() << "Instance-type specific settings were loaded!";
|
qDebug() << "Instance-type specific settings were loaded!";
|
||||||
|
|
||||||
setSpecificSettingsLoaded(true);
|
setSpecificSettingsLoaded(true);
|
||||||
|
@ -48,18 +48,23 @@
|
|||||||
|
|
||||||
#include "JavaCommon.h"
|
#include "JavaCommon.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
#include "minecraft/auth/AccountList.h"
|
||||||
|
|
||||||
#include "java/JavaInstallList.h"
|
#include "java/JavaInstallList.h"
|
||||||
#include "java/JavaUtils.h"
|
#include "java/JavaUtils.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
|
|
||||||
|
|
||||||
InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent)
|
InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent)
|
||||||
: QWidget(parent), ui(new Ui::InstanceSettingsPage), m_instance(inst)
|
: QWidget(parent), ui(new Ui::InstanceSettingsPage), m_instance(inst)
|
||||||
{
|
{
|
||||||
m_settings = inst->settings();
|
m_settings = inst->settings();
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
accountMenu = new QMenu(this);
|
||||||
|
// Use undocumented property... https://stackoverflow.com/questions/7121718/create-a-scrollbar-in-a-submenu-qt
|
||||||
|
accountMenu->setStyleSheet("QMenu { menu-scrollable: 1; }");
|
||||||
|
ui->instanceAccountSelector->setMenu(accountMenu);
|
||||||
|
|
||||||
connect(ui->openGlobalJavaSettingsButton, &QCommandLinkButton::clicked, this, &InstanceSettingsPage::globalSettingsButtonClicked);
|
connect(ui->openGlobalJavaSettingsButton, &QCommandLinkButton::clicked, this, &InstanceSettingsPage::globalSettingsButtonClicked);
|
||||||
connect(APPLICATION, &Application::globalSettingsAboutToOpen, this, &InstanceSettingsPage::applySettings);
|
connect(APPLICATION, &Application::globalSettingsAboutToOpen, this, &InstanceSettingsPage::applySettings);
|
||||||
connect(APPLICATION, &Application::globalSettingsClosed, this, &InstanceSettingsPage::loadSettings);
|
connect(APPLICATION, &Application::globalSettingsClosed, this, &InstanceSettingsPage::loadSettings);
|
||||||
@ -275,6 +280,13 @@ void InstanceSettingsPage::applySettings()
|
|||||||
m_settings->reset("JoinServerOnLaunchAddress");
|
m_settings->reset("JoinServerOnLaunchAddress");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use an account for this instance
|
||||||
|
bool useAccountForInstance = ui->instanceAccountGroupBox->isChecked();
|
||||||
|
m_settings->set("UseAccountForInstance", useAccountForInstance);
|
||||||
|
if (!useAccountForInstance) {
|
||||||
|
m_settings->reset("InstanceAccountId");
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: This should probably be called by a signal instead
|
// FIXME: This should probably be called by a signal instead
|
||||||
m_instance->updateRuntimeContext();
|
m_instance->updateRuntimeContext();
|
||||||
}
|
}
|
||||||
@ -372,6 +384,9 @@ void InstanceSettingsPage::loadSettings()
|
|||||||
|
|
||||||
ui->serverJoinGroupBox->setChecked(m_settings->get("JoinServerOnLaunch").toBool());
|
ui->serverJoinGroupBox->setChecked(m_settings->get("JoinServerOnLaunch").toBool());
|
||||||
ui->serverJoinAddress->setText(m_settings->get("JoinServerOnLaunchAddress").toString());
|
ui->serverJoinAddress->setText(m_settings->get("JoinServerOnLaunchAddress").toString());
|
||||||
|
|
||||||
|
ui->instanceAccountGroupBox->setChecked(m_settings->get("UseAccountForInstance").toBool());
|
||||||
|
updateAccountsMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstanceSettingsPage::on_javaDetectBtn_clicked()
|
void InstanceSettingsPage::on_javaDetectBtn_clicked()
|
||||||
@ -437,6 +452,65 @@ void InstanceSettingsPage::on_javaTestBtn_clicked()
|
|||||||
checker->run();
|
checker->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InstanceSettingsPage::updateAccountsMenu()
|
||||||
|
{
|
||||||
|
accountMenu->clear();
|
||||||
|
|
||||||
|
auto accounts = APPLICATION->accounts();
|
||||||
|
int accountIndex = accounts->findAccountByProfileId(m_settings->get("InstanceAccountId").toString());
|
||||||
|
MinecraftAccountPtr defaultAccount = accounts->defaultAccount();
|
||||||
|
|
||||||
|
if (accountIndex != -1 && accounts->at(accountIndex)) {
|
||||||
|
defaultAccount = accounts->at(accountIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defaultAccount) {
|
||||||
|
ui->instanceAccountSelector->setText(defaultAccount->profileName());
|
||||||
|
ui->instanceAccountSelector->setIcon(getFaceForAccount(defaultAccount));
|
||||||
|
} else {
|
||||||
|
ui->instanceAccountSelector->setText(tr("No default account"));
|
||||||
|
ui->instanceAccountSelector->setIcon(APPLICATION->getThemedIcon("noaccount"));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < accounts->count(); i++) {
|
||||||
|
MinecraftAccountPtr account = accounts->at(i);
|
||||||
|
QAction* action = new QAction(account->profileName(), this);
|
||||||
|
action->setData(i);
|
||||||
|
action->setCheckable(true);
|
||||||
|
if (accountIndex == i) {
|
||||||
|
action->setChecked(true);
|
||||||
|
}
|
||||||
|
action->setIcon(getFaceForAccount(account));
|
||||||
|
accountMenu->addAction(action);
|
||||||
|
connect(action, SIGNAL(triggered(bool)), this, SLOT(changeInstanceAccount()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QIcon InstanceSettingsPage::getFaceForAccount(MinecraftAccountPtr account)
|
||||||
|
{
|
||||||
|
if (auto face = account->getFace(); !face.isNull()) {
|
||||||
|
return face;
|
||||||
|
}
|
||||||
|
|
||||||
|
return APPLICATION->getThemedIcon("noaccount");
|
||||||
|
}
|
||||||
|
|
||||||
|
void InstanceSettingsPage::changeInstanceAccount()
|
||||||
|
{
|
||||||
|
QAction* sAction = (QAction*)sender();
|
||||||
|
|
||||||
|
Q_ASSERT(sAction->data().type() == QVariant::Type::Int);
|
||||||
|
|
||||||
|
QVariant data = sAction->data();
|
||||||
|
int index = data.toInt();
|
||||||
|
auto accounts = APPLICATION->accounts();
|
||||||
|
auto account = accounts->at(index);
|
||||||
|
m_settings->set("InstanceAccountId", account->profileId());
|
||||||
|
|
||||||
|
ui->instanceAccountSelector->setText(account->profileName());
|
||||||
|
ui->instanceAccountSelector->setIcon(getFaceForAccount(account));
|
||||||
|
}
|
||||||
|
|
||||||
void InstanceSettingsPage::on_maxMemSpinBox_valueChanged(int i)
|
void InstanceSettingsPage::on_maxMemSpinBox_valueChanged(int i)
|
||||||
{
|
{
|
||||||
updateThresholds();
|
updateThresholds();
|
||||||
|
@ -37,12 +37,13 @@
|
|||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
#include "java/JavaChecker.h"
|
|
||||||
#include "BaseInstance.h"
|
|
||||||
#include <QObjectPtr.h>
|
#include <QObjectPtr.h>
|
||||||
#include "ui/pages/BasePage.h"
|
#include <QMenu>
|
||||||
#include "JavaCommon.h"
|
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
#include "BaseInstance.h"
|
||||||
|
#include "JavaCommon.h"
|
||||||
|
#include "java/JavaChecker.h"
|
||||||
|
#include "ui/pages/BasePage.h"
|
||||||
|
|
||||||
class JavaChecker;
|
class JavaChecker;
|
||||||
namespace Ui
|
namespace Ui
|
||||||
@ -92,9 +93,14 @@ private slots:
|
|||||||
|
|
||||||
void globalSettingsButtonClicked(bool checked);
|
void globalSettingsButtonClicked(bool checked);
|
||||||
|
|
||||||
|
void updateAccountsMenu();
|
||||||
|
QIcon getFaceForAccount(MinecraftAccountPtr account);
|
||||||
|
void changeInstanceAccount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::InstanceSettingsPage *ui;
|
Ui::InstanceSettingsPage *ui;
|
||||||
BaseInstance *m_instance;
|
BaseInstance *m_instance;
|
||||||
SettingsObjectPtr m_settings;
|
SettingsObjectPtr m_settings;
|
||||||
unique_qobject_ptr<JavaCommon::TestCheck> checker;
|
unique_qobject_ptr<JavaCommon::TestCheck> checker;
|
||||||
|
QMenu *accountMenu = nullptr;
|
||||||
};
|
};
|
||||||
|
@ -608,6 +608,48 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="instanceAccountGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Override default account</string>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_15">
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="instanceAccountLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="instanceAccountNameLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Account:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QToolButton" name="instanceAccountSelector">
|
||||||
|
<property name="popupMode">
|
||||||
|
<enum>QToolButton::InstantPopup</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacerMiscellaneous">
|
<spacer name="verticalSpacerMiscellaneous">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
Loading…
Reference in New Issue
Block a user