mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 04:25:35 +08:00
Ref T111, allow to limit entries in log component
This commit is contained in:
committed by
Mathew Sutcliffe
parent
4c8ae06eff
commit
266a418c90
@@ -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());
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user