File indexing completed on 2024-05-26 03:52:00

0001 /*
0002     File                 : PlotArea.h
0003     Project              : LabPlot
0004     Description          : Plot area (for background filling and clipping).
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2011-2022 Alexander Semke <alexander.semke@web.de>
0007     SPDX-FileCopyrightText: 2012-2013 Stefan Gerlach <stefan.gerlach@uni-konstanz.de>
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #ifndef PLOTAREA_H
0013 #define PLOTAREA_H
0014 
0015 #include "backend/lib/macros.h"
0016 #include "backend/worksheet/WorksheetElement.h"
0017 
0018 class Background;
0019 class CartesianPlot;
0020 class Line;
0021 class PlotAreaPrivate;
0022 
0023 class PlotArea : public WorksheetElement {
0024     Q_OBJECT
0025 
0026 public:
0027     explicit PlotArea(const QString& name, CartesianPlot* parent);
0028     ~PlotArea() override;
0029 
0030     enum class BorderTypeFlags { NoBorder = 0x0, BorderLeft = 0x1, BorderTop = 0x2, BorderRight = 0x4, BorderBottom = 0x8 };
0031     Q_DECLARE_FLAGS(BorderType, BorderTypeFlags)
0032 
0033     QGraphicsItem* graphicsItem() const override;
0034     void loadThemeConfig(const KConfig& config) override;
0035     void saveThemeConfig(const KConfig& config) override;
0036     bool isHovered() const;
0037     bool isSelected() const;
0038 
0039     Background* background() const;
0040     BASIC_D_ACCESSOR_DECL(PlotArea::BorderType, borderType, BorderType)
0041     Line* borderLine() const;
0042     BASIC_D_ACCESSOR_DECL(qreal, borderCornerRadius, BorderCornerRadius)
0043 
0044     BASIC_D_ACCESSOR_DECL(bool, clippingEnabled, ClippingEnabled)
0045     CLASS_D_ACCESSOR_DECL(QRectF, rect, Rect)
0046 
0047     void save(QXmlStreamWriter*) const override;
0048     bool load(XmlStreamReader*, bool preview) override;
0049 
0050     void retransform() override;
0051     void handleResize(double horizontalRatio, double verticalRatio, bool pageResize) override;
0052 
0053     typedef PlotAreaPrivate Private;
0054 
0055 protected:
0056     PlotArea(const QString& name, CartesianPlot* parent, PlotAreaPrivate* dd);
0057 
0058 private:
0059     Q_DECLARE_PRIVATE(PlotArea)
0060     void init();
0061 
0062 Q_SIGNALS:
0063     void borderTypeChanged(PlotArea::BorderType);
0064     void borderCornerRadiusChanged(qreal);
0065     void borderOpacityChanged(qreal);
0066 
0067 private:
0068     CartesianPlot* m_parent;
0069 };
0070 
0071 Q_DECLARE_OPERATORS_FOR_FLAGS(PlotArea::BorderType)
0072 
0073 #endif