def initUI(self): super(CarcassonneEntriesDetail, self).initUI() self.totalsLabel = QtGui.QLabel("",self) self.tableContainerLayout.addWidget(self.totalsLabel) self.totals = StatsTable(len(self.engine.getEntryKinds()),len(self.engine.getPlayers())) self.tableContainerLayout.addWidget(self.totals) self.totals.setHorizontalHeaderLabels(self.engine.getListPlayers()) self.totals.horizontalHeader().setResizeMode(QtGui.QHeaderView.Stretch) self.totals.setMaximumHeight(self.totals.sizeHint().height())
class CarcassonneEntriesDetail(GameRoundsDetail): def __init__(self, engine, bgcolors, parent=None): self.bgcolors = bgcolors super(CarcassonneEntriesDetail, self).__init__(engine, parent) def initUI(self): super(CarcassonneEntriesDetail, self).initUI() self.totalsLabel = QLabel("", self) self.tableContainerLayout.addWidget(self.totalsLabel) self.totals = StatsTable( len(self.engine.getEntryKinds()), len(self.engine.getPlayers())) self.tableContainerLayout.addWidget(self.totals) self.totals.setHorizontalHeaderLabels(self.engine.getListPlayers()) self.totals.horizontalHeader().setSectionResizeMode( QHeaderView.Stretch) self.totals.setMaximumHeight(self.totals.sizeHint().height()) def retranslateUI(self): self.totals.setVerticalHeaderLabels( [i18n("CarcassonneInputWidget", kind) for kind in self.engine.getEntryKinds()]) self.totalsLabel.setText(i18n( "CarcassonneEntriesDetail", "Totals")) super(CarcassonneEntriesDetail, self).retranslateUI() self.updateRound() def resetTotals(self): self.totals.setHorizontalHeaderLabels(self.engine.getListPlayers()) self.totals.clearContents() for row in range(len(self.engine.getEntryKinds())): background = self.bgcolors[row] for col in range(len(self.engine.getListPlayers())): item = QTableWidgetItem() item.setFlags(item.flags() ^ QtCore.Qt.ItemIsEditable) item.setTextAlignment( QtCore.Qt.AlignVCenter | QtCore.Qt.AlignCenter) item.setBackground(QtGui.QBrush(QtGui.QColor(background))) item.setText("0") self.totals.setItem(row, col, item) def updateRound(self): super(CarcassonneEntriesDetail, self).updateRound() self.resetTotals() for r in self.engine.getRounds(): self.updateTotal(r) self.recomputeMaxTotals() def updateTotal(self, entry=None): kinds = self.engine.getEntryKinds() players = self.engine.getListPlayers() totalItem = self.totals.item(kinds.index( entry.getKind()), players.index(entry.getPlayer())) totalItem.setText(str(int(totalItem.text())+entry.getPlayerScore())) def recomputeMaxTotals(self): kinds = self.engine.getEntryKinds() players = self.engine.getListPlayers() for row in range(len(kinds)): maxvalue = 1 for col in range(len(players)): total = int(self.totals.item(row, col).text()) if total > maxvalue: maxvalue = total for col in range(len(players)): item = self.totals.item(row, col) font = item.font() font.setBold(int(item.text()) == maxvalue) item.setFont(font) def createRoundTable(self, engine, parent=None): return CarcassonneRoundTable(self.engine, self.bgcolors, parent) def createRoundPlot(self, engine, parent=None): return CarcassonneEntriesPlot(self.engine, self) def createQSBox(self, parent=None): return CarcassonneQSTW(self.engine.getGame(), self.engine.getListPlayers(), self)