diff --git a/clients/tde/src/part/logicanalyzer/layout.ui b/clients/tde/src/part/logicanalyzer/layout.ui index 9175fa5..8b10ded 100644 --- a/clients/tde/src/part/logicanalyzer/layout.ui +++ b/clients/tde/src/part/logicanalyzer/layout.ui @@ -63,9 +63,6 @@ 0 - - AutoOneFit - diff --git a/clients/tde/src/part/logicanalyzer/part.cpp b/clients/tde/src/part/logicanalyzer/part.cpp index 2cc62a3..28f2c3f 100644 --- a/clients/tde/src/part/logicanalyzer/part.cpp +++ b/clients/tde/src/part/logicanalyzer/part.cpp @@ -122,6 +122,7 @@ LogicAnalyzerPart::LogicAnalyzerPart( TQWidget *parentWidget, const char *widget m_traceControlWidgetGrid = new TQGridLayout(m_base->traceControlLayoutWidget); m_traceWidget = m_base->traceScrollWidget->traceWidget(); m_base->traceScrollWidget->setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding)); + m_base->traceScrollWidget->setResizePolicy(TQScrollView::AutoOneFit); m_base->traceScrollWidget->setHScrollBarMode(TQScrollView::Auto); m_base->traceScrollWidget->setVScrollBarMode(TQScrollView::Auto); m_traceWidget->showLeftTraceInfoArea(true); diff --git a/clients/tde/src/part/scope/layout.ui b/clients/tde/src/part/scope/layout.ui index ae22434..b81f97b 100644 --- a/clients/tde/src/part/scope/layout.ui +++ b/clients/tde/src/part/scope/layout.ui @@ -63,9 +63,6 @@ 0 - - AutoOneFit - diff --git a/clients/tde/src/part/scope/part.cpp b/clients/tde/src/part/scope/part.cpp index 3277e0a..52851c0 100644 --- a/clients/tde/src/part/scope/part.cpp +++ b/clients/tde/src/part/scope/part.cpp @@ -204,6 +204,7 @@ ScopePart::ScopePart( TQWidget *parentWidget, const char *widgetName, TQObject * m_traceWidget = m_base->traceScrollWidget->traceWidget(); connect(m_traceWidget, SIGNAL(cursorDragged(uint, double)), this, SLOT(cursorLevelChanged(uint, double))); m_base->traceScrollWidget->setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding)); + m_base->traceScrollWidget->setResizePolicy(TQScrollView::AutoOneFit); m_base->traceScrollWidget->setHScrollBarMode(TQScrollView::AlwaysOff); m_base->traceScrollWidget->setVScrollBarMode(TQScrollView::AlwaysOff); m_traceWidget->setNumberOfCursors(5); diff --git a/clients/tde/src/widgets/tracewidget.cpp b/clients/tde/src/widgets/tracewidget.cpp index 04a2a00..b0d2e6e 100644 --- a/clients/tde/src/widgets/tracewidget.cpp +++ b/clients/tde/src/widgets/tracewidget.cpp @@ -378,7 +378,7 @@ TraceData::~TraceData() { // } -void TraceData::drawTrace(TQPainter* p, int graticule_width, int graticule_height) { +void TraceData::drawTrace(TQPainter* p, int graticule_width, int graticule_height, int virtual_width, int virtual_height) { p->save(); p->setPen(color); @@ -387,18 +387,22 @@ void TraceData::drawTrace(TQPainter* p, int graticule_width, int graticule_heigh unsigned int n; unsigned int incr; unsigned int activeSamples; - int x,y,x2,y2; + int x,y,x2,y2,horizoffset; + + // Obtain horizontal scrolling offset + horizoffset = parentWidget->horizScrollOffset(); + // Determine how many samples are actually being displayed if ((leftEdgeIndex < 0) || (rightEdgeIndex < 0)) { for (n=0; n= 0) { leftEdgeIndex = n; } } else { - if (x >= graticule_width) { + if (x >= virtual_width) { rightEdgeIndex = n; break; } @@ -409,22 +413,30 @@ void TraceData::drawTrace(TQPainter* p, int graticule_width, int graticule_heigh } } activeSamples = abs(rightEdgeIndex-leftEdgeIndex); - incr = (activeSamples/graticule_width)+1; + incr = (activeSamples/virtual_width)+1; for (n=leftEdgeIndex; n graticule_width) x = graticule_width; + x = (((positionArray[n]-leftEdge)/(rightEdge-leftEdge))*(virtual_width))-horizoffset; + y = ((((sampleArray[n]+offset)-topEdge)/(bottomEdge-topEdge))*(virtual_height)); + x2 = (((positionArray[n+incr]-leftEdge)/(rightEdge-leftEdge))*(virtual_width))-horizoffset; + y2 = ((((sampleArray[n+incr]+offset)-topEdge)/(bottomEdge-topEdge))*(virtual_height)); + + // Do not draw lines that are placed fully off the screen + if ((x < 0) && (x2 < 0)) continue; + if ((y < 0) && (y2 < 0)) continue; + if ((x > graticule_width) && (x2 > graticule_width)) continue; + if ((y > graticule_height) && (y2 > graticule_height)) continue; + + // Clip lines to screen borders + if (x < (0-horizoffset)) x = (0-horizoffset); + if (x > (virtual_width-horizoffset)) x = (virtual_width-horizoffset); if (y < 0) y = 0; - if (y > graticule_height) y = graticule_height; - if (x2 < 0) x2 = 0; - if (x2 > graticule_width) x2 = graticule_width; + if (y > virtual_height) y = virtual_height; + if (x2 < (0-horizoffset)) x2 = (0-horizoffset); + if (x2 > (virtual_width-horizoffset)) x2 = (virtual_width-horizoffset); if (y2 < 0) y2 = 0; - if (y2 > graticule_height) y2 = graticule_height; + if (y2 > virtual_height) y2 = virtual_height; + // Draw line! p->drawLine(x, y, x2, y2); } @@ -580,7 +592,7 @@ CursorData::~CursorData() { // } -void CursorData::drawCursor(TQPainter* p, int graticule_width, int graticule_height) { +void CursorData::drawCursor(TQPainter* p, int graticule_width, int graticule_height, int virtual_width, int virtual_height, int offset) { if (enabled) { if (highlighted) { p->setPen(highlightColor.dark(parentWidget->m_cursorDarkness)); @@ -590,11 +602,13 @@ void CursorData::drawCursor(TQPainter* p, int graticule_width, int graticule_hei } if (orientation == TQt::Vertical) { - int x = abs(((position)/(100.0))*(graticule_width)); - p->drawLine(x, 0, x, graticule_height); + int x = (abs(((position)/(100.0))*(virtual_width))-offset); + if ((x >= 0) && (x < graticule_width)) { + p->drawLine(x, 0, x, graticule_height); + } } else { - int y = abs(((position)/(100.0))*(graticule_height)); + int y = abs(((position)/(100.0))*(virtual_height)); p->drawLine(0, y, graticule_width, y); } } @@ -606,7 +620,7 @@ void CursorData::movePosOneTick() { increment = 100.0/parentWidget->m_graticuleWidget->height(); } else { - increment = 100.0/parentWidget->m_graticuleWidget->width(); + increment = 100.0/parentWidget->m_graticuleWidget->virtualWidth(); } if (orientation == TQt::Horizontal) { position -= increment; @@ -629,7 +643,7 @@ void CursorData::moveNegOneTick() { increment = 100.0/parentWidget->m_graticuleWidget->height(); } else { - increment = 100.0/parentWidget->m_graticuleWidget->width(); + increment = 100.0/parentWidget->m_graticuleWidget->virtualWidth(); } if (orientation == TQt::Horizontal) { position += increment; @@ -652,7 +666,7 @@ void CursorData::movePosMultiTicks() { increment = 100.0/parentWidget->m_graticuleWidget->height(); } else { - increment = 100.0/parentWidget->m_graticuleWidget->width(); + increment = 100.0/parentWidget->m_graticuleWidget->virtualWidth(); } if (orientation == TQt::Horizontal) { position -= (increment*10.0); @@ -675,7 +689,7 @@ void CursorData::moveNegMultiTicks() { increment = 100.0/parentWidget->m_graticuleWidget->height(); } else { - increment = 100.0/parentWidget->m_graticuleWidget->width(); + increment = 100.0/parentWidget->m_graticuleWidget->virtualWidth(); } if (orientation == TQt::Horizontal) { position += (increment*10.0); @@ -715,6 +729,8 @@ bool CursorData::eventFilter(TQObject *o, TQEvent *e) { GraticuleWidget::GraticuleWidget(TraceWidget* parent, const char* name) : TQWidget(parent, name), m_base(parent), m_graticulePixmap(0), + m_prevWidgetWidth(-1), + m_virtualWidth(0), m_leftMouseDown(false), m_middleMouseDown(false), m_closestCursor(-1), @@ -737,8 +753,41 @@ TQSizePolicy GraticuleWidget::sizePolicy() const { return TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding, true, true); } +int GraticuleWidget::virtualWidth() { + int widgetWidth = width(); + if (widgetWidth != m_prevWidgetWidth) { + m_virtualWidth = widgetWidth; + int minimumHorizWidth = m_base->m_horizDivs * m_base->m_minimumPixelsPerHorizDiv; + if (m_virtualWidth < minimumHorizWidth) { + m_virtualWidth = minimumHorizWidth; + } + + if (m_base->m_horizScrollBar) { + int offScreenPixels = m_virtualWidth - widgetWidth; + if (offScreenPixels > 0) { + m_base->m_horizScrollBar->setMinValue(0); + m_base->m_horizScrollBar->setMaxValue(offScreenPixels); + m_base->m_horizScrollBar->show(); + } + else { + m_base->m_horizScrollBar->hide(); + m_base->m_horizScrollBar->setMinValue(0); + m_base->m_horizScrollBar->setMaxValue(0); + } + } + } + + return m_virtualWidth; +} + +void GraticuleWidget::horizScrollValueChanged(int) { + updateGraticule(); + repaint(false); +} + void GraticuleWidget::updateGraticule() { unsigned int d,s,x,y; + int rx; if (m_graticulePixmap) { delete m_graticulePixmap; @@ -754,7 +803,10 @@ void GraticuleWidget::updateGraticule() { s = m_graticulePixmap->width() / m_base->m_horizDivs; x = 0; for (d=0; dm_horizDivs; d++) { - p.drawLine(x, 0, x, m_graticulePixmap->height()); + rx = x - m_base->horizScrollOffset(); + if ((rx >= 0) && (rx < m_graticulePixmap->width())) { + p.drawLine(rx, 0, rx, m_graticulePixmap->height()); + } x += s; } } @@ -773,7 +825,7 @@ void GraticuleWidget::updateGraticule() { TQRectF zoomBox = m_base->zoomBox(); if (!zoomBox.isNull()) { // Translate zoombox coordinates to local drawing coordinates - TQRect drawingRect(abs(((zoomBox.x())/(100.0))*(width())), abs(((zoomBox.y())/(100.0))*(height())), abs(((zoomBox.width())/(100.0))*(width())), abs(((zoomBox.height())/(100.0))*(height()))); + TQRect drawingRect(abs(((zoomBox.x())/(100.0))*(virtualWidth()))-m_base->horizScrollOffset(), abs(((zoomBox.y())/(100.0))*(height())), abs(((zoomBox.width())/(100.0))*(virtualWidth())), abs(((zoomBox.height())/(100.0))*(height()))); p.fillRect(drawingRect, TQBrush(foregroundColor().dark(m_base->m_zoomBoxDarkness), TQt::BDiagPattern)); } @@ -791,18 +843,19 @@ void GraticuleWidget::paintEvent(TQPaintEvent*) { // Draw the traces for (uint trace=0;tracem_traceArray.count();trace++) { - m_base->m_traceArray[trace]->drawTrace(&p, m_graticulePixmap->width(), m_graticulePixmap->height()); + m_base->m_traceArray[trace]->drawTrace(&p, m_graticulePixmap->width(), m_graticulePixmap->height(), virtualWidth(), m_graticulePixmap->height()); } // Draw the cursors for (uint cursor=0;cursorm_cursorArray.count();cursor++) { - m_base->m_cursorArray[cursor]->drawCursor(&p, m_graticulePixmap->width(), m_graticulePixmap->height()); + m_base->m_cursorArray[cursor]->drawCursor(&p, m_graticulePixmap->width(), m_graticulePixmap->height(), virtualWidth(), m_graticulePixmap->height(), ((m_base->m_cursorArray[cursor]->orientation == TQt::Vertical)?m_base->horizScrollOffset():0)); } } else { - p.fillRect(x(), y(), width(), height(), backgroundColor()); + p.fillRect(x(), y(), virtualWidth(), height(), backgroundColor()); } p.end(); + // Paint to window bitBlt(this, 0, 0, &updatePixmap, 0, 0, updatePixmap.width(), updatePixmap.height(), TQt::CopyROP); } @@ -844,7 +897,7 @@ void GraticuleWidget::mouseReleaseEvent(TQMouseEvent *e) { if (m_movingCursor >= 0) { TQPoint diff = e->pos() - m_prevDownPos; - double dx = diff.x()*(100.0/width()); + double dx = diff.x()*(100.0/virtualWidth()); double dy = diff.y()*(100.0/height()); if (m_base->m_cursorArray[m_movingCursor]->orientation == TQt::Horizontal) { m_base->m_cursorArray[m_movingCursor]->position = m_prevCursorPos+dy; @@ -870,10 +923,10 @@ void GraticuleWidget::mouseReleaseEvent(TQMouseEvent *e) { double y2 = e->y(); double pixelDiffX = fabs(x1-x2); double pixelDiffY = fabs(y1-y2); - if ((x1 < width()) && (y1 < height()) && (x2 < width()) && (y2 < height()) && (x1 > 0) && (y1 > 0) && (x2 > 0) && (y2 > 0) && (pixelDiffX>0) && (pixelDiffY>0)) { - x1 = ((x1/width())*100.0); + if ((x1 < virtualWidth()) && (y1 < height()) && (x2 < virtualWidth()) && (y2 < height()) && (x1 > 0) && (y1 > 0) && (x2 > 0) && (y2 > 0) && (pixelDiffX>0) && (pixelDiffY>0)) { + x1 = ((x1/virtualWidth())*100.0); y1 = ((y1/height())*100.0); - x2 = ((x2/width())*100.0); + x2 = ((x2/virtualWidth())*100.0); y2 = ((y2/height())*100.0); m_base->setZoomCursorBox(TQRectF(x1, y1, x2, y2)); } @@ -888,13 +941,13 @@ void GraticuleWidget::mouseReleaseEvent(TQMouseEvent *e) { if (e->button() == TQt::MidButton) { m_middleMouseDown = false; - double x1 = m_prevDownPos.x(); + double x1 = m_prevDownPos.x()+m_base->horizScrollOffset(); double y1 = m_prevDownPos.y(); - double x2 = e->x(); + double x2 = e->x()+m_base->horizScrollOffset(); double y2 = e->y(); - if ((x1 < width()) && (y1 < height()) && (x2 < width()) && (y2 < height()) && (x1 > 0) && (y1 > 0) && (x2 > 0) && (y2 > 0)) { + if ((x1 < virtualWidth()) && (y1 < height()) && (x2 < virtualWidth()) && (y2 < height()) && (x1 > 0) && (y1 > 0) && (x2 > 0) && (y2 > 0)) { TQPoint diff = e->pos() - m_prevDownPos; - double dx = diff.x()*(100.0/width()); + double dx = diff.x()*(100.0/virtualWidth()); double dy = diff.y()*(100.0/height()); m_base->setZoomCursorBox(TQRectF(m_prevCursorRect.x()+dx, m_prevCursorRect.y()+dy, m_prevCursorRect.width()+dx, m_prevCursorRect.height()+dy)); } @@ -923,7 +976,7 @@ void GraticuleWidget::mouseMoveEvent(TQMouseEvent *e) { if ((!m_leftMouseDown) && (!m_middleMouseDown) && (m_movingCursor < 0)) { for (uint cursor=0;cursorm_cursorArray.count();cursor++) { double scaledYPos = (e->y()*100.0)/height(); - double scaledXPos = (e->x()*100.0)/width(); + double scaledXPos = ((e->x()+m_base->horizScrollOffset())*100.0)/virtualWidth(); unsigned int pixelDistance; if (m_base->m_cursorArray[cursor]->orientation == TQt::Horizontal) { pixelDistance = (fabs(m_base->m_cursorArray[cursor]->position - scaledYPos)*height())/100.0; @@ -933,7 +986,7 @@ void GraticuleWidget::mouseMoveEvent(TQMouseEvent *e) { } } else { - pixelDistance = (fabs(m_base->m_cursorArray[cursor]->position - scaledXPos)*width())/100.0; + pixelDistance = (fabs(m_base->m_cursorArray[cursor]->position - scaledXPos)*virtualWidth())/100.0; if (pixelDistance < m_closestCursorDistance) { m_closestCursorDistance = pixelDistance; m_closestCursor = cursor; @@ -973,11 +1026,11 @@ void GraticuleWidget::mouseMoveEvent(TQMouseEvent *e) { } // Print current cursor location for all traces - if ((e->x() < width()) && (e->y() < height())) { + if ((e->x() < virtualWidth()) && (e->y() < height())) { for (uint trace=0;tracem_traceArray.count();trace++) { // Calculate location double scaledYPos = (e->y()*100.0)/height(); - double scaledXPos = (e->x()*100.0)/width(); + double scaledXPos = (e->x()*100.0)/virtualWidth(); double horizontal_range = (m_base->m_traceArray[trace]->rightEdge-m_base->m_traceArray[trace]->leftEdge); double vertical_range = (m_base->m_traceArray[trace]->bottomEdge-m_base->m_traceArray[trace]->topEdge); double realCursorYPosition = (m_base->m_traceArray[trace]->topEdge+((scaledYPos/100.0)*vertical_range)-m_base->m_traceArray[trace]->offset); @@ -1002,17 +1055,17 @@ void GraticuleWidget::mouseMoveEvent(TQMouseEvent *e) { double y1 = m_prevDownPos.y(); double x2 = e->x(); double y2 = e->y(); - if ((x1 < width()) && (y1 < height()) && (x2 < width()) && (y2 < height()) && (x1 > 0) && (y1 > 0) && (x2 > 0) && (y2 > 0)) { - x1 = ((x1/width())*100.0); + if ((x1 < virtualWidth()) && (y1 < height()) && (x2 < virtualWidth()) && (y2 < height()) && (x1 > 0) && (y1 > 0) && (x2 > 0) && (y2 > 0)) { + x1 = ((x1/virtualWidth())*100.0); y1 = ((y1/height())*100.0); - x2 = ((x2/width())*100.0); + x2 = ((x2/virtualWidth())*100.0); y2 = ((y2/height())*100.0); m_base->setZoomCursorBox(TQRectF(x1, y1, x2, y2)); } } else if ((m_leftMouseDown) && (m_movingCursor >= 0)) { TQPoint diff = e->pos() - m_prevDownPos; - double dx = diff.x()*(100.0/width()); + double dx = diff.x()*(100.0/virtualWidth()); double dy = diff.y()*(100.0/height()); if (m_base->m_cursorArray[m_movingCursor]->orientation == TQt::Horizontal) { m_base->m_cursorArray[m_movingCursor]->position = m_prevCursorPos+dy; @@ -1033,7 +1086,7 @@ void GraticuleWidget::mouseMoveEvent(TQMouseEvent *e) { } else if (m_middleMouseDown) { TQPoint diff = e->pos() - m_prevDownPos; - double dx = diff.x()*(100.0/width()); + double dx = diff.x()*(100.0/virtualWidth()); double dy = diff.y()*(100.0/height()); m_base->setZoomCursorBox(TQRectF(m_prevCursorRect.x()+dx, m_prevCursorRect.y()+dy, m_prevCursorRect.width()+dx, m_prevCursorRect.height()+dy)); } @@ -1063,6 +1116,7 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent, m_zoomBoxDarkness(ZOOM_SHADING_DARKNESS_FACTOR), m_zoomCursorStartIndex(0), m_zoomBoxEnabled(false), + m_horizScrollBar(0), m_useAbsoluteHorizontalRange(true), m_showLeftTraceInfoArea(false), m_leftTraceInfoLabelsFit(false), @@ -1074,7 +1128,7 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent, m_primaryLayout = new TQGridLayout(this); m_graticuleWidget = new GraticuleWidget(this); connect(m_graticuleWidget, SIGNAL(cursorPositionChanged(uint, double)), this, SLOT(processChangedCursor(uint, double))); - m_primaryLayout->addMultiCellWidget(m_graticuleWidget, 0, 254, 1, 254); + m_primaryLayout->addMultiCellWidget(m_graticuleWidget, 0, 253, 1, 254); m_primaryLayout->setAlignment(TQt::AlignTop); m_rightPaneLayout = new TQGridLayout; m_leftPaneLayout = new TQGridLayout; @@ -1109,6 +1163,15 @@ TraceWidget::~TraceWidget() { } } +int TraceWidget::horizScrollOffset() { + if (m_horizScrollBar) { + return m_horizScrollBar->value(); + } + else { + return 0; + } +} + void TraceWidget::setForegroundColor(const TQColor color) { setPaletteForegroundColor(color); m_graticuleWidget->setPaletteForegroundColor(color); @@ -1138,7 +1201,7 @@ void TraceWidget::setBackgroundColor(const TQColor color) { void TraceWidget::setNumberOfSamples(uint traceNumber, unsigned int samples, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE - int i; + unsigned int i; int prev_samples = m_traceArray[traceNumber]->sampleArray.count(); m_traceArray[traceNumber]->numberOfSamples = samples; @@ -1996,33 +2059,68 @@ void TraceWidget::resizeCursorArray(uint newsize) { } TQSize TraceWidget::sizeHint() const { - TQSize widgetSizeHint = TQWidget::sizeHint(); - unsigned int minimumHorizWidth = m_horizDivs * m_minimumPixelsPerHorizDiv; - return TQSize(TQMAX(minimumHorizWidth, widgetSizeHint.height()), widgetSizeHint.height()); + return TQWidget::sizeHint(); } TQSize TraceWidget::minimumSizeHint() const { return TQWidget::minimumSizeHint(); } -TraceScrollWidget::TraceScrollWidget(TQWidget* parent, const char* name) : TQScrollView(parent, name) { +TraceScrollView::TraceScrollView(TQWidget* parent, const char* name) : TQScrollView(parent, name) { m_traceWidget = new TraceWidget(viewport()); addChild(m_traceWidget); } -TraceScrollWidget::~TraceScrollWidget() { +TraceScrollView::~TraceScrollView() { delete m_traceWidget; m_traceWidget = NULL; } -TQSize TraceScrollWidget::sizeHint() const { +TQSize TraceScrollView::sizeHint() const { return TQScrollView::sizeHint(); } -TQSize TraceScrollWidget::minimumSizeHint() const { +TQSize TraceScrollView::minimumSizeHint() const { return m_traceWidget->minimumSizeHint(); } -TraceWidget* TraceScrollWidget::traceWidget() { +TraceWidget* TraceScrollView::traceWidget() { return m_traceWidget; +} + +TraceScrollWidget::TraceScrollWidget(TQWidget* parent, const char* name) : TQVBox(parent, name) { + m_traceScrollView = new TraceScrollView(this); + m_horizScrollBar = new TQScrollBar(this); + m_traceScrollView->m_traceWidget->m_horizScrollBar = m_horizScrollBar; + connect(m_horizScrollBar, TQT_SIGNAL(valueChanged(int)), m_traceScrollView->m_traceWidget->m_graticuleWidget, TQT_SLOT(horizScrollValueChanged(int))); + m_traceScrollView->setHScrollBarMode(TQScrollView::AlwaysOff); + m_horizScrollBar->setOrientation(TQt::Horizontal); + m_horizScrollBarMode = TQScrollView::AlwaysOff; +} + +TraceScrollWidget::~TraceScrollWidget() { + delete m_traceScrollView; + m_traceScrollView = NULL; + delete m_horizScrollBar; + m_horizScrollBar = NULL; +} + +void TraceScrollWidget::setResizePolicy(TQScrollView::ResizePolicy rp) { + m_traceScrollView->setResizePolicy(rp); +} + +TQScrollView::ResizePolicy TraceScrollWidget::resizePolicy() const { + return m_traceScrollView->resizePolicy(); +} + +void TraceScrollWidget::setHScrollBarMode(TQScrollView::ScrollBarMode sm) { + m_horizScrollBarMode = sm; +} + +void TraceScrollWidget::setVScrollBarMode(TQScrollView::ScrollBarMode sm) { + m_traceScrollView->setVScrollBarMode(sm); +} + +TraceWidget* TraceScrollWidget::traceWidget() { + return m_traceScrollView->m_traceWidget; } \ No newline at end of file diff --git a/clients/tde/src/widgets/tracewidget.h b/clients/tde/src/widgets/tracewidget.h index 6461d35..fabde7c 100644 --- a/clients/tde/src/widgets/tracewidget.h +++ b/clients/tde/src/widgets/tracewidget.h @@ -1,6 +1,7 @@ //Author: Timothy Pearson , (C) 2012-2014 //Copyright: See COPYING file that comes with this distribution +#include #include #include @@ -53,7 +54,7 @@ class TraceData : public TQObject public: TraceData(TraceWidget* parent, TQWidget* labelParent=0); ~TraceData(); - void drawTrace(TQPainter* p, int graticule_width, int graticule_height); + void drawTrace(TQPainter* p, int graticule_width, int graticule_height, int virtual_width, int virtual_height); public slots: void movePosOneTick(); @@ -105,7 +106,7 @@ class CursorData : public TQObject public: CursorData(TraceWidget* parent, TQWidget* labelParent=0); ~CursorData(); - void drawCursor(TQPainter* p, int graticule_width, int graticule_height); + void drawCursor(TQPainter* p, int graticule_width, int graticule_height, int virtual_width, int virtual_height, int offset); public slots: void movePosOneTick(); @@ -151,6 +152,7 @@ class GraticuleWidget : public TQWidget public: virtual TQSizePolicy sizePolicy() const; + int virtualWidth(); protected: virtual void paintEvent(TQPaintEvent*); @@ -167,10 +169,13 @@ class GraticuleWidget : public TQWidget private slots: void updateGraticule(); + void horizScrollValueChanged(int value); private: TraceWidget* m_base; TQPixmap* m_graticulePixmap; + int m_prevWidgetWidth; + int m_virtualWidth; bool m_leftMouseDown; bool m_middleMouseDown; int m_closestCursor; @@ -282,6 +287,7 @@ class TraceWidget : public TQWidget private: void resizeTraceArray(uint newsize); void resizeCursorArray(uint newsize); + int horizScrollOffset(); private: unsigned int m_horizDivs; @@ -303,6 +309,7 @@ class TraceWidget : public TQWidget TQVBoxLayout* m_statusLabelLayout; TQVBoxLayout* m_statusLabelLayoutInner; GraticuleWidget* m_graticuleWidget; + TQScrollBar* m_horizScrollBar; bool m_useAbsoluteHorizontalRange; bool m_showLeftTraceInfoArea; bool m_leftTraceInfoLabelsFit; @@ -313,15 +320,17 @@ class TraceWidget : public TQWidget friend class TraceData; friend class CursorData; friend class TraceLabelLayout; + friend class TraceScrollView; + friend class TraceScrollWidget; }; -class TraceScrollWidget : public TQScrollView +class TraceScrollView : public TQScrollView { Q_OBJECT public: - TraceScrollWidget(TQWidget* = 0, const char* = 0); - ~TraceScrollWidget(); + TraceScrollView(TQWidget* = 0, const char* = 0); + ~TraceScrollView(); TraceWidget* traceWidget(); @@ -330,4 +339,28 @@ class TraceScrollWidget : public TQScrollView private: TraceWidget* m_traceWidget; + + friend class TraceScrollWidget; +}; + +class TraceScrollWidget : public TQVBox +{ + Q_OBJECT + + public: + TraceScrollWidget(TQWidget* = 0, const char* = 0); + ~TraceScrollWidget(); + + void setHScrollBarMode(TQScrollView::ScrollBarMode); + void setVScrollBarMode(TQScrollView::ScrollBarMode); + + void setResizePolicy(TQScrollView::ResizePolicy); + TQScrollView::ResizePolicy resizePolicy() const; + + TraceWidget* traceWidget(); + + private: + TraceScrollView* m_traceScrollView; + TQScrollBar* m_horizScrollBar; + TQScrollView::ScrollBarMode m_horizScrollBarMode; }; \ No newline at end of file