class KColumnPanel(QWidget): def __init__(self, parent = None): super(KColumnPanel, self).__init__(parent) """ model will be set using resetModel() slot when a table is selected in the Tables view """ self.kcolumnModel = None kcolumnDelegate = KColumnDelegate() label = QLabel('Columns:') self.kcolumnView = QTableView() self.kcolumnView.setSelectionBehavior(QAbstractItemView.SelectRows) self.kcolumnView.setModel(self.kcolumnModel) self.kcolumnView.setItemDelegate(kcolumnDelegate) self.upButton = QPushButton('Up') self.downButton = QPushButton('Down') self.addButton = QPushButton("Add") self.removeButton = QPushButton("Remove") """CONNECTIONS""" self.connect(self.addButton, SIGNAL("clicked()"), self.addKColumn) self.connect(self.removeButton, SIGNAL("clicked()"), self.removeKColumn) self.connect(self.upButton, SIGNAL("clicked()"), self.moveUp) self.connect(self.downButton, SIGNAL("clicked()"), self.moveDown) """LAYOUT""" buttonsLayout = QHBoxLayout() buttonsLayout.addStretch() buttonsLayout.addWidget(self.addButton) buttonsLayout.addWidget(self.removeButton) upDownLayout = QVBoxLayout() upDownLayout.addStretch() upDownLayout.addWidget(self.upButton) upDownLayout.addWidget(self.downButton) upDownLayout.addStretch() hLayout = QHBoxLayout() hLayout.addWidget(self.kcolumnView) hLayout.addLayout(upDownLayout) layout = QVBoxLayout() layout.addWidget(label) layout.addLayout(hLayout) layout.addLayout(buttonsLayout) self.setLayout(layout) def addKColumn(self): # print "addColumn" if self.kcolumnModel is None: return row = self.kcolumnModel.rowCount() self.kcolumnModel.insertRows(row) index = self.kcolumnModel.index(row, 0) self.kcolumnView.setFocus() self.kcolumnView.setCurrentIndex(index) self.kcolumnView.edit(index) def removeKColumn(self): # print "removeColumn" index = self.kcolumnView.currentIndex() if not index.isValid(): return selectedColumn = self.kcolumnModel.getColumnByIndex(index) answer = QMessageBox.question(self, self.trUtf8(u'Remove table?'), self.trUtf8(u'Are you sure you want to remove the \'%1\' column?').arg(selectedColumn.label), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if answer == QMessageBox.Yes: row = index.row() self.kcolumnModel.removeRows(row) def moveUp(self): index = self.kcolumnView.currentIndex() if not index.isValid(): return row = index.row() if row > 0: self.moveRow(row, row - 1) def moveDown(self): index = self.kcolumnView.currentIndex() if not index.isValid(): return row = index.row() if row < self.kcolumnModel.rowCount() - 1: self.moveRow(row, row + 1) def moveRow(self, src, dest): sourceParent = self.kcolumnModel.index(src, 0) destinationParent = self.kcolumnModel.index(dest, 0) ok = self.kcolumnModel.beginMoveRows(sourceParent, src, src, destinationParent, dest) if ok: self.kcolumnModel.moveRow(src, dest) self.kcolumnModel.endMoveRows() self.kcolumnView.setCurrentIndex(destinationParent) def resetModel(self, ktable): # print "resetModel" self.kcolumnModel = KColumnModel(ktable.columns) self.kcolumnView.setModel(self.kcolumnModel) # select first row self.selectRowAtIndex(0) def selectRowAtIndex(self, rowIndex): modelIndex = self.kcolumnModel.index(rowIndex, 0) if modelIndex.isValid(): self.kcolumnView.setCurrentIndex(modelIndex)
def resetModel(self, ktable): # print "resetModel" self.kcolumnModel = KColumnModel(ktable.columns) self.kcolumnView.setModel(self.kcolumnModel) # select first row self.selectRowAtIndex(0)