File indexing completed on 2025-10-19 03:37:33

0001 /*
0002     File                 : CartesianPlotDock.h
0003     Project              : LabPlot
0004     Description          : widget for cartesian plot properties
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2011-2022 Alexander Semke <alexander.semke@web.de>
0007     SPDX-FileCopyrightText: 2012-2021 Stefan Gerlach <stefan.gerlach@uni.kn>
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #ifndef CARTESIANPLOTDOCK_H
0013 #define CARTESIANPLOTDOCK_H
0014 
0015 #include "backend/worksheet/plots/PlotArea.h"
0016 #include "backend/worksheet/plots/cartesian/CartesianPlot.h"
0017 #include "kdefrontend/dockwidgets/BaseDock.h"
0018 #include "ui_cartesianplotdock.h"
0019 
0020 #include <KConfig>
0021 
0022 template<class T>
0023 class QList;
0024 class BackgroundWidget;
0025 class LabelWidget;
0026 class LineWidget;
0027 class ThemeHandler;
0028 
0029 class CartesianPlotDock : public BaseDock {
0030     Q_OBJECT
0031 
0032 public:
0033     explicit CartesianPlotDock(QWidget*);
0034     void setPlots(QList<CartesianPlot*>);
0035     void activateTitleTab();
0036     void updateLocale() override;
0037     void updateUnits() override;
0038     void updateRangeList(const Dimension dim);
0039     void updatePlotRangeList() override;
0040 
0041 private:
0042     Ui::CartesianPlotDock ui;
0043     BackgroundWidget* backgroundWidget{nullptr};
0044     QList<CartesianPlot*> m_plotList;
0045     CartesianPlot* m_plot{nullptr};
0046     LabelWidget* labelWidget{nullptr};
0047     LineWidget* borderLineWidget{nullptr};
0048     LineWidget* cursorLineWidget{nullptr};
0049     ThemeHandler* m_themeHandler;
0050     QButtonGroup* m_bgDefaultPlotRange{nullptr};
0051     bool m_autoScale{false};
0052     bool m_updateUI{true};
0053 
0054     void autoScaleRange(const Dimension, const int index, bool);
0055     void load();
0056     void loadConfig(KConfig&);
0057 
0058 private Q_SLOTS:
0059     void init();
0060     void retranslateUi();
0061 
0062     // SLOTs for changes triggered in CartesianPlotDock
0063     //"General"-tab
0064     void rangeTypeChanged(int);
0065     void niceExtendChanged(bool checked);
0066     void rangePointsChanged(const QString&);
0067 
0068     void autoScaleChanged(const Dimension, const int rangeIndex, bool);
0069     void minDateTimeChanged(const QObject* sender, const Dimension, qint64 value);
0070     void maxDateTimeChanged(const QObject* sender, const Dimension, qint64);
0071     // void xRangeDateTimeChanged(const Range<quint64>&);
0072     void rangeFormatChanged(const QObject* sender, const Dimension, int index);
0073     void scaleChanged(const QObject* sender, const Dimension, int);
0074     void addXRange();
0075     void addYRange();
0076     void removeRange(const Dimension dim);
0077     void removeXRange();
0078     void removeYRange();
0079     void addPlotRange();
0080     void removePlotRange();
0081     void PlotRangeChanged(const int cSystemIndex, const Dimension, const int index);
0082     void PlotRangeXChanged(const int index);
0083     void PlotRangeYChanged(const int index);
0084 
0085     void minChanged(const Dimension dim, const int index, double min);
0086     void maxChanged(const Dimension dim, const int index, double max);
0087     // void yRangeDateTimeChanged(const Range<quint64>&);
0088 
0089     // "Layout"-tab
0090     void geometryChanged();
0091     void layoutChanged(Worksheet::Layout);
0092     void symmetricPaddingChanged(bool);
0093     void horizontalPaddingChanged(double);
0094     void rightPaddingChanged(double);
0095     void verticalPaddingChanged(double);
0096     void bottomPaddingChanged(double);
0097 
0098     //"Range Breaks"-tab
0099     void toggleXBreak(bool);
0100     void addXBreak();
0101     void removeXBreak();
0102     void currentXBreakChanged(int);
0103     void xBreakStartChanged();
0104     void xBreakEndChanged();
0105     void xBreakPositionChanged(int);
0106     void xBreakStyleChanged(int);
0107 
0108     void toggleYBreak(bool);
0109     void addYBreak();
0110     void removeYBreak();
0111     void currentYBreakChanged(int);
0112     void yBreakStartChanged();
0113     void yBreakEndChanged();
0114     void yBreakPositionChanged(int);
0115     void yBreakStyleChanged(int);
0116 
0117     //"Plot area"-tab
0118     void borderTypeChanged();
0119     void borderCornerRadiusChanged(double);
0120 
0121     void exportPlotTemplate();
0122 
0123     // SLOTs for changes triggered in CartesianPlot
0124     // general
0125 
0126     void plotRangeTypeChanged(CartesianPlot::RangeType);
0127     void plotRangeFirstValuesChanged(int);
0128     void plotRangeLastValuesChanged(int);
0129 
0130     void plotAutoScaleChanged(const Dimension, int, bool);
0131     void plotMinChanged(const Dimension, int yRangeIndex, double);
0132     void plotMaxChanged(const Dimension, int xRangeIndex, double);
0133     void plotRangeChanged(const Dimension, int, Range<double>);
0134     void plotRangeFormatChanged(const Dimension, int rangeIndex, RangeT::Format format);
0135     void plotScaleChanged(const Dimension, int xRangeIndex, RangeT::Scale);
0136 
0137     void defaultPlotRangeChanged();
0138 
0139     // layout
0140     void plotRectChanged(QRectF&);
0141     void plotHorizontalPaddingChanged(double);
0142     void plotVerticalPaddingChanged(double);
0143     void plotRightPaddingChanged(double);
0144     void plotBottomPaddingChanged(double);
0145     void plotSymmetricPaddingChanged(bool);
0146 
0147     // range breaks
0148     void plotXRangeBreakingEnabledChanged(bool);
0149     void plotXRangeBreaksChanged(const CartesianPlot::RangeBreaks&);
0150     void plotYRangeBreakingEnabledChanged(bool);
0151     void plotYRangeBreaksChanged(const CartesianPlot::RangeBreaks&);
0152 
0153     // background
0154     void plotBorderTypeChanged(PlotArea::BorderType);
0155     void plotBorderCornerRadiusChanged(double);
0156 
0157     // save/load template
0158     void loadConfigFromTemplate(KConfig&);
0159     void saveConfigAsTemplate(KConfig&);
0160 
0161     // save/load themes
0162     void loadTheme(const QString&);
0163     void saveTheme(KConfig&) const;
0164 
0165 Q_SIGNALS:
0166     void info(const QString&);
0167 
0168     friend class RetransformTest;
0169     friend class SpinBoxTest;
0170 };
0171 
0172 #endif