File indexing completed on 2024-05-12 15:27:57

0001 /***************************************************************************
0002     File                 : CartesianPlotDock.h
0003     Project              : LabPlot
0004     Description          : widget for cartesian plot properties
0005     --------------------------------------------------------------------
0006     Copyright            : (C) 2011-2020 Alexander Semke (alexander.semke@web.de)
0007     Copyright            : (C) 2012-2013 by Stefan Gerlach (stefan.gerlach@uni-konstanz.de)
0008 
0009  ***************************************************************************/
0010 
0011 /***************************************************************************
0012  *                                                                         *
0013  *  This program is free software; you can redistribute it and/or modify   *
0014  *  it under the terms of the GNU General Public License as published by   *
0015  *  the Free Software Foundation; either version 2 of the License, or      *
0016  *  (at your option) any later version.                                    *
0017  *                                                                         *
0018  *  This program is distributed in the hope that it will be useful,        *
0019  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
0020  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
0021  *  GNU General Public License for more details.                           *
0022  *                                                                         *
0023  *   You should have received a copy of the GNU General Public License     *
0024  *   along with this program; if not, write to the Free Software           *
0025  *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
0026  *   Boston, MA  02110-1301  USA                                           *
0027  *                                                                         *
0028  ***************************************************************************/
0029 
0030 #ifndef CARTESIANPLOTDOCK_H
0031 #define CARTESIANPLOTDOCK_H
0032 
0033 #include "backend/worksheet/Worksheet.h"
0034 #include "backend/worksheet/plots/cartesian/CartesianPlot.h"
0035 #include "ui_cartesianplotdock.h"
0036 #include "kdefrontend/dockwidgets/BaseDock.h"
0037 
0038 #include <KConfig>
0039 
0040 template <class T> class QList;
0041 class LabelWidget;
0042 class ThemeHandler;
0043 class KLocalizedString;
0044 
0045 class CartesianPlotDock : public BaseDock {
0046     Q_OBJECT
0047 
0048 public:
0049     explicit CartesianPlotDock(QWidget*);
0050     void setPlots(QList<CartesianPlot*>);
0051     void activateTitleTab();
0052     void updateLocale() override;
0053     void updateUnits() override;
0054 
0055 private:
0056     Ui::CartesianPlotDock ui;
0057     QList<CartesianPlot*> m_plotList;
0058     CartesianPlot* m_plot{nullptr};
0059     LabelWidget* labelWidget{nullptr};
0060     ThemeHandler* m_themeHandler;
0061 
0062     void loadConfig(KConfig&);
0063 
0064 private slots:
0065     void init();
0066     void retranslateUi();
0067 
0068     //SLOTs for changes triggered in CartesianPlotDock
0069     //"General"-tab
0070     void visibilityChanged(bool);
0071     void geometryChanged();
0072     void layoutChanged(Worksheet::Layout);
0073 
0074     void rangeTypeChanged();
0075     void rangeFirstChanged(const QString&);
0076     void rangeLastChanged(const QString&);
0077 
0078     void autoScaleXChanged(int);
0079     void xMinChanged(const QString&);
0080     void xMaxChanged(const QString&);
0081     void xMinDateTimeChanged(const QDateTime&);
0082     void xMaxDateTimeChanged(const QDateTime&);
0083     void xRangeFormatChanged(int);
0084     void xScaleChanged(int);
0085 
0086     void autoScaleYChanged(int);
0087     void yMinChanged(const QString&);
0088     void yMaxChanged(const QString&);
0089     void yMinDateTimeChanged(const QDateTime&);
0090     void yMaxDateTimeChanged(const QDateTime&);
0091     void yRangeFormatChanged(int);
0092     void yScaleChanged(int);
0093 
0094     //"Range Breaks"-tab
0095     void toggleXBreak(bool);
0096     void addXBreak();
0097     void removeXBreak();
0098     void currentXBreakChanged(int);
0099     void xBreakStartChanged();
0100     void xBreakEndChanged();
0101     void xBreakPositionChanged(int);
0102     void xBreakStyleChanged(int);
0103 
0104     void toggleYBreak(bool);
0105     void addYBreak();
0106     void removeYBreak();
0107     void currentYBreakChanged(int);
0108     void yBreakStartChanged();
0109     void yBreakEndChanged();
0110     void yBreakPositionChanged(int);
0111     void yBreakStyleChanged(int);
0112 
0113     //"Plot area"-tab
0114     void backgroundTypeChanged(int);
0115     void backgroundColorStyleChanged(int);
0116     void backgroundImageStyleChanged(int);
0117     void backgroundBrushStyleChanged(int);
0118     void backgroundFirstColorChanged(const QColor&);
0119     void backgroundSecondColorChanged(const QColor&);
0120     void selectFile();
0121     void fileNameChanged();
0122     void backgroundOpacityChanged(int);
0123     void borderStyleChanged(int);
0124     void borderColorChanged(const QColor&);
0125     void borderWidthChanged(double);
0126     void borderCornerRadiusChanged(double);
0127     void borderOpacityChanged(int);
0128     void symmetricPaddingChanged(bool);
0129     void horizontalPaddingChanged(double);
0130     void rightPaddingChanged(double);
0131     void verticalPaddingChanged(double);
0132     void bottomPaddingChanged(double);
0133 
0134     // "Cursor"-tab
0135     void cursorLineWidthChanged(int);
0136     void cursorLineColorChanged(const QColor&);
0137     void cursorLineStyleChanged(int);
0138 
0139     //SLOTs for changes triggered in CartesianPlot
0140     //general
0141     void plotDescriptionChanged(const AbstractAspect*);
0142     void plotRectChanged(QRectF&);
0143     void plotRangeTypeChanged(CartesianPlot::RangeType);
0144     void plotRangeFirstValuesChanged(int);
0145     void plotRangeLastValuesChanged(int);
0146 
0147     void plotXAutoScaleChanged(bool);
0148     void plotXMinChanged(double);
0149     void plotXMaxChanged(double);
0150     void plotXRangeFormatChanged(CartesianPlot::RangeFormat);
0151     void plotXScaleChanged(CartesianPlot::Scale);
0152 
0153 
0154     void plotYAutoScaleChanged(bool);
0155     void plotYMinChanged(double);
0156     void plotYMaxChanged(double);
0157     void plotYRangeFormatChanged(CartesianPlot::RangeFormat);
0158     void plotYScaleChanged(CartesianPlot::Scale);
0159 
0160     void plotVisibleChanged(bool);
0161 
0162     //range breaks
0163     void plotXRangeBreakingEnabledChanged(bool);
0164     void plotXRangeBreaksChanged(const CartesianPlot::RangeBreaks&);
0165     void plotYRangeBreakingEnabledChanged(bool);
0166     void plotYRangeBreaksChanged(const CartesianPlot::RangeBreaks&);
0167 
0168     //background
0169     void plotBackgroundTypeChanged(PlotArea::BackgroundType);
0170     void plotBackgroundColorStyleChanged(PlotArea::BackgroundColorStyle);
0171     void plotBackgroundImageStyleChanged(PlotArea::BackgroundImageStyle);
0172     void plotBackgroundBrushStyleChanged(Qt::BrushStyle);
0173     void plotBackgroundFirstColorChanged(QColor&);
0174     void plotBackgroundSecondColorChanged(QColor&);
0175     void plotBackgroundFileNameChanged(QString&);
0176     void plotBackgroundOpacityChanged(float);
0177     void plotBorderPenChanged(QPen&);
0178     void plotBorderCornerRadiusChanged(float);
0179     void plotBorderOpacityChanged(float);
0180     void plotHorizontalPaddingChanged(float);
0181     void plotVerticalPaddingChanged(float);
0182     void plotRightPaddingChanged(double);
0183     void plotBottomPaddingChanged(double);
0184     void plotSymmetricPaddingChanged(bool);
0185 
0186     // Cursor
0187     void plotCursorPenChanged(const QPen&);
0188 
0189     //save/load template
0190     void loadConfigFromTemplate(KConfig&);
0191     void saveConfigAsTemplate(KConfig&);
0192 
0193     //save/load themes
0194     void loadTheme(const QString&);
0195     void saveTheme(KConfig& config) const;
0196 
0197     void load();
0198 
0199 signals:
0200     void info(const QString&);
0201 };
0202 
0203 #endif