8 #include <QResizeEvent>
10 #include <QWheelEvent>
13 #include <QInputDialog>
14 #include <QApplication>
20 :
QAbstractScrollArea(parent), mWaveDataList(wdlist), mWaveItemHash(wHash), mMoveCursor(false),
21 mCursorTime(100), mCursorXpos(100), mDragZoom(nullptr)
32 mCursor =
new WaveCursor(&mTransform,mScrollbar,
this);
66 mDragZoom->
setStyleSheet(
"background-color: rgba(255,255,255,20);");
76 if (mCursorTime == tCursor && mCursorXpos == xpos)
return;
77 mCursorTime = tCursor;
82 void WaveGraphicsCanvas::handleContextMenuRequested(
const QPoint& pos)
91 act = menu->
addAction(
"Enter cursor time value ...");
93 act = menu->
addAction(
"Copy cursor time value to clipboard");
98 act = menu->
addAction(
"Jump to next transition " + wavename);
100 act = menu->
addAction(
"Jump to previous transition " + wavename);
106 void WaveGraphicsCanvas::handleJumpPreviousTransition()
111 setCursorTimeInternal(tCursor);
114 void WaveGraphicsCanvas::handleJumpNextTransition()
119 setCursorTimeInternal(tCursor);
122 void WaveGraphicsCanvas::handleCopyCursorTime()
127 void WaveGraphicsCanvas::handleEnterCursorTime()
131 if (ok && tCursor != mCursorTime)
132 setCursorTimeInternal(tCursor);
135 void WaveGraphicsCanvas::setCursorTimeInternal(
double tCursor)
137 if (tCursor < mTransform.
tMin()) tCursor = mTransform.
tMin();
138 if (tCursor > mTransform.
tMax()) tCursor = mTransform.
tMax();
140 double vpos = mTransform.
vPos(tCursor);
141 if (vpos + wHalf > mTransform.
vMax()) vpos = mTransform.
vMax() - wHalf;
142 if (vpos - wHalf < mTransform.
vMin()) vpos = mTransform.
vMin() + wHalf;
144 mCursorXpos = mScrollbar->
xPosI(tCursor);
159 int x = evt->
pos().
x();
187 double t0 = mScrollbar->
tPosF(geo.
left());
188 double dt = mScrollbar->
tPosF(geo.
right()) - t0;
235 double oldScale = mTransform.
scale();
236 double newScale = oldScale;
244 if (newScale >= 100)
return;
258 int xpos = mScrollbar->
xPosI(mCursorTime);
278 if (mRenderEngine->
zoomHistory().isEmpty())
return;
295 double dt = mTransform.
deltaT();
297 double newScale = w / dt;
299 if (dt * mTransform.
scale() * 1.0001 < w)
304 else if (mTransform.
scale() <= newScale)
310 if (!wi->isVisibile() || ! wi->mVisibleRange)
continue;
311 if (wi->mPainted.shortestToggle() < shortest) shortest = wi->mPainted.shortestToggle();
315 if (mTransform.
scale() >= newScale)
return;
318 if (vleft + w > mTransform.
vMax()) vleft = mTransform.
vMax() - w;
319 if (vleft < 0) vleft = 0;
void setCursorPosition(const QPoint &pos)
void setCursorToTime(u64 t)
void setViewportHeight(int height)
virtual u64 neighborTransition(double t, bool next) const
void handleWaveUpdated(int iwave, int groupId)
void mouseDoubleClickEvent(QMouseEvent *) override
void resizeEvent(QResizeEvent *) override
void mouseReleaseEvent(QMouseEvent *) override
WaveGraphicsCanvas(WaveDataList *wdlist, WaveItemHash *wHash, QWidget *parent=nullptr)
void handleTimeframeChanged(const hal::WaveDataTimeframe *tframe)
void emitUndoStateChanged()
void wheelEvent(QWheelEvent *) override
void mousePressEvent(QMouseEvent *) override
void mouseMoveEvent(QMouseEvent *) override
void setCursorPosition(double tCursor, int xpos)
void scrollContentsBy(int dx, int dy) override
void cursorMoved(double tCursor, int xpos)
WaveItem * firstSelected() const
const WaveData * wavedata() const
void setWaveData(WaveData *wd)
QList< WaveZoomShift > & zoomHistory()
void setScale(int viewportWidth)
virtual void scrollContentsBy(int dx, int dy)
void triggered(bool checked)
void setText(const QString &text, QClipboard::Mode mode)
const T value(const Key &key) const const
QList< T > values() const const
const T & at(int i) const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool contains(const QRect &rectangle, bool proper) const const
QPoint topLeft() const const
QString number(int n, int base)
QPoint angleDelta() const const
QPointF position() const const
QRect contentsRect() const const
void setContentsMargins(int left, int top, int right, int bottom)