From bf41e51d6e685dea5c80e1de2b008221a5d5bbc9 Mon Sep 17 00:00:00 2001
From: "benjamin.jakimow@geo.hu-berlin.de" <q8DTkxUg-BB>
Date: Wed, 30 Nov 2016 19:45:15 +0100
Subject: [PATCH] improved reading of *.qrc from *.ui xml

---
 make/make.py | 78 +++++++++++++++++++++++++++++++++-------------------
 1 file changed, 49 insertions(+), 29 deletions(-)

diff --git a/make/make.py b/make/make.py
index f12315f8..7019a51b 100644
--- a/make/make.py
+++ b/make/make.py
@@ -4,7 +4,7 @@ from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 from PyQt4.QtXml import *
 from PyQt4.QtXmlPatterns import *
-ROOT = os.path.dirname(os.path.dirname(__file__))
+
 from timeseriesviewer import DIR_UI, file_search
 jp = os.path.join
 
@@ -18,22 +18,22 @@ def getDOMAttributes(elem):
         values[str(attr.nodeName())] = attr.nodeValue()
     return values
 
-def make():
+def make(ROOT):
     #find ui files
     ui_files = file_search(ROOT, '*.ui', recursive=True)
     qrcs = set()
 
     doc = QDomDocument()
+    reg = re.compile('(?<=resource=")[^"]+\.qrc(?=")')
+
     for ui_file in ui_files:
         pathDir = os.path.dirname(ui_file)
-        if doc.setContent(QFile(ui_file)):
-            items = doc.elementsByTagName('iconset')
-            for i in range(items.count()):
-                nodeQRC = items.item(i)
-                attr = getDOMAttributes(nodeQRC.toElement())
-                if 'resource' in attr.keys():
-                    qrcs.add((pathDir, str(attr['resource'])))
-                s = ""
+        doc.setContent(QFile(ui_file))
+        includeNodes = doc.elementsByTagName('include')
+        for i in range(includeNodes.count()):
+            attr = getDOMAttributes(includeNodes.item(i).toElement())
+            if 'location' in attr.keys():
+                qrcs.add((pathDir, str(attr['location'])))
 
     #compile Qt resource files
     #resourcefiles = file_search(ROOT, '*.qrc', recursive=True)
@@ -120,7 +120,7 @@ def svg2png(pathDir, overwrite=False, mode='INKSCAPE'):
             s = ""
 
 
-def png2qrc(icondir, pathQrc):
+def png2qrc(icondir, pathQrc, pngprefix='timeseriesviewer/png'):
     pathQrc = os.path.abspath(pathQrc)
     dirQrc = os.path.dirname(pathQrc)
     app = QApplication([])
@@ -130,8 +130,8 @@ def png2qrc(icondir, pathQrc):
 
     query = QXmlQuery()
     #query.setQuery("doc('{}')/RCC/qresource/file".format(pathQrc))
-    query.setQuery("doc('{}')/RCC/qresource[@prefix=\"enmapbox/png\"]/file".format(pathQrc))
-    query.setQuery("for $x in doc('{}')/RCC/qresource[@prefix=\"enmapbox/png\"] return data($x)".format(pathQrc))
+    query.setQuery("doc('{}')/RCC/qresource[@prefix=\"{}\"]/file".format(pathQrc, pngprefix))
+    query.setQuery("for $x in doc('{}')/RCC/qresource[@prefix=\"{}\"] return data($x)".format(pathQrc, pngprefix))
     assert query.isValid()
     #elem = doc.elementsByTagName('qresource')print
     pngFiles = [r.strip() for r in str(query.evaluateToString()).split('\n')]
@@ -142,19 +142,36 @@ def png2qrc(icondir, pathQrc):
         pngFiles.add(xmlPath)
 
     pngFiles = sorted(list(pngFiles))
-    resourceNodes = doc.elementsByTagName('qresource')
-    for i in range(resourceNodes.count()):
-        resourceNode = resourceNodes.item(i).toElement()
-        if resourceNode.hasAttribute('prefix') and resourceNode.attribute('prefix') == "enmapbox/png":
-            childs = resourceNode.childNodes()
-            while not childs.isEmpty():
-                node = childs.item(0)
-                node.parentNode().removeChild(node)
-
-            for pngFile in pngFiles:
-                node = doc.createElement('file')
-                node.appendChild(doc.createTextNode(pngFile))
-                resourceNode.appendChild(node)
+
+    def getResourcePrefixNodes(prefix):
+        resourceNodes = doc.elementsByTagName('qresource')
+        nodeList = []
+        for i in range(resourceNodes.count()):
+            resourceNode = resourceNodes.item(i).toElement()
+            if resourceNode.hasAttribute('prefix') and resourceNode.attribute('prefix') == prefix:
+                nodeList.append(resourceNode)
+        return nodeList
+
+
+    resourceNode = getResourcePrefixNodes(pngprefix)
+    if len(resourceNode) > 0:
+        resourceNode = resourceNode[0]
+    else:
+        resourceNode = doc.createElement('qresource')
+        resourceNode.setAttribute('prefix', pngprefix)
+
+    #remove childs, as we have all stored in list pngFiles
+    childs = resourceNode.childNodes()
+    while not childs.isEmpty():
+        node = childs.item(0)
+        node.parentNode().removeChild(node)
+
+    #insert new childs
+    for pngFile in pngFiles:
+        node = doc.createElement('file')
+        node.appendChild(doc.createTextNode(pngFile))
+        resourceNode.appendChild(node)
+
     f = open(pathQrc, "w")
     f.write(doc.toString())
     f.close()
@@ -165,10 +182,13 @@ def png2qrc(icondir, pathQrc):
 if __name__ == '__main__':
     icondir = jp(DIR_UI, *['icons'])
     pathQrc = jp(DIR_UI,'resources.qrc')
-    if False:
+    if True:
         #convert SVG to PNG and link them into the resource file
-        svg2png(icondir, overwrite=True)
+        #svg2png(icondir, overwrite=True)
+
+        #add png icons to qrc file
         png2qrc(icondir, pathQrc)
-    if True: make()
+    if True:
+        make(DIR_UI)
     print('Done')
 
-- 
GitLab