63 #include <QPaintEvent>
88 , m_bMeasurement(false)
98 , m_pTimerToolDisplay(0)
99 , m_pTimerUpdate(new QTimer(this))
101 , m_pTimeCurrentDisplay(0)
104 ui.m_qLabel_Tool->hide();
107 m_vecTool.push_back(
"Freeze");
108 m_vecTool.push_back(
"Annotation");
111 connect(m_pTimerUpdate.data(), SIGNAL(timeout()),
this, SLOT(
update()));
113 m_pTimerUpdate->start(25);
118 setMouseTracking(
true);
128 RealTimeSampleArrayWidget::s_listSamplingRates.clear();
134 void RealTimeSampleArrayWidget::actualize()
136 m_dPosY = ui.m_qFrame->pos().y()+0.5*ui.m_qFrame->height();
140 m_fScaleFactor = ui.m_qFrame->height()/
static_cast<float>(m_pRTSA->getMaxValue()-m_pRTSA->getMinValue());
143 m_dMiddle = 0.5*(m_pRTSA->getMinValue()+m_pRTSA->getMaxValue())*m_fScaleFactor;
153 if((m_pRTSA->getSamplingRate() == 0))
157 RealTimeSampleArrayWidget::s_listSamplingRates << m_pRTSA->getSamplingRate();
161 foreach (
double value, s_listSamplingRates)
162 dMax = value > dMax ? value : dMax;
172 void RealTimeSampleArrayWidget::stopAnnotation()
174 m_bToolInUse = !m_bToolInUse;
180 void RealTimeSampleArrayWidget::maxValueChanged(
double maxValue)
182 m_pRTSA->setMaxValue(maxValue);
190 void RealTimeSampleArrayWidget::minValueChanged(
double minValue)
192 m_pRTSA->setMinValue(minValue);
202 if(m_pRTSA->getSampleArray().size() > 0)
205 double dPositionDifference = 0.0;
206 QVector<double> vecSamples = m_pRTSA->getSampleArray();
207 for(
unsigned char i = 0; i < vecSamples.size(); ++i)
209 dValue = vecSamples[i]*m_fScaleFactor - m_dMiddle;
210 dPositionDifference = m_dPosition - (m_dPosX+ui.m_qFrame->width());
212 if((dPositionDifference >= 0) || m_bStartFlag)
215 dPositionDifference = 0;
218 m_qPainterPath = QPainterPath();
219 m_dPosition = m_dPosX + dPositionDifference;
220 m_qPainterPath.moveTo(m_dPosition, m_dPosY-dValue);
222 m_bStartFlag =
false;
225 m_pTimeCurrentDisplay->setHMS(m_pTime->hour(),m_pTime->minute(),m_pTime->second(),m_pTime->msec());
230 m_qPainterPath.lineTo(m_dPosition, m_dPosY-dValue);
234 m_dPosition = m_dPosition + m_dSampleWidth;
238 qWarning() <<
"NewRealTimeSampleArrayWidget::update; getArraySize():" << m_pRTSA->getArraySize() <<
"getSampleArray():" << m_pRTSA->getSampleArray().size();
246 ui.m_qLabel_Caption->setText(m_pRTSA->getName());
250 m_dMinValue_init = m_pRTSA->getMinValue();
251 m_dMaxValue_init = m_pRTSA->getMaxValue();
255 m_dPosX = ui.m_qFrame->pos().x()+1;
256 m_dPosition = m_dPosX;
259 m_qPainterPath = QPainterPath();
262 m_pTimeCurrentDisplay = QSharedPointer<QTime>(
new QTime(0, 0));
272 QPainter painter(
this);
284 painter.setPen(QPen(Qt::gray, 1, Qt::DashLine));
291 double dNumPixelsX = m_pRTSA->getSamplingRate()/10.0f;
292 double dMinMaxDifference =
static_cast<double>(m_pRTSA->getMaxValue()-m_pRTSA->getMinValue());
293 double dActualPosX = 0.0;
294 unsigned short usNumOfGridsX = (
unsigned short)(ui.m_qFrame->width()/dNumPixelsX);
295 unsigned short usPosY = ui.m_qFrame->pos().y()+1;
296 unsigned short usPosX = ui.m_qFrame->pos().x()+1;
297 unsigned short usHeight = ui.m_qFrame->height()-2;
298 unsigned short usWidth = ui.m_qFrame->width()-2;
300 for(
unsigned short i = 1; i <= usNumOfGridsX; ++i)
302 dActualPosX = m_dPosX+i*dNumPixelsX;
303 painter.drawLine((
int)dActualPosX, usPosY, (
int)dActualPosX, usPosY+usHeight);
312 double exponent = (int)floor(log10(dMinMaxDifference))-1;
313 double dim = pow(10.0, exponent);
315 int NumOfLines = (int)floor(dMinMaxDifference/(dim*5));
317 double dDifferenceToFirstLine = (m_pRTSA->getMaxValue()-floor(m_pRTSA->getMaxValue()/dim)*dim);
319 double dNumPixelsY = usHeight/NumOfLines;
320 double dActualPosY = usPosY + dDifferenceToFirstLine * (usHeight/dMinMaxDifference);
322 for(
unsigned char i = 1; i <= NumOfLines; ++i)
324 painter.drawLine((
int)m_dPosX, (
int)dActualPosY, usWidth, (
int)dActualPosY);
325 dActualPosY += dNumPixelsY;
334 painter.setPen(QPen(Qt::blue, 1, Qt::SolidLine));
335 painter.setRenderHint(QPainter::Antialiasing);
345 painter.setPen(QPen(Qt::darkGray, 1, Qt::SolidLine));
346 painter.drawPath(m_qPainterPath_Freeze);
351 painter.drawPath(m_qPainterPath);
363 int iStartX = m_qPointMouseStartPosition.x();
365 int iEndY = m_qPointMouseEndPosition.y();
366 int iStartY = m_qPointMouseStartPosition.y();
369 int iPixelDifferenceY = abs(iStartY - iEndY);
371 double scale = (m_dMaxValue_init-m_dMinValue_init)/usHeight;
375 double changeValue = scale * iPixelDifferenceY;
377 if(changeValue*2 < m_dMaxValue_init - m_dMinValue_init)
379 minValueChanged(m_dMinValue_init + changeValue);
380 maxValueChanged(m_dMaxValue_init - changeValue);
384 double maxChange = (m_dMaxValue_init - m_dMinValue_init)*0.499999;
385 minValueChanged(m_dMinValue_init + maxChange);
386 maxValueChanged(m_dMaxValue_init - maxChange);
391 double changeValue = scale * iPixelDifferenceY*10;
393 minValueChanged(m_dMinValue_init - changeValue);
394 maxValueChanged(m_dMaxValue_init + changeValue);
397 double factor = (m_dMaxValue_init-m_dMinValue_init)/(m_pRTSA->getMaxValue()-m_pRTSA->getMinValue());
399 painter.setPen(QPen(Qt::darkCyan, 1, Qt::SolidLine));
400 painter.drawText(iStartX+8, iEndY, tr(
"Zoom %1x").arg(factor, 0,
'f', 2));
409 if(m_bPosition && m_pRTSA->getSamplingRate())
411 int iPosX = mapFromGlobal(QCursor::pos()).x();
413 int iPosY = mapFromGlobal(QCursor::pos()).y();
415 if(iPosX > usPosX && iPosX < (usPosX + usWidth) && iPosY > usPosY && iPosY < usPosY + usHeight )
418 painter.setPen(QPen(Qt::gray, 1, Qt::DashLine));
420 QPoint start(usPosX, iPosY);
421 QPoint end(usPosX + usWidth, iPosY);
423 painter.drawLine(start, end);
425 start.setX(iPosX); start.setY(usPosY);
426 end.setX(iPosX); end.setY(usPosY + usHeight);
427 painter.drawLine(start, end);
430 QTime t = m_pTimeCurrentDisplay->addMSecs((
int)(1000*(iPosX-usPosX)/(
float)m_pRTSA->getSamplingRate()));
431 float fAbsMag = m_pRTSA->getMinValue()+(usHeight-(iPosY-usPosY))*(dMinMaxDifference/usHeight);
434 painter.setPen(QPen(Qt::darkGray, 1, Qt::SolidLine));
436 painter.drawText(iPosX+8, iPosY-22, tr(
"%1").arg(t.toString(
"hh:mm:ss.zzz")));
437 painter.drawText(iPosX+8, iPosY-8, tr(
"%1%2").arg(fAbsMag, 0,
'e', 3).arg(m_pRTSA->getUnit()));
446 if(m_bMeasurement && m_pRTSA->getSamplingRate())
448 int iEndX = m_qPointMouseEndPosition.x();
449 int iStartX = m_qPointMouseStartPosition.x();
451 int iEndY = m_qPointMouseEndPosition.y();
452 int iStartY = m_qPointMouseStartPosition.y();
456 double iPixelDifferenceX = abs(iStartX - iEndX);
457 double iPixelDifferenceY = abs(iStartY - iEndY);
459 if(iPixelDifferenceX < 5 && iPixelDifferenceY < 5)
463 painter.setPen(QPen(Qt::darkCyan, 1, Qt::DashLine));
464 if(iPixelDifferenceX > iPixelDifferenceY)
470 QPoint start(iStartX, usPosY);
471 QPoint end(iStartX, usPosY+usHeight);
472 painter.drawLine(start, end);
474 start.setX(iEndX); start.setY(usPosY);
475 end.setX(iEndX); end.setY(usPosY+usHeight);
476 painter.drawLine(start, end);
485 float iTime = 1000.0f*(float)iPixelDifferenceX/(
float)m_pRTSA->getSamplingRate();
486 float iHz = 1000.0f/(float)iTime;
489 painter.setPen(QPen(Qt::darkCyan, 1, Qt::SolidLine));
491 painter.drawText(iEndX, iEndY-18, tr(
"%1ms").arg(iTime, 0,
'f', 2));
492 painter.drawText(iEndX, iEndY-4, tr(
"%1Hz").arg(iHz, 0,
'f', 2));
500 QPoint start(usPosX, iStartY);
501 QPoint end(usPosX+usWidth, iStartY);
502 painter.drawLine(start, end);
504 start.setX(usPosX); start.setY(iEndY);
505 end.setX(usPosX+usWidth); end.setY(iEndY);
506 painter.drawLine(start, end);
516 float fMagnitude = (float)iPixelDifferenceY * (dMinMaxDifference/usHeight) ;
519 painter.setPen(QPen(Qt::darkCyan, 1, Qt::SolidLine));
520 painter.drawText(iEndX+14, iEndY-8, tr(
"%1%2").arg(fMagnitude, 0,
'e', 3).arg(m_pRTSA->getUnit()));
538 m_qPointMouseStartPosition = m_qPointMouseEndPosition = mouseEvent->pos();
539 if(mouseEvent->button() == Qt::LeftButton)
541 m_bMeasurement =
true;
544 else if(mouseEvent->button() == Qt::RightButton)
556 if(m_bMeasurement || m_bScaling)
557 m_qPointMouseEndPosition = mouseEvent->pos();
565 m_bMeasurement =
false;
575 switch((Tool)m_ucToolIndex)
578 m_bFrozen = !m_bFrozen;
580 m_qPainterPath_Freeze = m_qPainterPath;
582 m_pTimeCurrentDisplay->setHMS(m_pTime->hour(),m_pTime->minute(),m_pTime->second(),m_pTime->msec());
589 m_bToolInUse = !m_bToolInUse;
600 if(wheelEvent->delta() < 0)
602 if(m_ucToolIndex == 0)
603 m_ucToolIndex = m_vecTool.size()-1;
609 if(m_ucToolIndex == m_vecTool.size()-1)
615 QString text = QString(
"%1/%2 Tool: %3").arg(m_ucToolIndex+1).arg(m_vecTool.size()).arg(m_vecTool[m_ucToolIndex]);
616 ui.m_qLabel_Tool->setText(text);
617 ui.m_qLabel_Tool->show();
619 m_pTimerToolDisplay = QSharedPointer<QTimer>(
new QTimer(
this));
621 connect( m_pTimerToolDisplay.data(), SIGNAL(timeout()), ui.m_qLabel_Tool, SLOT(hide()));
622 m_pTimerToolDisplay->start(2000);
631 QList<double> RealTimeSampleArrayWidget::s_listSamplingRates;
Contains the declaration of the NewRealTimeSampleArray class.
QSharedPointer< NewMeasurement > SPtr