Add zoom box pan ability

master
Timothy Pearson 12 years ago
parent 34a27d54d6
commit 11d6b6dded

@ -370,7 +370,9 @@ void CursorData::moveNegMultiTicks() {
GraticuleWidget::GraticuleWidget(TraceWidget* parent, const char* name) : TQWidget(parent, name),
m_base(parent),
m_graticulePixmap(0) {
m_graticulePixmap(0),
leftMouseDown(false),
middleMouseDown(false) {
setBackgroundMode(NoBackground);
setSizePolicy(TQSizePolicy(TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding));
@ -453,12 +455,64 @@ void GraticuleWidget::resizeEvent(TQResizeEvent *) {
updateGraticule();
}
void GraticuleWidget::mousePressEvent(TQMouseEvent *) {
//
void GraticuleWidget::mousePressEvent(TQMouseEvent *e) {
if ((e->button() == TQt::LeftButton) && (!leftMouseDown) && (!middleMouseDown)) {
m_prevCursorRect = m_base->zoomCursorBox();
if (m_base->m_zoomBoxEnabled) {
leftMouseDown = true;
m_prevDownPos = e->pos();
}
}
else if ((e->button() == TQt::MidButton) && (!leftMouseDown) && (!middleMouseDown)) {
m_prevCursorRect = m_base->zoomCursorBox();
if (m_base->m_zoomBoxEnabled) {
middleMouseDown = true;
m_prevDownPos = e->pos();
}
}
}
void GraticuleWidget::mouseReleaseEvent(TQMouseEvent *) {
//
void GraticuleWidget::mouseReleaseEvent(TQMouseEvent *e) {
if (leftMouseDown) {
if (e->button() == TQt::LeftButton) {
leftMouseDown = false;
double x1 = m_prevDownPos.x();
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);
y1 = ((y1/height())*100.0);
x2 = ((x2/width())*100.0);
y2 = ((y2/height())*100.0);
m_base->setZoomCursorBox(TQRectF(x1, y1, x2, y2));
}
else {
// Reset original zoom box
m_base->setZoomCursorBox(m_prevCursorRect);
}
}
}
else if (middleMouseDown) {
if (e->button() == TQt::MidButton) {
middleMouseDown = false;
double x1 = m_prevDownPos.x();
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)) {
TQPoint diff = e->pos() - m_prevDownPos;
diff = TQPoint(diff.x()*(100.0/width()), diff.y()*(100.0/height()));
m_base->setZoomCursorBox(TQRectF(m_prevCursorRect.x()+diff.x(), m_prevCursorRect.y()+diff.y(), m_prevCursorRect.width()+diff.x(), m_prevCursorRect.height()+diff.y()));
}
else {
// Reset original zoom box
m_base->setZoomCursorBox(m_prevCursorRect);
}
}
}
}
void GraticuleWidget::mouseDoubleClickEvent(TQMouseEvent *) {
@ -486,6 +540,25 @@ void GraticuleWidget::mouseMoveEvent(TQMouseEvent *e) {
m_base->m_traceArray[trace]->graphStatusLabelInner->setText(m_base->m_traceArray[trace]->graphStatusLabel->text());
}
}
if (leftMouseDown) {
double x1 = m_prevDownPos.x();
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);
y1 = ((y1/height())*100.0);
x2 = ((x2/width())*100.0);
y2 = ((y2/height())*100.0);
m_base->setZoomCursorBox(TQRectF(x1, y1, x2, y2));
}
}
else if (middleMouseDown) {
TQPoint diff = e->pos() - m_prevDownPos;
diff = TQPoint(diff.x()*(100.0/width()), diff.y()*(100.0/height()));
m_base->setZoomCursorBox(TQRectF(m_prevCursorRect.x()+diff.x(), m_prevCursorRect.y()+diff.y(), m_prevCursorRect.width()+diff.x(), m_prevCursorRect.height()+diff.y()));
}
}
void GraticuleWidget::enterEvent(TQEvent *) {
@ -602,7 +675,7 @@ void TraceWidget::updateTraceText() {
offsetText = TQString(" +%1").arg(prettyFormat(fabs(offset), vertical_range, m_traceArray[trace]->verticalUnits));
}
}
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, horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(prettyFormat(m_traceArray[trace]->topEdge, vertical_range, m_traceArray[trace]->verticalUnits)).arg(prettyFormat(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]->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, horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(prettyFormat(m_traceArray[trace]->topEdge, vertical_range, m_traceArray[trace]->verticalUnits)).arg(prettyFormat(m_traceArray[trace]->rightEdge, horizontal_range, m_traceArray[trace]->horizontalUnits)).arg(prettyFormat(m_traceArray[trace]->bottomEdge, vertical_range, m_traceArray[trace]->verticalUnits)));
}
}
@ -765,6 +838,8 @@ void TraceWidget::setCursorPosition(uint cursorNumber, double position) {
m_cursorArray[cursorNumber]->position = position;
updateCursorText();
m_graticuleWidget->updateGraticule();
m_graticuleWidget->repaint(true);
}
bool TraceWidget::cursorEnabled(uint cursorNumber) {
@ -885,6 +960,118 @@ TQRectF TraceWidget::zoomBox() {
}
}
TQRectF TraceWidget::zoomCursorBox() {
uint i;
if ((m_cursorArray.count() < 4) || (!m_zoomBoxEnabled)) {
return TQRectF();
}
else {
// Find the first two horizontal and first two vertical cursors
// If two of each cannot be found, return TQRectF()
double horiz[2];
double vert[2];
int j = 0;
int k = 0;
for (i=0;i<m_cursorArray.count(); i++) {
if (m_cursorArray[i]->orientation == TQt::Horizontal) {
if (j<2) {
vert[j] = m_cursorArray[i]->position;
j++;
}
}
else {
if (k<2) {
horiz[k] = m_cursorArray[i]->position;
k++;
}
}
if ((j>1) && (k>1)) {
break;
}
}
if ((j>1) && (k>1)) {
return TQRectF(horiz[0], vert[0], horiz[1], vert[1]);
}
else {
return TQRectF();
}
}
}
void TraceWidget::setZoomCursorBox(const TQRectF rect) {
uint i;
TQRectF boundedRect = rect;
if (boundedRect.x() < 0.0) {
boundedRect.setX(0.0);
}
if (boundedRect.x() > 100.0) {
boundedRect.setX(100.0);
}
if (boundedRect.y() < 0.0) {
boundedRect.setY(0.0);
}
if (boundedRect.y() > 100.0) {
boundedRect.setY(100.0);
}
if (boundedRect.width() < 0.0) {
boundedRect.setWidth(0.0);
}
if (boundedRect.width() > 100.0) {
boundedRect.setWidth(100.0);
}
if (boundedRect.height() < 0.0) {
boundedRect.setHeight(0.0);
}
if (boundedRect.height() > 100.0) {
boundedRect.setHeight(100.0);
}
if ((m_cursorArray.count() < 4) || (!m_zoomBoxEnabled)) {
return;
}
else {
// Find the first two horizontal and first two vertical cursors
// If two of each cannot be found, return TQRectF()
CursorData* horiz[2];
CursorData* vert[2];
int j = 0;
int k = 0;
for (i=0;i<m_cursorArray.count(); i++) {
if (m_cursorArray[i]->orientation == TQt::Horizontal) {
if (j<2) {
vert[j] = m_cursorArray[i];
j++;
}
}
else {
if (k<2) {
horiz[k] = m_cursorArray[i];
k++;
}
}
if ((j>1) && (k>1)) {
break;
}
}
if ((j>1) && (k>1)) {
// Set cursors...
vert[0]->position = boundedRect.y();
vert[1]->position = boundedRect.height();
horiz[0]->position = boundedRect.x();
horiz[1]->position = boundedRect.width();
updateCursorText();
m_graticuleWidget->updateGraticule();
m_graticuleWidget->repaint(true);
return;
}
}
}
void TraceWidget::setZoomBoxEnabled(bool enabled) {
m_zoomBoxEnabled = enabled;
m_graticuleWidget->updateGraticule();

@ -144,6 +144,10 @@ class GraticuleWidget : public TQWidget
private:
TraceWidget* m_base;
TQPixmap* m_graticulePixmap;
bool leftMouseDown;
bool middleMouseDown;
TQPoint m_prevDownPos;
TQRectF m_prevCursorRect;
friend class TraceWidget;
friend class TraceData;
@ -192,6 +196,8 @@ class TraceWidget : public TQWidget
TQRectF zoomBox();
void setZoomBoxEnabled(bool enabled);
TQRectF zoomCursorBox();
void setZoomCursorBox(const TQRectF rect);
static TQString prettyFormat(double value, double rangeDetectValue, TQString baseUnits, unsigned int precision=3);

Loading…
Cancel
Save