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 @@ + + +