mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-27 11:05:44 +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()
|
CStatusMessagesDetail::~CStatusMessagesDetail()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void CStatusMessagesDetail::appendStatusMessageToList(const CStatusMessage &message, bool resize)
|
void CStatusMessagesDetail::appendStatusMessageToList(const CStatusMessage &message)
|
||||||
{
|
{
|
||||||
if (message.isEmpty()) { return; }
|
if (message.isEmpty()) { return; }
|
||||||
ui->tvp_StatusMessages->insert(message, resize);
|
m_pending.push_back(message);
|
||||||
this->removeOldest();
|
m_dsDeferredUpdate.inputSignal();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStatusMessagesDetail::appendStatusMessagesToList(const CStatusMessageList &messages, bool resize)
|
void CStatusMessagesDetail::appendStatusMessagesToList(const CStatusMessageList &messages)
|
||||||
{
|
{
|
||||||
if (messages.isEmpty()) { return; }
|
if (messages.isEmpty()) { return; }
|
||||||
ui->tvp_StatusMessages->insert(messages, resize);
|
m_pending.push_back(messages);
|
||||||
this->removeOldest();
|
m_dsDeferredUpdate.inputSignal();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CStatusMessagesDetail::showDetails(bool details)
|
void CStatusMessagesDetail::showDetails(bool details)
|
||||||
@@ -86,18 +86,30 @@ namespace BlackGui
|
|||||||
ui->filter_LogMessages->useRadioButtonDescriptiveIcons(oneCharacterText);
|
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
|
// do not remove every time, but when a threshold is reached
|
||||||
if (m_maxLogMessages < 1) { return; }
|
if (m_maxLogMessages < 0)
|
||||||
if (m_maxLogMessages < 100 && ui->tvp_StatusMessages->rowCount() > (m_maxLogMessages + 10))
|
|
||||||
{
|
{
|
||||||
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))
|
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)
|
void CStatusMessagesDetail::CMessageMenu::customMenu(CMenuActions &menuActions)
|
||||||
@@ -105,7 +117,7 @@ namespace BlackGui
|
|||||||
CStatusMessagesDetail *messagesDetail = qobject_cast<CStatusMessagesDetail *>(this->parent());
|
CStatusMessagesDetail *messagesDetail = qobject_cast<CStatusMessagesDetail *>(this->parent());
|
||||||
Q_ASSERT_X(messagesDetail, Q_FUNC_INFO, "Missing 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");
|
const QString formString(v ? "Hide log details" : "Show log details");
|
||||||
this->m_action = menuActions.addAction(this->m_action, BlackMisc::CIcons::databaseTable16(), formString,
|
this->m_action = menuActions.addAction(this->m_action, BlackMisc::CIcons::databaseTable16(), formString,
|
||||||
CMenuAction::pathLog(), { messagesDetail->ui->form_StatusMessage, &CStatusMessageForm::toggleVisibility});
|
CMenuAction::pathLog(), { messagesDetail->ui->form_StatusMessage, &CStatusMessageForm::toggleVisibility});
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include "blackgui/menus/menudelegate.h"
|
#include "blackgui/menus/menudelegate.h"
|
||||||
#include "blackgui/blackguiexport.h"
|
#include "blackgui/blackguiexport.h"
|
||||||
#include "blackmisc/statusmessagelist.h"
|
#include "blackmisc/statusmessagelist.h"
|
||||||
|
#include "blackmisc/digestsignal.h"
|
||||||
#include "blackmisc/variant.h"
|
#include "blackmisc/variant.h"
|
||||||
|
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
@@ -39,10 +40,10 @@ namespace BlackGui
|
|||||||
virtual ~CStatusMessagesDetail();
|
virtual ~CStatusMessagesDetail();
|
||||||
|
|
||||||
//! Add message
|
//! Add message
|
||||||
void appendStatusMessageToList(const BlackMisc::CStatusMessage &message, bool resize = true);
|
void appendStatusMessageToList(const BlackMisc::CStatusMessage &message);
|
||||||
|
|
||||||
//! Add messages
|
//! Add messages
|
||||||
void appendStatusMessagesToList(const BlackMisc::CStatusMessageList &messages, bool resize = true);
|
void appendStatusMessagesToList(const BlackMisc::CStatusMessageList &messages);
|
||||||
|
|
||||||
//! Show log details
|
//! Show log details
|
||||||
void showDetails(bool details);
|
void showDetails(bool details);
|
||||||
@@ -75,9 +76,11 @@ namespace BlackGui
|
|||||||
private:
|
private:
|
||||||
QScopedPointer<Ui::CStatusMessagesDetail> ui;
|
QScopedPointer<Ui::CStatusMessagesDetail> ui;
|
||||||
int m_maxLogMessages = -1;
|
int m_maxLogMessages = -1;
|
||||||
|
BlackMisc::CStatusMessageList m_pending;
|
||||||
|
BlackMisc::CDigestSignal m_dsDeferredUpdate { this, &CStatusMessagesDetail::deferredUpdate, 2000, 10 };
|
||||||
|
|
||||||
//! Remove oldest messages
|
//! Do not update each message, but deferred
|
||||||
void removeOldest();
|
void deferredUpdate();
|
||||||
|
|
||||||
//! Custom menu for the log component
|
//! Custom menu for the log component
|
||||||
class CMessageMenu : public Menus::IMenuDelegate
|
class CMessageMenu : public Menus::IMenuDelegate
|
||||||
|
|||||||
Reference in New Issue
Block a user