File indexing completed on 2024-05-12 03:47:29

0001 /*
0002     File                 : DatapickerPoint.h
0003     Project              : LabPlot
0004     Description          : Graphic Item for coordinate points of Datapicker
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2015 Ankit Wagadre <wagadre.ankit@gmail.com>
0007     SPDX-FileCopyrightText: 2015-2019 Alexander Semke <alexander.semke@web.de>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef DATAPICKERPOINT_H
0012 #define DATAPICKERPOINT_H
0013 
0014 #include "backend/datapicker/DatapickerCurve.h"
0015 #include "backend/lib/macros.h"
0016 
0017 #include <QGraphicsItem>
0018 
0019 // TODO: own file
0020 class ErrorBarItem : public QObject, public QGraphicsRectItem {
0021     Q_OBJECT
0022 
0023 public:
0024     enum class ErrorBarType { PlusDeltaX, MinusDeltaX, PlusDeltaY, MinusDeltaY };
0025 
0026     explicit ErrorBarItem(DatapickerPoint* parent = nullptr, ErrorBarType type = ErrorBarType::PlusDeltaX);
0027     void setRectSize(const qreal);
0028 
0029 public Q_SLOTS:
0030     void setPosition(QPointF);
0031 
0032 private:
0033     void initRect();
0034     void mouseReleaseEvent(QGraphicsSceneMouseEvent*) override;
0035     void hoverEnterEvent(QGraphicsSceneHoverEvent*) override;
0036     QVariant itemChange(GraphicsItemChange, const QVariant& value) override;
0037 
0038     QGraphicsLineItem* barLineItem;
0039     QRectF m_rect;
0040     ErrorBarType m_type;
0041     DatapickerPoint* m_parentItem;
0042 };
0043 
0044 class DatapickerPointPrivate;
0045 class DatapickerPoint : public AbstractAspect {
0046     Q_OBJECT
0047 
0048 public:
0049     explicit DatapickerPoint(const QString& name);
0050     ~DatapickerPoint() override;
0051 
0052     QIcon icon() const override;
0053     QMenu* createContextMenu() override;
0054     QGraphicsItem* graphicsItem() const;
0055     void setParentGraphicsItem(QGraphicsItem*);
0056     void setPrinting(bool);
0057     void initErrorBar(DatapickerCurve::Errors);
0058 
0059     void save(QXmlStreamWriter*) const override;
0060     bool load(XmlStreamReader*, bool preview) override;
0061 
0062     BASIC_D_ACCESSOR_DECL(QPointF, position, Position)
0063     BASIC_D_ACCESSOR_DECL(QPointF, plusDeltaXPos, PlusDeltaXPos)
0064     BASIC_D_ACCESSOR_DECL(QPointF, minusDeltaXPos, MinusDeltaXPos)
0065     BASIC_D_ACCESSOR_DECL(QPointF, plusDeltaYPos, PlusDeltaYPos)
0066     BASIC_D_ACCESSOR_DECL(QPointF, minusDeltaYPos, MinusDeltaYPos)
0067 
0068     void setIsReferencePoint(bool);
0069     bool isReferencePoint() const;
0070 
0071     typedef DatapickerPointPrivate Private;
0072 
0073 public Q_SLOTS:
0074     void retransform();
0075 
0076 protected:
0077     DatapickerPointPrivate* const d_ptr;
0078     DatapickerPoint(const QString& name, DatapickerPointPrivate* dd);
0079     static QPen selectedPen;
0080     static float selectedOpacity;
0081 
0082 private:
0083     Q_DECLARE_PRIVATE(DatapickerPoint)
0084     void init();
0085 
0086     QList<ErrorBarItem*> m_errorBarItemList;
0087 
0088 Q_SIGNALS:
0089     void positionChanged(QPointF);
0090     void plusDeltaXPosChanged(QPointF);
0091     void minusDeltaXPosChanged(QPointF);
0092     void plusDeltaYPosChanged(QPointF);
0093     void minusDeltaYPosChanged(QPointF);
0094     void pointSelected(const DatapickerPoint*);
0095 
0096     friend class DatapickerTest;
0097 };
0098 
0099 #endif