GH-1008 implement log window max line count

Defaults to 100k lines
This commit is contained in:
Petr Mrázek 2015-06-11 01:49:13 +02:00
parent 1feb4bb387
commit 9684d3b0a0
5 changed files with 91 additions and 1 deletions

View File

@ -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);

View File

@ -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();

View File

@ -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;
};

View File

@ -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());

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>487</width>
<height>519</height>
<height>557</height>
</rect>
</property>
<property name="sizePolicy">
@ -433,6 +433,47 @@
</layout>
</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">
@ -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>