6 #include "ui_statusmessagesdetail.h"
12 using namespace swift::gui::menus;
18 CStatusMessagesDetail::CStatusMessagesDetail(QWidget *parent) : QFrame(parent), ui(new Ui::
CStatusMessagesDetail)
21 connect(ui->tvp_StatusMessages, &CStatusMessageView::objectSelected, ui->form_StatusMessage,
23 connect(ui->tvp_StatusMessages, &CStatusMessageView::modelDataChangedDigest,
this,
25 ui->tvp_StatusMessages->setAutoResizeFrequency(3);
26 ui->tvp_StatusMessages->setSorting(CStatusMessage::IndexUtcTimestamp, Qt::DescendingOrder);
27 ui->tvp_StatusMessages->setCustomMenu(
new CMessageMenu(
this));
28 ui->tvp_StatusMessages->menuAddItems(CStatusMessageView::MenuSave);
31 connect(ui->filter_LogMessages, &CStatusMessageFilterBar::changeFilter,
this, [
this](
bool enable) {
32 emit filterChanged(enable ? ui->filter_LogMessages->createModelFilter()->getAsValueObject() : CVariant {});
36 CStatusMessagesDetail::~CStatusMessagesDetail() {}
38 void CStatusMessagesDetail::appendStatusMessageToList(
const CStatusMessage &message)
40 if (message.
isEmpty()) {
return; }
41 m_pending.push_front(message);
42 m_dsDeferredUpdate.inputSignal();
47 if (messages.
isEmpty()) {
return; }
48 m_pending.push_front(messages);
49 m_dsDeferredUpdate.inputSignal();
52 void CStatusMessagesDetail::showDetails(
bool details)
54 ui->form_StatusMessage->setVisible(details);
55 ui->tvp_StatusMessages->setMode(details ? models::CStatusMessageListModel::Detailed :
56 models::CStatusMessageListModel::Simplified);
59 void CStatusMessagesDetail::showFilterDialog()
61 ui->tvp_StatusMessages->addFilterDialog();
62 ui->filter_LogMessages->hide();
64 connect(ui->tvp_StatusMessages->getFilterDialog(), &QDialog::accepted, [
this] {
65 emit filterChanged(ui->tvp_StatusMessages->getFilterDialog()->createModelFilter()->getAsValueObject());
69 void CStatusMessagesDetail::showFilterBar()
71 ui->tvp_StatusMessages->setFilterWidget(ui->filter_LogMessages);
72 ui->filter_LogMessages->show();
75 void CStatusMessagesDetail::hideFilterBar() { ui->filter_LogMessages->hide(); }
77 void CStatusMessagesDetail::clear()
79 ui->tvp_StatusMessages->clear();
80 ui->form_StatusMessage->clear();
83 int CStatusMessagesDetail::rowCount()
const {
return ui->tvp_StatusMessages->rowCount(); }
85 void CStatusMessagesDetail::filterUseRadioButtonDescriptiveIcons(
bool oneCharacterText)
87 ui->filter_LogMessages->useRadioButtonDescriptiveIcons(oneCharacterText);
90 void CStatusMessagesDetail::setSorting(
const CPropertyIndex &propertyIndex, Qt::SortOrder order)
92 ui->tvp_StatusMessages->setSorting(propertyIndex, order);
95 void CStatusMessagesDetail::setNoSorting() { ui->tvp_StatusMessages->setNoSorting(); }
97 void CStatusMessagesDetail::deferredUpdate()
99 if (m_pending.isEmpty()) {
return; }
101 newMsgs.push_front(m_pending);
105 if (m_maxLogMessages < 0)
109 else if (m_maxLogMessages < 100 && ui->tvp_StatusMessages->rowCount() > (m_maxLogMessages + 10))
111 newMsgs.keepLatest(m_maxLogMessages);
113 else if (ui->tvp_StatusMessages->rowCount() > (m_maxLogMessages * 1.1))
115 newMsgs.keepLatest(m_maxLogMessages);
118 ui->tvp_StatusMessages->adjustOrderColumn(newMsgs);
119 ui->tvp_StatusMessages->updateContainerMaybeAsync(newMsgs);
122 void CStatusMessagesDetail::CMessageMenu::customMenu(
CMenuActions &menuActions)
124 CStatusMessagesDetail *messagesDetail = qobject_cast<CStatusMessagesDetail *>(this->parent());
125 Q_ASSERT_X(messagesDetail, Q_FUNC_INFO,
"Missing parent");
127 const bool v = messagesDetail->ui->form_StatusMessage->isVisible();
128 const QString formString(v ?
"Hide log details" :
"Show log details");
130 menuActions.
addAction(m_action, CIcons::databaseTable16(), formString, CMenuAction::pathLog(),
131 { messagesDetail->ui->form_StatusMessage, &CStatusMessageForm::toggleVisibility });
132 m_action->setCheckable(
true);
133 m_action->setChecked(v);
Status messages plus detail.
void modelDataChangedDigest(int count, bool withFilter)
Model data changed,.
void showFilterBar()
Show a filter bar.
bool isEmpty() const
Message empty.
bool isEmpty() const
Synonym for empty.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
High level reusable GUI components.
Filter to search data sets.
Views, mainly QTableView.
Free functions in swift::misc.