mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-02 23:25:53 +08:00
Fixed other issues with status message UI
* messages were insert, which did not consider the sort order * do not update every message, but deferred for performance reasons
This commit is contained in:
@@ -34,18 +34,18 @@ namespace BlackGui
|
||||
CStatusMessagesDetail::~CStatusMessagesDetail()
|
||||
{ }
|
||||
|
||||
void CStatusMessagesDetail::appendStatusMessageToList(const CStatusMessage &message, bool resize)
|
||||
void CStatusMessagesDetail::appendStatusMessageToList(const CStatusMessage &message)
|
||||
{
|
||||
if (message.isEmpty()) { return; }
|
||||
ui->tvp_StatusMessages->insert(message, resize);
|
||||
this->removeOldest();
|
||||
m_pending.push_back(message);
|
||||
m_dsDeferredUpdate.inputSignal();
|
||||
}
|
||||
|
||||
void CStatusMessagesDetail::appendStatusMessagesToList(const CStatusMessageList &messages, bool resize)
|
||||
void CStatusMessagesDetail::appendStatusMessagesToList(const CStatusMessageList &messages)
|
||||
{
|
||||
if (messages.isEmpty()) { return; }
|
||||
ui->tvp_StatusMessages->insert(messages, resize);
|
||||
this->removeOldest();
|
||||
m_pending.push_back(messages);
|
||||
m_dsDeferredUpdate.inputSignal();
|
||||
}
|
||||
|
||||
void CStatusMessagesDetail::showDetails(bool details)
|
||||
@@ -86,18 +86,30 @@ namespace BlackGui
|
||||
ui->filter_LogMessages->useRadioButtonDescriptiveIcons(oneCharacterText);
|
||||
}
|
||||
|
||||
void CStatusMessagesDetail::removeOldest()
|
||||
void CStatusMessagesDetail::deferredUpdate()
|
||||
{
|
||||
if (m_pending.isEmpty()) { return; }
|
||||
const CStatusMessageList add(m_pending);
|
||||
m_pending.clear();
|
||||
|
||||
CStatusMessageList newMsgs(ui->tvp_StatusMessages->container());
|
||||
newMsgs.push_back(add);
|
||||
|
||||
// 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))
|
||||
if (m_maxLogMessages < 0)
|
||||
{
|
||||
ui->tvp_StatusMessages->keepLatest(m_maxLogMessages);
|
||||
// do not restrict
|
||||
}
|
||||
else if (m_maxLogMessages < 100 && ui->tvp_StatusMessages->rowCount() > (m_maxLogMessages + 10))
|
||||
{
|
||||
newMsgs.keepLatest(m_maxLogMessages);
|
||||
}
|
||||
else if (ui->tvp_StatusMessages->rowCount() > (m_maxLogMessages * 1.1))
|
||||
{
|
||||
ui->tvp_StatusMessages->keepLatest(m_maxLogMessages);
|
||||
newMsgs.keepLatest(m_maxLogMessages);
|
||||
}
|
||||
|
||||
ui->tvp_StatusMessages->updateContainerMaybeAsync(newMsgs);
|
||||
}
|
||||
|
||||
void CStatusMessagesDetail::CMessageMenu::customMenu(CMenuActions &menuActions)
|
||||
@@ -105,7 +117,7 @@ namespace BlackGui
|
||||
CStatusMessagesDetail *messagesDetail = qobject_cast<CStatusMessagesDetail *>(this->parent());
|
||||
Q_ASSERT_X(messagesDetail, Q_FUNC_INFO, "Missing parent");
|
||||
|
||||
bool v = messagesDetail->ui->form_StatusMessage->isVisible();
|
||||
const bool v = messagesDetail->ui->form_StatusMessage->isVisible();
|
||||
const QString formString(v ? "Hide log details" : "Show log details");
|
||||
this->m_action = menuActions.addAction(this->m_action, BlackMisc::CIcons::databaseTable16(), formString,
|
||||
CMenuAction::pathLog(), { messagesDetail->ui->form_StatusMessage, &CStatusMessageForm::toggleVisibility});
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "blackgui/menus/menudelegate.h"
|
||||
#include "blackgui/blackguiexport.h"
|
||||
#include "blackmisc/statusmessagelist.h"
|
||||
#include "blackmisc/digestsignal.h"
|
||||
#include "blackmisc/variant.h"
|
||||
|
||||
#include <QFrame>
|
||||
@@ -39,10 +40,10 @@ namespace BlackGui
|
||||
virtual ~CStatusMessagesDetail();
|
||||
|
||||
//! Add message
|
||||
void appendStatusMessageToList(const BlackMisc::CStatusMessage &message, bool resize = true);
|
||||
void appendStatusMessageToList(const BlackMisc::CStatusMessage &message);
|
||||
|
||||
//! Add messages
|
||||
void appendStatusMessagesToList(const BlackMisc::CStatusMessageList &messages, bool resize = true);
|
||||
void appendStatusMessagesToList(const BlackMisc::CStatusMessageList &messages);
|
||||
|
||||
//! Show log details
|
||||
void showDetails(bool details);
|
||||
@@ -75,9 +76,11 @@ namespace BlackGui
|
||||
private:
|
||||
QScopedPointer<Ui::CStatusMessagesDetail> ui;
|
||||
int m_maxLogMessages = -1;
|
||||
BlackMisc::CStatusMessageList m_pending;
|
||||
BlackMisc::CDigestSignal m_dsDeferredUpdate { this, &CStatusMessagesDetail::deferredUpdate, 2000, 10 };
|
||||
|
||||
//! Remove oldest messages
|
||||
void removeOldest();
|
||||
//! Do not update each message, but deferred
|
||||
void deferredUpdate();
|
||||
|
||||
//! Custom menu for the log component
|
||||
class CMessageMenu : public Menus::IMenuDelegate
|
||||
|
||||
Reference in New Issue
Block a user