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
QRect contentsRect() const const
void setContentsMargins(int left, int top, int right, int bottom)