예제 #1
0
    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()
예제 #2
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()
예제 #3
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
예제 #4
0
    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'))
예제 #5
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!")
예제 #6
0
    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()))
예제 #7
0
    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
예제 #8
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()
예제 #9
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'))
예제 #10
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)
예제 #11
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()
예제 #12
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))
예제 #13
0
    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()))