Exemple #1
0
    def supprimer_partie(self, event):
        num = self.barre_bouton.numero()

        dlg = dlgpa.DialogueSupprimerPartie(
            self, map(int,
                      tournoi.tournoi().parties()), num)
        ret = dlg.ShowModal()

        if ret == wx.ID_OK:
            tournoi.tournoi().suppr_partie(int(dlg.numero()))
            if tournoi.tournoi().nb_parties() == 0:
                self.barre_bouton.chg_partie(0)
            elif tournoi.tournoi().nb_parties() >= num:
                self.barre_bouton.chg_partie(num)
            else:
                self.barre_bouton.chg_partie(tournoi.tournoi().nb_parties())

            # Rafraichir
            self.enregistrer_auto()
            wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

            logger.info(
                u"La partie n°%s, c'est ce qu'on appelle un 'coupourin'." %
                dlg.numero())

        dlg.Destroy()
Exemple #2
0
    def enregistrer_sous(self, event):
        if tournoi.FICHIER_TOURNOI is not None:
            l = os.path.split(tournoi.FICHIER_TOURNOI)
            d = l[0]
            f = l[1]
        else:
            d = self.config.get('INTERFACE', 'ENREGISTREMENT')
            f = u"tournoi_billon_%s.yml" % datetime.now().strftime('%d/%m/%Y')
        dlg = wx.FileDialog(self,
                            message="Enregistrer",
                            defaultDir=d,
                            defaultFile=f,
                            wildcard=FILTRE_FICHIER,
                            style=wx.SAVE)
        ret = dlg.ShowModal()

        if ret == wx.ID_OK:
            fichier = dlg.GetPath()
            _p, ext = os.path.splitext(fichier)
            if ext not in ['.trb', '.yml']:
                fichier += '.yml'
            tournoi.enregistrer_tournoi(fichier)

            # Rafraichir
            wx.PostEvent(self, evt.RafraichirEvent(self.GetId(), 'etat'))
            logger.info(u"C'est dans la boîte.")

        dlg.Destroy()
        return ret
Exemple #3
0
    def ouvrir(self, fichier):
        self.shell.interp.locals['trb'] = tournoi.charger_tournoi(fichier)

        # Rafraichir
        self.barre_bouton.chg_partie(tournoi.tournoi().nb_parties())
        self.grille.effacer()
        self.grille.ajout_equipe(*tournoi.tournoi().equipes())
        wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

        self.SetTitle("%s - %s" % (tourbillon.__nom__, fichier))
        logger.info(u"Chargé, prêt à jouer mon commandant!")
Exemple #4
0
    def nouvelle_partie(self, event):
        dlg = dlgpa.DialogueAjouterPartie(self, self.config)
        dlg.Bind(evt.EVT_PREFERENCES, self.preferences, id=wx.ID_PREFERENCES)
        ret = dlg.ShowModal()

        if ret is True:
            partie = tournoi.tournoi().ajout_partie()
            partie.demarrer(dlg.tirage(), dlg.chapeaux())

            # Rafraichir
            self.barre_bouton.chg_partie(partie.numero)
            self.enregistrer_auto()
            wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

            logger.info(u"C'est Partie mon kiki!")

        dlg.Destroy()
Exemple #5
0
    def nouveau(self, event):
        ret = self.enregister_demande()

        if ret != wx.ID_CANCEL:
            if self.config.get_typed("INTERFACE",
                                     'NOUVEAU_AFFICHE_PREFERENCES'):
                ret = self.preferences(evt.PreferencesEvent(self.GetId(), 1))
            else:
                ret = wx.ID_OK

            if ret == wx.ID_OK:
                self.shell.interp.locals['trb'] = tournoi.nouveau_tournoi(
                    self.config.get_typed("TOURNOI", "EQUIPES_PAR_MANCHE"),
                    self.config.get_typed("TOURNOI", "POINTS_PAR_MANCHE"),
                    self.config.get_typed("TOURNOI", "JOUEURS_PAR_EQUIPE"))

                # Rafraichir
                self.grille.effacer()
                self.barre_bouton.chg_partie()
                wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

                logger.info(u"Il est %s, un nouveau tournoi commence..." %
                            tournoi.tournoi().debut.strftime('%Hh%M'))
Exemple #6
0
    def entrer_resultats(self, event):
        num_partie = int(self.barre_bouton.numero())
        num_equipe = self.grille.selection()
        if num_equipe is None:
            num_equipe = 1
        else:
            num_equipe = int(num_equipe)
        etat = tournoi.tournoi().equipe(num_equipe).resultat(num_partie).etat

        if etat != cst.FORFAIT and etat != cst.CHAPEAU:
            dlg = dlgre.DialogueResultat(self, num_partie, num_equipe)
            ret = dlg.ShowModal()

            if ret == wx.ID_OK:
                d = dlg.donnees()
                if dlg.fin():
                    fin = datetime.now()
                else:
                    fin = None
                tournoi.tournoi().partie(num_partie).resultat(d, fin)

                # Rafraichir
                self.enregistrer_auto()
                wx.PostEvent(self, evt.RafraichirEvent(self.GetId(), 'tout'))

                nb = len(
                    tournoi.tournoi().partie_courante().equipes_incompletes())
                if nb != 0:
                    logger.info(u"Manque encore %s équipes." % nb)
                else:
                    logger.info(u"Prêt pour casser du billon.")

            dlg.Destroy()
        else:
            self.barre_etat.SetStatusText(
                u"Le score d'une équipe %s n'est pas modifiable." % etat)
Exemple #7
0
    def supprimer_equipe(self, event):
        num = self.grille.selection()

        dlg = dlgeq.DialogueEquipe(self,
                                   dlgeq.STYLE_SUPPRIMER,
                                   choix=map(int,
                                             tournoi.tournoi().equipes()),
                                   numero_affiche=num)
        ret = dlg.ShowModal()

        if ret == wx.ID_OK:
            info = dlg.donnees()

            equipe = tournoi.tournoi().equipe(info['numero'])
            logger.info(u"En ce jour exceptionel, l'équipe n°%s nous quitte." %
                        (equipe.numero))

            # Rafraichir
            self.grille.suppr_equipe(equipe)
            tournoi.tournoi().suppr_equipe(equipe.numero)
            self.enregistrer_auto()
            wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

        dlg.Destroy()
Exemple #8
0
    def nouvelle_equipe(self, event):
        ret = wx.ID_OK

        def creer(info):
            equipe = tournoi.tournoi().ajout_equipe(info['numero'],
                                                    info['joker'])
            for joueur in info['joueurs']:
                equipe.ajout_joueur(joueur[0], joueur[1], joueur[2])
            return equipe

        while ret == wx.ID_OK:
            dlg = dlgeq.DialogueEquipe(
                self,
                dlgeq.STYLE_AJOUTER,
                numero_affiche=tournoi.tournoi().generer_numero_equipe(),
                completion=self.config.get_typed('TOURNOI',
                                                 'joueur_completion'))
            ret = dlg.ShowModal()
            info = dlg.donnees()
            dlg.Destroy()

            if ret == wx.ID_OK:

                if tournoi.tournoi().nb_parties() == 0:
                    # Le tournoi n'est pas commencé
                    equipe = creer(info)

                    # Rafraichir
                    self.grille.ajout_equipe(equipe)
                    self.enregistrer_auto()
                    wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

                    logger.info(
                        u"Mini holà à l'équipe n°%s.\nHoooollaaaa...!!" %
                        (equipe.numero))

                elif tournoi.tournoi().statut in [cst.T_PARTIE_EN_COURS]:
                    p = tournoi.tournoi().piquets()[-1] + 1
                    # Une partie est en cours: choix etat pour la partie en cours
                    dlg = dlgeq.DialogueMessageEquipe(self, info['numero'])
                    ret = dlg.ShowModal()
                    if ret == wx.ID_OK:
                        equipe = creer(info)
                        for partie in tournoi.tournoi().parties():
                            if partie != tournoi.tournoi().partie_courante():
                                # L'équipe est FORFAIT pour les autres parties.
                                partie.ajout_equipe(equipe,
                                                    cst.FORFAIT,
                                                    piquet=p)
                            else:
                                partie.ajout_equipe(equipe,
                                                    dlg.etat(),
                                                    dlg.creer_manche(),
                                                    piquet=p)

                        # Rafraichir
                        self.grille.ajout_equipe(equipe)
                        self.enregistrer_auto()
                        wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

                        logger.info(u"Un peu tard pour %s, mais ça passe..." %
                                    (equipe.numero))

                    dlg.Destroy()

                else:
                    p = tournoi.tournoi().piquets()[-1] + 1
                    # Les parties sont toutes terminées
                    texte = u"L'équipe sera considérée comme forfait pour toutes les parties déjà jouées,\
cliquez sur ANNULER si vous ne voulez pas ajouter cette nouvelle équipe."

                    dlg = wx.MessageDialog(self,
                                           texte,
                                           caption=u"Tournoi en cours",
                                           style=wx.OK | wx.CANCEL
                                           | wx.ICON_QUESTION)
                    ret = dlg.ShowModal()
                    dlg.Destroy()
                    if ret == wx.ID_OK:
                        equipe = creer(info)
                        for partie in tournoi.tournoi().parties():
                            partie.ajout_equipe(equipe, cst.FORFAIT, piquet=p)

                        # Rafraichir
                        self.grille.ajout_equipe(equipe)
                        self.enregistrer_auto()
                        wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))

                        logger.info(u"Un peu tard pour %s, mais ça passe..." %
                                    (equipe.numero))
Exemple #9
0
    def rafraichir(self, event):
        """
        Appelle la methode 'rafraichir' de chaque widget qui a besoin de l'être.
        """
        t = tournoi.tournoi()

        # Titre
        if tournoi.FICHIER_TOURNOI is not None:
            self.SetTitle("%s - %s" %
                          (tourbillon.__nom__, tournoi.FICHIER_TOURNOI))
        else:
            self.SetTitle(tourbillon.__nom__)

        # Barre de menu
        if event.quoi == 'menu' or event.quoi == 'tout':
            if t is None:
                nom = ''
            else:
                nom = 'Tournoi  du %s' % t.debut.strftime('%d/%m/%Y')

            self.barre_menu._rafraichir()
            self.barre_bouton._rafraichir(nom)

        # Barre d'état
        if event.quoi == 'etat' or event.quoi == 'tout':
            if t is None:
                self.barre_etat._rafraichir('', 0, 0, 0, False)
            else:
                # Indication équipe incomplète
                nb_incompletes = 0
                num_partie = self.barre_bouton.numero()
                if self.barre_bouton.numero() > 0:
                    for equipe in tournoi.tournoi().partie(
                            num_partie).equipes():
                        if equipe.resultat(num_partie).etat is None:
                            nb_incompletes += 1
                self.barre_etat._rafraichir(
                    t.debut.strftime('%Hh%M'), t.nb_parties(), t.nb_equipes(),
                    nb_incompletes / tournoi.tournoi().equipes_par_manche,
                    t.modifie)

        p = self.barre_bouton.numero()

        # Limite de raffraichissement
        limite = None
        if self.config.get_typed('INTERFACE', 'CUMULE_STATISTIQUES') == 1:
            limite = p

        # Equipes
        if event.quoi == 'tout':
            if tournoi.tournoi() is None:
                self.grille._rafraichir()
            else:
                for equipe in tournoi.tournoi().equipes():
                    self.grille._rafraichir(equipe=equipe,
                                            partie=p,
                                            partie_limite=limite)

        elif event.quoi.startswith('equipe'):
            num = int(event.quoi.split('_')[1])
            self.grille._rafraichir(equipe=tournoi.tournoi().equipe(num),
                                    partie=p,
                                    partie_limite=limite)

        # Classement
        if event.quoi == 'classement' or event.quoi == 'tout':
            if tournoi.tournoi() is not None:
                avec_victoires = self.config.get_typed('TOURNOI',
                                                       'CLASSEMENT_VICTOIRES')
                avec_joker = self.config.get_typed('TOURNOI',
                                                   'CLASSEMENT_JOKER')
                avec_duree = self.config.get_typed('TOURNOI',
                                                   'CLASSEMENT_DUREE')
                self.grille._rafraichir(
                    classement=tournoi.tournoi().classement(
                        avec_victoires, avec_joker, avec_duree, limite))
            else:
                self.grille._rafraichir(classement={})

        # Informations
        if t is not None:
            try:
                self.fenetre_affichage._rafraichir(t.statut)
            except wx._core.PyAssertionError:
                # HACK wxpython 3.0 sur Windows 8.1: wxTextMeasure::BeginMeasuring()
                # must not be used with non-native wxDCs
                # A resoudre, mais comment?????
                logger.info(
                    "Je ne peux pas rafraichir la fenêtre d'information aux joueurs (wxpython + Windows bug)"
                )
        # fond
        if event.quoi == 'fond':
            if self.config.get_typed('INTERFACE', 'image'):
                chemin_image = glob(configdir('fond_perso*'))[0]
            else:
                chemin_image = ""
            self.grille.chg_fond(images.bitmap(chemin_image))