예제 #1
0
 def _parseDict(self, config, ui):
     l = QVBoxLayout()
     lst = list(config.keys())
     for k in lst:
         t = type(config[k])
         if t == type(int()):
             hbox = QHBoxLayout()
             label = QLabel(k)
             edit = QLineEdit(str(config[k]))
             val = QIntValidator(self)
             edit.setValidator(val)
             hbox.addWidget(label)
             hbox.addWidget(edit)
             l.addLayout(hbox)
             ui[k] = (edit, label, hbox, val)
         elif t == type(float()):
             hbox = QHBoxLayout()
             label = QLabel(k)
             edit = QLineEdit(str(config[k]))
             val = QDoubleValidator(self)
             edit.setValidator(val)
             hbox.addWidget(label)
             hbox.addWidget(edit)
             l.addLayout(hbox)
             ui[k] = (edit, label, hbox, val)
         elif t == type(list()):
             hbox = QHBoxLayout()
             label = QLabel(k)
             edit = QComboBox()
             i = 0
             for s in config[k][0]:
                 edit.addItem(s)
                 if i == config[k][1]:
                     edit.setCurrentIndex(i)
                 i += 1
             hbox.addWidget(label)
             hbox.addWidget(edit)
             l.addLayout(hbox)
             ui[k] = (edit, label, hbox)
         elif t == type(dict()):
             gbox = QGroupBox()
             gbox.setTitle(k)
             ui[k] = {"gbox":gbox}
             l2 = self._parseDict(config[k], ui[k])
             ui[k]["layout"] = l2
             gbox.setLayout(l2)
             l.addWidget(gbox)
     return l
예제 #2
0
 def _parseDict(self, config, ui):
     l = QVBoxLayout()
     lst = list(config.keys())
     for k in lst:
         t = type(config[k])
         if t == type(int()):
             hbox = QHBoxLayout()
             label = QLabel(k)
             edit = QLineEdit(str(config[k]))
             val = QIntValidator(self)
             edit.setValidator(val)
             hbox.addWidget(label)
             hbox.addWidget(edit)
             l.addLayout(hbox)
             ui[k] = (edit, label, hbox, val)
         elif t == type(float()):
             hbox = QHBoxLayout()
             label = QLabel(k)
             edit = QLineEdit(str(config[k]))
             val = QDoubleValidator(self)
             edit.setValidator(val)
             hbox.addWidget(label)
             hbox.addWidget(edit)
             l.addLayout(hbox)
             ui[k] = (edit, label, hbox, val)
         elif t == type(list()):
             hbox = QHBoxLayout()
             label = QLabel(k)
             edit = QComboBox()
             i = 0
             for s in config[k][0]:
                 edit.addItem(s)
                 if i == config[k][1]:
                     edit.setCurrentIndex(i)
                 i += 1
             hbox.addWidget(label)
             hbox.addWidget(edit)
             l.addLayout(hbox)
             ui[k] = (edit, label, hbox)
         elif t == type(dict()):
             gbox = QGroupBox()
             gbox.setTitle(k)
             ui[k] = {"gbox": gbox}
             l2 = self._parseDict(config[k], ui[k])
             ui[k]["layout"] = l2
             gbox.setLayout(l2)
             l.addWidget(gbox)
     return l
예제 #3
0
class multipleListWidget(QWidget):
    def __init__(self, parent, typeid, predefs, editable):
        QWidget.__init__(self)
        self.parent = parent
        self.typeid = typeid
        self.editable = editable
        self.predefs = predefs
        self.init()

    def init(self):
        self.vbox = QVBoxLayout()
        self.vbox.setSpacing(5)
        self.vbox.setMargin(0)
        self.createHeader()
        self.valuelist = QListWidget()
        self.vbox.addWidget(self.valuelist)
        self.setLayout(self.vbox)

    def createHeader(self):
        self.whead = QWidget()
        self.headerlayout = QHBoxLayout()
        self.headerlayout.setSpacing(0)
        self.headerlayout.setMargin(0)
        if self.typeid in (typeId.Node, typeId.Path) and self.editable:
            self.addPath()
        else:
            self.addSingleArgument()

        self.addButton = QPushButton(QIcon(":add.png"), "")
        self.rmButton = QPushButton(QIcon(":del_dump.png"), "")
        self.addButton.setIconSize(QSize(16, 16))
        self.rmButton.setIconSize(QSize(16, 16))

        self.connect(self.addButton, SIGNAL("clicked()"), self.addParameter)
        self.connect(self.rmButton, SIGNAL("clicked()"), self.rmParameter)
        self.connect(self.addButton, SIGNAL("clicked()"), self.parent.argumentChanged)
        self.connect(self.rmButton, SIGNAL("clicked()"), self.parent.argumentChanged)

        self.headerlayout.addWidget(self.addButton, 0)
        self.headerlayout.addWidget(self.rmButton, 0)
        self.whead.setLayout(self.headerlayout)
        self.vbox.addWidget(self.whead)

    def addParameterConfig(self, config):
       try : 
        if len(config) :
          for item in config:  
            self.valuelist.insertItem(self.valuelist.count() + 1, item)
       except TypeError:
	 self.valuelist.insertItem(self.valuelist.count() + 1, config)

    def addParameter(self):
        if isinstance(self.container, QComboBox):
            item = self.container.currentText()
        else:
            item = self.container.text()
        if len(self.valuelist.findItems(item, Qt.MatchExactly)) == 0:
            self.valuelist.insertItem(self.valuelist.count() + 1, item) 

    def rmParameter(self):
        selected = self.valuelist.selectedItems()
        for item in selected:
            row = self.valuelist.row(item)
            self.valuelist.takeItem(row)        

    def addSingleArgument(self):
        if len(self.predefs) > 0:
            self.container = QComboBox()
            for value in self.predefs:
                if self.typeid == typeId.Node:
                    self.container.addItem(value.value().name())
                else:
                    self.container.addItem(value.toString())
                self.container.setEditable(self.editable)
        else:
            self.container = QLineEdit()
            self.container.setReadOnly(self.editable)
        self.headerlayout.addWidget(self.container, 2)

    def addPath(self):
        if len(self.predefs) > 0:
            self.container = QComboBox()
            self.container.setReadOnly(False)
            for value in self.predefs:
                self.container.addItem(value.toString())
        else:
            self.container = QLineEdit()
            self.container.setReadOnly(False)
            if self.typeid == typeId.Path:
                browse = addLocalPathButton(self, key, self.container, isdir=False)
            else:
                browse = addLocalPathButton(self, key, self.container, isdir=False, nodetype=True)
        self.headerlayout.addWidget(self.container, 2)
        self.headerlayout.addWidget(browse, 0)

    def addPredefValue(self):
        selected = self.predefs.selectedItems()
        for item in selected:
            self.valuelist.insertItem(self.valuelist.count() + 1, item.text())
예제 #4
0
 def addRichTypes(self, l):
     """set the list of richtypes"""
     for q in l:
         i = len(self.richTypes)
         self.richTypes.append(q)
         l = QLabel(self)
         self.qlabels.append(l)
         l.setText(q.name)
         l.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding)
         l.setToolTip(q.descr)
         self.gridLayout.addWidget(l, i, 0, 1, 1)
         cls = q.__class__
         if cls == Text:
             w = QLineEdit(self)
             w.setMinimumSize(300, 30)
             if q.maxLen: w.setMaxLength(q.maxLen)
             w.setText(q.v)
         elif cls == MLText:
             w = QTextEdit(self)
             w.setAcceptRichText(False)
             w.setMinimumSize(300, 60)
             w.setText(q.v)
         elif cls == Choice:
             w = QComboBox(self)
             c = [unicode(x) for x in q.choices]
             c.sort()
             w.addItems(c)
             idx = w.findText(unicode(q.v))
             if idx >= 0:
                 w.setCurrentIndex(idx)
         elif cls == MultiChoice:
             w = QListWidget(self)
             w.setSelectionMode(QAbstractItemView.MultiSelection)
             w.setMinimumSize(100, 60)
             c = [unicode(x) for x in q.choices]
             c.sort()
             v = [unicode(x) for x in q.v]
             for ii, s in enumerate(c):
                 w.addItem(s)
                 if s in v:
                     w.item(ii).setSelected(True)
         elif cls == Bool:
             w = QCheckBox(self)
             if q.v:
                 w.setCheckState(Qt.Checked)
             else:
                 w.setCheckState(Qt.Unchecked)
         elif cls == Integer:
             w = QSpinBox(self)
             if q.min is not None:
                 w.setMinimum(q.min)
             if q.max is not None:
                 w.setMaximum(q.max)
             if q.step is not None:
                 w.setSingleStep(q.step or 0.01)
             if q.unit: w.setSuffix(' '+q.unit)
             w.setValue(q.v)
         elif cls == Float:
             w = QDoubleSpinBox(self)
             if q.min is not None:
                 w.setMinimum(q.min)
             if q.max is not None:
                 w.setMaximum(q.max)
             w.setSingleStep(q.step or 0.01)
             if q.unit: w.setSuffix(' '+q.unit)
             w.setValue(q.v)
         elif cls == DateTime:
             w = QDateTimeEdit(self)
             w.setCalendarPopup(True)
             dt = QDateTime()
             dt.setTime_t(q.v)
             w.setDateTime(dt)
             if q.min is not None:
                 mindt = QDateTime()
                 mindt.setTime_t(q.min)
                 w.setMinimumDate(mindt.date())
             if q.max is not None:
                 maxdt = QDateTime()
                 maxdt.setTime_t(q.max)
                 w.setMaximumDate(maxdt.date())
         l.setBuddy(w)
         w.setToolTip(q.descr)
         w.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)
         w.adjustSize()
         self.gridLayout.addWidget(w, i, 1, 1, 1)
         self.qwidgets.append(w)
     self.adjustSize()