class RatukiPlayerInputWidget(QtGui.QFrame): winnerSet = QtCore.Signal(str) def __init__(self,player,colour=None, parent=None): super(RatukiPlayerInputWidget, self).__init__(parent) self.player = player self.winner = False self.pcolour = colour self.mainLayout = QtGui.QVBoxLayout(self) self.label = QtGui.QLabel(self) self.label.setText(self.player) self.mainLayout.addWidget(self.label) self.label.setAutoFillBackground(False) self.setFrameShape(QtGui.QFrame.Panel) self.setFrameShadow(QtGui.QFrame.Raised) self.label.setScaledContents(True) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setWordWrap(False) self.scoreSpinBox = ScoreSpinBox(self) self.scoreSpinBox.setAlignment(QtCore.Qt.AlignCenter) # self.scoreSpinBox.setMaximumWidth(60) self.scoreSpinBox.setRange(-100,100) # self.mainLayout.addWidget(self.scoreSpinBox) # self.mainLayout.setAlignment(self.scoreSpinBox,QtCore.Qt.AlignCenter) self.setColour(self.pcolour) self.lowerLayout = QtGui.QHBoxLayout() self.mainLayout.addLayout(self.lowerLayout) self.lowerLayout.addWidget(self.scoreSpinBox) self.reset() def reset(self): self.winner = False self.scoreSpinBox.setValue(0) self.updatePanel() def updatePanel(self): css = "" if self.winner: css = "font-weight: bold; background-color: #{0:X}".format(0xFFFF99) self.setFrameShadow(QtGui.QFrame.Sunken) else: self.setFrameShadow(QtGui.QFrame.Raised) self.setStyleSheet("QFrame {{ {} }}".format(css)) def mousePressEvent(self, event): self.scoreSpinBox.setFocus() def mouseDoubleClickEvent(self, event): if not self.isWinner(): self.winner = True self.updatePanel() self.winnerSet.emit(self.player) else: super(RatukiPlayerInputWidget,self).mouseDoubleClickEvent(event) def isWinner(self): return self.winner def getPlayer(self): return self.player def getScore(self): return self.scoreSpinBox.value() def setColour(self,colour=None): if colour is not None: self.pcolour = colour sh = "font-size: 24px; font-weight: bold; color:rgb({},{},{});".format(self.pcolour.red(),self.pcolour.green(),self.pcolour.blue()) self.label.setStyleSheet(sh) sh = """ QSpinBox {{ {} }} QSpinBox::up-button {{subcontrol-origin: border; subcontrol-position: left; width: 60px; height: 60px; }} QSpinBox::down-button {{subcontrol-origin: border; subcontrol-position: right; width: 60px; height: 60px; }} """.format(sh) self.scoreSpinBox.setStyleSheet(sh) print("Setting stylesheet to the scoreSpinBox")
class RemigioPlayerInputWidget(QtGui.QFrame): winnerSet = QtCore.Signal(str) def __init__(self,player,bgcolors,colour=None,parent=None): super(RemigioPlayerInputWidget, self).__init__(parent) self.player = player self.pcolour = colour self.ko = False self.bgcolors = bgcolors self.mainLayout = QtGui.QVBoxLayout(self) self.label = QtGui.QLabel(self) self.mainLayout.addWidget(self.label) self.label.setAutoFillBackground(False) self.setFrameShape(QtGui.QFrame.Panel) self.setFrameShadow(QtGui.QFrame.Raised) self.label.setScaledContents(True) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setWordWrap(False) self.scoreSpinBox = ScoreSpinBox(self) self.scoreSpinBox.setAlignment(QtCore.Qt.AlignCenter) # self.scoreSpinBox.setMaximumWidth(150) self.scoreSpinBox.setRange(-1,100) self.setColour(colour) self.lowerLayout = QtGui.QHBoxLayout() self.mainLayout.addLayout(self.lowerLayout) self.lowerLayout.addWidget(self.scoreSpinBox) self.reset() def reset(self): self.closeType = 0 self.updatePanel() def setColour(self,colour): self.pcolour = colour sh = "font-size: 24px; font-weight: bold; color:rgb({},{},{});".format(self.pcolour.red(),self.pcolour.green(),self.pcolour.blue()) self.label.setStyleSheet(sh) sh = """ QSpinBox {{ {} }} QSpinBox::up-button {{subcontrol-origin: border; subcontrol-position: left; width: 60px; height: 60px; }} QSpinBox::down-button {{subcontrol-origin: border; subcontrol-position: right; width: 60px; height: 60px; }} """.format(sh) self.scoreSpinBox.setStyleSheet(sh) def increaseCloseType(self): self.closeType = (self.closeType)%4 + 1 self.updatePanel() def updatePanel(self): text = "{}".format(self.player) css = "" if self.closeType > 0: text = text + " ({}x)".format(self.closeType) css = "font-weight: bold; background-color: #{0:X}".format(self.bgcolors[self.closeType]) self.setFrameShadow(QtGui.QFrame.Sunken) self.scoreSpinBox.setValue(0) self.scoreSpinBox.setDisabled(True) else: self.setFrameShadow(QtGui.QFrame.Raised) self.scoreSpinBox.setValue(-1) self.scoreSpinBox.setEnabled(True) self.label.setText(text) self.setStyleSheet("QFrame {{ {} }}".format(css)) def mousePressEvent(self, event): if self.isWinner(): self.increaseCloseType() else: self.scoreSpinBox.setFocus() def mouseDoubleClickEvent(self, event): if not self.isWinner(): self.winnerSet.emit(self.player) self.increaseCloseType() else: super(RemigioPlayerInputWidget,self).mouseDoubleClickEvent(event) def getScore(self): if self.isWinner(): return 0 else: return self.scoreSpinBox.value() def isWinner(self): return self.closeType > 0 def getCloseType(self): return self.closeType def getPlayer(self): return self.player def isKo(self): return self.ko def setKo(self): self.ko = True self.setDisabled(True) def unsetKo(self): self.ko = False self.setDisabled(False)
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()