aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSefa Eyeoglu <contact@scrumplex.net>2022-11-30 18:22:55 +0100
committerGitHub <noreply@github.com>2022-11-30 18:22:55 +0100
commit9e1653ebb471d4d96efda85cbde128c59fe3686a (patch)
tree5eb71805fc8fa97252c2aaf19b927e6481298184
parent42c00213ce97e51cdf9c0a9d3ddb235e64567994 (diff)
parent884fe0d5741de2a8a78f48c5d37274d8f174ba3a (diff)
downloadPrismLauncher-9e1653ebb471d4d96efda85cbde128c59fe3686a.tar.gz
PrismLauncher-9e1653ebb471d4d96efda85cbde128c59fe3686a.tar.bz2
PrismLauncher-9e1653ebb471d4d96efda85cbde128c59fe3686a.zip
Merge pull request #436 from Scrumplex/feat-change-maxmem
Closes https://github.com/PrismLauncher/PrismLauncher/issues/426
-rw-r--r--launcher/ui/pages/global/JavaPage.cpp34
-rw-r--r--launcher/ui/pages/global/JavaPage.h3
-rw-r--r--launcher/ui/pages/global/JavaPage.ui82
-rw-r--r--launcher/ui/pages/instance/InstanceSettingsPage.cpp35
-rw-r--r--launcher/ui/pages/instance/InstanceSettingsPage.h3
-rw-r--r--launcher/ui/pages/instance/InstanceSettingsPage.ui67
-rw-r--r--launcher/ui/widgets/JavaSettingsWidget.cpp42
-rw-r--r--launcher/ui/widgets/JavaSettingsWidget.h9
8 files changed, 199 insertions, 76 deletions
diff --git a/launcher/ui/pages/global/JavaPage.cpp b/launcher/ui/pages/global/JavaPage.cpp
index 2cee15bf..81dd4cc1 100644
--- a/launcher/ui/pages/global/JavaPage.cpp
+++ b/launcher/ui/pages/global/JavaPage.cpp
@@ -58,9 +58,8 @@ JavaPage::JavaPage(QWidget *parent) : QWidget(parent), ui(new Ui::JavaPage)
ui->setupUi(this);
ui->tabWidget->tabBar()->hide();
- auto sysMiB = Sys::getSystemRam() / Sys::mebibyte;
- ui->maxMemSpinBox->setMaximum(sysMiB);
loadSettings();
+ updateThresholds();
}
JavaPage::~JavaPage()
@@ -177,6 +176,11 @@ void JavaPage::on_javaTestBtn_clicked()
checker->run();
}
+void JavaPage::on_maxMemSpinBox_valueChanged(int i)
+{
+ updateThresholds();
+}
+
void JavaPage::checkerFinished()
{
checker.reset();
@@ -186,3 +190,29 @@ void JavaPage::retranslate()
{
ui->retranslateUi(this);
}
+
+void JavaPage::updateThresholds()
+{
+ auto sysMiB = Sys::getSystemRam() / Sys::mebibyte;
+ unsigned int maxMem = ui->maxMemSpinBox->value();
+
+ QString iconName;
+
+ if (maxMem >= sysMiB) {
+ iconName = "status-bad";
+ ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity."));
+ } else if (maxMem > (sysMiB * 0.9)) {
+ iconName = "status-yellow";
+ ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity."));
+ } else {
+ iconName = "status-good";
+ ui->labelMaxMemIcon->setToolTip("");
+ }
+
+ {
+ auto height = ui->labelMaxMemIcon->fontInfo().pixelSize();
+ QIcon icon = APPLICATION->getThemedIcon(iconName);
+ QPixmap pix = icon.pixmap(height, height);
+ ui->labelMaxMemIcon->setPixmap(pix);
+ }
+}
diff --git a/launcher/ui/pages/global/JavaPage.h b/launcher/ui/pages/global/JavaPage.h
index 64d4098e..2ef6d749 100644
--- a/launcher/ui/pages/global/JavaPage.h
+++ b/launcher/ui/pages/global/JavaPage.h
@@ -76,6 +76,8 @@ public:
bool apply() override;
void retranslate() override;
+ void updateThresholds();
+
private:
void applySettings();
void loadSettings();
@@ -85,6 +87,7 @@ slots:
void on_javaDetectBtn_clicked();
void on_javaTestBtn_clicked();
void on_javaBrowseBtn_clicked();
+ void on_maxMemSpinBox_valueChanged(int i);
void checkerFinished();
private:
diff --git a/launcher/ui/pages/global/JavaPage.ui b/launcher/ui/pages/global/JavaPage.ui
index 6ccffed4..6749cbe4 100644
--- a/launcher/ui/pages/global/JavaPage.ui
+++ b/launcher/ui/pages/global/JavaPage.ui
@@ -44,50 +44,38 @@
<property name="title">
<string>Memory</string>
</property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="1" column="1">
- <widget class="QSpinBox" name="maxMemSpinBox">
- <property name="toolTip">
- <string>The maximum amount of memory Minecraft is allowed to use.</string>
- </property>
- <property name="suffix">
- <string notr="true"> MiB</string>
- </property>
- <property name="minimum">
- <number>128</number>
- </property>
- <property name="maximum">
- <number>65536</number>
- </property>
- <property name="singleStep">
- <number>128</number>
+ <layout class="QGridLayout" name="gridLayout_2" columnstretch="1,0,0,0">
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelMaxMem">
+ <property name="text">
+ <string>Ma&amp;ximum memory allocation:</string>
</property>
- <property name="value">
- <number>1024</number>
+ <property name="buddy">
+ <cstring>maxMemSpinBox</cstring>
</property>
</widget>
</item>
- <item row="0" column="0">
- <widget class="QLabel" name="labelMinMem">
+ <item row="2" column="0">
+ <widget class="QLabel" name="labelPermGen">
<property name="text">
- <string>&amp;Minimum memory allocation:</string>
+ <string notr="true">&amp;PermGen:</string>
</property>
<property name="buddy">
- <cstring>minMemSpinBox</cstring>
+ <cstring>permGenSpinBox</cstring>
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QLabel" name="labelMaxMem">
+ <item row="0" column="0">
+ <widget class="QLabel" name="labelMinMem">
<property name="text">
- <string>Ma&amp;ximum memory allocation:</string>
+ <string>&amp;Minimum memory allocation:</string>
</property>
<property name="buddy">
- <cstring>maxMemSpinBox</cstring>
+ <cstring>minMemSpinBox</cstring>
</property>
</widget>
</item>
- <item row="0" column="1">
+ <item row="0" column="2">
<widget class="QSpinBox" name="minMemSpinBox">
<property name="toolTip">
<string>The amount of memory Minecraft is started with.</string>
@@ -99,7 +87,7 @@
<number>128</number>
</property>
<property name="maximum">
- <number>65536</number>
+ <number>1048576</number>
</property>
<property name="singleStep">
<number>128</number>
@@ -109,17 +97,29 @@
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QLabel" name="labelPermGen">
- <property name="text">
- <string notr="true">&amp;PermGen:</string>
+ <item row="1" column="2">
+ <widget class="QSpinBox" name="maxMemSpinBox">
+ <property name="toolTip">
+ <string>The maximum amount of memory Minecraft is allowed to use.</string>
</property>
- <property name="buddy">
- <cstring>permGenSpinBox</cstring>
+ <property name="suffix">
+ <string notr="true"> MiB</string>
+ </property>
+ <property name="minimum">
+ <number>128</number>
+ </property>
+ <property name="maximum">
+ <number>1048576</number>
+ </property>
+ <property name="singleStep">
+ <number>128</number>
+ </property>
+ <property name="value">
+ <number>1024</number>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="2" column="2">
<widget class="QSpinBox" name="permGenSpinBox">
<property name="toolTip">
<string>The amount of memory available to store loaded Java classes.</string>
@@ -141,6 +141,16 @@
</property>
</widget>
</item>
+ <item row="1" column="3">
+ <widget class="QLabel" name="labelMaxMemIcon">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="buddy">
+ <cstring>maxMemSpinBox</cstring>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.cpp b/launcher/ui/pages/instance/InstanceSettingsPage.cpp
index 5da7f19f..af2ba7c8 100644
--- a/launcher/ui/pages/instance/InstanceSettingsPage.cpp
+++ b/launcher/ui/pages/instance/InstanceSettingsPage.cpp
@@ -59,12 +59,12 @@ InstanceSettingsPage::InstanceSettingsPage(BaseInstance *inst, QWidget *parent)
{
m_settings = inst->settings();
ui->setupUi(this);
- auto sysMB = Sys::getSystemRam() / Sys::mebibyte;
- ui->maxMemSpinBox->setMaximum(sysMB);
+
connect(ui->openGlobalJavaSettingsButton, &QCommandLinkButton::clicked, this, &InstanceSettingsPage::globalSettingsButtonClicked);
connect(APPLICATION, &Application::globalSettingsAboutToOpen, this, &InstanceSettingsPage::applySettings);
connect(APPLICATION, &Application::globalSettingsClosed, this, &InstanceSettingsPage::loadSettings);
loadSettings();
+ updateThresholds();
}
bool InstanceSettingsPage::shouldDisplay() const
@@ -437,6 +437,11 @@ void InstanceSettingsPage::on_javaTestBtn_clicked()
checker->run();
}
+void InstanceSettingsPage::on_maxMemSpinBox_valueChanged(int i)
+{
+ updateThresholds();
+}
+
void InstanceSettingsPage::checkerFinished()
{
checker.reset();
@@ -447,3 +452,29 @@ void InstanceSettingsPage::retranslate()
ui->retranslateUi(this);
ui->customCommands->retranslate(); // TODO: why is this seperate from the others?
}
+
+void InstanceSettingsPage::updateThresholds()
+{
+ auto sysMiB = Sys::getSystemRam() / Sys::mebibyte;
+ unsigned int maxMem = ui->maxMemSpinBox->value();
+
+ QString iconName;
+
+ if (maxMem >= sysMiB) {
+ iconName = "status-bad";
+ ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity."));
+ } else if (maxMem > (sysMiB * 0.9)) {
+ iconName = "status-yellow";
+ ui->labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity."));
+ } else {
+ iconName = "status-good";
+ ui->labelMaxMemIcon->setToolTip("");
+ }
+
+ {
+ auto height = ui->labelMaxMemIcon->fontInfo().pixelSize();
+ QIcon icon = APPLICATION->getThemedIcon(iconName);
+ QPixmap pix = icon.pixmap(height, height);
+ ui->labelMaxMemIcon->setPixmap(pix);
+ }
+}
diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.h b/launcher/ui/pages/instance/InstanceSettingsPage.h
index 97d1296f..7450188d 100644
--- a/launcher/ui/pages/instance/InstanceSettingsPage.h
+++ b/launcher/ui/pages/instance/InstanceSettingsPage.h
@@ -77,10 +77,13 @@ public:
virtual bool shouldDisplay() const override;
void retranslate() override;
+ void updateThresholds();
+
private slots:
void on_javaDetectBtn_clicked();
void on_javaTestBtn_clicked();
void on_javaBrowseBtn_clicked();
+ void on_maxMemSpinBox_valueChanged(int i);
void applySettings();
void loadSettings();
diff --git a/launcher/ui/pages/instance/InstanceSettingsPage.ui b/launcher/ui/pages/instance/InstanceSettingsPage.ui
index 8b3c3370..b064367d 100644
--- a/launcher/ui/pages/instance/InstanceSettingsPage.ui
+++ b/launcher/ui/pages/instance/InstanceSettingsPage.ui
@@ -112,7 +112,14 @@
<property name="checked">
<bool>false</bool>
</property>
- <layout class="QGridLayout" name="gridLayout_2">
+ <layout class="QGridLayout" name="gridLayout_2" columnstretch="1,0,0,0">
+ <item row="2" column="0">
+ <widget class="QLabel" name="labelPermGen">
+ <property name="text">
+ <string notr="true">PermGen:</string>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0">
<widget class="QLabel" name="labelMinMem">
<property name="text">
@@ -120,10 +127,24 @@
</property>
</widget>
</item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="maxMemSpinBox">
+ <item row="1" column="0">
+ <widget class="QLabel" name="labelMaxMem">
+ <property name="text">
+ <string>Maximum memory allocation:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="3">
+ <widget class="QLabel" name="labelPermgenNote">
+ <property name="text">
+ <string>Note: Permgen is set automatically by Java 8 and later</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QSpinBox" name="minMemSpinBox">
<property name="toolTip">
- <string>The maximum amount of memory Minecraft is allowed to use.</string>
+ <string>The amount of memory Minecraft is started with.</string>
</property>
<property name="suffix">
<string notr="true"> MiB</string>
@@ -132,20 +153,20 @@
<number>128</number>
</property>
<property name="maximum">
- <number>65536</number>
+ <number>1048576</number>
</property>
<property name="singleStep">
<number>128</number>
</property>
<property name="value">
- <number>1024</number>
+ <number>256</number>
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="minMemSpinBox">
+ <item row="1" column="2">
+ <widget class="QSpinBox" name="maxMemSpinBox">
<property name="toolTip">
- <string>The amount of memory Minecraft is started with.</string>
+ <string>The maximum amount of memory Minecraft is allowed to use.</string>
</property>
<property name="suffix">
<string notr="true"> MiB</string>
@@ -154,17 +175,17 @@
<number>128</number>
</property>
<property name="maximum">
- <number>65536</number>
+ <number>1048576</number>
</property>
<property name="singleStep">
<number>128</number>
</property>
<property name="value">
- <number>256</number>
+ <number>1024</number>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="2" column="2">
<widget class="QSpinBox" name="permGenSpinBox">
<property name="toolTip">
<string>The amount of memory available to store loaded Java classes.</string>
@@ -186,24 +207,16 @@
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QLabel" name="labelPermGen">
+ <item row="1" column="3">
+ <widget class="QLabel" name="labelMaxMemIcon">
<property name="text">
- <string notr="true">PermGen:</string>
+ <string notr="true"/>
</property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="labelMaxMem">
- <property name="text">
- <string>Maximum memory allocation:</string>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
</property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QLabel" name="labelPermgenNote">
- <property name="text">
- <string>Note: Permgen is set automatically by Java 8 and later</string>
+ <property name="buddy">
+ <cstring>maxMemSpinBox</cstring>
</property>
</widget>
</item>
diff --git a/launcher/ui/widgets/JavaSettingsWidget.cpp b/launcher/ui/widgets/JavaSettingsWidget.cpp
index c7c4dbbd..15994319 100644
--- a/launcher/ui/widgets/JavaSettingsWidget.cpp
+++ b/launcher/ui/widgets/JavaSettingsWidget.cpp
@@ -71,6 +71,7 @@ void JavaSettingsWidget::setupUi()
m_memoryGroupBox->setObjectName(QStringLiteral("memoryGroupBox"));
m_gridLayout_2 = new QGridLayout(m_memoryGroupBox);
m_gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
+ m_gridLayout_2->setColumnStretch(0, 1);
m_labelMinMem = new QLabel(m_memoryGroupBox);
m_labelMinMem->setObjectName(QStringLiteral("labelMinMem"));
@@ -80,7 +81,7 @@ void JavaSettingsWidget::setupUi()
m_minMemSpinBox->setObjectName(QStringLiteral("minMemSpinBox"));
m_minMemSpinBox->setSuffix(QStringLiteral(" MiB"));
m_minMemSpinBox->setMinimum(128);
- m_minMemSpinBox->setMaximum(m_availableMemory);
+ m_minMemSpinBox->setMaximum(1048576);
m_minMemSpinBox->setSingleStep(128);
m_labelMinMem->setBuddy(m_minMemSpinBox);
m_gridLayout_2->addWidget(m_minMemSpinBox, 0, 1, 1, 1);
@@ -93,11 +94,15 @@ void JavaSettingsWidget::setupUi()
m_maxMemSpinBox->setObjectName(QStringLiteral("maxMemSpinBox"));
m_maxMemSpinBox->setSuffix(QStringLiteral(" MiB"));
m_maxMemSpinBox->setMinimum(128);
- m_maxMemSpinBox->setMaximum(m_availableMemory);
+ m_maxMemSpinBox->setMaximum(1048576);
m_maxMemSpinBox->setSingleStep(128);
m_labelMaxMem->setBuddy(m_maxMemSpinBox);
m_gridLayout_2->addWidget(m_maxMemSpinBox, 1, 1, 1, 1);
+ m_labelMaxMemIcon = new QLabel(m_memoryGroupBox);
+ m_labelMaxMemIcon->setObjectName(QStringLiteral("labelMaxMemIcon"));
+ m_gridLayout_2->addWidget(m_labelMaxMemIcon, 1, 2, 1, 1);
+
m_labelPermGen = new QLabel(m_memoryGroupBox);
m_labelPermGen->setObjectName(QStringLiteral("labelPermGen"));
m_labelPermGen->setText(QStringLiteral("PermGen:"));
@@ -108,7 +113,7 @@ void JavaSettingsWidget::setupUi()
m_permGenSpinBox->setObjectName(QStringLiteral("permGenSpinBox"));
m_permGenSpinBox->setSuffix(QStringLiteral(" MiB"));
m_permGenSpinBox->setMinimum(64);
- m_permGenSpinBox->setMaximum(m_availableMemory);
+ m_permGenSpinBox->setMaximum(1048576);
m_permGenSpinBox->setSingleStep(8);
m_gridLayout_2->addWidget(m_permGenSpinBox, 2, 1, 1, 1);
m_permGenSpinBox->setVisible(false);
@@ -130,6 +135,7 @@ void JavaSettingsWidget::initialize()
m_minMemSpinBox->setValue(observedMinMemory);
m_maxMemSpinBox->setValue(observedMaxMemory);
m_permGenSpinBox->setValue(observedPermGenMemory);
+ updateThresholds();
}
void JavaSettingsWidget::refresh()
@@ -210,9 +216,9 @@ int JavaSettingsWidget::permGenSize() const
void JavaSettingsWidget::memoryValueChanged(int)
{
bool actuallyChanged = false;
- int min = m_minMemSpinBox->value();
- int max = m_maxMemSpinBox->value();
- int permgen = m_permGenSpinBox->value();
+ unsigned int min = m_minMemSpinBox->value();
+ unsigned int max = m_maxMemSpinBox->value();
+ unsigned int permgen = m_permGenSpinBox->value();
QObject *obj = sender();
if (obj == m_minMemSpinBox && min != observedMinMemory)
{
@@ -242,6 +248,7 @@ void JavaSettingsWidget::memoryValueChanged(int)
if(actuallyChanged)
{
checkJavaPathOnEdit(m_javaPathTextBox->text());
+ updateThresholds();
}
}
@@ -435,3 +442,26 @@ void JavaSettingsWidget::retranslate()
m_permGenSpinBox->setToolTip(tr("The amount of memory available to store loaded Java classes."));
m_javaBrowseBtn->setText(tr("Browse"));
}
+
+void JavaSettingsWidget::updateThresholds()
+{
+ QString iconName;
+
+ if (observedMaxMemory >= m_availableMemory) {
+ iconName = "status-bad";
+ m_labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation exceeds your system memory capacity."));
+ } else if (observedMaxMemory > (m_availableMemory * 0.9)) {
+ iconName = "status-yellow";
+ m_labelMaxMemIcon->setToolTip(tr("Your maximum memory allocation approaches your system memory capacity."));
+ } else {
+ iconName = "status-good";
+ m_labelMaxMemIcon->setToolTip("");
+ }
+
+ {
+ auto height = m_labelMaxMemIcon->fontInfo().pixelSize();
+ QIcon icon = APPLICATION->getThemedIcon(iconName);
+ QPixmap pix = icon.pixmap(height, height);
+ m_labelMaxMemIcon->setPixmap(pix);
+ }
+}
diff --git a/launcher/ui/widgets/JavaSettingsWidget.h b/launcher/ui/widgets/JavaSettingsWidget.h
index 5344e2cd..e4b7c712 100644
--- a/launcher/ui/widgets/JavaSettingsWidget.h
+++ b/launcher/ui/widgets/JavaSettingsWidget.h
@@ -56,6 +56,8 @@ public:
int maxHeapSize() const;
QString javaPath() const;
+ void updateThresholds();
+
protected slots:
void memoryValueChanged(int);
@@ -85,6 +87,7 @@ private: /* data */
QSpinBox *m_maxMemSpinBox = nullptr;
QLabel *m_labelMinMem = nullptr;
QLabel *m_labelMaxMem = nullptr;
+ QLabel *m_labelMaxMemIcon = nullptr;
QSpinBox *m_minMemSpinBox = nullptr;
QLabel *m_labelPermGen = nullptr;
QSpinBox *m_permGenSpinBox = nullptr;
@@ -92,9 +95,9 @@ private: /* data */
QIcon yellowIcon;
QIcon badIcon;
- int observedMinMemory = 0;
- int observedMaxMemory = 0;
- int observedPermGenMemory = 0;
+ unsigned int observedMinMemory = 0;
+ unsigned int observedMaxMemory = 0;
+ unsigned int observedPermGenMemory = 0;
QString queuedCheck;
uint64_t m_availableMemory = 0ull;
shared_qobject_ptr<JavaChecker> m_checker;