210 if (!_file.isNull()) {
218 QString file = _file;
220 if (!QDir::isRelativePath(file)) {
221 allFiles.append(file);
223 const QString filter =
componentName() + QLatin1Char(
'/') + _file;
226 allFiles << QStandardPaths::locateAll(QStandardPaths::AppDataLocation, QStringLiteral(
"kxmlgui5/") + filter);
229 const QString qrcFile(QStringLiteral(
":/kxmlgui5/") + filter);
230 if (QFile::exists(qrcFile)) {
236 QStandardPaths::locateAll(QStandardPaths::AppDataLocation, filter) +
237 QStandardPaths::locateAll(QStandardPaths::AppDataLocation, _file);
239 if (allFiles.isEmpty() && !compatFiles.isEmpty()) {
240 qWarning() <<
"kxmlguiclient: KisKXMLGUI file found at deprecated location" << compatFiles <<
"-- please use ${KisKXMLGUI_INSTALL_DIR} to install this file instead.";
242 allFiles += compatFiles;
244 if (allFiles.isEmpty() && !_file.isEmpty()) {
247 qWarning() <<
"cannot find .xmlgui file" << _file <<
"for component" <<
componentName();
251 if (!
d->
m_localXMLFile.isEmpty() && !file.endsWith(QStringLiteral(
"ui_standards.xmlgui"))) {
259 if (!allFiles.isEmpty()) {
291 const QLatin1String attrDomain(
"translationDomain");
292 QDomElement base = doc.documentElement();
293 QString domain = base.attribute(attrDomain);
294 if (domain.isEmpty()) {
295 domain = QString::fromUtf8(KLocalizedString::applicationDomain());
296 if (domain.isEmpty()) {
300 foreach (
const QString &tagName, tagNames) {
301 QDomNodeList textNodes = base.elementsByTagName(tagName);
302 for (
int i = 0; i < textNodes.length(); ++i) {
303 QDomElement e = textNodes.item(i).toElement();
304 QString localDomain = e.attribute(attrDomain);
305 if (localDomain.isEmpty()) {
306 e.setAttribute(attrDomain, domain);
381 const QLatin1String tagAction(
"Action");
382 const QLatin1String tagMerge(
"Merge");
383 const QLatin1String tagSeparator(
"Separator");
384 const QLatin1String tagMergeLocal(
"MergeLocal");
385 const QLatin1String tagText(
"text");
386 const QLatin1String attrAppend(
"append");
387 const QString attrName(QStringLiteral(
"name"));
388 const QString attrWeakSeparator(QStringLiteral(
"weakSeparator"));
389 const QString attrAlreadyVisited(QStringLiteral(
"alreadyVisited"));
390 const QString attrNoMerge(QStringLiteral(
"noMerge"));
391 const QLatin1String attrOne(
"1");
398 if (additive.attribute(attrNoMerge) == attrOne) {
399 base.parentNode().replaceChild(additive, base);
404 const QDomNamedNodeMap attribs = additive.attributes();
405 const uint attribcount = attribs.count();
407 for (
uint i = 0; i < attribcount; ++i) {
408 const QDomNode node = attribs.item(i);
409 base.setAttribute(node.nodeName(), node.nodeValue());
414 QDomNode n = base.firstChild();
415 while (!n.isNull()) {
416 QDomElement e = n.toElement();
422 const QString tag = e.tagName();
427 const QString name = e.attribute(attrName);
437 else if (
equalstr(tag, tagSeparator)) {
438 e.setAttribute(attrWeakSeparator, (
uint)1);
443 QDomElement prev = e.previousSibling().toElement();
445 (
equalstr(prev.tagName(), tagSeparator) && !prev.attribute(attrWeakSeparator).isNull()) ||
446 (
equalstr(prev.tagName(), tagText))) {
456 else if (
equalstr(tag, tagMergeLocal)) {
457 QDomNode it = additive.firstChild();
458 while (!it.isNull()) {
459 QDomElement newChild = it.toElement();
460 it = it.nextSibling();
461 if (newChild.isNull()) {
465 if (
equalstr(newChild.tagName(), tagText)) {
469 if (newChild.attribute(attrAlreadyVisited) == attrOne) {
473 QString itAppend(newChild.attribute(attrAppend));
474 QString elemName(e.attribute(attrName));
476 if ((itAppend.isNull() && elemName.isEmpty()) ||
477 (itAppend == elemName)) {
481 QDomElement matchingElement = findMatchingElement(newChild, base);
482 if (matchingElement.isNull() ||
equalstr(newChild.tagName(), tagSeparator)) {
483 base.insertBefore(newChild, e);
494 }
else if (
equalstr(tag, tagMerge)) {
503 QDomElement matchingElement = findMatchingElement(e, additive);
504 if (!matchingElement.isNull()) {
505 matchingElement.setAttribute(attrAlreadyVisited, (
uint)1);
509 additive.removeChild(matchingElement);
531 n = additive.firstChild();
532 while (!n.isNull()) {
533 QDomElement e = n.toElement();
539 QDomElement matchingElement = findMatchingElement(e, base);
541 if (matchingElement.isNull()) {
548 QDomElement last = base.lastChild().toElement();
549 if (
equalstr(last.tagName(), tagSeparator) &&
550 (!last.attribute(attrWeakSeparator).isNull())) {
551 base.removeChild(last);