Skip to content

File PlotRectangleZoom.hpp

File List > QAccelPlot > src > QAccelPlot > PlotRectangleZoom.hpp

Go to the documentation of this file

//
// SPDX-FileCopyrightText: 2026 Michal Grabarczyk
// SPDX-License-Identifier: GPL-3.0-only WITH Universal-FOSS-exception-1.0
//
// This file is also available under a separate commercial license.
// See COMMERCIAL-LICENSING.md for contact information.
//
#pragma once

#include "QAccelPlot/Border.hpp"
#include "QAccelPlot/theme/ColorPalette.hpp"

#include <QColor>
#include <QObject>
#include <QRectF>
#include <QtQml/qqmlregistration.h>

namespace QAccelPlot {

class PlotView;

class PlotRectangleZoom : public QObject {
    Q_OBJECT
    QML_ANONYMOUS
    Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
    Q_PROPERTY(Qt::KeyboardModifiers modifiers READ modifiers WRITE setModifiers NOTIFY modifiersChanged)
    Q_PROPERTY(qreal minimumSize READ minimumSize WRITE setMinimumSize NOTIFY minimumSizeChanged)
    Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor NOTIFY fillColorChanged)
    Q_PROPERTY(Border* border READ border CONSTANT)
    Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
    Q_PROPERTY(bool active READ active NOTIFY activeChanged)
    Q_PROPERTY(QRectF selectionRect READ selectionRect NOTIFY selectionRectChanged)

public:
    explicit PlotRectangleZoom(QObject* parent = nullptr);

    bool enabled() const;
    void setEnabled(bool value);

    Qt::KeyboardModifiers modifiers() const;
    void setModifiers(Qt::KeyboardModifiers value);

    qreal minimumSize() const;
    void setMinimumSize(qreal value);

    QColor fillColor() const;
    void setFillColor(const QColor& value);

    Border* border() const;

    bool isVisible() const;
    void setVisible(bool value);

    bool active() const;
    QRectF selectionRect() const;

signals:
    void enabledChanged();
    void modifiersChanged();
    void minimumSizeChanged();
    void fillColorChanged();
    void visibleChanged();
    void activeChanged();
    void selectionRectChanged();

private:
    friend class PlotView;
    void setSelection(bool active, const QRectF& rect);

    bool enabled_{false};
    Qt::KeyboardModifiers modifiers_{Qt::ControlModifier};
    qreal minimumSize_{6.0};
    QColor fillColor_{ColorPalette::dark().rectangleZoomFill};
    Border* border_{new Border{ColorPalette::dark().rectangleZoomBorder, 1.0, this}};
    bool visible_{true};
    bool active_{false};
    QRectF selectionRect_;
};

} // namespace QAccelPlot