File indexing completed on 2024-05-12 15:26:41

0001 /***************************************************************************
0002     File                 : DatapickerCurve.h
0003     Project              : LabPlot
0004     Description          : container for Curve-Point and Datasheet/Spreadsheet
0005                            of datapicker
0006     --------------------------------------------------------------------
0007     Copyright            : (C) 2015 by Ankit Wagadre (wagadre.ankit@gmail.com)
0008     Copyright            : (C) 2015-2019 Alexander Semke (alexander.semke@web.de)
0009  ***************************************************************************/
0010 /***************************************************************************
0011  *                                                                         *
0012  *  This program is free software; you can redistribute it and/or modify   *
0013  *  it under the terms of the GNU General Public License as published by   *
0014  *  the Free Software Foundation; either version 2 of the License, or      *
0015  *  (at your option) any later version.                                    *
0016  *                                                                         *
0017  *  This program is distributed in the hope that it will be useful,        *
0018  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
0019  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
0020  *  GNU General Public License for more details.                           *
0021  *                                                                         *
0022  *   You should have received a copy of the GNU General Public License     *
0023  *   along with this program; if not, write to the Free Software           *
0024  *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
0025  *   Boston, MA  02110-1301  USA                                           *
0026  *                                                                         *
0027  ***************************************************************************/
0028 
0029 #ifndef DATAPICKERCURVE_H
0030 #define DATAPICKERCURVE_H
0031 
0032 #include "backend/core/AbstractAspect.h"
0033 #include "backend/lib/macros.h"
0034 #include "backend/datapicker/DatapickerImage.h"
0035 #include "backend/worksheet/plots/cartesian/Symbol.h"
0036 
0037 class DatapickerPoint;
0038 class QAction;
0039 class DatapickerCurvePrivate;
0040 class Column;
0041 class Spreadsheet;
0042 class AbstractColumn;
0043 
0044 class DatapickerCurve: public AbstractAspect {
0045     Q_OBJECT
0046 
0047 public:
0048     explicit DatapickerCurve(const QString&);
0049     ~DatapickerCurve() override;
0050 
0051     enum class ErrorType {NoError, SymmetricError, AsymmetricError};
0052     struct Errors {
0053         ErrorType x;
0054         ErrorType y;
0055     };
0056 
0057     QIcon icon() const override;
0058     void setPrinting(bool);
0059     void setSelectedInView(bool);
0060     void addDatasheet(DatapickerImage::GraphType);
0061     void updatePoints();
0062     void updatePoint(const DatapickerPoint*);
0063 
0064     BASIC_D_ACCESSOR_DECL(Errors, curveErrorTypes, CurveErrorTypes)
0065     BASIC_D_ACCESSOR_DECL(Symbol::Style, pointStyle, PointStyle)
0066     BASIC_D_ACCESSOR_DECL(qreal, pointOpacity, PointOpacity)
0067     BASIC_D_ACCESSOR_DECL(qreal, pointRotationAngle, PointRotationAngle)
0068     BASIC_D_ACCESSOR_DECL(qreal, pointSize, PointSize)
0069     CLASS_D_ACCESSOR_DECL(QBrush, pointBrush, PointBrush)
0070     CLASS_D_ACCESSOR_DECL(QPen, pointPen, PointPen)
0071     BASIC_D_ACCESSOR_DECL(qreal, pointErrorBarSize, PointErrorBarSize)
0072     CLASS_D_ACCESSOR_DECL(QBrush, pointErrorBarBrush, PointErrorBarBrush)
0073     CLASS_D_ACCESSOR_DECL(QPen, pointErrorBarPen, PointErrorBarPen)
0074     BASIC_D_ACCESSOR_DECL(bool, pointVisibility, PointVisibility)
0075 
0076     POINTER_D_ACCESSOR_DECL(AbstractColumn, posXColumn, PosXColumn)
0077     QString& posXColumnPath() const;
0078     POINTER_D_ACCESSOR_DECL(AbstractColumn, posYColumn, PosYColumn)
0079     QString& posYColumnPath() const;
0080     POINTER_D_ACCESSOR_DECL(AbstractColumn, posZColumn, PosZColumn)
0081     QString& posZColumnPath() const;
0082     POINTER_D_ACCESSOR_DECL(AbstractColumn, plusDeltaXColumn, PlusDeltaXColumn)
0083     QString& plusDeltaXColumnPath() const;
0084     POINTER_D_ACCESSOR_DECL(AbstractColumn, minusDeltaXColumn, MinusDeltaXColumn)
0085     QString& minusDeltaXColumnPath() const;
0086     POINTER_D_ACCESSOR_DECL(AbstractColumn, plusDeltaYColumn, PlusDeltaYColumn)
0087     QString& plusDeltaYColumnPath() const;
0088     POINTER_D_ACCESSOR_DECL(AbstractColumn, minusDeltaYColumn, MinusDeltaYColumn)
0089     QString& minusDeltaYColumnPath() const;
0090 
0091     void save(QXmlStreamWriter*) const override;
0092     bool load(XmlStreamReader*, bool preview) override;
0093 
0094     typedef DatapickerCurvePrivate Private;
0095 
0096 protected:
0097     DatapickerCurve(const QString& name, DatapickerCurvePrivate* dd);
0098     DatapickerCurvePrivate* const d_ptr;
0099 
0100 private:
0101     Q_DECLARE_PRIVATE(DatapickerCurve)
0102     void init();
0103     void initAction();
0104     Column* appendColumn(const QString&);
0105 
0106     Spreadsheet* m_datasheet{nullptr};
0107 
0108 signals:
0109     void curveErrorTypesChanged(const DatapickerCurve::Errors&);
0110     void posXColumnChanged(const AbstractColumn*);
0111     void posYColumnChanged(const AbstractColumn*);
0112     void posZColumnChanged(const AbstractColumn*);
0113     void plusDeltaXColumnChanged(const AbstractColumn*);
0114     void minusDeltaXColumnChanged(const AbstractColumn*);
0115     void plusDeltaYColumnChanged(const AbstractColumn*);
0116     void minusDeltaYColumnChanged(const AbstractColumn*);
0117     void pointStyleChanged(Symbol::Style);
0118     void pointSizeChanged(qreal);
0119     void pointRotationAngleChanged(qreal);
0120     void pointOpacityChanged(qreal);
0121     void pointBrushChanged(QBrush);
0122     void pointPenChanged(const QPen&);
0123     void pointErrorBarSizeChanged(qreal);
0124     void pointErrorBarBrushChanged(QBrush);
0125     void pointErrorBarPenChanged(const QPen&);
0126     void pointVisibilityChanged(bool);
0127 };
0128 #endif // DATAPICKERCURVE_H