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()
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
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!")
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()
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'))
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)
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()
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))
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))