From c67e88d3184386724051500eeea98ebf34cee394 Mon Sep 17 00:00:00 2001 From: Renu-Priya411 Date: Mon, 16 Jun 2025 14:52:30 +0530 Subject: [PATCH] Finding the total count of marked messages while adding a filter to the log. A custome menu addedin the Filter Menu "Marked Message Count" to find the count. Changes in mainwindow.cpp and mainwindow.ui Signed-off by : Renu Priya Krishnamoorthy --- src/mainwindow.cpp | 111 +++++++++++++++++++++++++++++++++++++++++++++ src/mainwindow.h | 9 ++++ src/mainwindow.ui | 66 +++++++++++++++------------ 3 files changed, 156 insertions(+), 30 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 81a29705..3adc9afd 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -50,6 +50,7 @@ #include #include #include +#include /** * From QDlt. @@ -3348,6 +3349,13 @@ void MainWindow::on_filterWidget_customContextMenuRequested(QPoint pos) menu.addSeparator(); + action = new QAction("Marked Message Count", this); + if(list.size() != 1) + action->setEnabled(false); + else + connect(action, SIGNAL(triggered()), this, SLOT(on_actionFiltered_Message_Count_triggered())); + menu.addAction(action); + if(list.size()>=1) action = new QAction("Set Selected Active", this); else @@ -6758,8 +6766,111 @@ void MainWindow::filterDialogRead(FilterDialog &dlg,FilterItem* item) { tableModel->modelChanged(); } + + //Collects all the filter names and the colors used for highlighting for finding the marked message count. + + filterCollectionMap[item->filter.name] = item->filter.filterColour; +} + +//findFiltered Lines is used for segregating the number of lines filtered per filter. +//filterCollectionMap collects the filter name and their respective colors. +//previousFilterMap is used for checking if the same color is used for the same filter. +//If same color is used it will not be counted else, it will check the count again. + +void MainWindow::findFilteredLines() +{ + + QAbstractItemModel *model = ui->tableView->model(); + int count = 0; + int rowCount = model->rowCount(); + totalMessages = rowCount; + + QProgressDialog progress("Counting highlighted rows...", "Cancel", 0, rowCount, this); + progress.setWindowModality(Qt::ApplicationModal); + progress.setMinimumDuration(0); // show immediately + progress.setAutoClose(true); + + for (auto it = filterCollectionMap.constBegin(); it != filterCollectionMap.constEnd(); ++it) { + const QString& filterName = it.key(); + const QColor& currentColor = it.value(); + + // Check if already counted with same color + if (previousFilterStateMap.contains(filterName)) { + const QColor& previousColor = previousFilterStateMap[filterName].first; + + if (previousColor == currentColor) { + // Same color used before → skip recount + filterCountMap[filterName] = previousFilterStateMap[filterName].second; + continue; + } + } + + for (int row = 0; row < rowCount; ++row) { + QModelIndex index = model->index(row, 0); // Check only column 0 + QVariant bgVariant = model->data(index, Qt::BackgroundRole); + + if (bgVariant.canConvert()) { + QColor bgColor = qvariant_cast(bgVariant).color(); + if (bgColor == currentColor) + ++count; + } + + // Update progress bar + if (it == filterCollectionMap.constBegin()) + progress.setValue(row); + + if (progress.wasCanceled()) + return; + } + + // Save in result and state map + filterCountMap[filterName] = count; + previousFilterStateMap[filterName] = qMakePair(currentColor, count); + } + + progress.setValue(rowCount); +} + +//The function is triggered when "Marked Message Count" is clicked in the filter's custom menu. +//It checked the number of filtered message using findFilteredLines function and then +//generates a dialog for displaying the marked messages count. + +void MainWindow::on_actionFiltered_Message_Count_triggered(){ + + findFilteredLines(); + + QDialog *dialog = new QDialog(this); + dialog->setWindowTitle("Filtered Message Counts"); + dialog->resize(400, 300); + + // Create layout and table widget + QVBoxLayout *layout = new QVBoxLayout(dialog); + QTableWidget *table = new QTableWidget(dialog); + table->setColumnCount(3); + table->setHorizontalHeaderLabels(QStringList() << "Filter Term" << "Marked Messages" << "Total Number of Messages"); + table->horizontalHeader()->setStretchLastSection(true); + table->verticalHeader()->setVisible(false); + table->setEditTriggers(QAbstractItemView::NoEditTriggers); + + // Set row count based on your map + table->setRowCount(filterCountMap.size()); + + // Fill the table with data + int row = 0; + for (auto it = filterCountMap.constBegin(); it != filterCountMap.constEnd(); ++it, ++row) { + table->setItem(row, 0, new QTableWidgetItem(it.key())); + table->setItem(row, 1, new QTableWidgetItem(QString::number(it.value()))); + table->setItem(row, 2, new QTableWidgetItem(QString::number(totalMessages))); + } + + layout->addWidget(table); + dialog->setLayout(layout); + + dialog->exec(); + } + void MainWindow::on_action_menuFilter_Duplicate_triggered() { QTreeWidget *widget; diff --git a/src/mainwindow.h b/src/mainwindow.h index 7b2e6dc4..ce8df9e5 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -125,6 +125,12 @@ class MainWindow : public QMainWindow WorkingDirectory workingDirectory; bool filterIsChanged; + //Maps to hold the filter values - findFilteredLines() & MarkedMessages + QMap filterCountMap; + QMap filterCollectionMap; + QMap> previousFilterStateMap; + int totalMessages; + /* Status line items */ QLabel *statusFilename; QLabel *statusFileError; @@ -370,6 +376,8 @@ class MainWindow : public QMainWindow void writeDLTMessageToFile(const QByteArray& bufferHeader, std::string_view payload, const EcuItem* ecuitem); + void findFilteredLines(); + protected: void keyPressEvent ( QKeyEvent * event ) override; void dragEnterEvent(QDragEnterEvent *event) override; @@ -504,6 +512,7 @@ private slots: void on_action_menuFilter_Append_Filters_triggered(); void onactionmenuFilter_SetAllActiveTriggered(); void onactionmenuFilter_SetAllInactiveTriggered(); + void on_actionFiltered_Message_Count_triggered(); // Plugin methods void on_action_menuPlugin_Hide_triggered(); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index d87597d8..b5478cae 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -11,7 +11,7 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus MainWindow @@ -21,7 +21,7 @@ :/icons/png/org.genivi.DLTViewer.png:/icons/png/org.genivi.DLTViewer.png - QTabWidget::Rounded + QTabWidget::TabShape::Rounded @@ -45,10 +45,10 @@ - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu - QAbstractScrollArea::AdjustToContentsOnFirstShow + QAbstractScrollArea::SizeAdjustPolicy::AdjustToContentsOnFirstShow false @@ -60,13 +60,13 @@ true - QAbstractItemView::ExtendedSelection + QAbstractItemView::SelectionMode::ExtendedSelection - QAbstractItemView::SelectRows + QAbstractItemView::SelectionBehavior::SelectRows - QAbstractItemView::ScrollPerPixel + QAbstractItemView::ScrollMode::ScrollPerPixel false @@ -93,7 +93,7 @@ 0 0 1001 - 26 + 21 @@ -191,6 +191,7 @@ + @@ -310,10 +311,10 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus - QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable + QDockWidget::DockWidgetFeature::DockWidgetClosable|QDockWidget::DockWidgetFeature::DockWidgetFloatable|QDockWidget::DockWidgetFeature::DockWidgetMovable Project @@ -323,7 +324,7 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus @@ -341,10 +342,10 @@ - QFrame::NoFrame + QFrame::Shape::NoFrame - QFrame::Plain + QFrame::Shadow::Plain @@ -438,26 +439,26 @@ true - Qt::TabFocus + Qt::FocusPolicy::TabFocus - QTabWidget::South + QTabWidget::TabPosition::South - QTabWidget::Rounded + QTabWidget::TabShape::Rounded 2 - Qt::ElideNone + Qt::TextElideMode::ElideNone false - Qt::NoFocus + Qt::FocusPolicy::NoFocus Explore @@ -532,7 +533,7 @@ - QAbstractItemView::ExtendedSelection + QAbstractItemView::SelectionMode::ExtendedSelection true @@ -546,7 +547,7 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus Config @@ -567,19 +568,19 @@ - Qt::TabFocus + Qt::FocusPolicy::TabFocus - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu true - QAbstractItemView::ExtendedSelection + QAbstractItemView::SelectionMode::ExtendedSelection - QAbstractItemView::SelectRows + QAbstractItemView::SelectionBehavior::SelectRows true @@ -640,7 +641,7 @@ - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu true @@ -756,7 +757,7 @@ - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu true @@ -765,13 +766,13 @@ true - QAbstractItemView::InternalMove + QAbstractItemView::DragDropMode::InternalMove - Qt::MoveAction + Qt::DropAction::MoveAction - QAbstractItemView::ExtendedSelection + QAbstractItemView::SelectionMode::ExtendedSelection false @@ -848,7 +849,7 @@ - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu false @@ -1667,6 +1668,11 @@ Append... + + + Marked Message Count + +