HAL
v4.5.0-83-g30c8f0afc
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
wave_timescale.cpp
Go to the documentation of this file.
1
#include "
waveform_viewer/wave_timescale.h
"
2
#include "
waveform_viewer/wave_transform.h
"
3
#include "
waveform_viewer/wave_scrollbar.h
"
4
#include <QPainter>
5
#include <math.h>
6
#include <QPaintEvent>
7
8
namespace
hal
{
9
10
WaveTimescale::WaveTimescale
(
const
WaveTransform
*trans,
const
WaveScrollbar
*scroll,
QWidget
*parent)
11
:
QWidget
(parent), mTransform(trans), mScrollbar(scroll)
12
{
13
setFixedHeight
(28);
14
setAttribute
(
Qt::WA_TransparentForMouseEvents
);
15
setSizePolicy
(
QSizePolicy::Fixed
,
QSizePolicy::Fixed
);
16
move
(0,0);
17
}
18
19
void
WaveTimescale::paintEvent
(
QPaintEvent
*event)
20
{
21
Q_UNUSED(
event
);
22
QPainter
painter(
this
);
23
painter.
setBrush
(
QColor::fromRgb
(0xE0,0xE0,0xE0));
24
painter.
drawRect
(
rect
());
25
26
if
(mTransform->
scale
() <= 0)
return
;
27
WaveLogicTimescale
wlts(mTransform->
scale
());
28
29
// scale
30
for
(quint64 tMinor = ceil(mScrollbar->
tLeftI
() / wlts.
minorInterval
()) * wlts.
minorInterval
();
31
tMinor<=mTransform->tMax(); tMinor += wlts.
minorInterval
())
32
{
33
float
x
= mScrollbar->
xPosF
(tMinor);
34
if
(
x
>
event
->rect().width())
break
;
35
if
(tMinor%wlts.
majorInterval
() == 0)
36
{
37
// major tick
38
painter.
setPen
(
QPen
(
QColor
(
"#707070"
),0));
39
painter.
drawLine
(
QLineF
(
x
,0,
x
,tMinor%wlts.
labelInterval
() == 0 ? 24 : 12));
40
}
41
else
42
{
43
// minor tick
44
painter.
setPen
(
QPen
(
QColor
(
"#a0a0a0"
),0));
45
painter.
drawLine
(
QLineF
(
x
,0,
x
,10));
46
}
47
if
(tMinor%wlts.
labelInterval
() == 0)
48
{
49
// label
50
painter.
setPen
(
QPen
(
Qt::black
,0));
51
painter.
drawText
(
x
+1,24,
QString::number
(tMinor));
52
}
53
}
54
}
55
56
void
WaveTimescale::setScale
(
int
viewportWidth)
57
{
58
if
(viewportWidth > 1)
setFixedWidth
(viewportWidth);
59
move
(0,0);
60
update
();
61
}
62
63
WaveLogicTimescale::WaveLogicTimescale
(
double
scale)
64
{
65
int
z = floor((2.-log(scale) / log(10)) * 3);
66
int
exp = z<3? 1 : z/3;
67
quint64 base = floor(pow(10,exp)+0.5);
68
switch
(z%3)
69
{
70
case
0:
71
mTlabel = z<3 ? base/2 : 2*base;
72
mTmajor = base;
73
mTminor = base/10;
74
break
;
75
case
1:
76
mTlabel = z<3 ? base : 5*base;
77
mTmajor = base;
78
mTminor = base/5;
79
break
;
80
case
2:
81
mTlabel = z<3 ? 2*base : 10*base;
82
mTmajor = 10*base;
83
mTminor = base;
84
break
;
85
}
86
}
87
}
hal::WaveLogicTimescale
Definition:
wave_timescale.h:38
hal::WaveLogicTimescale::WaveLogicTimescale
WaveLogicTimescale(double scale)
Definition:
wave_timescale.cpp:63
hal::WaveLogicTimescale::minorInterval
quint64 minorInterval() const
Definition:
wave_timescale.h:44
hal::WaveLogicTimescale::majorInterval
quint64 majorInterval() const
Definition:
wave_timescale.h:45
hal::WaveLogicTimescale::labelInterval
quint64 labelInterval() const
Definition:
wave_timescale.h:46
hal::WaveScrollbar
Definition:
wave_scrollbar.h:37
hal::WaveScrollbar::tLeftI
quint64 tLeftI() const
Definition:
wave_scrollbar.cpp:129
hal::WaveScrollbar::xPosF
double xPosF(double t) const
Definition:
wave_scrollbar.cpp:102
hal::WaveTimescale::paintEvent
void paintEvent(QPaintEvent *event) override
Definition:
wave_timescale.cpp:19
hal::WaveTimescale::setScale
void setScale(int viewportWidth)
Definition:
wave_timescale.cpp:56
hal::WaveTimescale::WaveTimescale
WaveTimescale(const WaveTransform *trans, const WaveScrollbar *scroll, QWidget *parent=nullptr)
Definition:
wave_timescale.cpp:10
hal::WaveTransform
Definition:
wave_transform.h:37
hal::WaveTransform::scale
double scale() const
Definition:
wave_transform.h:50
hal
Definition:
defines.h:45
QColor
QColor::fromRgb
QColor fromRgb(QRgb rgb)
QLineF
QPainter
QPainter::drawLine
void drawLine(const QLineF &line)
QPainter::drawRect
void drawRect(const QRectF &rectangle)
QPainter::drawText
void drawText(const QPointF &position, const QString &text)
QPainter::setBrush
void setBrush(const QBrush &brush)
QPainter::setPen
void setPen(const QColor &color)
QPaintEvent
QPen
QSizePolicy::Fixed
Fixed
QString::number
QString number(int n, int base)
Qt::black
black
Qt::WA_TransparentForMouseEvents
WA_TransparentForMouseEvents
QWidget
QWidget::event
virtual bool event(QEvent *event) override
QWidget::move
void move(int x, int y)
QWidget::rect
rect
QWidget::setAttribute
void setAttribute(Qt::WidgetAttribute attribute, bool on)
QWidget::setFixedHeight
void setFixedHeight(int h)
QWidget::setFixedWidth
void setFixedWidth(int w)
QWidget::setSizePolicy
void setSizePolicy(QSizePolicy)
QWidget::update
void update()
QWidget::x
x
wave_scrollbar.h
wave_timescale.h
wave_transform.h
plugins
simulator
waveform_viewer
src
wave_timescale.cpp
Generated by
1.9.1