def modifier_equipe(self, event): num = self.grille.selection() dlg = dlgeq.DialogueEquipe( self, dlgeq.STYLE_MOFIFIER, choix=[int(e) for e in tournoi.tournoi().equipes()], numero_affiche=num, completion=self.config.get_typed('TOURNOI', 'joueur_completion')) ret = dlg.ShowModal() if ret == wx.ID_OK: info = dlg.donnees() equipe = tournoi.tournoi().equipe(info['numero']) equipe.suppr_joueurs() for joueur in info['joueurs']: equipe.ajout_joueur(joueur[0], joueur[1], joueur[2]) equipe.joker = info['joker'] # Rafraichir self.enregistrer_auto() wx.PostEvent(self, evt.RafraichirEvent(self.GetId(), 'etat')) wx.PostEvent(self, evt.RafraichirEvent(self.GetId(), 'classement')) wx.PostEvent( self, evt.RafraichirEvent(self.GetId(), 'equipe_' + str(equipe.numero))) dlg.Destroy()
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 enregistrer(self, event): if tournoi.FICHIER_TOURNOI is None: self.enregistrer_sous(event) else: tournoi.enregistrer_tournoi() # Rafraichir wx.PostEvent(self, evt.RafraichirEvent(self.GetId(), 'etat'))
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 afficher_partie_suiv(self, event): if tournoi.tournoi() is None: self.barre_bouton.chg_partie() else: try: tournoi.tournoi().partie(self.barre_bouton.numero() + 1) self.barre_bouton.chg_partie(self.barre_bouton.numero() + 1) except ValueError, e: self.barre_etat.SetStatusText(unicode(e)) # Rafraichir wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))
def preferences(self, event): if isinstance(event, evt.PreferencesEvent): # Ouverture d'une page spécifique dlg = dlgpref.DialoguePreferences(self, self.config, event.page, event.sous_page) else: # Page générale dlg = dlgpref.DialoguePreferences(self, self.config) ret = dlg.ShowModal() if ret == wx.ID_OK: for section in dlg.donnees(): for nom, valeur in dlg.donnees()[section].items(): self.config.set(section, nom, unicode(valeur)) dlg.Destroy() self.fenetre_affichage.configurer( self.config.get_options('AFFICHAGE', upper_keys=True)) wx.PostEvent(self, evt.RafraichirEvent(self.GetId(), 'classement')) wx.PostEvent(self, evt.RafraichirEvent(self.GetId(), 'fond')) return ret
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 __init__(self, config): wx.Frame.__init__(self, None, id=wx.ID_ANY, title=tourbillon.__nom__, size=(640, 400), style=wx.DEFAULT_FRAME_STYLE) self.SetBackgroundColour(images.couleur('grille')) self.config = config # Création d'un gestionnaire de fenetres pour la gestion des fenêtres flottantes self._mgr = aui.AuiManager( self, aui.AUI_MGR_ALLOW_FLOATING | aui.AUI_MGR_TRANSPARENT_HINT | aui.AUI_MGR_TRANSPARENT_DRAG | aui.AUI_MGR_ALLOW_ACTIVE_PANE) # Fenêtre informations montrée self.fenetre_affichage = dlginfo.DialogueInformations( self, self.config) self.affichage_visible = False self.fenetre_affichage.Bind(wx.EVT_CLOSE, self.masquer_info) # Icon self.SetIcon(images.TourBillon_icon()) # Créer la barre de menu self.barre_menu = barres.BarreMenu(self) self.SetMenuBar(self.barre_menu) # Créer la barre de statut self.barre_etat = barres.BarreEtat(self) self.SetStatusBar(self.barre_etat) # Créer la barre des boutons (pas la guerre) self.barre_bouton = barres.BarreBouton(self) self._mgr.AddPane( self.barre_bouton, aui.AuiPaneInfo().Name("controles").Top().CaptionVisible( False).MinSize(wx.Size(-1, 60)).DockFixed().Floatable(False)) # Créer la grille if self.config.get_typed('INTERFACE', 'image'): chemin_image = glob(configdir('fond_perso*'))[0] else: chemin_image = "" self.grille = grl.GrillePanel(self, images.bitmap(chemin_image)) self.barre_menu.FindItemById(barres.ID_STATISTIQUES).Check( self.config.get_typed('INTERFACE', 'afficher_statistiques')) self.afficher_statistiques(None) self._mgr.AddPane(self.grille, aui.AuiPaneInfo().Name("grille").CenterPane()) # Creation d'un shell Python (utile pour le debug) self.shell = Shell(self, introText='', locals={ 'intf': self, 'trb': tournoi.tournoi(), 'cfg': self.config, 'cst': cst }, InterpClass=None, startupScript=None, execStartupScript=True) self.shell.SetSize((600, 200)) self._mgr.AddPane( self.shell, aui.AuiPaneInfo().Name('shell').Caption("Python Shell").Bottom(). CloseButton(True).MaximizeButton(True).Hide()) self.barre_menu.FindItemById(barres.ID_SHELL).Check( self.config.get_typed('INTERFACE', 'afficher_shell')) self.afficher_shell(None) # Effectuer les connections sur les evenements # ... de la barre de menu self.Bind(wx.EVT_MENU, self.nouveau, id=wx.ID_NEW) self.Bind(wx.EVT_MENU, self.ouvrir_demande, id=wx.ID_OPEN) self.Bind(wx.EVT_MENU, self.enregistrer, id=wx.ID_SAVE) self.Bind(wx.EVT_MENU, self.enregistrer_sous, id=wx.ID_SAVEAS) self.Bind(wx.EVT_MENU, self.apercu_avant_impression, id=wx.ID_PREVIEW_PRINT) self.Bind(wx.EVT_MENU, self.imprimer, id=wx.ID_PRINT) self.Bind(wx.EVT_MENU, self.quitter, id=wx.ID_EXIT) self.Bind(wx.EVT_MENU, self.afficher_statistiques, id=barres.ID_STATISTIQUES) self.Bind(wx.EVT_MENU, self.afficher_info, id=barres.ID_INFO) self.Bind(wx.EVT_MENU, self.afficher_tirage, id=barres.ID_TIRAGE) self.Bind(wx.EVT_MENU, self.afficher_shell, id=barres.ID_SHELL) self.Bind(wx.EVT_MENU, self.nouvelle_equipe, id=barres.ID_NOUVELLE_E) self.Bind(wx.EVT_MENU, self.modifier_equipe, id=barres.ID_MODIFIER_E) self.Bind(wx.EVT_MENU, self.supprimer_equipe, id=barres.ID_SUPPRIMER_E) self.Bind(wx.EVT_MENU, self.nouvelle_partie, id=barres.ID_NOUVELLE_P) self.Bind(wx.EVT_MENU, self.supprimer_partie, id=barres.ID_SUPPRIMER_P) self.Bind(wx.EVT_MENU, self.entrer_resultats, id=barres.ID_RESULTATS) self.Bind(wx.EVT_MENU, self.classement, id=barres.ID_CLASSEMENT) self.Bind(wx.EVT_MENU, self.preferences, id=wx.ID_PREFERENCES) self.Bind(wx.EVT_MENU, self.info_systeme, id=wx.ID_PROPERTIES) self.Bind(wx.EVT_MENU, self.a_propos_de, id=wx.ID_ABOUT) # ... de la barre de contrôle self.Bind(wx.EVT_BUTTON, self.afficher_partie_prec, self.barre_bouton.btn_precedente) self.Bind(wx.EVT_BUTTON, self.afficher_partie_suiv, self.barre_bouton.btn_suivante) self.Bind(wx.EVT_BUTTON, self.enregistrer, id=wx.ID_SAVE) self.Bind(wx.EVT_BUTTON, self.afficher_info, id=barres.ID_INFO) self.Bind(wx.EVT_BUTTON, self.afficher_tirage, id=barres.ID_TIRAGE) self.Bind(wx.EVT_BUTTON, self.nouvelle_equipe, id=barres.ID_NOUVELLE_E) self.Bind(wx.EVT_BUTTON, self.nouvelle_partie, id=barres.ID_NOUVELLE_P) self.Bind(wx.EVT_BUTTON, self.entrer_resultats, id=barres.ID_RESULTATS) self.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN, self.grille.rechercher_suivant, id=wx.ID_FIND) self.Bind(wx.EVT_TEXT_ENTER, self.grille.rechercher_suivant, id=wx.ID_FIND) self.Bind(wx.EVT_TEXT, self.grille.rechercher, id=wx.ID_FIND) self.Bind(evt.EVT_MENU_RECHERCHE, self.grille.chg_recherche_colonne, self.barre_bouton) # ... des autres événements self.Bind(wx.EVT_CLOSE, self.quitter) self.Bind(aui.EVT_AUI_PANE_CLOSE, self.masquer_shell) self.Bind(evt.EVT_RAFRAICHIR, self.rafraichir) self.grille.Bind(grl.grid.EVT_GRID_CELL_LEFT_DCLICK, self.grille_double_click) self.grille.Bind(grl.grid.EVT_GRID_CELL_RIGHT_CLICK, self.grille_contexte) self.grille.Bind(wx.EVT_KEY_DOWN, self.grille_enter) # Rafraichir self._mgr.Update() self.Layout() wx.PostEvent(self, evt.RafraichirEvent(self.GetId()))