File indexing completed on 2025-01-26 03:34:11
0001 /* 0002 File : ErrorBarStyle.cpp 0003 Project : LabPlot 0004 Description : ErrorBarStyle 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2024 Alexander Semke <alexander.semke@web.de> 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 /*! 0011 \class ErrorBarStyle 0012 \brief This class contains the background properties of worksheet elements like worksheet background, 0013 plot background, the area filling in ErrorBarStyle, Histogram, etc. 0014 0015 \ingroup worksheet 0016 */ 0017 0018 #include "ErrorBarStyle.h" 0019 #include "ErrorBarStylePrivate.h" 0020 #include "backend/lib/XmlStreamReader.h" 0021 #include "backend/lib/commandtemplates.h" 0022 #include "backend/worksheet/Line.h" 0023 #include "backend/worksheet/Worksheet.h" 0024 0025 #include <KConfigGroup> 0026 #include <KLocalizedString> 0027 0028 ErrorBarStyle::ErrorBarStyle(const QString& name) 0029 : AbstractAspect(name, AspectType::AbstractAspect) 0030 , d_ptr(new ErrorBarStylePrivate(this)) { 0031 } 0032 0033 ErrorBarStyle::~ErrorBarStyle() { 0034 delete d_ptr; 0035 } 0036 0037 void ErrorBarStyle::init(const KConfigGroup& group) { 0038 Q_D(ErrorBarStyle); 0039 d->type = (Type)group.readEntry(QStringLiteral("ErrorBarsType"), static_cast<int>(Type::Simple)); 0040 d->capSize = group.readEntry(QStringLiteral("ErrorBarsCapSize"), Worksheet::convertToSceneUnits(10, Worksheet::Unit::Point)); 0041 0042 d->line = new Line(QString()); 0043 d->line->setHidden(true); 0044 d->line->setCreateXmlElement(false); 0045 addChild(d->line); 0046 d->line->init(group); 0047 connect(d->line, &Line::updatePixmapRequested, this, &ErrorBarStyle::updatePixmapRequested); 0048 connect(d->line, &Line::updateRequested, this, &ErrorBarStyle::updateRequested); 0049 } 0050 0051 // ############################################################################## 0052 // ########################## getter methods ################################## 0053 // ############################################################################## 0054 BASIC_SHARED_D_READER_IMPL(ErrorBarStyle, ErrorBarStyle::Type, type, type) 0055 BASIC_SHARED_D_READER_IMPL(ErrorBarStyle, double, capSize, capSize) 0056 Line* ErrorBarStyle::line() const { 0057 Q_D(const ErrorBarStyle); 0058 return d->line; 0059 } 0060 0061 // ############################################################################## 0062 // ################# setter methods and undo commands ########################## 0063 // ############################################################################## 0064 STD_SETTER_CMD_IMPL_F_S(ErrorBarStyle, SetCapSize, double, capSize, update) 0065 void ErrorBarStyle::setCapSize(qreal size) { 0066 Q_D(ErrorBarStyle); 0067 if (size != d->capSize) 0068 exec(new ErrorBarStyleSetCapSizeCmd(d, size, ki18n("%1: set error bar cap size"))); 0069 } 0070 0071 STD_SETTER_CMD_IMPL_F_S(ErrorBarStyle, SetType, ErrorBarStyle::Type, type, update) 0072 void ErrorBarStyle::setType(ErrorBarStyle::Type type) { 0073 Q_D(ErrorBarStyle); 0074 if (type != d->type) 0075 exec(new ErrorBarStyleSetTypeCmd(d, type, ki18n("%1: error bar style type changed"))); 0076 } 0077 0078 // ############################################################################## 0079 // ####################### Private implementation ############################### 0080 // ############################################################################## 0081 ErrorBarStylePrivate::ErrorBarStylePrivate(ErrorBarStyle* owner) 0082 : q(owner) { 0083 } 0084 0085 QString ErrorBarStylePrivate::name() const { 0086 return q->parentAspect()->name(); 0087 } 0088 0089 void ErrorBarStylePrivate::update() { 0090 Q_EMIT q->updateRequested(); 0091 } 0092 0093 void ErrorBarStylePrivate::updatePixmap() { 0094 Q_EMIT q->updatePixmapRequested(); 0095 } 0096 0097 // ############################################################################## 0098 // ################## Serialization/Deserialization ########################### 0099 // ############################################################################## 0100 //! Save as XML 0101 void ErrorBarStyle::save(QXmlStreamWriter* writer) const { 0102 Q_D(const ErrorBarStyle); 0103 writer->writeAttribute(QStringLiteral("type"), QString::number(static_cast<int>(d->type))); 0104 writer->writeAttribute(QStringLiteral("capSize"), QString::number(d->capSize)); 0105 d->line->save(writer); 0106 } 0107 0108 //! Load from XML 0109 bool ErrorBarStyle::load(XmlStreamReader* reader, bool preview) { 0110 if (preview) 0111 return true; 0112 0113 Q_D(ErrorBarStyle); 0114 QString str; 0115 auto attribs = reader->attributes(); 0116 0117 READ_INT_VALUE("type", type, ErrorBarStyle::Type); 0118 READ_DOUBLE_VALUE("capSize", capSize); 0119 d->line->load(reader, preview); 0120 return true; 0121 } 0122 0123 // ############################################################################## 0124 // ######################### Theme management ################################## 0125 // ############################################################################## 0126 void ErrorBarStyle::loadThemeConfig(const KConfigGroup& group) { 0127 Q_D(ErrorBarStyle); 0128 d->line->loadThemeConfig(group); 0129 } 0130 0131 void ErrorBarStyle::loadThemeConfig(const KConfigGroup& group, const QColor& themeColor) { 0132 Q_D(ErrorBarStyle); 0133 d->line->loadThemeConfig(group, themeColor); 0134 } 0135 0136 void ErrorBarStyle::saveThemeConfig(KConfigGroup& group) const { 0137 Q_D(const ErrorBarStyle); 0138 d->line->saveThemeConfig(group); 0139 }