#from __future__ import unicode_literals # -*- coding: utf-8 -*- """Interface principale du programme DMonde """ import os from PyQt4.QtCore import SIGNAL, Qt, QSignalMapper from PyQt4.QtGui import QMainWindow, QApplication, QGraphicsView from lib.EcranChargerPartie import EcranChargerPartie from lib.FenetreEditionPartie import FenetreEditionPartie from lib.Partie import Partie from lib.Profil import Profil from lib.commun import Session, sessionEnCours, rep from lib.mat import chargerMat from lib.ui.ecran_principal import Ui_principal class DMonde(QMainWindow): """interface principale de DMonde""" def __init__(self, parent=None): """initialisation de la fenetre""" super (DMonde, self).__init__() self.profil = Profil() self.partie = None self.createWidgets() self.mapper = QSignalMapper() def createWidgets(self): """construction de l'interface""" self.ui = Ui_principal() self.ui.setupUi(self) self.connect(self.ui.dm_panneauCentre, SIGNAL("currentChanged(int)"), self.rafraichir) ### DM self.connect( self.ui.pt_nouvelle, SIGNAL("clicked()"), self.nouvellePartie) self.connect( self.ui.pt_editer, SIGNAL("clicked()"), self.editerPartie) self.connect( self.ui.pt_fermer, SIGNAL("clicked()"), self.fermerPartie) self.connect( self.ui.pt_charger, SIGNAL("clicked()"), self.afficherEcranChargerPartie) ### partie ### plateau self.ui.cbt_vue.setViewportUpdateMode(QGraphicsView.BoundingRectViewportUpdate) self.ui.cp_ongletsListes.setStyleSheet("QTabBar::tab { width: 41px; }") self.ui.pi_ongletsListes.setStyleSheet("QTabBar::tab { width: 38px; }") self.ouverture() def connexionsPartie(self): return [ ( self.ui.pt_enregistrer , "clicked()" ,self.partie.enregistrer , None ), \ ( self.ui.cbt_enCours , "clicked()" ,self.partie.chargerDernierPlateau , None ), \ ( self.ui.cbt_charger , "clicked()" ,self.partie.afficherEcranChargerPlateau , None ), \ ( self.ui.cbt_creer , "clicked()" ,self.partie.nouveauPlateau , None ), \ ( self.ui.cbt_sauver , "clicked()" ,self.partie.enregistrerPlateau , None ), \ ( self.ui.cbt_fermer , "clicked()" ,self.partie.fermerPlateau , None ), \ ( self.ui.grp_nouveauPj , "clicked()" ,self.partie.nouveauPj , None ) ] def connecterPartie(self, actif = True): if not self.partie: return for w, s, f, p in self.connexionsPartie(): if actif: self.connect(w, SIGNAL(s), f, Qt.UniqueConnection) if p != None: pass else: self.disconnect(w, SIGNAL(s)) def connexionsPlateau(self): return [ (self.ui.cbt_modeCreation , "clicked()" , self.partie.plateau.plateauModeCreation , None ), \ (self.ui.cbt_modeCombat , "clicked()" , self.partie.plateau.plateauModeCombat , None ), \ (self.ui.cbt_etapeSuivante , "clicked()" , self.partie.plateau.etapeSuivante , None ), \ (self.ui.pc_listePJ , "cellClicked(int, int)" , self.partie.plateau.ajouterPj , None ), \ (self.ui.cbt_nom , "clicked()" , self.partie.plateau.afficherEcranPlateau , None ), \ (self.ui.cbt_afficherGestion , "clicked()" , self.partie.plateau.afficheEcranGestionCombat , None ), \ (self.ui.pi_listeAttributs , "cellChanged(int,int)" , self.partie.plateau.listeAttributCelluleModifiee , None ), \ (self.ui.cp_dialogueCouleurs , "clicked()" , self.partie.plateau.modePeintureCase , None ), \ (self.ui.cp_afficherNotes , "clicked()" , self.partie.plateau.agrandirNotesMjPlateau , None ), \ (self.ui.pi_fiche , "clicked()" , self.partie.plateau.afficherFichePion , None ), \ (self.ui.cp_listeTerrains , "cellClicked(int,int)" , self.partie.plateau.modeMajTerrainCase , None ), \ (self.ui.cp_listeCreatures , "cellClicked(int,int)" , self.partie.plateau.modeCreationCombattant , None ), \ (self.ui.cp_listeDecors , "cellClicked(int,int)" , self.partie.plateau.modeCreationDecor , None ), \ (self.ui.cp_epaisseurPinceau , "valueChanged(int)" , self.partie.plateau.majEpaisseurPinceau , None ), \ (self.ui.cp_pipetteCouleur , "clicked()" , self.partie.plateau.modeCopieTerrain , None ), \ (self.ui.cp_effets , "activated(int)" , self.partie.plateau.modeCaseEffet , None ), \ (self.ui.cp_gomme , "clicked()" , self.partie.plateau.majModeSupprimerPions , None ), \ (self.ui.cp_placerEntree , "clicked()" , self.partie.plateau.majModeDefinirEntree , None ), \ (self.ui.cp_placerCache , "clicked()" , self.partie.plateau.majModePlacerCache , None ), \ (self.ui.cp_placerSortie , "clicked()" , self.partie.plateau.majModeDefinirSortie , None ), \ (self.ui.cp_defPlacement , "clicked()" , self.partie.plateau.majModeZonePlacement , None ), \ (self.ui.pi_notes , "textChanged()" , self.partie.plateau.majNotesCombattant , None ), \ (self.ui.cp_formeSimple , "clicked()" , self.partie.plateau.majModeForme , None ), \ (self.ui.cp_formeLigne , "clicked()" , self.partie.plateau.majModeForme , None ), \ (self.ui.cp_formeLigneOrientee , "clicked()" , self.partie.plateau.majModeForme , None ), \ (self.ui.cp_formePot , "clicked()" , self.partie.plateau.majModeForme , None ), \ (self.ui.cp_formeRectVide , "clicked()" , self.partie.plateau.majModeForme , None ), \ (self.ui.cp_formeRectPlein , "clicked()" , self.partie.plateau.majModeForme , None ), \ (self.ui.act_deplacement , "clicked()" , self.partie.plateau.majModeCombatDeplacement , None ), \ (self.ui.act_attaqueCac , "clicked()" , self.partie.plateau.majModeCombatAttaqueCaC , None ), \ (self.ui.act_attaqueDist , "clicked()" , self.partie.plateau.majModeCombatAttaqueDist , None ), \ (self.ui.act_attaqueZone , "clicked()" , self.partie.plateau.majModeCombatZone , None ) ] def connecterPlateau(self, actif = True): if not self.partie: return if not self.partie.plateau: return for w, s, f, p in self.connexionsPlateau(): if actif: self.connect(w, SIGNAL(s), f, Qt.UniqueConnection) if p != None: self.mapper.setMapping( w, p ) else: self.disconnect(w, SIGNAL(s)) def ouverture(self): """operations menees a l'ouverture de la fenetre principale""" self.majAffichage() def rafraichir(self): """fonction utilisee pour forcer le repaint""" self.majLargeurOnglets() def majAffichage(self): actif = (self.partie != None) if not actif: self.ui.dm_panneauCentre.setCurrentIndex(0) self.ui.dm_panneauCentre.setTabEnabled(1, actif) self.ui.dm_panneauCentre.setTabEnabled(2, actif) self.ui.dm_panneauCentre.setTabEnabled(3, actif) self.ui.pt_page.setCurrentIndex( (1 if actif else 0) ) def majLargeurOnglets(self): val = (self.ui.dm_panneauCentre.width() - 20) / 4 self.ui.dm_panneauCentre.setStyleSheet("QTabBar::tab { height: 25; width: "+str(val)+"px; }") ### gestion partie def majPartie(self, partie): if partie: self.partie = partie s = sessionEnCours() idM = self.partie.idM() if self.partie else "defaut" s.majPartie(idM) s.enregistrer() self.connecterPartie() self.partie.afficher(self) self.majAffichage() else: self.partie = None def nouvellePartie(self): fen = FenetreEditionPartie() fen.nouvelle() fen.show() r = fen.exec_() if r == 1: self.majPartie( fen.resultat() ) del fen def editerPartie(self): if not self.partie: return fen = FenetreEditionPartie() fen.charger(self.partie) fen.show() r = fen.exec_() if r == 1: self.majPartie( fen.resultat() ) del fen def fermerPartie(self): if self.partie != None: self.partie.fermer() self.partie = None self.majAffichage() def afficherEcranChargerPartie(self): fen = EcranChargerPartie(self) fen.show() r = fen.exec_() if r == 1: idM = fen.resultat() self.chargerPartie(idM) del fen def chargerPartie(self, idPartie): """charge la partie""" repParties = os.path.join( rep("app"), "parties\\" ) chemin = os.path.join( os.path.join( repParties, "{}\\".format(idPartie) ), "{}.dm".format(idPartie) ) partie = chargerMat( chemin ) if partie: self.majPartie( partie ) ### evenements def resizeEvent(self, event): self.majLargeurOnglets() if __name__ == "__main__": s = Session() arg = ["DMonde", s.idS()] app = QApplication(arg) #settrace(trace_calls) dm = DMonde() dm.show() dm.rafraichir() r = app.exec_() s.fin() exit(r)