def __init__(self, appManager, ktable, parent = None): super(EntryTablePanel, self).__init__(parent) self.appManager = appManager self.ktable = ktable self.dataAccessService = appManager.dataAccessService self.entryTableModel = EntryTableModel(appManager, ktable) # self.entryTableDelegate = EntryTableDelegate(ktable) self.entryTableView = EntryListTableView(self) self.entryTableView.setModel(self.entryTableModel) # self.entryTableView.setItemDelegate(self.entryTableDelegate) self.addEntryButton = QPushButton("Add") self.removeEntryButton = QPushButton("Remove") """LAYOUT""" layout=QVBoxLayout() layout.addWidget(self.entryTableView) buttonLayout = QHBoxLayout() buttonLayout.addStretch() buttonLayout.addWidget(self.addEntryButton) buttonLayout.addWidget(self.removeEntryButton) layout.addLayout(buttonLayout) self.setLayout(layout) """CONNECTIONS""" self.connect(self.addEntryButton, SIGNAL('pressed()'), self.addEntry) self.connect(self.removeEntryButton, SIGNAL('pressed()'), self.removeEntry) self.connect(self.entryTableView, SIGNAL('entrySelected'), self.entrySelected) self.connect(self.entryTableView, SIGNAL('activated(QModelIndex)'), self.editEntry) self.resizeColumns()
class EntryTablePanel(QWidget): def __init__(self, appManager, ktable, parent = None): super(EntryTablePanel, self).__init__(parent) self.appManager = appManager self.ktable = ktable self.dataAccessService = appManager.dataAccessService self.entryTableModel = EntryTableModel(appManager, ktable) # self.entryTableDelegate = EntryTableDelegate(ktable) self.entryTableView = EntryListTableView(self) self.entryTableView.setModel(self.entryTableModel) # self.entryTableView.setItemDelegate(self.entryTableDelegate) self.addEntryButton = QPushButton("Add") self.removeEntryButton = QPushButton("Remove") """LAYOUT""" layout=QVBoxLayout() layout.addWidget(self.entryTableView) buttonLayout = QHBoxLayout() buttonLayout.addStretch() buttonLayout.addWidget(self.addEntryButton) buttonLayout.addWidget(self.removeEntryButton) layout.addLayout(buttonLayout) self.setLayout(layout) """CONNECTIONS""" self.connect(self.addEntryButton, SIGNAL('pressed()'), self.addEntry) self.connect(self.removeEntryButton, SIGNAL('pressed()'), self.removeEntry) self.connect(self.entryTableView, SIGNAL('entrySelected'), self.entrySelected) self.connect(self.entryTableView, SIGNAL('activated(QModelIndex)'), self.editEntry) self.resizeColumns() def editEntry(self, modelIndex): entry = self.entryTableModel.getEntryByModelIndex(modelIndex) dlg = EntryEditDialog(entry, self.ktable, self) if dlg.exec_(): self.entryTableModel.updateRow(dlg.entry, modelIndex) self.entrySelected(dlg.entry) self.resizeColumns() def addEntry(self): entry = self.entryTableModel.createEntry() dlg = EntryEditDialog(entry, self.ktable, self) if dlg.exec_(): modelIndex = self.entryTableModel.addRow(entry) self.entryTableView.setFocus() self.entryTableView.setCurrentIndex(modelIndex) self.resizeColumns() def removeEntry(self): answer = QMessageBox.question(self, self.trUtf8(u'Remove entry?'), self.trUtf8(u'Are you sure you want to remove the selected row(s)?'), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if answer == QMessageBox.Yes: indexes = self.entryTableView.selectedIndexes() rows = set() for index in indexes: if index.isValid(): rows.add(index.row()) rows = sorted(rows, reverse = True) print rows for row in rows: self.entryTableModel.removeRows(row) self.resizeColumns() def updateEntryList(self): pass def filterEntryList(self, columnName, text): self.entryTableModel.beginResetModel() # print "%s: %s" % (columnName, text) self.entryTableModel.entries = self.dataAccessService.getEntriesByFilter(self.ktable, columnName, text) self.entryTableModel.endResetModel() self.resizeColumns() def entrySelected(self, entry): self.emit(SIGNAL('entrySelected'), entry) def resizeColumns(self): self.entryTableView.resizeColumnsToContents() # resize to content anything but BIG_TEXT columns # for index, column in enumerate(self.ktable.columns): # if column.type != BIG_TEXT: # self.entryTableView.resizeColumnToContents(index) # else: # colWidth = self.calculateColumnHeaderWidth(index) + 20 # self.entryTableView.setColumnWidth(index, colWidth) def selectEntryAtIndex(self, rowIndex): modelIndex = self.entryTableModel.index(rowIndex, 0) if modelIndex.isValid(): self.entryTableView.setCurrentIndex(modelIndex) def calculateColumnHeaderWidth(self, index): # font = self.entryTableView.font() # painter = QPainter() # painter.setFont(font) # painter.fontMetrics() fontMetrics = self.entryTableView.fontMetrics() text = self.entryTableModel.headerData(index).toString() width = fontMetrics.width(text) return width