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 }