Increase selectable area of phases with zero span.

This commit is contained in:
Lukas Steiner
2021-01-15 11:13:11 +01:00
parent abe8ef38b8
commit 679d70fa65
3 changed files with 37 additions and 30 deletions

View File

@@ -99,19 +99,22 @@ void Phase::drawPhaseSymbol(traceTime begin, traceTime end, double y,
double yVal = yMap.transform(y);
double symbolHeight = yMap.transform(0) - yMap.transform(hexagonHeight);
// Increase display size of phases with zero span
traceTime offset = (begin == end) ? static_cast<traceTime>(0.05 * clk) : 0;
if (symbol == PhaseSymbol::Hexagon) {
QPoint hexFrom(xMap.transform(begin), yVal);
QPoint hexTo(xMap.transform(end), yVal);
QPoint hexFrom(static_cast<int>(xMap.transform(begin)), static_cast<int>(yVal));
QPoint hexTo(static_cast<int>(xMap.transform(end + offset)), static_cast<int>(yVal));
drawHexagon(painter, hexFrom, hexTo, symbolHeight);
} else {
QPoint upperLeft(xMap.transform(begin), yVal - symbolHeight / 2);
QPoint bottomRight(xMap.transform(end), yVal + symbolHeight / 2);
QPoint upperLeft(static_cast<int>(xMap.transform(begin)), static_cast<int>(yVal - symbolHeight / 2));
QPoint bottomRight(static_cast<int>(xMap.transform(end)), static_cast<int>(yVal + symbolHeight / 2));
painter->drawRect(QRect(upperLeft, bottomRight));
}
if (drawtext)
drawText(painter, Name(), QPoint(xMap.transform(begin),
yVal + symbolHeight / 2), TextPositioning::bottomRight);
drawText(painter, Name(), QPoint(static_cast<int>(xMap.transform(begin)),
static_cast<int>(yVal + symbolHeight / 2)), TextPositioning::bottomRight);
}
QColor Phase::getColor(const TraceDrawingProperties &drawingProperties) const
@@ -149,7 +152,10 @@ Qt::BrushStyle Phase::getBrushStyle() const
bool Phase::isSelected(traceTime time, double yVal,
const TraceDrawingProperties &drawingProperties) const
{
if (span.contains(time))
// Increase selectable area of phases with zero span
traceTime offset = (span.Begin() == span.End()) ? static_cast<traceTime>(0.05 * clk) : 0;
if (span.Begin() <= time && time <= (span.End() + offset))
{
if (getGranularity() == Granularity::Bankwise)
{

View File

@@ -53,10 +53,10 @@ class Transaction;
class Phase
{
public:
Phase(ID id, Timespan span, const std::shared_ptr<Transaction> &transaction,
Phase(ID id, Timespan span, traceTime clk, const std::shared_ptr<Transaction> &transaction,
std::vector<Timespan> spansOnCommandBus,
std::shared_ptr<Timespan> spanOnDataBus):
id(id), span(span), transaction(transaction),
id(id), span(span), clk(clk), transaction(transaction),
spansOnCommandBus(spansOnCommandBus), spanOnDataBus(spanOnDataBus),
hexagonHeight(0.6), captionPosition(TextPositioning::bottomRight) {}
@@ -78,6 +78,7 @@ public:
protected:
ID id;
Timespan span;
traceTime clk;
std::shared_ptr<Transaction> transaction;
std::vector<Timespan> spansOnCommandBus;
std::shared_ptr<Timespan> spanOnDataBus;

View File

@@ -51,66 +51,66 @@ shared_ptr<Phase> PhaseFactory::CreatePhase(ID id, const QString &dbPhaseName,
const CommandLengths &cl = database.getCommandLengths();
if (dbPhaseName == "REQ")
return shared_ptr<Phase>(new REQ(id, span, trans, {}, std::shared_ptr<Timespan>()));
return shared_ptr<Phase>(new REQ(id, span, clk, trans, {}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RESP")
return shared_ptr<Phase>(new RESP(id, span, trans, {}, std::shared_ptr<Timespan>()));
return shared_ptr<Phase>(new RESP(id, span, clk, trans, {}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PREB")
return shared_ptr<Phase>(new PREB(id, span, trans,
return shared_ptr<Phase>(new PREB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PRE")
return shared_ptr<Phase>(new PRE(id, span, trans,
return shared_ptr<Phase>(new PRE(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PRE)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "ACTB")
return shared_ptr<Phase>(new ACTB(id, span, trans,
return shared_ptr<Phase>(new ACTB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "ACT")
return shared_ptr<Phase>(new ACT(id, span, trans,
return shared_ptr<Phase>(new ACT(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.ACT)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PREA")
return shared_ptr<Phase>(new PREA(id, span, trans,
return shared_ptr<Phase>(new PREA(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PREA)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFA")
return shared_ptr<Phase>(new REFA(id, span, trans,
return shared_ptr<Phase>(new REFA(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFA)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFB")
return shared_ptr<Phase>(new REFB(id, span, trans,
return shared_ptr<Phase>(new REFB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PRESB")
return shared_ptr<Phase>(new PRESB(id, span, trans,
return shared_ptr<Phase>(new PRESB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.PRESB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "REFSB")
return shared_ptr<Phase>(new REFSB(id, span, trans,
return shared_ptr<Phase>(new REFSB(id, span, clk, trans,
{Timespan(span.Begin(), span.Begin() + clk * cl.REFSB)}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "RD")
return shared_ptr<Phase>(new RD(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)},
return shared_ptr<Phase>(new RD(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RD)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "RDA")
return shared_ptr<Phase>(new RDA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)},
return shared_ptr<Phase>(new RDA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.RDA)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "WR")
return shared_ptr<Phase>(new WR(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)},
return shared_ptr<Phase>(new WR(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WR)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "WRA")
return shared_ptr<Phase>(new WRA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)},
return shared_ptr<Phase>(new WRA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.WRA)},
std::shared_ptr<Timespan>(new Timespan(trans->spanOnDataStrobe))));
else if (dbPhaseName == "PDNA")
return shared_ptr<Phase>(new PDNA(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA),
return shared_ptr<Phase>(new PDNA(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEA),
Timespan(span.End() - clk * cl.PDXA, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PDNAB")
return shared_ptr<Phase>(new PDNAB(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk),
return shared_ptr<Phase>(new PDNAB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
Timespan(span.End() - clk, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PDNP")
return shared_ptr<Phase>(new PDNP(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEP),
return shared_ptr<Phase>(new PDNP(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.PDEP),
Timespan(span.End() - clk * cl.PDXP, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "PDNPB")
return shared_ptr<Phase>(new PDNPB(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk),
return shared_ptr<Phase>(new PDNPB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
Timespan(span.End() - clk, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "SREF")
return shared_ptr<Phase>(new SREF(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.SREFEN),
return shared_ptr<Phase>(new SREF(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk * cl.SREFEN),
Timespan(span.End() - clk * cl.SREFEX, span.End())}, std::shared_ptr<Timespan>()));
else if (dbPhaseName == "SREFB")
return shared_ptr<Phase>(new SREFB(id, span, trans, {Timespan(span.Begin(), span.Begin() + clk),
return shared_ptr<Phase>(new SREFB(id, span, clk, trans, {Timespan(span.Begin(), span.Begin() + clk),
Timespan(span.End() - clk, span.End())}, std::shared_ptr<Timespan>()));
else
throw std::runtime_error("DB phasename " + dbPhaseName.toStdString() + " unkown to phasefactory");