File indexing completed on 2024-05-12 15:28:05

0001 /***************************************************************************
0002     File             : XYCurveDock.h
0003     Project          : LabPlot
0004     Description      : widget for curve properties
0005     --------------------------------------------------------------------
0006     Copyright         : (C) 2010-2020 Alexander Semke (alexander.semke@web.de)
0007     Copyright         : (C) 2013 Stefan Gerlach (stefan.gerlach@uni.kn)
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 XYCURVEDOCK_H
0031 #define XYCURVEDOCK_H
0032 
0033 #include "kdefrontend/dockwidgets/BaseDock.h"
0034 #include "backend/core/AbstractColumn.h"
0035 #include "backend/worksheet/plots/cartesian/Symbol.h"
0036 #include "backend/worksheet/plots/cartesian/XYCurve.h"
0037 #include "backend/worksheet/plots/PlotArea.h"
0038 #include "ui_xycurvedock.h"
0039 #include "ui_xycurvedockgeneraltab.h"
0040 
0041 class TreeViewComboBox;
0042 class AspectTreeModel;
0043 class Column;
0044 class QLineEdit;
0045 
0046 class XYCurveDock : public BaseDock {
0047     Q_OBJECT
0048 
0049 public:
0050     explicit XYCurveDock(QWidget*);
0051     ~XYCurveDock() override;
0052 
0053     void setCurves(QList<XYCurve*>);
0054     virtual void setupGeneral();
0055     void checkColumnAvailability(TreeViewComboBox*, const AbstractColumn*, const QString& columnPath);
0056     void updateLocale() override;
0057 
0058 private:
0059     virtual void initGeneralTab();
0060     void updateValuesWidgets();
0061 
0062     void load();
0063     void loadConfig(KConfig&);
0064 
0065     Ui::XYCurveDockGeneralTab uiGeneralTab;
0066 
0067     TreeViewComboBox* cbXColumn{nullptr};
0068     TreeViewComboBox* cbYColumn{nullptr};
0069     TreeViewComboBox* cbValuesColumn;
0070     TreeViewComboBox* cbXErrorPlusColumn;
0071     TreeViewComboBox* cbXErrorMinusColumn;
0072     TreeViewComboBox* cbYErrorPlusColumn;
0073     TreeViewComboBox* cbYErrorMinusColumn;
0074 
0075 protected:
0076     void initTabs();
0077     virtual void setModel();
0078     void setModelIndexFromAspect(TreeViewComboBox*, const AbstractAspect*);
0079 
0080     Ui::XYCurveDock ui;
0081     QList<XYCurve*> m_curvesList;
0082     XYCurve* m_curve{nullptr};
0083     AspectTreeModel* m_aspectTreeModel{nullptr};
0084 
0085 public slots:
0086     void visibilityChanged(bool);
0087 
0088 private slots:
0089     void init();
0090     void retranslateUi();
0091 
0092     //SLOTs for changes triggered in XYCurveDock
0093     void xColumnChanged(const QModelIndex&);
0094     void yColumnChanged(const QModelIndex&);
0095 
0096     //Line-Tab
0097     void lineTypeChanged(int);
0098     void lineSkipGapsChanged(bool);
0099     void lineIncreasingXOnlyChanged(bool);
0100     void lineInterpolationPointsCountChanged(int);
0101     void lineStyleChanged(int);
0102     void lineColorChanged(const QColor&);
0103     void lineWidthChanged(double);
0104     void lineOpacityChanged(int);
0105 
0106     void dropLineTypeChanged(int);
0107     void dropLineStyleChanged(int);
0108     void dropLineColorChanged(const QColor&);
0109     void dropLineWidthChanged(double);
0110     void dropLineOpacityChanged(int);
0111 
0112     //Symbol-tab
0113     void symbolsStyleChanged(int);
0114     void symbolsSizeChanged(double);
0115     void symbolsRotationChanged(int);
0116     void symbolsOpacityChanged(int);
0117     void symbolsFillingStyleChanged(int);
0118     void symbolsFillingColorChanged(const QColor&);
0119     void symbolsBorderStyleChanged(int);
0120     void symbolsBorderColorChanged(const QColor&);
0121     void symbolsBorderWidthChanged(double);
0122 
0123     //Values-Tab
0124     void valuesTypeChanged(int);
0125     void valuesColumnChanged(const QModelIndex&);
0126     void valuesPositionChanged(int);
0127     void valuesDistanceChanged(double);
0128     void valuesRotationChanged(int);
0129     void valuesOpacityChanged(int);
0130     void valuesNumericFormatChanged(int);
0131     void valuesPrecisionChanged(int);
0132     void valuesDateTimeFormatChanged(const QString&);
0133     void valuesPrefixChanged();
0134     void valuesSuffixChanged();
0135     void valuesFontChanged(const QFont&);
0136     void valuesColorChanged(const QColor&);
0137 
0138     //Filling-tab
0139     void fillingPositionChanged(int);
0140     void fillingTypeChanged(int);
0141     void fillingColorStyleChanged(int);
0142     void fillingImageStyleChanged(int);
0143     void fillingBrushStyleChanged(int);
0144     void fillingFirstColorChanged(const QColor&);
0145     void fillingSecondColorChanged(const QColor&);
0146     void selectFile();
0147     void fileNameChanged();
0148     void fillingOpacityChanged(int);
0149 
0150     //"Error bars"-Tab
0151     void xErrorTypeChanged(int) const;
0152     void yErrorTypeChanged(int) const;
0153     void xErrorPlusColumnChanged(const QModelIndex&) const;
0154     void xErrorMinusColumnChanged(const QModelIndex&) const;
0155     void yErrorPlusColumnChanged(const QModelIndex&) const;
0156     void yErrorMinusColumnChanged(const QModelIndex&) const;
0157     void errorBarsTypeChanged(int) const;
0158     void errorBarsCapSizeChanged(double) const;
0159     void errorBarsStyleChanged(int) const;
0160     void errorBarsColorChanged(const QColor&);
0161     void errorBarsWidthChanged(double) const;
0162     void errorBarsOpacityChanged(int) const;
0163 
0164     //SLOTs for changes triggered in XYCurve
0165     //General-Tab
0166     void curveDescriptionChanged(const AbstractAspect*);
0167     void curveXColumnChanged(const AbstractColumn*);
0168     void curveYColumnChanged(const AbstractColumn*);
0169     void curveVisibilityChanged(bool);
0170 
0171     //Line-Tab
0172     void curveLineTypeChanged(XYCurve::LineType);
0173     void curveLineSkipGapsChanged(bool);
0174     void curveLineIncreasingXOnlyChanged(bool);
0175     void curveLineInterpolationPointsCountChanged(int);
0176     void curveLinePenChanged(const QPen&);
0177     void curveLineOpacityChanged(qreal);
0178     void curveDropLineTypeChanged(XYCurve::DropLineType);
0179     void curveDropLinePenChanged(const QPen&);
0180     void curveDropLineOpacityChanged(qreal);
0181 
0182     //Symbol-Tab
0183     void curveSymbolsStyleChanged(Symbol::Style);
0184     void curveSymbolsSizeChanged(qreal);
0185     void curveSymbolsRotationAngleChanged(qreal);
0186     void curveSymbolsOpacityChanged(qreal);
0187     void curveSymbolsBrushChanged(const QBrush&);
0188     void curveSymbolsPenChanged(const QPen&);
0189 
0190     //Values-Tab
0191     void curveValuesTypeChanged(XYCurve::ValuesType);
0192     void curveValuesColumnChanged(const AbstractColumn*);
0193     void curveValuesPositionChanged(XYCurve::ValuesPosition);
0194     void curveValuesDistanceChanged(qreal);
0195     void curveValuesOpacityChanged(qreal);
0196     void curveValuesRotationAngleChanged(qreal);
0197     void curveValuesNumericFormatChanged(char);
0198     void curveValuesPrecisionChanged(int);
0199     void curveValuesDateTimeFormatChanged(const QString&);
0200     void curveValuesPrefixChanged(const QString&);
0201     void curveValuesSuffixChanged(const QString&);
0202     void curveValuesFontChanged(QFont);
0203     void curveValuesColorChanged(QColor);
0204 
0205     //Filling-Tab
0206     void curveFillingPositionChanged(XYCurve::FillingPosition);
0207     void curveFillingTypeChanged(PlotArea::BackgroundType);
0208     void curveFillingColorStyleChanged(PlotArea::BackgroundColorStyle);
0209     void curveFillingImageStyleChanged(PlotArea::BackgroundImageStyle);
0210     void curveFillingBrushStyleChanged(Qt::BrushStyle);
0211     void curveFillingFirstColorChanged(QColor&);
0212     void curveFillingSecondColorChanged(QColor&);
0213     void curveFillingFileNameChanged(QString&);
0214     void curveFillingOpacityChanged(float);
0215 
0216     //"Error bars"-Tab
0217     void curveXErrorTypeChanged(XYCurve::ErrorType);
0218     void curveXErrorPlusColumnChanged(const AbstractColumn*);
0219     void curveXErrorMinusColumnChanged(const AbstractColumn*);
0220     void curveYErrorTypeChanged(XYCurve::ErrorType);
0221     void curveYErrorPlusColumnChanged(const AbstractColumn*);
0222     void curveYErrorMinusColumnChanged(const AbstractColumn*);
0223     void curveErrorBarsCapSizeChanged(qreal);
0224     void curveErrorBarsTypeChanged(XYCurve::ErrorBarsType);
0225     void curveErrorBarsPenChanged(const QPen&);
0226     void curveErrorBarsOpacityChanged(qreal);
0227 
0228     //load and save
0229     void loadConfigFromTemplate(KConfig&);
0230     void saveConfigAsTemplate(KConfig&);
0231 
0232 signals:
0233     void info(const QString&);
0234 };
0235 
0236 #endif