bool ScrollZoomer::eventFilter(QObject* object, QEvent* event) { if (object == canvas()) { switch (event->type()) { case QEvent::Resize: { int left, top, right, bottom; canvas()->getContentsMargins(&left, &top, &right, &bottom); QRect rect; rect.setSize(static_cast<QResizeEvent*>(event)->size()); rect.adjust(left, top, -right, -bottom); layoutScrollBars(rect); break; } case QEvent::ChildRemoved: { const QObject* child = static_cast<QChildEvent*>(event)->child(); if (child == d_cornerWidget) d_cornerWidget = NULL; else if (child == d_hScrollData->scrollBar) d_hScrollData->scrollBar = NULL; else if (child == d_vScrollData->scrollBar) d_vScrollData->scrollBar = NULL; break; } default: break; } } return QwtPlotZoomer::eventFilter(object, event); }
bool ScrollZoomer::eventFilter(QObject *o, QEvent *e) { if (o == canvas()) { switch (e->type()) { case QEvent::Resize: { const int fw = ((QwtPlotCanvas *) canvas())->frameWidth(); QRect rect; rect.setSize(((QResizeEvent *) e)->size()); rect.setRect(rect.x() + fw, rect.y() + fw, rect.width() - 2 * fw, rect.height() - 2 * fw); layoutScrollBars(rect); break; } case QEvent::ChildRemoved: { const QObject *child = ((QChildEvent *) e)->child(); if (child == d_cornerWidget) d_cornerWidget = NULL; else if (child == d_hScrollData->scrollBar) d_hScrollData->scrollBar = NULL; else if (child == d_vScrollData->scrollBar) d_vScrollData->scrollBar = NULL; break; } default: break; } } return QwtPlotZoomer::eventFilter(o, e); }
void ScrollZoomer::updateScrollBars() { if ( !canvas() ) return; const int xAxis = QwtPlotZoomer::xAxis().pos; const int yAxis = QwtPlotZoomer::yAxis().pos; int xScrollBarAxis = xAxis; if ( hScrollBarPosition() == OppositeToScale ) xScrollBarAxis = oppositeAxis( xScrollBarAxis ); int yScrollBarAxis = yAxis; if ( vScrollBarPosition() == OppositeToScale ) yScrollBarAxis = oppositeAxis( yScrollBarAxis ); QwtPlotLayout *layout = plot()->plotLayout(); bool showHScrollBar = needScrollBar( Qt::Horizontal ); if ( showHScrollBar ) { ScrollBar *sb = scrollBar( Qt::Horizontal ); sb->setPalette( plot()->palette() ); sb->setInverted( !plot()->axisScaleDiv( xAxis ).isIncreasing() ); sb->setBase( zoomBase().left(), zoomBase().right() ); sb->moveSlider( zoomRect().left(), zoomRect().right() ); if ( !sb->isVisibleTo( canvas() ) ) { sb->show(); layout->setCanvasMargin( layout->canvasMargin( xScrollBarAxis ) + sb->extent(), xScrollBarAxis ); } } else { if ( horizontalScrollBar() ) { horizontalScrollBar()->hide(); layout->setCanvasMargin( layout->canvasMargin( xScrollBarAxis ) - horizontalScrollBar()->extent(), xScrollBarAxis ); } } bool showVScrollBar = needScrollBar( Qt::Vertical ); if ( showVScrollBar ) { ScrollBar *sb = scrollBar( Qt::Vertical ); sb->setPalette( plot()->palette() ); sb->setInverted( !plot()->axisScaleDiv( yAxis ).isIncreasing() ); sb->setBase( zoomBase().top(), zoomBase().bottom() ); sb->moveSlider( zoomRect().top(), zoomRect().bottom() ); if ( !sb->isVisibleTo( canvas() ) ) { sb->show(); layout->setCanvasMargin( layout->canvasMargin( yScrollBarAxis ) + sb->extent(), yScrollBarAxis ); } } else { if ( verticalScrollBar() ) { verticalScrollBar()->hide(); layout->setCanvasMargin( layout->canvasMargin( yScrollBarAxis ) - verticalScrollBar()->extent(), yScrollBarAxis ); } } if ( showHScrollBar && showVScrollBar ) { if ( d_cornerWidget == NULL ) { d_cornerWidget = new QWidget( canvas() ); d_cornerWidget->setAutoFillBackground( true ); d_cornerWidget->setPalette( plot()->palette() ); } d_cornerWidget->show(); } else { if ( d_cornerWidget ) d_cornerWidget->hide(); } layoutScrollBars( canvas()->contentsRect() ); plot()->updateLayout(); }