from PySide import QtCore from PySide import QtGui import json def iconToBase64(icon, sz=QtCore.QSize(64, 64), mode=QtGui.QIcon.Mode.Normal, state=QtGui.QIcon.State.On): buf = QtCore.QBuffer() buf.open(QtCore.QIODevice.WriteOnly) icon.pixmap(sz, mode, state).save(buf, "PNG") result = None try: result = QtCore.QTextCodec.codecForName("UTF-8").toUnicode(buf.data().toBase64()) except Exception: t = QtCore.QTextStream(buf.data().toBase64()) t.setEncoding(QtCore.QStringDecoder.Encoding.Utf8) result = t.readAll() return result def iconToHTML(icon, sz=12, mode=QtGui.QIcon.Mode.Normal, state=QtGui.QIcon.State.On): return ( '' ) def serializeIcon(icon): iconPixmaps = {} for sz in icon.availableSizes(): strW = str(sz.width()) strH = str(sz.height()) iconPixmaps[strW] = {} iconPixmaps[strW][strH] = {} for strMode, mode in { "normal": QtGui.QIcon.Mode.Normal, "disabled": QtGui.QIcon.Mode.Disabled, "active": QtGui.QIcon.Mode.Active, "selected": QtGui.QIcon.Mode.Selected, }.items(): iconPixmaps[strW][strH][strMode] = {} for strState, state in {"off": QtGui.QIcon.State.Off, "on": QtGui.QIcon.State.On}.items(): iconPixmaps[strW][strH][strMode][strState] = iconToBase64(icon, sz, mode, state) return iconPixmaps # workbenches is a list(str), toolbar is a str, text is a str, icon is a QtGui.QIcon def serializeTool(tool): return { "workbenches": tool["workbenches"], "toolbar": tool["toolbar"], "text": tool["text"], "toolTip": tool["toolTip"], "icon": serializeIcon(tool["icon"]), } def deserializeIcon(iconPixmaps): ico = QtGui.QIcon() for strW, wPixmaps in iconPixmaps.items(): for strH, hPixmaps in wPixmaps.items(): for strMode, modePixmaps in hPixmaps.items(): mode = { "normal": QtGui.QIcon.Mode.Normal, "disabled": QtGui.QIcon.Mode.Disabled, "active": QtGui.QIcon.Mode.Active, "selected": QtGui.QIcon.Mode.Selected, }[strMode] for strState, statePixmap in modePixmaps.items(): state = {"off": QtGui.QIcon.State.Off, "on": QtGui.QIcon.State.On}[strState] pxm = QtGui.QPixmap() # pxm.loadFromData( # QtCore.QByteArray.fromBase64(QtCore.QTextCodec.codecForName("UTF-8").fromUnicode(statePixmap)) # ) t = QtCore.QTextStream(statePixmap) t.setEncoding(QtCore.QStringDecoder.Encoding.Utf8) pxm.loadFromData(t.readAll()) ico.addPixmap(pxm, mode, state) return ico def deserializeTool(tool): return { "workbenches": tool["workbenches"], "toolbar": tool["toolbar"], "text": tool["text"], "toolTip": tool["toolTip"], "icon": deserializeIcon(tool["icon"]), } def serializeItemGroup(itemGroup): return { "icon": serializeIcon(itemGroup["icon"]), "text": itemGroup["text"], "toolTip": itemGroup["toolTip"], "action": itemGroup["action"], "subitems": serializeItemGroups(itemGroup["subitems"]), } def serializeItemGroups(itemGroups): return [serializeItemGroup(itemGroup) for itemGroup in itemGroups] def serialize(itemGroups): return json.dumps(serializeItemGroups(itemGroups)) def deserializeItemGroup(itemGroup): return { "icon": deserializeIcon(itemGroup["icon"]), "text": itemGroup["text"], "toolTip": itemGroup["toolTip"], "action": itemGroup["action"], "subitems": deserializeItemGroups(itemGroup["subitems"]), } def deserializeItemGroups(serializedItemGroups): return [deserializeItemGroup(itemGroup) for itemGroup in serializedItemGroups] def deserialize(serializedItemGroups): return deserializeItemGroups(json.loads(serializedItemGroups))