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