118 lines
3.6 KiB
C++
118 lines
3.6 KiB
C++
#include "phase.h"
|
|
#include "presentation/tracedrawing.h"
|
|
#include "businessObjects/transaction.h"
|
|
#include <cmath>
|
|
|
|
using namespace std;
|
|
|
|
void Phase::draw(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, bool highlight, const TraceDrawingProperties &drawingProperties) const
|
|
{
|
|
Q_UNUSED(canvasRect);
|
|
|
|
QColor color = getColor(drawingProperties);
|
|
painter->setBrush(QBrush(getColor(drawingProperties),getBrushStyle()));
|
|
|
|
if(!drawingProperties.drawBorder)
|
|
{
|
|
painter->setPen(color);
|
|
}
|
|
else
|
|
{
|
|
painter->setPen(Qt::black);
|
|
}
|
|
|
|
if(highlight)
|
|
{
|
|
QPen pen(Qt::red);
|
|
pen.setWidth(3);
|
|
painter->setPen(pen);
|
|
}
|
|
|
|
if(!isBankwise())
|
|
{
|
|
for(unsigned int i=0; i<drawingProperties.numberOfBanks;i++)
|
|
drawPhaseSymbol(span.Begin(), span.End(), i, drawingProperties.drawText,getPhaseSymbol(), painter, xMap, yMap);
|
|
}
|
|
else
|
|
drawPhaseSymbol(span.Begin(), span.End(), getYVal(drawingProperties), drawingProperties.drawText,getPhaseSymbol(), painter, xMap, yMap);
|
|
|
|
for(Timespan span: spansOnCommandBus)
|
|
{
|
|
drawPhaseSymbol(span.Begin(), span.End(), drawingProperties.yValCommandBus,false,PhaseSymbol::Hexagon, painter,xMap,yMap);
|
|
}
|
|
|
|
if(spanOnDataBus)
|
|
{
|
|
drawPhaseSymbol(spanOnDataBus->Begin(), spanOnDataBus->End(),drawingProperties.yValDataBus, false,PhaseSymbol::Hexagon, painter,xMap,yMap);
|
|
}
|
|
}
|
|
|
|
void Phase::drawPhaseSymbol(traceTime begin, traceTime end, double y,bool drawtext,PhaseSymbol symbol, QPainter* painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap) const
|
|
{
|
|
double yVal = yMap.transform(y);
|
|
double symbolHeight = yMap.transform(0)-yMap.transform(hexagonHeigth);
|
|
|
|
if(symbol == PhaseSymbol::Hexagon)
|
|
{
|
|
QPoint hexFrom(xMap.transform(begin),yVal);
|
|
QPoint hexTo(xMap.transform(end),yVal);
|
|
drawHexagon(painter, hexFrom, hexTo, symbolHeight);
|
|
}
|
|
else
|
|
{
|
|
QPoint upperLeft(xMap.transform(begin),yVal-symbolHeight/2);
|
|
QPoint bottomRight(xMap.transform(end),yVal+symbolHeight/2);
|
|
painter->drawRect(QRect(upperLeft,bottomRight));
|
|
}
|
|
|
|
if(drawtext)
|
|
drawText(painter,Name(), QPoint(xMap.transform(begin), yVal + symbolHeight/2), TextPositioning::bottomRight);
|
|
}
|
|
|
|
QColor Phase::getColor(const TraceDrawingProperties &drawingProperties) const
|
|
{
|
|
switch (drawingProperties.colorGrouping) {
|
|
case ColorGrouping::PhaseType:
|
|
return getPhaseColor();
|
|
break;
|
|
case ColorGrouping::Thread:
|
|
return ColorGenerator::getColor(static_cast<unsigned int>(transaction->Thread()));
|
|
break;
|
|
case ColorGrouping::Transaction:
|
|
default:
|
|
return ColorGenerator::getColor(transaction->Id());
|
|
}
|
|
}
|
|
|
|
int Phase::getYVal(const TraceDrawingProperties &drawingProperties) const
|
|
{
|
|
Q_UNUSED(drawingProperties)
|
|
return transaction->Bank();
|
|
}
|
|
|
|
Qt::BrushStyle Phase::getBrushStyle() const
|
|
{
|
|
return Qt::SolidPattern;
|
|
}
|
|
|
|
bool Phase::isSelected(traceTime time, double yVal, const TraceDrawingProperties& drawingproperties) const
|
|
{
|
|
if (span.contains(time) && fabs(yVal-getYVal(drawingproperties))<=hexagonHeigth)
|
|
return true;
|
|
if (spanOnDataBus && spanOnDataBus->contains(time) && fabs(yVal-drawingproperties.yValDataBus)<=hexagonHeigth)
|
|
return true;
|
|
|
|
for(Timespan span: spansOnCommandBus)
|
|
{
|
|
if (span.contains(time) && fabs(yVal-drawingproperties.yValCommandBus)<=hexagonHeigth)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
Phase::PhaseSymbol Phase::getPhaseSymbol() const
|
|
{
|
|
return PhaseSymbol::Hexagon;
|
|
}
|