211 if (!_file.isNull()) {
219 QString file = _file;
221 if (!QDir::isRelativePath(file)) {
222 allFiles.append(file);
224 const QString filter =
componentName() + QLatin1Char(
'/') + _file;
227 allFiles << QStandardPaths::locateAll(QStandardPaths::AppDataLocation, QStringLiteral(
"kxmlgui5/") + filter);
230 const QString qrcFile(QStringLiteral(
":/kxmlgui5/") + filter);
231 if (QFile::exists(qrcFile)) {
237 QStandardPaths::locateAll(QStandardPaths::AppDataLocation, filter) +
238 QStandardPaths::locateAll(QStandardPaths::AppDataLocation, _file);
240 if (allFiles.isEmpty() && !compatFiles.isEmpty()) {
241 qWarning() <<
"kxmlguiclient: KisKXMLGUI file found at deprecated location" << compatFiles <<
"-- please use ${KisKXMLGUI_INSTALL_DIR} to install this file instead.";
243 allFiles += compatFiles;
245 if (allFiles.isEmpty() && !_file.isEmpty()) {
248 qWarning() <<
"cannot find .xmlgui file" << _file <<
"for component" <<
componentName();
252 if (!
d->
m_localXMLFile.isEmpty() && !file.endsWith(QStringLiteral(
"ui_standards.xmlgui"))) {
260 if (!allFiles.isEmpty()) {
292 const QLatin1String attrDomain(
"translationDomain");
293 QDomElement base = doc.documentElement();
294 QString domain = base.attribute(attrDomain);
295 if (domain.isEmpty()) {
296 domain = QString::fromUtf8(KLocalizedString::applicationDomain());
297 if (domain.isEmpty()) {
301 foreach (
const QString &tagName, tagNames) {
302 QDomNodeList textNodes = base.elementsByTagName(tagName);
303 for (
int i = 0; i < textNodes.length(); ++i) {
304 QDomElement e = textNodes.item(i).toElement();
305 QString localDomain = e.attribute(attrDomain);
306 if (localDomain.isEmpty()) {
307 e.setAttribute(attrDomain, domain);
374 const QLatin1String tagAction(
"Action");
375 const QLatin1String tagMerge(
"Merge");
376 const QLatin1String tagSeparator(
"Separator");
377 const QLatin1String tagMergeLocal(
"MergeLocal");
378 const QLatin1String tagText(
"text");
379 const QLatin1String attrAppend(
"append");
380 const QString attrName(QStringLiteral(
"name"));
381 const QString attrWeakSeparator(QStringLiteral(
"weakSeparator"));
382 const QString attrAlreadyVisited(QStringLiteral(
"alreadyVisited"));
383 const QString attrNoMerge(QStringLiteral(
"noMerge"));
384 const QLatin1String attrOne(
"1");
391 if (additive.attribute(attrNoMerge) == attrOne) {
392 base.parentNode().replaceChild(additive, base);
397 const QDomNamedNodeMap attribs = additive.attributes();
398 const uint attribcount = attribs.count();
400 for (
uint i = 0; i < attribcount; ++i) {
401 const QDomNode node = attribs.item(i);
402 base.setAttribute(node.nodeName(), node.nodeValue());
407 QDomNode n = base.firstChild();
408 while (!n.isNull()) {
409 QDomElement e = n.toElement();
415 const QString tag = e.tagName();
420 const QString name = e.attribute(attrName);
421 if (!actionCollection->
action(name)) {
430 else if (
equalstr(tag, tagSeparator)) {
431 e.setAttribute(attrWeakSeparator, (
uint)1);
436 QDomElement prev = e.previousSibling().toElement();
438 (
equalstr(prev.tagName(), tagSeparator) && !prev.attribute(attrWeakSeparator).isNull()) ||
439 (
equalstr(prev.tagName(), tagText))) {
449 else if (
equalstr(tag, tagMergeLocal)) {
450 QDomNode it = additive.firstChild();
451 while (!it.isNull()) {
452 QDomElement newChild = it.toElement();
453 it = it.nextSibling();
454 if (newChild.isNull()) {
458 if (
equalstr(newChild.tagName(), tagText)) {
462 if (newChild.attribute(attrAlreadyVisited) == attrOne) {
466 QString itAppend(newChild.attribute(attrAppend));
467 QString elemName(e.attribute(attrName));
469 if ((itAppend.isNull() && elemName.isEmpty()) ||
470 (itAppend == elemName)) {
475 if (matchingElement.isNull() ||
equalstr(newChild.tagName(), tagSeparator)) {
476 base.insertBefore(newChild, e);
487 }
else if (
equalstr(tag, tagMerge)) {
497 if (!matchingElement.isNull()) {
498 matchingElement.setAttribute(attrAlreadyVisited, (
uint)1);
500 if (
mergeXML(e, matchingElement, actionCollection)) {
502 additive.removeChild(matchingElement);
514 if (
mergeXML(e, dummy, actionCollection)) {
524 n = additive.firstChild();
525 while (!n.isNull()) {
526 QDomElement e = n.toElement();
534 if (matchingElement.isNull()) {
541 QDomElement last = base.lastChild().toElement();
542 if (
equalstr(last.tagName(), tagSeparator) &&
543 (!last.attribute(attrWeakSeparator).isNull())) {
544 base.removeChild(last);