From 7bcb35c0653436219772f7124ecce7c62e9c2635 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Sat, 7 Jul 2018 19:09:04 -0400 Subject: [PATCH 01/13] Resolved few merge conflicts --- src/Ravel.pro | 9 ++- src/filterdialog.cpp | 14 +++++ src/filterdialog.h | 22 +++++++ src/filterdialog.ui | 139 +++++++++++++++++++++++++++++++++++++++++++ src/mainwindow.cpp | 13 ++++ src/mainwindow.h | 5 ++ src/mainwindow.ui | 8 ++- 7 files changed, 206 insertions(+), 4 deletions(-) create mode 100644 src/filterdialog.cpp create mode 100644 src/filterdialog.h create mode 100644 src/filterdialog.ui diff --git a/src/Ravel.pro b/src/Ravel.pro index 48084e3..36c87b2 100644 --- a/src/Ravel.pro +++ b/src/Ravel.pro @@ -62,7 +62,8 @@ SOURCES += main.cpp \ primaryentitygroup.cpp \ entitygroup.cpp \ importfunctor.cpp \ - taskpropertywindow.cpp + taskpropertywindow.cpp \ + filterdialog.cpp HEADERS += \ trace.h \ @@ -99,14 +100,16 @@ HEADERS += \ entitygroup.h \ ravelutils.h \ importfunctor.h \ - taskpropertywindow.h + taskpropertywindow.h \ + filterdialog.h FORMS += \ mainwindow.ui \ visoptionsdialog.ui \ metricrangedialog.ui \ taskpropertywindow.ui - + filterdialog.ui \ + HOME = $$system(echo $HOME) contains(DEFINES, OTF1LIB) { diff --git a/src/filterdialog.cpp b/src/filterdialog.cpp new file mode 100644 index 0000000..1299b99 --- /dev/null +++ b/src/filterdialog.cpp @@ -0,0 +1,14 @@ +#include "filterdialog.h" +#include "ui_filterdialog.h" + +FilterDialog::FilterDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::FilterDialog) +{ + ui->setupUi(this); +} + +FilterDialog::~FilterDialog() +{ + delete ui; +} diff --git a/src/filterdialog.h b/src/filterdialog.h new file mode 100644 index 0000000..f7c4182 --- /dev/null +++ b/src/filterdialog.h @@ -0,0 +1,22 @@ +#ifndef FILTERDIALOG_H +#define FILTERDIALOG_H + +#include + +namespace Ui { +class FilterDialog; +} + +class FilterDialog : public QDialog +{ + Q_OBJECT + +public: + explicit FilterDialog(QWidget *parent = 0); + ~FilterDialog(); + +private: + Ui::FilterDialog *ui; +}; + +#endif // FILTERDIALOG_H diff --git a/src/filterdialog.ui b/src/filterdialog.ui new file mode 100644 index 0000000..dc6e59e --- /dev/null +++ b/src/filterdialog.ui @@ -0,0 +1,139 @@ + + + FilterDialog + + + + 0 + 0 + 511 + 300 + + + + Dialog + + + + + 150 + 260 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 400 + 20 + 91 + 25 + + + + Add + + + + + + 400 + 50 + 91 + 25 + + + + Remove + + + + + + 400 + 180 + 91 + 25 + + + + Import + + + + + + 10 + 10 + 381 + 241 + + + + 2 + + + false + + + true + + + false + + + + Active + + + + + Description + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0d10c98..0452040 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -35,6 +35,7 @@ #include "visoptionsdialog.h" #include "importfunctor.h" #include "taskpropertywindow.h" +#include "filterdialog.h" #include #include @@ -62,6 +63,7 @@ MainWindow::MainWindow(QWidget *parent) : visoptions(new VisOptions()), visdialog(NULL), taskwindow(NULL), + filterdialog(NULL), activetracename(""), activetraces(QStack()), dataDirectory("") @@ -121,6 +123,9 @@ MainWindow::MainWindow(QWidget *parent) : SLOT(launchVisOptions())); ui->actionVisualization->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_V)); + connect(ui->actionFilters, SIGNAL(triggered()), this, SLOT(launchFilterOptions())); + ui->actionFilters->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_F)); + connect(ui->actionPhysical_Time, SIGNAL(triggered()), this, SLOT(togglePhysicalTime())); ui->actionPhysical_Time->setShortcut(QKeySequence(Qt::ALT + Qt::Key_P)); @@ -243,6 +248,14 @@ void MainWindow::launchVisOptions() viswidgets[i]->repaint(); } +void MainWindow::launchFilterOptions() +{ + qDebug("What?"); + delete filterdialog; + filterdialog = new FilterDialog(this); + filterdialog->show(); +} + void MainWindow::importTracebyGUI() { // Now get the Trace File diff --git a/src/mainwindow.h b/src/mainwindow.h index b316417..c09c819 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -30,6 +30,7 @@ #include #include #include +#include "traditionalvis.h" class Event; class Trace; @@ -37,6 +38,8 @@ class VisWidget; class VisOptions; class VisOptionsDialog; class TaskPropertyWindow; +class TraditionalVis; +class FilterDialog; class QAction; class ImportFunctor; @@ -64,6 +67,7 @@ class MainWindow : public QMainWindow public slots: void launchVisOptions(); + void launchFilterOptions(); // Signal relays void pushTime(float start, float stop, bool jump = false); @@ -123,6 +127,7 @@ public slots: VisOptionsDialog * visdialog; TaskPropertyWindow * taskwindow; + FilterDialog *filterdialog; QString activetracename; diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 842c5dd..6dd69e3 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -264,7 +264,7 @@ 0 0 1600 - 25 + 22 @@ -280,6 +280,7 @@ Options + @@ -381,6 +382,11 @@ Save Current Trace + + + Filters + + From 1f97e3c9d2f2a1b6026c5ed7de9db69a71b0d179 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Tue, 12 Jun 2018 11:04:38 -0400 Subject: [PATCH 02/13] Removed Ravel.pro.user --- src/mainwindow.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0452040..3fa4755 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -250,7 +250,6 @@ void MainWindow::launchVisOptions() void MainWindow::launchFilterOptions() { - qDebug("What?"); delete filterdialog; filterdialog = new FilterDialog(this); filterdialog->show(); From aa3d5c866fe3173d093a22237019d6588292d5e0 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Sat, 7 Jul 2018 19:11:41 -0400 Subject: [PATCH 03/13] Resolving merge conflicts while rebasing v2 --- src/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f9d0e18..f2c18f2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -36,6 +36,7 @@ qt5_wrap_ui(ui_mainwindow.h mainwindow.ui) qt5_wrap_ui(ui_metricrangedialog.h metricrangedialog.ui) qt5_wrap_ui(ui_visoptionsdialog.h visoptionsdialog.ui) qt5_wrap_ui(ui_taskpropertywindow.h taskpropertywindow.ui) +qt5_wrap_ui(ui_filterdialog.h filterdialog.ui) # Sources and UI Files set(Ravel_SOURCES @@ -73,6 +74,7 @@ set(Ravel_SOURCES primaryentitygroup.cpp metrics.cpp taskpropertywindow.cpp + filterdialog.cpp ${ADDED_SOURCES} ) @@ -114,6 +116,7 @@ set(Ravel_HEADERS primaryentitygroup.h metrics.h taskpropertywindow.h + filterdialog.h ${ADDED_HEADERS} ) @@ -122,6 +125,7 @@ set(Ravel_UIC ui_visoptionsdialog.h ui_metricrangedialog.h ui_taskpropertywindow.h + ui_filterdialog.h ) # Build Target From 63e6cce0199a998c038a7b7db246a0099c698933 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Sat, 7 Jul 2018 19:12:51 -0400 Subject: [PATCH 04/13] Resolving merge conflicts while rebasing v3 --- src/CMakeLists.txt | 4 + src/Ravel.pro | 9 +- src/addfunctionsdialog.cpp | 42 ++++++++ src/addfunctionsdialog.h | 25 +++++ src/addfunctionsdialog.ui | 209 +++++++++++++++++++++++++++++++++++++ src/filterdialog.cpp | 26 ++++- src/filterdialog.h | 14 +++ src/filterdialog.ui | 11 +- src/mainwindow.h | 1 - 9 files changed, 333 insertions(+), 8 deletions(-) create mode 100644 src/addfunctionsdialog.cpp create mode 100644 src/addfunctionsdialog.h create mode 100644 src/addfunctionsdialog.ui diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f2c18f2..0c24cfe 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -37,6 +37,7 @@ qt5_wrap_ui(ui_metricrangedialog.h metricrangedialog.ui) qt5_wrap_ui(ui_visoptionsdialog.h visoptionsdialog.ui) qt5_wrap_ui(ui_taskpropertywindow.h taskpropertywindow.ui) qt5_wrap_ui(ui_filterdialog.h filterdialog.ui) +qt5_wrap_ui(ui_addfunctionsdialog.h addfunctionsdialog.ui) # Sources and UI Files set(Ravel_SOURCES @@ -75,6 +76,7 @@ set(Ravel_SOURCES metrics.cpp taskpropertywindow.cpp filterdialog.cpp + addfunctionsdialog.cpp ${ADDED_SOURCES} ) @@ -117,6 +119,7 @@ set(Ravel_HEADERS metrics.h taskpropertywindow.h filterdialog.h + addfunctionsdialog.h ${ADDED_HEADERS} ) @@ -126,6 +129,7 @@ set(Ravel_UIC ui_metricrangedialog.h ui_taskpropertywindow.h ui_filterdialog.h + ui_addfunctionsdialog.h ) # Build Target diff --git a/src/Ravel.pro b/src/Ravel.pro index 36c87b2..46720a0 100644 --- a/src/Ravel.pro +++ b/src/Ravel.pro @@ -63,7 +63,8 @@ SOURCES += main.cpp \ entitygroup.cpp \ importfunctor.cpp \ taskpropertywindow.cpp \ - filterdialog.cpp + filterdialog.cpp \ + addfunctionsdialog.cpp HEADERS += \ trace.h \ @@ -101,7 +102,8 @@ HEADERS += \ ravelutils.h \ importfunctor.h \ taskpropertywindow.h \ - filterdialog.h + filterdialog.h \ + addfunctionsdialog.h FORMS += \ mainwindow.ui \ @@ -109,7 +111,8 @@ FORMS += \ metricrangedialog.ui \ taskpropertywindow.ui filterdialog.ui \ - + addfunctionsdialog.ui + HOME = $$system(echo $HOME) contains(DEFINES, OTF1LIB) { diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp new file mode 100644 index 0000000..c238087 --- /dev/null +++ b/src/addfunctionsdialog.cpp @@ -0,0 +1,42 @@ +#include "addfunctionsdialog.h" +#include "ui_addfunctionsdialog.h" + +AddFunctionsDialog::AddFunctionsDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::AddFunctionsDialog) +{ + ui->setupUi(this); + ui->filterStartLabel->setVisible(false); + ui->filterStart->setVisible(false); + ui->filterEndLabel->setVisible(false); + ui->filterEnd->setVisible(false); + + connect(ui->filterOptions, SIGNAL(currentIndexChanged(int)), this, SLOT(switchVisibility(int))); +} + +AddFunctionsDialog::~AddFunctionsDialog() +{ + delete ui; +} + +void AddFunctionsDialog::switchVisibility(int option) +{ + switch(option) + { + case 0: + case 1: ui->filterStringLabel->setVisible(true); + ui->filterString->setVisible(true); + ui->filterStartLabel->setVisible(false); + ui->filterStart->setVisible(false); + ui->filterEndLabel->setVisible(false); + ui->filterEnd->setVisible(false); + break; + case 2: ui->filterStringLabel->setVisible(false); + ui->filterString->setVisible(false); + ui->filterStartLabel->setVisible(true); + ui->filterStart->setVisible(true); + ui->filterEndLabel->setVisible(true); + ui->filterEnd->setVisible(true); + break; + } +} diff --git a/src/addfunctionsdialog.h b/src/addfunctionsdialog.h new file mode 100644 index 0000000..15d0116 --- /dev/null +++ b/src/addfunctionsdialog.h @@ -0,0 +1,25 @@ +#ifndef ADDFUNCTIONSDIALOG_H +#define ADDFUNCTIONSDIALOG_H + +#include + +namespace Ui { +class AddFunctionsDialog; +} + +class AddFunctionsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AddFunctionsDialog(QWidget *parent = 0); + ~AddFunctionsDialog(); + +public slots: + void switchVisibility(int); + +private: + Ui::AddFunctionsDialog *ui; +}; + +#endif // ADDFUNCTIONSDIALOG_H diff --git a/src/addfunctionsdialog.ui b/src/addfunctionsdialog.ui new file mode 100644 index 0000000..30ff015 --- /dev/null +++ b/src/addfunctionsdialog.ui @@ -0,0 +1,209 @@ + + + AddFunctionsDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 260 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 120 + 10 + 261 + 31 + + + + + Regular Expression + + + + + Function Name + + + + + Start and End Time + + + + + + + 20 + 10 + 101 + 31 + + + + Filter Syntax + + + + + true + + + + 20 + 220 + 101 + 31 + + + + Filter String + + + + + true + + + + 120 + 220 + 261 + 31 + + + + + + + 100 + 220 + 101 + 31 + + + + + + + 280 + 220 + 101 + 31 + + + + + + + 20 + 220 + 81 + 31 + + + + Start Time + + + + + + 210 + 220 + 71 + 31 + + + + End Time + + + + + + 20 + 50 + 361 + 161 + + + + true + + + + Start Time + + + + + End Time + + + + + Name + + + + + + + + buttonBox + accepted() + AddFunctionsDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AddFunctionsDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/filterdialog.cpp b/src/filterdialog.cpp index 1299b99..13016ef 100644 --- a/src/filterdialog.cpp +++ b/src/filterdialog.cpp @@ -1,14 +1,38 @@ #include "filterdialog.h" #include "ui_filterdialog.h" +#include "addfunctionsdialog.h" +#include FilterDialog::FilterDialog(QWidget *parent) : QDialog(parent), - ui(new Ui::FilterDialog) + ui(new Ui::FilterDialog), + addFuncDialog(NULL) { ui->setupUi(this); + connect(ui->addFunctions, SIGNAL(clicked()), this, SLOT(openAddFunctionsDialog())); + connect(ui->removeFunctions, SIGNAL(clicked()), this, SLOT(openRemoveFunctionsDialog())); + connect(ui->importFunctions, SIGNAL(clicked()), this, SLOT(openImportFunctionsDialog())); } FilterDialog::~FilterDialog() { delete ui; } + +void FilterDialog::openAddFunctionsDialog() +{ + delete addFuncDialog; + qDebug(ui->addFunctions->text().toLatin1()); + addFuncDialog = new AddFunctionsDialog(this); + addFuncDialog->show(); +} + +void FilterDialog::openRemoveFunctionsDialog() +{ + qDebug(ui->removeFunctions->text().toLatin1()); +} + +void FilterDialog::openImportFunctionsDialog() +{ + qDebug(ui->importFunctions->text().toLatin1()); +} diff --git a/src/filterdialog.h b/src/filterdialog.h index f7c4182..95500ea 100644 --- a/src/filterdialog.h +++ b/src/filterdialog.h @@ -3,6 +3,8 @@ #include +class AddFunctionsDialog; + namespace Ui { class FilterDialog; } @@ -15,8 +17,20 @@ class FilterDialog : public QDialog explicit FilterDialog(QWidget *parent = 0); ~FilterDialog(); +public slots: + void openAddFunctionsDialog(); + void openRemoveFunctionsDialog(); + void openImportFunctionsDialog(); + private: Ui::FilterDialog *ui; + + // Add functions + AddFunctionsDialog *addFuncDialog; + + // Remove functions + + // Import Functions }; #endif // FILTERDIALOG_H diff --git a/src/filterdialog.ui b/src/filterdialog.ui index dc6e59e..4bda858 100644 --- a/src/filterdialog.ui +++ b/src/filterdialog.ui @@ -78,7 +78,7 @@ - 2 + 3 false @@ -91,12 +91,17 @@ - Active + Start Time - Description + End Time + + + + + Name diff --git a/src/mainwindow.h b/src/mainwindow.h index c09c819..3e32e50 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -30,7 +30,6 @@ #include #include #include -#include "traditionalvis.h" class Event; class Trace; From 1580e73b5ffff1becbc89a78de16d7d90756158d Mon Sep 17 00:00:00 2001 From: viraj96 Date: Thu, 21 Jun 2018 06:45:38 -0400 Subject: [PATCH 05/13] Finished first iteration of adding filter for normal string input --- src/addfunctionsdialog.cpp | 152 ++++++++++++++++++++++++++++++++++++- src/addfunctionsdialog.h | 24 +++++- src/addfunctionsdialog.ui | 56 +++++++++----- src/filterdialog.cpp | 77 +++++++++++++++++-- src/filterdialog.h | 11 ++- src/mainwindow.cpp | 12 ++- src/traditionalvis.cpp | 11 ++- src/viswidget.cpp | 18 ++++- src/viswidget.h | 6 ++ 9 files changed, 334 insertions(+), 33 deletions(-) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index c238087..55f769c 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -1,17 +1,30 @@ #include "addfunctionsdialog.h" #include "ui_addfunctionsdialog.h" +#include "trace.h" +#include "function.h" +#include "event.h" -AddFunctionsDialog::AddFunctionsDialog(QWidget *parent) : +AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, QSet _filterEvents) : QDialog(parent), + traces(_traces), + filterName(""), + allClicked(false), + matchingFunctions(QMap()), + matchingEvents(QList()), + selectedEvents(_filterEvents), ui(new Ui::AddFunctionsDialog) { ui->setupUi(this); + ui->filterTable->setColumnWidth(0, 50); ui->filterStartLabel->setVisible(false); ui->filterStart->setVisible(false); ui->filterEndLabel->setVisible(false); ui->filterEnd->setVisible(false); connect(ui->filterOptions, SIGNAL(currentIndexChanged(int)), this, SLOT(switchVisibility(int))); + connect(ui->filterString, SIGNAL(textChanged()), this, SLOT(captureInput())); + connect(ui->selectAllFunctions, SIGNAL(clicked(bool)), this, SLOT(selectAll(bool))); + connect(ui->filterTable, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(addToSelectedEvents(QTableWidgetItem*))); } AddFunctionsDialog::~AddFunctionsDialog() @@ -19,6 +32,16 @@ AddFunctionsDialog::~AddFunctionsDialog() delete ui; } +QSet AddFunctionsDialog::getSelectedEvents() +{ + return selectedEvents; +} + +QString AddFunctionsDialog::getFilterName() +{ + return filterName; +} + void AddFunctionsDialog::switchVisibility(int option) { switch(option) @@ -40,3 +63,130 @@ void AddFunctionsDialog::switchVisibility(int option) break; } } + +void AddFunctionsDialog::captureInput() +{ + filterName = ui->filterString->toPlainText(); + if (ui->filterOptions->currentIndex() == 0) + { + // do something! + } + else if (ui->filterOptions->currentIndex() == 1) + filterByName(filterName); +} + +void AddFunctionsDialog::selectAll(bool checked) +{ + if (checked) + { + if (matchingEvents.size()) + { + allClicked = true; + for (int counter = 0; counter != matchingEvents.size(); ++counter) + { + QTableWidgetItem *checkBox = ui->filterTable->item(counter, 0); + checkBox->setCheckState(Qt::Checked); + selectedEvents.insert(matchingEvents[counter]); + } + } + } + else + { + if (allClicked) + { + allClicked = false; + for (int counter = 0; counter != matchingEvents.size(); ++counter) + { + QTableWidgetItem *checkBox = ui->filterTable->item(counter, 0); + checkBox->setCheckState(Qt::Unchecked); + } + selectedEvents.clear(); + } + } +} + +void AddFunctionsDialog::addToSelectedEvents(QTableWidgetItem *item) +{ + if (item->column() == 0 && item->checkState() == Qt::Checked) + selectedEvents.insert(matchingEvents[item->row()]); + else if (item->column() == 0 && item->checkState() == Qt::Unchecked) + { + if (selectedEvents.contains(matchingEvents[item->row()])) + selectedEvents.remove(matchingEvents[item->row()]); + } +} + +void AddFunctionsDialog::filterByName(QString name) +{ + if (!this->traces.empty()) + { + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) + { + for (QMap::Iterator fnc = (*trc)->functions->begin(); + fnc != (*trc)->functions->end(); ++fnc) + { + if (!QString::compare(fnc.value()->name, name, Qt::CaseInsensitive)) + { + matchingFunctions.insert(fnc.key(), fnc.value()); + qDebug("Found it! " + name.toLatin1()); + } + } + } + for (QMap::Iterator fnc = matchingFunctions.begin(); + fnc != matchingFunctions.end(); ++fnc) + { + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) + { + for (QVector *>::Iterator eitr = (*trc)->events->begin(); + eitr != (*trc)->events->end(); ++eitr) + { + for (QVector::Iterator itr = (*eitr)->begin(); + itr != (*eitr)->end(); ++itr) + { + if (fnc.key() == (*itr)->function) + { + if (!matchingEvents.contains(*itr)) + matchingEvents.append(*itr); + } + } + } + } + } + ui->filterTable->setRowCount(matchingEvents.size()); + if (!selectedEvents.empty()) + { + foreach (Event * evt, selectedEvents) + { + if (matchingEvents.contains(evt)) + { + matchingEvents.removeAll(evt); + } + } + } + int counter = 0; + foreach (Event * evt, matchingEvents) + { + QTableWidgetItem *lastItemCheckBox = new QTableWidgetItem(); + lastItemCheckBox->setCheckState(Qt::Unchecked); + ui->filterTable->setItem(counter, 0, lastItemCheckBox); + QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); + ui->filterTable->setItem(counter, 1, lastItemStart); + QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); + ui->filterTable->setItem(counter, 2, lastItemEnd); + + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) + { + if ((*trc)->functions->contains(evt->function)) + { + QTableWidgetItem *lastItemName = new QTableWidgetItem((*trc)->functions->value(evt->function)->name); + ui->filterTable->setItem(counter, 3, lastItemName); + break; + } + } + counter++; + } + } +} diff --git a/src/addfunctionsdialog.h b/src/addfunctionsdialog.h index 15d0116..32ca3bd 100644 --- a/src/addfunctionsdialog.h +++ b/src/addfunctionsdialog.h @@ -2,6 +2,12 @@ #define ADDFUNCTIONSDIALOG_H #include +#include +#include + +class Trace; +class Function; +class Event; namespace Ui { class AddFunctionsDialog; @@ -12,14 +18,30 @@ class AddFunctionsDialog : public QDialog Q_OBJECT public: - explicit AddFunctionsDialog(QWidget *parent = 0); + explicit AddFunctionsDialog(QWidget *parent = 0, + QList _traces = QList(), + QSet _selectedEvents = QSet()); + QSet getSelectedEvents(); + QString getFilterName(); ~AddFunctionsDialog(); public slots: void switchVisibility(int); + void captureInput(); + void selectAll(bool); + void addToSelectedEvents(QTableWidgetItem *); private: Ui::AddFunctionsDialog *ui; + QList traces; + QString filterName; + QMap matchingFunctions; + QList matchingEvents; + QSet selectedEvents; + bool allClicked; + + void filterByName(QString name); + void filterByRegex(QString regexString); }; #endif // ADDFUNCTIONSDIALOG_H diff --git a/src/addfunctionsdialog.ui b/src/addfunctionsdialog.ui index 30ff015..6cc8264 100644 --- a/src/addfunctionsdialog.ui +++ b/src/addfunctionsdialog.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 532 + 356 @@ -16,8 +16,8 @@ - 30 - 260 + 180 + 320 341 32 @@ -34,7 +34,7 @@ 120 10 - 261 + 391 31 @@ -74,7 +74,7 @@ 20 - 220 + 280 101 31 @@ -90,8 +90,8 @@ 120 - 220 - 261 + 280 + 391 31 @@ -100,8 +100,8 @@ 100 - 220 - 101 + 280 + 161 31 @@ -109,9 +109,9 @@ - 280 - 220 - 101 + 340 + 280 + 171 31 @@ -120,7 +120,7 @@ 20 - 220 + 280 81 31 @@ -132,8 +132,8 @@ - 210 - 220 + 270 + 280 71 31 @@ -142,18 +142,23 @@ End Time - + 20 50 - 361 - 161 + 491 + 221 true + + + Select + + Start Time @@ -170,6 +175,19 @@ + + + + 20 + 320 + 111 + 23 + + + + Select All + + diff --git a/src/filterdialog.cpp b/src/filterdialog.cpp index 13016ef..0472fef 100644 --- a/src/filterdialog.cpp +++ b/src/filterdialog.cpp @@ -1,14 +1,42 @@ #include "filterdialog.h" #include "ui_filterdialog.h" #include "addfunctionsdialog.h" +#include "trace.h" +#include "event.h" +#include "function.h" #include -FilterDialog::FilterDialog(QWidget *parent) : +FilterDialog::FilterDialog(QWidget *parent, QList _traces, QSet _filterEvents) : QDialog(parent), - ui(new Ui::FilterDialog), - addFuncDialog(NULL) + traces(_traces), + filterApplied(false), + addFuncDialog(NULL), + filterEvents(_filterEvents), + ui(new Ui::FilterDialog) { ui->setupUi(this); + if (!filterEvents.empty()) + { + foreach (Event * evt, filterEvents) + { + ui->infoFunctions->insertRow(ui->infoFunctions->rowCount()); + QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); + ui->infoFunctions->setItem(ui->infoFunctions->rowCount() - 1, 0, lastItemStart); + QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); + ui->infoFunctions->setItem(ui->infoFunctions->rowCount() - 1, 1, lastItemEnd); + + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) + { + if ((*trc)->functions->contains(evt->function)) + { + QTableWidgetItem *lastItemName = new QTableWidgetItem((*trc)->functions->value(evt->function)->name); + ui->infoFunctions->setItem(ui->infoFunctions->rowCount() - 1, 2, lastItemName); + break; + } + } + } + } connect(ui->addFunctions, SIGNAL(clicked()), this, SLOT(openAddFunctionsDialog())); connect(ui->removeFunctions, SIGNAL(clicked()), this, SLOT(openRemoveFunctionsDialog())); connect(ui->importFunctions, SIGNAL(clicked()), this, SLOT(openImportFunctionsDialog())); @@ -19,12 +47,51 @@ FilterDialog::~FilterDialog() delete ui; } +QSet FilterDialog::getFilterEvents() +{ + return filterEvents; +} + void FilterDialog::openAddFunctionsDialog() { delete addFuncDialog; qDebug(ui->addFunctions->text().toLatin1()); - addFuncDialog = new AddFunctionsDialog(this); - addFuncDialog->show(); + if (!filterEvents.empty()) + addFuncDialog = new AddFunctionsDialog(this, traces, filterEvents); + else + addFuncDialog = new AddFunctionsDialog(this, traces); + int dialogCode = addFuncDialog->exec(); + if (dialogCode == QDialog::Accepted) + { + QSet selectedEvents = addFuncDialog->getSelectedEvents(); + if (!selectedEvents.empty()) + { + foreach (Event * evt, selectedEvents) + { + if (!filterEvents.contains(evt)) + { + ui->infoFunctions->insertRow(ui->infoFunctions->rowCount()); + QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); + ui->infoFunctions->setItem(ui->infoFunctions->rowCount() - 1, 0, lastItemStart); + QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); + ui->infoFunctions->setItem(ui->infoFunctions->rowCount() - 1, 1, lastItemEnd); + + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) + { + if ((*trc)->functions->contains(evt->function)) + { + QTableWidgetItem *lastItemName = new QTableWidgetItem((*trc)->functions->value(evt->function)->name); + ui->infoFunctions->setItem(ui->infoFunctions->rowCount() - 1, 2, lastItemName); + break; + } + } + filterEvents.insert(evt); + } + } + filterApplied = true; + } + } } void FilterDialog::openRemoveFunctionsDialog() diff --git a/src/filterdialog.h b/src/filterdialog.h index 95500ea..c43ce42 100644 --- a/src/filterdialog.h +++ b/src/filterdialog.h @@ -2,8 +2,11 @@ #define FILTERDIALOG_H #include +#include class AddFunctionsDialog; +class Trace; +class Event; namespace Ui { class FilterDialog; @@ -14,8 +17,12 @@ class FilterDialog : public QDialog Q_OBJECT public: - explicit FilterDialog(QWidget *parent = 0); + explicit FilterDialog(QWidget *parent = 0, + QList _traces = QList(), + QSet _filterEvents = QSet()); ~FilterDialog(); + QSet getFilterEvents(); + bool filterApplied; public slots: void openAddFunctionsDialog(); @@ -24,9 +31,11 @@ public slots: private: Ui::FilterDialog *ui; + QList traces; // Add functions AddFunctionsDialog *addFuncDialog; + QSet filterEvents; // Remove functions diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3fa4755..ef5d586 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -251,8 +251,16 @@ void MainWindow::launchVisOptions() void MainWindow::launchFilterOptions() { delete filterdialog; - filterdialog = new FilterDialog(this); - filterdialog->show(); + if (!viswidgets[TIMEVIS]->getFilterEvents().empty()) + filterdialog = new FilterDialog(this, this->traces, viswidgets[TIMEVIS]->getFilterEvents()); + else + filterdialog = new FilterDialog(this, this->traces); + int dialogCode = filterdialog->exec(); + if (dialogCode == QDialog::Accepted && filterdialog->filterApplied) + { + viswidgets[TIMEVIS]->setFilterApplied(true); + viswidgets[TIMEVIS]->setFilterEvents(filterdialog->getFilterEvents()); + } } void MainWindow::importTracebyGUI() diff --git a/src/traditionalvis.cpp b/src/traditionalvis.cpp index b2159b9..a771ce5 100644 --- a/src/traditionalvis.cpp +++ b/src/traditionalvis.cpp @@ -480,9 +480,14 @@ void TraditionalVis::paintEvents(QPainter *painter) for (QVector::Iterator root = roots->begin(); root != roots->end(); ++root) { - paintNotStepEvents(painter, *root, position, entity_spacing, - barheight, blockheight, &extents, &drawComms, - &selectedComms); + if (filterApplied && filterEvents.contains(*root)) + paintNotStepEvents(painter, *root, position, entity_spacing, + barheight, blockheight, &extents, &drawComms, + &selectedComms); + else if (!filterApplied) + paintNotStepEvents(painter, *root, position, entity_spacing, + barheight, blockheight, &extents, &drawComms, + &selectedComms); } } diff --git a/src/viswidget.cpp b/src/viswidget.cpp index 3c47c6c..5794c6d 100644 --- a/src/viswidget.cpp +++ b/src/viswidget.cpp @@ -48,11 +48,13 @@ VisWidget::VisWidget(QWidget *parent, VisOptions * _options) : changeSource(false), border(20), drawnEvents(QMap()), + filterEvents(QSet()), selected_entities(QList()), selected_event(NULL), task_property_event(NULL), hover_event(NULL), - closed(false) + closed(false), + filterApplied(false) { setFocusPolicy(Qt::StrongFocus); // GLWidget options @@ -231,11 +233,25 @@ void VisWidget::setClosed(bool _closed) closed = _closed; } +void VisWidget::setFilterApplied(bool _filterApplied) +{ + filterApplied = _filterApplied; +} + void VisWidget::setVisOptions(VisOptions * _options) { options = _options; } +void VisWidget::setFilterEvents(QSet _filterEvents) +{ + filterEvents = _filterEvents; +} + +QSet VisWidget::getFilterEvents() +{ + return filterEvents; +} // Draws a timescale (physical). Note this can fail if the span is short // enough which can happen when we find no events. diff --git a/src/viswidget.h b/src/viswidget.h index 6639eb0..385c15b 100644 --- a/src/viswidget.h +++ b/src/viswidget.h @@ -31,6 +31,7 @@ #include #include #include +#include #include "visoptions.h" #include "commdrawinterface.h" @@ -55,8 +56,11 @@ class VisWidget : public QGLWidget, public CommDrawInterface virtual QSize sizeHint() const; void setClosed(bool _closed); + void setFilterApplied(bool _filterApplied); bool isClosed() { return closed; } void setVisOptions(VisOptions * _options); + void setFilterEvents(QSet _filterEvents); + QSet getFilterEvents(); QWidget * container; virtual int getHeight() { return rect().height(); } @@ -104,11 +108,13 @@ public slots: // Interactions QMap drawnEvents; + QSet filterEvents; QList selected_entities; Event * selected_event; Event * task_property_event; Event * hover_event; bool closed; + bool filterApplied; static const int initTimeSpan = 90000; static const int timescaleHeight = 20; From c7142e572ff5706c06f8b32ae7df6f84ffbbed1f Mon Sep 17 00:00:00 2001 From: viraj96 Date: Thu, 21 Jun 2018 09:40:59 -0400 Subject: [PATCH 06/13] Added filter removal functionality for basic string filters --- src/addfunctionsdialog.cpp | 24 +++++++++++---------- src/addfunctionsdialog.h | 2 ++ src/filterdialog.cpp | 43 +++++++++++++++++++++++++++++++------- src/filterdialog.h | 5 +---- src/filterdialog.ui | 15 +------------ 5 files changed, 53 insertions(+), 36 deletions(-) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index 55f769c..727dd7d 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -12,6 +12,7 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, matchingFunctions(QMap()), matchingEvents(QList()), selectedEvents(_filterEvents), + deletedEvents(QSet()), ui(new Ui::AddFunctionsDialog) { ui->setupUi(this); @@ -37,6 +38,11 @@ QSet AddFunctionsDialog::getSelectedEvents() return selectedEvents; } +QSet AddFunctionsDialog::getDeletedEvents() +{ + return deletedEvents; +} + QString AddFunctionsDialog::getFilterName() { return filterName; @@ -112,7 +118,10 @@ void AddFunctionsDialog::addToSelectedEvents(QTableWidgetItem *item) else if (item->column() == 0 && item->checkState() == Qt::Unchecked) { if (selectedEvents.contains(matchingEvents[item->row()])) + { + deletedEvents.insert(matchingEvents[item->row()]); selectedEvents.remove(matchingEvents[item->row()]); + } } } @@ -155,21 +164,14 @@ void AddFunctionsDialog::filterByName(QString name) } } ui->filterTable->setRowCount(matchingEvents.size()); - if (!selectedEvents.empty()) - { - foreach (Event * evt, selectedEvents) - { - if (matchingEvents.contains(evt)) - { - matchingEvents.removeAll(evt); - } - } - } int counter = 0; foreach (Event * evt, matchingEvents) { QTableWidgetItem *lastItemCheckBox = new QTableWidgetItem(); - lastItemCheckBox->setCheckState(Qt::Unchecked); + if (selectedEvents.contains(evt)) + lastItemCheckBox->setCheckState(Qt::Checked); + else + lastItemCheckBox->setCheckState(Qt::Unchecked); ui->filterTable->setItem(counter, 0, lastItemCheckBox); QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); ui->filterTable->setItem(counter, 1, lastItemStart); diff --git a/src/addfunctionsdialog.h b/src/addfunctionsdialog.h index 32ca3bd..a03d343 100644 --- a/src/addfunctionsdialog.h +++ b/src/addfunctionsdialog.h @@ -22,6 +22,7 @@ class AddFunctionsDialog : public QDialog QList _traces = QList(), QSet _selectedEvents = QSet()); QSet getSelectedEvents(); + QSet getDeletedEvents(); QString getFilterName(); ~AddFunctionsDialog(); @@ -38,6 +39,7 @@ public slots: QMap matchingFunctions; QList matchingEvents; QSet selectedEvents; + QSet deletedEvents; bool allClicked; void filterByName(QString name); diff --git a/src/filterdialog.cpp b/src/filterdialog.cpp index 0472fef..ae7583c 100644 --- a/src/filterdialog.cpp +++ b/src/filterdialog.cpp @@ -38,7 +38,6 @@ FilterDialog::FilterDialog(QWidget *parent, QList _traces, QSetaddFunctions, SIGNAL(clicked()), this, SLOT(openAddFunctionsDialog())); - connect(ui->removeFunctions, SIGNAL(clicked()), this, SLOT(openRemoveFunctionsDialog())); connect(ui->importFunctions, SIGNAL(clicked()), this, SLOT(openImportFunctionsDialog())); } @@ -64,6 +63,8 @@ void FilterDialog::openAddFunctionsDialog() if (dialogCode == QDialog::Accepted) { QSet selectedEvents = addFuncDialog->getSelectedEvents(); + QSet deletedEvents = addFuncDialog->getDeletedEvents(); + QList deletedRows; if (!selectedEvents.empty()) { foreach (Event * evt, selectedEvents) @@ -89,16 +90,44 @@ void FilterDialog::openAddFunctionsDialog() filterEvents.insert(evt); } } - filterApplied = true; + foreach (Event * evt, deletedEvents) + { + if (filterEvents.contains(evt)) + { + QString eventName; + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) + { + if ((*trc)->functions->contains(evt->function)) + { + eventName = (*trc)->functions->value(evt->function)->name; + break; + } + } + deletedRows = QList(); + for (int counter = 0; counter < ui->infoFunctions->rowCount(); ++counter) + { + if (ui->infoFunctions->item(counter, 0)->text() == QString::number(evt->enter) && + ui->infoFunctions->item(counter, 1)->text() == QString::number(evt->exit) && + ui->infoFunctions->item(counter, 2)->text() == eventName) + deletedRows.append(counter); + } + filterEvents.remove(evt); + } + } + for (QList::Iterator itr = deletedRows.begin(); + itr != deletedRows.end(); ++itr) + { + ui->infoFunctions->removeRow(*itr); + } + if (!filterEvents.empty()) + filterApplied = true; + else + filterApplied = false; } } } -void FilterDialog::openRemoveFunctionsDialog() -{ - qDebug(ui->removeFunctions->text().toLatin1()); -} - void FilterDialog::openImportFunctionsDialog() { qDebug(ui->importFunctions->text().toLatin1()); diff --git a/src/filterdialog.h b/src/filterdialog.h index c43ce42..5dbba4f 100644 --- a/src/filterdialog.h +++ b/src/filterdialog.h @@ -26,18 +26,15 @@ class FilterDialog : public QDialog public slots: void openAddFunctionsDialog(); - void openRemoveFunctionsDialog(); void openImportFunctionsDialog(); private: Ui::FilterDialog *ui; QList traces; + QSet filterEvents; // Add functions AddFunctionsDialog *addFuncDialog; - QSet filterEvents; - - // Remove functions // Import Functions }; diff --git a/src/filterdialog.ui b/src/filterdialog.ui index 4bda858..3d6cb2b 100644 --- a/src/filterdialog.ui +++ b/src/filterdialog.ui @@ -42,24 +42,11 @@ Add - - - - 400 - 50 - 91 - 25 - - - - Remove - - 400 - 180 + 50 91 25 From da073417330494a47cd850e40bd74d347dd21cdc Mon Sep 17 00:00:00 2001 From: viraj96 Date: Thu, 21 Jun 2018 11:03:01 -0400 Subject: [PATCH 07/13] Fixed filter removal bug and added time based filter functionality --- src/addfunctionsdialog.cpp | 80 ++++++++++++++++++++++++++++++++++++++ src/addfunctionsdialog.h | 5 +++ src/addfunctionsdialog.ui | 52 +++++++++++++++---------- src/filterdialog.cpp | 12 ++---- 4 files changed, 121 insertions(+), 28 deletions(-) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index 727dd7d..6618f23 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -8,6 +8,8 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, QDialog(parent), traces(_traces), filterName(""), + start(0), + end(0), allClicked(false), matchingFunctions(QMap()), matchingEvents(QList()), @@ -26,6 +28,8 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, connect(ui->filterString, SIGNAL(textChanged()), this, SLOT(captureInput())); connect(ui->selectAllFunctions, SIGNAL(clicked(bool)), this, SLOT(selectAll(bool))); connect(ui->filterTable, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(addToSelectedEvents(QTableWidgetItem*))); + connect(ui->filterStart, SIGNAL(valueChanged(double)), this, SLOT(captureStartTime(double))); + connect(ui->filterEnd, SIGNAL(valueChanged(double)), this, SLOT(captureEndTime(double))); } AddFunctionsDialog::~AddFunctionsDialog() @@ -81,6 +85,30 @@ void AddFunctionsDialog::captureInput() filterByName(filterName); } +void AddFunctionsDialog::captureStartTime(double time) +{ + if (ui->filterOptions->currentIndex() == 2) + { + start = time; + if (start < end && end != 0) + { + filterByTime(start, end); + } + } +} + +void AddFunctionsDialog::captureEndTime(double time) +{ + if (ui->filterOptions->currentIndex() == 2) + { + end = time; + if (start < end && end != 0) + { + filterByTime(start, end); + } + } +} + void AddFunctionsDialog::selectAll(bool checked) { if (checked) @@ -192,3 +220,55 @@ void AddFunctionsDialog::filterByName(QString name) } } } + +void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long long end) +{ + if (!this->traces.empty()) + { + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) + { + for (QVector *>::Iterator eitr = (*trc)->events->begin(); + eitr != (*trc)->events->end(); ++eitr) + { + for (QVector::Iterator itr = (*eitr)->begin(); + itr != (*eitr)->end(); ++itr) + { + if ((*itr)->enter >= start && (*itr)->exit <= end) + { + if (!matchingEvents.contains(*itr)) { + matchingEvents.append(*itr); + } + } + } + } + } + ui->filterTable->setRowCount(matchingEvents.size()); + int counter = 0; + foreach (Event * evt, matchingEvents) + { + QTableWidgetItem *lastItemCheckBox = new QTableWidgetItem(); + if (selectedEvents.contains(evt)) + lastItemCheckBox->setCheckState(Qt::Checked); + else + lastItemCheckBox->setCheckState(Qt::Unchecked); + ui->filterTable->setItem(counter, 0, lastItemCheckBox); + QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); + ui->filterTable->setItem(counter, 1, lastItemStart); + QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); + ui->filterTable->setItem(counter, 2, lastItemEnd); + + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) + { + if ((*trc)->functions->contains(evt->function)) + { + QTableWidgetItem *lastItemName = new QTableWidgetItem((*trc)->functions->value(evt->function)->name); + ui->filterTable->setItem(counter, 3, lastItemName); + break; + } + } + counter++; + } + } +} diff --git a/src/addfunctionsdialog.h b/src/addfunctionsdialog.h index a03d343..fa4db28 100644 --- a/src/addfunctionsdialog.h +++ b/src/addfunctionsdialog.h @@ -31,11 +31,15 @@ public slots: void captureInput(); void selectAll(bool); void addToSelectedEvents(QTableWidgetItem *); + void captureStartTime(double); + void captureEndTime(double); private: Ui::AddFunctionsDialog *ui; QList traces; QString filterName; + unsigned long long start; + unsigned long long end; QMap matchingFunctions; QList matchingEvents; QSet selectedEvents; @@ -44,6 +48,7 @@ public slots: void filterByName(QString name); void filterByRegex(QString regexString); + void filterByTime(unsigned long long start, unsigned long long end); }; #endif // ADDFUNCTIONSDIALOG_H diff --git a/src/addfunctionsdialog.ui b/src/addfunctionsdialog.ui index 6cc8264..4e0d5e8 100644 --- a/src/addfunctionsdialog.ui +++ b/src/addfunctionsdialog.ui @@ -96,26 +96,6 @@ - - - - 100 - 280 - 161 - 31 - - - - - - - 340 - 280 - 171 - 31 - - - @@ -188,6 +168,38 @@ Select All + + + + 100 + 280 + 161 + 31 + + + + 0 + + + 10000000000000000000.000000000000000 + + + + + + 340 + 280 + 171 + 31 + + + + 0 + + + 10000000000000000000.000000000000000 + + diff --git a/src/filterdialog.cpp b/src/filterdialog.cpp index ae7583c..fe4e429 100644 --- a/src/filterdialog.cpp +++ b/src/filterdialog.cpp @@ -64,7 +64,6 @@ void FilterDialog::openAddFunctionsDialog() { QSet selectedEvents = addFuncDialog->getSelectedEvents(); QSet deletedEvents = addFuncDialog->getDeletedEvents(); - QList deletedRows; if (!selectedEvents.empty()) { foreach (Event * evt, selectedEvents) @@ -104,22 +103,19 @@ void FilterDialog::openAddFunctionsDialog() break; } } - deletedRows = QList(); for (int counter = 0; counter < ui->infoFunctions->rowCount(); ++counter) { if (ui->infoFunctions->item(counter, 0)->text() == QString::number(evt->enter) && ui->infoFunctions->item(counter, 1)->text() == QString::number(evt->exit) && ui->infoFunctions->item(counter, 2)->text() == eventName) - deletedRows.append(counter); + { + ui->infoFunctions->removeRow(counter); + break; + } } filterEvents.remove(evt); } } - for (QList::Iterator itr = deletedRows.begin(); - itr != deletedRows.end(); ++itr) - { - ui->infoFunctions->removeRow(*itr); - } if (!filterEvents.empty()) filterApplied = true; else From e20ddec8ef9b1719a79b7a5f3021048727c69319 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Sat, 23 Jun 2018 01:13:21 -0400 Subject: [PATCH 08/13] Added regex based filter and made sure to remove suggestions if input string is empty --- src/addfunctionsdialog.cpp | 164 ++++++++++++++++++------------------- src/addfunctionsdialog.h | 7 +- 2 files changed, 81 insertions(+), 90 deletions(-) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index 6618f23..9500ea5 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -7,7 +7,6 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, QSet _filterEvents) : QDialog(parent), traces(_traces), - filterName(""), start(0), end(0), allClicked(false), @@ -47,11 +46,6 @@ QSet AddFunctionsDialog::getDeletedEvents() return deletedEvents; } -QString AddFunctionsDialog::getFilterName() -{ - return filterName; -} - void AddFunctionsDialog::switchVisibility(int option) { switch(option) @@ -76,13 +70,8 @@ void AddFunctionsDialog::switchVisibility(int option) void AddFunctionsDialog::captureInput() { - filterName = ui->filterString->toPlainText(); - if (ui->filterOptions->currentIndex() == 0) - { - // do something! - } - else if (ui->filterOptions->currentIndex() == 1) - filterByName(filterName); + QString filterString = ui->filterString->toPlainText(); + filterByString(filterString); } void AddFunctionsDialog::captureStartTime(double time) @@ -153,80 +142,77 @@ void AddFunctionsDialog::addToSelectedEvents(QTableWidgetItem *item) } } -void AddFunctionsDialog::filterByName(QString name) +void AddFunctionsDialog::getMatches(QString string) { - if (!this->traces.empty()) + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) { - for (QList::Iterator trc = this->traces.begin(); - trc != this->traces.end(); ++trc) + for (QMap::Iterator fnc = (*trc)->functions->begin(); + fnc != (*trc)->functions->end(); ++fnc) { - for (QMap::Iterator fnc = (*trc)->functions->begin(); - fnc != (*trc)->functions->end(); ++fnc) - { - if (!QString::compare(fnc.value()->name, name, Qt::CaseInsensitive)) + switch (ui->filterOptions->currentIndex()) { + case 0: + if (QString(fnc.value()->name).contains(QRegExp(string)) && string.size() != 0) + { + matchingFunctions.insert(fnc.key(), fnc.value()); + } + break; + case 1: + if (!QString::compare(fnc.value()->name, string, Qt::CaseInsensitive)) { matchingFunctions.insert(fnc.key(), fnc.value()); - qDebug("Found it! " + name.toLatin1()); } + break; } } - for (QMap::Iterator fnc = matchingFunctions.begin(); - fnc != matchingFunctions.end(); ++fnc) + } +} + +void AddFunctionsDialog::filterByString(QString name) +{ + if (!traces.empty()) + { + if (name.length() == 0) + { + matchingEvents.clear(); + } + else { - for (QList::Iterator trc = this->traces.begin(); - trc != this->traces.end(); ++trc) + qDebug("Name length = " + QString::number(name.length()).toLatin1()); + qDebug("Matching events length = " + QString::number(matchingEvents.size()).toLatin1()); + getMatches(name); + for (QMap::Iterator fnc = matchingFunctions.begin(); + fnc != matchingFunctions.end(); ++fnc) { - for (QVector *>::Iterator eitr = (*trc)->events->begin(); - eitr != (*trc)->events->end(); ++eitr) + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) { - for (QVector::Iterator itr = (*eitr)->begin(); - itr != (*eitr)->end(); ++itr) + for (QVector *>::Iterator eitr = (*trc)->events->begin(); + eitr != (*trc)->events->end(); ++eitr) { - if (fnc.key() == (*itr)->function) + for (QVector::Iterator itr = (*eitr)->begin(); + itr != (*eitr)->end(); ++itr) { - if (!matchingEvents.contains(*itr)) - matchingEvents.append(*itr); + if (fnc.key() == (*itr)->function) + { + if (!matchingEvents.contains(*itr)) + matchingEvents.append(*itr); + } } } } } } - ui->filterTable->setRowCount(matchingEvents.size()); - int counter = 0; - foreach (Event * evt, matchingEvents) - { - QTableWidgetItem *lastItemCheckBox = new QTableWidgetItem(); - if (selectedEvents.contains(evt)) - lastItemCheckBox->setCheckState(Qt::Checked); - else - lastItemCheckBox->setCheckState(Qt::Unchecked); - ui->filterTable->setItem(counter, 0, lastItemCheckBox); - QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); - ui->filterTable->setItem(counter, 1, lastItemStart); - QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); - ui->filterTable->setItem(counter, 2, lastItemEnd); - - for (QList::Iterator trc = traces.begin(); - trc != traces.end(); ++trc) - { - if ((*trc)->functions->contains(evt->function)) - { - QTableWidgetItem *lastItemName = new QTableWidgetItem((*trc)->functions->value(evt->function)->name); - ui->filterTable->setItem(counter, 3, lastItemName); - break; - } - } - counter++; - } + populateTable(); } } void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long long end) { - if (!this->traces.empty()) + if (!traces.empty()) { - for (QList::Iterator trc = this->traces.begin(); - trc != this->traces.end(); ++trc) + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) { for (QVector *>::Iterator eitr = (*trc)->events->begin(); eitr != (*trc)->events->end(); ++eitr) @@ -243,32 +229,38 @@ void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long lo } } } - ui->filterTable->setRowCount(matchingEvents.size()); - int counter = 0; - foreach (Event * evt, matchingEvents) - { - QTableWidgetItem *lastItemCheckBox = new QTableWidgetItem(); - if (selectedEvents.contains(evt)) - lastItemCheckBox->setCheckState(Qt::Checked); - else - lastItemCheckBox->setCheckState(Qt::Unchecked); - ui->filterTable->setItem(counter, 0, lastItemCheckBox); - QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); - ui->filterTable->setItem(counter, 1, lastItemStart); - QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); - ui->filterTable->setItem(counter, 2, lastItemEnd); + populateTable(); + } +} + +void AddFunctionsDialog::populateTable() +{ + ui->filterTable->setRowCount(matchingEvents.size()); + qDebug("Size = " + QString::number(matchingEvents.size()).toLatin1()); + int counter = 0; + foreach (Event * evt, matchingEvents) + { + QTableWidgetItem *lastItemCheckBox = new QTableWidgetItem(); + if (selectedEvents.contains(evt)) + lastItemCheckBox->setCheckState(Qt::Checked); + else + lastItemCheckBox->setCheckState(Qt::Unchecked); + ui->filterTable->setItem(counter, 0, lastItemCheckBox); + QTableWidgetItem *lastItemStart = new QTableWidgetItem(QString::number(evt->enter)); + ui->filterTable->setItem(counter, 1, lastItemStart); + QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); + ui->filterTable->setItem(counter, 2, lastItemEnd); - for (QList::Iterator trc = traces.begin(); - trc != traces.end(); ++trc) + for (QList::Iterator trc = traces.begin(); + trc != traces.end(); ++trc) + { + if ((*trc)->functions->contains(evt->function)) { - if ((*trc)->functions->contains(evt->function)) - { - QTableWidgetItem *lastItemName = new QTableWidgetItem((*trc)->functions->value(evt->function)->name); - ui->filterTable->setItem(counter, 3, lastItemName); - break; - } + QTableWidgetItem *lastItemName = new QTableWidgetItem((*trc)->functions->value(evt->function)->name); + ui->filterTable->setItem(counter, 3, lastItemName); + break; } - counter++; } + counter++; } } diff --git a/src/addfunctionsdialog.h b/src/addfunctionsdialog.h index fa4db28..a60a3d7 100644 --- a/src/addfunctionsdialog.h +++ b/src/addfunctionsdialog.h @@ -23,7 +23,6 @@ class AddFunctionsDialog : public QDialog QSet _selectedEvents = QSet()); QSet getSelectedEvents(); QSet getDeletedEvents(); - QString getFilterName(); ~AddFunctionsDialog(); public slots: @@ -37,7 +36,6 @@ public slots: private: Ui::AddFunctionsDialog *ui; QList traces; - QString filterName; unsigned long long start; unsigned long long end; QMap matchingFunctions; @@ -46,9 +44,10 @@ public slots: QSet deletedEvents; bool allClicked; - void filterByName(QString name); - void filterByRegex(QString regexString); + void getMatches(QString string); + void filterByString(QString name); void filterByTime(unsigned long long start, unsigned long long end); + void populateTable(); }; #endif // ADDFUNCTIONSDIALOG_H From 7c27af76035eea7b227cf7384601056b26e8811b Mon Sep 17 00:00:00 2001 From: viraj96 Date: Fri, 29 Jun 2018 15:08:01 -0400 Subject: [PATCH 09/13] Minor bug fixes and changes to UI --- src/addfunctionsdialog.cpp | 113 ++++++++++++++++++------------------- src/addfunctionsdialog.ui | 20 ++++++- 2 files changed, 75 insertions(+), 58 deletions(-) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index 9500ea5..93d2e79 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -24,7 +24,7 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, ui->filterEnd->setVisible(false); connect(ui->filterOptions, SIGNAL(currentIndexChanged(int)), this, SLOT(switchVisibility(int))); - connect(ui->filterString, SIGNAL(textChanged()), this, SLOT(captureInput())); + connect(ui->filterButton, SIGNAL(clicked()), this, SLOT(captureInput())); connect(ui->selectAllFunctions, SIGNAL(clicked(bool)), this, SLOT(selectAll(bool))); connect(ui->filterTable, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(addToSelectedEvents(QTableWidgetItem*))); connect(ui->filterStart, SIGNAL(valueChanged(double)), this, SLOT(captureStartTime(double))); @@ -38,12 +38,12 @@ AddFunctionsDialog::~AddFunctionsDialog() QSet AddFunctionsDialog::getSelectedEvents() { - return selectedEvents; + return this->selectedEvents; } QSet AddFunctionsDialog::getDeletedEvents() { - return deletedEvents; + return this->deletedEvents; } void AddFunctionsDialog::switchVisibility(int option) @@ -53,6 +53,7 @@ void AddFunctionsDialog::switchVisibility(int option) case 0: case 1: ui->filterStringLabel->setVisible(true); ui->filterString->setVisible(true); + ui->filterButton->setVisible(true); ui->filterStartLabel->setVisible(false); ui->filterStart->setVisible(false); ui->filterEndLabel->setVisible(false); @@ -60,6 +61,7 @@ void AddFunctionsDialog::switchVisibility(int option) break; case 2: ui->filterStringLabel->setVisible(false); ui->filterString->setVisible(false); + ui->filterButton->setVisible(false); ui->filterStartLabel->setVisible(true); ui->filterStart->setVisible(true); ui->filterEndLabel->setVisible(true); @@ -71,6 +73,9 @@ void AddFunctionsDialog::switchVisibility(int option) void AddFunctionsDialog::captureInput() { QString filterString = ui->filterString->toPlainText(); + this->matchingEvents.clear(); + this->matchingFunctions.clear(); + ui->filterTable->clear(); filterByString(filterString); } @@ -102,14 +107,14 @@ void AddFunctionsDialog::selectAll(bool checked) { if (checked) { - if (matchingEvents.size()) + if (this->matchingEvents.size()) { allClicked = true; - for (int counter = 0; counter != matchingEvents.size(); ++counter) + for (int counter = 0; counter != this->matchingEvents.size(); ++counter) { QTableWidgetItem *checkBox = ui->filterTable->item(counter, 0); checkBox->setCheckState(Qt::Checked); - selectedEvents.insert(matchingEvents[counter]); + this->selectedEvents.insert(this->matchingEvents[counter]); } } } @@ -118,12 +123,12 @@ void AddFunctionsDialog::selectAll(bool checked) if (allClicked) { allClicked = false; - for (int counter = 0; counter != matchingEvents.size(); ++counter) + for (int counter = 0; counter != this->matchingEvents.size(); ++counter) { QTableWidgetItem *checkBox = ui->filterTable->item(counter, 0); checkBox->setCheckState(Qt::Unchecked); } - selectedEvents.clear(); + this->selectedEvents.clear(); } } } @@ -131,38 +136,41 @@ void AddFunctionsDialog::selectAll(bool checked) void AddFunctionsDialog::addToSelectedEvents(QTableWidgetItem *item) { if (item->column() == 0 && item->checkState() == Qt::Checked) - selectedEvents.insert(matchingEvents[item->row()]); + this->selectedEvents.insert(this->matchingEvents[item->row()]); else if (item->column() == 0 && item->checkState() == Qt::Unchecked) { - if (selectedEvents.contains(matchingEvents[item->row()])) + if (this->selectedEvents.contains(this->matchingEvents[item->row()])) { - deletedEvents.insert(matchingEvents[item->row()]); - selectedEvents.remove(matchingEvents[item->row()]); + this->deletedEvents.insert(this->matchingEvents[item->row()]); + this->selectedEvents.remove(this->matchingEvents[item->row()]); } } } void AddFunctionsDialog::getMatches(QString string) -{ - for (QList::Iterator trc = traces.begin(); - trc != traces.end(); ++trc) +{ + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) { for (QMap::Iterator fnc = (*trc)->functions->begin(); fnc != (*trc)->functions->end(); ++fnc) { - switch (ui->filterOptions->currentIndex()) { - case 0: - if (QString(fnc.value()->name).contains(QRegExp(string)) && string.size() != 0) + switch (ui->filterOptions->currentIndex()) + { + case 0: { - matchingFunctions.insert(fnc.key(), fnc.value()); + QRegExp rx(string); + rx.setPatternSyntax(QRegExp::Wildcard); + if (rx.exactMatch(fnc.value()->name) && string.size() != 0) + this->matchingFunctions.insert(fnc.key(), fnc.value()); + break; } - break; - case 1: - if (!QString::compare(fnc.value()->name, string, Qt::CaseInsensitive)) + case 1: { - matchingFunctions.insert(fnc.key(), fnc.value()); + if (!QString::compare(fnc.value()->name, string, Qt::CaseInsensitive)) + this->matchingFunctions.insert(fnc.key(), fnc.value()); + break; } - break; } } } @@ -170,34 +178,25 @@ void AddFunctionsDialog::getMatches(QString string) void AddFunctionsDialog::filterByString(QString name) { - if (!traces.empty()) + if (!this->traces.empty()) { - if (name.length() == 0) - { - matchingEvents.clear(); - } - else + getMatches(name); + for (QMap::Iterator fnc = this->matchingFunctions.begin(); + fnc != this->matchingFunctions.end(); ++fnc) { - qDebug("Name length = " + QString::number(name.length()).toLatin1()); - qDebug("Matching events length = " + QString::number(matchingEvents.size()).toLatin1()); - getMatches(name); - for (QMap::Iterator fnc = matchingFunctions.begin(); - fnc != matchingFunctions.end(); ++fnc) + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) { - for (QList::Iterator trc = traces.begin(); - trc != traces.end(); ++trc) + for (QVector *>::Iterator eitr = (*trc)->events->begin(); + eitr != (*trc)->events->end(); ++eitr) { - for (QVector *>::Iterator eitr = (*trc)->events->begin(); - eitr != (*trc)->events->end(); ++eitr) + for (QVector::Iterator itr = (*eitr)->begin(); + itr != (*eitr)->end(); ++itr) { - for (QVector::Iterator itr = (*eitr)->begin(); - itr != (*eitr)->end(); ++itr) + if (fnc.key() == (*itr)->function) { - if (fnc.key() == (*itr)->function) - { - if (!matchingEvents.contains(*itr)) - matchingEvents.append(*itr); - } + if (!this->matchingEvents.contains(*itr)) + this->matchingEvents.append(*itr); } } } @@ -209,10 +208,10 @@ void AddFunctionsDialog::filterByString(QString name) void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long long end) { - if (!traces.empty()) + if (!this->traces.empty()) { - for (QList::Iterator trc = traces.begin(); - trc != traces.end(); ++trc) + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) { for (QVector *>::Iterator eitr = (*trc)->events->begin(); eitr != (*trc)->events->end(); ++eitr) @@ -222,8 +221,8 @@ void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long lo { if ((*itr)->enter >= start && (*itr)->exit <= end) { - if (!matchingEvents.contains(*itr)) { - matchingEvents.append(*itr); + if (!this->matchingEvents.contains(*itr)) { + this->matchingEvents.append(*itr); } } } @@ -235,13 +234,13 @@ void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long lo void AddFunctionsDialog::populateTable() { - ui->filterTable->setRowCount(matchingEvents.size()); - qDebug("Size = " + QString::number(matchingEvents.size()).toLatin1()); + ui->filterTable->setRowCount(this->matchingEvents.size()); + qDebug("Size = " + QString::number(this->matchingEvents.size()).toLatin1()); int counter = 0; - foreach (Event * evt, matchingEvents) + foreach (Event * evt, this->matchingEvents) { QTableWidgetItem *lastItemCheckBox = new QTableWidgetItem(); - if (selectedEvents.contains(evt)) + if (this->selectedEvents.contains(evt)) lastItemCheckBox->setCheckState(Qt::Checked); else lastItemCheckBox->setCheckState(Qt::Unchecked); @@ -251,8 +250,8 @@ void AddFunctionsDialog::populateTable() QTableWidgetItem *lastItemEnd = new QTableWidgetItem(QString::number(evt->exit)); ui->filterTable->setItem(counter, 2, lastItemEnd); - for (QList::Iterator trc = traces.begin(); - trc != traces.end(); ++trc) + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) { if ((*trc)->functions->contains(evt->function)) { diff --git a/src/addfunctionsdialog.ui b/src/addfunctionsdialog.ui index 4e0d5e8..95e99b1 100644 --- a/src/addfunctionsdialog.ui +++ b/src/addfunctionsdialog.ui @@ -53,6 +53,11 @@ Start and End Time + + + Time Duration + + @@ -91,7 +96,7 @@ 120 280 - 391 + 301 31 @@ -200,6 +205,19 @@ 10000000000000000000.000000000000000 + + + + 430 + 280 + 89 + 31 + + + + Filter + + From a7449ef2cf2c3d4786fa2b41915da797054cc514 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Fri, 6 Jul 2018 19:48:56 -0400 Subject: [PATCH 10/13] Added UI improvement --- src/addfunctionsdialog.cpp | 28 ++++++++++++++++ src/addfunctionsdialog.ui | 68 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index 93d2e79..66103b7 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -22,6 +22,11 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, ui->filterStart->setVisible(false); ui->filterEndLabel->setVisible(false); ui->filterEnd->setVisible(false); + ui->filterDurationLabel->setVisible(false); + ui->filterDuration->setVisible(false); + ui->filterSec->setVisible(false); + ui->filterMSec->setVisible(false); + ui->filterNSec->setVisible(false); connect(ui->filterOptions, SIGNAL(currentIndexChanged(int)), this, SLOT(switchVisibility(int))); connect(ui->filterButton, SIGNAL(clicked()), this, SLOT(captureInput())); @@ -58,6 +63,11 @@ void AddFunctionsDialog::switchVisibility(int option) ui->filterStart->setVisible(false); ui->filterEndLabel->setVisible(false); ui->filterEnd->setVisible(false); + ui->filterDurationLabel->setVisible(false); + ui->filterDuration->setVisible(false); + ui->filterSec->setVisible(false); + ui->filterMSec->setVisible(false); + ui->filterNSec->setVisible(false); break; case 2: ui->filterStringLabel->setVisible(false); ui->filterString->setVisible(false); @@ -66,6 +76,24 @@ void AddFunctionsDialog::switchVisibility(int option) ui->filterStart->setVisible(true); ui->filterEndLabel->setVisible(true); ui->filterEnd->setVisible(true); + ui->filterDurationLabel->setVisible(false); + ui->filterDuration->setVisible(false); + ui->filterSec->setVisible(false); + ui->filterMSec->setVisible(false); + ui->filterNSec->setVisible(false); + break; + case 3: ui->filterStringLabel->setVisible(false); + ui->filterString->setVisible(false); + ui->filterButton->setVisible(true); + ui->filterStartLabel->setVisible(false); + ui->filterStart->setVisible(false); + ui->filterEndLabel->setVisible(false); + ui->filterEnd->setVisible(false); + ui->filterDurationLabel->setVisible(true); + ui->filterDuration->setVisible(true); + ui->filterSec->setVisible(true); + ui->filterMSec->setVisible(true); + ui->filterNSec->setVisible(true); break; } } diff --git a/src/addfunctionsdialog.ui b/src/addfunctionsdialog.ui index 95e99b1..f6d0f7a 100644 --- a/src/addfunctionsdialog.ui +++ b/src/addfunctionsdialog.ui @@ -218,6 +218,74 @@ Filter + + + + 20 + 280 + 81 + 31 + + + + Duration + + + + + + 100 + 280 + 161 + 31 + + + + 0 + + + 10000000000000000000.000000000000000 + + + + + + 270 + 280 + 50 + 31 + + + + s + + + + + + 320 + 280 + 50 + 31 + + + + ms + + + + + + 370 + 280 + 50 + 31 + + + + ns + + From 5692d053fda63af0c61913687c7c0c704ad45bd6 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Sat, 7 Jul 2018 16:02:30 -0400 Subject: [PATCH 11/13] Fixed duration filter bug --- src/addfunctionsdialog.cpp | 65 +++++++++++++++++++++++++++++++++++--- src/addfunctionsdialog.h | 5 +++ src/addfunctionsdialog.ui | 18 +++++++++++ 3 files changed, 83 insertions(+), 5 deletions(-) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index 66103b7..dc80259 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -9,6 +9,8 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, traces(_traces), start(0), end(0), + duration(0), + option(0), allClicked(false), matchingFunctions(QMap()), matchingEvents(QList()), @@ -28,12 +30,18 @@ AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, ui->filterMSec->setVisible(false); ui->filterNSec->setVisible(false); + ui->filterRadioGroup->setId(ui->filterSec, 0); + ui->filterRadioGroup->setId(ui->filterMSec, 1); + ui->filterRadioGroup->setId(ui->filterNSec, 2); + connect(ui->filterOptions, SIGNAL(currentIndexChanged(int)), this, SLOT(switchVisibility(int))); connect(ui->filterButton, SIGNAL(clicked()), this, SLOT(captureInput())); connect(ui->selectAllFunctions, SIGNAL(clicked(bool)), this, SLOT(selectAll(bool))); connect(ui->filterTable, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(addToSelectedEvents(QTableWidgetItem*))); connect(ui->filterStart, SIGNAL(valueChanged(double)), this, SLOT(captureStartTime(double))); connect(ui->filterEnd, SIGNAL(valueChanged(double)), this, SLOT(captureEndTime(double))); + connect(ui->filterDuration, SIGNAL(valueChanged(double)), this, SLOT(captureDuration(double))); + connect(ui->filterRadioGroup, SIGNAL(buttonClicked(int)), this, SLOT(captureOption(int))); } AddFunctionsDialog::~AddFunctionsDialog() @@ -100,11 +108,19 @@ void AddFunctionsDialog::switchVisibility(int option) void AddFunctionsDialog::captureInput() { - QString filterString = ui->filterString->toPlainText(); - this->matchingEvents.clear(); - this->matchingFunctions.clear(); - ui->filterTable->clear(); - filterByString(filterString); + if (ui->filterOptions->currentIndex() == 0 || ui->filterOptions->currentIndex() == 1) + { + QString filterString = ui->filterString->toPlainText(); + this->matchingEvents.clear(); + this->matchingFunctions.clear(); + ui->filterTable->clear(); + filterByString(filterString); + } + else if (ui->filterOptions->currentIndex() == 3) + { + if (duration > 0) + filterByDuration(duration, option); + } } void AddFunctionsDialog::captureStartTime(double time) @@ -131,6 +147,19 @@ void AddFunctionsDialog::captureEndTime(double time) } } +void AddFunctionsDialog::captureDuration(double time) +{ + if (ui->filterOptions->currentIndex() == 3) + { + duration = time; + } +} + +void AddFunctionsDialog::captureOption(int id) +{ + option = id; +} + void AddFunctionsDialog::selectAll(bool checked) { if (checked) @@ -260,6 +289,32 @@ void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long lo } } +void AddFunctionsDialog::filterByDuration(unsigned long long duration, int option) +{ + if (!this->traces.empty()) + { + for (QList::Iterator trc = this->traces.begin(); + trc != this->traces.end(); ++trc) + { + for (QVector *>::Iterator eitr = (*trc)->events->begin(); + eitr != (*trc)->events->end(); ++eitr) + { + for (QVector::Iterator itr = (*eitr)->begin(); + itr != (*eitr)->end(); ++itr) + { + if ( abs((*itr)->enter - (*itr)->exit) >= duration) + { + if (!this->matchingEvents.contains(*itr)) { + this->matchingEvents.append(*itr); + } + } + } + } + } + populateTable(); + } +} + void AddFunctionsDialog::populateTable() { ui->filterTable->setRowCount(this->matchingEvents.size()); diff --git a/src/addfunctionsdialog.h b/src/addfunctionsdialog.h index a60a3d7..48a26af 100644 --- a/src/addfunctionsdialog.h +++ b/src/addfunctionsdialog.h @@ -32,12 +32,16 @@ public slots: void addToSelectedEvents(QTableWidgetItem *); void captureStartTime(double); void captureEndTime(double); + void captureDuration(double); + void captureOption(int); private: Ui::AddFunctionsDialog *ui; QList traces; unsigned long long start; unsigned long long end; + unsigned long long duration; + int option; QMap matchingFunctions; QList matchingEvents; QSet selectedEvents; @@ -47,6 +51,7 @@ public slots: void getMatches(QString string); void filterByString(QString name); void filterByTime(unsigned long long start, unsigned long long end); + void filterByDuration(unsigned long long duration, int option); void populateTable(); }; diff --git a/src/addfunctionsdialog.ui b/src/addfunctionsdialog.ui index f6d0f7a..c682b1e 100644 --- a/src/addfunctionsdialog.ui +++ b/src/addfunctionsdialog.ui @@ -259,6 +259,12 @@ s + + false + + + filterRadioGroup + @@ -272,6 +278,9 @@ ms + + filterRadioGroup + @@ -285,6 +294,12 @@ ns + + true + + + filterRadioGroup + @@ -322,4 +337,7 @@ + + + From 647224b26cfe166200fbb24810328da27f850e35 Mon Sep 17 00:00:00 2001 From: viraj96 Date: Sat, 7 Jul 2018 16:32:26 -0400 Subject: [PATCH 12/13] Added time units change functionality for duration filter --- src/addfunctionsdialog.cpp | 52 +++++++++++++++++++++++++++++++++++++- src/addfunctionsdialog.h | 1 + 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/addfunctionsdialog.cpp b/src/addfunctionsdialog.cpp index dc80259..34557d4 100644 --- a/src/addfunctionsdialog.cpp +++ b/src/addfunctionsdialog.cpp @@ -3,6 +3,7 @@ #include "trace.h" #include "function.h" #include "event.h" +#include "ravelutils.h" AddFunctionsDialog::AddFunctionsDialog(QWidget *parent, QList _traces, QSet _filterEvents) : QDialog(parent), @@ -289,8 +290,51 @@ void AddFunctionsDialog::filterByTime(unsigned long long start, unsigned long lo } } +double AddFunctionsDialog::decideFactor(QString units, QString option_units) // Might need to add other possibilities as mentioned in getUnits function +{ + if (!QString::compare(units, "s", Qt::CaseInsensitive)) + { + if (!QString::compare(option_units, "ns", Qt::CaseInsensitive)) + return 1e+9; + else if (!QString::compare(option_units, "ms", Qt::CaseInsensitive)) + return 1000; + } + else if (!QString::compare(units, "ms", Qt::CaseInsensitive)) + { + if (!QString::compare(option_units, "s", Qt::CaseInsensitive)) + return 0.001; + else if (!QString::compare(option_units, "ns", Qt::CaseInsensitive)) + return 1e+6; + } + else if (!QString::compare(units, "ns", Qt::CaseInsensitive)) + { + if (!QString::compare(option_units, "s", Qt::CaseInsensitive)) + return 1e-9; + else if (!QString::compare(option_units, "ms", Qt::CaseInsensitive)) + return 1e-6; + } + +} + void AddFunctionsDialog::filterByDuration(unsigned long long duration, int option) { + QString units = RavelUtils::RavelUtils::getUnits(this->traces[0]->units); // Is this correct? + QString option_units; + bool change = false; + switch (option) { + case 0: + option_units = "s"; + break; + case 1: + option_units = "ms"; + break; + case 2: + option_units = "ns"; + break; + } + if (QString::compare(units, option_units, Qt::CaseInsensitive)) + change = true; + if (!this->traces.empty()) { for (QList::Iterator trc = this->traces.begin(); @@ -302,7 +346,13 @@ void AddFunctionsDialog::filterByDuration(unsigned long long duration, int optio for (QVector::Iterator itr = (*eitr)->begin(); itr != (*eitr)->end(); ++itr) { - if ( abs((*itr)->enter - (*itr)->exit) >= duration) + unsigned long long time = abs((*itr)->exit - (*itr)->enter); + if (change) + { + double factor = decideFactor(units, option_units); + time *= factor; + } + if ( time >= duration) { if (!this->matchingEvents.contains(*itr)) { this->matchingEvents.append(*itr); diff --git a/src/addfunctionsdialog.h b/src/addfunctionsdialog.h index 48a26af..810a02d 100644 --- a/src/addfunctionsdialog.h +++ b/src/addfunctionsdialog.h @@ -53,6 +53,7 @@ public slots: void filterByTime(unsigned long long start, unsigned long long end); void filterByDuration(unsigned long long duration, int option); void populateTable(); + double decideFactor(QString, QString); }; #endif // ADDFUNCTIONSDIALOG_H From c59c117eb24e1307cc356e563cc7915c7de3bfba Mon Sep 17 00:00:00 2001 From: viraj96 Date: Sat, 7 Jul 2018 19:54:58 -0400 Subject: [PATCH 13/13] Fixed building issue after rebasing --- src/Ravel.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ravel.pro b/src/Ravel.pro index 46720a0..c301235 100644 --- a/src/Ravel.pro +++ b/src/Ravel.pro @@ -109,7 +109,7 @@ FORMS += \ mainwindow.ui \ visoptionsdialog.ui \ metricrangedialog.ui \ - taskpropertywindow.ui + taskpropertywindow.ui \ filterdialog.ui \ addfunctionsdialog.ui