diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 149e0702..5b2e56d2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #if defined(_MSC_VER) #include @@ -3373,6 +3374,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 @@ -6844,8 +6852,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 68e7140e..4649b26a 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -132,6 +132,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; @@ -368,6 +374,7 @@ class MainWindow : public QMainWindow void writeDLTMessageToFile(const QByteArray& bufferHeader, std::string_view payload, const EcuItem* ecuitem); + void findFilteredLines(); protected: void keyPressEvent ( QKeyEvent * event ) override; @@ -510,6 +517,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 99ded826..9df7d3ab 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,6 +93,7 @@ 0 0 1001 + 21 23 @@ -191,6 +192,7 @@ + @@ -311,10 +313,10 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus - QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable + QDockWidget::DockWidgetFeature::DockWidgetClosable|QDockWidget::DockWidgetFeature::DockWidgetFloatable|QDockWidget::DockWidgetFeature::DockWidgetMovable Project @@ -324,7 +326,7 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus @@ -342,10 +344,10 @@ - QFrame::NoFrame + QFrame::Shape::NoFrame - QFrame::Plain + QFrame::Shadow::Plain @@ -439,26 +441,26 @@ true - Qt::TabFocus + Qt::FocusPolicy::TabFocus - QTabWidget::South + QTabWidget::TabPosition::South - QTabWidget::Rounded + QTabWidget::TabShape::Rounded 0 - Qt::ElideNone + Qt::TextElideMode::ElideNone false - Qt::NoFocus + Qt::FocusPolicy::NoFocus Explore @@ -476,11 +478,78 @@ 2 + + + + 0 + + + + + + 50 + 16777215 + + + + Sort files: + + + + + + + + By Filename + + + + + By Timestamp + + + + + + + + + 50 + 16777215 + + + + + Asc. + + + + + Desc. + + + + + + + + + + QAbstractItemView::SelectionMode::ExtendedSelection + + + true + + + false + + + - Qt::NoFocus + Qt::FocusPolicy::NoFocus Config @@ -501,19 +570,19 @@ - Qt::TabFocus + Qt::FocusPolicy::TabFocus - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu true - QAbstractItemView::ExtendedSelection + QAbstractItemView::SelectionMode::ExtendedSelection - QAbstractItemView::SelectRows + QAbstractItemView::SelectionBehavior::SelectRows true @@ -574,7 +643,7 @@ - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu true @@ -690,7 +759,7 @@ - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu true @@ -699,13 +768,13 @@ true - QAbstractItemView::InternalMove + QAbstractItemView::DragDropMode::InternalMove - Qt::MoveAction + Qt::DropAction::MoveAction - QAbstractItemView::ExtendedSelection + QAbstractItemView::SelectionMode::ExtendedSelection false @@ -782,7 +851,7 @@ - Qt::CustomContextMenu + Qt::ContextMenuPolicy::CustomContextMenu false @@ -1601,6 +1670,9 @@ Append... + + + Marked Message Count Shortcuts List