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 }