File indexing completed on 2024-12-08 12:56:10

0001 /* This file is part of the KDE project
0002   *
0003   * Copyright (C) 2013 Inge Wallin <inge@lysator.liu.se>
0004   * Copyright (C) 2013 Mojtaba Shahi Senobari <mojtaba.shahi3000@gmail.com>
0005   *
0006   * This library is free software; you can redistribute it and/or
0007   * modify it under the terms of the GNU Library General Public
0008   * License as published by the Free Software Foundation; either
0009   * version 2 of the License, or (at your option) any later version.
0010   *
0011   * This library is distributed in the hope that it will be useful,
0012   * but WITHOUT ANY WARRANTY; without even the implied warranty of
0013   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0014   * Library General Public License for more details.
0015   *
0016   * You should have received a copy of the GNU Library General Public License
0017   * along with this library; see the file COPYING.LIB.  If not, write to
0018   * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0019   * Boston, MA 02110-1301, USA.
0020   */
0021 
0022 // Own
0023 #include "KoOdfListLevelProperties.h"
0024 
0025 // Qt
0026 #include <QString>
0027 
0028 // odflib
0029 #include <KoXmlStreamReader.h>
0030 #include <KoXmlWriter.h>
0031 
0032 #include "Odf2Debug.h"
0033 
0034 // ----------------------------------------------------------------
0035 //                         private class
0036 
0037 
0038 class Q_DECL_HIDDEN KoOdfListLevelProperties::Private
0039 {
0040 public:
0041     Private()
0042         :hasLabelAlignment(false){};
0043     ~Private() {};
0044 
0045     bool hasLabelAlignment;
0046     AttributeSet propertiesAttributes;  // name, value
0047     AttributeSet labelAlignmentAttributes;  // name, value
0048 };
0049 
0050 
0051 // ----------------------------------------------------------------
0052 
0053 
0054 KoOdfListLevelProperties::KoOdfListLevelProperties()
0055     : KoOdfStyleProperties()
0056     , d(new KoOdfListLevelProperties::Private())
0057 {
0058 }
0059 
0060 KoOdfListLevelProperties::~KoOdfListLevelProperties()
0061 {
0062     delete d;
0063 }
0064 
0065 
0066 void KoOdfListLevelProperties::clear()
0067 {
0068     KoOdfStyleProperties::clear();
0069 }
0070 
0071 
0072 bool KoOdfListLevelProperties::readOdf(KoXmlStreamReader &reader)
0073 {
0074     //FIXME: Handle child element
0075     bool retval = readAttributes(reader);
0076 
0077     KoXmlStreamAttributes attrs = reader.attributes();
0078     foreach (const KoXmlStreamAttribute &attr, attrs) {
0079         d->propertiesAttributes.insert(attr.qualifiedName().toString(), attr.value().toString());
0080     }
0081     debugOdf2 << "level properties attributes:" << d->propertiesAttributes;
0082 
0083     while (reader.readNextStartElement()) {
0084         QString child = reader.qualifiedName().toString();
0085 
0086         // style:list-level-label-alignment just is uesd in this place.
0087         // Save the list-level-label-alignment and list-level-properties in separate Attributeset for saveOdf.
0088         if (child == "style:list-level-label-alignment") {
0089             d->hasLabelAlignment = true;
0090             // FIXME: Should create a class for  this element or not.
0091             retval = readAttributes(reader);
0092 
0093             KoXmlStreamAttributes attrs = reader.attributes();
0094             foreach (const KoXmlStreamAttribute &attr, attrs) {
0095                 d->labelAlignmentAttributes.insert(attr.qualifiedName().toString(), attr.value().toString());
0096             }
0097             debugOdf2 << "Label alignment attributes:" << d->labelAlignmentAttributes;
0098         }
0099     }
0100     reader.skipCurrentElement();
0101     return retval;
0102 }
0103 
0104 bool KoOdfListLevelProperties::saveOdf(const QString &propertySet, KoXmlWriter *writer)
0105 {
0106     Q_UNUSED(propertySet);
0107 
0108     writer->startElement("style:list-level-properties");
0109     ::saveAttributes(d->propertiesAttributes, writer);
0110     if (d->hasLabelAlignment) {
0111         writer->startElement("style:list-level-label-alignment");
0112         ::saveAttributes(d->labelAlignmentAttributes, writer);
0113         writer->endElement();
0114     }
0115     writer->endElement(); // style:text-properties
0116 
0117     return true;
0118 }