def setModelData(self, editor, model, index): """ special method of QItemDelegate class """ subschema = json.loads( unicode(index.model().data(index, role=im.SUBSCHEMA).toString())) type = subschema['type'] editablearray = unicode(index.model().data( index, role=im.ISEDITABLEARRAY).toString()) editortype = None display = None if ("appinfo" in subschema and "display" in subschema["appinfo"]): display = subschema["appinfo"]['display'] if subschema.get("appinfo"): editortype = subschema.get("appinfo").get("editor") if "enum" in subschema: isenum = "true" enum = subschema['enum'] else: isenum = "false" if type == "integer": model.setData(index, QtCore.QVariant(editor.value())) elif type == "number": model.setData(index, QtCore.QVariant(editor.value())) elif editablearray == "editablearray": model.setData(index, editor.currentText(), role=im.ACTION) model.setData(index, QtCore.QVariant("add/remove item")) elif isenum == "true": model.setData(index, QtCore.QVariant(editor.currentText())) elif editortype == "RemoteDir": model.setData(index, QtCore.QVariant(editor.currentText())) myrow = index.row() parentitem = index.model().itemFromIndex(index.parent()) for row in range(myrow + 1, parentitem.rowCount()): model.setData(parentitem.child(row, 1).index(), ".") elif editortype == "File": files = editor.selectedFiles() if files: filename = unicode(files[0]) model.setData(index, QtCore.QVariant(filename.replace("\\", "/"))) if display == "MaskFile": myrow = index.row() image = index.model().itemFromIndex( index.sibling(index.row(), 0).child(0, 1)) try: pixmap = maskfileui.getMaskPixMapFromFile( filename).scaledToWidth(200) image.setData(QtCore.QVariant(pixmap), role=QtCore.Qt.DecorationRole) except Exception as e: print e #self.errormessage. else: QtGui.QItemDelegate.setModelData(self, editor, model, index)
def setModelData(self, editor, model, index): """ special method of QItemDelegate class """ subschema=json.loads(unicode(index.model().data(index,role=im.SUBSCHEMA).toString())) type=subschema['type'] editablearray= unicode(index.model().data(index,role=im.ISEDITABLEARRAY).toString()) editortype=None display=None if ("appinfo" in subschema and "display" in subschema["appinfo"]): display=subschema["appinfo"]['display'] if subschema.get("appinfo"): editortype= subschema.get("appinfo").get("editor") if "enum" in subschema: isenum="true" enum=subschema['enum'] else: isenum="false" if type == "integer": model.setData(index, QtCore.QVariant(editor.value())) elif type == "number": model.setData(index, QtCore.QVariant(editor.value())) elif editablearray=="editablearray": model.setData(index,editor.currentText(),role=im.ACTION) model.setData(index, QtCore.QVariant( "add/remove item")) elif isenum=="true": model.setData(index, QtCore.QVariant(editor.currentText())) elif editortype=="RemoteDir": model.setData(index, QtCore.QVariant(editor.currentText())) myrow= index.row() parentitem=index.model().itemFromIndex(index.parent()) for row in range(myrow+1,parentitem.rowCount()): model.setData(parentitem.child(row,1).index(), ".") elif editortype=="File": files=editor.selectedFiles() if files: filename=unicode( files[0]) model.setData(index,QtCore.QVariant(filename.replace("\\","/"))) if display=="MaskFile": myrow= index.row() image= index.model().itemFromIndex(index.sibling(index.row(),0 ).child(0,1)) try: pixmap=maskfileui.getMaskPixMapFromFile(filename).scaledToWidth(200) image.setData( QtCore.QVariant(pixmap ), role=QtCore.Qt.DecorationRole) except Exception as e: print e ctypes.windll.user32.MessageBoxA(0, "There seems to be a problem with the mask. Check Fit2D!", "Mask File:", 0x0|0x30) #self.errormessage. else: QtGui.QItemDelegate.setModelData(self, editor, model, index)
def bulidfromjson(self, input, schema, parent, row=0): """ generate QStandardItem data structure from json file """ for key in schema['properties']: if key == 'comment': continue item = QtGui.QStandardItem(key) item.setColumnCount(3) if "description" in schema['properties'][key]: tooltip = schema['properties'][key]['description'] + "\n" tooltip = re.sub(":[a-zA-Z]+:", "", tooltip) if "default" in schema['properties'][key]: tooltip += "\nDefault: " + str( schema['properties'][key]['default']) item.setToolTip(tooltip) parent.appendRow(item) value = QtGui.QStandardItem() value.setData(schema['properties'][key]['type'], role=TYPE) value.setData(json.dumps(schema['properties'][key]), role=SUBSCHEMA) if schema['properties'][key]['type'] != "string": value.setData(QtCore.Qt.AlignRight, role=QtCore.Qt.TextAlignmentRole) if schema['properties'][key]['type'] != "object": if row % 2 == 0: value.setBackground( QtGui.QBrush(QtGui.QColor(179, 215, 178), style=QtCore.Qt.SolidPattern)) else: value.setBackground( QtGui.QBrush(QtGui.QColor(212, 255, 211), style=QtCore.Qt.SolidPattern)) if schema['properties'][key]['type'] == "boolean": if key in input: boolv = input[key] else: boolv = schema['properties'][key]["default"] value.setCheckable(True) if boolv: value.setCheckState(2) else: value.setCheckState(0) elif schema['properties'][key][ 'type'] == "array" and key in input: for arrayindex, arrayitem in enumerate(input[key]): if "labels" in schema['properties'][key]['items']: itemlabel = schema['properties'][key]['items'][ "labels"][arrayindex] else: itemlabel = str(arrayindex) modelarrayitem = QtGui.QStandardItem(itemlabel) modelarrayitem.setColumnCount(3) modelarrayvalue = QtGui.QStandardItem() modelarrayvalue.setData(json.dumps( schema['properties'][key]["items"]), role=SUBSCHEMA) if (not "maxItems" in schema['properties'][key] or schema['properties'][key]["maxItems"] != schema['properties'][key]["minItems"]): value.setData("editablearray", role=ISEDITABLEARRAY) value.setData("add/remove item", role=QtCore.Qt.DisplayRole) modelarrayvalue.setData( schema['properties'][key]["items"]["type"], role=TYPE) modelarrayvalue.setData( QtCore.Qt.AlignRight, role=QtCore.Qt.TextAlignmentRole) if schema['properties'][key]["items"][ "type"] == "object": modelarrayvalue.setData("arrayitem", role=TYPE) item.appendRow([modelarrayitem, modelarrayvalue]) self.bulidfromjson( arrayitem, schema['properties'][key]["items"], modelarrayitem) else: modelarrayvalue.setData(str(arrayitem), role=QtCore.Qt.DisplayRole) item.appendRow([modelarrayitem, modelarrayvalue]) else: if key in input: value.setData(str(input[key]), role=QtCore.Qt.DisplayRole) if ("appinfo" in schema['properties'][key] and "display" in schema['properties'][key]["appinfo"]): display = schema['properties'][key]["appinfo"][ 'display'] if display == "MaskFile": maskimage = QtGui.QStandardItem() image = QtGui.QStandardItem() item.appendRow([maskimage, image]) try: pixmap = maskfileui.getMaskPixMapFromFile( input[key]).scaledToWidth(200) image.setData( QtCore.QVariant(pixmap), role=QtCore.Qt.DecorationRole) except Exception as e: print e pass elif "default" in schema['properties'][key]: value.setData(str( schema['properties'][key]['default']), role=QtCore.Qt.DisplayRole) if "description" in schema['properties'][key]: value.setToolTip(tooltip) parent.setChild(row, 1, value) if 'units' in schema['properties'][key]: units = QtGui.QStandardItem( str(schema['properties'][key]['units'])) parent.setChild(row, 2, units) if schema['properties'][key]['type'] == "object" or schema[ 'properties'][key]['type'] == "array": if (("required" in schema['properties'][key] and not schema['properties'][key]['required']) or not "required" in schema['properties'][key]): value.setCheckable(True) if key in input: value.setCheckState(2) else: value.setCheckState(0) parent.setChild(row, 1, value) if key in input and schema['properties'][key][ 'type'] == "object": value.setData("object", role=TYPE) self.bulidfromjson(input[key], schema['properties'][key], item) row += 1
def bulidfromjson(self, input, schema ,parent, row=0): """ generate QStandardItem data structure from json file """ for key in schema['properties']: if key=='comment': continue item=QtGui.QStandardItem(key) item.setColumnCount(3) if "description"in schema['properties'][key]: tooltip= schema['properties'][key]['description']+"\n" tooltip=re.sub(":[a-zA-Z]+:", "", tooltip) if "default" in schema['properties'][key]: tooltip+="\nDefault: " + str(schema['properties'][key]['default']) item.setToolTip(tooltip) parent.appendRow(item) value=QtGui.QStandardItem() value.setData(schema['properties'][key]['type'],role=TYPE) value.setData(json.dumps(schema['properties'][key]),role=SUBSCHEMA) if schema['properties'][key]['type']!="string": value.setData(QtCore.Qt.AlignRight,role=QtCore.Qt.TextAlignmentRole) if schema['properties'][key]['type']!="object": if row%2==0: value.setBackground(QtGui.QBrush(QtGui.QColor(179,215,178) ,style = QtCore.Qt.SolidPattern)) else: value.setBackground(QtGui.QBrush(QtGui.QColor(212,255,211) ,style = QtCore.Qt.SolidPattern)) if schema['properties'][key]['type']=="boolean": if key in input: boolv=input[key] else: boolv=schema['properties'][key]["default"] value.setCheckable(True) if boolv : value.setCheckState(2) else: value.setCheckState(0 ) elif schema['properties'][key]['type']=="array" and key in input : for arrayindex,arrayitem in enumerate(input[key]): modelarrayitem=QtGui.QStandardItem(str(arrayindex)) modelarrayitem.setColumnCount(3) modelarrayvalue=QtGui.QStandardItem() modelarrayvalue.setData(json.dumps(schema['properties'][key]["items"]),role=SUBSCHEMA) if (not "maxItems" in schema['properties'][key] or schema['properties'][key]["maxItems"]!=schema['properties'][key]["minItems"] ): value.setData("editablearray",role=ISEDITABLEARRAY) value.setData("add/remove item",role=QtCore.Qt.DisplayRole) modelarrayvalue.setData(schema['properties'][key]["items"]["type"],role=TYPE) modelarrayvalue.setData(QtCore.Qt.AlignRight,role=QtCore.Qt.TextAlignmentRole) if schema['properties'][key]["items"]["type"]=="object": modelarrayvalue.setData("arrayitem",role=TYPE) item.appendRow([modelarrayitem,modelarrayvalue]) self.bulidfromjson(arrayitem, schema['properties'][key]["items"], modelarrayitem) else: modelarrayvalue.setData(str(arrayitem),role=QtCore.Qt.DisplayRole) item.appendRow([modelarrayitem ,modelarrayvalue]) else: if key in input: value.setData(str(input[key]), role=QtCore.Qt.DisplayRole) if ("appinfo" in schema['properties'][key] and "display" in schema['properties'][key]["appinfo"]): display=schema['properties'][key]["appinfo"]['display'] if display=="MaskFile": maskimage=QtGui.QStandardItem() image=QtGui.QStandardItem() item.appendRow([maskimage ,image]) try: pixmap=maskfileui.getMaskPixMapFromFile(input[key]).scaledToWidth(200) image.setData( QtCore.QVariant(pixmap) , role=QtCore.Qt.DecorationRole) except Exception as e : print e pass elif "default" in schema['properties'][key]: value.setData(str(schema['properties'][key]['default']), role=QtCore.Qt.DisplayRole) if "description"in schema['properties'][key]: value.setToolTip(tooltip) parent.setChild(row,1,value) if 'units' in schema['properties'][key]: units=QtGui.QStandardItem(str(schema['properties'][key]['units'])) parent.setChild(row,2,units) if schema['properties'][key]['type']=="object" or schema['properties'][key]['type']=="array": if (("required" in schema['properties'][key] and not schema['properties'][key]['required']) or not "required" in schema['properties'][key]): value.setCheckable(True) if key in input: value.setCheckState(2) else: value.setCheckState(0) parent.setChild(row,1,value) if key in input and schema['properties'][key]['type']=="object": value.setData("object",role=TYPE) self.bulidfromjson(input[key], schema['properties'][key], item) row+=1