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

0001 /***************************************************************************
0002     File                 : AxisDock.h
0003     Project              : LabPlot
0004     Description          : axes widget class
0005     --------------------------------------------------------------------
0006     Copyright            : (C) 2011-2018 by Alexander Semke (alexander.semke@web.de)
0007     Copyright            : (C) 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 #ifndef AXISDOCK_H
0030 #define AXISDOCK_H
0031 
0032 #include "ui_axisdock.h"
0033 #include "backend/worksheet/plots/cartesian/Axis.h"
0034 #include "kdefrontend/dockwidgets/BaseDock.h"
0035 #include <KConfig>
0036 
0037 class AbstractAspect;
0038 class LabelWidget;
0039 class TreeViewComboBox;
0040 class AspectTreeModel;
0041 class AbstractColumn;
0042 class DateTimeSpinBox;
0043 
0044 class AxisDock : public BaseDock {
0045     Q_OBJECT
0046 
0047 public:
0048     explicit AxisDock(QWidget*);
0049     ~AxisDock() override;
0050 
0051     void setAxes(QList<Axis*>);
0052     void activateTitleTab();
0053     void updateLocale() override;
0054 
0055 private:
0056     Ui::AxisDock ui;
0057     QList<Axis*> m_axesList;
0058     Axis* m_axis{nullptr};
0059     AspectTreeModel* m_aspectTreeModel{nullptr};
0060     LabelWidget* labelWidget;
0061     TreeViewComboBox* cbMajorTicksColumn;
0062     TreeViewComboBox* cbMinorTicksColumn;
0063     bool m_dataChanged{false};
0064 
0065     void setModel();
0066     void setModelIndexFromColumn(TreeViewComboBox*, const AbstractColumn*);
0067 
0068     void load();
0069     void loadConfig(KConfig&);
0070 
0071     // own created widgets
0072     DateTimeSpinBox* dtsbMajorTicksIncrement {nullptr};
0073     DateTimeSpinBox* dtsbMinorTicksIncrement {nullptr};
0074 
0075 private slots:
0076     void init();
0077 
0078     //SLOTs for changes triggered in AxisDock
0079     //"General"-tab
0080     void visibilityChanged(bool);
0081     void orientationChanged(int);
0082     void positionChanged(int);
0083     void positionChanged();
0084     void scaleChanged(int);
0085     void autoScaleChanged(int);
0086     void startChanged();
0087     void endChanged();
0088     void startDateTimeChanged(const QDateTime&);
0089     void endDateTimeChanged(const QDateTime&);
0090     void zeroOffsetChanged();
0091     void scalingFactorChanged();
0092 
0093     //Line-Tab
0094     void lineStyleChanged(int);
0095     void lineColorChanged(const QColor&);
0096     void lineWidthChanged(double);
0097     void lineOpacityChanged(int);
0098     void arrowPositionChanged(int);
0099     void arrowTypeChanged(int);
0100     void arrowSizeChanged(int);
0101 
0102     //"Major ticks"-tab
0103     void majorTicksDirectionChanged(int);
0104     void majorTicksTypeChanged(int);
0105     void majorTicksNumberChanged(int);
0106     void majorTicksSpacingChanged();
0107     void majorTicksColumnChanged(const QModelIndex&);
0108     void majorTicksLineStyleChanged(int);
0109     void majorTicksColorChanged(const QColor&);
0110     void majorTicksWidthChanged(double);
0111     void majorTicksLengthChanged(double);
0112     void majorTicksOpacityChanged(int);
0113 
0114     //"Minor ticks"-tab
0115     void minorTicksDirectionChanged(int);
0116     void minorTicksTypeChanged(int);
0117     void minorTicksNumberChanged(int);
0118     void minorTicksSpacingChanged();
0119     void minorTicksColumnChanged(const QModelIndex&);
0120     void minorTicksLineStyleChanged(int);
0121     void minorTicksColorChanged(const QColor&);
0122     void minorTicksWidthChanged(double);
0123     void minorTicksLengthChanged(double);
0124     void minorTicksOpacityChanged(int);
0125 
0126     //"Extra ticks"-tab
0127 
0128     //"Tick labels"-tab
0129     void labelsFormatChanged(int);
0130     void labelsPrecisionChanged(int);
0131     void labelsAutoPrecisionChanged(int);
0132     void labelsDateTimeFormatChanged(int);
0133     void labelsPositionChanged(int);
0134     void labelsOffsetChanged(double);
0135     void labelsRotationChanged(int);
0136     void labelsFontChanged(const QFont&);
0137     void labelsFontColorChanged(const QColor&);
0138     void labelsBackgroundTypeChanged(int);
0139     void labelsBackgroundColorChanged(const QColor&);
0140     void labelsPrefixChanged();
0141     void labelsSuffixChanged();
0142     void labelsOpacityChanged(int);
0143 
0144     //"Grid"-tab
0145     void majorGridStyleChanged(int);
0146     void majorGridColorChanged(const QColor&);
0147     void majorGridWidthChanged(double);
0148     void majorGridOpacityChanged(int);
0149 
0150     void minorGridStyleChanged(int);
0151     void minorGridColorChanged(const QColor&);
0152     void minorGridWidthChanged(double);
0153     void minorGridOpacityChanged(int);
0154 
0155     //SLOTs for changes triggered in Axis
0156     //General-Tab
0157     void axisDescriptionChanged(const AbstractAspect*);
0158     void axisOrientationChanged(Axis::Orientation);
0159     void axisPositionChanged(Axis::Position);
0160     void axisPositionChanged(double);
0161     void axisScaleChanged(Axis::Scale);
0162     void axisAutoScaleChanged(bool);
0163     void axisStartChanged(double);
0164     void axisEndChanged(double);
0165     void axisZeroOffsetChanged(qreal);
0166     void axisScalingFactorChanged(qreal);
0167 
0168     //line
0169     void axisLinePenChanged(const QPen&);
0170     void axisLineOpacityChanged(qreal);
0171     void axisArrowTypeChanged(Axis::ArrowType);
0172     void axisArrowPositionChanged(Axis::ArrowPosition);
0173     void axisArrowSizeChanged(qreal);
0174 
0175     //ticks
0176     void axisMajorTicksDirectionChanged(Axis::TicksDirection);
0177     void axisMajorTicksTypeChanged(Axis::TicksType);
0178     void axisMajorTicksNumberChanged(int);
0179     void axisMajorTicksSpacingChanged(qreal);
0180     void axisMajorTicksPenChanged(const QPen&);
0181     void axisMajorTicksLengthChanged(qreal);
0182     void axisMajorTicksOpacityChanged(qreal);
0183     void axisMinorTicksDirectionChanged(Axis::TicksDirection);
0184     void axisMinorTicksTypeChanged(Axis::TicksType);
0185     void axisMinorTicksNumberChanged(int);
0186     void axisMinorTicksSpacingChanged(qreal);
0187     void axisMinorTicksPenChanged(const QPen&);
0188     void axisMinorTicksLengthChanged(qreal);
0189     void axisMinorTicksOpacityChanged(qreal);
0190 
0191     //labels
0192     void axisLabelsFormatChanged(Axis::LabelsFormat);
0193     void axisLabelsAutoPrecisionChanged(bool);
0194     void axisLabelsPrecisionChanged(int);
0195     void axisLabelsDateTimeFormatChanged(const QString&);
0196     void axisLabelsPositionChanged(Axis::LabelsPosition);
0197     void axisLabelsOffsetChanged(double);
0198     void axisLabelsRotationAngleChanged(qreal);
0199     void axisLabelsFontChanged(const QFont&);
0200     void axisLabelsFontColorChanged(const QColor&);
0201     void axisLabelsBackgroundTypeChanged(Axis::LabelsBackgroundType);
0202     void axisLabelsBackgroundColorChanged(const QColor&);
0203     void axisLabelsPrefixChanged(const QString&);
0204     void axisLabelsSuffixChanged(const QString&);
0205     void axisLabelsOpacityChanged(qreal);
0206 
0207     //grids
0208     void axisMajorGridPenChanged(const QPen&);
0209     void axisMajorGridOpacityChanged(qreal);
0210     void axisMinorGridPenChanged(const QPen&);
0211     void axisMinorGridOpacityChanged(qreal);
0212 
0213     void axisVisibilityChanged(bool);
0214 
0215     //save/load template
0216     void loadConfigFromTemplate(KConfig&);
0217     void saveConfigAsTemplate(KConfig&);
0218 
0219 signals:
0220     void info(const QString&);
0221 };
0222 
0223 #endif