class CarcassonneInputWidget(QWidget): enterPressed = QtCore.pyqtSignal() i18n("CarcassonneInputWidget", 'City') i18n("CarcassonneInputWidget", 'Road') i18n("CarcassonneInputWidget", 'Cloister') i18n("CarcassonneInputWidget", 'Field') i18n("CarcassonneInputWidget", 'Goods') i18n("CarcassonneInputWidget", 'Fair') def __init__(self, engine, bgcolors, parent=None): super(CarcassonneInputWidget, self).__init__(parent) self.engine = engine self.parent = parent self.bgcolors = bgcolors self.setStyleSheet("QGroupBox { font-size: 22px; font-weight: bold; }") self.initUI() def initUI(self): self.widgetLayout = QHBoxLayout(self) self.playerGroup = QGroupBox(self) self.widgetLayout.addWidget(self.playerGroup) self.playerButtonGroup = QButtonGroup(self) self.playerGroupLayout = QGridLayout(self.playerGroup) b = QRadioButton("", self.playerGroup) # self.playerGroupLayout.addWidget(b) self.playerButtonGroup.addButton(b, 0) self.playerButtons = [b] b.hide() for i, player in enumerate(self.engine.getListPlayers(), 1): b = QRadioButton( '{}. {}'.format(i, player), self.playerGroup) if len(self.engine.getListPlayers()) > 2: self.playerGroupLayout.addWidget(b, (i-1) % 2, (i-1)/2) else: self.playerGroupLayout.addWidget(b, 0, (i-1) % 2) self.playerButtonGroup.addButton(b, i) self.playerButtons.append(b) self.kindGroup = QGroupBox(self) self.widgetLayout.addWidget(self.kindGroup) self.kindButtonGroup = QButtonGroup(self) self.kindGroupLayout = QGridLayout(self.kindGroup) b = QRadioButton("", self.kindGroup) # self.kindGroupLayout.addWidget(b) self.kindButtonGroup.addButton(b, 0) self.kindButtons = [b] b.hide() self.scoreSpinBox = ScoreSpinBox(self) self.scoreSpinBox.setAlignment(QtCore.Qt.AlignCenter) self.scoreSpinBox.setMaximumWidth(60) self.scoreSpinBox.setRange(0, 300) for i, kind in enumerate(self.engine.getEntryKinds(), 1): lbl = i18n("CarcassonneInputWidget", kind) b = QRadioButton('{}. {}'.format(i, lbl), self.kindGroup) self.kindGroupLayout.addWidget(b, (i-1) % 2, (i-1)/2) self.kindButtonGroup.addButton(b, i) b.clicked.connect(self.scoreSpinBox.setFocus) self.kindButtons.append(b) self.kindButtons[3].toggled.connect(self.setCloisterPoints) self.kindButtons[5].toggled.connect(self.setGoodsPoints) self.kindButtons[6].toggled.connect(self.setFairPoints) self.scoreGroup = QGroupBox(self) self.widgetLayout.addWidget(self.scoreGroup) self.scoreGroupLayout = QHBoxLayout(self.scoreGroup) self.scoreGroupLayout.addWidget(self.scoreSpinBox) self.reset() self.retranslateUI() def retranslateUI(self): self.playerGroup.setTitle(i18n( "CarcassonneInputWidget", "Select Player")) self.kindGroup.setTitle(i18n( "CarcassonneInputWidget", "Select kind of entry")) self.scoreGroup.setTitle(i18n( "CarcassonneInputWidget", "Points")) for i, kind in enumerate(self.engine.getEntryKinds(), 1): text = i18n( "CarcassonneInputWidget", kind) self.kindButtons[i].setText('{}. {}'.format(i, text)) def placeCommitButton(self, cb): self.scoreGroupLayout.addWidget(cb) def getPlayer(self): pid = self.playerButtonGroup.checkedId() if not pid: return "" player = self.engine.getListPlayers()[pid-1] return str(player) def getKind(self): cid = self.kindButtonGroup.checkedId() if not cid: return "" kind = self.engine.getEntryKinds()[cid-1] return str(kind) def getScore(self): return self.scoreSpinBox.value() def reset(self): self.playerButtons[0].setChecked(True) self.kindButtons[0].setChecked(True) self.scoreSpinBox.setValue(0) self.setFocus() def keyPressEvent(self, event): numberkeys = [QtCore.Qt.Key_1, QtCore.Qt.Key_2, QtCore.Qt.Key_3, QtCore.Qt.Key_4, QtCore.Qt.Key_5, QtCore.Qt.Key_6, QtCore.Qt.Key_7, QtCore.Qt.Key_8, QtCore.Qt.Key_9] try: number = numberkeys.index(event.key()) + 1 except ValueError: number = 0 if (event.key() == QtCore.Qt.Key_Return): self.enterPressed.emit() elif number: if not self.getPlayer(): if number <= len(self.engine.getPlayers()): self.playerButtons[number].setChecked(True) elif not self.getKind(): if number <= len(self.engine.getEntryKinds()): self.kindButtons[number].setChecked(True) self.scoreSpinBox.setFocus() return super(CarcassonneInputWidget, self).keyPressEvent(event) def setCloisterPoints(self, doit): if doit: self.scoreSpinBox.setValue(9) self.scoreSpinBox.setMaximum(9) self.scoreSpinBox.lineEdit().selectAll() else: self.scoreSpinBox.setValue(0) self.scoreSpinBox.setMaximum(300) def setGoodsPoints(self, doit): if doit: self.scoreSpinBox.setValue(10) self.scoreSpinBox.setReadOnly(True) else: self.scoreSpinBox.setReadOnly(False) self.scoreSpinBox.setValue(0) def setFairPoints(self, doit): if doit: self.scoreSpinBox.setValue(5) self.scoreSpinBox.setReadOnly(True) else: self.scoreSpinBox.setReadOnly(False) self.scoreSpinBox.setValue(0) def updatePlayerOrder(self): trash = QWidget() trash.setLayout(self.playerGroupLayout) self.playerButtonGroup = QButtonGroup(self) self.playerGroupLayout = QGridLayout(self.playerGroup) b = QRadioButton("", self.playerGroup) self.playerButtonGroup.addButton(b, 0) self.playerButtons = [b] b.hide() for i, player in enumerate(self.engine.getListPlayers(), 1): b = QRadioButton( '{}. {}'.format(i, player), self.playerGroup) if len(self.engine.getListPlayers()) > 2: self.playerGroupLayout.addWidget(b, (i-1) % 2, (i-1)/2) else: self.playerGroupLayout.addWidget(b, 0, (i-1) % 2) self.playerButtonGroup.addButton(b, i) self.playerButtons.append(b) self.reset()