class EditPlayer(QWidget): """ This class offers the possibilty to create and edit players. """ def __init__(self, player = None, parent = None): """ Constructor: inits all elements of the widget. It offers input textboxes for the name and the fullname of a player. It creates the actions and connects them to their methods. Keyword arguments: player -- a database.models.Player to edit, if None a new one is created parent -- parent widget """ QWidget.__init__(self, parent) self.parent = parent self.player_to = player gtext = self.tr('Create a new Player') if player is not None: gtext = self.tr('Edit a Player') greet = QLabel(gtext, self) greet.setStyleSheet(""" QLabel { font-size: 12pt; }""") save = QPushButton(self.tr('Save Player'), self) self.connect(save, QtCore.SIGNAL('clicked()'), self.__handle_save) chancel = QPushButton(self.tr('Chancel'), self) self.connect(chancel, QtCore.SIGNAL('clicked()'), self.__handle_chancel) lbl_name = QLabel(self.tr('Name:'), self) self.name = QLineEdit() lbl_fullname = QLabel(self.tr('Fullame:'), self) self.fullname = QLineEdit() if player is not None: self.name.setText(player.name) self.fullname.setText(player.fullname) hbox_name = QHBoxLayout() hbox_name.addWidget(lbl_name) hbox_name.addWidget(self.name) hbox_fullname = QHBoxLayout() hbox_fullname.addWidget(lbl_fullname) hbox_fullname.addWidget(self.fullname) hbox_btns = QHBoxLayout() hbox_btns.addStretch(2) hbox_btns.addWidget(save) hbox_btns.addWidget(chancel) vbox = QVBoxLayout() vbox.addStretch(1) vbox.addWidget(greet) vbox.addStretch(1) vbox.addLayout(hbox_name) vbox.addStretch(1) vbox.addLayout(hbox_fullname) vbox.addStretch(1) vbox.addLayout(hbox_btns) vbox.addStretch(3) self.setLayout(vbox) def __handle_save(self): """ Saves the current Player. """ n = unicode(self.name.text()) fn = unicode(self.fullname.text()) if len(n) <= 0 or len(fn) <= 0: QMessageBox.warning(self, self.tr('Fill all'), self.tr("Please fill in all fields.")) return if self.player_to is None: self.player_to = Player(name = n, fullname = fn) else: self.player_to.name = n self.player_to.fullname = fn self.player_to.save() self.name.setText('') self.fullname.setText('') logging.info('player saved in db - ' + self.player_to.info()) QMessageBox.information(self, self.tr('Player saved'), self.tr("The player was saved successfully.")) self.player_to = None self.parent.go_home() def __handle_chancel(self): """ Asks if the current Player realy should not be saved and leaves the EditPlayer dialog. """ reply = QMessageBox.question(self, self.tr('Chancel?'), self.tr("Are you sure you want to chancel and do not save the player?"), QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: self.name.setText('') self.fullname.setText('') self.player_to = None self.parent.go_home()