[PyKDE] kdepyuic modifications

Mikhail Yarmish mike.spacer at gmail.com
Sun Feb 12 10:05:49 GMT 2006


    Guys, thank you all for the advices. I've remade my addition in more 
universal way. Looks like all widgets which qt-desigener uses are from 
kdeui and kfile modules,  so imports are just from them now. If it use 
another modules just little additions will need. At the moment all 
imports works nice but I suggest somebody make tests too.
    Attachment is a diff-patch like you asked.
-------------- next part --------------
--- kdepyuic.old	2006-02-12 12:55:57.000000000 +0300
+++ kdepyuic	2006-02-12 12:55:36.000000000 +0300
@@ -28,6 +28,7 @@
 # 2003/04/19: some minor bits from Hans-Peter Jansen, <hpj at urpla.net>
 
 import sys, getopt, os, os.path, string
+import kdeui, kfile
 
 #---------- globals ----------
 
@@ -140,9 +141,71 @@
 
         os.unlink (fn)
         os.rename (fn + '.tmp', fn)
-
+        
+    postFilter(fn)
     print fn + ' written'
 
+def makeWidgetsList(modName): # make list of widgets by module name
+    widgetsList = []
+    
+    if modName == "kdeui":
+        for item in dir(kdeui):
+            if not item.startswith("__"):
+                widgetsList.append(item)
+    elif modName == "kfile":
+        for item in dir(kfile):
+            if not item.startswith("__"):
+                widgetsList.append(item)
+                
+    return widgetsList
+
+def searchKDEWidgets(buff): # search all KDE widgets
+    modNames = ["kdeui", "kfile"]
+    fullImport = ""
+    
+    for mod in modNames:
+        modWidgets = makeWidgetsList(mod)
+        importStr = checkMod(mod, modWidgets, buff)
+        if importStr != "":
+            fullImport += importStr
+    
+    return fullImport
+    
+    
+def checkMod(mod, modWidgets, buff): # check widgets from one module
+    usedWidgets = []
+    modImport = ""
+    for widget in modWidgets:
+        if string.find(buff, widget + "(") != -1:
+            usedWidgets.append(widget)
+    if len(usedWidgets) > 0:
+        importStr = "from " + mod + " import "
+        for widget in usedWidgets:
+            importStr = importStr + widget + ", "
+        modImport = modImport + importStr[:-2] + "\n"
+    
+    return modImport
+
+def postFilter(fn): # main procedure for making KDE imports
+    m = open (fn, 'r')
+    n = open (fn + '.tmp', 'w')
+    buffList = m.readlines()
+    for num in range(8):
+        n.write(buffList[num])
+        num += 1
+    buff = ""
+    for str in buffList[9:]:
+        buff = buff + str
+
+    imp = searchKDEWidgets(buff)
+    if imp != "":
+        n.write(imp)
+    n.write(buff)
+    
+    n.close()
+    m.close()
+    os.unlink(fn)
+    os.rename(fn + '.tmp', fn)
 
 # --------- main ----------
 


More information about the PyQt mailing list