void PlotMatrix::alignVAxes( int col, int axis ) { if ( axis != QwtPlot::yLeft && axis != QwtPlot::yRight ) return; double maxExtent = 0; for ( int row = 0; row < numRows(); row++ ) { QwtPlot *p = plot( row, col ); if ( p ) { QwtScaleWidget *scaleWidget = p->axisWidget( axis ); QwtScaleDraw *sd = scaleWidget->scaleDraw(); sd->setMinimumExtent( 0.0 ); const double extent = sd->extent( scaleWidget->font() ); if ( extent > maxExtent ) maxExtent = extent; } } for ( int row = 0; row < numRows(); row++ ) { QwtPlot *p = plot( row, col ); if ( p ) { QwtScaleWidget *scaleWidget = p->axisWidget( axis ); scaleWidget->scaleDraw()->setMinimumExtent( maxExtent ); } } }
//--------------------------------------------------------------------------- void Plots::alignYAxes() { double maxExtent = 0; for ( size_t streamPos = 0; streamPos < m_fileInfoData->Stats.size(); streamPos++ ) if ( m_fileInfoData->Stats[streamPos] && m_plots[streamPos] ) { size_t type = m_fileInfoData->Stats[streamPos]->Type_Get(); for ( int group = 0; group < PerStreamType[type].CountOfGroups; group++ ) if (m_plots[streamPos][group] && m_plots[streamPos] ) { QwtScaleWidget *scaleWidget = m_plots[streamPos][group]->axisWidget( QwtPlot::yLeft ); QwtScaleDraw* scaleDraw = scaleWidget->scaleDraw(); scaleDraw->setMinimumExtent( 0.0 ); if ( m_plots[streamPos][group] && m_plots[streamPos][group]->isVisibleTo( this ) ) { const double extent = scaleDraw->extent( scaleWidget->font() ); maxExtent = qMax( extent, maxExtent ); } } maxExtent += 3; // margin } for ( size_t streamPos = 0; streamPos < m_fileInfoData->Stats.size(); streamPos++ ) if ( m_fileInfoData->Stats[streamPos] && m_plots[streamPos] ) { size_t type = m_fileInfoData->Stats[streamPos]->Type_Get(); for ( int group = 0; group < PerStreamType[type].CountOfGroups; group++ ) if (m_plots[streamPos][group]) { QwtScaleWidget *scaleWidget = m_plots[streamPos][group]->axisWidget( QwtPlot::yLeft ); scaleWidget->scaleDraw()->setMinimumExtent( maxExtent ); } } }
QPoint *ScalePicker::getLocation(double axisval) { QwtScaleWidget *scale = static_cast<QwtScaleWidget *>(this->parent()); const QwtScaleDraw *sd = scale->scaleDraw(); QRect rect = this->scaleRect(scale); int margin = 10; // 10 pixels tolerance rect.setRect(rect.x() - margin, rect.y() - margin, rect.width() + 2 * margin, rect.height() + 2 * margin); int point = sd->map().transform(axisval); QPoint *pos = new QPoint(); switch(scale->alignment()) { case QwtScaleDraw::LeftScale: { pos->setX(rect.x()); pos->setY(point); break; } case QwtScaleDraw::RightScale: { pos->setX(rect.x()); pos->setY(point); break; } case QwtScaleDraw::BottomScale: { pos->setX(point); pos->setY(rect.y()); break; } case QwtScaleDraw::TopScale: { pos->setX(point); pos->setY(rect.y()); break; } } return pos; }
virtual void rescale() { QwtScaleWidget *scaleWidget = plot()->axisWidget(yAxis()); QwtScaleDraw *sd = scaleWidget->scaleDraw(); int minExtent = 0; if ( zoomRectIndex() > 0 ) { // When scrolling in vertical direction // the plot is jumping in horizontal direction // because of the different widths of the labels // So we better use a fixed extent. minExtent = sd->spacing() + sd->maxTickLength() + 1; minExtent += sd->labelSize( scaleWidget->font(), c_rangeMax).width(); } sd->setMinimumExtent(minExtent); ScrollZoomer::rescale(); }
Plot::Plot (QString name, QWidget *p) : QwtPlot (p) { //TODO high = 0; low = 0; destroying = false; //PlotSettings _plotSettings.name = name; _plotSettings.spacing = 4; _plotSettings.high = 0; _plotSettings.low = 0; _plotSettings.startPos = -1; _plotSettings.endPos = -1; _plotSettings.selected = 0; _plotSettings.antiAlias = TRUE; _plotSettings.barLength = BarLength::_DAILY; _plotSettings.status = PlotStatus::_NONE; _plotSettings.info = TRUE; mpage = 360; //default setMinimumHeight(20); setCanvasBackground(QColor(Qt::black)); setMargin(0); enableAxis(QwtPlot::yRight, TRUE); enableAxis(QwtPlot::yLeft, FALSE); // add custom date scale drawing class to plot _dateScaleDraw = new PlotDateScaleDraw; setAxisScaleDraw(QwtPlot::xBottom, _dateScaleDraw); // add custom date scale drawing class to plot _plotScaleDraw = new PlotScaleDraw; setAxisScaleDraw(QwtPlot::yRight, _plotScaleDraw); _grid = new QwtPlotGrid; // _grid->enableXMin(FALSE); _grid->enableX(FALSE); _grid->enableYMin(FALSE); _grid->setMajPen(QPen(Qt::gray, 0, Qt::DotLine)); _grid->setMinPen(QPen(Qt::gray, 0 , Qt::DotLine)); _grid->setYAxis(QwtPlot::yRight); _grid->attach(this); // try to set the scale width to a sane size to keep plots aligned QwtScaleWidget *sw = axisWidget(QwtPlot::yRight); sw->scaleDraw()->setMinimumExtent(60); // setup the mouse events handler _picker = new PlotPicker(this); connect(_picker, SIGNAL(signalMouseMove(QPoint)), this, SLOT(mouseMove(QPoint))); connect(_picker, SIGNAL(signalMouseClick(int, QPoint)), this, SLOT(mouseClick(int, QPoint))); connect(_picker, SIGNAL(signalMouseDoubleClick(int, QPoint)), this, SLOT(mouseDoubleClick(int, QPoint))); // connect(_picker, SIGNAL(signalMouseRelease(int, QPoint)), this, SLOT(mouseRelease(int, QPoint))); // setup the context menu createMenu(); // grabGesture(Qt::TapAndHoldGesture); // grabGesture(Qt::SwipeGesture); _plotInfo = new PlotInfo; _plotInfo->attach(this); }
void PlotMatrix::alignAxes( int rowOrColumn, int axis ) { if ( axis == QwtPlot::yLeft || axis == QwtPlot::yRight ) { double maxExtent = 0; for ( int row = 0; row < numRows(); row++ ) { QwtPlot *p = plotAt( row, rowOrColumn ); if ( p ) { QwtScaleWidget *scaleWidget = p->axisWidget( axis ); QwtScaleDraw *sd = scaleWidget->scaleDraw(); sd->setMinimumExtent( 0.0 ); const double extent = sd->extent( scaleWidget->font() ); if ( extent > maxExtent ) maxExtent = extent; } } for ( int row = 0; row < numRows(); row++ ) { QwtPlot *p = plotAt( row, rowOrColumn ); if ( p ) { QwtScaleWidget *scaleWidget = p->axisWidget( axis ); scaleWidget->scaleDraw()->setMinimumExtent( maxExtent ); } } } else { double maxExtent = 0; for ( int col = 0; col < numColumns(); col++ ) { QwtPlot *p = plotAt( rowOrColumn, col ); if ( p ) { QwtScaleWidget *scaleWidget = p->axisWidget( axis ); QwtScaleDraw *sd = scaleWidget->scaleDraw(); sd->setMinimumExtent( 0.0 ); const double extent = sd->extent( scaleWidget->font() ); if ( extent > maxExtent ) maxExtent = extent; } } for ( int col = 0; col < numColumns(); col++ ) { QwtPlot *p = plotAt( rowOrColumn, col ); if ( p ) { QwtScaleWidget *scaleWidget = p->axisWidget( axis ); scaleWidget->scaleDraw()->setMinimumExtent( maxExtent ); } } } }