diff options
Diffstat (limited to 'clients/tde/src/widgets/tracewidget.cpp')
| -rw-r--r-- | clients/tde/src/widgets/tracewidget.cpp | 167 |
1 files changed, 134 insertions, 33 deletions
diff --git a/clients/tde/src/widgets/tracewidget.cpp b/clients/tde/src/widgets/tracewidget.cpp index 6f11ffc..04a2a00 100644 --- a/clients/tde/src/widgets/tracewidget.cpp +++ b/clients/tde/src/widgets/tracewidget.cpp @@ -205,7 +205,7 @@ void TraceLabelLayout::setGeometry(const TQRect &rect) { int font_vertical_offset = font_height/2; int graticule_height = m_traceWidget->m_graticuleWidget->height(); - int y = (((currentTrace->offset-currentTrace->topEdge)/(currentTrace->bottomEdge-currentTrace->topEdge))*(graticule_height))-font_vertical_offset; + int y = ((((currentTrace->offset+currentTrace->textOffset)-currentTrace->topEdge)/(currentTrace->bottomEdge-currentTrace->topEdge))*(graticule_height))-font_vertical_offset; if (m_traceWidget->m_showLeftTraceInfoArea) { if ((y < 0) || ((y+font_height) > graticule_height)) { currentTrace->leftLabel->hide(); @@ -228,6 +228,7 @@ void TraceLabelLayout::invalidate() { TQSize TraceLabelLayout::sizeHint() const { + TQSize size; if (!m_traceWidget->m_showLeftTraceInfoArea) { return TQSize(0, 0); } @@ -239,11 +240,19 @@ TQSize TraceLabelLayout::sizeHint() const ++it; s = s.expandedTo(item->sizeHint()); } - return s + TQSize(spacing(), spacing()); + size = s + TQSize(spacing(), spacing()); + + if (m_traceWidget->m_leftTraceInfoLabelsFit && list.getFirst()) { + return TQSize(size.width(), ((list.getFirst()->sizeHint().height() + m_traceWidget->m_leftTraceInfoAreaFitSpacing) * list.count())); + } + else { + return size; + } } TQSize TraceLabelLayout::minimumSize() const { + TQSize minSize; if (!m_traceWidget->m_showLeftTraceInfoArea) { return TQSize(0, 0); } @@ -255,7 +264,14 @@ TQSize TraceLabelLayout::minimumSize() const ++it; s = s.expandedTo(item->minimumSize()); } - return s + TQSize(spacing(), spacing()); + minSize = s + TQSize(spacing(), spacing()); + + if (m_traceWidget->m_leftTraceInfoLabelsFit && list.getFirst()) { + return TQSize(minSize.width(), ((list.getFirst()->minimumSize().height()+ m_traceWidget->m_leftTraceInfoAreaFitSpacing) * list.count())); + } + else { + return minSize; + } } TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), parentWidget(parent) { @@ -264,6 +280,7 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p leftEdgeIndex = -1; rightEdgeIndex = -1; offset = 0.0; + textOffset = 0.0; leftEdge = 0; rightEdge = 0; topEdge = 0; @@ -286,7 +303,7 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p leftLabel = new TQLabel(labelParent); leftLabel->setPaletteBackgroundColor(labelParent->paletteBackgroundColor()); leftLabel->setPaletteForegroundColor(color); - leftLabel->setAlignment(TQt::AlignHCenter|TQt::AlignVCenter|TQt::SingleLine); + leftLabel->setAlignment(TQt::AlignLeft|TQt::AlignVCenter|TQt::SingleLine); font = leftLabel->font(); font.setPointSize(font.pointSize()-1); leftLabel->setFont(font); @@ -421,7 +438,7 @@ void TraceData::drawTrace(TQPainter* p, int graticule_width, int graticule_heigh int font_height = p->fontMetrics().boundingRect("→").height(); x = 0; - y = (((offset-topEdge)/(bottomEdge-topEdge))*(graticule_height))+(font_height/2)-(font_vertical_offset/2); + y = ((((offset+textOffset)-topEdge)/(bottomEdge-topEdge))*(graticule_height))+(font_height/2)-(font_vertical_offset/2); if (y > graticule_height) { font_height = p->fontMetrics().boundingRect("↓").height(); y = graticule_height-font_vertical_offset; @@ -1047,7 +1064,10 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent, m_zoomCursorStartIndex(0), m_zoomBoxEnabled(false), m_useAbsoluteHorizontalRange(true), - m_showLeftTraceInfoArea(false) { + m_showLeftTraceInfoArea(false), + m_leftTraceInfoLabelsFit(false), + m_leftTraceInfoAreaFitSpacing(0), + m_minimumPixelsPerHorizDiv(0) { setBackgroundMode(NoBackground); setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding)); @@ -1115,17 +1135,28 @@ void TraceWidget::setBackgroundColor(const TQColor color) { } } -void TraceWidget::setNumberOfSamples(uint traceNumber, unsigned int samples) { +void TraceWidget::setNumberOfSamples(uint traceNumber, unsigned int samples, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE + int i; + int prev_samples = m_traceArray[traceNumber]->sampleArray.count(); + m_traceArray[traceNumber]->numberOfSamples = samples; m_traceArray[traceNumber]->sampleArray.resize(samples); m_traceArray[traceNumber]->positionArray.resize(samples); m_traceArray[traceNumber]->leftEdgeIndex = -1; m_traceArray[traceNumber]->rightEdgeIndex = -1; - m_graticuleWidget->updateGraticule(); - updateTraceText(); + // Zero the uninitialized portion of the data arrays to avoid ugly drawing artifacts on resize + for (i=prev_samples; i<samples; i++) { + m_traceArray[traceNumber]->sampleArray[i] = 0; + m_traceArray[traceNumber]->positionArray[i] = 0; + } + + if (!deferUpdate) { + m_graticuleWidget->updateGraticule(); + updateTraceText(); + } } void TraceWidget::setNumberOfHorizontalDivisions(unsigned int divisions) { @@ -1142,7 +1173,7 @@ void TraceWidget::setNumberOfVerticalDivisions(unsigned int divisions) { updateCursorText(); } -void TraceWidget::setDisplayLimits(uint traceNumber, TQRectF limits) { +void TraceWidget::setDisplayLimits(uint traceNumber, TQRectF limits, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->leftEdge = limits.x(); @@ -1152,10 +1183,12 @@ void TraceWidget::setDisplayLimits(uint traceNumber, TQRectF limits) { m_traceArray[traceNumber]->leftEdgeIndex = -1; m_traceArray[traceNumber]->rightEdgeIndex = -1; - m_graticuleWidget->updateGraticule(); - m_graticuleWidget->repaint(false); - updateTraceText(); - updateCursorText(); + if (!deferUpdate) { + m_graticuleWidget->updateGraticule(); + m_graticuleWidget->repaint(false); + updateTraceText(); + updateCursorText(); + } } TQRectF TraceWidget::displayLimits(uint traceNumber) { @@ -1266,13 +1299,15 @@ TQDoubleArray& TraceWidget::samples(uint traceNumber) { return m_traceArray[traceNumber]->sampleArray; } -void TraceWidget::setSamples(uint traceNumber, TQDoubleArray& tqda) { +void TraceWidget::setSamples(uint traceNumber, TQDoubleArray& tqda, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->sampleArray = tqda; m_traceArray[traceNumber]->numberOfSamples = tqda.size(); - m_graticuleWidget->repaint(false); + if (!deferUpdate) { + m_graticuleWidget->repaint(false); + } } TQDoubleArray& TraceWidget::positions(uint traceNumber) { @@ -1281,7 +1316,7 @@ TQDoubleArray& TraceWidget::positions(uint traceNumber) { return m_traceArray[traceNumber]->positionArray; } -void TraceWidget::setPositions(uint traceNumber, TQDoubleArray& tqda) { +void TraceWidget::setPositions(uint traceNumber, TQDoubleArray& tqda, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->positionArray = tqda; @@ -1289,7 +1324,9 @@ void TraceWidget::setPositions(uint traceNumber, TQDoubleArray& tqda) { m_traceArray[traceNumber]->leftEdgeIndex = -1; m_traceArray[traceNumber]->rightEdgeIndex = -1; - m_graticuleWidget->repaint(false); + if (!deferUpdate) { + m_graticuleWidget->repaint(false); + } } TQColor TraceWidget::traceColor(uint traceNumber) { @@ -1314,12 +1351,12 @@ bool TraceWidget::traceEnabled(uint traceNumber) { return m_traceArray[traceNumber]->enabled; } -void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText) { +void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, TextDisplayType showText, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->enabled = enabled; if (enabled) { - if (showText) { + if (showText == FullText) { m_traceArray[traceNumber]->paramLabel->show(); m_traceArray[traceNumber]->leftLabel->show(); m_traceArray[traceNumber]->graphStatusLabel->show(); @@ -1333,7 +1370,12 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText) m_traceArray[traceNumber]->paramLabel->hide(); m_traceArray[traceNumber]->leftLabel->hide(); m_traceArray[traceNumber]->graphStatusLabel->hide(); - m_traceArray[traceNumber]->graphStatusLabelInner->show(); + if (showText == SummaryText) { + m_traceArray[traceNumber]->graphStatusLabelInner->show(); + } + else { + m_traceArray[traceNumber]->graphStatusLabelInner->hide(); + } m_traceArray[traceNumber]->singleIncrBtn->hide(); m_traceArray[traceNumber]->singleDecrBtn->hide(); m_traceArray[traceNumber]->posResetBtn->hide(); @@ -1351,9 +1393,11 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText) m_traceArray[traceNumber]->posSetBtn->hide(); } - m_graticuleWidget->updateGraticule(); - m_graticuleWidget->repaint(false); - updateTraceText(); + if (!deferUpdate) { + m_graticuleWidget->updateGraticule(); + m_graticuleWidget->repaint(false); + updateTraceText(); + } } TQString TraceWidget::traceName(uint traceNumber) { @@ -1362,11 +1406,13 @@ TQString TraceWidget::traceName(uint traceNumber) { return m_traceArray[traceNumber]->traceName; } -void TraceWidget::setTraceName(uint traceNumber, TQString name) { +void TraceWidget::setTraceName(uint traceNumber, TQString name, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->traceName = name; - updateTraceText(); + if (!deferUpdate) { + updateTraceText(); + } } TQString TraceWidget::traceHorizontalUnits(uint traceNumber) { @@ -1375,11 +1421,13 @@ TQString TraceWidget::traceHorizontalUnits(uint traceNumber) { return m_traceArray[traceNumber]->horizontalUnits; } -void TraceWidget::setTraceHorizontalUnits(uint traceNumber, TQString units) { +void TraceWidget::setTraceHorizontalUnits(uint traceNumber, TQString units, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->horizontalUnits = units; - updateTraceText(); + if (!deferUpdate) { + updateTraceText(); + } } TQString TraceWidget::traceVerticalUnits(uint traceNumber) { @@ -1388,11 +1436,13 @@ TQString TraceWidget::traceVerticalUnits(uint traceNumber) { return m_traceArray[traceNumber]->verticalUnits; } -void TraceWidget::setTraceVerticalUnits(uint traceNumber, TQString units) { +void TraceWidget::setTraceVerticalUnits(uint traceNumber, TQString units, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->verticalUnits = units; - updateTraceText(); + if (!deferUpdate) { + updateTraceText(); + } } double TraceWidget::cursorPosition(uint cursorNumber) { @@ -1714,6 +1764,20 @@ void TraceWidget::showLeftTraceInfoArea(bool show) { } } +void TraceWidget::fitLeftTraceInfoArea(bool fit) { + m_leftTraceInfoLabelsFit = fit; + m_traceLeftLabelLayout->invalidate(); +} + +void TraceWidget::setLeftTraceInfoAreaFitSpacing(int spacing) { + m_leftTraceInfoAreaFitSpacing = spacing; + m_traceLeftLabelLayout->invalidate(); +} + +void TraceWidget::setMinimumPixelsPerHorizDiv(unsigned int pixels) { + m_minimumPixelsPerHorizDiv = pixels; +} + TQString TraceWidget::prettyFormat(double value, double rangeDetectValue, TQString baseUnits, unsigned int precision) { TQString result; TQString unitMultiplier; @@ -1789,12 +1853,39 @@ double TraceWidget::traceOffset(uint traceNumber) { } void TraceWidget::setTraceOffset(uint traceNumber, double offset) { + setTraceOffset(traceNumber, offset, false); +} + +void TraceWidget::setTraceOffset(uint traceNumber, double offset, bool deferUpdate) { VERIFY_TRACE_ARRAY_SIZE m_traceArray[traceNumber]->offset = offset; - m_graticuleWidget->repaint(false); - updateTraceText(); + if (!deferUpdate) { + m_graticuleWidget->repaint(false); + updateTraceText(); + } +} + +double TraceWidget::traceTextOffset(uint traceNumber) { + VERIFY_TRACE_ARRAY_SIZE + + return m_traceArray[traceNumber]->textOffset; +} + +void TraceWidget::setTraceTextOffset(uint traceNumber, double offset) { + setTraceOffset(traceNumber, offset, false); +} + +void TraceWidget::setTraceTextOffset(uint traceNumber, double offset, bool deferUpdate) { + VERIFY_TRACE_ARRAY_SIZE + + m_traceArray[traceNumber]->textOffset = offset; + + if (!deferUpdate) { + m_graticuleWidget->repaint(false); + updateTraceText(); + } } void TraceWidget::processChangedOffset(double offset) { @@ -1904,6 +1995,16 @@ 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()); +} + +TQSize TraceWidget::minimumSizeHint() const { + return TQWidget::minimumSizeHint(); +} + TraceScrollWidget::TraceScrollWidget(TQWidget* parent, const char* name) : TQScrollView(parent, name) { m_traceWidget = new TraceWidget(viewport()); addChild(m_traceWidget); @@ -1915,7 +2016,7 @@ TraceScrollWidget::~TraceScrollWidget() { } TQSize TraceScrollWidget::sizeHint() const { - return m_traceWidget->sizeHint(); + return TQScrollView::sizeHint(); } TQSize TraceScrollWidget::minimumSizeHint() const { |
