diff options
author | Petr Mrázek <peterix@gmail.com> | 2015-06-11 01:49:13 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2015-06-11 01:50:20 +0200 |
commit | 9684d3b0a087b44b39ae8b007c08f82d3ddc6d8f (patch) | |
tree | 628d025e770e8c28998be2415743c11d181a396e /application | |
parent | 1feb4bb387f1dc559a6d368f77171a6e066a69e6 (diff) | |
download | MultiMC-9684d3b0a087b44b39ae8b007c08f82d3ddc6d8f.tar MultiMC-9684d3b0a087b44b39ae8b007c08f82d3ddc6d8f.tar.gz MultiMC-9684d3b0a087b44b39ae8b007c08f82d3ddc6d8f.tar.lz MultiMC-9684d3b0a087b44b39ae8b007c08f82d3ddc6d8f.tar.xz MultiMC-9684d3b0a087b44b39ae8b007c08f82d3ddc6d8f.zip |
GH-1008 implement log window max line count
Defaults to 100k lines
Diffstat (limited to 'application')
-rw-r--r-- | application/MultiMC.cpp | 2 | ||||
-rw-r--r-- | application/pages/LogPage.cpp | 38 | ||||
-rw-r--r-- | application/pages/LogPage.h | 3 | ||||
-rw-r--r-- | application/pages/global/MultiMCPage.cpp | 4 | ||||
-rw-r--r-- | application/pages/global/MultiMCPage.ui | 45 |
5 files changed, 91 insertions, 1 deletions
diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp index c76a171f..0319ea75 100644 --- a/application/MultiMC.cpp +++ b/application/MultiMC.cpp @@ -454,6 +454,8 @@ void MultiMC::initGlobalSettings(bool test_mode) m_settings->registerSetting("ConsoleFont", defaultMonospace); } m_settings->registerSetting("ConsoleFontSize", defaultSize); + m_settings->registerSetting("ConsoleMaxLines", 100000); + m_settings->registerSetting("ConsoleOverflowStop", true); FTBPlugin::initialize(m_settings); diff --git a/application/pages/LogPage.cpp b/application/pages/LogPage.cpp index 7d2013cc..3fade26f 100644 --- a/application/pages/LogPage.cpp +++ b/application/pages/LogPage.cpp @@ -8,6 +8,7 @@ #include <QShortcut> #include "BaseProcess.h" +#include <settings/Setting.h> #include "GuiUtil.h" LogPage::LogPage(BaseProcess *proc, QWidget *parent) @@ -29,6 +30,18 @@ LogPage::LogPage(BaseProcess *proc, QWidget *parent) } defaultFormat->setFont(QFont(fontFamily, fontSize)); + // ensure we don't eat all the RAM + auto lineSetting = MMC->settings()->getSetting("ConsoleMaxLines"); + int maxLines = lineSetting->get().toInt(&conversionOk); + if(!conversionOk) + { + maxLines = lineSetting->defValue().toInt(); + qWarning() << "ConsoleMaxLines has nonsensical value, defaulting to" << maxLines; + } + ui->text->setMaximumBlockCount(maxLines); + + m_stopOnOverflow = MMC->settings()->get("ConsoleOverflowStop").toBool(); + auto findShortcut = new QShortcut(QKeySequence(QKeySequence::Find), this); connect(findShortcut, SIGNAL(activated()), SLOT(findActivated())); auto findNextShortcut = new QShortcut(QKeySequence(QKeySequence::FindNext), this); @@ -126,6 +139,11 @@ void LogPage::findPreviousActivated() } } +void LogPage::setParentContainer(BasePageContainer * container) +{ + m_parentContainer = container; +} + void LogPage::write(QString data, MessageLevel::Enum mode) { if (!m_write_active) @@ -135,6 +153,26 @@ void LogPage::write(QString data, MessageLevel::Enum mode) return; } } + if(m_stopOnOverflow && m_write_active) + { + if(mode != MessageLevel::PrePost && mode != MessageLevel::MultiMC) + { + if(ui->text->blockCount() >= ui->text->maximumBlockCount()) + { + m_write_active = false; + data = tr("MultiMC stopped watching the game log because the log length surpassed %1 lines.\n" + "You may have to fix your mods because the game is still loggging to files and" + " likely wasting harddrive space at an alarming rate!") + .arg(ui->text->maximumBlockCount()); + mode = MessageLevel::Fatal; + ui->trackLogCheckbox->setCheckState(Qt::Unchecked); + if(!isVisible()) + { + m_parentContainer->selectPage(id()); + } + } + } + } // save the cursor so it can be restored. auto savedCursor = ui->text->cursor(); diff --git a/application/pages/LogPage.h b/application/pages/LogPage.h index 15c123d7..0cbf3d23 100644 --- a/application/pages/LogPage.h +++ b/application/pages/LogPage.h @@ -53,6 +53,7 @@ public: return "Minecraft-Logs"; } virtual bool shouldDisplay() const; + virtual void setParentContainer(BasePageContainer *); private slots: /** @@ -81,6 +82,8 @@ private: bool m_scroll_active = true; int m_saved_offset = 0; bool m_write_active = true; + bool m_stopOnOverflow = true; QTextCharFormat * defaultFormat; + BasePageContainer * m_parentContainer; }; diff --git a/application/pages/global/MultiMCPage.cpp b/application/pages/global/MultiMCPage.cpp index 65f258b5..b5389e25 100644 --- a/application/pages/global/MultiMCPage.cpp +++ b/application/pages/global/MultiMCPage.cpp @@ -299,6 +299,8 @@ void MultiMCPage::applySettings() QString consoleFontFamily = ui->consoleFont->currentFont().family(); s->set("ConsoleFont", consoleFontFamily); s->set("ConsoleFontSize", ui->fontSizeBox->value()); + s->set("ConsoleMaxLines", ui->lineLimitSpinBox->value()); + s->set("ConsoleOverflowStop", ui->checkStopLogging->checkState() != Qt::Unchecked); // FTB s->set("TrackFTBInstances", ui->trackFtbBox->isChecked()); @@ -388,6 +390,8 @@ void MultiMCPage::loadSettings() } ui->fontSizeBox->setValue(fontSize); refreshFontPreview(); + ui->lineLimitSpinBox->setValue(s->get("ConsoleMaxLines").toInt()); + ui->checkStopLogging->setChecked(s->get("ConsoleOverflowStop").toBool()); // FTB ui->trackFtbBox->setChecked(s->get("TrackFTBInstances").toBool()); diff --git a/application/pages/global/MultiMCPage.ui b/application/pages/global/MultiMCPage.ui index 3faafc6e..cf748812 100644 --- a/application/pages/global/MultiMCPage.ui +++ b/application/pages/global/MultiMCPage.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>487</width> - <height>519</height> + <height>557</height> </rect> </property> <property name="sizePolicy"> @@ -434,6 +434,47 @@ </widget> </item> <item> + <widget class="QGroupBox" name="groupBox_4"> + <property name="title"> + <string>History limit</string> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="1" column="0"> + <widget class="QCheckBox" name="checkStopLogging"> + <property name="text"> + <string>Stop logging when log overflows</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QSpinBox" name="lineLimitSpinBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="suffix"> + <string> lines</string> + </property> + <property name="minimum"> + <number>10000</number> + </property> + <property name="maximum"> + <number>1000000</number> + </property> + <property name="singleStep"> + <number>10000</number> + </property> + <property name="value"> + <number>100000</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <widget class="QGroupBox" name="themeBox_2"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> @@ -520,6 +561,8 @@ <tabstop>themeComboBox</tabstop> <tabstop>showConsoleCheck</tabstop> <tabstop>autoCloseConsoleCheck</tabstop> + <tabstop>lineLimitSpinBox</tabstop> + <tabstop>checkStopLogging</tabstop> <tabstop>consoleFont</tabstop> <tabstop>fontSizeBox</tabstop> <tabstop>fontPreview</tabstop> |