Files @ ed444750d8c4
Branch filter:

Location: tempo-plotter/src/zoomer.cpp - annotation

Hasan Yavuz ÖZDERYA
removed dependency to qtcolorwidgets library

color selection is implemented with a qpushbutton and qcolordialog
bdc33b5c53c6
d4a271f3d46a
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
c9d4060942ac
c9d4060942ac
bdc33b5c53c6
1e848e98efb7
bdc33b5c53c6
c9d4060942ac
c9d4060942ac
3dcdee629416
3dcdee629416
da3f4cd6026d
da3f4cd6026d
da3f4cd6026d
da3f4cd6026d
da3f4cd6026d
da3f4cd6026d
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
1e848e98efb7
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
60d04e19e663
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
3dcdee629416
e3e70c855836
e3e70c855836
e3e70c855836
e3e70c855836
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
d4a271f3d46a
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
754420135f22
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
4539c1ce7a85
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
4539c1ce7a85
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
c9d4060942ac
/*
  Copyright © 2017 Hasan Yavuz Özderya

  This file is part of serialplot.

  serialplot is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  serialplot is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with serialplot.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "zoomer.h"
#include <qwt_plot.h>
#include <QtDebug>

#include <QMouseEvent>

Zoomer::Zoomer(QWidget* widget, bool doReplot) :
    ScrollZoomer(widget)
{
    is_panning = false;

    setTrackerMode(AlwaysOn);

    // set corner widget between the scrollbars with default background color
    auto cornerWidget = new QWidget();
    auto bgColor = cornerWidget->palette().color(QPalette::Window).name();
    auto styleSheet = QString("background-color:%1;").arg(bgColor);
    cornerWidget->setStyleSheet(styleSheet);
    ScrollZoomer::setCornerWidget(cornerWidget);
}

void Zoomer::zoom(int up)
{
    ScrollZoomer::zoom(up);

    if(zoomRectIndex() == 0)
    {
        emit unzoomed();
    }
}

void Zoomer::zoom( const QRectF & rect)
{
    // set the zoom base when user zooms in to first level
    if (zoomRectIndex() == 0)
    {
        this->setZoomBase(false);
    }

    ScrollZoomer::zoom(rect);
}

QwtText Zoomer::trackerTextF(const QPointF& pos) const
{
    QwtText b = ScrollZoomer::trackerTextF(pos);

    const QPolygon pa = selection();
    if (!isActive() || pa.count() < 2)
    {
        return b;
    }

    const QRectF rect = invTransform(QRect(pa.first(), pa.last()).normalized());

    QString sizeText = QString(" [%1, %2]").\
        arg(rect.width(), 0, 'g', 4).\
        arg(rect.height(), 0, 'g', 4);

    b.setText(b.text() + sizeText);

    return b;
}

void Zoomer::drawRubberBand(QPainter* painter) const
{
    const double FILL_ALPHA = 0.2;

    QColor color = painter->pen().color();
    color.setAlphaF(FILL_ALPHA);
    painter->setBrush(color);

    ScrollZoomer::drawRubberBand(painter);
}

QRegion Zoomer::rubberBandMask() const
{
    const QPolygon pa = selection();
    if (pa.count() < 2)
    {
        return QRegion();
    }
    const QRect r = QRect(pa.first(), pa.last()).normalized().adjusted(0, 0, 1, 1);
    return QRegion(r);
}

void Zoomer::widgetMousePressEvent(QMouseEvent* mouseEvent)
{
    if (mouseEvent->modifiers() & Qt::ControlModifier)
    {
        is_panning = true;
        parentWidget()->setCursor(Qt::ClosedHandCursor);
        pan_point = invTransform(mouseEvent->pos());
    }
    else
    {
        ScrollZoomer::widgetMousePressEvent(mouseEvent);
    }
}

void Zoomer::widgetMouseMoveEvent(QMouseEvent* mouseEvent)
{
    if (is_panning)
    {
        auto cur_point = invTransform(mouseEvent->pos());
        auto delta = cur_point - pan_point;
        moveBy(-delta.x(), -delta.y());
        pan_point = invTransform(mouseEvent->pos());
    }
    else
    {
        ScrollZoomer::widgetMouseMoveEvent(mouseEvent);
    }
}

void Zoomer::widgetMouseReleaseEvent(QMouseEvent* mouseEvent)
{
    if (is_panning)
    {
        is_panning = false;
        parentWidget()->setCursor(Qt::CrossCursor);
    }
    else
    {
        ScrollZoomer::widgetMouseReleaseEvent(mouseEvent);
    }
}