|
|
|
@ -5,6 +5,7 @@
|
|
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <cmath>
|
|
|
|
|
#include <float.h>
|
|
|
|
|
|
|
|
|
|
#include <tqpixmap.h>
|
|
|
|
|
#include <tqpainter.h>
|
|
|
|
@ -274,6 +275,185 @@ TQSize TraceLabelLayout::minimumSize() const
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TraceCursorLabelLayout : public TQLayout
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TraceCursorLabelLayout(TraceWidget *traceWidget, TQWidget *parent, int spacing=-1) : TQLayout(parent, 0, spacing), m_traceWidget(traceWidget) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
TraceCursorLabelLayout(TraceWidget *traceWidget, TQLayout* parent, int spacing=-1) : TQLayout(parent, spacing), m_traceWidget(traceWidget) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
TraceCursorLabelLayout(TraceWidget *traceWidget, int spacing=-1) : TQLayout(spacing), m_traceWidget(traceWidget) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
~TraceCursorLabelLayout();
|
|
|
|
|
|
|
|
|
|
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 TraceCursorLabelLayoutIterator : public TQGLayoutIterator
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TraceCursorLabelLayoutIterator( 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 TraceCursorLabelLayout::iterator() {
|
|
|
|
|
return TQLayoutIterator(new TraceCursorLabelLayoutIterator(&list));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceCursorLabelLayout::addItem(TQLayoutItem *item) {
|
|
|
|
|
list.append( item );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceCursorLabelLayout::addWidget(TQWidget *w, int alignment) {
|
|
|
|
|
if (!w) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQWidgetItem *b = new TQWidgetItem(w);
|
|
|
|
|
b->setAlignment(alignment);
|
|
|
|
|
addItem( b );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TraceCursorLabelLayout::~TraceCursorLabelLayout() {
|
|
|
|
|
deleteAllItems();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceCursorLabelLayout::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]->leftCursorLabel == widget) {
|
|
|
|
|
currentTrace = m_traceWidget->m_traceArray[trace];
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQFontMetrics fm(currentTrace->leftCursorLabel->font());
|
|
|
|
|
int font_height = fm.boundingRect(currentTrace->leftCursorLabel->text()).height();
|
|
|
|
|
int font_vertical_offset = font_height/2;
|
|
|
|
|
|
|
|
|
|
int graticule_height = m_traceWidget->m_graticuleWidget->height();
|
|
|
|
|
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->leftCursorLabel->hide();
|
|
|
|
|
item->setGeometry(TQRect(rect.x(), 0, rect.width(), currentTrace->leftCursorLabel->sizeHint().height()));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
item->setGeometry(TQRect(rect.x(), y, rect.width(), currentTrace->leftCursorLabel->sizeHint().height()));
|
|
|
|
|
currentTrace->leftCursorLabel->show();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
currentTrace->leftCursorLabel->hide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceCursorLabelLayout::invalidate() {
|
|
|
|
|
setGeometry(geometry());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TQSize TraceCursorLabelLayout::sizeHint() const
|
|
|
|
|
{
|
|
|
|
|
TQSize size;
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
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 TraceCursorLabelLayout::minimumSize() const
|
|
|
|
|
{
|
|
|
|
|
TQSize minSize;
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
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) {
|
|
|
|
|
color = TQColor(0, 255, 0);
|
|
|
|
|
numberOfSamples = 0;
|
|
|
|
@ -289,6 +469,7 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p
|
|
|
|
|
horizontalUnits = i18n("Units");
|
|
|
|
|
verticalUnits = i18n("Units");
|
|
|
|
|
m_digitalTraceDrawing = false;
|
|
|
|
|
m_suppressNameInCursorText = false;
|
|
|
|
|
enabled = false;
|
|
|
|
|
|
|
|
|
|
if (labelParent) {
|
|
|
|
@ -310,6 +491,15 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p
|
|
|
|
|
leftLabel->setFont(font);
|
|
|
|
|
leftLabel->setText("<qt></qt>");
|
|
|
|
|
leftLabel->hide();
|
|
|
|
|
leftCursorLabel = new TQLabel(labelParent);
|
|
|
|
|
leftCursorLabel->setPaletteBackgroundColor(labelParent->paletteBackgroundColor());
|
|
|
|
|
leftCursorLabel->setPaletteForegroundColor(color);
|
|
|
|
|
leftCursorLabel->setAlignment(TQt::AlignLeft|TQt::AlignVCenter|TQt::SingleLine);
|
|
|
|
|
font = leftCursorLabel->font();
|
|
|
|
|
font.setPointSize(font.pointSize()-1);
|
|
|
|
|
leftCursorLabel->setFont(font);
|
|
|
|
|
leftCursorLabel->setText("<qt></qt>");
|
|
|
|
|
leftCursorLabel->hide();
|
|
|
|
|
graphStatusLabel = new TQLabel(labelParent);
|
|
|
|
|
graphStatusLabel->setPaletteBackgroundColor(labelParent->paletteBackgroundColor());
|
|
|
|
|
graphStatusLabel->setPaletteForegroundColor(color);
|
|
|
|
@ -366,6 +556,7 @@ TraceData::TraceData(TraceWidget* parent, TQWidget* labelParent) : TQObject(), p
|
|
|
|
|
else {
|
|
|
|
|
paramLabel = NULL;
|
|
|
|
|
leftLabel = NULL;
|
|
|
|
|
leftCursorLabel = NULL;
|
|
|
|
|
graphStatusLabel = NULL;
|
|
|
|
|
graphStatusLabelInner = NULL;
|
|
|
|
|
singleIncrBtn = NULL;
|
|
|
|
@ -1154,6 +1345,8 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent,
|
|
|
|
|
m_horizScrollBar(0),
|
|
|
|
|
m_useAbsoluteHorizontalRange(true),
|
|
|
|
|
m_showLeftTraceInfoArea(false),
|
|
|
|
|
m_showLeftCursorInfoArea(false),
|
|
|
|
|
m_traceInfoCursor(0),
|
|
|
|
|
m_leftTraceInfoLabelsFit(false),
|
|
|
|
|
m_leftTraceInfoAreaFitSpacing(0),
|
|
|
|
|
m_minimumPixelsPerHorizDiv(0) {
|
|
|
|
@ -1171,6 +1364,7 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent,
|
|
|
|
|
m_infoLabelLayout = new TQGridLayout;
|
|
|
|
|
m_cursorLabelLayout = new TQGridLayout;
|
|
|
|
|
m_traceLeftLabelLayout = new TraceLabelLayout(this);
|
|
|
|
|
m_traceLeftCursorLabelLayout = new TraceCursorLabelLayout(this);
|
|
|
|
|
m_statusLabelLayout = new TQVBoxLayout;
|
|
|
|
|
m_statusLabelLayoutInner = new TQVBoxLayout;
|
|
|
|
|
m_primaryLayout->addLayout(m_traceLabelLayout, 255, 1);
|
|
|
|
@ -1181,6 +1375,7 @@ TraceWidget::TraceWidget(TQWidget* parent, const char* name) : TQWidget(parent,
|
|
|
|
|
m_rightPaneLayout->addLayout(m_cursorLabelLayout, 0, 1);
|
|
|
|
|
m_rightPaneLayout->addLayout(m_infoLabelLayout, 1, 1);
|
|
|
|
|
m_leftPaneLayout->addLayout(m_traceLeftLabelLayout, 0, 1);
|
|
|
|
|
m_leftPaneLayout->addLayout(m_traceLeftCursorLabelLayout, 0, 2);
|
|
|
|
|
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);
|
|
|
|
@ -1261,6 +1456,16 @@ void TraceWidget::setDigitalTraceMode(uint traceNumber, bool enabled, bool defer
|
|
|
|
|
VERIFY_TRACE_ARRAY_SIZE
|
|
|
|
|
|
|
|
|
|
m_traceArray[traceNumber]->m_digitalTraceDrawing = enabled;
|
|
|
|
|
if (!deferUpdate) {
|
|
|
|
|
m_graticuleWidget->updateGraticule();
|
|
|
|
|
updateTraceText();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::suppressNameInCursorText(uint traceNumber, bool suppress, bool deferUpdate) {
|
|
|
|
|
VERIFY_TRACE_ARRAY_SIZE
|
|
|
|
|
|
|
|
|
|
m_traceArray[traceNumber]->m_suppressNameInCursorText = suppress;
|
|
|
|
|
|
|
|
|
|
if (!deferUpdate) {
|
|
|
|
|
m_graticuleWidget->updateGraticule();
|
|
|
|
@ -1316,6 +1521,8 @@ void TraceWidget::updateTraceText() {
|
|
|
|
|
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]->leftCursorLabel->setPaletteBackgroundColor(paletteBackgroundColor());
|
|
|
|
|
m_traceArray[trace]->leftCursorLabel->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());
|
|
|
|
@ -1358,41 +1565,72 @@ void TraceWidget::updateCursorText() {
|
|
|
|
|
// If this is a vertical cursor, list the horizontal positions for all channels
|
|
|
|
|
|
|
|
|
|
for (uint trace=0;trace<m_traceArray.count();trace++) {
|
|
|
|
|
if ((m_traceArray[trace]->enabled) && (m_cursorArray[cursor]->activeTraceLabelList.contains(trace) > 0)) {
|
|
|
|
|
double horizontal_range = (m_traceArray[trace]->rightEdge-m_traceArray[trace]->leftEdge);
|
|
|
|
|
double vertical_range = (m_traceArray[trace]->bottomEdge-m_traceArray[trace]->topEdge);
|
|
|
|
|
|
|
|
|
|
if (m_cursorArray[cursor]->orientation == TQt::Horizontal) {
|
|
|
|
|
double realCursorPosition = (m_traceArray[trace]->topEdge+((m_cursorArray[cursor]->position/100.0)*vertical_range)-m_traceArray[trace]->offset);
|
|
|
|
|
TQString deltaText;
|
|
|
|
|
if (cursor >= m_zoomCursorStartIndex) {
|
|
|
|
|
for (uint cursor2=m_zoomCursorStartIndex;cursor2<m_cursorArray.count();cursor2++) {
|
|
|
|
|
if (cursor2 != cursor) {
|
|
|
|
|
if (m_cursorArray[cursor2]->orientation == m_cursorArray[cursor]->orientation) {
|
|
|
|
|
double realSecondaryCursorPosition = (m_traceArray[trace]->topEdge+((m_cursorArray[cursor2]->position/100.0)*vertical_range)-m_traceArray[trace]->offset);
|
|
|
|
|
deltaText = trUtf8("Δ") + prettyFormat(fabs(realCursorPosition-realSecondaryCursorPosition), vertical_range, m_traceArray[trace]->verticalUnits);
|
|
|
|
|
break;
|
|
|
|
|
if (m_traceArray[trace]->enabled) {
|
|
|
|
|
if (m_cursorArray[cursor]->activeTraceLabelList.contains(trace) > 0) {
|
|
|
|
|
double horizontal_range = (m_traceArray[trace]->rightEdge-m_traceArray[trace]->leftEdge);
|
|
|
|
|
double vertical_range = (m_traceArray[trace]->bottomEdge-m_traceArray[trace]->topEdge);
|
|
|
|
|
|
|
|
|
|
if (m_cursorArray[cursor]->orientation == TQt::Horizontal) {
|
|
|
|
|
double realCursorPosition = (m_traceArray[trace]->topEdge+((m_cursorArray[cursor]->position/100.0)*vertical_range)-m_traceArray[trace]->offset);
|
|
|
|
|
TQString deltaText;
|
|
|
|
|
if (cursor >= m_zoomCursorStartIndex) {
|
|
|
|
|
for (uint cursor2=m_zoomCursorStartIndex;cursor2<m_cursorArray.count();cursor2++) {
|
|
|
|
|
if (cursor2 != cursor) {
|
|
|
|
|
if (m_cursorArray[cursor2]->orientation == m_cursorArray[cursor]->orientation) {
|
|
|
|
|
double realSecondaryCursorPosition = (m_traceArray[trace]->topEdge+((m_cursorArray[cursor2]->position/100.0)*vertical_range)-m_traceArray[trace]->offset);
|
|
|
|
|
deltaText = trUtf8("Δ") + prettyFormat(fabs(realCursorPosition-realSecondaryCursorPosition), vertical_range, m_traceArray[trace]->verticalUnits);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
cursorText.append(TQString("<br>%1: %2%3").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, vertical_range, m_traceArray[trace]->verticalUnits)).arg(deltaText));
|
|
|
|
|
}
|
|
|
|
|
cursorText.append(TQString("<br>%1: %2%3").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, vertical_range, m_traceArray[trace]->verticalUnits)).arg(deltaText));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
double realCursorPosition = (m_traceArray[trace]->leftEdge+((m_cursorArray[cursor]->position/100.0)*horizontal_range));
|
|
|
|
|
TQString deltaText;
|
|
|
|
|
if (cursor >= m_zoomCursorStartIndex) {
|
|
|
|
|
for (uint cursor2=m_zoomCursorStartIndex;cursor2<m_cursorArray.count();cursor2++) {
|
|
|
|
|
if (cursor2 != cursor) {
|
|
|
|
|
if (m_cursorArray[cursor2]->orientation == m_cursorArray[cursor]->orientation) {
|
|
|
|
|
double realSecondaryCursorPosition = (m_traceArray[trace]->leftEdge+((m_cursorArray[cursor2]->position/100.0)*horizontal_range));
|
|
|
|
|
deltaText = trUtf8("Δ") + prettyFormat(fabs(realCursorPosition-realSecondaryCursorPosition), horizontal_range, m_traceArray[trace]->horizontalUnits);
|
|
|
|
|
break;
|
|
|
|
|
else {
|
|
|
|
|
double realCursorPosition = (m_traceArray[trace]->leftEdge+((m_cursorArray[cursor]->position/100.0)*horizontal_range));
|
|
|
|
|
TQString deltaText;
|
|
|
|
|
if (cursor >= m_zoomCursorStartIndex) {
|
|
|
|
|
for (uint cursor2=m_zoomCursorStartIndex;cursor2<m_cursorArray.count();cursor2++) {
|
|
|
|
|
if (cursor2 != cursor) {
|
|
|
|
|
if (m_cursorArray[cursor2]->orientation == m_cursorArray[cursor]->orientation) {
|
|
|
|
|
double realSecondaryCursorPosition = (m_traceArray[trace]->leftEdge+((m_cursorArray[cursor2]->position/100.0)*horizontal_range));
|
|
|
|
|
deltaText = trUtf8("Δ") + prettyFormat(fabs(realCursorPosition-realSecondaryCursorPosition), horizontal_range, m_traceArray[trace]->horizontalUnits);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (m_traceArray[trace]->m_suppressNameInCursorText) {
|
|
|
|
|
cursorText.append(TQString("<br>%2%3").arg(prettyFormat(realCursorPosition, (m_useAbsoluteHorizontalRange)?m_traceArray[trace]->rightEdge:horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(deltaText));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
cursorText.append(TQString("<br>%1: %2%3").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, (m_useAbsoluteHorizontalRange)?m_traceArray[trace]->rightEdge:horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(deltaText));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (cursor == m_traceInfoCursor) {
|
|
|
|
|
double horizontal_range = (m_traceArray[trace]->rightEdge-m_traceArray[trace]->leftEdge);
|
|
|
|
|
double realCursorPosition = (m_traceArray[trace]->leftEdge+((m_cursorArray[cursor]->position/100.0)*horizontal_range));
|
|
|
|
|
|
|
|
|
|
// Find closest data point
|
|
|
|
|
unsigned int n;
|
|
|
|
|
unsigned int closest = 0;
|
|
|
|
|
double diff;
|
|
|
|
|
double distance = DBL_MAX;
|
|
|
|
|
for (n=0; n<m_traceArray[trace]->numberOfSamples; n++) {
|
|
|
|
|
diff = fabs(m_traceArray[trace]->positionArray[n] - realCursorPosition);
|
|
|
|
|
if (diff < distance) {
|
|
|
|
|
distance = diff;
|
|
|
|
|
closest = n;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (m_traceArray[trace]->m_digitalTraceDrawing) {
|
|
|
|
|
m_traceArray[trace]->leftCursorLabel->setText(TQString("<qt><nobr>%2</qt>").arg((m_traceArray[trace]->sampleArray[closest]==0)?"0":"1"));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
m_traceArray[trace]->leftCursorLabel->setText(TQString("<qt><nobr>%2</qt>").arg(TraceWidget::prettyFormat(m_traceArray[trace]->sampleArray[closest], m_traceArray[trace]->sampleArray[closest], m_traceArray[trace]->verticalUnits)));
|
|
|
|
|
}
|
|
|
|
|
cursorText.append(TQString("<br>%1: %2%3").arg(m_traceArray[trace]->traceName).arg(prettyFormat(realCursorPosition, (m_useAbsoluteHorizontalRange)?m_traceArray[trace]->rightEdge:horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(deltaText));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1415,6 +1653,7 @@ void TraceWidget::setSamples(uint traceNumber, TQDoubleArray& tqda, bool deferUp
|
|
|
|
|
m_traceArray[traceNumber]->numberOfSamples = tqda.size();
|
|
|
|
|
|
|
|
|
|
if (!deferUpdate) {
|
|
|
|
|
updateCursorText();
|
|
|
|
|
m_graticuleWidget->repaint(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1434,6 +1673,7 @@ void TraceWidget::setPositions(uint traceNumber, TQDoubleArray& tqda, bool defer
|
|
|
|
|
m_traceArray[traceNumber]->rightEdgeIndex = -1;
|
|
|
|
|
|
|
|
|
|
if (!deferUpdate) {
|
|
|
|
|
updateCursorText();
|
|
|
|
|
m_graticuleWidget->repaint(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1468,6 +1708,7 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, TextDisplayTyp
|
|
|
|
|
if (showText == FullText) {
|
|
|
|
|
m_traceArray[traceNumber]->paramLabel->show();
|
|
|
|
|
m_traceArray[traceNumber]->leftLabel->show();
|
|
|
|
|
m_traceArray[traceNumber]->leftCursorLabel->show();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabel->show();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabelInner->hide();
|
|
|
|
|
m_traceArray[traceNumber]->singleIncrBtn->show();
|
|
|
|
@ -1478,6 +1719,7 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, TextDisplayTyp
|
|
|
|
|
else {
|
|
|
|
|
m_traceArray[traceNumber]->paramLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->leftLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->leftCursorLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabel->hide();
|
|
|
|
|
if (showText == SummaryText) {
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabelInner->show();
|
|
|
|
@ -1494,6 +1736,7 @@ void TraceWidget::setTraceEnabled(uint traceNumber, bool enabled, TextDisplayTyp
|
|
|
|
|
else {
|
|
|
|
|
m_traceArray[traceNumber]->paramLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->leftLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->leftCursorLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabel->hide();
|
|
|
|
|
m_traceArray[traceNumber]->graphStatusLabelInner->hide();
|
|
|
|
|
m_traceArray[traceNumber]->singleIncrBtn->hide();
|
|
|
|
@ -1665,6 +1908,13 @@ void TraceWidget::setCursorOrientation(uint cursorNumber, TQt::Orientation orien
|
|
|
|
|
updateCursorText();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::setTraceInfoCursor(uint cursorNumber) {
|
|
|
|
|
VERIFY_CURSOR_ARRAY_SIZE
|
|
|
|
|
|
|
|
|
|
m_traceInfoCursor = cursorNumber;
|
|
|
|
|
updateCursorText();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::setNumberOfTraces(uint traceNumber) {
|
|
|
|
|
resizeTraceArray(traceNumber);
|
|
|
|
|
}
|
|
|
|
@ -1873,14 +2123,28 @@ void TraceWidget::showLeftTraceInfoArea(bool show) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::showLeftCursorTraceInfoArea(bool show) {
|
|
|
|
|
m_showLeftCursorInfoArea = show;
|
|
|
|
|
for (uint i=0;i<m_traceArray.count();i++) {
|
|
|
|
|
if (m_showLeftCursorInfoArea) {
|
|
|
|
|
m_traceArray[i]->leftCursorLabel->show();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
m_traceArray[i]->leftCursorLabel->hide();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::fitLeftTraceInfoArea(bool fit) {
|
|
|
|
|
m_leftTraceInfoLabelsFit = fit;
|
|
|
|
|
m_traceLeftLabelLayout->invalidate();
|
|
|
|
|
m_traceLeftCursorLabelLayout->invalidate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::setLeftTraceInfoAreaFitSpacing(int spacing) {
|
|
|
|
|
m_leftTraceInfoAreaFitSpacing = spacing;
|
|
|
|
|
m_traceLeftLabelLayout->invalidate();
|
|
|
|
|
m_traceLeftCursorLabelLayout->invalidate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TraceWidget::setMinimumPixelsPerHorizDiv(unsigned int pixels) {
|
|
|
|
@ -2009,6 +2273,7 @@ void TraceWidget::processChangedOffset(double offset) {
|
|
|
|
|
}
|
|
|
|
|
if (tracenumber >= 0) {
|
|
|
|
|
m_traceLeftLabelLayout->invalidate();
|
|
|
|
|
m_traceLeftCursorLabelLayout->invalidate();
|
|
|
|
|
emit(offsetChanged(tracenumber, offset));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -2049,6 +2314,7 @@ void TraceWidget::resizeTraceArray(uint newsize) {
|
|
|
|
|
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_traceLeftCursorLabelLayout->addWidget(m_traceArray[i]->leftCursorLabel, TQt::AlignTop);
|
|
|
|
|
m_statusLabelLayout->insertWidget(i, m_traceArray[i]->graphStatusLabel, TQt::AlignTop);
|
|
|
|
|
m_statusLabelLayoutInner->insertWidget(i, m_traceArray[i]->graphStatusLabelInner);
|
|
|
|
|
}
|
|
|
|
@ -2064,6 +2330,7 @@ void TraceWidget::resizeTraceArray(uint newsize) {
|
|
|
|
|
m_traceLabelLayout->remove(m_traceArray[i]->posSetBtn);
|
|
|
|
|
m_traceLabelLayout->remove(m_traceArray[i]->singleDecrBtn);
|
|
|
|
|
m_traceLeftLabelLayout->remove(m_traceArray[i]->leftLabel);
|
|
|
|
|
m_traceLeftCursorLabelLayout->remove(m_traceArray[i]->leftCursorLabel);
|
|
|
|
|
m_statusLabelLayout->remove(m_traceArray[i]->graphStatusLabel);
|
|
|
|
|
m_statusLabelLayoutInner->remove(m_traceArray[i]->graphStatusLabelInner);
|
|
|
|
|
}
|
|
|
|
|