From 25471730e3f05bb865f5caa5a4d14c36697f29cf Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 23 Sep 2015 23:23:41 +0200 Subject: [PATCH] refs #452 details textbox for logs * details can be displayed en detail * feature can be switched on/off via context menu * signals in view to select message --- src/blackgui/components/logcomponent.cpp | 17 +++- src/blackgui/components/logcomponent.h | 19 ++++- src/blackgui/components/logcomponent.ui | 40 ++++++++- src/blackgui/statusmessageform.cpp | 41 +++++++++ src/blackgui/statusmessageform.h | 49 +++++++++++ src/blackgui/statusmessageform.ui | 103 +++++++++++++++++++++++ src/blackgui/views/statusmessageview.cpp | 17 +++- src/blackgui/views/statusmessageview.h | 19 ++++- 8 files changed, 291 insertions(+), 14 deletions(-) create mode 100644 src/blackgui/statusmessageform.cpp create mode 100644 src/blackgui/statusmessageform.h create mode 100644 src/blackgui/statusmessageform.ui diff --git a/src/blackgui/components/logcomponent.cpp b/src/blackgui/components/logcomponent.cpp index 18433895a..bce898614 100644 --- a/src/blackgui/components/logcomponent.cpp +++ b/src/blackgui/components/logcomponent.cpp @@ -13,17 +13,20 @@ using namespace BlackMisc; using namespace BlackGui; +using namespace BlackGui::Views; namespace BlackGui { namespace Components { - CLogComponent::CLogComponent(QWidget *parent) : QFrame(parent), ui(new Ui::CLogComponent) { ui->setupUi(this); this->ui->tvp_StatusMessages->setAutoResizeFrequency(3); + connect(this->ui->tvp_StatusMessages, &CStatusMessageView::messageSelected, + this->ui->form_StatusMessage, &CStatusMessageForm::setValue); + this->ui->tvp_StatusMessages->setCustomMenu(new CLogMenu(this)); } CLogComponent::~CLogComponent() @@ -45,5 +48,17 @@ namespace BlackGui if (statusMessage.isEmpty()) return; this->ui->tvp_StatusMessages->insert(statusMessage); } + + void CLogComponent::CLogMenu::customMenu(QMenu &menu) const + { + CLogComponent *logComp = qobject_cast(this->parent()); + Q_ASSERT_X(logComp, Q_FUNC_INFO, "Missing parent"); + + bool v = logComp->ui->form_StatusMessage->isVisible(); + QString formString(v ? "Hide details" : "Show details"); + QAction *a = menu.addAction(BlackMisc::CIcons::databaseTable16(), formString, logComp->ui->form_StatusMessage, SLOT(toggleVisibility())); + a->setCheckable(true); + a->setChecked(v); + } } } // namespace diff --git a/src/blackgui/components/logcomponent.h b/src/blackgui/components/logcomponent.h index 91791cf5a..e659777dd 100644 --- a/src/blackgui/components/logcomponent.h +++ b/src/blackgui/components/logcomponent.h @@ -15,7 +15,7 @@ #include "blackgui/blackguiexport.h" #include "enableforruntime.h" #include "blackmisc/statusmessagelist.h" - +#include "blackgui/menudelegate.h" #include #include @@ -25,7 +25,6 @@ namespace BlackGui { namespace Components { - //! GUI displaying log and status messages class BLACKGUI_EXPORT CLogComponent : public QFrame, @@ -52,7 +51,19 @@ namespace BlackGui private: QScopedPointer ui; + + //! Custom menu for the log component + class CLogMenu : public BlackGui::IMenuDelegate + { + public: + //! Constructor + CLogMenu(CLogComponent *parent) : IMenuDelegate(parent) {} + + //! \copydoc IMenuDelegate::customMenu + virtual void customMenu(QMenu &menu) const override; + }; + }; - } -} + } // ns +} // ns #endif // guard diff --git a/src/blackgui/components/logcomponent.ui b/src/blackgui/components/logcomponent.ui index 0717411fb..896300035 100644 --- a/src/blackgui/components/logcomponent.ui +++ b/src/blackgui/components/logcomponent.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 262 + 313 @@ -55,7 +55,7 @@ - 0 + 4 0 @@ -82,6 +82,34 @@ + + + + + 0 + 0 + + + + + 0 + 100 + + + + + 16777215 + 100 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + @@ -139,6 +167,12 @@ QTableView
blackgui/views/statusmessageview.h
+ + BlackGui::CStatusMessageForm + QFrame +
blackgui/statusmessageform.h
+ 1 +
diff --git a/src/blackgui/statusmessageform.cpp b/src/blackgui/statusmessageform.cpp new file mode 100644 index 000000000..c4431b23a --- /dev/null +++ b/src/blackgui/statusmessageform.cpp @@ -0,0 +1,41 @@ +/* Copyright (C) 2014 + * swift project Community / Contributors + * + * This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "statusmessageform.h" +#include "ui_statusmessageform.h" +#include + +namespace BlackGui +{ + CStatusMessageForm::CStatusMessageForm(QWidget *parent) : + QFrame(parent), + ui(new Ui::CStatusMessageForm) + { + ui->setupUi(this); + } + + CStatusMessageForm::~CStatusMessageForm() + { } + + void CStatusMessageForm::setValue(const BlackMisc::CStatusMessage &message) + { + if (!this->isVisible()) { return; } + ui->te_Message->setPlainText(message.getMessage()); + ui->lbl_SeverityIcon->setPixmap(message.toPixmap()); + ui->le_Categories->setText(message.getCategories().toQString(true)); + ui->le_Severity->setText(message.getSeverityAsString()); + ui->le_Timestamp->setText(message.getFormattedUtcTimestampYmdhms()); + } + + void CStatusMessageForm::toggleVisibility() + { + this->setVisible(!isVisible()); + } + +} // ns diff --git a/src/blackgui/statusmessageform.h b/src/blackgui/statusmessageform.h new file mode 100644 index 000000000..4e0c09498 --- /dev/null +++ b/src/blackgui/statusmessageform.h @@ -0,0 +1,49 @@ +/* Copyright (C) 2015 + * swift project Community / Contributors + * + * This file is part of swift Project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_STATUSMESSAGEFORM_H +#define BLACKGUI_STATUSMESSAGEFORM_H + +#include "blackgui/blackguiexport.h" +#include "blackmisc/statusmessage.h" +#include + +namespace Ui { class CStatusMessageForm; } + +namespace BlackGui +{ + /*! + * Display details about a single status message + */ + class BLACKGUI_EXPORT CStatusMessageForm : public QFrame + { + Q_OBJECT + + public: + //! Constructor + explicit CStatusMessageForm(QWidget *parent = nullptr); + + //! Destructor + ~CStatusMessageForm(); + + public slots: + //! Set message + void setValue(const BlackMisc::CStatusMessage &message); + + //! Toggle visibility + void toggleVisibility(); + + private: + QScopedPointer ui; + }; + +} // ns +#endif // guard diff --git a/src/blackgui/statusmessageform.ui b/src/blackgui/statusmessageform.ui new file mode 100644 index 000000000..593b1d964 --- /dev/null +++ b/src/blackgui/statusmessageform.ui @@ -0,0 +1,103 @@ + + + CStatusMessageForm + + + + 0 + 0 + 407 + 129 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 4 + + + 4 + + + 4 + + + 4 + + + 4 + + + + + true + + + + + + + true + + + + + + + Severity: + + + + + + + true + + + + + + + + + + :/diagona/icons/diagona/icons/question.png + + + + + + + Timestamp: + + + + + + + true + + + + + + + Categories: + + + + + + + + + + diff --git a/src/blackgui/views/statusmessageview.cpp b/src/blackgui/views/statusmessageview.cpp index 9721c01e6..a381fc47a 100644 --- a/src/blackgui/views/statusmessageview.cpp +++ b/src/blackgui/views/statusmessageview.cpp @@ -18,13 +18,24 @@ namespace BlackGui { namespace Views { - /* - * Constructor - */ CStatusMessageView::CStatusMessageView(QWidget *parent) : CViewBase(parent) { m_withMenuItemClear = true; this->standardInit(new CStatusMessageListModel(this)); + connect(this, &CStatusMessageView::clicked, this, &CStatusMessageView::ps_messageSelected); + } + + void CStatusMessageView::setMode(CStatusMessageListModel::Mode mode) + { + this->derivedModel()->setMode(mode); + } + + void CStatusMessageView::ps_messageSelected(const QModelIndex &index) + { + if (!index.isValid()) { return; } + emit messageSelected( + this->at(index) + ); } } // namespace diff --git a/src/blackgui/views/statusmessageview.h b/src/blackgui/views/statusmessageview.h index 1e3cd1aac..addc26a6d 100644 --- a/src/blackgui/views/statusmessageview.h +++ b/src/blackgui/views/statusmessageview.h @@ -21,13 +21,26 @@ namespace BlackGui namespace Views { //! Status message view - class BLACKGUI_EXPORT CStatusMessageView : public CViewBase + class BLACKGUI_EXPORT CStatusMessageView : + public CViewBase { + Q_OBJECT public: //! Constructor explicit CStatusMessageView(QWidget *parent = nullptr); + + //! Set mode + void setMode(BlackGui::Models::CStatusMessageListModel::Mode mode); + + signals: + //! Message has been selected + void messageSelected(const BlackMisc::CStatusMessage &statusMessage); + + private: + //! Message selected + void ps_messageSelected(const QModelIndex &index); }; - } -} + } // ns +} // ns #endif // guard