File indexing completed on 2024-05-12 03:48:20

0001 /*
0002     File                 : Line.h
0003     Project              : LabPlot
0004     Description          : Line
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2022 Alexander Semke <alexander.semke@web.de>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #ifndef LINE_H
0011 #define LINE_H
0012 
0013 #include "backend/core/AbstractAspect.h"
0014 #include "backend/lib/macros.h"
0015 #include "backend/worksheet/plots/cartesian/Histogram.h"
0016 #include "backend/worksheet/plots/cartesian/XYCurve.h"
0017 
0018 class LinePrivate;
0019 class KConfigGroup;
0020 
0021 class Line : public AbstractAspect {
0022     Q_OBJECT
0023 
0024 public:
0025     explicit Line(const QString& name);
0026     ~Line() override;
0027 
0028     void setPrefix(const QString&);
0029     const QString& prefix() const;
0030     void setCreateXmlElement(bool);
0031     void init(const KConfigGroup&);
0032 
0033     void save(QXmlStreamWriter*) const override;
0034     bool load(XmlStreamReader*, bool preview) override;
0035     void loadThemeConfig(const KConfigGroup&);
0036     void loadThemeConfig(const KConfigGroup&, const QColor&);
0037     void saveThemeConfig(KConfigGroup&) const;
0038 
0039     // histogram specific parameters
0040     BASIC_D_ACCESSOR_DECL(bool, histogramLineTypeAvailable, HistogramLineTypeAvailable)
0041     BASIC_D_ACCESSOR_DECL(Histogram::LineType, histogramLineType, HistogramLineType)
0042 
0043     // drop line specific parameters for XYCurve
0044     BASIC_D_ACCESSOR_DECL(XYCurve::DropLineType, dropLineType, DropLineType)
0045 
0046     // common parameters
0047     QPen pen() const;
0048     BASIC_D_ACCESSOR_DECL(Qt::PenStyle, style, Style)
0049     CLASS_D_ACCESSOR_DECL(QColor, color, Color)
0050     BASIC_D_ACCESSOR_DECL(double, width, Width)
0051     BASIC_D_ACCESSOR_DECL(double, opacity, Opacity)
0052 
0053     typedef LinePrivate Private;
0054 
0055 protected:
0056     LinePrivate* const d_ptr;
0057 
0058 private:
0059     Q_DECLARE_PRIVATE(Line)
0060 
0061 Q_SIGNALS:
0062     void histogramLineTypeChanged(Histogram::LineType);
0063     void dropLineTypeChanged(XYCurve::DropLineType);
0064 
0065     void styleChanged(Qt::PenStyle);
0066     void widthChanged(double);
0067     void colorChanged(const QColor&);
0068     void opacityChanged(float);
0069 
0070     void updateRequested();
0071     void updatePixmapRequested();
0072 };
0073 
0074 #endif