source: orange/install-scripts/doc/widgetCatalogs.py @ 3993:146f3d0a141b

Revision 3993:146f3d0a141b, 4.0 KB checked in by tomazc <tomaz.curk@…>, 6 years ago (diff)

need this before Qt4 become trunk (main branch)

Line 
1def getWidgetsByCategory(xmlfilename):
2    categories = {}
3    from xml.dom import minidom
4    for categoryNode in minidom.parse(open(xmlfilename)).getElementsByTagName("category"):
5        category = categoryNode.getAttribute("name")
6        if category == "Prototypes" or categoryNode.hasAttribute("directory"):
7            continue
8        for widgetNode in categoryNode.getElementsByTagName("widget"):
9            categories.setdefault(category, []).append(dict([(x, widgetNode.getAttribute(x)) for x in ["name", "contact", "icon", "priority", "file", "in", "out"]]))
10    for cw in categories.values():
11        cw.sort(lambda x,y: cmp(int(x["priority"]), int(y["priority"])) or cmp(x["name"], y["name"]))
12    return categories
13
14
15def mergeCategories(categoriesOrder, xmlCategories):
16    return categoriesOrder + [x for x in xmlCategories.keys() if x not in categoriesOrder]
17
18
19def createCanvasCatalogPage(xmlCategories, docpath =".", categoriesOrder = ["Data", "Visualize", "Classify", "Evaluate", "Associate", "Regression"], verbose=False):
20    from os.path import exists
21   
22    catalogPage = "<table>"
23    if docpath[-1] not in "\\/":
24        docpath += "/"
25   
26    for category in mergeCategories(categoriesOrder, xmlCategories):
27        catalogPage += '<tr><td COLSPAN="6" style="border-bottom: 2px solid #F8CB66; padding-left: 4px; font-weight:bold; padding-top: 12px; padding-bottom: 4px; margin-bottom: 12px;">%s</td></tr>\n\n\n' % category
28        catalogPage += '<tr valign="top">\n'
29        for i, widget in enumerate(xmlCategories[category]):
30            if i and not i % 6:
31                catalogPage += '</tr><tr valign="top">'
32            name = widget["name"]
33            namep = name.replace(" ", "")
34            htmlfile = docpath + category + "/" + namep + ".htm"
35            icon = widget["icon"]
36            if not exists(docpath + icon):
37                icon = "icons/" + namep + ".png"
38                if not exists(docpath + icon):
39                    icon = "icons/Unknown.png"
40            if verbose:
41                contact = widget["contact"]
42                if "(" in contact:
43                    widget["contact"] = contact[:contact.index("(")]
44                verb = '<br/><font color="#bbbbbb"><small><br>%(file)s, %(priority)s<br>%(contact)s<br></small></font>' % widget
45            else:
46                verb = ""
47            if exists(htmlfile):
48                catalogPage += '<td align="center" style="padding-bottom: 12px; padding-top: 6px"><a href="%s"><img src="%s"><br/>%s</a>%s</td>' % (htmlfile, icon, name, verb)
49            else:
50                catalogPage += '<td align="center" style="padding-bottom: 12px; padding-top: 6px"><img src="%s"><br/><FONT COLOR="#bbbbbb">%s</FONT>%s</td>\n\n' % (icon, name, verb)
51        catalogPage += '</tr>'
52
53    catalogPage += "</table>"
54   
55    return catalogPage
56
57
58def createHHStructure(xmlCategories, docpath = ".", categoriesOrder = ["Data", "Visualize", "Classify", "Evaluate", "Associate", "Regression"]):
59    from os.path import exists
60   
61    hhStructure = "Widget Catalog ---> default.htm\n"
62   
63    if docpath[-1] not in "\\/":
64        docpath += "/"
65
66    for category in mergeCategories(categoriesOrder, xmlCategories):
67        introduction = "\t%s ---> default.htm\n" % category
68        for widget in xmlCategories[category]:
69            name = widget["name"]
70            catnamep = category + "/" + name.replace(" ", "") + ".htm"
71            if exists(docpath + catnamep):
72                hhStructure += introduction
73                introduction = ""
74                hhStructure += "\t\t%s ---> %s\n" % (name, catnamep)
75               
76    return hhStructure               
77
78if __name__=="__main__":
79    from sys import argv
80    categories = getWidgetsByCategory(argv[2])
81    docpath = len(argv) > 3 and argv[3] or "."
82   
83    if argv[1] == "hh":
84        print createHHStructure(categories, docpath)
85    elif argv[1] == "html":
86        print createCanvasCatalogPage(categories, docpath)
87    elif argv[1] == "htmlverb":
88        print createCanvasCatalogPage(categories, docpath, verbose=True)
Note: See TracBrowser for help on using the repository browser.