diff --git a/src/blackgui/filters/statusmessagefilterbar.cpp b/src/blackgui/filters/statusmessagefilterbar.cpp new file mode 100644 index 000000000..6b6618b42 --- /dev/null +++ b/src/blackgui/filters/statusmessagefilterbar.cpp @@ -0,0 +1,74 @@ +/* Copyright (C) 2016 + * 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 "statusmessagefilterbar.h" +#include "blackmisc/logpattern.h" +#include "ui_statusmessagefilterbar.h" +#include "blackgui/models/statusmessagefilter.h" +#include + +using namespace BlackMisc; +using namespace BlackGui::Models; + +namespace BlackGui +{ + namespace Filters + { + CStatusMessageFilterBar::CStatusMessageFilterBar(QWidget *parent) : + CFilterWidget(parent), + ui(new Ui::CStatusMessageFilterBar) + { + ui->setupUi(this); + this->setButtonsAndCount(ui->filter_Buttons); + connect(ui->le_Category, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + connect(ui->le_MessageText, &QLineEdit::returnPressed, this, &CFilterWidget::triggerFilter); + + ui->le_Category->setCompleter(new QCompleter(CLogPattern::allHumanReadableNames(), this)); + + // reset form + this->clearForm(); + } + + void CStatusMessageFilterBar::displayCount(bool show) + { + ui->filter_Buttons->displayCount(show); + } + + CStatusMessageFilterBar::~CStatusMessageFilterBar() + { } + + std::unique_ptr > CStatusMessageFilterBar::createModelFilter() const + { + return std::make_unique( + this->getSelectedSeverity(), + ui->le_MessageText->text(), + ui->le_Category->text() + ); + } + + void CStatusMessageFilterBar::onRowCountChanged(int count, bool withFilter) + { + ui->filter_Buttons->onRowCountChanged(count, withFilter); + } + + void CStatusMessageFilterBar::clearForm() + { + ui->le_MessageText->clear(); + ui->le_Category->clear(); + ui->rb_Info->setChecked(true); + } + + CStatusMessage::StatusSeverity CStatusMessageFilterBar::getSelectedSeverity() const + { + if (ui->rb_Error->isChecked()) { return CStatusMessage::SeverityError; } + if (ui->rb_Warning->isChecked()) { return CStatusMessage::SeverityWarning; } + return CStatusMessage::SeverityInfo; + } + } // ns +} // ns diff --git a/src/blackgui/filters/statusmessagefilterbar.h b/src/blackgui/filters/statusmessagefilterbar.h new file mode 100644 index 000000000..396e08078 --- /dev/null +++ b/src/blackgui/filters/statusmessagefilterbar.h @@ -0,0 +1,63 @@ +/* Copyright (C) 2016 + * 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_FILTERS_STATUSMESSAGEFILTERBAR_H +#define BLACKGUI_FILTERS_STATUSMESSAGEFILTERBAR_H + +#include "blackgui/filters/filterwidget.h" +#include "blackgui/models/modelfilter.h" +#include "blackmisc/statusmessagelist.h" +#include + +namespace Ui { class CStatusMessageFilterBar; } +namespace BlackGui +{ + namespace Filters + { + /*! + * Filter status messages + */ + class CStatusMessageFilterBar : + public CFilterWidget, + public BlackGui::Models::IModelFilterProvider + { + Q_OBJECT + + public: + //! Constructor + explicit CStatusMessageFilterBar(QWidget *parent = nullptr); + + //! Show count + void displayCount(bool show); + + //! Destructor + virtual ~CStatusMessageFilterBar(); + + //! \copydoc Models::IModelFilterProvider::createModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + public slots: + //! \copydoc CFilterWidget::onRowCountChanged + virtual void onRowCountChanged(int count, bool withFilter) override; + + protected: + //! \copydoc CFilterWidget::clearForm + virtual void clearForm() override; + + private: + QScopedPointer ui; + + //! Get the selected severity + BlackMisc::CStatusMessage::StatusSeverity getSelectedSeverity() const; + }; + } // ns +} // ns +#endif // guard diff --git a/src/blackgui/filters/statusmessagefilterbar.ui b/src/blackgui/filters/statusmessagefilterbar.ui new file mode 100644 index 000000000..f95ea8dd2 --- /dev/null +++ b/src/blackgui/filters/statusmessagefilterbar.ui @@ -0,0 +1,94 @@ + + + CStatusMessageFilterBar + + + + 0 + 0 + 302 + 68 + + + + Status message filter + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + info + + + true + + + + + + + warning + + + + + + + error + + + + + + + + + + + + + category + + + + + + + message text + + + + + + + + BlackGui::Filters::CFilterBarButtons + QFrame +
blackgui/filters/filterbarbuttons.h
+ 1 +
+
+ + +
diff --git a/src/blackgui/filters/statusmessagefilterdialog.cpp b/src/blackgui/filters/statusmessagefilterdialog.cpp new file mode 100644 index 000000000..8266bbbfd --- /dev/null +++ b/src/blackgui/filters/statusmessagefilterdialog.cpp @@ -0,0 +1,42 @@ +/* Copyright (C) 2016 + * 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 "blackgui/filters/statusmessagefilterdialog.h" +#include "blackgui/filters/statusmessagefilterbar.h" +#include "blackmisc/statusmessagelist.h" +#include "ui_statusmessagefilterdialog.h" + +using namespace BlackGui::Models; +using namespace BlackGui::Filters; +using namespace BlackMisc; + +namespace BlackGui +{ + namespace Filters + { + CStatusMessageFilterDialog::CStatusMessageFilterDialog(QWidget *parent) : + CFilterDialog(parent), + ui(new Ui::CStatusMessageFilterDialog) + { + ui->setupUi(this); + this->setWindowTitle("Filter status messages"); + this->resize(480, 75); + ui->filter_Messages->displayCount(false); + connect(ui->filter_Messages, &CStatusMessageFilterBar::rejectDialog, this, &CStatusMessageFilterDialog::reject); + } + + CStatusMessageFilterDialog::~CStatusMessageFilterDialog() + { } + + std::unique_ptr> CStatusMessageFilterDialog::createModelFilter() const + { + return ui->filter_Messages->createModelFilter(); + } + } // namespace +} // namespace diff --git a/src/blackgui/filters/statusmessagefilterdialog.h b/src/blackgui/filters/statusmessagefilterdialog.h new file mode 100644 index 000000000..5e472cb24 --- /dev/null +++ b/src/blackgui/filters/statusmessagefilterdialog.h @@ -0,0 +1,56 @@ +/* Copyright (C) 2016 + * 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_FILTERS_STATUSMESSAGEFILTERDIALOG_H +#define BLACKGUI_FILTERS_STATUSMESSAGEFILTERDIALOG_H + +#include "blackgui/blackguiexport.h" +#include "blackgui/filters/filterdialog.h" +#include "blackgui/models/modelfilter.h" + +#include +#include +#include + +class QWidget; + +namespace BlackMisc { class CStatusMessageList; } +namespace Ui { class CStatusMessageFilterDialog; } + +namespace BlackGui +{ + namespace Filters + { + //! Form for a status message filter + class BLACKGUI_EXPORT CStatusMessageFilterDialog : + public CFilterDialog, + public BlackGui::Models::IModelFilterProvider + { + Q_OBJECT + + public: + //! Constructor + explicit CStatusMessageFilterDialog(QWidget *parent = nullptr); + + //! Destructor + virtual ~CStatusMessageFilterDialog(); + + //! \copydoc Models::IModelFilterProvider::createModelFilter + virtual std::unique_ptr> createModelFilter() const override; + + private: + QScopedPointer ui; + }; + + } // namespace +} // namespace + +#endif // guard diff --git a/src/blackgui/filters/statusmessagefilterdialog.ui b/src/blackgui/filters/statusmessagefilterdialog.ui new file mode 100644 index 000000000..ee1f0b310 --- /dev/null +++ b/src/blackgui/filters/statusmessagefilterdialog.ui @@ -0,0 +1,82 @@ + + + CStatusMessageFilterDialog + + + + 0 + 0 + 184 + 56 + + + + Dialog + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + BlackGui::Filters::CStatusMessageFilterBar + QFrame +
blackgui/filters/statusmessagefilterbar.h
+ 1 +
+
+ + + + bb_FilterDialog + accepted() + CStatusMessageFilterDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + bb_FilterDialog + rejected() + CStatusMessageFilterDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +