예제 #1
0
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);
}
예제 #2
0
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);
}
예제 #3
0
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();
}