# Licensed under GPLv3 # Written by Sebastian Lohff (seba@someserver.de) # http://seba-geek.de/projects/seopardy/ from __future__ import print_function import yaml from PySide import QtGui, QtCore class Player(QtGui.QWidget): DEFAULT_PLAYERS = [ ("Foo", QtGui.QColor(255, 0, 0)), ("Bar", QtGui.QColor(0, 255, 0)), ("Baz", QtGui.QColor(0, 0, 255)), ("Blubb", QtGui.QColor(0, 255, 255)), ("Murr", QtGui.QColor(255, 0, 255)), ("Maunz", QtGui.QColor(255, 255, 0)), ] def __init__(self, name, color, points=0, parent=None): super(Player, self).__init__(parent) self.name = name self.color = color self.points = points self._setup_gui() def _setup_gui(self): self.layout = QtGui.QVBoxLayout() self.name_label = QtGui.QLabel(self.name, self) self.name_label.setStyleSheet("QLabel { font-size: 40px; background-color: %s; color: white; }" % (self.color.name(),)) self.layout.addWidget(self.name_label) self.points_label = QtGui.QLabel(str(self.points), self) self.points_label.setStyleSheet("QLabel { font-size: 40px;}") self.layout.addWidget(self.points_label, alignment=QtCore.Qt.AlignRight) self.setLayout(self.layout) def change_name(self, new_name): self.name = new_name self.name_label.setText(new_name) def add_points(self, amount): self.points += amount self.points_label.setText("% 5s" % (self.points,)) @classmethod def gen_player(clazz, num, parent=None): if num > len(clazz.DEFAULT_PLAYERS): raise ValueError("You tried to generate too many players") return clazz(*clazz.DEFAULT_PLAYERS[num-1], parent=parent) @classmethod def _yaml_representer(clazz, dumper, data): #def __init__(self, name, color, points=0, parent=None): return dumper.represent_mapping(u'!player', { 'name': data.name, 'points': data.points, 'color': data.color.name() }) @classmethod def _yaml_constructor(clazz, loader, node): pdict = loader.construct_mapping(node) pdict["color"] = QtGui.QColor(pdict["color"]) return Player(**pdict) class ButtonEvent(QtCore.QEvent): eventType = QtCore.QEvent.Type(QtCore.QEvent.registerEventType()) def __init__(self, playerno): super(ButtonEvent, self).__init__(self.eventType) if playerno < 0 or playerno > 10: raise ValueError("That player number is just not plausable") self.playerno = playerno def get_playerno(self): return self.playerno nobodyColor = QtGui.QColor(128, 128, 128) # yaml dumpers/loaders yaml.add_representer(Player, Player._yaml_representer) yaml.add_constructor(u'!player', Player._yaml_constructor)