示例#1
0
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()