|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
//Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>, (C) 2012
|
|
|
|
|
//Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>, (C) 2012-2014
|
|
|
|
|
//Copyright: See COPYING file that comes with this distribution
|
|
|
|
|
|
|
|
|
|
#include "tracewidget.h"
|
|
|
|
@ -95,6 +95,169 @@ bool TQRectF::operator!=(const TQRectF &r1) {
|
|
|
|
|
return !operator==(r1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TraceLabelLayout : public TQLayout
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TraceLabelLayout(TraceWidget *traceWidget, TQWidget *parent, int spacing=-1) : TQLayout(parent, 0, spacing), m_traceWidget(traceWidget) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
TraceLabelLayout(TraceWidget *traceWidget, TQLayout* parent, int spacing=-1) : TQLayout(parent, spacing), m_traceWidget(traceWidget) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
TraceLabelLayout(TraceWidget *traceWidget, int spacing=-1) : TQLayout(spacing), m_traceWidget(traceWidget) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
~TraceLabelLayout();
|
|
|
|
|
|
|
|
|
|
void addItem(TQLayoutItem *item);
|
|
|
|
|
void addWidget(TQWidget *w, int alignment);
|
|
|
|
|
TQSize sizeHint() const;
|
|
|
|
|
TQSize minimumSize() const;
|
|
|
|
|
TQLayoutIterator iterator();
|
|
|
|
|
void setGeometry(const TQRect &rect);
|
|
|
|
|
virtual void invalidate();
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
TQPtrList<TQLayoutItem> list;
|
|
|
|
|
TraceWidget* m_traceWidget;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class TraceLabelLayoutIterator : public TQGLayoutIterator
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TraceLabelLayoutIterator( TQPtrList<TQLayoutItem> *l ) : idx(0), list(l) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQLayoutItem *current() {
|
|
|
|
|
return idx < int(list->count()) ? list->at(idx) : 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQLayoutItem *next() {
|
|
|
|
|
idx++;
|
|
|
|
|
return current();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQLayoutItem *takeCurrent() {
|
|
|
|
|
return list->take(idx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
int idx;
|
|
|
|
|
TQPtrList<TQLayoutItem> *list;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TQLayoutIterator TraceLabelLayout::iterator() {
|
|
|
|
|
return TQLayoutIterator(new TraceLabelLayoutIterator(&list));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceLabelLayout::addItem(TQLayoutItem *item) {
|
|
|
|
|
list.append( item );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceLabelLayout::addWidget(TQWidget *w, int alignment) {
|
|
|
|
|
if (!w) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQWidgetItem *b = new TQWidgetItem(w);
|
|
|
|
|
b->setAlignment(alignment);
|
|
|
|
|
addItem( b );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TraceLabelLayout::~TraceLabelLayout() {
|
|
|
|
|
deleteAllItems();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceLabelLayout::setGeometry(const TQRect &rect) {
|
|
|
|
|
TQLayout::setGeometry(rect);
|
|
|
|
|
|
|
|
|
|
TQPtrListIterator<TQLayoutItem> it(list);
|
|
|
|
|
if (it.count() == 0) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQLayoutItem *item;
|
|
|
|
|
while ((item = it.current()) != 0) {
|
|
|
|
|
++it;
|
|
|
|
|
|
|
|
|
|
TQWidgetItem *widgetItem = dynamic_cast<TQWidgetItem*>(item);
|
|
|
|
|
if (!widgetItem) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQWidget* widget = widgetItem->widget();
|
|
|
|
|
if (!widget) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the trace number
|
|
|
|
|
const TraceData* currentTrace = NULL;
|
|
|
|
|
for (uint trace=0;trace<m_traceWidget->m_traceArray.count();trace++) {
|
|
|
|
|
if (m_traceWidget->m_traceArray[trace]->leftLabel == widget) {
|
|
|
|
|
currentTrace = m_traceWidget->m_traceArray[trace];
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQFontMetrics fm(currentTrace->leftLabel->font());
|
|
|
|
|
int font_height = fm.boundingRect(currentTrace->leftLabel->text()).height();
|
|
|
|
|
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;
|
|
|
|
|
if (m_traceWidget->m_showLeftTraceInfoArea) {
|
|
|
|
|
if ((y < 0) || ((y+font_height) > graticule_height)) {
|
|
|
|
|
currentTrace->leftLabel->hide();
|
|
|
|
|
item->setGeometry(TQRect(0, 0, rect.width(), currentTrace->leftLabel->sizeHint().height()));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
item->setGeometry(TQRect(0, y, rect.width(), currentTrace->leftLabel->sizeHint().height()));
|
|
|
|
|
currentTrace->leftLabel->show();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
currentTrace->leftLabel->hide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceLabelLayout::invalidate() {
|
|
|
|
|
setGeometry(geometry());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQSize TraceLabelLayout::sizeHint() const
|
|
|
|
|
{
|
|
|
|
|
if (!m_traceWidget->m_showLeftTraceInfoArea) {
|
|
|
|
|
return TQSize(0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQSize s(0, 0);
|
|
|
|
|
TQPtrListIterator<TQLayoutItem> it( list );
|
|
|
|
|
TQLayoutItem *item;
|
|
|
|
|
while ((item = it.current()) != 0) {
|
|
|
|
|
++it;
|
|
|
|
|
s = s.expandedTo(item->sizeHint());
|
|
|
|
|
}
|
|
|
|
|
return s + TQSize(spacing(), spacing());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQSize TraceLabelLayout::minimumSize() const
|
|
|
|
|
{
|
|
|
|
|
if (!m_traceWidget->m_showLeftTraceInfoArea) {
|
|
|
|
|
return TQSize(0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQSize s(0, 0);
|
|
|
|
|
TQPtrListIterator<TQLayoutItem> it(list);
|
|
|
|
|
TQLayoutItem *item;
|
|
|
|
|
while ((item = it.current()) != 0) {
|
|
|
|
|
++it;
|
|
|
|
|
s = s.expandedTo(item->minimumSize());
|
|
|
|
|
}
|
|
|
|
|
return s + TQSize(spacing(), spacing());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), parentWidget(parent) {
|
|
|
|
|
color = TQColor(0, 255, 0);
|
|
|
|
|
numberOfSamples = 0;
|
|
|
|
@ -120,6 +283,15 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p
|
|
|
|
|
font.setPointSize(font.pointSize()-1);
|
|
|
|
|
paramLabel->setFont(font);
|
|
|
|
|
paramLabel->hide();
|
|
|
|
|
leftLabel = new TQLabel(labelParent);
|
|
|
|
|
leftLabel->setPaletteBackgroundColor(labelParent->paletteBackgroundColor());
|
|
|
|
|
leftLabel->setPaletteForegroundColor(color);
|
|
|
|
|
leftLabel->setAlignment(TQt::AlignHCenter|TQt::AlignVCenter|TQt::SingleLine);
|
|
|
|
|
font = leftLabel->font();
|
|
|
|
|
font.setPointSize(font.pointSize()-1);
|
|
|
|
|
leftLabel->setFont(font);
|
|
|
|
|
leftLabel->setText("<qt></qt>");
|
|
|
|
|
leftLabel->hide();
|
|
|
|
|
graphStatusLabel = new TQLabel(labelParent);
|
|
|
|
|
graphStatusLabel->setPaletteBackgroundColor(labelParent->paletteBackgroundColor());
|
|
|
|
|
graphStatusLabel->setPaletteForegroundColor(color);
|
|
|
|
@ -175,6 +347,7 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
paramLabel = NULL;
|
|
|
|
|
leftLabel = NULL;
|
|
|
|
|
graphStatusLabel = NULL;
|
|
|
|
|
graphStatusLabelInner = NULL;
|
|
|
|
|
singleIncrBtn = NULL;
|
|
|
|
@ -873,31 +1046,38 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent,
|
|
|
|
|
m_zoomBoxDarkness(ZOOM_SHADING_DARKNESS_FACTOR),
|
|
|
|
|
m_zoomCursorStartIndex(0),
|
|
|
|
|
m_zoomBoxEnabled(false),
|
|
|
|
|
m_useAbsoluteHorizontalRange(true) {
|
|
|
|
|
m_useAbsoluteHorizontalRange(true),
|
|
|
|
|
m_showLeftTraceInfoArea(false) {
|
|
|
|
|
setBackgroundMode(NoBackground);
|
|
|
|
|
setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding));
|
|
|
|
|
|
|
|
|
|
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, 0, 254);
|
|
|
|
|
m_primaryLayout->addMultiCellWidget(m_graticuleWidget, 0, 254, 1, 254);
|
|
|
|
|
m_primaryLayout->setAlignment(TQt::AlignTop);
|
|
|
|
|
m_rightPaneLayout = new TQGridLayout;
|
|
|
|
|
m_leftPaneLayout = new TQGridLayout;
|
|
|
|
|
m_traceLabelLayout = new TQGridLayout;
|
|
|
|
|
m_infoLabelLayout = new TQGridLayout;
|
|
|
|
|
m_cursorLabelLayout = new TQGridLayout;
|
|
|
|
|
m_traceLeftLabelLayout = new TraceLabelLayout(this);
|
|
|
|
|
m_statusLabelLayout = new TQVBoxLayout;
|
|
|
|
|
m_statusLabelLayoutInner = new TQVBoxLayout;
|
|
|
|
|
m_primaryLayout->addLayout(m_traceLabelLayout, 255, 0);
|
|
|
|
|
m_primaryLayout->addLayout(m_traceLabelLayout, 255, 1);
|
|
|
|
|
m_primaryLayout->addLayout(m_rightPaneLayout, 0, 255);
|
|
|
|
|
m_primaryLayout->addLayout(m_leftPaneLayout, 0, 0);
|
|
|
|
|
m_primaryLayout->addLayout(m_statusLabelLayout, 255, 255);
|
|
|
|
|
m_primaryLayout->addLayout(m_statusLabelLayoutInner, 1, 253);
|
|
|
|
|
m_rightPaneLayout->addLayout(m_cursorLabelLayout, 0, 0);
|
|
|
|
|
m_rightPaneLayout->addLayout(m_infoLabelLayout, 1, 0);
|
|
|
|
|
m_rightPaneLayout->addLayout(m_cursorLabelLayout, 0, 1);
|
|
|
|
|
m_rightPaneLayout->addLayout(m_infoLabelLayout, 1, 1);
|
|
|
|
|
m_leftPaneLayout->addLayout(m_traceLeftLabelLayout, 0, 1);
|
|
|
|
|
m_traceLabelLayout->addItem(new TQSpacerItem(0, 0, TQSizePolicy::Expanding, TQSizePolicy::Minimum), 0, 255);
|
|
|
|
|
m_rightPaneLayout->addItem(new TQSpacerItem(0, 0, TQSizePolicy::Minimum, TQSizePolicy::Expanding), 255, 0);
|
|
|
|
|
m_leftPaneLayout->addItem(new TQSpacerItem(0, 0, TQSizePolicy::Minimum, TQSizePolicy::Expanding), 255, 0);
|
|
|
|
|
m_primaryLayout->addItem(new TQSpacerItem(0, 0, TQSizePolicy::Expanding, TQSizePolicy::Minimum), 1, 128);
|
|
|
|
|
m_statusLabelLayout->setSpacing(0);
|
|
|
|
|
m_leftPaneLayout->setSpacing(0);
|
|
|
|
|
|
|
|
|
|
setPaletteBackgroundColor(TQt::black);
|
|
|
|
|
setPaletteForegroundColor(TQColor(0,128,0));
|
|
|
|
@ -992,6 +1172,8 @@ void TraceWidget::updateTraceText() {
|
|
|
|
|
double vertical_range = (m_traceArray[trace]->bottomEdge-m_traceArray[trace]->topEdge);
|
|
|
|
|
m_traceArray[trace]->paramLabel->setPaletteBackgroundColor(paletteBackgroundColor());
|
|
|
|
|
m_traceArray[trace]->paramLabel->setPaletteForegroundColor(m_traceArray[trace]->color);
|
|
|
|
|
m_traceArray[trace]->leftLabel->setPaletteBackgroundColor(paletteBackgroundColor());
|
|
|
|
|
m_traceArray[trace]->leftLabel->setPaletteForegroundColor(m_traceArray[trace]->color);
|
|
|
|
|
m_traceArray[trace]->graphStatusLabel->setPaletteBackgroundColor(paletteBackgroundColor());
|
|
|
|
|
m_traceArray[trace]->graphStatusLabel->setPaletteForegroundColor(m_traceArray[trace]->color);
|
|
|
|
|
m_traceArray[trace]->graphStatusLabelInner->setPaletteBackgroundColor(paletteBackgroundColor());
|
|
|
|
@ -1007,6 +1189,7 @@ void TraceWidget::updateTraceText() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_traceArray[trace]->paramLabel->setText(TQString("<qt><nobr>%1%2<br>%3/div,%4/div<br>%5,%6<br>%7,%8</qt>").arg(m_traceArray[trace]->traceName).arg(offsetText).arg(prettyFormat(horizontal_units_per_division, horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(prettyFormat(vertical_units_per_division, vertical_range, m_traceArray[trace]->verticalUnits)).arg(prettyFormat(m_traceArray[trace]->leftEdge, (m_useAbsoluteHorizontalRange)?m_traceArray[trace]->rightEdge:horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(prettyFormat(m_traceArray[trace]->topEdge, vertical_range, m_traceArray[trace]->verticalUnits)).arg(prettyFormat(m_traceArray[trace]->rightEdge, (m_useAbsoluteHorizontalRange)?m_traceArray[trace]->rightEdge:horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(prettyFormat(m_traceArray[trace]->bottomEdge, vertical_range, m_traceArray[trace]->verticalUnits)));
|
|
|
|
|
m_traceArray[trace]->leftLabel->setText(TQString("<qt><nobr>%1</qt>").arg(m_traceArray[trace]->traceName));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1138,6 +1321,7 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText)
|
|
|
|
|
if (enabled) {
|
|
|
|
|
if (showText) {
|
|
|
|
|
m_traceArray[traceNumber]->paramLabel->show();
|
|
|
|
|
m_traceArray[traceNumber]->leftLabel->show();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabel->show();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabelInner->hide();
|
|
|
|
|
m_traceArray[traceNumber]->singleIncrBtn->show();
|
|
|
|
@ -1147,6 +1331,7 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText)
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
m_traceArray[traceNumber]->paramLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->leftLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabelInner->show();
|
|
|
|
|
m_traceArray[traceNumber]->singleIncrBtn->hide();
|
|
|
|
@ -1157,6 +1342,7 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, bool showText)
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
m_traceArray[traceNumber]->paramLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->leftLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabelInner->hide();
|
|
|
|
|
m_traceArray[traceNumber]->singleIncrBtn->hide();
|
|
|
|
@ -1516,6 +1702,18 @@ void TraceWidget::setZoomBoxEnabled(bool enabled) {
|
|
|
|
|
m_graticuleWidget->updateGraticule();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::showLeftTraceInfoArea(bool show) {
|
|
|
|
|
m_showLeftTraceInfoArea = show;
|
|
|
|
|
for (uint i=0;i<m_traceArray.count();i++) {
|
|
|
|
|
if (m_showLeftTraceInfoArea) {
|
|
|
|
|
m_traceArray[i]->leftLabel->show();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
m_traceArray[i]->leftLabel->hide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQString TraceWidget::prettyFormat(double value, double rangeDetectValue, TQString baseUnits, unsigned int precision) {
|
|
|
|
|
TQString result;
|
|
|
|
|
TQString unitMultiplier;
|
|
|
|
@ -1610,6 +1808,7 @@ void TraceWidget::processChangedOffset(double offset) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (tracenumber >= 0) {
|
|
|
|
|
m_traceLeftLabelLayout->invalidate();
|
|
|
|
|
emit(offsetChanged(tracenumber, offset));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1649,6 +1848,7 @@ void TraceWidget::resizeTraceArray(uint newsize) {
|
|
|
|
|
m_traceLabelLayout->addWidget(m_traceArray[i]->posResetBtn, 1, (i*2)+1);
|
|
|
|
|
m_traceLabelLayout->addWidget(m_traceArray[i]->posSetBtn, 2, (i*2)+1);
|
|
|
|
|
m_traceLabelLayout->addWidget(m_traceArray[i]->singleDecrBtn, 3, (i*2)+1);
|
|
|
|
|
m_traceLeftLabelLayout->addWidget(m_traceArray[i]->leftLabel, TQt::AlignTop);
|
|
|
|
|
m_statusLabelLayout->insertWidget(i, m_traceArray[i]->graphStatusLabel, TQt::AlignTop);
|
|
|
|
|
m_statusLabelLayoutInner->insertWidget(i, m_traceArray[i]->graphStatusLabelInner);
|
|
|
|
|
}
|
|
|
|
@ -1663,6 +1863,7 @@ void TraceWidget::resizeTraceArray(uint newsize) {
|
|
|
|
|
m_traceLabelLayout->remove(m_traceArray[i]->posResetBtn);
|
|
|
|
|
m_traceLabelLayout->remove(m_traceArray[i]->posSetBtn);
|
|
|
|
|
m_traceLabelLayout->remove(m_traceArray[i]->singleDecrBtn);
|
|
|
|
|
m_traceLeftLabelLayout->remove(m_traceArray[i]->leftLabel);
|
|
|
|
|
m_statusLabelLayout->remove(m_traceArray[i]->graphStatusLabel);
|
|
|
|
|
m_statusLabelLayoutInner->remove(m_traceArray[i]->graphStatusLabelInner);
|
|
|
|
|
}
|
|
|
|
@ -1701,4 +1902,26 @@ void TraceWidget::resizeCursorArray(uint newsize) {
|
|
|
|
|
delete m_cursorArray[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TraceScrollWidget::TraceScrollWidget(TQWidget* parent, const char* name) : TQScrollView(parent, name) {
|
|
|
|
|
m_traceWidget = new TraceWidget(viewport());
|
|
|
|
|
addChild(m_traceWidget);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TraceScrollWidget::~TraceScrollWidget() {
|
|
|
|
|
delete m_traceWidget;
|
|
|
|
|
m_traceWidget = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQSize TraceScrollWidget::sizeHint() const {
|
|
|
|
|
return m_traceWidget->sizeHint();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQSize TraceScrollWidget::minimumSizeHint() const {
|
|
|
|
|
return m_traceWidget->minimumSizeHint();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TraceWidget* TraceScrollWidget::traceWidget() {
|
|
|
|
|
return m_traceWidget;
|
|
|
|
|
}
|