Fix select next transacion and use current time instead of ID

Select next activate, precharge and refresh now works every time and
uses the current time instead of the ID to search for the next phase.
Also add a new entry "Select next command" that selects the very first
phase after the current positon.
This commit is contained in:
2021-08-27 13:55:51 +02:00
parent b0c5ec3b9e
commit b9fa5813bc
6 changed files with 70 additions and 41 deletions

View File

@@ -149,26 +149,28 @@ shared_ptr<Transaction> TraceDB::getTransactionByID(ID id)
}
shared_ptr<Transaction> TraceDB::getNextActivate(ID currentTransactionId)
shared_ptr<Transaction> TraceDB::getNextActivate(traceTime time)
{
QSqlQuery query(database);
QString queryText = queryTexts.queryHead +
"WHERE TransactionID > :currentID AND PhaseName = 'ACT' LIMIT 1";
"WHERE PhaseBegin > :traceTime AND PhaseName "
"IN ('ACT','ACTB') ORDER BY PhaseBegin ASC LIMIT 1";
query.prepare(queryText);
query.bindValue(":currentID", currentTransactionId);
query.bindValue(":traceTime", time);
executeQuery(query);
return parseTransactionFromQuery(query);
}
shared_ptr<Transaction> TraceDB::getNextPrecharge(ID currentTransactionId)
shared_ptr<Transaction> TraceDB::getNextPrecharge(traceTime time)
{
QSqlQuery query(database);
QString queryText = queryTexts.queryHead +
"WHERE TransactionID > :currentID AND PhaseName IN ('PRE','PREA') LIMIT 1";
"WHERE PhaseBegin > :traceTime AND PhaseName "
"IN ('PRE','PREA','PREB','PRESB') ORDER BY PhaseBegin ASC LIMIT 1";
query.prepare(queryText);
query.bindValue(":currentID", currentTransactionId);
query.bindValue(":traceTime", time);
executeQuery(query);
return parseTransactionFromQuery(query);
}
@@ -197,13 +199,25 @@ shared_ptr<Transaction> TraceDB::getNextPrecharge(ID currentTransactionId)
// return parseTransactionFromQuery(query);
// }
shared_ptr<Transaction> TraceDB::getNextRefresh(ID currentTransactionId)
shared_ptr<Transaction> TraceDB::getNextRefresh(traceTime time)
{
QSqlQuery query(database);
QString queryText = queryTexts.queryHead +
"WHERE TransactionID > :currentID AND PhaseName IN ('REFA') LIMIT 1";
"WHERE PhaseBegin > :traceTime AND PhaseName "
"IN ('REFA','REFB','REFSB','SREF','SREFB') ORDER BY PhaseBegin ASC LIMIT 1";
query.prepare(queryText);
query.bindValue(":currentID", currentTransactionId);
query.bindValue(":traceTime", time);
executeQuery(query);
return parseTransactionFromQuery(query);
}
std::shared_ptr<Transaction> TraceDB::getNextCommand(traceTime time)
{
QSqlQuery query(database);
QString queryText = queryTexts.queryHead +
"WHERE PhaseBegin > :traceTime ORDER BY PhaseBegin ASC LIMIT 1";
query.prepare(queryText);
query.bindValue(":traceTime", time);
executeQuery(query);
return parseTransactionFromQuery(query);
}

View File

@@ -86,9 +86,10 @@ public:
QString queryText);
std::vector<std::shared_ptr<Transaction>> getTransactionsInTimespan(
const Timespan &span);
std::shared_ptr<Transaction> getNextPrecharge(ID currentTransactionId);
std::shared_ptr<Transaction> getNextActivate(ID currentTransactionId);
std::shared_ptr<Transaction> getNextRefresh(ID currentTransactionId);
std::shared_ptr<Transaction> getNextPrecharge(traceTime time);
std::shared_ptr<Transaction> getNextActivate(traceTime time);
std::shared_ptr<Transaction> getNextRefresh(traceTime time);
std::shared_ptr<Transaction> getNextCommand(traceTime time);
// std::shared_ptr<Transaction> getNextPreb(ID currentTransactionId);
// std::shared_ptr<Transaction> getNextActb(ID currentTransactionId);
// std::shared_ptr<Transaction> getNextRefb(ID currentTransactionId);

View File

@@ -201,46 +201,46 @@ void TraceNavigator::selectLastTransaction()
}
void TraceNavigator::selectNextRefresh()
void TraceNavigator::selectNextRefresh(traceTime time)
{
shared_ptr<Transaction> nextRefresh;
if (!SelectedTransactions().empty())
nextRefresh = traceFile.getNextRefresh(SelectedTransactions().front()->id);
else
nextRefresh = traceFile.getNextRefresh(0);
nextRefresh = traceFile.getNextRefresh(time);
if (nextRefresh)
selectTransaction(nextRefresh);
}
void TraceNavigator::selectNextActivate()
void TraceNavigator::selectNextActivate(traceTime time)
{
shared_ptr<Transaction> nextActivate;
if (!SelectedTransactions().empty())
nextActivate = traceFile.getNextActivate(SelectedTransactions().front()->id);
else
nextActivate = traceFile.getNextActivate(0);
nextActivate = traceFile.getNextActivate(time);
if (nextActivate)
selectTransaction(nextActivate);
}
void TraceNavigator::selectNextPrecharge()
void TraceNavigator::selectNextPrecharge(traceTime time)
{
shared_ptr<Transaction> nextPrecharge;
if (!SelectedTransactions().empty())
nextPrecharge = traceFile.getNextPrecharge(
SelectedTransactions().front()->id);
else
nextPrecharge = traceFile.getNextPrecharge(0);
nextPrecharge = traceFile.getNextPrecharge(time);
if (nextPrecharge)
selectTransaction(nextPrecharge);
}
void TraceNavigator::selectNextCommand(traceTime time)
{
shared_ptr<Transaction> nextCommand;
nextCommand = traceFile.getNextCommand(time);
if (nextCommand)
selectTransaction(nextCommand);
}
// void TraceNavigator::selectNextActb()
// {
// shared_ptr<Transaction> nextActb;

View File

@@ -87,12 +87,13 @@ public:
void selectPreviousTransaction();
void selectLastTransaction();
void selectFirstTransaction();
void selectNextRefresh();
void selectNextActivate();
void selectNextPrecharge();
void selectNextActb();
void selectNextPreb();
void selectNextRefb();
void selectNextRefresh(traceTime time);
void selectNextActivate(traceTime time);
void selectNextPrecharge(traceTime time);
void selectNextCommand(traceTime time);
// void selectNextActb();
// void selectNextPreb();
// void selectNextRefb();
void addSelectedTransactions(const std::vector<std::shared_ptr<Transaction>>
&transactions);

View File

@@ -97,23 +97,25 @@ void TracePlot::setUpActions()
SLOT(on_executeQuery()));
selectNextRefresh = new QAction("Select next refresh", this);
selectNextRefresh->setShortcut(QKeySequence("alt+r"));
addAction(selectNextRefresh);
QObject::connect(selectNextRefresh, SIGNAL(triggered()), this,
SLOT(on_selectNextRefresh()));
selectNextActivate = new QAction("Select next activate", this);
selectNextActivate->setShortcut(QKeySequence("alt+a"));
addAction(selectNextActivate);
QObject::connect(selectNextActivate, SIGNAL(triggered()), this,
SLOT(on_selectNextActivate()));
selectNextPrecharge = new QAction("Select next precharge", this);
selectNextPrecharge->setShortcut(QKeySequence("alt+p"));
addAction(selectNextPrecharge);
QObject::connect(selectNextPrecharge, SIGNAL(triggered()), this,
SLOT(on_selectNextPrecharge()));
selectNextCommand = new QAction("Select next command", this);
addAction(selectNextCommand);
QObject::connect(selectNextCommand, SIGNAL(triggered()), this,
SLOT(on_selectNextCommand()));
// selectNextActb = new QAction("Select next atcb", this);
// selectNextActb->setShortcut(QKeySequence("alt+b"));
// addAction(selectNextActb);
@@ -169,7 +171,7 @@ void TracePlot::setUpContextMenu()
contextMenu->addMenu(goToSubMenu);
QMenu *selectSubMenu = new QMenu("Select", contextMenu);
selectSubMenu->addActions({selectNextRefresh, selectNextActivate, selectNextPrecharge /*, selectNextActb, selectNextPreb, selectNextRefb */});
selectSubMenu->addActions({selectNextRefresh, selectNextActivate, selectNextPrecharge, selectNextCommand /*, selectNextActb, selectNextPreb, selectNextRefb */});
contextMenu->addMenu(selectSubMenu);
contextMenu->addActions({showQueryEditor, insertComment, exportToPdf});
@@ -427,17 +429,26 @@ void TracePlot::on_executeQuery()
void TracePlot::on_selectNextRefresh()
{
navigator->selectNextRefresh();
traceTime time = invTransform(xBottom, contextMenuMouseDown.x());
navigator->selectNextRefresh(time);
}
void TracePlot::on_selectNextActivate()
{
navigator->selectNextActivate();
traceTime time = invTransform(xBottom, contextMenuMouseDown.x());
navigator->selectNextActivate(time);
}
void TracePlot::on_selectNextPrecharge()
{
navigator->selectNextPrecharge();
traceTime time = invTransform(xBottom, contextMenuMouseDown.x());
navigator->selectNextPrecharge(time);
}
void TracePlot::on_selectNextCommand()
{
traceTime time = invTransform(xBottom, contextMenuMouseDown.x());
navigator->selectNextCommand(time);
}
// void TracePlot::on_selectNextActb()

View File

@@ -101,6 +101,7 @@ private Q_SLOTS:
void on_selectNextRefresh();
void on_selectNextActivate();
void on_selectNextPrecharge();
void on_selectNextCommand();
// void on_selectNextActb();
// void on_selectNextPreb();
// void on_selectNextRefb();
@@ -168,6 +169,7 @@ private:
QAction *selectNextRefresh;
QAction *selectNextActivate;
QAction *selectNextPrecharge;
QAction *selectNextCommand;
// QAction *selectNextActb;
// QAction *selectNextPreb;
// QAction *selectNextRefb;