Esempio n. 1
0
    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)
Esempio n. 3
0
    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
Esempio n. 4
0
 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