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

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