Ref T111, allow to limit entries in log component

This commit is contained in:
Klaus Basan
2017-08-08 02:23:27 +02:00
committed by Mathew Sutcliffe
parent 4c8ae06eff
commit 266a418c90
6 changed files with 73 additions and 3 deletions

View File

@@ -102,6 +102,11 @@ namespace BlackGui
ui->tep_StatusPageConsole->clear();
}
int CLogComponent::rowCount() const
{
return ui->tvp_StatusMessages->rowCount();
}
void CLogComponent::appendStatusMessageToConsole(const CStatusMessage &statusMessage)
{
if (statusMessage.isEmpty()) return;
@@ -117,12 +122,14 @@ namespace BlackGui
{
if (statusMessage.isEmpty()) { return; }
ui->tvp_StatusMessages->insert(statusMessage);
this->removeOldest();
}
void CLogComponent::appendStatusMessagesToList(const CStatusMessageList &statusMessages)
{
if (statusMessages.isEmpty()) { return; }
ui->tvp_StatusMessages->insert(statusMessages);
this->removeOldest();
}
void CLogComponent::onStatusMessageDataChanged(int count, bool withFilter)
@@ -136,6 +143,20 @@ namespace BlackGui
ui->tw_StatusPage->setTabText(i, o);
}
void CLogComponent::removeOldest()
{
// do not remove every time, but when a threshold is reached
if (m_maxLogMessages < 1) { return; }
if (m_maxLogMessages < 100 && ui->tvp_StatusMessages->rowCount() > (m_maxLogMessages + 10))
{
ui->tvp_StatusMessages->keepLatest(m_maxLogMessages);
}
else if (ui->tvp_StatusMessages->rowCount() > (m_maxLogMessages * 1.1))
{
ui->tvp_StatusMessages->keepLatest(m_maxLogMessages);
}
}
void CLogComponent::CLogMenu::customMenu(CMenuActions &menuActions)
{
CLogComponent *logComp = qobject_cast<CLogComponent *>(this->parent());

View File

@@ -48,8 +48,7 @@ namespace BlackGui
};
//! GUI displaying log and status messages
class BLACKGUI_EXPORT CLogComponent :
public QFrame
class BLACKGUI_EXPORT CLogComponent : public QFrame
{
Q_OBJECT
@@ -75,12 +74,18 @@ namespace BlackGui
//! Show a filter bar
void showFilterBar();
//! Set fi
//! Set descriptive icons
void filterUseRadioButtonDescriptiveIcons(bool oneLetterText);
//! Clear
void clear();
//! Number of status messages in log view
int rowCount() const;
//! Set max.log messages
void setMaxLogMessages(int desiredNumber) { m_maxLogMessages = desiredNumber; }
signals:
//! Make me visible
void requestAttention();
@@ -100,10 +105,14 @@ namespace BlackGui
private:
QScopedPointer<Ui::CLogComponent> ui;
int m_maxLogMessages = -1;
//! Status messages changed
void onStatusMessageDataChanged(int count, bool withFilter);
//! Remove oldest messages
void removeOldest();
//! Custom menu for the log component
class CLogMenu : public BlackGui::Menus::IMenuDelegate
{

View File

@@ -39,6 +39,20 @@ namespace BlackGui
this->setFilterDialog(new CStatusMessageFilterDialog(this));
}
void CStatusMessageView::keepLatest(int desiredSize)
{
if (desiredSize >= this->rowCount()) { return; }
if (desiredSize < 1)
{
this->clear();
return;
}
CStatusMessageList msgs = this->container();
msgs.keepLatest(desiredSize);
this->updateContainerMaybeAsync(msgs);
}
CStatusMessageFilterDialog *CStatusMessageView::getFilterDialog() const
{
return qobject_cast<CStatusMessageFilterDialog *>(this->getFilterWidget());

View File

@@ -43,6 +43,9 @@ namespace BlackGui
//! Add my own filter dialog
void addFilterDialog();
//! \copydoc BlackMisc::CStatusMessageList::keepLatest
void keepLatest(int desiredSize);
//! Filter dialog if any
BlackGui::Filters::CStatusMessageFilterDialog *getFilterDialog() const;
};

View File

@@ -139,6 +139,25 @@ namespace BlackMisc
this->removeIf(&CStatusMessage::getSeverity, CStatusMessage::SeverityInfo);
}
int CStatusMessageList::keepLatest(int estimtatedNumber)
{
const int oldSize = this->size();
if (estimtatedNumber >= oldSize) { return 0; }
if (estimtatedNumber < 1)
{
this->clear();
return oldSize;
}
CStatusMessageList copy(*this);
copy.sortLatestFirst();
const QDateTime ts = copy[estimtatedNumber - 1].getUtcTimestamp();
copy = *this; // keep order
copy.removeBefore(ts);
*this = copy;
return oldSize - this->size();
}
CStatusMessage::StatusSeverity CStatusMessageList::worstSeverity() const
{
CStatusMessage::StatusSeverity s = CStatusMessage::SeverityDebug;

View File

@@ -97,6 +97,10 @@ namespace BlackMisc
//! Remove info and below
void removeInfoAndBelow();
//! Keep latest n status messages
//! \remark taking timestamp of n-th oldest messages, deleting all older
int keepLatest(int estimtatedNumber);
//! Find worst severity
CStatusMessage::StatusSeverity worstSeverity() const;