File indexing completed on 2024-06-02 05:43:54

0001 /*
0002     SPDX-FileCopyrightText: 2003-2009 Craig Drummond <craig@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "Family.h"
0007 #include "Misc.h"
0008 #include "XmlStrings.h"
0009 #include <QDebug>
0010 #include <QDomElement>
0011 #include <QTextStream>
0012 
0013 namespace KFI
0014 {
0015 Family::Family(const QDomElement &elem, bool loadStyles)
0016 {
0017     if (elem.hasAttribute(FAMILY_ATTR)) {
0018         m_name = elem.attribute(FAMILY_ATTR);
0019     }
0020     if (elem.hasAttribute(NAME_ATTR)) {
0021         m_name = elem.attribute(NAME_ATTR);
0022     }
0023     if (loadStyles) {
0024         for (QDomNode n = elem.firstChild(); !n.isNull(); n = n.nextSibling()) {
0025             QDomElement ent = n.toElement();
0026 
0027             if (FONT_TAG == ent.tagName()) {
0028                 Style style(ent, loadStyles);
0029 
0030                 if (!style.files().isEmpty()) {
0031                     m_styles.insert(style);
0032                 }
0033             }
0034         }
0035     }
0036 }
0037 
0038 void Family::toXml(bool disabled, QTextStream &s) const
0039 {
0040     QString family(KFI::Misc::encodeText(m_name));
0041     QStringList entries;
0042     StyleCont::ConstIterator it(m_styles.begin()), end(m_styles.end());
0043 
0044     for (; it != end; ++it) {
0045         QString entry((*it).toXml(disabled, disabled ? family : QString()));
0046 
0047         if (!entry.isEmpty()) {
0048             entries.append(entry);
0049         }
0050     }
0051 
0052     if (entries.count() > 0) {
0053         if (!disabled) {
0054             s << " <" FAMILY_TAG " " NAME_ATTR "=\"" << KFI::Misc::encodeText(m_name) << "\">\n";
0055         }
0056 
0057         QStringList::ConstIterator it(entries.begin()), end(entries.end());
0058 
0059         for (; it != end; ++it) {
0060             s << *it << Qt::endl;
0061         }
0062 
0063         if (!disabled) {
0064             s << " </" FAMILY_TAG ">" << Qt::endl;
0065         }
0066     }
0067 }
0068 
0069 }
0070 
0071 QDBusArgument &operator<<(QDBusArgument &argument, const KFI::Family &obj)
0072 {
0073     argument.beginStructure();
0074     argument << obj.name();
0075 
0076     argument.beginArray(qMetaTypeId<KFI::Style>());
0077     KFI::StyleCont::ConstIterator it(obj.styles().begin()), end(obj.styles().end());
0078     for (; it != end; ++it) {
0079         argument << *it;
0080     }
0081     argument.endArray();
0082     argument.endStructure();
0083     return argument;
0084 }
0085 
0086 const QDBusArgument &operator>>(const QDBusArgument &argument, KFI::Family &obj)
0087 {
0088     QString name;
0089     argument.beginStructure();
0090     argument >> name;
0091     obj = KFI::Family(name);
0092     argument.beginArray();
0093     while (!argument.atEnd()) {
0094         KFI::Style st;
0095         argument >> st;
0096         obj.add(st);
0097     }
0098     argument.endArray();
0099     argument.endStructure();
0100     return argument;
0101 }
0102 
0103 QDBusArgument &operator<<(QDBusArgument &argument, const KFI::Families &obj)
0104 {
0105     argument.beginStructure();
0106     argument << obj.isSystem;
0107 
0108     argument.beginArray(qMetaTypeId<KFI::Family>());
0109     KFI::FamilyCont::ConstIterator it(obj.items.begin()), end(obj.items.end());
0110 
0111     for (; it != end; ++it) {
0112         argument << *it;
0113     }
0114     argument.endArray();
0115     argument.endStructure();
0116     return argument;
0117 }
0118 
0119 const QDBusArgument &operator>>(const QDBusArgument &argument, KFI::Families &obj)
0120 {
0121     argument.beginStructure();
0122     argument >> obj.isSystem;
0123     argument.beginArray();
0124     while (!argument.atEnd()) {
0125         KFI::Family fam;
0126         argument >> fam;
0127         obj.items.insert(fam);
0128     }
0129     argument.endArray();
0130     argument.endStructure();
0131     return argument;
0132 }