Krita Source Code Documentation
Loading...
Searching...
No Matches
kxmlguiversionhandler.cpp File Reference
#include "kxmlguiversionhandler_p.h"
#include "kxmlguifactory.h"
#include <QFile>
#include <QDomDocument>
#include <QDomElement>
#include <QStandardPaths>
#include <QMap>

Go to the source code of this file.

Classes

struct  DocStruct
 

Typedefs

typedef QMap< QString, QMap< QString, QString > > ActionPropertiesMap
 

Functions

static ActionPropertiesMap extractActionProperties (const QDomDocument &doc)
 
static QList< QDomElement > extractToolBars (const QDomDocument &doc)
 
static void insertToolBars (QDomDocument &doc, const QList< QDomElement > &toolBars)
 
static void removeToolBars (QDomDocument &doc, const QStringList &toolBarNames)
 
static void storeActionProperties (QDomDocument &doc, const ActionPropertiesMap &properties)
 
static QStringList toolBarNames (const QList< QDomElement > &toolBars)
 

Typedef Documentation

◆ ActionPropertiesMap

typedef QMap<QString, QMap<QString, QString> > ActionPropertiesMap

Definition at line 75 of file kxmlguiversionhandler.cpp.

Function Documentation

◆ extractActionProperties()

static ActionPropertiesMap extractActionProperties ( const QDomDocument & doc)
static

Definition at line 77 of file kxmlguiversionhandler.cpp.

78{
79 ActionPropertiesMap properties;
80
81 QDomElement actionPropElement = doc.documentElement().namedItem(QStringLiteral("ActionProperties")).toElement();
82
83 if (actionPropElement.isNull()) {
84 return properties;
85 }
86
87 QDomNode n = actionPropElement.firstChild();
88 while (!n.isNull()) {
89 QDomElement e = n.toElement();
90 n = n.nextSibling(); // Advance now so that we can safely delete e
91 if (e.isNull()) {
92 continue;
93 }
94
95 if (e.tagName().compare(QStringLiteral("action"), Qt::CaseInsensitive) != 0) {
96 continue;
97 }
98
99 const QString actionName = e.attribute(QStringLiteral("name"));
100 if (actionName.isEmpty()) {
101 continue;
102 }
103
104 QMap<QString, QMap<QString, QString> >::Iterator propIt = properties.find(actionName);
105 if (propIt == properties.end()) {
106 propIt = properties.insert(actionName, QMap<QString, QString>());
107 }
108
109 const QDomNamedNodeMap attributes = e.attributes();
110 const uint attributeslength = attributes.length();
111
112 for (uint i = 0; i < attributeslength; ++i) {
113 const QDomAttr attr = attributes.item(i).toAttr();
114
115 if (attr.isNull()) {
116 continue;
117 }
118
119 const QString name = attr.name();
120
121 if (name == QStringLiteral("name") || name.isEmpty()) {
122 continue;
123 }
124
125 (*propIt)[ name ] = attr.value();
126 }
127
128 }
129
130 return properties;
131}
unsigned int uint
QMap< QString, QMap< QString, QString > > ActionPropertiesMap
const char * name(StandardAction id)

◆ extractToolBars()

static QList< QDomElement > extractToolBars ( const QDomDocument & doc)
static

Definition at line 24 of file kxmlguiversionhandler.cpp.

25{
26 QList<QDomElement> toolbars;
27 QDomElement parent = doc.documentElement();
28 for (QDomElement e = parent.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) {
29 if (e.tagName().compare(QStringLiteral("ToolBar"), Qt::CaseInsensitive) == 0) {
30 toolbars.append(e);
31 }
32 }
33 return toolbars;
34}
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

◆ insertToolBars()

static void insertToolBars ( QDomDocument & doc,
const QList< QDomElement > & toolBars )
static

Definition at line 59 of file kxmlguiversionhandler.cpp.

60{
61 QDomElement parent = doc.documentElement();
62 QDomElement menuBar = parent.namedItem(QStringLiteral("MenuBar")).toElement();
63 QDomElement insertAfter = menuBar;
64 if (menuBar.isNull()) {
65 insertAfter = parent.firstChildElement(); // if null, insertAfter will do an append
66 }
67 Q_FOREACH (const QDomElement &e, toolBars) {
68 QDomNode result = parent.insertAfter(e, insertAfter);
69 Q_ASSERT(!result.isNull());
70 }
71}

◆ removeToolBars()

static void removeToolBars ( QDomDocument & doc,
const QStringList & toolBarNames )
static

Definition at line 46 of file kxmlguiversionhandler.cpp.

48{
49 QDomElement parent = doc.documentElement();
50 const QList<QDomElement> toolBars = extractToolBars(doc);
51 Q_FOREACH (const QDomElement &e, toolBars) {
52 if (toolBarNames.contains(e.attribute(QStringLiteral("name")))) {
53 parent.removeChild(e);
54 }
55
56 }
57}
static QStringList toolBarNames(const QList< QDomElement > &toolBars)
static QList< QDomElement > extractToolBars(const QDomDocument &doc)

References extractToolBars(), and toolBarNames().

◆ storeActionProperties()

static void storeActionProperties ( QDomDocument & doc,
const ActionPropertiesMap & properties )
static

Definition at line 133 of file kxmlguiversionhandler.cpp.

135{
136 QDomElement actionPropElement = doc.documentElement().namedItem(QStringLiteral("ActionProperties")).toElement();
137
138 if (actionPropElement.isNull()) {
139 actionPropElement = doc.createElement(QStringLiteral("ActionProperties"));
140 doc.documentElement().appendChild(actionPropElement);
141 }
142
143//Remove only those ActionProperties entries from the document, that are present
144//in the properties argument. In real life this means that local ActionProperties
145//takes precedence over global ones, if they exists (think local override of shortcuts).
146 QDomNode actionNode = actionPropElement.firstChild();
147 while (!actionNode.isNull()) {
148 if (properties.contains(actionNode.toElement().attribute(QStringLiteral("name")))) {
149 QDomNode nextNode = actionNode.nextSibling();
150 actionPropElement.removeChild(actionNode);
151 actionNode = nextNode;
152 } else {
153 actionNode = actionNode.nextSibling();
154 }
155 }
156
157 ActionPropertiesMap::ConstIterator it = properties.begin();
158 const ActionPropertiesMap::ConstIterator end = properties.end();
159 for (; it != end; ++it) {
160 QDomElement action = doc.createElement(QStringLiteral("Action"));
161 action.setAttribute(QStringLiteral("name"), it.key());
162 actionPropElement.appendChild(action);
163
164 const QMap<QString, QString> attributes = (*it);
165 QMap<QString, QString>::ConstIterator attrIt = attributes.begin();
166 const QMap<QString, QString>::ConstIterator attrEnd = attributes.end();
167 for (; attrIt != attrEnd; ++attrIt) {
168 action.setAttribute(attrIt.key(), attrIt.value());
169 }
170 }
171}

◆ toolBarNames()

static QStringList toolBarNames ( const QList< QDomElement > & toolBars)
static

Definition at line 36 of file kxmlguiversionhandler.cpp.

37{
38 QStringList names;
39 names.reserve(toolBars.count());
40 for (const QDomElement &e : toolBars) {
41 names.append(e.attribute(QStringLiteral("name")));
42 }
43 return names;
44}