예제 #1
0
파일: view.py 프로젝트: socek/bluebaker
class ListView(View):
    base = True

    def show(self):
        super(ListView, self).show()
        win = self.binder._parent
        minimum = self.get_minimal_size()
        height = win.height() if win.height() > minimum[0] else minimum[0]
        width = win.width() if win.width() > minimum[1] else minimum[1]
        win.resize(width, height)

    def create_design(self):
        header = self.get_header_labels()
        self.lay = QVBoxLayout(self)
        self.list = QTableWidget(0, len(header), self)
        self.list.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.list.setHorizontalHeaderLabels(header)
        self.list.doubleClicked.connect(self.on_doubleClicked)

        self.lay.addWidget(self.list)

    def append_row(self, cols, element_id=None):
        rowCount = self.list.rowCount()
        self.list.insertRow(rowCount)

        for index, value in enumerate(cols):
            col = QTableWidgetItem(value)
            col.element_id = element_id
            col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
            self.list.setItem(rowCount, index, col)

    def on_doubleClicked(self, index):
        item = self.list.item(index.row(), index.column())
        self.binder._parent.open('edit', item.element_id)

    def clear_list(self):
        while self.list.rowCount():
            self.list.removeRow(0)

    def generate_signals(self):
        super(ListView, self).generate_signals()
        self.add_signal(self.fill)

    def fill(self, elements):
        self.clear_list()
        for element in elements:
            cols = self.get_row_from_obj(element)
            self.append_row(cols, self.get_element_id(element))

    def get_element_id(self, element):
        return element.id
예제 #2
0
class FoamDictWidget(QWidget):
    "QWidget to view and edit simple Foam Dictionary"

    def __init__(self, variable_setting, parent=None):
        super(FoamDictWidget, self).__init__(parent)

        self.buttonLayout = QHBoxLayout()
        self.pushButtonInsert = QPushButton("Insert")
        #self.pushButtonLoad = QPushButton("Load default")
        self.pushButtonRestore = QPushButton("Restore")
        self.pushButtonClear = QPushButton("Clear")
        self.buttonLayout.addWidget(self.pushButtonInsert)
        #self.buttonLayout.addWidget(self.pushButtonLoad)
        self.buttonLayout.addWidget(self.pushButtonRestore)
        self.buttonLayout.addWidget(self.pushButtonClear)

        #PySide has different name other than @QtCore.pyqtSlot, but PySide.QtCore.SLOT
        QtCore.QObject.connect(self.pushButtonInsert,
                               QtCore.SIGNAL("clicked()"), self.insertRow)
        QtCore.QObject.connect(self.pushButtonRestore,
                               QtCore.SIGNAL("clicked()"), self.restoreDict)
        QtCore.QObject.connect(self.pushButtonClear,
                               QtCore.SIGNAL("clicked()"), self.clearDict)

        self.tableWidget = QTableWidget()
        #header, should not sort, has vertical scrollbar
        # set column count, fixed to 2, size of TableItem
        self.tableWidget.setColumnCount(2)
        #5self.tableWidget.setHorizontalHeaderItem(0, )
        self.tableWidget.setHorizontalHeaderLabels(['key', 'value text'])
        # set a default row count, insert as needed
        self.tableWidget.setRowCount(0)

        self.initialDict = variable_setting
        self.restoreDict()
        # debug print to console# does not work for PySide
        QtCore.QObject.connect(self.tableWidget,
                               QtCore.SIGNAL("doubleClicked()"),
                               self.printDict)

        self.myLayout = QVBoxLayout()
        self.myLayout.addWidget(self.tableWidget)
        self.myLayout.addLayout(self.buttonLayout)
        self.setLayout(self.myLayout)

    def dict(self):
        _settings = OrderedDict()
        for i in range(self.tableWidget.rowCount()):
            k = self.tableWidget.item(i, 0).text()
            v = self.tableWidget.item(
                i, 1).text()  # data() will return QVariant type-> python type
            # validated by non-empty string
            if k and v:
                _settings[k] = v
        return _settings

    def updateDictView(self, varible_settings):
        i = 0
        self.clearDict()  # will clear contents, but leave row text empty
        N = self.tableWidget.rowCount()
        for k, v in varible_settings.items():
            # translate seq into unicode
            if i >= N:
                self.tableWidget.insertRow(i)
            kitem = QTableWidgetItem(
                unicode(k))  # also set flags and state, type
            vitem = QTableWidgetItem(unicode(v))
            #print(i, self.tableWidget.item(i, 0)) # debug: None
            self.tableWidget.setItem(i, 0, kitem)
            self.tableWidget.setItem(i, 1, vitem)
            i += 1

    def restoreDict(self):
        self.updateDictView(self.initialDict)

    #@pyqtSlot()  # PySide use another name "QtCore.Slot()"
    def insertRow(self):
        nRows = self.tableWidget.rowCount()
        self.tableWidget.insertRow(nRows)  # inset one row at the end
        kitem = QTableWidgetItem("")  # also set flags and state, type
        vitem = QTableWidgetItem("")
        self.tableWidget.setItem(nRows, 0, kitem)
        #print(nRows, self.tableWidget.item(nRows, 0))
        self.tableWidget.setItem(nRows, 1, vitem)

    def clearDict(self):
        self.tableWidget.clearContents()  # keep the header, clear all items

    def printDict(self):
        print(self.dict())

    def loadDefault(self):
        pass
예제 #3
0
class FoamDictWidget(QWidget):
    "QWidget to view and edit simple Foam Dictionary"
    def __init__(self, variable_setting, parent=None):
        super(FoamDictWidget, self).__init__(parent)

        self.buttonLayout = QHBoxLayout()
        self.pushButtonInsert = QPushButton("Insert")
        #self.pushButtonLoad = QPushButton("Load default")
        self.pushButtonRestore = QPushButton("Restore")
        self.pushButtonClear = QPushButton("Clear")
        self.buttonLayout.addWidget(self.pushButtonInsert)
        #self.buttonLayout.addWidget(self.pushButtonLoad)
        self.buttonLayout.addWidget(self.pushButtonRestore)
        self.buttonLayout.addWidget(self.pushButtonClear)

        self.buttonPreview = QPushButton('Preview FoamFile write-out')
        self.textPreview = QTextEdit('')
        self.textPreview.setVisible(False)
        self.textPreview.setEnabled(False)

        self.tableWidget = QTableWidget()
        #header, should not sort, has vertical scrollbar
        # set column count, fixed to 2, size of TableItem
        self.tableWidget.setColumnCount(2)
        #5self.tableWidget.setHorizontalHeaderItem(0, )
        self.tableWidget.setHorizontalHeaderLabels(['key', 'value text'])
        # set a default row count, insert as needed
        self.tableWidget.setRowCount(0)

        #PySide has different name other than @QtCore.pyqtSlot, but PySide.QtCore.SLOT
        QtCore.QObject.connect(self.pushButtonInsert, QtCore.SIGNAL("clicked()"), self.insertRow)
        QtCore.QObject.connect(self.pushButtonRestore, QtCore.SIGNAL("clicked()"), self.restoreDict)
        QtCore.QObject.connect(self.pushButtonClear, QtCore.SIGNAL("clicked()"), self.clearDict)
        #
        QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL("doubleClicked()"), self.showPreview)  # does not work for PySide
        QtCore.QObject.connect(self.buttonPreview, QtCore.SIGNAL("clicked()"), self.showPreview)
        self._previewing = False

        self.settings = variable_setting
        self.restoreDict()

        self.myLayout = QVBoxLayout()
        self.myLayout.addLayout(self.buttonLayout)
        self.myLayout.addWidget(self.tableWidget)
        self.myLayout.addWidget(self.buttonPreview)
        self.myLayout.addWidget(self.textPreview)
        self.setLayout(self.myLayout)

    def dict(self):
        _settings = OrderedDict()
        for i in range(self.tableWidget.rowCount()):
            k = self.tableWidget.item(i, 0).text()
            v = self.tableWidget.item(i, 1).text()  # data() will return QVariant type-> python type
            # validated by non-empty string
            if k and v:
                _settings[k] = v
        return _settings

    def setDict(self, settings):
        self.settings = settings
        self.updateDictView(self.settings)

    def restoreDict(self):
        self.updateDictView(self.settings)

    def updateDictView(self, varible_settings):
        i = 0
        self.clearDict()  # will clear contents, but leave row text empty
        N = self.tableWidget.rowCount()
        for k,v in varible_settings.items():
            # translate seq into unicode
            if i>=N:
                self.tableWidget.insertRow(i)
            kitem = QTableWidgetItem(k)  # also set flags and state, type
            vitem = QTableWidgetItem(v)  # automaticall convert str to unicode to feed QWidget?
            self.tableWidget.setItem(i, 0, kitem)
            self.tableWidget.setItem(i, 1, vitem)  # currently only works for string value !
            i += 1

    #@pyqtSlot()  # PySide use another name "QtCore.Slot()"
    def insertRow(self):
        nRows = self.tableWidget.rowCount()
        self.tableWidget.insertRow(nRows)  # inset one row at the end
        kitem = QTableWidgetItem("")  # also set flags and state, type
        vitem = QTableWidgetItem("")
        self.tableWidget.setItem(nRows, 0, kitem)
        self.tableWidget.setItem(nRows, 1, vitem)

    def clearDict(self):
        self.tableWidget.clearContents()  # keep the header, clear all items

    def showPreview(self):
        if self._previewing:
            self._previewing = False
            self.textPreview.setVisible(False)
            self.buttonPreview.setText('click to preview write out')
        else:
            self._previewing = True
            self.buttonPreview.setText('click on text to hide preview')
            # enable scrollbar ?
            self.textPreview.setText(self.printDict())
            self.textPreview.setVisible(True)

    def loadDefault(self):
        pass

    def printDict(self):
        dictText = "{\n"
        for k,v in self.dict().items():
            dictText += "   {}  {};\n".format(str(k), str(v))
        dictText += "}"
        return dictText