Sfoglia il codice sorgente

Ecran edition décors reconstruits

unknown 10 anni fa
parent
commit
dc48309194
80 ha cambiato i file con 1224 aggiunte e 7930 eliminazioni
  1. 0 1
      DMonde.py
  2. 0 158
      a faire.txt
  3. 0 3
      doc.py
  4. BIN
      doc/1-maquette_plateauCombat.docx
  5. BIN
      doc/2- affichage des infos pions.docx
  6. BIN
      doc/3- gestion de l'ordre des tours.docx
  7. BIN
      doc/4- attaques.docx
  8. 0 5
      doc/Algo de pathfinding.url
  9. 0 26
      doc/couches.txt
  10. 0 442
      doc/docPlateau.txt
  11. BIN
      doc/gestion du combat - reflexion.docx
  12. BIN
      doc/legende orga.xlsx
  13. 0 334
      doc/orga.ep
  14. 0 128
      doc/orga_pions.ep
  15. BIN
      doc/perfg_pathfinding.xls
  16. BIN
      doc/polygone creature.docx
  17. BIN
      doc/reflexion plateau.docx
  18. BIN
      doc/restruct.docx
  19. 0 90
      doc/restructuration.txt
  20. BIN
      img/combat3.jpg
  21. BIN
      img/combat4.png
  22. BIN
      img/effFeu.jpg
  23. BIN
      img/effGlace.jpg
  24. BIN
      img/foret.jpg
  25. BIN
      img/herbe2.jpg
  26. BIN
      img/neige.png
  27. 0 1333
      interface_qt8_2/DMonde.py
  28. 0 88
      interface_qt8_2/a faire.txt
  29. 0 206
      interface_qt8_2/anason.py
  30. 0 162
      interface_qt8_2/chatVoc.log
  31. 0 95
      interface_qt8_2/chatprive.ui
  32. 0 185
      interface_qt8_2/clientvoc.py
  33. 0 172
      interface_qt8_2/connexion.ui
  34. 0 1
      interface_qt8_2/convert.cmd
  35. 0 72
      interface_qt8_2/ecran_chatPrive.py
  36. 0 95
      interface_qt8_2/ecran_connexion.py
  37. 0 69
      interface_qt8_2/ecran_envoiFichier.py
  38. 0 437
      interface_qt8_2/ecran_principal.py
  39. 0 83
      interface_qt8_2/envoiFichier.ui
  40. 0 81
      interface_qt8_2/lancer.py
  41. 0 72
      interface_qt8_2/lecture.py
  42. 0 1000
      interface_qt8_2/mainwindow.ui
  43. BIN
      interface_qt8_2/maquette_plateauCombat.docx
  44. BIN
      interface_qt8_2/msvcp90.dll
  45. BIN
      interface_qt8_2/notes/a_reflexion echange fichiers.docx
  46. BIN
      interface_qt8_2/notes/echanges.docx
  47. BIN
      interface_qt8_2/parametresCo
  48. 0 82
      interface_qt8_2/plateau.py
  49. 0 611
      interface_qt8_2/prog.log
  50. 0 448
      interface_qt8_2/serveur.log
  51. 0 464
      interface_qt8_2/serveur.py
  52. 0 2
      interface_qt8_2/setup.cmd
  53. 0 4
      interface_qt8_2/setup.py
  54. 0 50
      interface_qt8_2/visionneuse.py
  55. 0 32
      interface_qt8_2/visionneuse.ui
  56. 2 0
      lib/Decor.py
  57. 5 2
      lib/EcranEditionCombattant.py
  58. 237 0
      lib/EcranEditionDecor.py
  59. 0 192
      lib/EcranEditionDecors.py
  60. 6 4
      lib/Plateau.py
  61. 4 4
      lib/VueEditionForme.py
  62. BIN
      lib/biblio/decor
  63. 0 0
      lib/ui/corbeille_ui/EcranEditionAttaques.py
  64. 5 8
      lib/ui/ecran_editionCombattant.py
  65. 406 311
      lib/ui/ecran_editionDecor.py
  66. 10 19
      lib/ui/editionCombattant.ui
  67. 458 347
      lib/ui/editionDecor.ui
  68. 7 5
      lib/ui/ressource.qrc
  69. BIN
      lib/ui/ressource/feu_24.png
  70. BIN
      lib/ui/ressource/oeilBarre_24.png
  71. 83 6
      lib/ui/ressource_rc.py
  72. BIN
      parties/Partie1/svg/0.p
  73. 1 1
      parties/Partie1/svg/infos_sauvegarde
  74. 0 0
      ressources/commun/chevalier.png
  75. 0 0
      ressources/commun/colonne.png
  76. 0 0
      ressources/commun/dragon.png
  77. 0 0
      ressources/commun/dragon4.png
  78. 0 0
      ressources/commun/herbe.jpg
  79. 0 0
      ressources/commun/orc.png
  80. 0 0
      ressources/commun/table.png

+ 0 - 1
DMonde.py

@@ -29,7 +29,6 @@ from lib.Terrain import Terrain
 from lib.Cache import Cache
 from lib.EntreeSortie import EntreeSortie
 
-
 #fonction ci dessous: deboguage, suit les appels faits aux fonctions
 #settrace(trace_calls)
 def trace_calls(frame, event, arg):

+ 0 - 158
a faire.txt

@@ -1,158 +0,0 @@
-installer un qstackedwidget pour basculer entre l'ecran de creation et le plateau
-
-Permettre l'envoi de sons par le chat :)
-
-améliorer la gestion des sauvegardes et bibliothèques
-
-Créer des fiches de PJ en mode création, permettant des saisies aléatoires
-
-Améliorer apparence de l'onglet groupe
-
-Ajouter commande: 'ajouter PJ au plateau'
-
-creer une frame qui montre une vue en coupe de l'altitude et des obstacles (a la place du journal)
-lors des deplacements, attaques à distance ou de zone
-
-creer une forme de dessin 'pot de peinture'
-
-table des attributs: sur clic droit, afficher une inbox qui explique la saisie: =(par def)/+/-- & txt, jet de dés, valeur
-
-mettre en place les 'types de terrain' et de decors
-
-décors à forme variables : lignes, disques
-
-mettre en place des signaux de maj entre gestioncombat et plateau
-
-[utile?] reprendre la fonction d'occupation des cases pour qu'elle n'utilise plus les objets eux mêmes
-
-reprendre affichage tactique pour qu'il remplace les terrains par des couleurs et qu'il affiche
-les pions ennemis en rouge, les alliés en bleu, les morts en noirs
-
-altitude des cases : prise en compte dans les deplacement et les champs de vision, hauteur max (plafond?)
-
-créer les codes couleurs de la bordure des pions
-
-idée: mémoriser la position relative des cases de l'attaque zone-disque
-
------------------------
-fait 21/07
-- anti aliasing dans qt creator
-- zoom/dezoom
-- affichage distance parcourue
-- ajout de pions (clavier 'p')
-
-fait 22/07:
-- changement couleurs cases et pions
-- ajout textures
-- qgraphicsview dans layout
-
-fait 04/08
-- terrains prédéfinis (glace/forêt/marécage/grotte/desert/...) au pinceau
-- premier nettoyage du code
-- amélioration de la création de pions et de la gestion des modes d'interaction
-
-fait le 05/08:
-- listes de pions enregistrées
-
-fait entre le 06 et le 13/08:
-- formes complexes pour les pions: saisie lors de la creation, 
-                                   enregistrement des formes, 
-                                   possibilités de rotation (60°) et deplacement de ces formes
-                                   gestion des espaces occupés
-                                   .... c'était chaud!!
-- amélioration de la création de pions simples
-- ajout d'une image plus propre pour les pions
-
-fait le 14/08:
-- mouvement restant
-- image dans les infos pions
-- calcul des distances a parcourir prend en compte les pions
-- augmentation de la taille des cases pour des raisons de qualité graphique
-
-fait le 19 et 20/08
-- creation des effets sur les cases (feu, glace...)
-- infos sur la case survolée
-- création des fonctions liées à l'occupation des cases
-- creation de 'couches graphiques' via des polygones superposés
-- creation de la mise a jour des affichages (altitude, tactique, brouillard de guerre)
-- modification des altitudes
-
-fait le 25 et 26/08:
-- algorithme de champ de vision (a revoir: erreurs de superposition des ombres) [abandonné]
-- sauvegarde/chargement de plateau
-
-fait le 27/08
-- optimisation des creations/sauvegardes/chargement de plateau
-- images dans un repertoire séparé
-
-fait le 08/09
-- pions plus classes, avec rotation de l'image, et paramétrages des tailles et positions de l'image et de l'etiquette du pion (créatures seulement)
-
-fait entre le 10 et le 30/09
-- accès rapide aux couleurs customisées
-- formes de dessin (rect, ellipse, ligne, frontiere), 
-- reprise de l'interface 
-- outils de suppression des décors et pions
-
-fait le 07/10/2014
-- correction des pbm liés au format case carrées
-- reprise de la fonction polygonePion qui créé un polygone aggloméré à partir des cases occupées par un pion
-- correction et conversion des fenetres de creation/edition
-- controle de la mise a jour de la forme dans les ecrans d'edition decor/creature
-
-fait courant octobre:
-- caches
-- entrées/sorties
-- zone de placement
-- modes de combat
-- attaques de zone
-- résolution de conflits a la suppr des pions
-- amélioration de la fonction d'agglo de polygone
-
-fait le 28/10
-- module regles
-- Ordre de jeu et passage de tour
-- Ecran de gestion du combat
-- Affichage du pion sélectionné
-
-fait le 07/11
-- liste des attributs dans le panneau de combat
-
-fait le 13/11
- - historisation des jets de dés dans gestion combat
-
-fait le 14/11
- - amelioration des fonctions du module 'lancer'
- - prise de notes pions 
-
-fait le 25/11
- - stockage du numero du pion selectionne au lieu du pion lui même et creation de la fonction pionSelectionne()
- - amelioration de la procedure de suppression
- - liste des attaques et des attributs dans l'édition des créatures
- - utiliser des attaques prédéfinies
-
-fait le 27/11
-- amelioration de la saisie/ édition des attaques
-- conversion utf8 partout
-- fenetre a part pour l'affichage des notes
-- infos attaque en cours
-- ebauche de reglement du pbm  de visee d'une partie d'un pion (insatisfaisant)
-
-fait le 28/11
-- possibilite de viser une partie dun pion
-- accélération de l'attaque de zone 'disque'
-- attaques de zone touche si une case du pion est touchee
-- charger plateau le plus recent et correction du tri de table par dates
-
-fait le 29/11
-- resolution bug deplacement decors
-- codes des pions decors au dela de 10000
-- possibilite de viser une partie d'un decor
-
-fait le 02/05/2015
-- Debut de reorganisation des librairies
-- Mise en place du versioning Git
-- Methode de synchro via USB
-
-fait le 03/05
-- Restructuration de l'appli terminee

+ 0 - 3
doc.py

@@ -1,3 +0,0 @@
-import lib.Plateau
-
-print help(lib.Plateau)

BIN
doc/1-maquette_plateauCombat.docx


BIN
doc/2- affichage des infos pions.docx


BIN
doc/3- gestion de l'ordre des tours.docx


BIN
doc/4- attaques.docx


+ 0 - 5
doc/Algo de pathfinding.url

@@ -1,5 +0,0 @@
-[{000214A0-0000-0000-C000-000000000046}]
-Prop3=19,2
-[InternetShortcut]
-URL=http://qiao.github.io/PathFinding.js/visual/
-IDList=

+ 0 - 26
doc/couches.txt

@@ -1,26 +0,0 @@
-superposition des couches:
-
-0- plateau
-
-1- cases
-
-couleur fond
-bordure simple
-bordure champ de deplacement
-bordure bordure projection position
-
-2- decors
-
-
-
-3- effets sur terrain
-
-
-
-4- pions
-
-cases de forme (couleur)
-cercle, couleur, bordure, image
-aspect si selectionne
-aspect si a joué
-

+ 0 - 442
doc/docPlateau.txt

@@ -1,442 +0,0 @@
-class Plateau(PyQt4.QtGui.QGraphicsScene)
-     |  plateau de jeu contenant les cases, decors et pions
-     |  
-     |  Method resolution order:
-     |      Plateau
-     |      PyQt4.QtGui.QGraphicsScene
-     |      PyQt4.QtCore.QObject
-     |      sip.wrapper
-     |      sip.simplewrapper
-     |      __builtin__.object
-     |  
-     |  Methods defined here:
-     |  
-     |  __getstate__(self)
-     |  
-     |  __init__(self, fenetre, parent=None)
-     |  
-     |  __setstate__(self, state)
-     |  
-     |  afficheEcranEditionAttaques(self)
-     |      affiche l'ecran d'edition/creation d'attaques
-     |  
-     |  afficheEcranEditionCreatures(self, creature=None)
-     |      affiche l'ecran d'edition/creation de creatures
-     |  
-     |  afficheEcranEditionDecors(self, decor=None)
-     |      affiche l'ecran d'edition/creation de decors
-     |  
-     |  afficheEcranEditionTerrains(self, terrain=None)
-     |      affiche l'ecran d'edition/creation de terrains
-     |  
-     |  afficheEcranGestionCombat(self)
-     |      affiche l'ecran de gestion du combat
-     |  
-     |  afficherChampDeplacement(self, actif)
-     |      cree et affiche ou efface et detruit le champ de deplacement du pion selectionne
-     |  
-     |  afficherListeCases(self, listeCases, actif)
-     |      met ou non en evidence les cases selectionnees
-     |  
-     |  afficherNotesPion(self)
-     |      affiche les notes du pion selectionne dans le QTextEdit dedie
-     |  
-     |  agrandirNotesMjPlateau(self)
-     |      affiche les notes du plateau dans une QDialog, puis recupere les donnees qui y sont saisies
-     |  
-     |  attaqueECCelluleModifiee(self, ligne, colonne)
-     |      une cellule de la liste d'attributs de l'attaque en cours a ete modifiee
-     |  
-     |  caseCliquee(self, x, y)
-     |      on a clique sur la case (clic gauche)
-     |  
-     |  caseMaj(self, coordCase)
-     |      met a jour la case selon le mode actif (et les cases adjacentes selon l'epaisseur du pinceau)
-     |  
-     |  caseSurvol(self, x, y)
-     |      une case est survole par le curseur, on affiche ses informations dans la zone prevue
-     |  
-     |  caseSurvolClicEnfonce(self, coordCase)
-     |      une case est survolee par le curseur (le clic gauche est enfonce)
-     |  
-     |  casesSousForme(self, forme, plein=True, epaisseur=0)
-     |      renvoie la liste des cases en collision avec un QGraphicsItem en parametre
-     |      plein = False: pas le contenu de la forme
-     |      epaisseur = renvoie aussi les cases voisines jusqu'a la distance demandee
-     |  
-     |  chercherCouleur(self)
-     |      ouvre la boite de dialogue de selection de couleur
-     |  
-     |  clicGaucheRelache(self)
-     |      si une forme de selection etait affichee, elle est validee
-     |  
-     |  clicListOrdreJeu(self, ligne, col)
-     |      on a clique dans la liste d'ordre de jeu, le pion correspondant est selectionne et centre sur la carte
-     |  
-     |  connexions(self)
-     |      connecte le plateau aux differents widgets de la fenetre principale
-     |  
-     |  coordCentreListeCases(self, listeCases)
-     |      renvoie les coordonnees centrales d'une liste de cases
-     |  
-     |  coordonneesAuPoint(self, point)
-     |      renvoie les coordonnees de la case situee au QPointF entre en parametre
-     |  
-     |  coordonneesValides(self, coord)
-     |      les coordonnees entrees en parametre sont elles celles d'une case du plateau
-     |  
-     |  creatureEdit(self)
-     |      ouvre la fenetre 'creatures' en mode edition
-     |  
-     |  creatureNouveau(self)
-     |      ouvre la fenetre 'creatures' en mode edition
-     |  
-     |  creer(self, idPlateau, nom, chapitre, formeCases, nbCasesX, nbCasesY, couleur=<PyQt4.QtGui.QColor object>)
-     |      cree le plateau
-     |  
-     |  creerOrigineFormeDessin(self, coord)
-     |      place le point d'origine de la forme de selection
-     |  
-     |  curseurArc(self)
-     |  
-     |  curseurBaguette(self)
-     |  
-     |  curseurEpee(self, valide=True)
-     |  
-     |  curseurGomme(self)
-     |  
-     |  curseurPinceau(self)
-     |  
-     |  curseurSelection(self)
-     |      ########### affichage des curseurs personnalises ########
-     |  
-     |  curseurSeringue(self)
-     |  
-     |  decorEdit(self)
-     |      ouvre la fenetre 'decors' en mode edition
-     |  
-     |  decorNouveau(self)
-     |      ouvre la fenetre 'decors' en mode edition
-     |  
-     |  estCibleAttaqueDistValide(self, coordOrigine, coordCible, zPion=0)
-     |      la case cible est elle valide pour une attaque a distance depuis la position et hauteur
-     |      du pion selectionne? on compare pour ce faire les altitudes des cases sur la ligne de mire
-     |  
-     |  estCree(self)
-     |      renvoie vrai si des cases ont ete creees
-     |  
-     |  fermer(self)
-     |      ferme le plateau 'proprement'
-     |  
-     |  initListeAttaques(self)
-     |      met en forme et connecte la liste des attaques du pion
-     |  
-     |  initListeOrdreJeu(self)
-     |      cree les colonnes et met en forme la table ordre jeu
-     |  
-     |  initialisationGraphique(self)
-     |      cree la scene graphique et les parametres necessaires a son fonctionnement, et met a jour l'interface
-     |  
-     |  keyPressEvent(self, event)
-     |      gestion des evenements clavier
-     |  
-     |  listeAttaquesCelluleCliquee(self, ligne, colonne)
-     |      on a clique sur une cellule de la liste des attaques
-     |  
-     |  listeAttributCelluleModifiee(self, ligne, colonne)
-     |      une cellule de la liste des attributs a ete modifiee
-     |  
-     |  lstCoordAdjacentes(self, x, y)
-     |      renvoie la liste des coordonnees adjacentes, sans condition d'existence sur le plateau
-     |      attention: l'ordre est important
-     |  
-     |  majAffichageCache(self, numCache, afficher=True)
-     |      met a jour l'affichage des cases selon les parametres enregistres pour le cache
-     |  
-     |  majAffichageMenuCache(self)
-     |      un bouton 'cache' a ete clique, on met a jour les infos
-     |  
-     |  majAffichagePionSelectionne(self)
-     |      affiche le nom et le logo du pion actuellement selectionne
-     |  
-     |  majAffichageTour(self)
-     |      met a jour l'affichage du tour en cours
-     |  
-     |  majBoutonsCaches(self)
-     |      met a jour l'affichage et connecte les boutons de caches
-     |  
-     |  majBoutonsCouleursPerso(self)
-     |      met a jour l'affichage des couleurs customisees dans la boite de dialogue de selection de couleur
-     |  
-     |  majCouleurPion(self)
-     |      selectionne une nouvelle couleur
-     |  
-     |  majEpaisseurPinceau(self, epaisseur)
-     |      met a jour l'epaisseur du pinceau (en cases)
-     |  
-     |  majEtatCacheEnCours(self)
-     |      met a jour l'etat (actif ou non) du cache selon l'etat de la case correspondante
-     |  
-     |  majFormeAttaqueZone(self)
-     |      cree la forme de l'attaque de zone
-     |  
-     |  majFormeDessin(self)
-     |      cree/maj la forme utilisee pour selectionner les cases et met a jour la liste des cases selectionnes
-     |  
-     |  majInfosAttaqueEC(self)
-     |      met a jour les infos de l'attaque en cours (selectionnee)
-     |  
-     |  majInfosCase(self, case=None)
-     |      met a jour les informations d'un pion dans la zone prevue
-     |  
-     |  majInfosDecor(self, pionDecor=None)
-     |      met a jour les informations d'un pion dans la zone prevue
-     |  
-     |  majInfosPion(self, pionSurvole=None)
-     |      met a jour les informations d'un pion dans la zone prevue
-     |  
-     |  majLigneMireAttaqueDist(self, coordCible=None)
-     |      met a jour la ligne de mire representant l'attaque a distance
-     |  
-     |  majListCreatures(self)
-     |      mise a jour de la liste des creatures depuis la sauvegarde
-     |  
-     |  majListDecors(self)
-     |      mise a jour de la liste des decors depuis la sauvegarde
-     |  
-     |  majListTerrains(self)
-     |      mise a jour de la liste des terrains depuis la sauvegarde
-     |  
-     |  majListeAttaques(self)
-     |      met a jour la liste des attaques du pion dans le panneau de combat
-     |  
-     |  majListeAttributs(self)
-     |      met a jour la liste des attributs dans le panneau de combat
-     |  
-     |  majListeCases(self, listeCases)
-     |      met a jour les cases dont les coordonnees sont dans la liste
-     |  
-     |  majListeOrdreJeu(self)
-     |      met a jour la liste des pions infoOrdreJeu
-     |  
-     |  majListesPions(self, numPion=None)
-     |      met a jour les listes contenant des donnees liees aux pions
-     |  
-     |  majMode(self, mode='standard', param=None)
-     |      modifie ou reinitialise le type d'interaction avec le plateau
-     |  
-     |  majModeAffichage(self, index)
-     |      met a jour le mode d'affichage
-     |  
-     |  majModeCombat(self, mode='')
-     |      met a jour le mode de combat actif pour le pion selectionne
-     |  
-     |  majModeCombatAttaqueCaC(self)
-     |      active le mode de combat 'corps-a-corps'
-     |  
-     |  majModeCombatAttaqueDist(self)
-     |      active le mode de combat 'attaque a distance'
-     |  
-     |  majModeCombatDeplacement(self)
-     |      active le mode de combat 'deplacement' (mode standard)
-     |  
-     |  majModeCombatZone(self)
-     |  
-     |  majModeCombatZoneForme(self)
-     |  
-     |  majModeDefinirEntree(self)
-     |  
-     |  majModeDefinirSortie(self)
-     |  
-     |  majModeForme(self)
-     |      met a jour la forme utilisee pour la peinture
-     |  
-     |  majModePionSupprimer(self)
-     |      enclenche le mode suppression de pions sur clic gauche (creatures ou decors)
-     |  
-     |  majModeZonePlacement(self)
-     |  
-     |  majNotesAttaqueEC(self)
-     |      met a jour les notes de l'attaque en cours (selectionnee)
-     |  
-     |  majNotesPion(self)
-     |      les notes du pion ont ete mises a jour
-     |  
-     |  majNotesPlateau(self)
-     |      les notes du plateau ont ete maj a l'ecran
-     |  
-     |  majOrdreJeu(self)
-     |      met a jour l'ordre de jeu des pions en fonction de l'attribut prevu par les regles s'il existe,
-     |      ou en fonction de l'ordre de jeu parametre sinon
-     |  
-     |  majProjectionAttaqueCaC(self, pionCible)
-     |      affiche ou non la cible de l'attaque au corps a corps, selon sa validite ou non
-     |  
-     |  majProjectionPosition(self, activer, z=0)
-     |      maj l'affichage de la projection de la position d'un objet avant creation ou deplacement (pion, decor...)
-     |  
-     |  majZPion(self, valeur)
-     |      met a jour l'altitude du pion selectionne
-     |  
-     |  majZoneAttaqueCaC(self, actif=True)
-     |      affiche ou non les cases a portee du pion selectionne pour une attaque au corps-a-corps
-     |  
-     |  majZonePlacement(self, listeCases)
-     |      met a jour la forme et l'affichage de la zone de placement initale des joueurs
-     |  
-     |  materialiserPions(self, actif)
-     |      avtive/desactive la reception par les pions (autres que le pion selectionne) des hover events
-     |  
-     |  modeCaseEffet(self)
-     |      enclenche le mode de mise a jour de l'ffet actif des cases
-     |  
-     |  modeCopieTerrain(self)
-     |      enclenche le mode copie de case
-     |  
-     |  modeCreationCreaturePion(self, ligne, col)
-     |      enclenche le mode de creation de pions depuis la liste des creatures
-     |  
-     |  modeCreationDecor(self, ligne, col)
-     |      enclenche le mode de creation de decors depuis la liste des decors
-     |  
-     |  modeCreationPion(self)
-     |      enclenche le mode de creation de pions simples
-     |  
-     |  modeMajAltitudeCase(self)
-     |  
-     |  modeMajTerrainCase(self, ligne, col)
-     |      enclenche le mode permettant la mise a jour du terrain des cases
-     |  
-     |  modePeintureCase(self)
-     |      enclenche le mode peinture de case a partir de la couleur selectionnee
-     |  
-     |  modePeintureCase_perso(self)
-     |  
-     |  mouseMoveEvent(self, event)
-     |  
-     |  mousePressEvent(self, event)
-     |  
-     |  mouseReleaseEvent(self, event)
-     |  
-     |  numeroterNom(self, nom)
-     |      renvoie le nom du pion avec un numero complementaire si necessaire
-     |  
-     |  pionClique(self, numPion)
-     |      on a clique sur ce pion
-     |  
-     |  pionCreer(self, coordCase)
-     |      creer un jeton aux coordonnees indiquees
-     |  
-     |  pionDecorCreer(self, coordCase)
-     |      creer un jeton aux coordonnees indiquees
-     |  
-     |  pionDecorSaisir(self, numPionDecor)
-     |      on saisit un pion decor (mode creation seulement)
-     |  
-     |  pionDecorSelectionne(self)
-     |      renvoie le pion actuellement selectionne
-     |  
-     |  pionDecorSupprimer(self, num)
-     |      supprime le pion entre en parametre
-     |  
-     |  pionDecorSurvol(self, numPionDecor)
-     |      le pion-decor est survole par le curseur, on affiche ses informations dans la zone prevue
-     |  
-     |  pionDeplacerDansOrdreJeu(self, numPion, nouvellePosition)
-     |      deplace un pion dans le dictionnaire gerant l'ordre de jeu de maniere a assurer sa coherence
-     |      nouvellePosition = 0 supprime le pion de la liste
-     |  
-     |  pionDeposer(self, coordCase)
-     |      on depose le pion sur la case voulue
-     |  
-     |  pionDoubleClic(self, numPion)
-     |      on a double-clique sur le pion
-     |  
-     |  pionSaisir(self, numPion)
-     |      on saisit un pion
-     |  
-     |  pionSelectionne(self)
-     |      renvoie le pion actuellement selectionne
-     |  
-     |  pionSuivant(self)
-     |      selection du pion suivant dans la liste d'ordre de jeu
-     |  
-     |  pionSupprimer(self, num)
-     |      supprime le pion entre en parametre
-     |  
-     |  pionSurCase(self, coord)
-     |      renvoie le pion present sur la case, none sinon
-     |  
-     |  pionSurvol(self, numPion)
-     |      le pion est survole par le curseur, on affiche ses informations dans la zone prevue
-     |  
-     |  pionsSurListeCase(self, listeCases)
-     |      renvoie la liste des pions presents sur la liste de cases
-     |  
-     |  placerCacheEnCours(self)
-     |      active le mode de mise a jour de la liste des cases cachees par ce cache
-     |  
-     |  plateauModeCombat(self)
-     |  
-     |  plateauModeCreation(self)
-     |      ##### activation des differents modes d'interaction avec le plateau et mises a jour des principaux parametres  #######
-     |  
-     |  polygoneAgglo(self, listeCases)
-     |      renvoie un polygone contruit par agglomeration des polygones des cases de la liste
-     |      les cases doivent etre adjacentes (cases hexagonales ou carrees)
-     |  
-     |  polygoneCone(self, point1, point2)
-     |      renvoie le polygone du cone defini par les deux points (origine, distance)
-     |  
-     |  preSelectionCollision(self, point1, point2)
-     |      renvoie une liste des cases qui peuvent etre concernees par une collision avec
-     |      un graphicsItem (pour des raisons de performance)
-     |  
-     |  recreer(self, fenetre)
-     |  
-     |  rectEllipseCirculaire(self, centre, rayon)
-     |      renvoie le QRectF definissant une ellipse ayant le QPointF pour centre et le rayon en cases entres en param
-     |      attention: l'ellipse n'est pas tout a fait circulaire, elle couvre horizontalement et
-     |      verticalement le nombre de cases demandees
-     |  
-     |  rectFormeDessin(self, point1, point2)
-     |      retourne le rectangle repesentant la forme de selection
-     |      determine pour ce faire les points A et B, cad le point haut-droit et le point bas-gauche
-     |  
-     |  reinitAttaqueZone(self)
-     |  
-     |  selectionFrontiere(self)
-     |      retourne les cases selectionnees lors de l'utilisation de la forme 'frontiere'
-     |  
-     |  terrainEdit(self)
-     |      ouvre la fenetre 'terrains' en mode edition
-     |  
-     |  terrainNouveau(self)
-     |      ouvre la fenetre 'terrains' en mode edition
-     |  
-     |  utiliserAttaque(self, numAttaque)
-     |      le pion selectionne utilise son attaque n
-     |  
-     |  validerAttaqueDist(self)
-     |      on essaie de valider une attaque a distance vers un pion ou une case
-     |  
-     |  validerAttaqueZone(self)
-     |      l'attaque de zone est validee
-     |  
-     |  validerFormeDessin(self)
-     |      la projection des cases a peindre a ete acceptee, on peint ces cases
-     |  
-     |  voirCacheEnCours(self)
-     |      centre la vue sur et met en evidence le cache actif
-     |  
-     |  wheelEvent(self, event)
-     |      zoom/dezoom avec la molette de la souris
-     |  
-     |  zone(self, origine, distance, z=0, conditionFranchissable=False, conditionVisible=False)
-     |      renvoie un dictionnaire representant la liste des coordonnees des cases comprises dans la zone
-     |      la zone en question est la liste des cases situees a une distance d des coordonnees d'origine
-     |      z = 0 -> hauteur z de l'origine par rapport a l'altitude de la case
-     |      conditionFranchissable = Vrai -> les cases infranchissables ne sont pas prises en compte
-     |      conditionVisible = Vrai -> les cases bloquant la visibilite ne sont pas prises en compte
-     |      [cf methode A* (A-star)]
-     |  

BIN
doc/gestion du combat - reflexion.docx


BIN
doc/legende orga.xlsx


+ 0 - 334
doc/orga.ep

@@ -1,334 +0,0 @@
-<?xml version="1.0"?>
-<Document xmlns="http://www.evolus.vn/Namespace/Pencil"><Properties/><Pages><Page><Properties><Property name="name">Orga dmonde</Property><Property name="id">1431439939552_2866</Property><Property name="width">949</Property><Property name="height">831</Property><Property name="dimBackground"/><Property name="transparentBackground">true</Property><Property name="backgroundColor">#FFFFFFFF</Property><Property name="note">&lt;br /&gt;</Property></Properties><Content><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="edc4a7d0468444c6a172efb4e674dd54" transform="matrix(1,0,0,1,470,244)"><p:metadata><p:property name="box"><![CDATA[155,40]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,5]]></p:property><p:property name="fillColor"><![CDATA[#CCCCCCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[S. Fichiers partagés<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="153" height="38" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(204, 204, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="6c1a637f7b9d4a95aefd37956645f7e3" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="205ffb64f5294dbca227272d6cc47877">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#6c1a637f7b9d4a95aefd37956645f7e3" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#205ffb64f5294dbca227272d6cc47877)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="787ed069ed8845f1a01b433beeed84b3"/>
-            <use xlink:href="#6c1a637f7b9d4a95aefd37956645f7e3" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="5" y="12" width="145" height="16" p:name="text" id="1f0c97d016664c89b2d1b7510b48da38" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">S. Fichiers partagés<br /></div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="090bf96416184c8f961dd3ba1de4a640" transform="matrix(1,0,0,1,556,60)"><p:metadata><p:property name="box"><![CDATA[141,50]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,6.25]]></p:property><p:property name="fillColor"><![CDATA[#FFCC99FF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[U. Utilisateur (Joueur/MJ)<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="139" height="48" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(255, 204, 153); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="02a592b027db4bd79e1ed60b42bbb10d" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="5eeb52570b774d50b601d9d64d5aea92">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#02a592b027db4bd79e1ed60b42bbb10d" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#5eeb52570b774d50b601d9d64d5aea92)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="ca11d9d0acdf48f4974df603836ab4ec"/>
-            <use xlink:href="#02a592b027db4bd79e1ed60b42bbb10d" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="6.25" y="9" width="128.5" height="32" p:name="text" id="e52c9c5f2222439dac7cf7a45cd11531" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">U. Utilisateur (Joueur/MJ)<br /></div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="3a7dcc32ec594e569898fddbc6f7eaa8" transform="matrix(1,0,0,1,770,59)"><p:metadata><p:property name="box"><![CDATA[136,51]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,6.375]]></p:property><p:property name="fillColor"><![CDATA[#CCCCCCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[L. Fichiers locaux
-                ]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="134" height="49" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(204, 204, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="fd6d084ae7a04fde961643bfe90da0f8" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="d70734d5f38247ad8233918373f342b7">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#fd6d084ae7a04fde961643bfe90da0f8" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#d70734d5f38247ad8233918373f342b7)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="b352930c650e4c92a5da07f26c0bfd3b"/>
-            <use xlink:href="#fd6d084ae7a04fde961643bfe90da0f8" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="6.375" y="18" width="123.25" height="16" p:name="text" id="4314f83fc0a540a0bf4245f4347d85fc" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">L. Fichiers locaux
-                </div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="300c3e5a5efe4a74b89186949e4bac18" transform="matrix(1,0,0,1,271,153)"><p:metadata><p:property name="box"><![CDATA[160,56]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,7]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[C. Ecran de connexion<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="158" height="54" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="a6a13ae0423a49b08c9415207d5e8b6e" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="307189c49cc542c3aa71d3dbf2c3b9a1">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#a6a13ae0423a49b08c9415207d5e8b6e" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#307189c49cc542c3aa71d3dbf2c3b9a1)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="28d2a3adad2e40a8bccd1b7d2fd8021b"/>
-            <use xlink:href="#a6a13ae0423a49b08c9415207d5e8b6e" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="7" y="20" width="146" height="16" p:name="text" id="91709421984e459d84d622e6d92371f5" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">C. Ecran de connexion<br /></div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="734f0ee5706340238953f73ee606504f" transform="matrix(1,0,0,1,263,29)"><p:metadata><p:property name="box"><![CDATA[177,69]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,8.625]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[O. Chat, échange de fichiers, chat vocal, jets de dés, partage d'images<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="175" height="67" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="51e8ad2c0023426d859534105c37cae7" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="def19f2543034684a85f8d4ca319ba44">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#51e8ad2c0023426d859534105c37cae7" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#def19f2543034684a85f8d4ca319ba44)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="d8a74252eda6488eb2f1eb063186cde3"/>
-            <use xlink:href="#51e8ad2c0023426d859534105c37cae7" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="8.625" y="11" width="159.75" height="48" p:name="text" id="b48246e4c6874ca1a64707a760a3d4d3" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">O. Chat, échange de fichiers, chat vocal, jets de dés, partage d'images<br /></div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="93186c3b53644f1bb3511312b99f05f7" transform="matrix(1,0,0,1,111,331)"><p:metadata><p:property name="box"><![CDATA[623,394]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,49.25]]></p:property><p:property name="fillColor"><![CDATA[#99339900]]></p:property><p:property name="strokeColor"><![CDATA[#993399FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[P. Partie]]></p:property><p:property name="textFont"><![CDATA[Arial|bold|normal|15px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="621" height="392" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(153, 51, 153); fill-opacity: 0; stroke: rgb(153, 51, 153); stroke-opacity: 1;" p:name="rrRect" id="c0343e27f8824b059e8df6a743d32981" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="1f34b58eaf384454b8c3a8925cb92542">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#c0343e27f8824b059e8df6a743d32981" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#1f34b58eaf384454b8c3a8925cb92542)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="4e43e33721df457884ece977d157fb18"/>
-            <use xlink:href="#c0343e27f8824b059e8df6a743d32981" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="49.25" y="49" width="524.5" height="18" p:name="text" id="8df72889efbb481384403f264241a11c" style="font-family: Arial; font-size: 15px; font-weight: bold; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml">P. Partie</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="7169fec07d134a2db986d9a248960cf3" transform="matrix(1,0,0,1,172,556)"><p:metadata><p:property name="box"><![CDATA[200,80]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,10]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[J. Journal]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="198" height="78" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="5f3c401c8493445cac4539793f5a22e2" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="91d301081b884b599f662e697cc49529">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#5f3c401c8493445cac4539793f5a22e2" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#91d301081b884b599f662e697cc49529)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="64f6920ffa3a4f1086f23fcc25bc2f4f"/>
-            <use xlink:href="#5f3c401c8493445cac4539793f5a22e2" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="10" y="32" width="180" height="16" p:name="text" id="4b6f7b983348474f830a9c250cb326ae" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">J. Journal</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="79e3375a9a0146d2b59797bb3827d7ab" transform="matrix(1,0,0,1,582,476)"><p:metadata><p:property name="box"><![CDATA[103,30]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,3.75]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[I. Inventaire]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="101" height="28" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="b36a146acd5c48e3a2bd47d145bfc5a1" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="241e61ff199e47e9b97d80e0abb15ae6">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#b36a146acd5c48e3a2bd47d145bfc5a1" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#241e61ff199e47e9b97d80e0abb15ae6)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="d065d1b6015342caa235fbc9d2d528a2"/>
-            <use xlink:href="#b36a146acd5c48e3a2bd47d145bfc5a1" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="3.75" y="7" width="95.5" height="16" p:name="text" id="d67d856db7bc4190b6e341827909521b" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">I. Inventaire</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="77b7a11d04dc457d84944ee24de6744d" transform="matrix(1,0,0,1,189,426)"><p:metadata><p:property name="box"><![CDATA[200,80]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,10]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[PC. Plateau de combat<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="198" height="78" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="6f4dbd659aa34353b495c1ed12374fd9" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="858b68d21f7841fbbba09cb33899fa18">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#6f4dbd659aa34353b495c1ed12374fd9" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#858b68d21f7841fbbba09cb33899fa18)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="ad36550d282642218c2ada7c60717eca"/>
-            <use xlink:href="#6f4dbd659aa34353b495c1ed12374fd9" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="10" y="32" width="180" height="16" p:name="text" id="36aa49c6898e4d368713f15afca046a0" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">PC. Plateau de combat<br /></div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="edcf27aa7d1144e89047bc3f7a1b24e5" transform="matrix(1,0,0,1,425,346)"><p:metadata><p:property name="box"><![CDATA[200,80]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,10]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[PJ. Personnages des joueurs<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="198" height="78" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="72d669a70baf4941b8403036f1b6db62" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="e8201e84b1654f30aa83d41996974f6c">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#72d669a70baf4941b8403036f1b6db62" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#e8201e84b1654f30aa83d41996974f6c)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="294a12d16c294ea29d92a2e8e86ef89b"/>
-            <use xlink:href="#72d669a70baf4941b8403036f1b6db62" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="10" y="32" width="180" height="16" p:name="text" id="299a9b1b9cae4c1ba61afe6a3b2eebd7" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">PJ. Personnages des joueurs<br /></div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="0f839eb0878b4f059448f00893dfbe15" transform="matrix(1,0,0,1,425,556)"><p:metadata><p:property name="box"><![CDATA[200,80]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,10]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[M. Carte du monde<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="198" height="78" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="571708519457446a94064b364910127e" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="35044969d3d74405bf38861c654d0ddc">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#571708519457446a94064b364910127e" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#35044969d3d74405bf38861c654d0ddc)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="1f067dcd3c174912ac948e0812defa18"/>
-            <use xlink:href="#571708519457446a94064b364910127e" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="10" y="32" width="180" height="16" p:name="text" id="a3ed8a67134849bc9fca2ef28f9f1f24" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">M. Carte du monde<br /></div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="d6ec7de78ead484aab7f30b69565a266" transform="matrix(1,0,0,1,47,111)"><p:metadata><p:property name="startPin" p:viay="-26.5" p:viax="713" p:connectedOutletId="middle-left" p:connectedShapeId="3a7dcc32ec594e569898fddbc6f7eaa8"><![CDATA[723,-26.5]]></p:property><p:property name="endPin" p:connectedShapeId="090bf96416184c8f961dd3ba1de4a640" p:connectedOutletId="middle-right" p:viax="660" p:viay="-26"><![CDATA[650,-26]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="13ffeef1f7e048e6a90232361f8240b3" d="M 717 -32 L 723 -26.5 L 718 -21 M 723 -26.5 C 687 -25 687 -26 650 -26 M 656 -20 L 650 -26 L 656 -32"/>
-            </defs>
-            <use xlink:href="#13ffeef1f7e048e6a90232361f8240b3" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#13ffeef1f7e048e6a90232361f8240b3" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="7bf484348465424fb3b890740673b87f" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="adabecd9f33549b1a151e5f87f910c9c" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#13ffeef1f7e048e6a90232361f8240b3" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="9b6d00d9e5fd49968247868a29e2e8eb" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="6c99312cb877493fb352a0e807602e91" transform="matrix(1,0,0,1,46,89)"><p:metadata><p:property name="startPin" p:viay="457" p:viax="479" p:connectedOutletId="top-center" p:connectedShapeId="0f839eb0878b4f059448f00893dfbe15"><![CDATA[479,467]]></p:property><p:property name="endPin" p:connectedShapeId="77b7a11d04dc457d84944ee24de6744d" p:connectedOutletId="middle-right" p:viax="353" p:viay="377"><![CDATA[343,377]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="4cdeae9dd42e4378a5e324c5cc6eeb12" d="M 485 461 L 479 467 L 473 461 M 479 467 C 479 407 403 377 343 377 M 349 383 L 343 377 L 349 371"/>
-            </defs>
-            <use xlink:href="#4cdeae9dd42e4378a5e324c5cc6eeb12" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#4cdeae9dd42e4378a5e324c5cc6eeb12" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="50be3741fda24b8d95858577d7504607" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="a94a89ccf37346f089dd8785be31b225" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#4cdeae9dd42e4378a5e324c5cc6eeb12" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="bb9de654771d44e1b4b8775b0010a028" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="1f1d90db525b4165ba34fefcaca2a124" transform="matrix(1,0,0,1,46,89)"><p:metadata><p:property name="startPin" p:connectedShapeId="3a7dcc32ec594e569898fddbc6f7eaa8" p:connectedOutletId="bottom-center" p:viax="792" p:viay="31"><![CDATA[792,21]]></p:property><p:property name="endPin" p:connectedShapeId="93186c3b53644f1bb3511312b99f05f7" p:connectedOutletId="middle-right" p:viax="698" p:viay="439"><![CDATA[688,439]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="93c28784a2db45bf808a3cd09adcb6a4" d="M 786 27 L 792 21 L 798 27 M 792 21 C 792 81 748 439 688 439 M 694 445 L 688 439 L 694 433"/>
-            </defs>
-            <use xlink:href="#93c28784a2db45bf808a3cd09adcb6a4" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#93c28784a2db45bf808a3cd09adcb6a4" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="704714836dc8418fbc415a46f9f430c6" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="edf4cb9986c64c8f8f2447cf79dc2678" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#93c28784a2db45bf808a3cd09adcb6a4" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="07286be95f6346f0a5bbe269e60c2e5d" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="7334c56275f344b19481f5f16e776fa1" transform="matrix(1,0,0,1,46,89)"><p:metadata><p:property name="startPin" p:viay="145" p:viax="501.5" p:connectedOutletId="top-center" p:connectedShapeId="edc4a7d0468444c6a172efb4e674dd54"><![CDATA[501.5,155]]></p:property><p:property name="endPin" p:viay="130" p:viax="305" p:connectedOutletId="bottom-center" p:connectedShapeId="300c3e5a5efe4a74b89186949e4bac18"><![CDATA[305,120]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="df4978f8934f4231886c5fd99ccfd8d1" d="M 507 150 L 501.5 155 L 496 149 M 501.5 155 C 504 95 305 180 305 120 M 299 126 L 305 120 L 311 126"/>
-            </defs>
-            <use xlink:href="#df4978f8934f4231886c5fd99ccfd8d1" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#df4978f8934f4231886c5fd99ccfd8d1" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="867752e4e53c4a2f9131c1691184a42d" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="37dbac5d5b5645ccb2ca13ca7a33f08c" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#df4978f8934f4231886c5fd99ccfd8d1" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="de028038546f49eeb93ecbf84b505f45" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="a37f2c4f6cd445b3b866e6f0167a1ca9" transform="matrix(1,0,0,1,46,89)"><p:metadata><p:property name="startPin" p:viay="130" p:viax="305" p:connectedOutletId="bottom-center" p:connectedShapeId="300c3e5a5efe4a74b89186949e4bac18"><![CDATA[305,120]]></p:property><p:property name="endPin" p:viay="232" p:viax="376.5" p:connectedOutletId="top-center" p:connectedShapeId="93186c3b53644f1bb3511312b99f05f7"><![CDATA[376.5,242]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="2cae7d63dcbf4acbb176d2b8da95b042" d="M 299 126 L 305 120 L 311 126 M 305 120 C 305 180 377 182 376.5 242 M 382 236 L 376.5 242 L 371 236"/>
-            </defs>
-            <use xlink:href="#2cae7d63dcbf4acbb176d2b8da95b042" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#2cae7d63dcbf4acbb176d2b8da95b042" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="2c5622461442436ba38ec0edf5269a55" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="b85b11aeeb7e4364a21843a936b5c0c5" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#2cae7d63dcbf4acbb176d2b8da95b042" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="86d7d818893c4a678a3ae6453a45646d" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="b45a9df5b1ab4de19ae5cb7b2072e51c" transform="matrix(1,0,0,1,46,89)"><p:metadata><p:property name="startPin" p:viay="54" p:viax="305" p:connectedOutletId="top-center" p:connectedShapeId="300c3e5a5efe4a74b89186949e4bac18"><![CDATA[305,64]]></p:property><p:property name="endPin" p:viay="19" p:viax="305.5" p:connectedOutletId="bottom-center" p:connectedShapeId="734f0ee5706340238953f73ee606504f"><![CDATA[305.5,9]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="f03ade039452463b9157dee770c21879" d="M 311 58 L 305 64 L 299 58 M 305 64 C 305 34 306 39 305.5 9 M 300 15 L 305.5 9 L 311 15"/>
-            </defs>
-            <use xlink:href="#f03ade039452463b9157dee770c21879" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#f03ade039452463b9157dee770c21879" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="212b5a47e9d840399693adc33d1222e8" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="e3dec58caa1e4e86b82b26c3b3addbfe" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#f03ade039452463b9157dee770c21879" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="44eace18ca7f4e78b5efc964cf9c8029" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="23784495afff4a0bbff92b622c9ef10f" transform="matrix(1,0,0,1,46,89)"><p:metadata><p:property name="startPin" p:connectedShapeId="090bf96416184c8f961dd3ba1de4a640" p:connectedOutletId="middle-left" p:viax="500" p:viay="-4"><![CDATA[510,-4]]></p:property><p:property name="endPin" p:viay="92" p:viax="395" p:connectedOutletId="middle-right" p:connectedShapeId="300c3e5a5efe4a74b89186949e4bac18"><![CDATA[385,92]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="e6dae5f6e68948c9a392557779f1cbbc" d="M 504 -10 L 510 -4 L 504 2 M 510 -4 C 450 -4 445 92 385 92 M 391 98 L 385 92 L 391 86"/>
-            </defs>
-            <use xlink:href="#e6dae5f6e68948c9a392557779f1cbbc" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#e6dae5f6e68948c9a392557779f1cbbc" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="e42c8a09c2d7459094f63f8863e5c32f" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="f933aeb2cb5c48139cb4909be1d24ef7" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#e6dae5f6e68948c9a392557779f1cbbc" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="23568ec24cb5445e8fb67fdbe712cf53" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="b59e6d0f690c4bdb8792a1ffe5e9ca10" transform="matrix(1,0,0,1,46,89)"><p:metadata><p:property name="startPin" p:viay="205" p:viax="501.5" p:connectedOutletId="bottom-center" p:connectedShapeId="edc4a7d0468444c6a172efb4e674dd54"><![CDATA[501.5,195]]></p:property><p:property name="endPin" p:viay="232" p:viax="376.5" p:connectedOutletId="top-center" p:connectedShapeId="93186c3b53644f1bb3511312b99f05f7"><![CDATA[376.5,242]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="cd1d81892c2b4484978494e50995b61c" d="M 496 201 L 501.5 195 L 507 200 M 501.5 195 C 504 255 377 182 376.5 242 M 382 236 L 376.5 242 L 371 236"/>
-            </defs>
-            <use xlink:href="#cd1d81892c2b4484978494e50995b61c" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#cd1d81892c2b4484978494e50995b61c" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="d2fb96bb92f74b38940e3947bb1bc52e" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="f2ecf2279f324940a835550b00b9d033" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#cd1d81892c2b4484978494e50995b61c" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="54b4610f06e844c1bcbdd2304f5f35c7" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="2d60c96a88d24a49b25ba05e123b2f70" transform="matrix(1,0,0,1,42,210)"><p:metadata><p:property name="startPin" p:connectedShapeId="79e3375a9a0146d2b59797bb3827d7ab" p:connectedOutletId="top-center" p:viax="591.5" p:viay="256"><![CDATA[591.5,266]]></p:property><p:property name="endPin" p:viay="226" p:viax="483" p:connectedOutletId="bottom-center" p:connectedShapeId="edcf27aa7d1144e89047bc3f7a1b24e5"><![CDATA[483,216]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="7223c89cfc374b8a9255d8a771fc1807" d="M 597 261 L 591.5 266 L 586 260 M 591.5 266 C 594 206 483 276 483 216 M 477 222 L 483 216 L 489 222"/>
-            </defs>
-            <use xlink:href="#7223c89cfc374b8a9255d8a771fc1807" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#7223c89cfc374b8a9255d8a771fc1807" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="1049649512f64605a43b515cecf0da63" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="d04661b8e1f444b4a4c33ecaecb164ee" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#7223c89cfc374b8a9255d8a771fc1807" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="5e9b8355b57e4cd5bf2b20ff42d8f040" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="bc3465147938449d818088c471f1aa48" transform="matrix(1,0,0,1,42,210)"><p:metadata><p:property name="startPin" p:connectedShapeId="77b7a11d04dc457d84944ee24de6744d" p:connectedOutletId="top-center" p:viax="247" p:viay="206"><![CDATA[247,216]]></p:property><p:property name="endPin" p:viay="176" p:viax="373" p:connectedOutletId="middle-left" p:connectedShapeId="edcf27aa7d1144e89047bc3f7a1b24e5"><![CDATA[383,176]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="5f69f42c984941538c0acfc840f4fdfe" d="M 253 210 L 247 216 L 241 210 M 247 216 C 247 156 323 176 383 176 M 377 170 L 383 176 L 377 182"/>
-            </defs>
-            <use xlink:href="#5f69f42c984941538c0acfc840f4fdfe" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#5f69f42c984941538c0acfc840f4fdfe" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="83750a5bf1e34a4eb3eea090cf7a2c22" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="d116a02c3ebe40a5aeab5868edbc9fed" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#5f69f42c984941538c0acfc840f4fdfe" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="d54bb200aedb47d390b927e249b09ee5" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="3386c809375b4cbb9b73db8d0e9d0fd6" transform="matrix(1,0,0,1,53,202)"><p:metadata><p:property name="startPin" p:connectedShapeId="77b7a11d04dc457d84944ee24de6744d" p:connectedOutletId="bottom-center" p:viax="236" p:viay="314"><![CDATA[236,304]]></p:property><p:property name="endPin" p:connectedShapeId="7169fec07d134a2db986d9a248960cf3" p:connectedOutletId="top-center" p:viax="219" p:viay="344"><![CDATA[219,354]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="c51a5b17b6b44a69b034ca3a556a979e" d="M 230 310 L 236 304 L 242 310 M 236 304 C 236 334 219 324 219 354 M 225 348 L 219 354 L 213 348"/>
-            </defs>
-            <use xlink:href="#c51a5b17b6b44a69b034ca3a556a979e" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#c51a5b17b6b44a69b034ca3a556a979e" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="7aa5a69d437c406981135001bfec2d3e" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="94e514b8af1d499589366aa80c07eee2" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#c51a5b17b6b44a69b034ca3a556a979e" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="0ec88b94765141f5ac6515b9638dabae" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="12b06ed776164ed0b4778021fe0609ee" transform="matrix(1,0,0,1,42,210)"><p:metadata><p:property name="startPin" p:connectedShapeId="7169fec07d134a2db986d9a248960cf3" p:connectedOutletId="middle-right" p:viax="340" p:viay="386"><![CDATA[330,386]]></p:property><p:property name="endPin" p:viay="386" p:viax="373" p:connectedOutletId="middle-left" p:connectedShapeId="0f839eb0878b4f059448f00893dfbe15"><![CDATA[383,386]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="b7d076e2b24a441c988ae049a1fef671" d="M 336 392 L 330 386 L 336 380 M 330 386 C 360 386 353 386 383 386 M 377 380 L 383 386 L 377 392"/>
-            </defs>
-            <use xlink:href="#b7d076e2b24a441c988ae049a1fef671" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#b7d076e2b24a441c988ae049a1fef671" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="837a5dd149484a149827503c78f347c6" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="54f5557c1ebf4f5c90e3d36f557562f5" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#b7d076e2b24a441c988ae049a1fef671" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="4e3aa2ef6d13484ba06c2bdc0146add7" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="0b2fb02ab8e347b295bddfa34f607764" transform="matrix(1,0,0,1,720,74)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[LU]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="832fdcde9fdc4ae2a650b7a59cc03631" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="c6495717f0ca4c058cce5aa3e6b0b8e4" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">LU</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="25d22da3b4eb47ff852b9d96350df9fd" transform="matrix(1,0,0,1,476,130)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[UC]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="925cff7e0d104a589e560cb6ffb6c559" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="b061e09e9a91494abbdce54f94f3dd81" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">UC</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="d8ed32b573a849c2a7b73c8ba43ed238" transform="matrix(1,0,0,1,362,130)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[CO]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="8ae06470b2f0423ebd635e9fe3c77d74" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="3374698abbb640b7a9cf353e8f8e3eba" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">CO</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="07018211f46a4be0bc331ff1eea1919a" transform="matrix(1,0,0,1,490,213)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[CS]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="25e617086fba420aa82d881e283572cf" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="d86bd5c05c4c4faab96284b45721a089" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">CS</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="e90753d6b8234814a103f953eab5b030" transform="matrix(1,0,0,1,354,282)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[CP]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="5c42d925f8304285a7f72b81667007ab" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="44ad893649b742a1b4dee757f4637465" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">CP</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="6567f59211e146c4b2349e7f4e5dc1f7" transform="matrix(1,0,0,1,450,297)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[SP]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="eb1a019a0b7c4f3ebef8741645253448" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="a0756cc364514003affd235d77fc6474" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">SP</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="dd90626845894744823df43be20fcf72" transform="matrix(1,0,0,1,336,375)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[PCPJ]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="f75de98397954ffbb32b112a5284a7d3" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="cc5b2b7ba60c487ba0a9ac6f8dc65d24" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">PCPJ</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="cab466423bbd4df6aa065bfbd1a88376" transform="matrix(1,0,0,1,616,447)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[PJI]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="520b0dd7c70e4ba78857871218af12ef" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="b2e70f082be74df890f414ec92503963" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">PJI</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="e206e8367fa340469415f5adb067d2d8" transform="matrix(1,0,0,1,449,503)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[CP]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property><p:property name="textContent"><![CDATA[CP]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="51d06219254b43c1af76af3b563c2a58" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="724c369a7126436398ebbd2c9d23bc2f" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; visibility: hidden;"><tspan x="0" y="0">CP</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="4b115efe6d8a4f7ea276a926a68179e9" transform="matrix(1,0,0,1,446,503)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[PCM]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="0302473470ce4589a42ab00dfada8b1f" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="3dd981aa667441e7af3b4f4d34d3d529" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">PCM</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="39d1456ab6434f9db2afaec7d9ff6848" transform="matrix(1,0,0,1,290,539)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[PCJ]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="86587c40671c4dbab27e6b7411557b6d" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="f4b62b5eadf1451aa6b9606e91136a56" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">PCJ</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="df4aeb6f740e45b1a6c285ac5325ab1b" transform="matrix(1,0,0,1,388,587)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[JM]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="60f8195be6c04ffcabfa1a471fabb9b6" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="02175be18f6b4f638094c52abbd46706" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">JM</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="ace2dfe096c543f0a1441329c2d00250" transform="matrix(1,0,0,1,771,407)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[LP]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="833284fc08f74d15a8a655df3124a5c3" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="9cb866e71b7b4f43ae24914a5d5513f7" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">LP</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="4928263c46324145818636565bd5d399" transform="matrix(1,0,0,1,93,153)"><p:metadata><p:property name="startPin" p:connectedShapeId="3a7dcc32ec594e569898fddbc6f7eaa8" p:connectedOutletId="bottom-center" p:viax="745" p:viay="-33"><![CDATA[745,-43]]></p:property><p:property name="endPin" p:connectedShapeId="edc4a7d0468444c6a172efb4e674dd54" p:connectedOutletId="middle-right" p:viax="542" p:viay="111"><![CDATA[532,111]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="b2a6f2e37f4f4e32a364b65727e24b21" d="M 739 -37 L 745 -43 L 751 -37 M 745 -43 C 745 17 592 111 532 111 M 538 117 L 532 111 L 538 105"/>
-            </defs>
-            <use xlink:href="#b2a6f2e37f4f4e32a364b65727e24b21" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#b2a6f2e37f4f4e32a364b65727e24b21" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="8b2fec1b85954c50b6a97884916f0123" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="b8ee5e8c911243cb986cc23bb80b11ab" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#b2a6f2e37f4f4e32a364b65727e24b21" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="100c0cb180c3468e900b1028d4e0df89" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:PlainTextV2" id="a19a92d250324cbaaec11942db3a64cb" transform="matrix(1,0,0,1,720,209)"><p:metadata><p:property name="disabled"><![CDATA[false]]></p:property><p:property name="width"><![CDATA[100,0]]></p:property><p:property name="fixedWidth"><![CDATA[false]]></p:property><p:property name="label"><![CDATA[LS]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textAlign"><![CDATA[0,0]]></p:property></p:metadata>
-            <rect x="0" y="0" style="fill: none; stroke: none; visibility: hidden; display: none;" p:name="bgRect" id="1a69f693bc94492fb614dda003011f04" width="0" height="0"/>
-            <text xml:space="preserve" p:name="text" id="53d5d6b96d3a43ab89f71f8b4b56b87e" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;"><tspan x="0" y="0">LS</tspan></text>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="2f22986aee4445e6be068d72df01ab3b" transform="matrix(1,0,0,1,582,666)"><p:metadata><p:property name="box"><![CDATA[115,33]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,4.125]]></p:property><p:property name="fillColor"><![CDATA[#CCFFFFFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[Règles utilisées<br />]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="113" height="31" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(204, 255, 255); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="9c67689df5c6481e82451be8256f425b" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="80d488e3694743a49a6b457aaa151e3a">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#9c67689df5c6481e82451be8256f425b" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#80d488e3694743a49a6b457aaa151e3a)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="bff509b00f1f4a8eba1698217eb4a154"/>
-            <use xlink:href="#9c67689df5c6481e82451be8256f425b" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="4.125" y="9" width="106.75" height="16" p:name="text" id="66052f5744d1473ea8e436f7cb200713" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">Règles utilisées<br /></div></foreignObject>
-        </g></Content></Page></Pages></Document>

+ 0 - 128
doc/orga_pions.ep

@@ -1,128 +0,0 @@
-<?xml version="1.0"?>
-<Document xmlns="http://www.evolus.vn/Namespace/Pencil"><Properties/><Pages><Page><Properties><Property name="name">Untitled Page</Property><Property name="id">1431951142630_6767</Property><Property name="width">949</Property><Property name="height">831</Property><Property name="dimBackground"/><Property name="transparentBackground"/><Property name="backgroundColor">#ffffff</Property></Properties><Content><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="3afd210609944702bdaf62a3c2c485fa" transform="matrix(1,0,0,1,345,112)"><p:metadata><p:property name="box"><![CDATA[177,59]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,7.375]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[Pion]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="175" height="57" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="543f97c86e58431588b697ceda73937e" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="21bd0d1eba384d3e912260bbb7493779">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#543f97c86e58431588b697ceda73937e" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#21bd0d1eba384d3e912260bbb7493779)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="d5261af18eae4f0cb0ec4b8a8595bc40"/>
-            <use xlink:href="#543f97c86e58431588b697ceda73937e" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="7.375" y="22" width="162.25" height="16" p:name="text" id="ea55e961c99b48de85fec9496fe39d68" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">Pion</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="76b3048bbe784488b1f9e57e3d8fa032" transform="matrix(1,0,0,1,246,363)"><p:metadata><p:property name="box"><![CDATA[165,73]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,9.125]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[Pion Decor]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="163" height="71" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="ca4e0d3c99ab48f4ade8804aa23fff77" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="a1656f9c56ff4ef38c062599517876a5">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#ca4e0d3c99ab48f4ade8804aa23fff77" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#a1656f9c56ff4ef38c062599517876a5)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="355aff3689584a60aeb4583d6b4a57ab"/>
-            <use xlink:href="#ca4e0d3c99ab48f4ade8804aa23fff77" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="9.125" y="29" width="146.75" height="16" p:name="text" id="3d16c203d3ef43399246bcfa30fa6db5" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">Pion Decor</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="9a73c52f92194c149a376738d0635215" transform="matrix(1,0,0,1,493,368)"><p:metadata><p:property name="box"><![CDATA[165,68]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,8.5]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[Pion Combattant]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="163" height="66" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="c77476b63df445cab399b0a2fce495f8" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="31daa064029146ee8ac3a90047fa2bd6">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#c77476b63df445cab399b0a2fce495f8" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#31daa064029146ee8ac3a90047fa2bd6)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="9c9f8cd890244ef1a6a1a7b8845e0eed"/>
-            <use xlink:href="#c77476b63df445cab399b0a2fce495f8" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="8.5" y="26" width="148" height="16" p:name="text" id="f2d13cca63b244a5bef1eedbe2c56927" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">Pion Combattant</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="4bcfcdaddf10493fa319c50cc68995cd" transform="matrix(1,0,0,1,677,83)"><p:metadata><p:property name="box"><![CDATA[180,64]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,8]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[Personnage]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="178" height="62" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="14588c6f4d094a7f88cfca5f32e91181" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="6b6002d1d51244f69d28edcacdb59f0f">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#14588c6f4d094a7f88cfca5f32e91181" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#6b6002d1d51244f69d28edcacdb59f0f)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="58fee7a9fbf348a0a759b4a2168bae73"/>
-            <use xlink:href="#14588c6f4d094a7f88cfca5f32e91181" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="8" y="24" width="164" height="16" p:name="text" id="919c84b325654b3aba42dafd803402bd" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">Personnage</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="deab9e436fe749f59840d0ef511fff94" transform="matrix(1,0,0,1,674,209)"><p:metadata><p:property name="box"><![CDATA[179,63]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,7.875]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[Créature]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="177" height="61" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="7f0ad5e92dc24da7b37f428e0abdc710" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="5a20a273347f4929a7ba9f6e804a5eb0">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#7f0ad5e92dc24da7b37f428e0abdc710" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#5a20a273347f4929a7ba9f6e804a5eb0)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="d3480642318d48eb870e7f81e0de451f"/>
-            <use xlink:href="#7f0ad5e92dc24da7b37f428e0abdc710" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="7.875" y="24" width="163.25" height="16" p:name="text" id="4e2f1c6cdfcf4e09b4afd8f34160919f" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">Créature</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="89d8719d8dc743839cff353181251839" transform="matrix(1,0,0,1,95,461)"><p:metadata><p:property name="startPin" p:connectedShapeId="9a73c52f92194c149a376738d0635215" p:connectedOutletId="top-center" p:viax="480.5" p:viay="-103"><![CDATA[480.5,-93]]></p:property><p:property name="endPin" p:viay="-280" p:viax="338.5" p:connectedOutletId="bottom-center" p:connectedShapeId="3afd210609944702bdaf62a3c2c485fa"><![CDATA[338.5,-290]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="ccf395cd13ce4241ae5497eb60aa1baf" d="M 486 -98 L 480.5 -93 L 475 -99 M 480.5 -93 C 483 -153 339 -230 338.5 -290 M 333 -284 L 338.5 -290 L 344 -284"/>
-            </defs>
-            <use xlink:href="#ccf395cd13ce4241ae5497eb60aa1baf" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#ccf395cd13ce4241ae5497eb60aa1baf" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="6ab5d3f220e04a94ba6df0e8074c0c0c" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="227b01256a8145139d420876f24a2945" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#ccf395cd13ce4241ae5497eb60aa1baf" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="123f845f22ce43a1940135c5a1b19c45" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="ad3ab57f94c840a5b77ffb0988a64f86" transform="matrix(1,0,0,1,95,461)"><p:metadata><p:property name="startPin" p:connectedShapeId="4bcfcdaddf10493fa319c50cc68995cd" p:connectedOutletId="bottom-center" p:viax="672" p:viay="-304"><![CDATA[672,-314]]></p:property><p:property name="endPin" p:connectedShapeId="deab9e436fe749f59840d0ef511fff94" p:connectedOutletId="top-center" p:viax="668.5" p:viay="-262"><![CDATA[668.5,-252]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="953c98ee532443b0abfccb357dc40ba5" d="M 666 -308 L 672 -314 L 678 -308 M 672 -314 C 672 -283 669 -283 668.5 -252 M 674 -258 L 668.5 -252 L 663 -258"/>
-            </defs>
-            <use xlink:href="#953c98ee532443b0abfccb357dc40ba5" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#953c98ee532443b0abfccb357dc40ba5" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="4bb107aa31684bae8af9d9e34ff9d05f" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="b0247a59635340c9b24027fb09c10086" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#953c98ee532443b0abfccb357dc40ba5" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="fca8907edf6d49838e1203b98125d1b8" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="4acf109d495041a9ba8171a3fe1d9c3b" transform="matrix(1,0,0,1,95,461)"><p:metadata><p:property name="startPin" p:viay="-179" p:viax="668.5" p:connectedOutletId="bottom-center" p:connectedShapeId="deab9e436fe749f59840d0ef511fff94"><![CDATA[668.5,-189]]></p:property><p:property name="endPin" p:connectedShapeId="9a73c52f92194c149a376738d0635215" p:connectedOutletId="top-center" p:viax="480.5" p:viay="-103"><![CDATA[480.5,-93]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="e659d20920644fae91e4a98609f3862c" d="M 663 -183 L 668.5 -189 L 674 -184 M 668.5 -189 C 671 -129 481 -153 480.5 -93 M 486 -99 L 480.5 -93 L 475 -99"/>
-            </defs>
-            <use xlink:href="#e659d20920644fae91e4a98609f3862c" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#e659d20920644fae91e4a98609f3862c" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="3567e6cf68604bd5965f31b38c663bc3" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="372be46972ac43c9bfc9cea07d8ca712" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#e659d20920644fae91e4a98609f3862c" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="9295e5c165404078943b3ae9215ed1eb" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="2ad938811e9443648472f9f7e4de0e26" transform="matrix(1,0,0,1,130,175)"><p:metadata><p:property name="startPin" p:connectedShapeId="76b3048bbe784488b1f9e57e3d8fa032" p:connectedOutletId="top-center" p:viax="198.5" p:viay="178"><![CDATA[198.5,188]]></p:property><p:property name="endPin" p:connectedShapeId="3afd210609944702bdaf62a3c2c485fa" p:connectedOutletId="bottom-center" p:viax="303.5" p:viay="6"><![CDATA[303.5,-4]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="1d35e36caabc4a6688b339b2804cbd89" d="M 204 183 L 198.5 188 L 193 182 M 198.5 188 C 201 128 304 56 303.5 -4 M 298 2 L 303.5 -4 L 309 2"/>
-            </defs>
-            <use xlink:href="#1d35e36caabc4a6688b339b2804cbd89" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#1d35e36caabc4a6688b339b2804cbd89" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="4608aaf19cfc42ba878e49f97e7efce2" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="79d3ddfadbf548be90d4cad52b8df904" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#1d35e36caabc4a6688b339b2804cbd89" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="de2536807a68424f971ccc358cb28350" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:RoundedRect" id="b506e7aef8bd4835988484d1b1d64f96" transform="matrix(1,0,0,1,68,201)"><p:metadata><p:property name="box"><![CDATA[179,63]]></p:property><p:property name="withBlur"><![CDATA[false]]></p:property><p:property name="radius"><![CDATA[0,0]]></p:property><p:property name="textPadding"><![CDATA[0,7.875]]></p:property><p:property name="fillColor"><![CDATA[#4388CCFF]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[Décor]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-
-            <defs>
-                <rect width="177" height="61" rx="0" ry="0" x="0" y="0" style="stroke-width: 2; fill: rgb(67, 136, 204); fill-opacity: 1; stroke: rgb(27, 50, 128); stroke-opacity: 1;" p:name="rrRect" id="f8942f18f16144af9426cd8be7004fc5" transform="translate(1,1)"/>
-                <filter height="1.2558399" y="-0.12792" width="1.06396" x="-0.03198" p:name="shadingFilter" id="acbdb1323dea4991b2cfc3fb665b72fb">
-                    <feGaussianBlur stdDeviation="1" in="SourceAlpha"/>
-                </filter>
-            </defs>
-            <use xlink:href="#f8942f18f16144af9426cd8be7004fc5" xmlns:xlink="http://www.w3.org/1999/xlink" transform="translate(2, 2)" p:filter="url(#acbdb1323dea4991b2cfc3fb665b72fb)" style="opacity: 0.5; visibility: hidden; display: none;" p:heavy="true" p:name="bgCopy" id="fffa72e2d40c4714ab627c560c44eff7"/>
-            <use xlink:href="#f8942f18f16144af9426cd8be7004fc5" xmlns:xlink="http://www.w3.org/1999/xlink"/>
-            <foreignObject x="7.875" y="24" width="163.25" height="16" p:name="text" id="b018489cdb724065982fb01f03f7775d" style="font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none; fill: rgb(0, 0, 0); fill-opacity: 1; color: rgb(0, 0, 0); opacity: 1; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml">Décor</div></foreignObject>
-        </g><g xmlns="http://www.w3.org/2000/svg" p:type="Shape" xmlns:p="http://www.evolus.vn/Namespace/Pencil" p:def="Evolus.Common:arrow" id="72fd3d170b8541f79cad14b47da4abce" transform="matrix(1,0,0,1,-131,283)"><p:metadata><p:property name="startPin" p:viay="70" p:viax="459.5" p:connectedOutletId="top-center" p:connectedShapeId="76b3048bbe784488b1f9e57e3d8fa032"><![CDATA[459.5,80]]></p:property><p:property name="endPin" p:viay="-9" p:viax="288.5" p:connectedOutletId="bottom-center" p:connectedShapeId="b506e7aef8bd4835988484d1b1d64f96"><![CDATA[288.5,-19]]></p:property><p:property name="withStartArrow"><![CDATA[true]]></p:property><p:property name="withEndArrow"><![CDATA[true]]></p:property><p:property name="mode"><![CDATA[curvy]]></p:property><p:property name="detached"><![CDATA[false]]></p:property><p:property name="strokeColor"><![CDATA[#1B3280FF]]></p:property><p:property name="strokeStyle"><![CDATA[2|]]></p:property><p:property name="textContent"><![CDATA[]]></p:property><p:property name="textFont"><![CDATA["Liberation Sans",Arial,sans-serif|normal|normal|13px|none]]></p:property><p:property name="textColor"><![CDATA[#000000FF]]></p:property><p:property name="textAlign"><![CDATA[1,1]]></p:property></p:metadata>
-            <defs>
-                <path style="stroke-linejoin: round; fill: none;" p:name="path" id="94cacc238bf943489624c995be73d689" d="M 465 75 L 459.5 80 L 454 74 M 459.5 80 C 462 20 289 41 288.5 -19 M 283 -13 L 288.5 -19 L 294 -13"/>
-            </defs>
-            <use xlink:href="#94cacc238bf943489624c995be73d689" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-width="10" stroke-opacity="0" stroke="#FF0000"/>
-            <use xlink:href="#94cacc238bf943489624c995be73d689" xmlns:xlink="http://www.w3.org/1999/xlink" p:name="outArrow1" id="5f3edcbbc8e040eabd122b08fa213581" style="stroke: rgb(27, 50, 128); stroke-opacity: 1; stroke-width: 2;"/>
-            <text p:name="text" id="ea1375b2c6984b2d9cf341fed82dd544" style="fill: rgb(0, 0, 0); fill-opacity: 1; font-family: &quot;Liberation Sans&quot;,Arial,sans-serif; font-size: 13px; font-weight: normal; font-style: normal; text-decoration: none;">
-                <textPath xlink:href="#94cacc238bf943489624c995be73d689" xmlns:xlink="http://www.w3.org/1999/xlink" startOffset="50%" text-anchor="middle" alignment-baseline="middle">
-                    <tspan dy="-4.333333333333333" p:name="textSpan" id="a2ba51d48d1042ee8b538098f890405e" dx="0"></tspan>
-                </textPath>
-            </text>
-
-        </g></Content></Page></Pages></Document>

BIN
doc/perfg_pathfinding.xls


BIN
doc/polygone creature.docx


BIN
doc/reflexion plateau.docx


BIN
doc/restruct.docx


+ 0 - 90
doc/restructuration.txt

@@ -1,90 +0,0 @@
-#DMonde:
-.creerServeur
-.rejoindre
-.quitter
-
-
-
-#partie
--edition
-.creer(nom, regles)
-.sauver
-.charger(idPartie)
-.ajoutJoueur(nomJoueur, mail = "")
-.supprimerJoueur(id)
-.majCarteMonde
-.ajouterPJ(nom, attributs)
-.supprimerPJ(id)
-
--objets
-.joueurs
-.pjs
-.regles
-.carteMonde
-
-
-#plateau
--acces:
-.creer(id, nom, chapitre, formeCases, largeur, hauteur, couleurInit)
-.fermer
-.sauver
-.charger(id)
-
--objets
-.cases
-.pions
-.pionsDecors
-.caches
-.entreesSorties
-.zonePlacement
-
-#case
--edition
-.creer(x, y, couleur)
-.majCouleur(QColor)
-.majTerrain(idTerrain)
-.majEffetSpecial(idEffet)
-.majAltitude(alt)
-.majOccupation(occupation)
-.majEstDansChampDeplacement(bool)
-.majEstCibleAttaque(bool)
-.majModeAffichage(affichage)
-
--etat
-.estVisible
-.estFranchissable(altitude=0)
-.occupation
-.estObstacleVision(zObservateur)
-.coord
-
-#Pion
--edition
-.creer(id, nom, x, y, couleur, rotation, idCreature=None)
-.supprimer
-.deplacer(x, y, z=None)
-.majEstSelectionne(bool)
-.majSurbrillance(bool)
-.majEstCibleAttaque(bool)
-.majEtat(etat)
-.majAttribut(nomAttr, nouvelleVal)
-
--etat
-.coord
-.altitude
-.creature
-.attribut(nomAttr)
-.attaques
-
-
-#Pion Decor
--edition
-.creer(id, nom, x, y, couleur, rotation, idDecor=None)
-.supprimer
-.deplacer(x, y, z=None)
-.majEtat(etat)
-
--etat
-.coord
-.altitude
-.creature
-

BIN
img/combat3.jpg


BIN
img/combat4.png


BIN
img/effFeu.jpg


BIN
img/effGlace.jpg


BIN
img/foret.jpg


BIN
img/herbe2.jpg


BIN
img/neige.png


+ 0 - 1333
interface_qt8_2/DMonde.py

@@ -1,1333 +0,0 @@
-from __future__ import unicode_literals
-# -*- coding: utf-8 -*-
-import os
-from sys import exit, argv
-from time import time, sleep
-from threading import Thread
-from socket import socket, AF_INET, SOCK_STREAM
-from subprocess import Popen, PIPE
-import logging
-import cPickle as pickle
-
-#modules importes
-from psutil import process_iter
-
-#import de QT et des interfaces
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from PyQt4 import QtOpenGL
-#from PyQt4 import QtCore, QtGui
-from ecran_connexion import Ui_ecranConnexion
-from ecran_principal import Ui_principal
-from ecran_chatPrive import Ui_chatPrive
-from visionneuse import Ui_visionneuse
-
-#modules persos
-from serveur import Serveur, ServeurVoc
-from lancer import jet
-from clientvoc import ClientVoc
-
-#fonctions potentiellement utiles:
-  #print(psutil.connections())
-  #print(psutil.net_io_counters(pernic=True))
-
-#gestion des erreurs et log
-logging.basicConfig(level=logging.DEBUG)
-logProg = logging.getLogger(__name__)
-handlerProg = logging.FileHandler('prog.log')
-handlerProg.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s- %(message)s'))  #'%(name)s' nom du thread
-logProg.addHandler(handlerProg)
-logProg.debug("    ----------------------    \n")
-
-
-
-def ipValide(addr):
-    """controle la validite d'une adresse ip"""
-    #if addr == "localhost":
-    #    retour = addr
-    #else:    
-    #   try:
-    #      socket.inet_aton(addr)
-    #      retour = True
-       #except socket.error:
-    #   except:   
-    #      retour = False
-    retour = True
-    return retour  
-
-
-class EcranConnexion(QGroupBox):
-    """fenetre de connexion a l'application et module d'envoi/reception"""
-    def __init__(self, parent=None):
-        """initialisation de la connexion et creation de la fenetre"""
-        super (EcranConnexion, self).__init__(parent)        
-        self.client_connecte = False
-        self.serveur_connecte = False
-        self.idServeur = ""
-        self.idClient = "00"
-        self.ip = ""
-        self.pseudo = ""
-        self.autresCo = {}
-
-        #liste des chat prives ouverts avec les autres clients
-        self.chatPrive = {}
-        
-        #echanges fichiers
-        self.eFichier = {"id": "00", "chemin": "", "fichier": None, "dest": "", "envoi" : False, "annule" : False, "invisible": False}
-                           #fichier en cours d'envoi : id fichier, chemin du fichier, fichier (objet), dest, envoi autorise, envoi annule
-        self.destFichier = {}   #liste des clients dont on attend confirmation pour l'envoi de fichier
-        self.rFichier = {} #liste des fichiers recus ou en cours de reception
-                           #(id fichier: dictionnaire des infos du fichier [nom, taille (en o), recu (en o), ligne du tableau d'affichage])
-        self.repReceptionFichiers = os.getcwd()+"\\FichiersRecus\\"
-        
-        #chat voc
-        self.ipServeurVoc = ""
-        self.port = 6660
-
-        #recup des param et affichage:
-        try:
-            logProg.info(self.recupParamCo())
-        except:
-            logProg.info("pas de parametres a recuperer")
-        self.createWidgets()
-
-    def createWidgets(self):
-        """creation de l'interface de connexion"""
-        self.ui = Ui_ecranConnexion()
-        self.ui.setupUi(self)
-        if len(self.ip) > 0:
-            self.ui.in_ip.setText(QString.fromUtf8(self.ip))
-        if self.port > 0:
-            self.ui.in_port.setText(QString.fromUtf8(str(self.port)))
-        if len(self.pseudo) > 0:
-            self.ui.in_pseudo.setText(QString.fromUtf8(self.pseudo))
-            
-        self.connect(self.ui.fermer, SIGNAL("clicked()"), self.fermer)
-        self.connect(self.ui.creerServeur, SIGNAL("clicked()"), self.creerServeur)
-        self.connect(self.ui.seConnecter, SIGNAL("clicked()"), self.seConnecter)
-
-    def msg(self, txt):
-        """affichage d'un message informatif sous forme de label"""
-        self.ui.txt_msg.setText(QString.fromUtf8(txt))
-        QApplication.processEvents()
-
-    def creerServeur(self):
-        """instancie un serveur local"""
-        self.pseudo = self.ui.in_pseudo.text()
-        self.port = self.ui.in_port.text()        
-        if len(self.pseudo) == 0 or len(self.port) == 0:
-            self.msg("Parametres incorrects")
-        else:    
-            self.ui.in_ip.setText(QString.fromUtf8("localhost"))
-            self.s = Serveur(int(self.ui.in_port.text()))
-            self.serveur_connecte, txt = self.s.creer()
-            self.msg(txt)
-            if self.serveur_connecte:
-               self.seConnecter()
-
-    def seConnecter(self):
-        """se connecte au serveur correspondant a l'ip et au port saisis"""
-        self.pseudo = self.ui.in_pseudo.text()
-        self.port = self.ui.in_port.text()
-        self.ip = self.ui.in_ip.text()
-        essais = 0
-        if len(self.pseudo) == 0 or not ipValide(self.ip) or len(self.port) == 0:
-            self.msg("Parametres incorrects")
-        else:    
-            self.msg("En attente du serveur...")    
-            while self.client_connecte == False:
-            #en attente de la connexion    
-                try:
-                   self.cnn = socket(AF_INET, SOCK_STREAM)
-                   self.cnn.connect((self.ip, int(self.port)))
-                   self.client_connecte = True
-                   txt = "Connexion etablie avec le serveur sur le port {}\n".format(self.port)
-                   logProg.info(txt)
-                except KeyboardInterrupt:
-                   break
-                except:
-                   essais += 1
-                   if essais > 3:
-                       txt = "Delai depasse"
-                       self.msg(txt)
-                       logProg.warning(txt)
-                       break
-                   txt = "Connexion : essai {}".format(essais) 
-                   self.msg(txt)
-                   logProg.info(txt)
-
-        if self.client_connecte:
-            #demarre le fil de reception
-            Thread(None, self.filReception, None, (), {}).start()
-            #previent le serveur et envoie le pseudo
-            self.envoi("ci", "sa", self.pseudo)
-            self.msg(txt)
-            sleep(0.01)
-            self.close()
-        else:
-            txt = "Erreur: impossible de se connecter"
-            self.msg(txt)
-            logProg.error(txt)
-    
-    def filReception(self):
-        """thread de reception des donnees du serveur, reste actif tant que l'application est active"""
-        while self.client_connecte:
-           recu = self.cnn.recv(1024)
-           if len(recu) > 0:
-               self.traitement(recu)
-        
-    def traitement(self, msg):
-        """determine le traitement a apporter a un message recu, selon sa nature"""
-        if len(msg) >= 6:        
-            emet = msg[2:4]
-            dest = msg[4:6]
-            categorie = msg[:1]
-            nature = msg[:2]
-            try:
-               contenu = msg[6:]
-            except:
-               contenu = "" 
-
-            if nature != "fd" and nature != "ff":
-                #on decode le message, sauf s'il contient des donnees binaires issues d'un fichier
-                contenu = contenu.decode('utf-8')
-            
-            if nature == "ci":
-                #recoit l'identifiant du client fourni par le serveur
-                self.idClient = dest
-                logProg.info("mon id est: {}\n".format(self.idClient))
-                
-            elif nature == "cc":
-                #un autre client se connecte
-                if contenu[0:2] != self.idClient:
-                    self.autresCo[str(contenu[0:2])] = str(contenu[2:])
-                    #on lui envoie notre id+x+pseudo (x=c si on est client simple, s si on est serveur)
-                    sleep(0.02)
-                    if self.serveur_connecte:
-                        code = "s"
-                    else:
-                        code = "c"
-                    self.envoi("cp", contenu[0:2], "{}{}{}".format(self.idClient, code, self.pseudo))
-                    logProg.info("{} s'est connecte ({})".format(contenu[2:], contenu[0:2]))
-                    self.recuInfo("cc", "{} s'est connecte ({})".format(contenu[2:], contenu[0:2]))
-                    self.emit(SIGNAL("majAffichageLstClient()"))
-
-            elif nature == "cp":
-                #ce client est deja present
-                idClient = str(contenu[0:2])
-                self.autresCo[idClient] = str(contenu[3:])
-                if str(contenu[2:3]) == "s":
-                    self.idServeur = idClient
-                sleep(0.001)
-                logProg.info("{} est deja present [{}]".format(str(contenu[3:]), idClient))
-                self.emit(SIGNAL("majAffichageLstClient()"))
-
-            elif nature == "cd":
-                #un client se deconnecte
-                if contenu != self.idClient and len(contenu) == 2:
-                    logProg.info("{} s'est deconnecte ({})".format(self.autresCo[contenu], contenu))
-                    self.recuInfo("cd", "{} s'est deconnecte ({})".format(self.autresCo[contenu], contenu))
-                    if contenu in self.chatPrive:
-                         self.chatPrive[contenu].close()
-                         del self.chatPrive[contenu]
-
-                    del self.autresCo[contenu]
-                    sleep(0.001)
-                    self.emit(SIGNAL("majAffichageLstClient()"))
-                    
-            elif categorie == "m":
-                if nature == "m ":
-                    #afficher dans le chat publique
-                    logProg.info("chat: {} -> {}\n".format(emet, contenu))
-                    self.recuMsg(emet, contenu)
-                    
-                elif nature == "mp":
-                    #message pour le chat prive
-                    self.emit(SIGNAL("chatPrive(QString, QString,QString)"), QString.fromUtf8(emet), QString.fromUtf8(contenu), QString.fromUtf8(""))
-
-                elif nature == "md":
-                    #jet de des pour le chat prive
-                    self.emit(SIGNAL("chatPrive(QString, QString,QString)"), QString.fromUtf8(emet), QString.fromUtf8(contenu), QString.fromUtf8("red"))
-   
-            elif categorie == "i":
-                #afficher dans la fenetre évènement
-                self.recuInfo(nature, contenu)
-                if nature == "id":
-                    #jet de dés: afficher en rouge
-                    logProg.info("jet de dé: {} -> {}\n".format(emet, contenu))
-                elif nature == "ic":
-                    #nouveau client connecte: afficher en bleu
-                    logProg.info("info connexion: {} -> {}\n".format(emet, contenu))
-                    
-            elif categorie == "f":
-                #envoi ou reception de fichier
-                if nature == "f0":
-                    #le serveur nous renvoie l'identifiant du fichier que l'on veut envoyer
-                    if self.eFichier["id"] == "00":
-                       self.eFichier["id"] = contenu
-                    else:
-                       logProg.warning("Un fichier est deja en cours d'envoi\n")
-                       
-                elif nature == "fp":
-                    #un clients est pret a recevoir le fichier
-                    self.pretEnvoiFichier(emet)
-
-                elif nature == "fi":
-                    #quelqu'un nous envoie un fichier
-                    try:
-                       if len(contenu)>2:
-                          #les 2 premiers car sont l'identifiant, puis le nom/taille du fichier (taille.nom)
-                          try:
-                             taille = int(contenu[2:].split(".",1)[0]) #on coupe seulement suivant le premier point 
-                             nom_recu = contenu[2:].split(".",1)[1]
-                          except:
-                             logProg.error("impossible de lire la taille du nouveau fichier: {}".format(contenu[2:]))
-                             taille = 0
-                             nom_recu = contenu[2:]
-                          
-                          #on determine le nom qu'aura le fichier recu (au cas ou un fichier portant ce nom existe deja)   
-                          essai = self.nouveauFichier(contenu[0:2], nom_recu, taille)
-                          logProg.info("Creation d'un nouveau fichier: {}".format(essai))
-                          if len(essai) > 0:
-                              if dest == self.idClient:
-                                  #si le fichier n'est destine qu'a nous, on affiche aussi le msg dans la fenetre de chat prive
-                                  txt = "{} vous envoie {} ({} ko)".format(emet, nom_recu, int(taille/1000))
-                                  self.emit(SIGNAL("chatPrive(QString, QString, QString)"), QString.fromUtf8(emet), QString.fromUtf8(txt), QString.fromUtf8("blue"))
-                              self.recuInfo(nature, "Fichier {} en cours de reception ({} ko)".format(nom_recu, int(taille/1000)))
-                              #on envoie confirmation de la reception:
-                              sleep(0.001)
-                              self.envoi("fp", emet, contenu[0:2])
-                              self.emit(SIGNAL("majAffichageRecFichier(QString)"), QString.fromUtf8(contenu[0:2]))
-                          else:
-                              self.recuInfo(nature, "Impossible de créer le fichier à recevoir")
-                              logProg.error("Impossible de créer le fichier à recevoir")
-                       else:
-                          logProg.error("erreur reception fichier: id ou nom du fichier incorrect\n") 
-                    except:
-                        #erreur de reception
-                        logProg.error("erreur de reception des donnees du fichier\n")
-                        self.envoi("fe", emet, contenu[0:2])
-                        
-                elif nature == "fd":
-                    #on recoit les donnees a ecrire dans le fichier
-                    try:
-                       if len(contenu) > 2:
-                           if not self.rFichier[contenu[0:2]]["annule"]:
-                              self.rFichier[contenu[0:2]]["fichier"].write(contenu[2:])
-                              self.rFichier[contenu[0:2]]["recu"] += len(contenu[2:])
-                              try:
-                                 taux = int(100*self.rFichier[contenu[0:2]]["recu"] / self.rFichier[contenu[0:2]]["taille"])
-                              except:
-                                 taux = "." 
-                              self.emit(SIGNAL("majAffichageRecFichier(QString)"), QString.fromUtf8(contenu[0:2]))
-                        
-                              #le client renvoie la longueur de la donnee recue a l'emetteur pour confirmation
-                              sleep(0.001)
-                              self.envoi("fp", emet, contenu[0:2])
-                       elif len(contenu) == 2:
-                           #l'emetteur redemande confirmation, on lui envoie
-                           if not self.rFichier[contenu[0:2]]["annule"]:
-                              self.envoi("fp", emet, contenu[0:2])
-                       else:
-                           #erreur de reception, on annule la reception et on le signale
-                           logProg.error("erreur de reception des donnees du fichier\n")
-                           self.rFichier[contenu[0:2]]["annule"] = True
-                           self.envoi("fe", emet, contenu[0:2])
-                    except:
-                        #erreur de reception, on annule la reception et on le signale
-                        logProg.error("erreur de reception des donnees du fichier\n")
-                        self.rFichier[contenu[0:2]]["annule"] = True
-                        self.envoi("fe", emet, contenu[0:2])
-                        
-                        
-                elif nature == "ff":
-                    #fin de reception du fichier
-                    try:
-                       self.rFichier[contenu[0:2]]["fichier"].write(contenu[2:])
-                       sleep(0.001)
-                       self.envoi("fp", emet, contenu[0:2])                    
-                       sleep(0.01)
-                       self.rFichier[contenu[0:2]]["fichier"].close()
-                       self.rFichier[contenu[0:2]]["termine"] = True
-                    except:
-                        #erreur de reception, on annule la reception et on le signale
-                        logProg.error("erreur de reception des donnees du fichier\n")
-                        self.rFichier[contenu[0:2]]["annule"] = True
-                        self.envoi("fe", emet, contenu[0:2])
-                        
-                    if self.rFichier[contenu[0:2]]["termine"]:    
-                        self.emit(SIGNAL("majAffichageRecFichier(QString)"), QString.fromUtf8(contenu[0:2]))
-                        self.emit(SIGNAL("imageRecue(QString)"), QString.fromUtf8(contenu[0:2]))
-                        self.recuInfo("ff", "Fichier {} recu\n".format(self.rFichier[contenu[0:2]]["nomOriginal"]))
-                        if dest == self.idClient:
-                             #si le fichier n'est destine qu'a nous, on affiche aussi le msg dans la fenetre de chat prive
-                             txt = "Fichier {} bien recu".format(self.rFichier[contenu[0:2]]["nomOriginal"])
-                             self.emit(SIGNAL("chatPrive(QString, QString, QString)"), QString.fromUtf8(emet), QString.fromUtf8(txt), QString.fromUtf8("blue"))
-                        logProg.info("Fichier recu")
-                    
-                elif nature == "fa":
-                    #envoi annule
-                    logProg.info("Annulation de la reception du fichier")
-                    if self.rFichier[contenu[0:2]]:
-                       self.rFichier[contenu[0:2]]["annule"] = True 
-                       self.recuInfo("ff", "Reception {} annule \n".format(self.rFichier[contenu[0:2]]["nom"]))
-                       if dest == self.idClient:
-                           #si le fichier n'est destine qu'a nous, on affiche aussi le msg dans la fenetre de chat prive
-                           txt = "Transfert du fichier {} annule".format(self.rFichier[contenu[0:2]]["nomOriginal"])
-                           self.emit(SIGNAL("chatPrive(QString, QString, QString)"), QString.fromUtf8(emet), QString.fromUtf8(txt), QString.fromUtf8("blue")) 
-                       self.emit(SIGNAL("majAffichageRecFichier(QString)"), QString.fromUtf8(contenu[0:2]))
-                       sleep(0.01)
-                       self.rFichier[contenu[0:2]]["fichier"].close()                                 
-                       #on supprime le fichier incomplet:
-                       essais = 0
-                       while essais < 100:
-                           try:
-                              os.remove(self.rFichier[contenu[0:2]]["fichier"].name)
-                              break
-                           except:
-                              essais += 1
-                       if essais ==  100:
-                           logProg.error("Possible erreur de suppression du fichier temporaire")
-                       del self.rFichier[contenu[0:2]]
-                       
-                elif nature == "fe":
-                    #le destinataire du fichier signale une erreur de reception
-                    self.recuInfo("fe", "{}: erreur de reception du fichier, l'envoi est annule \n".format(emet))
-                    self.annuleEnvoiFichier()
-
-                    
-            elif categorie == "s":
-                #infos sur le fonctionnement du serveur principal
-                if nature == "sd":
-                    #le serveur a ete ferme
-                    self.serveurDeco()
-                    
-            elif categorie == "v":
-                #infos liees au chat vocal
-                if nature == "vs":
-                    #un serveur vocal a ete cree
-                    self.recuInfo("vs", "{} a cree un serveur vocal ({})".format(self.autresCo[emet], contenu))
-                    self.ipServeurVoc = contenu
-                    
-                if nature == "vi":
-                    #un client rejoint le chat vocal
-                    self.recuInfo("vi", "{} a rejoint le chat vocal".format(self.autresCo[emet]))
-
-                if nature == "vq":
-                    #un client quitte le chat vocal
-                    self.recuInfo("vq", "{} a quitte le chat vocal".format(self.autresCo[emet]))
-
-                if nature == "vf":
-                    #fermeture du serveur vocal
-                    self.recuInfo("vf", "{} a ferme le serveur vocal".format(self.autresCo[emet]))
-                    
-            elif categorie == "p":
-                if nature == "pi":
-                    #nouveau plateau créé
-                    logProg.info("nouveau plateau: {}\n".format(emet, contenu))
-        else:
-            logProg.warning("Erreur: message illisible -> {}\n".format(msg))
-
-
-    def recuInfo(self, nature, contenu):
-        """signale une nouvelle information"""
-        self.emit(SIGNAL("nouvelleInfo(QString, QString)"), QString.fromUtf8(nature), QString.fromUtf8(contenu))
-
-    def recuMsg(self, emetteur, contenu):
-        """signale un nouveau message texte pour le chat ecrit"""
-        self.emit(SIGNAL("msgChat(QString, QString)"), QString.fromUtf8(emetteur), QString.fromUtf8(contenu))
-        
-    def envoi(self, nature, dest, msg, idFichier = ""):
-        """envoie un message au serveur TCP
-           - longueur du message (3 car)
-           - nature du message (2 car)
-           - exp: id de l'expediteur (2 car)
-           - dest: id du destinataire (2 car)
-           - msg: contenu du message  (999 car max)
-           - un identifiant pour le fichier le cas echeant"""
-        
-        exp = self.idClient
-        if self.client_connecte:
-            try:
-               if len(msg) <= 999:
-                  if len(idFichier) == 0:
-                     msg = unicode(msg)   
-                     lg = "%003.f"%len(msg.encode('utf-8')) #la longueur apres encodage peut changer
-                     txt = "{}{}{}{}{}".format(lg, nature, exp, dest, msg)
-                     txt = txt.encode('utf-8')
-                  else:
-                     lg = "%003.f"%(len(msg)+2)
-                     txt = "{}{}{}{}{}".format(lg, nature, exp, dest, idFichier)
-                     txt = txt.encode('utf-8') + msg
-                  
-                  retour = len(txt)
-                  self.cnn.sendall(txt)
-   
-               else:
-                  self.recuInfo("  ","999 caracteres au max.")
-                  retour = 0
-                  
-            except:
-                retour = 0
-                logProg.warning("Envoi impossible")
-        else:
-            retour = ""
-            logProg.warning("Le client n'est pas connecte au serveur")
-            self.recuInfo("  ","Vous n'etes pas connecte a un serveur")
-     
-        return retour
-
-    def envoiFichier(self, chemin, dest = "ac"):
-        """intialise l'envoi d'un fichier"""
-        if self.eFichier["id"] == "00":
-           # on verifie si le fichier existe:
-           fichier = None
-           
-           try:
-               fichier = open(chemin, "rb")
-           except:
-               logProg.error("Le fichier '{}' est introuvable.".format(fichier))
-
-           if not os.path.getsize(chemin) > 0:
-               logProg.error("Envoi impossible - fichier vide")
-               fichier.close()
-               fichier = None
-              
-           if fichier:
-               #on demande un identifiant au serveur
-               self.eFichier["fichier"] = fichier
-               self.eFichier["chemin"] = chemin
-               self.eFichier["dest"] = dest
-               self.eFichier["annule"] = False
-               self.emit(SIGNAL("initEnvFichier(QString, QString)"), QString.fromUtf8(os.path.basename(chemin)), QString.fromUtf8("0"))
-               logProg.debug(self.eFichier)
-               if dest == "ac":
-                   for idC in self.autresCo:
-                       self.destFichier[idC] = False
-               else:
-                   self.destFichier[dest] = False
-               #on demande un identifiant au serveur    
-               self.envoi("f0","sa","")
-               Thread(None, self.envoiFichier_fil, None, (), {}).start()               
-                 
-        else:
-           self.recuInfo("fi", "Impossible d'envoyer le fichier, un fichier est peut-etre deja en cours d'envoi")
-          
-
-    def envoiFichier_fil(self):
-        """le fichier est pret a etre envoye, on attend confirmation des destinataires"""
-        #on attend que l'id du fichier soit mis a jour
-        essais = 0
-        while self.eFichier["id"]=="00" and essais < 3000:
-           sleep(0.001)
-           essais += 1
-           
-        if len(self.eFichier["id"]) == 2 and self.eFichier["id"] != "00": 
-           idFichier = self.eFichier["id"]
-           dest = self.eFichier["dest"]
-           nomFichier = os.path.basename(self.eFichier["chemin"])
-           taille = os.path.getsize(self.eFichier["chemin"])
-           logProg.debug("{} a pour id {}\n".format(nomFichier, idFichier))
-
-           #on previent les destinataires, et on leur transmet l'identifiant et taille.nom du fichier (taille au format numerique, en octets)
-           logProg.info("En attente des destinataires...")
-           self.recuInfo("fi", "{} - En attente des destinataires...".format(nomFichier))
-           self.envoi("fi", dest, "{}{}.{}".format(idFichier, taille, nomFichier))
-
-           essais = 0
-           while not self.eFichier["envoi"] and not self.eFichier["annule"]:
-              sleep(0.001)
-              essais += 1
-              if essais >= 3000:
-                  logProg.error("Pas de reponse des destinataires - envoi avorte")
-                  self.eFichier["annule"] = True
-
-              
-           if not self.eFichier["annule"]:
-              #on a recu confirmation de la part des destinataires 
-              envoye = 0
-              essais = 0
-            
-              #on lit un premier paquet de donnees
-              data = self.eFichier["fichier"].read(512)
-              
-              while len(data) == 512 and not self.eFichier["annule"]:           
-                  #on reinitialise le controle de reception pour le prochain paquet:
-                  self.eFichier["envoi"] = False
-                  if dest == "ac":
-                     for idC in self.autresCo:
-                         self.destFichier[idC] = False
-                  else:
-                     self.destFichier[dest] = False
-
-                  #on envoie le paquet precedent, que les destinataires ont confirme pouvoir recevoir
-                  self.envoi("fd", dest, data, idFichier)
-                  envoye += len(data)
-                  taux = str((100*envoye)/taille)
-                  self.emit(SIGNAL("initEnvFichier(QString, QString)"), QString.fromUtf8(""), QString.fromUtf8(taux))
-                  
-                  #logProg.info("{} / {}".format(int(envoye/1000), int(taille/1000))) #attention: ralentit enormement l'envoi
-
-                  #on attend que les clients confirment reception pour envoyer le prochain
-                  essais = 0
-                  while not self.eFichier["envoi"]:
-                      if self.eFichier["annule"]:
-                          break
-                      sleep(0.001)
-                      essais += 1
-                      if essais >= 500:
-                          #on renvoie un message toutes les demi-secondes pour redemander confirmation 
-                          self.envoi("fd", dest, b'', idFichier)
-                          essais = 0
-   
-                  #on lit le paquet suivant             
-                  data = self.eFichier["fichier"].read(512)
-
-              #FIN DE LA BOUCLE, on a envoye tous les paquets de 512o, il reste donc un dernier paquet a envoyer    
-
-              #pour dernier paquet on ajoute au drapeau: "%003.f"%len(paquet)   
-              #on signale que c'est le dernier paquet et on ajoute 3 caracteres pour en specifier la taille:
-                  
-              #ENVOI DU DERNIER PAQUET: 
-              if not self.eFichier["annule"]:
-                  
-                  #on reinitialise le controle de reception pour le prochain paquet:
-                  self.eFichier["envoi"] = False
-                  if dest == "ac":
-                     for idC in self.autresCo:
-                         self.destFichier[idC] = False
-                  else:
-                     self.destFichier[dest] = False
-                     
-                  #on envoie le paquet precedent, que les destinataires ont confirme pouvoir recevoir   
-                  self.envoi("ff", dest, data, idFichier)
-                  envoye += len(data)
-                  taux = str((100*envoye)/taille)
-                  self.emit(SIGNAL("initEnvFichier(QString, QString)"), QString.fromUtf8(""), QString.fromUtf8(taux))                  
-
-                  #on attend que les clients confirment reception pour envoyer le signal de fin
-                  essais = 0
-                  while not self.eFichier["envoi"]:
-                      if self.eFichier["annule"]:
-                          break
-                      sleep(0.001)
-                      essais += 1
-                      if essais >= 500:
-                          #on renvoie un message pour redemander confirmation
-                          logProg.warning("envoi fichier - on redemande confirmation")
-                          self.envoi("fd", dest, b'', idFichier)
-                          essais = 0
-                  #on signale au serveur qu'il peut liberer l'id du fichier 
-                  self.envoi("f1", "sa", "{}".format(idFichier))
-                  self.recuInfo("ff", "- {} a bien ete envoye -".format(nomFichier))
-                  logProg.info("\n- Fichier envoye -")
- 
-           else:
-              logProg.error("Erreur envoi fichier: signal serveur non-recu -> {}".format(self.eFichier["id"]))
-              
-        else:
-           logProg.error("Erreur envoi fichier: identifiant incorrect -> {}".format(idFichier))
-
-        self.eFichier["fichier"].close()
-        self.eFichier = {"id": "00", "chemin": "", "fichier": None, "dest": "", "envoi" : False, "annule": False}
-
-            
-    def pretEnvoiFichier(self, idClient):
-        """signale un destinataire comme etant pret a recevoir le fichier ou le paquet de donnees,
-           et renvoie Vrai si tous les destinataires sont prets"""
-        pretEnvoi = False
-        if self.eFichier["dest"] == "ac":
-            self.destFichier[idClient] = True
-            pretEnvoi = True
-            for idC in self.destFichier:
-                if self.destFichier[idC] == False:
-                    pretEnvoi = False
-        else:
-            if idClient == self.eFichier["dest"]:
-                pretEnvoi = True
-        #print("{} -> {}".format(idClient, pretEnvoi))        
-        self.eFichier["envoi"] = pretEnvoi
-               
-
-    def annuleEnvoiFichier(self):
-        """annule l'envoi d'un fichier"""
-        logProg.warning("Annulation de l'envoi")
-        self.envoi("fa", self.eFichier["dest"], "{}".format(self.eFichier["id"]))
-        self.eFichier["annule"] = True
-        essais = 0
-        while not self.eFichier["id"] == "00":
-            sleep(0.01)
-            essais += 1
-            if essais > 500:
-                logProg.error("Erreur: impossible d'annuler l'envoi")
-                
-        if self.eFichier["id"] == "00":
-           logProg.info("-> Envoi annulé")
-           self.recuInfo("fa", "- Envoi du fichier annule -")
-           self.emit(SIGNAL("initEnvFichier(QString, QString)"), QString.fromUtf8(""), QString.fromUtf8("x"))
-
-
-    def nouveauFichier(self, idFichier, nomFichier, taille):
-        """cree le fichier a recevoir - le renomme si un fichier portant ce nom existe deja - retourne le chemin complet"""
-        k = 1
-        tmp = nomFichier
-        retour = ""
-        try:
-           while os.path.isfile(self.repReceptionFichiers+tmp):     
-              k += 1
-              tmp = nomFichier.split(".")[0]+str(k)+"."+nomFichier.split(".")[1]
-              if k == 100:
-                  tmp = ""
-                  break
-           if len(tmp) > 0:
-              fichier = open((self.repReceptionFichiers + tmp), "wb") 
-              self.rFichier[idFichier] = {"fichier": fichier, "nom": tmp, "nomOriginal": nomFichier, "taille": taille, "recu": 0, "ligneAffichage": None, "termine": False, "annule": False}
-              retour = tmp
-        except:
-           logProg.error("Impossible de creer le fichier")
-        return retour
-
-    def serveurDeco(self):
-        """le serveur a ferme - on affiche a nouveau l'ecran de connexion"""
-        #on annule les envois de fichier en cours
-        if self.eFichier["fichier"] != None:
-            self.eFichier["annule"] = True
-            self.emit(SIGNAL("initEnvFichier(QString, QString)"), QString.fromUtf8(""), QString.fromUtf8("x"))
-        #on annule les receptions de fichiers en cours
-        for idFichier in self.rFichier:
-            if not self.rFichier[idFichier]["termine"]:
-               logProg.warning("{} - reception annulee".format(self.rFichier[idFichier]["nom"]))
-               self.rFichier[idFichier]["fichier"].close()
-               os.remove(self.rFichier[idFichier]["fichier"].name)
-               self.emit(SIGNAL("majAffichageRecFichier(QString)"), QString.fromUtf8(idFichier))
-        self.rFichier = {}  
-        
-        self.recuInfo("sd", "(!) Le serveur a mis la clef sous la porte (!)")
-        self.idServeur = ""
-        logProg.warning("Serveur deconnecte")
-        self.cnn.close()
-        self.client_connecte = False
-        self.serveur_lance = False
-        sleep(0.01)
-        self.emit(SIGNAL("majAffichage()"))
-        #on affiche l'ecran de connexion
-        self.show()
-        self.raise_()
-        self.activateWindow()
-        self.msg("Le serveur a ete deconnecte")
-
-    def recupParamCo(self):
-        """recupere les derniers parametres de connexion enregistres s'il existent"""
-        try:
-            with open("parametresCo", 'rb') as input:
-                dico = pickle.load(input)
-                self.pseudo = dico["pseudo"]
-                self.port = dico["port"]
-                self.ip = dico["ip"]
-                if os.path.isdir(dico["repReceptionFichiers"]):
-                    self.repReceptionFichiers = dico["repReceptionFichiers"] 
-            retour = dico
-            input.close()
-        except IOError:
-            retour = ("Erreur: parametresCo introuvable")
-
-        return retour        
-
-    def sauverParamCo(self):
-        """sauvegarde les parametres de connexion pour une prochaine utilisation"""
-        with open("parametresCo", 'wb') as output:
-             dico = {"pseudo": str(self.pseudo), "port" : int(self.port), "ip": str(self.ip), "repReceptionFichiers" : str(self.repReceptionFichiers)}
-             pickle.dump(dico, output, -1)
-        output.close()
-        chaine = "parametres sauvegarde."
-
-        return chaine
-
-    def fermer(self):
-        """fermeture de la connexion, et du serveur le cas echeant"""      
-        if self.client_connecte:
-           try:
-              self.envoi("cd", "sa", "") 
-           except:
-              logProg.warning("impossible de prévenir le serveur de la deco")
-           for fenetre in self.chatPrive:
-               self.chatPrive[fenetre].close()
-           self.chatPrive = {}
-           self.client_connecte = False
-           self.cnn.close()
-           if self.eFichier["fichier"] != None:
-               self.eFichier["annule"] = True
-           sleep(0.001)
-           logging.info(self.sauverParamCo())
-     
-        if self.serveur_connecte:
-           self.s.stop()
-           self.serveur_connecte = False   
-           sleep(0.001)
-           
-        self.close()
-        
-    def closeEvent(self, event):
-        """sur fermeture de la fenetre"""
-        if self.client_connecte:
-            self.emit(SIGNAL("majAffichage()"))
-        else:    
-            self.fermer()
- 
-
-
-class AfficherImage(QGroupBox):
-    """fenetre pop-up permettant l'affichage d'une image"""
-    def __init__(self, chemin, parent=None):
-        super (AfficherImage, self).__init__(parent)
-        self.ui = Ui_visionneuse()
-        self.ui.setupUi(self)
-        self.setWindowTitle(QString.fromUtf8(chemin))
-        myPixmap = QPixmap(chemin)
-        myScaledPixmap = myPixmap.scaled(self.ui.label.size(), Qt.KeepAspectRatio)
-        self.ui.label.setPixmap(myScaledPixmap)
-        self.resize(myScaledPixmap.width(),myScaledPixmap.height())
-        
-
-
-class ChatPrive(QMainWindow):
-    """interface de chat prive entre 2 joueurs"""
-    def __init__(self, connexion, interloc, parent=None):
-        """initialisation de la fenetre"""
-        super (ChatPrive, self).__init__(parent)
-        self.co = connexion
-        self.idInterloc = interloc
-        self.createWidgets()
-
-    def createWidgets(self):
-        """construction de l'interface"""
-        #construction de l'interface
-        self.ui = Ui_chatPrive()
-        self.ui.setupUi(self)
-        self.ui.lblInterlocChatPrive.setText(QString.fromUtf8("Chat prive avec {}".format(self.co.autresCo[self.idInterloc])))
-        self.connect(self.ui.inSaisieChatPrive, SIGNAL("returnPressed()"), self.envoiMsgPrive)
-        self.connect(self.ui.envoiFichierChatPrive, SIGNAL("clicked()"), self.envoyerfichierPrive) 
-        self.connect(self.ui.inDesChatPrive, SIGNAL("returnPressed()"), self.jetDesPrive)
-
-    def envoiMsgPrive(self):
-        """ajout d'une ligne au chat prive"""
-        msg = self.ui.inSaisieChatPrive.text()
-        self.afficherMsgPrive(self.co.idClient, msg)
-        self.co.envoi("mp", "{}".format(self.idInterloc), msg)
-        self.ui.inSaisieChatPrive.clear()
-        QApplication.processEvents()
-
-    def envoyerfichierPrive(self):
-        """envoi d'un fichier a l'interlocuteur actuel"""
-        if self.co.eFichier["id"] == "00":
-           fichier = QFileDialog.getOpenFileName(
-                       self, 
-                       "Selectionnez un fichier a envoyer", 
-                       "c:\\", 
-                       "")
-           if len(str(fichier)) > 0:
-              self.co.envoiFichier(str(fichier), self.idInterloc)
-        else:
-           self.co.annuleEnvoiFichier()
-    
-    def jetDesPrive(self):
-        """ajout d'une ligne de jet de des au chat prive"""
-        expr = str(self.ui.inDesChatPrive.text())
-        self.ui.inDesChatPrive.clear()
-        res, detail = jet(expr)
-        if res > 0:
-            txt = "{}   ({})  [{}]".format(res, detail, expr)
-            self.afficherMsgPrive(self.co.idClient, txt, "red")
-            self.co.envoi("md", self.idInterloc, txt)
-        else:
-            self.afficherMsgPrive(self.co.idClient, "mmmhh, pas bon le jet", "red")
-        return res
-
-    def afficherMsgPrive(self, emetteur, msg, couleur="black"):
-        """ajoute un message au chat prive"""
-        emetteur = str(emetteur)
-        if len(couleur)>0 and couleur != "black":
-            if emetteur != self.co.idClient:
-                pseudo = self.co.autresCo["{}".format(emetteur)]
-            else:
-                pseudo = self.co.pseudo
-            txt = "<font color=\"{}\">{} - {}</font>".format(couleur, pseudo, msg)
-        else:    
-            if emetteur == self.co.idClient:
-                txt = "<font color=\"blue\">{} : </font> {}".format(self.co.pseudo, msg)
-            elif emetteur in self.co.autresCo:
-                pseudo = self.co.autresCo["{}".format(emetteur)]
-                txt = "<font color=\"green\">{} : </font> {}".format(pseudo, msg)
-            else:
-                txt = str(msg)
-
-        txt = QString.fromUtf8(txt)
-        item = QListWidgetItem(self.ui.lstChatPrive)
-        self.ui.lstChatPrive.addItem(item)
-        label = QLabel()
-        label.setWordWrap(True)
-        label.setText(txt)
-        item.setSizeHint(QSize(1, label.heightForWidth (self.ui.lstChatPrive.width()) + 5))
-        self.ui.lstChatPrive.setItemWidget(item, label)
-        self.ui.lstChatPrive.scrollToItem(item)
-        self.show()
-        self.raise_()
-        self.activateWindow()
-        QApplication.processEvents()
-
-class EcranPrincipal(QMainWindow):
-    """interface comprenant: chat ecrit, fenetre d'infos, lancer de des, echange de fichiers, lancement du chat vocal"""
-    def __init__(self, connexion, parent=None):
-        """initialisation de la fenetre"""
-        super (EcranPrincipal, self).__init__(parent)
-        self.co = connexion
-        self.connecte = True
-        self.estServeurVoc = False
-        self.estClientVoc = False
-        self.cases = {}
-        self.createWidgets()
-
-    def createWidgets(self):
-        """construction de l'interface"""
-        #construction de l'interface
-        self.ui = Ui_principal()
-        self.ui.setupUi(self)
-
-        #connexion des commandes
-        self.connect(self.ui.inChat, SIGNAL("returnPressed()"), self.envoiMsg)
-        self.connect(self.ui.d20, SIGNAL("clicked()"), self.d20)
-        self.connect(self.ui.d100, SIGNAL("clicked()"), self.d100)
-        self.connect(self.ui.inJetDes, SIGNAL("returnPressed()"), self.autreJet)
-        self.connect(self.ui.envoiFichier, SIGNAL("clicked()"), self.envoyerfichier) 
-        self.connect(self.ui.repReceptionFichiers, SIGNAL("clicked()"), self.repReception)
-        self.connect(self.ui.listFichiers, SIGNAL("itemDoubleClicked(QTreeWidgetItem*, int)"), self.ouvrirFichier)
-        self.connect(self.ui.lstStatutJoueurs, SIGNAL("itemDoubleClicked (QListWidgetItem *)"), self.ouvrirChatPrive)
-        self.connect(self.ui.chatVoc, SIGNAL("clicked()"), self.chatVoc)
-
-        #reception des signaux self.emit(SIGNAL("majAffichage()"))
-        self.connect(self, SIGNAL("msgChat(QString, QString)"), self.ajoutChat)
-        self.connect(self.co, SIGNAL("msgChat(QString, QString)"), self.ajoutChat)
-        self.connect(self, SIGNAL("nouvelleInfo(QString, QString)"), self.ajoutInfo)
-        self.connect(self.co, SIGNAL("nouvelleInfo(QString, QString)"), self.ajoutInfo)
-        self.connect(self, SIGNAL("majAffichageRecFichier(QString)"), self.afficheReception)
-        self.connect(self.co, SIGNAL("majAffichageRecFichier(QString)"), self.afficheReception)
-        self.connect(self, SIGNAL("imageRecue(QString)"), self.imageRecue)
-        self.connect(self.co, SIGNAL("imageRecue(QString)"), self.imageRecue)
-        self.connect(self, SIGNAL("initEnvFichier(QString, QString)"), self.afficheEnvoi)
-        self.connect(self.co, SIGNAL("initEnvFichier(QString, QString)"), self.afficheEnvoi)
-        self.connect(self, SIGNAL("majAffichage()"), self.majStatut)
-        self.connect(self.co, SIGNAL("majAffichage()"), self.majStatut)
-        self.connect(self, SIGNAL("majAffichageLstClient()"), self.majStatutLstClients)
-        self.connect(self.co, SIGNAL("majAffichageLstClient()"), self.majStatutLstClients)
-        self.connect(self, SIGNAL("chatPrive(QString, QString, QString)"), self.chatPrive)
-        self.connect(self.co, SIGNAL("chatPrive(QString, QString, QString)"), self.chatPrive)
-
-        #plateau de jeu
-        self.creerPlateau(20,20)
-        self.nouveauPion()
-        
-        #mise a jour de l'affichage
-        self.majStatut()
-        self.majStatutLstClients()
-
-    """def msg(self, txt):
-        
-        self.ui.txt_msg.setText(QString.fromUtf8(txt))
-        QApplication.processEvents()"""
-
-    def ajoutChat(self, emetteur, msg):
-        """ajoute une nouvelle ligne au chat ecrit"""
-        emetteur = str(emetteur)
-        if emetteur == self.co.idClient:
-            txt = "<font color=\"blue\">{} : </font> {}".format(self.co.pseudo, msg)
-        else:
-            pseudo = self.co.autresCo["{}".format(emetteur)]
-            txt = "<font color=\"green\">{} : </font> {}".format(pseudo, msg)
-            
-        txt = QString.fromUtf8(txt)
-        item = QListWidgetItem(self.ui.listAffichage)
-        self.ui.listAffichage.addItem(item)
-        label = QLabel()
-        label.setWordWrap(True)
-        label.setText(txt)
-        item.setSizeHint(QSize(1, label.heightForWidth (self.ui.listAffichage.width()) + 5))
-        self.ui.listAffichage.setItemWidget(item, label)
-        self.ui.listAffichage.scrollToItem(item)
-        QApplication.processEvents()
-
-    def ajoutInfo(self, nature, msg):
-        """ajoute une nouvelle ligne a la liste des evenements"""
-        #couleur selon nature de l'info:
-        if nature[:1] == "c":
-            txt = "<font color=\"green\">{}</font>".format(msg)
-        elif nature == "id":
-            txt = "<font color=\"red\">{}</font>".format(msg)
-        elif nature[:1] == "f":
-            txt = "<font color=\"blue\">{}</font>".format(msg)    
-        elif nature[:1] == "v":
-            txt = "<font color=\"orange\">{}</font>".format(msg)    
-        else:
-            txt = msg
-
-        txt = QString.fromUtf8(txt)         
-        item = QListWidgetItem(self.ui.listEvenement)
-        self.ui.listEvenement.addItem(item)
-        
-        label = QLabel()
-        label.setWordWrap(True)
-        label.setText(txt)
-        item.setSizeHint(QSize(110, label.heightForWidth (self.ui.listEvenement.width()) + 6))
-        self.ui.listEvenement.setItemWidget(item, label)
-        self.ui.listEvenement.scrollToItem(item)
-        QApplication.processEvents()
-
-             
-    def envoiMsg(self):
-        """envoie un message pour le chat ecrit"""
-        msg = self.ui.inChat.text()
-        self.co.envoi("m ", "tc", msg)
-        self.ui.inChat.clear()
-        QApplication.processEvents()
-
-    def lancerD(self, expr):
-        """fonction de lancer de des"""
-        res, detail = jet(expr)
-        if res > 0:
-            txt = "{}: {}   ({})  [{}]".format(self.co.pseudo, res, detail, expr)
-            self.co.envoi("id", "tc", txt)
-        else:
-            self.ajoutInfo("id", "mmmhh, pas bon le jet")
-        return res
-             
-    def d20(self):
-        """lance un D20"""
-        self.lancerD("1d20")
-        
-    def d100(self):
-        """lance un D100"""
-        self.lancerD("1d100")
-
-    def autreJet(self):
-        """lance un jet personnalise"""
-        expr = str(self.ui.inJetDes.text())
-        retour = self.lancerD(expr)
-        self.ui.inJetDes.clear()
-
-    def envoyerfichier(self):
-        """selectionne et envoie un fichier ou annule l'envoi en cours s'il existe"""
-        if self.co.eFichier["id"] == "00":
-           fichier = QFileDialog.getOpenFileName(
-                       self, 
-                       "Selectionnez un fichier a envoyer", 
-                       "c:\\", 
-                       "")
-           if len(str(fichier)) > 0:
-              self.co.envoiFichier(str(fichier))
-        else:
-           self.co.annuleEnvoiFichier()
-           
-    def ouvrirFichier(self):
-        """ouvre un fichier depuis la liste des fichiers recus/envoyes"""
-        item = self.ui.listFichiers.currentItem()
-        eR = item.text(0)
-        taux = item.text(1)
-        nom = item.text(2)
-        if eR == "R":
-            if taux == "ok":
-                try:
-                    chemin = "{}\\{}".format(self.co.repReceptionFichiers, nom)
-                    Popen(chemin, shell=True, stdout=PIPE) #from subprocess
-                except:
-                    print("impossible d'ouvrir le fichier")
-
-
-
-
-    def repReception(self):
-        """permet de choisir son repertoire de reception des fichiers"""
-        dossier = QFileDialog.getExistingDirectory(self)
-        if len(dossier) > 0:
-            if dossier[len(dossier)-1:] != "\\":
-                dossier += "\\"
-            self.co.repReceptionFichiers = str(dossier)
-            self.majStatut()
-
-    def afficheReception(self, idFichier):
-           """ajoute/maj une ligne dans la liste des fichiers en cours de reception"""
-           idFichier = str(idFichier)
-        #try:                                              
-           if self.co.rFichier[idFichier]["ligneAffichage"] == None:
-              self.co.rFichier[idFichier]["ligneAffichage"] = QTreeWidgetItem(self.ui.listFichiers, ["R", "0", self.co.rFichier[idFichier]["nom"]])
-              self.ui.listFichiers.scrollToItem(self.co.rFichier[idFichier]["ligneAffichage"])
-           else:
-              if self.co.rFichier[idFichier]["termine"]:
-                 taux = "ok"
-              elif self.co.rFichier[idFichier]["annule"]:
-                 taux = "x"
-              else:    
-                 taux = str(int(100*self.co.rFichier[idFichier]["recu"]/self.co.rFichier[idFichier]["taille"]))
-              self.co.rFichier[idFichier]["ligneAffichage"].setText(1, taux)                                                          
-        #except:
-        #    logProg.error("erreur d'affichage de la progression: " + idFichier)
-
-    def imageRecue(self, idFichier):
-        """verifie si le fichier recu est une image, et l'ouvre le cas echeant"""
-        idFichier = str(idFichier)
-        if self.co.rFichier[idFichier]["termine"]:
-           try: 
-              typeFichier = self.co.rFichier[idFichier]["nom"].split(".")[len(self.co.rFichier[idFichier]["nom"].split("."))-1]
-           except:
-              typeFichier = "" 
-
-        if typeFichier.lower() in ["png", "jpeg", "jpg"]:
-             #si c'est une image, on l'ouvre dans une nouvelle fenetre
-             logProg.debug("ouverture d'une image : " + self.co.rFichier[idFichier]["nom"])
-             chemin = self.co.repReceptionFichiers + self.co.rFichier[idFichier]["nom"]
-             #print(chemin)
-             self.affiche = AfficherImage("{}".format(chemin))
-             self.affiche.show()
-             self.affiche.raise_()
-             QApplication.processEvents()
-
-    def afficheEnvoi(self, fichier, taux):
-        """ajoute/maj une ligne a la liste des fichiers en cours d'envoi"""
-        fichier = str(fichier)
-        taux = str(taux)
-        if len(fichier) > 0:
-            self.ligneEFichier = QTreeWidgetItem(self.ui.listFichiers, ["E", taux, fichier])
-            self.ui.listFichiers.scrollToItem(self.ligneEFichier)
-        elif len(taux) > 0:
-            if taux != self.ligneEFichier.text(1): 
-                self.ligneEFichier.setText(1, taux)
-            
-    def majStatut(self):
-        """met a jour l'onglet de statut de connexion"""
-        self.ui.txtStatutCoPseudo.setText(QString.fromUtf8("Pseudo : {}".format(self.co.pseudo)))
-        if self.co.serveur_connecte:
-            self.ui.txtStatutCoServeur.setText(QString.fromUtf8("Serveur : {} [{}]".format(self.co.pseudo, self.co.ip)))
-        elif len(self.co.idServeur) > 0 and self.co.idServeur in self.co.autresCo:
-            self.ui.txtStatutCoServeur.setText(QString.fromUtf8("Serveur : {} [{}]".format(self.co.autresCo[self.co.idServeur], self.co.ip)))
-        else:
-            self.ui.txtStatutCoServeur.setText(QString.fromUtf8("Serveur : Pas de serveur"))
-            
-        if self.estServeurVoc:
-            self.ui.txtStatutCoServeur.setText(QString.fromUtf8("Serveur vocal : {} [{}]".format(self.co.pseudo, self.co.ip)))
-        QApplication.processEvents()
-        
-    def majStatutLstClients(self):
-        """met a jour la liste des joueurs"""
-        self.ui.lstStatutJoueurs.clear()
-        txt = "{} - {}".format(self.co.idClient, self.co.pseudo)
-        self.ui.lstStatutJoueurs.addItem(QString.fromUtf8(txt))
-        for idClient in self.co.autresCo:
-            txt = "{} - {}".format(idClient, self.co.autresCo[idClient])
-            self.ui.lstStatutJoueurs.addItem(QString.fromUtf8(txt))
-        self.majStatut()    
-        QApplication.processEvents()
-        
-    def ouvrirChatPrive(self):
-        """ouvre un chat prive avec le joueur sur lequel on a clique"""
-        item = self.ui.lstStatutJoueurs.currentItem()
-        idInterloc = str(item.text())[0:2]
-        if idInterloc != self.co.idClient:
-           self.chatPrive(idInterloc)
-           
-
-    def chatPrive(self, idInterloc, txt="", couleur=""):
-        """ouvre la fenetre de chat prive si elle ne l'est pas deja, puis affiche le message"""
-        idInterloc = str(idInterloc)
-        if not idInterloc in self.co.chatPrive:
-           self.co.chatPrive[idInterloc] = ChatPrive(self.co, idInterloc)
-        self.co.chatPrive[idInterloc].show()
-        if len(txt)>0:
-            if len(couleur)>0:
-                self.co.chatPrive[idInterloc].afficherMsgPrive(idInterloc, txt, couleur)
-            else:
-                self.co.chatPrive[idInterloc].afficherMsgPrive(idInterloc, txt)
-                              
-    def creerServeurVoc(self):
-        """cree un serveur vocal"""
-        if not self.estServeurVoc:
-            self.sVoc = ServeurVoc(6660)
-              #on ouvre une boite de dialogue pour demander l'ip distante
-                #de celui qui veut ouvrir le serveur voc
-            ipS, ok = QInputDialog.getText(self, 'Creation du serveur vocal', 
-            'Saisissez votre adresse IP distante :')
-            if ok:
-               if ipValide(ipS):
-                  #self.co.ipServeurVoc = self.ui.ipServeurVoc.text()
-                  self.co.ipServeurVoc = ipS
-                  txt = self.sVoc.creer()
-                  self.ajoutInfo("vs", txt)
-                  if self.sVoc.serveur_lance:
-                     self.co.envoi("vs","ac","{}".format(self.co.ipServeurVoc))
-                     self.estServeurVoc = True
-                     self.majStatut()
-                  else:
-                     self.ajoutInfo("vs", "Erreur - Creation du serveur vocal annulee") 
-               else:
-                  self.ajoutInfo("vs", "Veuillez entrer une adresse ip valide")
-        else:
-            self.fermerServeurVoc()
-            
-
-    def fermerServeurVoc(self):
-        """ferme le serveur vocal"""
-        txt = self.sVoc.stop()
-        self.ajoutInfo("vs", txt)
-        if not self.sVoc.serveur_lance:
-            self.co.envoi("vf","ac","")
-            self.estServeurVoc = False
-            self.majStatut()
-        
-    def chatVoc(self):
-        """connexion au chat vocal"""
-        if not self.estClientVoc:
-             if len(self.co.ipServeurVoc) == 0:
-                if QMessageBox.question(self.parent(), "Chat Vocal", "Aucun serveur vocal ne semble avoir ete cree, /nVoulez-vous en creer un?",
-                                        QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
-                    self.creerServeurVoc()
-                    sleep(0.01)
-                    
-             if len(self.co.ipServeurVoc) > 0:
-                  self.cVoc = ClientVoc(self.co.idClient, self.co.ipServeurVoc, 6660)
-                  txt = self.cVoc.creer()
-                  if self.cVoc.connecte:
-                      self.ajoutInfo("vi", txt)
-                      self.co.envoi("vi","ac","")
-                      self.estClientVoc = True
-                      self.majStatut()
-                  
-        else:
-            self.quitterChatVoc()
-
-    def quitterChatVoc(self):
-        """deconnexion du chat vocal"""
-        if self.estClientVoc:
-            txt = self.cVoc.stop()
-            self.ajoutInfo("vq", txt)
-            self.co.envoi("vq","ac","")
-            self.estClientVoc = False
-            self.majStatut()
-        if self.sVoc.serveur_lance:
-            self.fermerServeurVoc()
-        
-
-    def creerPlateau(self, x, y):
-        """Creation du Plateau de combat"""
-        if x > 0 and y > 0 and x == int(x) and y == int(y):
-            self.plateau = QGraphicsScene(self)
-            self.cCase = 30
-            self.plateau.setSceneRect(0, 0, self.cCase*x, self.cCase*y)
-
-            pinceau = QPen()
-            pinceau.setColor(QColor(85, 85, 85, 85))
-            pinceau.setWidth(1)
-            i = 0
-            j = 0
-            for i in range(x):
-                for j in range(y):
-                    if 1 == (i % 2):
-                        j += 0.5
-                    polygon = QPolygonF()
-                    polygon << QPointF(i*self.cCase,(j+0.5)*self.cCase) << QPointF((i+0.34)*self.cCase,j*self.cCase)<< QPointF((i+1)*self.cCase,(j)*self.cCase) << QPointF((i+1.34)*self.cCase,(j+0.5)*self.cCase) << QPointF((i+1)*self.cCase,(j+1)*self.cCase) << QPointF((i+0.34)*self.cCase,(j+1)*self.cCase)
-                    self.plateau.addPolygon(polygon)
-                 
-            self.ui.vuePlateau.setScene(self.plateau)
-
-
-    def nouveauPion(self):
-        """essai de creation graphique: ajout d'un pion sur le plateau de jeu"""
-        #creation d'un pion
-        pinceau = QPen()
-        pinceau.setColor(QColor(0, 0, 0, 120))
-        pinceau.setWidth(2)
-        self.pion = QGraphicsEllipseItem(0, 0, self.cCase, self.cCase)
-        self.pion.setPen(pinceau)
-        self.pion.setFlag(QGraphicsItem.ItemIsMovable)
-        self.pion.setFlag(QGraphicsItem.ItemIsFocusable)
-        self.pion.setBrush(QColor(255, 0, 0, 150))
-
-        #ombre
-        self.shadow = QGraphicsDropShadowEffect() 
-        self.shadow.setColor(QColor(50, 50, 50, 200)) 
-        self.shadow.setXOffset(1) 
-        self.shadow.setYOffset(1) 
-        self.shadow.setBlurRadius(3) 
-        self.pion.setGraphicsEffect(self.shadow)
-        self.shadow.setEnabled(True)
-
-        self.plateau.addItem(self.pion)
-
-    def closeEvent(self, event):
-        """sur fermeture de la fenetre"""
-        if self.estClientVoc:
-            self.cVoc.stop()
-        if self.estServeurVoc:
-            self.sVoc.stop()
-        self.co.fermer()
-        sleep(0.01)
-        self.connecte = False    
-        self.close()             
-        
-if __name__ == "__main__":
-    demarrageOk = True
-    #repertoire de travail et creation des dossiers necessaires:
-    try:
-       repCourant = os.getcwd()
-    except:
-       repCourant = ""
-       
-    if not len(repCourant) > 0:
-        logProg.error("Impossible de determiner le repertoire courant")
-        demarrageOk = False
-    else:
-        try:
-            #repertoire media (musiques+images)
-            if not os.path.exists(repCourant+"\\media"):
-               os.mkdir(repCourant+"\\media")
-            #repertoire utilisateur (sauvegardes)
-            if not os.path.exists(repCourant+"\\svg"):
-               os.mkdir(repCourant+"\\svg")
-            #repertoire reception des fichiers persos
-            if not os.path.exists(repCourant+"\\FichiersRecus"):
-               os.mkdir(repCourant+"\\FichiersRecus")
-        except:
-            logProg.error("Erreur de creation des repertoires de l'application")
-            demarrageOk = False         
-                 
-    #verif si l'appli est deja lancee:    
-    nomAppli = "DMonde.exe"
-    compte = 0
-    for proc in process_iter():    #from psutil
-        try:
-            nomProc = proc.name()
-            if nomProc == nomAppli:
-                compte += 1
-            if compte > 1:
-                demarrageOk = False
-                logProg.error("Une instance de l'application est deja en cours d'execution")
-                break
-        except:
-            pass
-        
-    if demarrageOk: 
-    #lancement de l'appli    
-        app = QApplication(argv)  #'argv' vient de 'sys'
-        connexion = EcranConnexion()    
-        connexion.show()
-        r = app.exec_()
-        if r == 0 and connexion.client_connecte:
-            #si pas d'erreur et client connecte, on ouvre l'interface principale
-            ecranPrincipal = EcranPrincipal(connexion)
-            ecranPrincipal.show()
-            r = app.exec_()
-            exit(r)   #'exit' vient de 'sys'
-        
-
-    
-
-
-    
-    
-    

+ 0 - 88
interface_qt8_2/a faire.txt

@@ -1,88 +0,0 @@
-mettre en place un limitateur de débit en émission
-
-améliorer la gestion des erreurs en général
-A Faire:
-
-reprendre le fonctionnement du chat vocal:
-    - fermeture du serveur/chat vocal fait tout planter
-
-reprendre le fonctionnement de l'échange des fichiers
-    - encore problèmes unicodes (???)
-
-créer un install propre
-
-mettre en place un thread de demande de réponse du client au serveur?
-
-echange fichier : si erreur d'envoi, modifier affichage de la ligne
-
-plateau de jeu:
-  - créer l'objet case, avec les infos (coordonnées terrain...)
-  - créer l'objet pion: il doit se recentrer sur la case sur laquelle est son centre aprés avoir été deplacé
-
-préparer l'interface de combat (cf: maquette_plateauCombat.doc)
-
-----
-
-
-fait le 01/07
-
-chat privé: mettre en place les modes d'échanges via serveur
-            gérer l'ouverture lors de la réception d'un message
-            fermer correctement ces fenetres à la fermeture de l'appli
-
-creation d'une vue graphique avec qt (quadrillage+pion grossier)
-
-mise à jour des infos serveur
-
-
-
-fait le 30/06
-
-serveur et chat vocal derrière un seul bouton
-ajout des layouts dans qtcreator
-creation de la boite à onglets contenant les infos de co, la liste des joueurs, et l'echange de fichiers
-début de création d'un chat privé (interface, mise en place des fonctions de base)
-
-
-
-fait 27 et 28/06/2014
-
-prog regis mis à jour
-
-verifier validité dossier reception
-
-corriger la fonction inserImgChat
-
-image qui s'ouvre n'est pas l'image recue
-
-echange fichier -  rapidité ok
-                -  afficher % de réception 
-                -  trier la liste par ordre décroissant	(remplacé par un scroll automatique)
-                -  si erreur reception, prévenir emetteur
-                -  possible conflit en cas d'annulation, lors de la suppression du fichier
-
-
-
-fait le 28/04:
-
-  - permettre d'ouvrir les fichiers directement depuis la liste (uniquement en reception pour l'instant)
-
-  - retours a la ligne et hauteur automatique dans listes
-
-  - serveur fonctionne avec une liste tampon, traitement des données 'centralisé'
-
-  - tentatives de donnexion au serveur
-
-  - insérer des images dans le chat
-
-  - permettre de se reconnecter sans avoir a fermer la fenetre du chat (en cas de deco du serveur)
-
-  - annuler les envois/reception en cas d'erreur ou de deconnexion du serveur ou du client
-
-le 0205:
-
-  - controler si une instance de l'appli est deja lancee
-
-  - créer un setup propre (en partie)
-
-  - fichiers .log pour le deboguage

+ 0 - 206
interface_qt8_2/anason.py

@@ -1,206 +0,0 @@
-# -*-coding:Latin-1 -*
-"""Analyse du micro et stockage des parametres pour le chat vocal"""
-import audioop
-import time
-from math import fabs
-import cPickle as pickle #lecture/ecriture d'objets dans un fichier
-
-#modules complémentaires
-import pymedia.audio.sound as sound
-
-
-class AnaSon():
-    """analyse et stocke les parametres d'entree du son (version pymedia)"""
-    def __init__(self):
-        """initialisation des parametres par defauts"""
-        #puissance moyenne du son en silence
-        self.pMoy_silence = 1800
-        #ecarts liees aux parasites
-        self.ecartSilence = 500
-        #puissance moyenne du son en parlant
-        self.pMoy_parle = 16000
-        #coeff de puissance
-        self.coeffP = 1.00
-        #puissance de reference
-        self.pRef = 20000
-        #forme d'onde (liste des puissances) en silence et en parlant
-        self.formeS = []
-        self.formeP = []
-        #duree des tests
-        self.duree = 5
-        #peripheriques par defaut:
-        self.IDmicro = 0
-
-        #pour le traitement du son:
-        self.compte = 0
-
-        #affiche des infos
-        self.affichage = True
-        
-        #fichier de sauvegarde
-        self.fichier = "param_micro"
-        self.ecoute = False
-
-        #pour enregistrement de la reception
-        #self.enregistrement = open( "ResultatAnalyse.mp3", 'wb' )
-
-    def recup(self):
-        """recupere si possible les parametres enregistres"""
-        try:
-             with open(self.fichier, 'rb') as f:
-                 tmp = pickle.load(f)
-             f.close()
-             print("Parametres récupérés")
-        except IOError:
-            tmp = self
-            print("Pas de parametres enregistres, parametres par defaut utilises")
-        return tmp
-        
-    def sauver(self):
-        """sauvegarde les parametres analyses"""
-        with open(self.fichier, 'wb') as f:
-           pickle.dump(self, f, -1)
-        f.close()
-        print("Parametres sauvegardes.")
-
-    def analyser(self):
-        """lance l'analyse du son"""
-        print("\n*** Analyse du micro ***\n")
-        
-        #phase 1: quel micro?
-        print(sound.getIDevices())
-        self.IDmicro = input("\nMicro par defaut? (id) > ")
-        micro = sound.Input( 16000, 1, sound.AFMT_S16_LE, self.IDmicro )
-        micro.start()
-        sortie = sound.Output( 16000, 1, sound.AFMT_S16_LE )
-        enregistrement = open( "ResultatsAnaSon.mp3", 'wb' )
-        
-        # phase 2 : parasites
-        #liste des donnees recues au cours de l'analyse
-        frames_test = []
-        
-        #boucle de reception
-        print("Test des parasites: ne parlez pas (env. {} sec)\n".format(self.duree+1))
-        pause = raw_input("Appuyez sur Entree pour lancer: \n")
-        t0 = time.time()
-        while time.time() - t0 < self.duree:
-           son = micro.getData()
-           if son and len(son):
-              frames_test.append(son)
-              #audioop.rms renvoie la puissance moyenne du son
-              self.formeS.append(audioop.rms(son,2))
-        #on enleve la premiere valeur qui n'est generalement pas representative:
-        del frames_test[0]
-        del self.formeS[0]
-        print("{}\n".format(self.formeS)) 
-        
-        #donnees utilisees pour l'attenuation du son lors des silences:
-        self.pMoy_silence = audioop.rms(b''.join(frames_test),2)
-        self.ecartMax = 0
-        
-        ecart_mesure = 0
-        for son in frames_test:
-            if fabs(audioop.rms(son,2) - self.pMoy_silence) > ecart_mesure:
-                ecart_mesure = fabs(audioop.rms(son,2) - self.pMoy_silence)
-        if ecart_mesure > 10:
-            self.ecartSilence = ecart_mesure
-            
-        # phase 3 : parle
-        frames_test = []
-        print("Test de la voix: parlez normalement (env. {} sec)\n ".format(self.duree+1))
-        pause = raw_input("Appuyez sur Entree pour lancer: \n")
-        t0 = time.time()
-        while time.time() - t0 < self.duree:
-           son = micro.getData()
-           if son and len(son):
-              self.formeP.append(audioop.rms(son,2))
-              if audioop.rms(son,2) > (self.pMoy_silence + self.ecartSilence):
-                 frames_test.append(son)                 
-
-        #on enleve la premiere valeur qui n'est generalement pas representative:
-        del self.formeP[0]
-        print("{}\n".format(self.formeP))
-        
-        if len(frames_test)>0:
-           del frames_test[0]        
-           self.pMoy_parle = audioop.rms(b''.join(frames_test),2) 
-           #mise a jour du coeff de puissance:
-           if self.pMoy_parle != 0:        
-              self.coeffP = self.pRef / self.pMoy_parle
-              if self.coeffP < 0.2:
-                  self.coeffP = 0.20
-              elif self.coeffP > 4:
-                  self.coeffP = 4.00
-        else:
-            print("\n (!) Erreur: la puissance de la voix est insuffisante pour etre detectee")
-        print("\n*** Fin de l'analyse ***\n")
-        micro.stop()
-        enregistrement.close()
-
-        self.sauver() 
-
-    def traitement(self, data):
-        """renvoie la donnee sonore traitee selon les parametres utilises"""
-        #est-on dans la 'zone de silence'?
-        kS = 1
-        retour = None
-        seuil_iterations = 3
-        if audioop.rms(data,2) <= self.pMoy_silence + self.ecartSilence:
-              #on ne diminue la puissance du son qu'apres un certain nombre d'iterations (4 ici)
-              self.compte += 1
-              if self.compte > seuil_iterations:
-                  if self.affichage and self.compte == seuil_iterations + 1:
-                      print("\n-> silence")
-                  kS = 0.2    
-        else:
-              if self.affichage and self.compte != 0:
-                  print("\n-> parle")
-              self.compte = 0
-              #retour = audioop.mul(data, 2, (self.coeffP))  
-              kS = 1
-        retour = audioop.mul(data, 2, (kS * self.coeffP))        
-        return retour                
-     
-    def ecouterMicro(self):
-        """ecouter son micro"""
-        micro = sound.Input( 16000, 1, sound.AFMT_S16_LE, self.IDmicro )
-        micro.start()
-        sortie = sound.Output( 16000, 1, sound.AFMT_S16_LE )
-
-        t0 = time.time()
-        #while time.time() - t0 < self.duree:
-        while True:
-            son = micro.getData()
-            if son and len(son):
-              son_traite = self.traitement(son)
-              #print("{} - {}".format(audioop.rms(son,2), audioop.rms(son_traite,2)))
-              sortie.play(son_traite)
-              
-        micro.stop()
-        
-    def __repr__(self):
-        """affiche les parametres utilises"""
-        chaine = "\n*** Parametres utilises ***\n"\
-                 "\n    Puissance moyenne en silence: {} "\
-                 "\n    Amplitude parasites: {} "\
-                 "\n    Puissance moyenne en parlant: {} "\
-                 "\n    Multiplicateur applique: {} "\
-                 "".format(self.pMoy_silence, self.ecartSilence, self.pMoy_parle, self.coeffP)     
-        return chaine  
-
-
-
-######### si lancement direct ########
-if __name__ == "__main__":
-   a = AnaSon()
-   a.analyser()
-   #a = None
-   #a = AnaSon()
-   #a = a.recup()
-   print(a)
-   #a.ecouterMicro()
-   #a.analyser()
-   pause = raw_input("appuyez sur entree")
-   
-
-

+ 0 - 162
interface_qt8_2/chatVoc.log

@@ -1,162 +0,0 @@
-[2014-07-05 13:50:00,007] DEBUG -     ----------------------    
-
-[2014-07-05 13:51:50,026] DEBUG -     ----------------------    
-
-[2014-07-05 14:08:48,171] DEBUG -     ----------------------    
-
-[2014-07-05 14:16:14,937] DEBUG -     ----------------------    
-
-[2014-07-05 14:17:50,112] DEBUG -     ----------------------    
-
-[2014-07-05 14:18:25,431] DEBUG -     ----------------------    
-
-[2014-07-05 14:47:23,293] DEBUG -     ----------------------    
-
-[2014-07-05 15:02:40,694] DEBUG -     ----------------------    
-
-[2014-07-05 15:04:39,785] DEBUG -     ----------------------    
-
-[2014-07-05 15:05:43,401] DEBUG -     ----------------------    
-
-[2014-07-05 15:06:40,233] DEBUG -     ----------------------    
-
-[2014-07-05 15:07:21,901] DEBUG -     ----------------------    
-
-[2014-07-05 15:07:39,404] DEBUG -     ----------------------    
-
-[2014-07-05 15:09:36,342] DEBUG -     ----------------------    
-
-[2014-07-05 15:10:55,638] DEBUG -     ----------------------    
-
-[2014-07-05 15:12:45,711] DEBUG -     ----------------------    
-
-[2014-07-05 15:24:49,164] DEBUG -     ----------------------    
-
-[2014-07-05 15:26:18,351] DEBUG -     ----------------------    
-
-[2014-07-05 15:27:27,927] DEBUG -     ----------------------    
-
-[2014-07-05 15:30:54,081] DEBUG -     ----------------------    
-
-[2014-07-05 15:31:58,805] DEBUG -     ----------------------    
-
-[2014-07-07 16:32:13,309] DEBUG -     ----------------------    
-
-[2014-07-07 16:36:34,032] DEBUG -     ----------------------    
-
-[2014-07-07 16:38:17,148] DEBUG -     ----------------------    
-
-[2014-07-07 16:39:47,753] DEBUG -     ----------------------    
-
-[2014-07-07 16:40:52,012] DEBUG -     ----------------------    
-
-[2014-07-07 16:41:59,371] DEBUG -     ----------------------    
-
-[2014-07-07 16:42:22,772] DEBUG -     ----------------------    
-
-[2014-07-07 16:50:19,072] DEBUG -     ----------------------    
-
-[2014-07-07 16:56:12,111] DEBUG -     ----------------------    
-
-[2014-07-07 17:03:24,565] DEBUG -     ----------------------    
-
-[2014-07-07 17:04:59,351] DEBUG -     ----------------------    
-
-[2014-07-07 17:05:32,549] DEBUG -     ----------------------    
-
-[2014-07-07 17:05:52,595] DEBUG -     ----------------------    
-
-[2014-07-07 17:06:30,424] DEBUG -     ----------------------    
-
-[2014-07-07 17:07:42,730] DEBUG -     ----------------------    
-
-[2014-07-07 17:07:47,910] DEBUG -     ----------------------    
-
-[2014-07-07 17:08:33,588] DEBUG -     ----------------------    
-
-[2014-07-07 17:08:54,789] DEBUG -     ----------------------    
-
-[2014-07-07 17:09:17,142] DEBUG -     ----------------------    
-
-[2014-07-07 17:10:36,355] DEBUG -     ----------------------    
-
-[2014-07-07 17:10:52,976] DEBUG -     ----------------------    
-
-[2014-07-07 17:14:57,108] DEBUG -     ----------------------    
-
-[2014-07-07 17:34:22,923] DEBUG -     ----------------------    
-
-[2014-07-07 17:35:32,171] DEBUG -     ----------------------    
-
-[2014-07-07 17:35:58,240] DEBUG -     ----------------------    
-
-[2014-07-07 17:38:04,053] DEBUG -     ----------------------    
-
-[2014-07-07 17:43:24,693] DEBUG -     ----------------------    
-
-[2014-07-07 17:48:36,408] DEBUG -     ----------------------    
-
-[2014-07-07 17:53:40,812] DEBUG -     ----------------------    
-
-[2014-07-07 17:56:57,667] DEBUG -     ----------------------    
-
-[2014-07-07 17:57:17,262] DEBUG -     ----------------------    
-
-[2014-07-07 17:58:03,546] DEBUG -     ----------------------    
-
-[2014-07-07 18:00:48,377] DEBUG -     ----------------------    
-
-[2014-07-07 18:01:10,013] DEBUG -     ----------------------    
-
-[2014-07-07 18:01:43,118] DEBUG -     ----------------------    
-
-[2014-07-07 18:16:34,519] DEBUG -     ----------------------    
-
-[2014-07-07 18:16:56,141] DEBUG -     ----------------------    
-
-[2014-07-07 18:21:35,335] DEBUG -     ----------------------    
-
-[2014-07-07 18:22:39,763] DEBUG -     ----------------------    
-
-[2014-07-07 18:26:07,835] DEBUG -     ----------------------    
-
-[2014-07-07 18:26:59,440] DEBUG -     ----------------------    
-
-[2014-07-07 18:28:08,938] DEBUG -     ----------------------    
-
-[2014-07-07 18:29:10,778] DEBUG -     ----------------------    
-
-[2014-07-07 18:30:58,855] DEBUG -     ----------------------    
-
-[2014-07-07 18:31:50,085] DEBUG -     ----------------------    
-
-[2014-07-07 18:34:12,187] DEBUG -     ----------------------    
-
-[2014-07-07 18:35:06,895] DEBUG -     ----------------------    
-
-[2014-07-07 18:38:35,171] DEBUG -     ----------------------    
-
-[2014-07-07 18:39:01,145] DEBUG -     ----------------------    
-
-[2014-07-07 18:40:08,132] DEBUG -     ----------------------    
-
-[2014-07-07 18:55:32,247] DEBUG -     ----------------------    
-
-[2014-07-07 23:40:21,607] DEBUG -     ----------------------    
-
-[2014-07-07 23:40:50,233] DEBUG -     ----------------------    
-
-[2014-07-08 09:43:10,864] DEBUG -     ----------------------    
-
-[2014-07-08 09:44:09,434] DEBUG -     ----------------------    
-
-[2014-07-08 09:44:38,992] DEBUG -     ----------------------    
-
-[2014-07-15 10:14:30,279] DEBUG -     ----------------------    
-
-[2014-07-15 10:32:05,559] DEBUG -     ----------------------    
-
-[2014-07-25 12:53:28,052] DEBUG -     ----------------------    
-
-[2015-05-04 11:06:00,440] DEBUG -     ----------------------    
-

+ 0 - 95
interface_qt8_2/chatprive.ui

@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>chatPrive</class>
- <widget class="QWidget" name="chatPrive">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>334</width>
-    <height>395</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Chat privé</string>
-  </property>
-  <widget class="QListWidget" name="lstChatPrive">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>30</y>
-     <width>291</width>
-     <height>281</height>
-    </rect>
-   </property>
-  </widget>
-  <widget class="QLineEdit" name="inSaisieChatPrive">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>320</y>
-     <width>291</width>
-     <height>20</height>
-    </rect>
-   </property>
-  </widget>
-  <widget class="QLineEdit" name="inDesChatPrive">
-   <property name="geometry">
-    <rect>
-     <x>170</x>
-     <y>360</y>
-     <width>141</width>
-     <height>20</height>
-    </rect>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label">
-   <property name="geometry">
-    <rect>
-     <x>170</x>
-     <y>340</y>
-     <width>101</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Jeter les dés : </string>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="envoiFichierChatPrive">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>350</y>
-     <width>121</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Envoyer un fichier</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="lblInterlocChatPrive">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>10</y>
-     <width>291</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="font">
-    <font>
-     <pointsize>10</pointsize>
-     <weight>75</weight>
-     <bold>true</bold>
-    </font>
-   </property>
-   <property name="text">
-    <string>Interloc</string>
-   </property>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 0 - 185
interface_qt8_2/clientvoc.py

@@ -1,185 +0,0 @@
-# -*-coding:Latin-1 -*
-"""fonction client du chat vocal (protocole UDP)"""
-from socket import socket, AF_INET, SOCK_DGRAM
-from time import sleep
-from threading import Thread
-from os import system
-import logging
-
-#modules complémentaires
-import pymedia.audio.sound as sound
-import pymedia.audio.acodec as acodec
-from pyaudio import PyAudio, paInt16
-
-#modules perso
-from anason import AnaSon
-from lecture import Lecture
-
-#gestion des erreurs et log
-logging.basicConfig(level=logging.DEBUG)
-logCVoc = logging.getLogger(__name__)
-handlerCVoc = logging.FileHandler('chatVoc.log')
-handlerCVoc.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s - %(message)s'))  #%(name)s - nom du module
-logCVoc.addHandler(handlerCVoc)
-logCVoc.debug("    ----------------------    \n")
-
-port = 6660
-frequence = 22050
-#param d'encodage/decodage
-cparams= { 'id': acodec.getCodecID( 'mp3' ),
-           'bitrate': 32000,
-           'sample_rate': frequence,
-           'channels': 1 }
-taille_paquets = 1024
-debug = False
-
-######### Fils secondaires #########
-
-class ReceptionVoc(Thread):
-    """fil gerant la reception du son"""
-    def __init__(self, cnn):
-        """création du fil reception"""
-        self.connecte = True
-        Thread.__init__(self)
-        self.cnn = cnn
-        self.essais = 0
-        self.connectes = {}
-        
-    def run(self):
-        """reception: tourne en boucle tant que la connexion est active"""
-        while self.connecte:
-            try:
-                fr, adresse = self.cnn.recvfrom(taille_paquets)
-                #print("recu {}".format(len(fr)))
-
-                #les 2 premiers caracteres sont le pseudo de l'expediteur   
-                expediteur = fr[:2]
-                donnee = fr[2:]
-                if not expediteur in self.connectes.keys():
-                    #nouveau connecte
-                    try:
-                       fil = Lecture(expediteur, cparams, debug)
-                       fil.start()
-                       self.connectes[expediteur] = fil
-                       logCVoc.info("\n -> Connecte a {}".format(expediteur))
-                    except KeyboardInterrupt:
-                       logCVoc.error("{} - Erreur de reception".format(expediteur))
-                else: 
-                   if donnee:       
-                      self.connectes[expediteur].lire(donnee)
-                
-                self.essais = 0
-            except IOError, e: 
-               if e.errno == 10022:    
-                   sleep(0.001)
-                   self.essais += 1
-                   if self.essais == 1000:
-                      logCVoc.warning("pas de reception")
-                      self.essais = 0
-                      
-    def stop(self):
-        """Fermeture du fil Reception"""
-        logCVoc.info("\nChat vocal : Reception interrompue")
-        for fil in self.connectes.values():
-            fil.stop()
-        self.connecte = False
-        self.cnn.close()
-        
-        
-#fin du fil reception   
-
-#objet client:
-class ClientVoc(Thread):
-    """client pour le chat vocal"""
-    def __init__(self, idClient, ipServeur, port):
-        """création du client"""
-        Thread.__init__(self)
-        self.idClient = idClient
-        self.ipServeur = ipServeur
-        self.port = 6660
-        
-        ###parametrage du socket udp###
-        self.cnn = socket(AF_INET, SOCK_DGRAM)
-        self.connecte = False
-
-        #flux microphone:
-        self.stream = PyAudio().open(format = paInt16,    
-                                     channels = 1,
-                                     rate = frequence,
-                                     input = True,
-                                     frames_per_buffer = 1024)
-        #encodage:
-        self.ac = acodec.Encoder( cparams )
-        
-        #traitement du son?
-        self.traitement = False
-        if self.traitement:
-            #parametres de traitement du son:
-            self.ana = AnaSon()
-            #on recupere les parametres enregistres si possible
-            self.ana = self.ana.recup()
-        
-    def creer(self):
-        """demarre une instance client pour le chat vocal"""
-        if len(self.idClient) == 2 and len(self.ipServeur) > 0 :
-            self.thR = ReceptionVoc(self.cnn)
-            self.thR.start()
-            self.connecte = True
-            self.start()
-            txt = "Chat vocal demarre"
-            logCVoc.info(txt)
-        else:
-            txt = "Chat vocal : erreur dans les parametres d'entree"
-            logCVoc.error(txt)  
-        return txt 
-
-    def run(self):
-       """emission: tourne en boucle tant que la connexion est active"""
-       #on affiche les parametres du micro
-       if self.traitement:
-          logCVoc.info(self.ana)
-          
-       while self.connecte:
-              #son = micro.getData()
-              son = self.stream.read(1024)
-              if son and len(son):
-                  if self.traitement:
-                     son = self.ana.traitement(son)
-                      
-                  if son:
-                     son_encode = self.ac.encode(son)
-                
-                     for fr in son_encode:
-                         if len(fr) < (taille_paquets - 2):
-                             #on ajoute l'id du client au debut du paquet
-                             envoi = self.idClient + fr
-                             #print("envoi {}".format(len(fr)))
-                             self.cnn.sendto(envoi, (self.ipServeur, port))
-                         else:
-                             logCVoc.warning("1 paquet trop volumineux")
-              else:
-                  #si pas de son, on attend un peu
-                  sleep(0.003)
-
-    def stop(self):
-        """quitte la session de chat"""
-        if self.connecte:
-            self.thR.stop()
-        self.stream.close()
-        self.cnn.close()
-        txt = "Fermeture du chat vocal"
-        logCVoc.info(txt)
-
-        return txt
-            
-### fil principal ###
-if __name__ == "__main__":
-   # si lancement direct:
-   idClient = raw_input("id client (2car)")
-   c = ClientVoc(idClient, "localhost", 6660)
-   c.creer()
-   system("pause")
-   c.stop()
-
-
-

+ 0 - 172
interface_qt8_2/connexion.ui

@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ecranConnexion</class>
- <widget class="QGroupBox" name="ecranConnexion">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>409</width>
-    <height>215</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>D-Monde</string>
-  </property>
-  <property name="title">
-   <string>Ecran de connexion</string>
-  </property>
-  <widget class="QPushButton" name="creerServeur">
-   <property name="geometry">
-    <rect>
-     <x>240</x>
-     <y>40</y>
-     <width>141</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Créer un serveur</string>
-   </property>
-   <property name="autoDefault">
-    <bool>false</bool>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="seConnecter">
-   <property name="geometry">
-    <rect>
-     <x>240</x>
-     <y>80</y>
-     <width>141</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Se connecter</string>
-   </property>
-  </widget>
-  <widget class="QLineEdit" name="in_ip">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>90</y>
-     <width>151</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string/>
-   </property>
-   <property name="maxLength">
-    <number>15</number>
-   </property>
-  </widget>
-  <widget class="QLineEdit" name="in_port">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>140</y>
-     <width>151</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>6660</string>
-   </property>
-   <property name="maxLength">
-    <number>5</number>
-   </property>
-  </widget>
-  <widget class="QPushButton" name="fermer">
-   <property name="geometry">
-    <rect>
-     <x>240</x>
-     <y>140</y>
-     <width>141</width>
-     <height>21</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Fermer</string>
-   </property>
-  </widget>
-  <widget class="QLineEdit" name="in_pseudo">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>40</y>
-     <width>151</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string/>
-   </property>
-   <property name="maxLength">
-    <number>15</number>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label_ip">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>70</y>
-     <width>111</width>
-     <height>16</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Adresse ip du serveur :</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label_port">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>120</y>
-     <width>111</width>
-     <height>16</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Port :</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="label_pseudo">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>20</y>
-     <width>111</width>
-     <height>16</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Votre pseudo :</string>
-   </property>
-  </widget>
-  <widget class="QLabel" name="txt_msg">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>180</y>
-     <width>361</width>
-     <height>20</height>
-    </rect>
-   </property>
-   <property name="font">
-    <font>
-     <family>Arial Rounded MT Bold</family>
-    </font>
-   </property>
-   <property name="text">
-    <string/>
-   </property>
-   <property name="alignment">
-    <set>Qt::AlignCenter</set>
-   </property>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 0 - 1
interface_qt8_2/convert.cmd

@@ -1 +0,0 @@
-pyuic4 -x mainwindow.ui -o ecran_principal.py

+ 0 - 72
interface_qt8_2/ecran_chatPrive.py

@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'chatPrive.ui'
-#
-# Created: Mon Jun 30 17:51:04 2014
-#      by: PyQt4 UI code generator 4.10.4
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
-
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_chatPrive(object):
-    def setupUi(self, chatPrive):
-        chatPrive.setObjectName(_fromUtf8("chatPrive"))
-        chatPrive.resize(334, 395)
-        self.lstChatPrive = QtGui.QListWidget(chatPrive)
-        self.lstChatPrive.setGeometry(QtCore.QRect(20, 30, 291, 281))
-        self.lstChatPrive.setObjectName(_fromUtf8("lstChatPrive"))
-        self.inSaisieChatPrive = QtGui.QLineEdit(chatPrive)
-        self.inSaisieChatPrive.setGeometry(QtCore.QRect(20, 320, 291, 20))
-        self.inSaisieChatPrive.setObjectName(_fromUtf8("inSaisieChatPrive"))
-        self.inDesChatPrive = QtGui.QLineEdit(chatPrive)
-        self.inDesChatPrive.setGeometry(QtCore.QRect(170, 360, 141, 20))
-        self.inDesChatPrive.setObjectName(_fromUtf8("inDesChatPrive"))
-        self.label = QtGui.QLabel(chatPrive)
-        self.label.setGeometry(QtCore.QRect(170, 340, 101, 20))
-        self.label.setObjectName(_fromUtf8("label"))
-        self.envoiFichierChatPrive = QtGui.QPushButton(chatPrive)
-        self.envoiFichierChatPrive.setGeometry(QtCore.QRect(20, 350, 121, 31))
-        self.envoiFichierChatPrive.setObjectName(_fromUtf8("envoiFichierChatPrive"))
-        self.lblInterlocChatPrive = QtGui.QLabel(chatPrive)
-        self.lblInterlocChatPrive.setGeometry(QtCore.QRect(20, 10, 291, 20))
-        font = QtGui.QFont()
-        font.setPointSize(10)
-        font.setBold(True)
-        font.setWeight(75)
-        self.lblInterlocChatPrive.setFont(font)
-        self.lblInterlocChatPrive.setObjectName(_fromUtf8("lblInterlocChatPrive"))
-
-        self.retranslateUi(chatPrive)
-        QtCore.QMetaObject.connectSlotsByName(chatPrive)
-
-    def retranslateUi(self, chatPrive):
-        chatPrive.setWindowTitle(_translate("chatPrive", "Chat privé", None))
-        self.label.setText(_translate("chatPrive", "Jeter les dés : ", None))
-        self.envoiFichierChatPrive.setText(_translate("chatPrive", "Envoyer un fichier", None))
-        self.lblInterlocChatPrive.setText(_translate("chatPrive", "Interloc", None))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    chatPrive = QtGui.QWidget()
-    ui = Ui_chatPrive()
-    ui.setupUi(chatPrive)
-    chatPrive.show()
-    sys.exit(app.exec_())
-

+ 0 - 95
interface_qt8_2/ecran_connexion.py

@@ -1,95 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'connexion.ui'
-#
-# Created: Sat Mar 29 14:45:54 2014
-#      by: PyQt4 UI code generator 4.10.4
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
-
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_ecranConnexion(object):
-    def setupUi(self, ecranConnexion):
-        ecranConnexion.setObjectName(_fromUtf8("ecranConnexion"))
-        ecranConnexion.resize(409, 215)
-        self.creerServeur = QtGui.QPushButton(ecranConnexion)
-        self.creerServeur.setGeometry(QtCore.QRect(240, 40, 141, 31))
-        self.creerServeur.setAutoDefault(False)
-        self.creerServeur.setObjectName(_fromUtf8("creerServeur"))
-        self.seConnecter = QtGui.QPushButton(ecranConnexion)
-        self.seConnecter.setGeometry(QtCore.QRect(240, 80, 141, 31))
-        self.seConnecter.setObjectName(_fromUtf8("seConnecter"))
-        self.in_ip = QtGui.QLineEdit(ecranConnexion)
-        self.in_ip.setGeometry(QtCore.QRect(20, 90, 151, 20))
-        self.in_ip.setText(_fromUtf8(""))
-        self.in_ip.setMaxLength(15)
-        self.in_ip.setObjectName(_fromUtf8("in_ip"))
-        self.in_port = QtGui.QLineEdit(ecranConnexion)
-        self.in_port.setGeometry(QtCore.QRect(20, 140, 151, 20))
-        self.in_port.setMaxLength(5)
-        self.in_port.setObjectName(_fromUtf8("in_port"))
-        self.fermer = QtGui.QPushButton(ecranConnexion)
-        self.fermer.setGeometry(QtCore.QRect(240, 140, 141, 21))
-        self.fermer.setObjectName(_fromUtf8("fermer"))
-        self.in_pseudo = QtGui.QLineEdit(ecranConnexion)
-        self.in_pseudo.setGeometry(QtCore.QRect(20, 40, 151, 20))
-        self.in_pseudo.setText(_fromUtf8(""))
-        self.in_pseudo.setMaxLength(15)
-        self.in_pseudo.setObjectName(_fromUtf8("in_pseudo"))
-        self.label_ip = QtGui.QLabel(ecranConnexion)
-        self.label_ip.setGeometry(QtCore.QRect(20, 70, 111, 16))
-        self.label_ip.setObjectName(_fromUtf8("label_ip"))
-        self.label_port = QtGui.QLabel(ecranConnexion)
-        self.label_port.setGeometry(QtCore.QRect(20, 120, 111, 16))
-        self.label_port.setObjectName(_fromUtf8("label_port"))
-        self.label_pseudo = QtGui.QLabel(ecranConnexion)
-        self.label_pseudo.setGeometry(QtCore.QRect(20, 20, 111, 16))
-        self.label_pseudo.setObjectName(_fromUtf8("label_pseudo"))
-        self.txt_msg = QtGui.QLabel(ecranConnexion)
-        self.txt_msg.setGeometry(QtCore.QRect(20, 180, 361, 20))
-        font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Arial Rounded MT Bold"))
-        self.txt_msg.setFont(font)
-        self.txt_msg.setText(_fromUtf8(""))
-        self.txt_msg.setAlignment(QtCore.Qt.AlignCenter)
-        self.txt_msg.setObjectName(_fromUtf8("txt_msg"))
-
-        self.retranslateUi(ecranConnexion)
-        QtCore.QMetaObject.connectSlotsByName(ecranConnexion)
-
-    def retranslateUi(self, ecranConnexion):
-        ecranConnexion.setWindowTitle(_translate("ecranConnexion", "D-Monde", None))
-        ecranConnexion.setTitle(_translate("ecranConnexion", "Ecran de connexion", None))
-        self.creerServeur.setText(_translate("ecranConnexion", "Créer un serveur", None))
-        self.seConnecter.setText(_translate("ecranConnexion", "Se connecter", None))
-        self.in_port.setText(_translate("ecranConnexion", "6660", None))
-        self.fermer.setText(_translate("ecranConnexion", "Fermer", None))
-        self.label_ip.setText(_translate("ecranConnexion", "Adresse ip du serveur :", None))
-        self.label_port.setText(_translate("ecranConnexion", "Port :", None))
-        self.label_pseudo.setText(_translate("ecranConnexion", "Votre pseudo :", None))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    ecranConnexion = QtGui.QGroupBox()
-    ui = Ui_ecranConnexion()
-    ui.setupUi(ecranConnexion)
-    ecranConnexion.show()
-    sys.exit(app.exec_())
-

+ 0 - 69
interface_qt8_2/ecran_envoiFichier.py

@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'envoiFichier.ui'
-#
-# Created: Fri Jun 27 14:27:57 2014
-#      by: PyQt4 UI code generator 4.10.4
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
-
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_envoiFichiers(object):
-    def setupUi(self, envoiFichiers):
-        envoiFichiers.setObjectName(_fromUtf8("envoiFichiers"))
-        envoiFichiers.resize(543, 422)
-        self.pushButton = QtGui.QPushButton(envoiFichiers)
-        self.pushButton.setGeometry(QtCore.QRect(180, 30, 151, 31))
-        self.pushButton.setObjectName(_fromUtf8("pushButton"))
-        self.treeWidget = QtGui.QTreeWidget(envoiFichiers)
-        self.treeWidget.setGeometry(QtCore.QRect(20, 80, 501, 281))
-        self.treeWidget.setColumnCount(2)
-        self.treeWidget.setObjectName(_fromUtf8("treeWidget"))
-        item_0 = QtGui.QTreeWidgetItem(self.treeWidget)
-        item_1 = QtGui.QTreeWidgetItem(item_0)
-        item_1 = QtGui.QTreeWidgetItem(item_0)
-        self.pushButton_2 = QtGui.QPushButton(envoiFichiers)
-        self.pushButton_2.setGeometry(QtCore.QRect(350, 370, 151, 21))
-        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
-
-        self.retranslateUi(envoiFichiers)
-        QtCore.QMetaObject.connectSlotsByName(envoiFichiers)
-
-    def retranslateUi(self, envoiFichiers):
-        envoiFichiers.setWindowTitle(_translate("envoiFichiers", "Envoi de fichiers", None))
-        self.pushButton.setText(_translate("envoiFichiers", "Envoyer un fichier", None))
-        self.treeWidget.headerItem().setText(0, _translate("envoiFichiers", "Fichier", None))
-        self.treeWidget.headerItem().setText(1, _translate("envoiFichiers", "Statut", None))
-        __sortingEnabled = self.treeWidget.isSortingEnabled()
-        self.treeWidget.setSortingEnabled(False)
-        self.treeWidget.topLevelItem(0).setText(0, _translate("envoiFichiers", "Nouvel élément", None))
-        self.treeWidget.topLevelItem(0).child(0).setText(0, _translate("envoiFichiers", "Nouveau sous-élément", None))
-        self.treeWidget.topLevelItem(0).child(1).setText(0, _translate("envoiFichiers", "Nouveau sous-élément", None))
-        self.treeWidget.setSortingEnabled(__sortingEnabled)
-        self.pushButton_2.setText(_translate("envoiFichiers", "Annuler l\'envoi", None))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    envoiFichiers = QtGui.QWidget()
-    ui = Ui_envoiFichiers()
-    ui.setupUi(envoiFichiers)
-    envoiFichiers.show()
-    sys.exit(app.exec_())
-

+ 0 - 437
interface_qt8_2/ecran_principal.py

@@ -1,437 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'mainwindow.ui'
-#
-# Created: Tue Jul 01 17:07:29 2014
-#      by: PyQt4 UI code generator 4.10.4
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
-
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_principal(object):
-    def setupUi(self, principal):
-        principal.setObjectName(_fromUtf8("principal"))
-        principal.resize(882, 623)
-        principal.setMinimumSize(QtCore.QSize(882, 623))
-        self.baseWidget = QtGui.QWidget(principal)
-        self.baseWidget.setObjectName(_fromUtf8("baseWidget"))
-        self.horizontalLayout = QtGui.QHBoxLayout(self.baseWidget)
-        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
-        self.tabWidget = QtGui.QTabWidget(self.baseWidget)
-        self.tabWidget.setMinimumSize(QtCore.QSize(641, 561))
-        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
-        self.Combats_tab = QtGui.QWidget()
-        self.Combats_tab.setObjectName(_fromUtf8("Combats_tab"))
-        self.frame_2 = QtGui.QFrame(self.Combats_tab)
-        self.frame_2.setGeometry(QtCore.QRect(0, 0, 71, 531))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(170, 170, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 170, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 170, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
-        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.frame_2.setPalette(palette)
-        self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
-        self.frame_2.setObjectName(_fromUtf8("frame_2"))
-        self.newW = QtGui.QPushButton(self.frame_2)
-        self.newW.setGeometry(QtCore.QRect(0, 20, 71, 31))
-        self.newW.setObjectName(_fromUtf8("newW"))
-        self.ligne = QtGui.QPushButton(self.frame_2)
-        self.ligne.setGeometry(QtCore.QRect(0, 50, 71, 31))
-        self.ligne.setObjectName(_fromUtf8("ligne"))
-        self.texte = QtGui.QPushButton(self.frame_2)
-        self.texte.setGeometry(QtCore.QRect(0, 80, 71, 31))
-        self.texte.setObjectName(_fromUtf8("texte"))
-        self.plusJeton = QtGui.QPushButton(self.frame_2)
-        self.plusJeton.setGeometry(QtCore.QRect(0, 370, 31, 31))
-        self.plusJeton.setObjectName(_fromUtf8("plusJeton"))
-        self.moinsJeton = QtGui.QPushButton(self.frame_2)
-        self.moinsJeton.setGeometry(QtCore.QRect(40, 370, 31, 31))
-        self.moinsJeton.setObjectName(_fromUtf8("moinsJeton"))
-        self.label_4 = QtGui.QLabel(self.frame_2)
-        self.label_4.setGeometry(QtCore.QRect(10, 350, 51, 16))
-        self.label_4.setObjectName(_fromUtf8("label_4"))
-        self.label_5 = QtGui.QLabel(self.frame_2)
-        self.label_5.setGeometry(QtCore.QRect(10, 0, 51, 16))
-        self.label_5.setObjectName(_fromUtf8("label_5"))
-        self.nameJeton = QtGui.QLineEdit(self.frame_2)
-        self.nameJeton.setGeometry(QtCore.QRect(0, 400, 71, 20))
-        self.nameJeton.setObjectName(_fromUtf8("nameJeton"))
-        self.butStatut = QtGui.QPushButton(self.frame_2)
-        self.butStatut.setGeometry(QtCore.QRect(0, 430, 71, 31))
-        self.butStatut.setObjectName(_fromUtf8("butStatut"))
-        self.statut = QtGui.QLineEdit(self.frame_2)
-        self.statut.setGeometry(QtCore.QRect(0, 460, 71, 20))
-        self.statut.setObjectName(_fromUtf8("statut"))
-        self.type = QtGui.QLineEdit(self.frame_2)
-        self.type.setGeometry(QtCore.QRect(0, 140, 71, 20))
-        self.type.setText(_fromUtf8(""))
-        self.type.setObjectName(_fromUtf8("type"))
-        self.butType = QtGui.QPushButton(self.frame_2)
-        self.butType.setGeometry(QtCore.QRect(0, 110, 71, 31))
-        self.butType.setObjectName(_fromUtf8("butType"))
-        self.vuePlateau = QtGui.QGraphicsView(self.Combats_tab)
-        self.vuePlateau.setGeometry(QtCore.QRect(80, 10, 551, 521))
-        self.vuePlateau.setObjectName(_fromUtf8("vuePlateau"))
-        self.tabWidget.addTab(self.Combats_tab, _fromUtf8(""))
-        self.Monde_tab = QtGui.QWidget()
-        self.Monde_tab.setObjectName(_fromUtf8("Monde_tab"))
-        self.frame = QtGui.QFrame(self.Monde_tab)
-        self.frame.setGeometry(QtCore.QRect(0, 0, 71, 531))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(170, 170, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 170, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(170, 170, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)
-        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.frame.setPalette(palette)
-        self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.frame.setFrameShadow(QtGui.QFrame.Raised)
-        self.frame.setObjectName(_fromUtf8("frame"))
-        self.points = QtGui.QPushButton(self.frame)
-        self.points.setGeometry(QtCore.QRect(0, 0, 71, 31))
-        self.points.setObjectName(_fromUtf8("points"))
-        self.itineraire = QtGui.QPushButton(self.frame)
-        self.itineraire.setGeometry(QtCore.QRect(0, 30, 71, 31))
-        self.itineraire.setObjectName(_fromUtf8("itineraire"))
-        self.texte_2 = QtGui.QPushButton(self.frame)
-        self.texte_2.setGeometry(QtCore.QRect(0, 60, 71, 31))
-        self.texte_2.setObjectName(_fromUtf8("texte_2"))
-        self.dessin = QtGui.QPushButton(self.frame)
-        self.dessin.setGeometry(QtCore.QRect(0, 90, 71, 31))
-        self.dessin.setObjectName(_fromUtf8("dessin"))
-        self.supp = QtGui.QPushButton(self.frame)
-        self.supp.setGeometry(QtCore.QRect(0, 120, 71, 31))
-        self.supp.setObjectName(_fromUtf8("supp"))
-        self.tabWidget.addTab(self.Monde_tab, _fromUtf8(""))
-        self.Groupe_tab = QtGui.QWidget()
-        self.Groupe_tab.setObjectName(_fromUtf8("Groupe_tab"))
-        self.tabWidget.addTab(self.Groupe_tab, _fromUtf8(""))
-        self.horizontalLayout.addWidget(self.tabWidget)
-        self.layoutPanneauDroite = QtGui.QVBoxLayout()
-        self.layoutPanneauDroite.setSizeConstraint(QtGui.QLayout.SetFixedSize)
-        self.layoutPanneauDroite.setObjectName(_fromUtf8("layoutPanneauDroite"))
-        self.label = QtGui.QLabel(self.baseWidget)
-        self.label.setMinimumSize(QtCore.QSize(199, 13))
-        self.label.setMaximumSize(QtCore.QSize(369, 16777215))
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        self.label.setFont(font)
-        self.label.setObjectName(_fromUtf8("label"))
-        self.layoutPanneauDroite.addWidget(self.label)
-        self.listEvenement = QtGui.QListWidget(self.baseWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(20)
-        sizePolicy.setVerticalStretch(20)
-        sizePolicy.setHeightForWidth(self.listEvenement.sizePolicy().hasHeightForWidth())
-        self.listEvenement.setSizePolicy(sizePolicy)
-        self.listEvenement.setMinimumSize(QtCore.QSize(199, 73))
-        self.listEvenement.setMaximumSize(QtCore.QSize(369, 16777215))
-        self.listEvenement.setObjectName(_fromUtf8("listEvenement"))
-        self.layoutPanneauDroite.addWidget(self.listEvenement)
-        self.layoutDes = QtGui.QHBoxLayout()
-        self.layoutDes.setSpacing(3)
-        self.layoutDes.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
-        self.layoutDes.setObjectName(_fromUtf8("layoutDes"))
-        self.d20 = QtGui.QPushButton(self.baseWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.d20.sizePolicy().hasHeightForWidth())
-        self.d20.setSizePolicy(sizePolicy)
-        self.d20.setMinimumSize(QtCore.QSize(53, 23))
-        self.d20.setMaximumSize(QtCore.QSize(72, 16777215))
-        self.d20.setAutoDefault(False)
-        self.d20.setObjectName(_fromUtf8("d20"))
-        self.layoutDes.addWidget(self.d20)
-        self.d100 = QtGui.QPushButton(self.baseWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.d100.sizePolicy().hasHeightForWidth())
-        self.d100.setSizePolicy(sizePolicy)
-        self.d100.setMinimumSize(QtCore.QSize(52, 23))
-        self.d100.setMaximumSize(QtCore.QSize(72, 16777215))
-        self.d100.setObjectName(_fromUtf8("d100"))
-        self.layoutDes.addWidget(self.d100)
-        self.inJetDes = QtGui.QLineEdit(self.baseWidget)
-        self.inJetDes.setMinimumSize(QtCore.QSize(86, 20))
-        self.inJetDes.setMaximumSize(QtCore.QSize(217, 16777215))
-        self.inJetDes.setWhatsThis(_fromUtf8(""))
-        self.inJetDes.setInputMask(_fromUtf8(""))
-        self.inJetDes.setObjectName(_fromUtf8("inJetDes"))
-        self.layoutDes.addWidget(self.inJetDes)
-        self.layoutDes.setStretch(0, 1)
-        self.layoutDes.setStretch(1, 1)
-        self.layoutDes.setStretch(2, 3)
-        self.layoutPanneauDroite.addLayout(self.layoutDes)
-        self.layoutEnTeteChat = QtGui.QHBoxLayout()
-        self.layoutEnTeteChat.setObjectName(_fromUtf8("layoutEnTeteChat"))
-        self.label_3 = QtGui.QLabel(self.baseWidget)
-        self.label_3.setMinimumSize(QtCore.QSize(10, 23))
-        self.label_3.setMaximumSize(QtCore.QSize(271, 16777215))
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        self.label_3.setFont(font)
-        self.label_3.setObjectName(_fromUtf8("label_3"))
-        self.layoutEnTeteChat.addWidget(self.label_3)
-        self.chatVoc = QtGui.QPushButton(self.baseWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.chatVoc.sizePolicy().hasHeightForWidth())
-        self.chatVoc.setSizePolicy(sizePolicy)
-        self.chatVoc.setMinimumSize(QtCore.QSize(64, 23))
-        self.chatVoc.setMaximumSize(QtCore.QSize(90, 16777215))
-        self.chatVoc.setObjectName(_fromUtf8("chatVoc"))
-        self.layoutEnTeteChat.addWidget(self.chatVoc)
-        self.layoutEnTeteChat.setStretch(1, 1)
-        self.layoutPanneauDroite.addLayout(self.layoutEnTeteChat)
-        self.listAffichage = QtGui.QListWidget(self.baseWidget)
-        self.listAffichage.setMinimumSize(QtCore.QSize(199, 96))
-        self.listAffichage.setMaximumSize(QtCore.QSize(369, 16777215))
-        self.listAffichage.setObjectName(_fromUtf8("listAffichage"))
-        self.layoutPanneauDroite.addWidget(self.listAffichage)
-        self.inChat = QtGui.QLineEdit(self.baseWidget)
-        self.inChat.setMinimumSize(QtCore.QSize(199, 20))
-        self.inChat.setMaximumSize(QtCore.QSize(369, 16777215))
-        self.inChat.setObjectName(_fromUtf8("inChat"))
-        self.layoutPanneauDroite.addWidget(self.inChat)
-        self.tabStatutAppli = QtGui.QTabWidget(self.baseWidget)
-        self.tabStatutAppli.setMinimumSize(QtCore.QSize(201, 151))
-        self.tabStatutAppli.setMaximumSize(QtCore.QSize(369, 16777215))
-        self.tabStatutAppli.setObjectName(_fromUtf8("tabStatutAppli"))
-        self.tabConnexion = QtGui.QWidget()
-        self.tabConnexion.setObjectName(_fromUtf8("tabConnexion"))
-        self.verticalLayout_2 = QtGui.QVBoxLayout(self.tabConnexion)
-        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
-        self.txtStatutCoPseudo = QtGui.QLabel(self.tabConnexion)
-        self.txtStatutCoPseudo.setMinimumSize(QtCore.QSize(179, 13))
-        self.txtStatutCoPseudo.setMaximumSize(QtCore.QSize(16777215, 18))
-        self.txtStatutCoPseudo.setObjectName(_fromUtf8("txtStatutCoPseudo"))
-        self.verticalLayout_2.addWidget(self.txtStatutCoPseudo)
-        self.txtStatutCoServeur = QtGui.QLabel(self.tabConnexion)
-        self.txtStatutCoServeur.setMinimumSize(QtCore.QSize(179, 13))
-        self.txtStatutCoServeur.setMaximumSize(QtCore.QSize(16777215, 18))
-        self.txtStatutCoServeur.setObjectName(_fromUtf8("txtStatutCoServeur"))
-        self.verticalLayout_2.addWidget(self.txtStatutCoServeur)
-        self.txtStatutCoServeurVoc = QtGui.QLabel(self.tabConnexion)
-        self.txtStatutCoServeurVoc.setMinimumSize(QtCore.QSize(179, 13))
-        self.txtStatutCoServeurVoc.setMaximumSize(QtCore.QSize(16777215, 17))
-        self.txtStatutCoServeurVoc.setObjectName(_fromUtf8("txtStatutCoServeurVoc"))
-        self.verticalLayout_2.addWidget(self.txtStatutCoServeurVoc)
-        self.txtStatutCoDebits = QtGui.QLabel(self.tabConnexion)
-        self.txtStatutCoDebits.setMinimumSize(QtCore.QSize(179, 0))
-        self.txtStatutCoDebits.setMaximumSize(QtCore.QSize(16777215, 18))
-        self.txtStatutCoDebits.setObjectName(_fromUtf8("txtStatutCoDebits"))
-        self.verticalLayout_2.addWidget(self.txtStatutCoDebits)
-        self.txtStatutCoEcranCo = QtGui.QPushButton(self.tabConnexion)
-        self.txtStatutCoEcranCo.setMinimumSize(QtCore.QSize(179, 23))
-        self.txtStatutCoEcranCo.setMaximumSize(QtCore.QSize(16777215, 23))
-        self.txtStatutCoEcranCo.setObjectName(_fromUtf8("txtStatutCoEcranCo"))
-        self.verticalLayout_2.addWidget(self.txtStatutCoEcranCo)
-        self.tabStatutAppli.addTab(self.tabConnexion, _fromUtf8(""))
-        self.tabJoueurs = QtGui.QWidget()
-        self.tabJoueurs.setObjectName(_fromUtf8("tabJoueurs"))
-        self.verticalLayout = QtGui.QVBoxLayout(self.tabJoueurs)
-        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
-        self.lstStatutJoueurs = QtGui.QListWidget(self.tabJoueurs)
-        self.lstStatutJoueurs.setMinimumSize(QtCore.QSize(177, 0))
-        font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Segoe UI Semibold"))
-        font.setPointSize(10)
-        font.setBold(False)
-        font.setWeight(50)
-        self.lstStatutJoueurs.setFont(font)
-        self.lstStatutJoueurs.setFrameShape(QtGui.QFrame.WinPanel)
-        self.lstStatutJoueurs.setObjectName(_fromUtf8("lstStatutJoueurs"))
-        self.verticalLayout.addWidget(self.lstStatutJoueurs)
-        self.label_2 = QtGui.QLabel(self.tabJoueurs)
-        font = QtGui.QFont()
-        font.setItalic(True)
-        self.label_2.setFont(font)
-        self.label_2.setWordWrap(False)
-        self.label_2.setObjectName(_fromUtf8("label_2"))
-        self.verticalLayout.addWidget(self.label_2)
-        self.tabStatutAppli.addTab(self.tabJoueurs, _fromUtf8(""))
-        self.tabFichiers = QtGui.QWidget()
-        self.tabFichiers.setObjectName(_fromUtf8("tabFichiers"))
-        self.gridLayout = QtGui.QGridLayout(self.tabFichiers)
-        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
-        self.repReceptionFichiers = QtGui.QPushButton(self.tabFichiers)
-        self.repReceptionFichiers.setMinimumSize(QtCore.QSize(85, 23))
-        self.repReceptionFichiers.setMaximumSize(QtCore.QSize(181, 16777215))
-        self.repReceptionFichiers.setObjectName(_fromUtf8("repReceptionFichiers"))
-        self.gridLayout.addWidget(self.repReceptionFichiers, 1, 0, 1, 1)
-        self.envoiFichier = QtGui.QPushButton(self.tabFichiers)
-        self.envoiFichier.setMinimumSize(QtCore.QSize(86, 23))
-        self.envoiFichier.setMaximumSize(QtCore.QSize(180, 16777215))
-        self.envoiFichier.setObjectName(_fromUtf8("envoiFichier"))
-        self.gridLayout.addWidget(self.envoiFichier, 1, 1, 1, 1)
-        self.listFichiers = QtGui.QTreeWidget(self.tabFichiers)
-        self.listFichiers.setMinimumSize(QtCore.QSize(177, 78))
-        self.listFichiers.setMaximumSize(QtCore.QSize(369, 16777215))
-        self.listFichiers.setBaseSize(QtCore.QSize(0, 0))
-        self.listFichiers.setFrameShape(QtGui.QFrame.WinPanel)
-        self.listFichiers.setIndentation(2)
-        self.listFichiers.setColumnCount(3)
-        self.listFichiers.setObjectName(_fromUtf8("listFichiers"))
-        self.listFichiers.header().setDefaultSectionSize(28)
-        self.listFichiers.header().setMinimumSectionSize(27)
-        self.gridLayout.addWidget(self.listFichiers, 0, 0, 1, 2)
-        self.tabStatutAppli.addTab(self.tabFichiers, _fromUtf8(""))
-        self.layoutPanneauDroite.addWidget(self.tabStatutAppli)
-        self.layoutPanneauDroite.setStretch(0, 1)
-        self.layoutPanneauDroite.setStretch(1, 7)
-        self.layoutPanneauDroite.setStretch(2, 1)
-        self.layoutPanneauDroite.setStretch(3, 1)
-        self.layoutPanneauDroite.setStretch(4, 10)
-        self.layoutPanneauDroite.setStretch(5, 1)
-        self.layoutPanneauDroite.setStretch(6, 1)
-        self.horizontalLayout.addLayout(self.layoutPanneauDroite)
-        principal.setCentralWidget(self.baseWidget)
-        self.menubar = QtGui.QMenuBar(principal)
-        self.menubar.setGeometry(QtCore.QRect(0, 0, 882, 21))
-        self.menubar.setObjectName(_fromUtf8("menubar"))
-        self.menuFichier = QtGui.QMenu(self.menubar)
-        self.menuFichier.setObjectName(_fromUtf8("menuFichier"))
-        self.menuEditer = QtGui.QMenu(self.menubar)
-        self.menuEditer.setObjectName(_fromUtf8("menuEditer"))
-        self.menuAide = QtGui.QMenu(self.menubar)
-        self.menuAide.setObjectName(_fromUtf8("menuAide"))
-        principal.setMenuBar(self.menubar)
-        self.statusbar = QtGui.QStatusBar(principal)
-        self.statusbar.setObjectName(_fromUtf8("statusbar"))
-        principal.setStatusBar(self.statusbar)
-        self.actionOuvrir = QtGui.QAction(principal)
-        self.actionOuvrir.setObjectName(_fromUtf8("actionOuvrir"))
-        self.actionEnregistrer = QtGui.QAction(principal)
-        self.actionEnregistrer.setObjectName(_fromUtf8("actionEnregistrer"))
-        self.actionQuitter = QtGui.QAction(principal)
-        self.actionQuitter.setObjectName(_fromUtf8("actionQuitter"))
-        self.actionA_propos_de_D_Monde = QtGui.QAction(principal)
-        self.actionA_propos_de_D_Monde.setObjectName(_fromUtf8("actionA_propos_de_D_Monde"))
-        self.actionParam_tres = QtGui.QAction(principal)
-        self.actionParam_tres.setObjectName(_fromUtf8("actionParam_tres"))
-        self.actionLexique = QtGui.QAction(principal)
-        self.actionLexique.setObjectName(_fromUtf8("actionLexique"))
-        self.menuFichier.addAction(self.actionOuvrir)
-        self.menuFichier.addAction(self.actionEnregistrer)
-        self.menuFichier.addSeparator()
-        self.menuFichier.addAction(self.actionQuitter)
-        self.menuEditer.addAction(self.actionParam_tres)
-        self.menuAide.addAction(self.actionA_propos_de_D_Monde)
-        self.menuAide.addAction(self.actionLexique)
-        self.menubar.addAction(self.menuFichier.menuAction())
-        self.menubar.addAction(self.menuEditer.menuAction())
-        self.menubar.addAction(self.menuAide.menuAction())
-
-        self.retranslateUi(principal)
-        self.tabWidget.setCurrentIndex(0)
-        self.tabStatutAppli.setCurrentIndex(1)
-        QtCore.QMetaObject.connectSlotsByName(principal)
-
-    def retranslateUi(self, principal):
-        principal.setWindowTitle(_translate("principal", "D-Monde", None))
-        self.newW.setText(_translate("principal", "Nouvelle", None))
-        self.ligne.setText(_translate("principal", "Ligne", None))
-        self.texte.setText(_translate("principal", "Texte", None))
-        self.plusJeton.setText(_translate("principal", "+", None))
-        self.moinsJeton.setText(_translate("principal", "-", None))
-        self.label_4.setText(_translate("principal", "Jetons", None))
-        self.label_5.setText(_translate("principal", "Fenetres", None))
-        self.butStatut.setText(_translate("principal", "Statut", None))
-        self.butType.setText(_translate("principal", "Type", None))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Combats_tab), _translate("principal", "Combats", None))
-        self.points.setText(_translate("principal", "Points", None))
-        self.itineraire.setText(_translate("principal", "Itinéraire", None))
-        self.texte_2.setText(_translate("principal", "Texte", None))
-        self.dessin.setText(_translate("principal", "Dessin", None))
-        self.supp.setText(_translate("principal", "Supprimer", None))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Monde_tab), _translate("principal", "Monde", None))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Groupe_tab), _translate("principal", "Groupe", None))
-        self.label.setText(_translate("principal", "Evenements", None))
-        self.d20.setText(_translate("principal", "D20", None))
-        self.d100.setText(_translate("principal", "D100", None))
-        self.inJetDes.setPlaceholderText(_translate("principal", "Autre lancer (ex: 1d4+6d6)", None))
-        self.label_3.setText(_translate("principal", "Chat", None))
-        self.chatVoc.setText(_translate("principal", "Chat vocal", None))
-        self.inChat.setPlaceholderText(_translate("principal", "Entrez votre message...", None))
-        self.txtStatutCoPseudo.setText(_translate("principal", "Pseudo : ", None))
-        self.txtStatutCoServeur.setText(_translate("principal", "Serveur : Aucun serveur", None))
-        self.txtStatutCoServeurVoc.setText(_translate("principal", "Serveur vocal : Aucun serveur vocal", None))
-        self.txtStatutCoDebits.setText(_translate("principal", "Débits : E 0 ko/s  -  R 0 ko/s", None))
-        self.txtStatutCoEcranCo.setText(_translate("principal", "Ecran de connexion", None))
-        self.tabStatutAppli.setTabText(self.tabStatutAppli.indexOf(self.tabConnexion), _translate("principal", "Connexion", None))
-        self.label_2.setText(_translate("principal", "Double-cliquer pour ouvrir un chat privé", None))
-        self.tabStatutAppli.setTabText(self.tabStatutAppli.indexOf(self.tabJoueurs), _translate("principal", "Joueurs", None))
-        self.repReceptionFichiers.setText(_translate("principal", "Rep. recept.", None))
-        self.envoiFichier.setText(_translate("principal", "Envoi fichier", None))
-        self.listFichiers.headerItem().setText(0, _translate("principal", "E/R", None))
-        self.listFichiers.headerItem().setText(1, _translate("principal", "%", None))
-        self.listFichiers.headerItem().setText(2, _translate("principal", "Fichier", None))
-        self.tabStatutAppli.setTabText(self.tabStatutAppli.indexOf(self.tabFichiers), _translate("principal", "Fichiers", None))
-        self.menuFichier.setTitle(_translate("principal", "Fichier", None))
-        self.menuEditer.setTitle(_translate("principal", "Editer", None))
-        self.menuAide.setTitle(_translate("principal", "Aide", None))
-        self.actionOuvrir.setText(_translate("principal", "Ouvrir", None))
-        self.actionEnregistrer.setText(_translate("principal", "Enregistrer", None))
-        self.actionQuitter.setText(_translate("principal", "Quitter", None))
-        self.actionA_propos_de_D_Monde.setText(_translate("principal", "A propos de DéMonde...", None))
-        self.actionParam_tres.setText(_translate("principal", "Paramètres", None))
-        self.actionLexique.setText(_translate("principal", "Lexique", None))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    principal = QtGui.QMainWindow()
-    ui = Ui_principal()
-    ui.setupUi(principal)
-    principal.show()
-    sys.exit(app.exec_())
-

+ 0 - 83
interface_qt8_2/envoiFichier.ui

@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>envoiFichiers</class>
- <widget class="QWidget" name="envoiFichiers">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>543</width>
-    <height>422</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Envoi de fichiers</string>
-  </property>
-  <widget class="QPushButton" name="pushButton">
-   <property name="geometry">
-    <rect>
-     <x>180</x>
-     <y>30</y>
-     <width>151</width>
-     <height>31</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Envoyer un fichier</string>
-   </property>
-  </widget>
-  <widget class="QTreeWidget" name="treeWidget">
-   <property name="geometry">
-    <rect>
-     <x>20</x>
-     <y>80</y>
-     <width>501</width>
-     <height>281</height>
-    </rect>
-   </property>
-   <property name="columnCount">
-    <number>2</number>
-   </property>
-   <column>
-    <property name="text">
-     <string>Fichier</string>
-    </property>
-   </column>
-   <column>
-    <property name="text">
-     <string>Statut</string>
-    </property>
-   </column>
-   <item>
-    <property name="text">
-     <string>Nouvel élément</string>
-    </property>
-    <item>
-     <property name="text">
-      <string>Nouveau sous-élément</string>
-     </property>
-    </item>
-    <item>
-     <property name="text">
-      <string>Nouveau sous-élément</string>
-     </property>
-    </item>
-   </item>
-  </widget>
-  <widget class="QPushButton" name="pushButton_2">
-   <property name="geometry">
-    <rect>
-     <x>350</x>
-     <y>370</y>
-     <width>151</width>
-     <height>21</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>Annuler l'envoi</string>
-   </property>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 0 - 81
interface_qt8_2/lancer.py

@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-"""lancer de des"""
-from random import *
-from operator import add
-
-def de(faces):
-    """resultat d'un de avec nbre de faces en parametre"""
-    return randint(1,faces)
-   
-def jet(expr):
-    """effectue un jet de de a partir d'expressions de type '1d20+3' -
-    retourne un resultat chiffre et un resultat detaille."""
-    decoupage = lancer = []
-    estDe = False
-    nb = res = 0
-    resDetaille = signe = tmp = ""
-
-    #on decoupe la chaine en se basant sur tout ce qui n'est pas un chiffre:
-    if expr:
-        expr += " "
-        for car in expr:
-            try:
-                #le caractere est-il un chiffre? si oui, on le stocke dans tmp
-                tmp += str(int(car))
-            except:
-                #si ce n'est pas un chiffre, qu'est-ce?
-                if car.lower() == "d":
-                   estDe = True
-                   nb = int(tmp)
-                   lancer = []
-                   tmp = ""
-                   #on garde en memoire le nombre stocke dans tmp,
-                   #puis on attend le prochain tmp pour effectuer le jet de de
-                else:
-                   if estDe:
-                       #on lance le de
-                       i = 0
-                       while i < nb:
-                           lancer.append(de(int(tmp)))
-                           i+=1
-                       decoupage.append(lancer)
-                       decoupage.append(car)
-                       estDe = False
-                       tmp = ""
-                   else:    
-                       decoupage.append(tmp)
-                       if car != " ":
-                           decoupage.append(car)
-                       tmp = ""
-
-        decoupage.append(tmp)
-        #on calcule ensuite tout ca:
-        for elt in decoupage:
-            if type(elt) == list:
-              elt = int(sum(elt[:])) 
-            try:
-               elt = int(elt)
-               if signe == "-":
-                   elt = -1 * elt
-               res += elt    
-            except:
-               signe = elt      
-
-        #on met en forme le resultat detaille
-        for elt in decoupage:
-           if type(elt) == list:
-               elt = map(str, elt) 
-               elt = ",".join(elt)
-           resDetaille += " "+str(elt)        
-        resDetaille = resDetaille.replace(" ","")
-    
-    return (res, resDetaille)
-
-
-if __name__ == "__main__":
-# si lancement direct:
-    while True:
-        lancer = jet(raw_input(" > "))
-        print("{} ({})".format(lancer[0], lancer[1]))
-  
-

+ 0 - 72
interface_qt8_2/lecture.py

@@ -1,72 +0,0 @@
-# -*-coding:Latin-1 -*
-"""lecture d'un flux audio mp3"""
-from time import sleep
-from threading import Thread
-
-#modules complémentaires
-import pymedia.audio.sound as sound
-import pymedia.audio.acodec as acodec
-
-class Lecture(Thread):
-    """instance de lecture audio d'un flux mp3"""
-    def __init__(self, identifiant, cparams, debug):
-        """création du fil de lecture"""
-        self.Terminated = False
-        Thread.__init__(self)
-        self.debug = debug
-        self.dec = acodec.Decoder(cparams)
-        self.sortie = sound.Output( cparams["sample_rate"], 1, sound.AFMT_S16_LE, 0 )
-        if self.debug:
-            self.recept = open( "{}.mp3".format(identifiant), 'wb' )
-   
-    def lire(self, recu):
-       """reception des donnees a lire"""
-       retour = ""
-       if recu:
-            son_decode = self.dec.decode(recu)
-            if self.debug:
-                self.recept.write(recu) 
-            if son_decode:
-                self.sortie.play(son_decode.data) 
-       
-    def run(self):
-        """boucle vide"""
-        while not self.Terminated:
-            sleep(0.1)   
-
-    def stop(self):
-        """Fermeture du fil de lecture"""
-        print("Fin de la lecture\n")
-        self.Terminated = True
-        if self.debug:
-           self.recept.close()
-
-
-if __name__ == "__main__":
-# si lancement direct:
-   micro = sound.Input( 22050, 1, sound.AFMT_S16_LE, 0 ) 
-   micro.start()
-   cparams= { 'id': acodec.getCodecID( 'mp3' ),
-              'bitrate': 32000,
-              'sample_rate': 22050,
-              'channels': 1 }
-   ac = acodec.Encoder( cparams )
-   le = Lecture("test_lecture", cparams, False)
-   le.start()
-   i = 0
-   
-   while True:
-      try:
-           i += 1
-           son = micro.getData()
-           if son and len(son):
-               son_encode = ac.encode(son)
-               print("".format(i))
-               for fr in son_encode:
-                   print(le.lire(fr))
-      except KeyboardInterrupt:
-         break
-
-   micro.stop()
-   le.stop()
-           

+ 0 - 1000
interface_qt8_2/mainwindow.ui

@@ -1,1000 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>principal</class>
- <widget class="QMainWindow" name="principal">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>882</width>
-    <height>623</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>882</width>
-    <height>623</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>D-Monde</string>
-  </property>
-  <widget class="QWidget" name="baseWidget">
-   <layout class="QHBoxLayout" name="horizontalLayout">
-    <item>
-     <widget class="QTabWidget" name="tabWidget">
-      <property name="minimumSize">
-       <size>
-        <width>641</width>
-        <height>561</height>
-       </size>
-      </property>
-      <property name="currentIndex">
-       <number>0</number>
-      </property>
-      <widget class="QWidget" name="Combats_tab">
-       <attribute name="title">
-        <string>Combats</string>
-       </attribute>
-       <widget class="QFrame" name="frame_2">
-        <property name="geometry">
-         <rect>
-          <x>0</x>
-          <y>0</y>
-          <width>71</width>
-          <height>531</height>
-         </rect>
-        </property>
-        <property name="palette">
-         <palette>
-          <active>
-           <colorrole role="Button">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>170</green>
-              <blue>255</blue>
-             </color>
-            </brush>
-           </colorrole>
-           <colorrole role="Base">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>0</green>
-              <blue>0</blue>
-             </color>
-            </brush>
-           </colorrole>
-          </active>
-          <inactive>
-           <colorrole role="Button">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>170</green>
-              <blue>255</blue>
-             </color>
-            </brush>
-           </colorrole>
-           <colorrole role="Base">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>0</green>
-              <blue>0</blue>
-             </color>
-            </brush>
-           </colorrole>
-          </inactive>
-          <disabled>
-           <colorrole role="Button">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>170</green>
-              <blue>255</blue>
-             </color>
-            </brush>
-           </colorrole>
-           <colorrole role="Base">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>240</red>
-              <green>240</green>
-              <blue>240</blue>
-             </color>
-            </brush>
-           </colorrole>
-          </disabled>
-         </palette>
-        </property>
-        <property name="frameShape">
-         <enum>QFrame::StyledPanel</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Raised</enum>
-        </property>
-        <widget class="QPushButton" name="newW">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>20</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Nouvelle</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="ligne">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>50</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Ligne</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="texte">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>80</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Texte</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="plusJeton">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>370</y>
-           <width>31</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>+</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="moinsJeton">
-         <property name="geometry">
-          <rect>
-           <x>40</x>
-           <y>370</y>
-           <width>31</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>-</string>
-         </property>
-        </widget>
-        <widget class="QLabel" name="label_4">
-         <property name="geometry">
-          <rect>
-           <x>10</x>
-           <y>350</y>
-           <width>51</width>
-           <height>16</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Jetons</string>
-         </property>
-        </widget>
-        <widget class="QLabel" name="label_5">
-         <property name="geometry">
-          <rect>
-           <x>10</x>
-           <y>0</y>
-           <width>51</width>
-           <height>16</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Fenetres</string>
-         </property>
-        </widget>
-        <widget class="QLineEdit" name="nameJeton">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>400</y>
-           <width>71</width>
-           <height>20</height>
-          </rect>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="butStatut">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>430</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Statut</string>
-         </property>
-        </widget>
-        <widget class="QLineEdit" name="statut">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>460</y>
-           <width>71</width>
-           <height>20</height>
-          </rect>
-         </property>
-        </widget>
-        <widget class="QLineEdit" name="type">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>140</y>
-           <width>71</width>
-           <height>20</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="butType">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>110</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Type</string>
-         </property>
-        </widget>
-       </widget>
-       <widget class="QGraphicsView" name="vuePlateau">
-        <property name="geometry">
-         <rect>
-          <x>80</x>
-          <y>10</y>
-          <width>551</width>
-          <height>521</height>
-         </rect>
-        </property>
-       </widget>
-      </widget>
-      <widget class="QWidget" name="Monde_tab">
-       <attribute name="title">
-        <string>Monde</string>
-       </attribute>
-       <widget class="QFrame" name="frame">
-        <property name="geometry">
-         <rect>
-          <x>0</x>
-          <y>0</y>
-          <width>71</width>
-          <height>531</height>
-         </rect>
-        </property>
-        <property name="palette">
-         <palette>
-          <active>
-           <colorrole role="Button">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>170</green>
-              <blue>255</blue>
-             </color>
-            </brush>
-           </colorrole>
-           <colorrole role="Base">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>0</green>
-              <blue>0</blue>
-             </color>
-            </brush>
-           </colorrole>
-          </active>
-          <inactive>
-           <colorrole role="Button">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>170</green>
-              <blue>255</blue>
-             </color>
-            </brush>
-           </colorrole>
-           <colorrole role="Base">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>0</green>
-              <blue>0</blue>
-             </color>
-            </brush>
-           </colorrole>
-          </inactive>
-          <disabled>
-           <colorrole role="Button">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>170</red>
-              <green>170</green>
-              <blue>255</blue>
-             </color>
-            </brush>
-           </colorrole>
-           <colorrole role="Base">
-            <brush brushstyle="SolidPattern">
-             <color alpha="255">
-              <red>240</red>
-              <green>240</green>
-              <blue>240</blue>
-             </color>
-            </brush>
-           </colorrole>
-          </disabled>
-         </palette>
-        </property>
-        <property name="frameShape">
-         <enum>QFrame::StyledPanel</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Raised</enum>
-        </property>
-        <widget class="QPushButton" name="points">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>0</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Points</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="itineraire">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>30</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Itinéraire</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="texte_2">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>60</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Texte</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="dessin">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>90</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Dessin</string>
-         </property>
-        </widget>
-        <widget class="QPushButton" name="supp">
-         <property name="geometry">
-          <rect>
-           <x>0</x>
-           <y>120</y>
-           <width>71</width>
-           <height>31</height>
-          </rect>
-         </property>
-         <property name="text">
-          <string>Supprimer</string>
-         </property>
-        </widget>
-       </widget>
-      </widget>
-      <widget class="QWidget" name="Groupe_tab">
-       <attribute name="title">
-        <string>Groupe</string>
-       </attribute>
-      </widget>
-     </widget>
-    </item>
-    <item>
-     <layout class="QVBoxLayout" name="layoutPanneauDroite" stretch="1,7,1,1,10,1,1">
-      <property name="sizeConstraint">
-       <enum>QLayout::SetFixedSize</enum>
-      </property>
-      <item>
-       <widget class="QLabel" name="label">
-        <property name="minimumSize">
-         <size>
-          <width>199</width>
-          <height>13</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>369</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="font">
-         <font>
-          <weight>75</weight>
-          <bold>true</bold>
-         </font>
-        </property>
-        <property name="text">
-         <string>Evenements</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QListWidget" name="listEvenement">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-          <horstretch>20</horstretch>
-          <verstretch>20</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>199</width>
-          <height>73</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>369</width>
-          <height>16777215</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="layoutDes" stretch="1,1,3">
-        <property name="spacing">
-         <number>3</number>
-        </property>
-        <property name="sizeConstraint">
-         <enum>QLayout::SetNoConstraint</enum>
-        </property>
-        <item>
-         <widget class="QPushButton" name="d20">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>53</width>
-            <height>23</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>72</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>D20</string>
-          </property>
-          <property name="autoDefault">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="d100">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>52</width>
-            <height>23</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>72</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>D100</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLineEdit" name="inJetDes">
-          <property name="minimumSize">
-           <size>
-            <width>86</width>
-            <height>20</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>217</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="whatsThis">
-           <string/>
-          </property>
-          <property name="inputMask">
-           <string/>
-          </property>
-          <property name="placeholderText">
-           <string>Autre lancer (ex: 1d4+6d6)</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="layoutEnTeteChat" stretch="0,1">
-        <item>
-         <widget class="QLabel" name="label_3">
-          <property name="minimumSize">
-           <size>
-            <width>10</width>
-            <height>23</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>271</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="font">
-           <font>
-            <weight>75</weight>
-            <bold>true</bold>
-           </font>
-          </property>
-          <property name="text">
-           <string>Chat</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="chatVoc">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>64</width>
-            <height>23</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>90</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>Chat vocal</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <widget class="QListWidget" name="listAffichage">
-        <property name="minimumSize">
-         <size>
-          <width>199</width>
-          <height>96</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>369</width>
-          <height>16777215</height>
-         </size>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QLineEdit" name="inChat">
-        <property name="minimumSize">
-         <size>
-          <width>199</width>
-          <height>20</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>369</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="placeholderText">
-         <string>Entrez votre message...</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QTabWidget" name="tabStatutAppli">
-        <property name="minimumSize">
-         <size>
-          <width>201</width>
-          <height>151</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>369</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="currentIndex">
-         <number>1</number>
-        </property>
-        <widget class="QWidget" name="tabConnexion">
-         <attribute name="title">
-          <string>Connexion</string>
-         </attribute>
-         <layout class="QVBoxLayout" name="verticalLayout_2">
-          <item>
-           <widget class="QLabel" name="txtStatutCoPseudo">
-            <property name="minimumSize">
-             <size>
-              <width>179</width>
-              <height>13</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>16777215</width>
-              <height>18</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Pseudo : </string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="txtStatutCoServeur">
-            <property name="minimumSize">
-             <size>
-              <width>179</width>
-              <height>13</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>16777215</width>
-              <height>18</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Serveur : Aucun serveur</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="txtStatutCoServeurVoc">
-            <property name="minimumSize">
-             <size>
-              <width>179</width>
-              <height>13</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>16777215</width>
-              <height>17</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Serveur vocal : Aucun serveur vocal</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="txtStatutCoDebits">
-            <property name="minimumSize">
-             <size>
-              <width>179</width>
-              <height>0</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>16777215</width>
-              <height>18</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Débits : E 0 ko/s  -  R 0 ko/s</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QPushButton" name="txtStatutCoEcranCo">
-            <property name="minimumSize">
-             <size>
-              <width>179</width>
-              <height>23</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>16777215</width>
-              <height>23</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Ecran de connexion</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="tabJoueurs">
-         <attribute name="title">
-          <string>Joueurs</string>
-         </attribute>
-         <layout class="QVBoxLayout" name="verticalLayout">
-          <item>
-           <widget class="QListWidget" name="lstStatutJoueurs">
-            <property name="minimumSize">
-             <size>
-              <width>177</width>
-              <height>0</height>
-             </size>
-            </property>
-            <property name="font">
-             <font>
-              <family>Segoe UI Semibold</family>
-              <pointsize>10</pointsize>
-              <weight>50</weight>
-              <bold>false</bold>
-             </font>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::WinPanel</enum>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="label_2">
-            <property name="font">
-             <font>
-              <italic>true</italic>
-             </font>
-            </property>
-            <property name="text">
-             <string>Double-cliquer pour ouvrir un chat privé</string>
-            </property>
-            <property name="wordWrap">
-             <bool>false</bool>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-        <widget class="QWidget" name="tabFichiers">
-         <attribute name="title">
-          <string>Fichiers</string>
-         </attribute>
-         <layout class="QGridLayout" name="gridLayout">
-          <item row="1" column="0">
-           <widget class="QPushButton" name="repReceptionFichiers">
-            <property name="minimumSize">
-             <size>
-              <width>85</width>
-              <height>23</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>181</width>
-              <height>16777215</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Rep. recept.</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QPushButton" name="envoiFichier">
-            <property name="minimumSize">
-             <size>
-              <width>86</width>
-              <height>23</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>180</width>
-              <height>16777215</height>
-             </size>
-            </property>
-            <property name="text">
-             <string>Envoi fichier</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="0" colspan="2">
-           <widget class="QTreeWidget" name="listFichiers">
-            <property name="minimumSize">
-             <size>
-              <width>177</width>
-              <height>78</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>369</width>
-              <height>16777215</height>
-             </size>
-            </property>
-            <property name="baseSize">
-             <size>
-              <width>0</width>
-              <height>0</height>
-             </size>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::WinPanel</enum>
-            </property>
-            <property name="indentation">
-             <number>2</number>
-            </property>
-            <property name="columnCount">
-             <number>3</number>
-            </property>
-            <attribute name="headerDefaultSectionSize">
-             <number>28</number>
-            </attribute>
-            <attribute name="headerMinimumSectionSize">
-             <number>27</number>
-            </attribute>
-            <column>
-             <property name="text">
-              <string>E/R</string>
-             </property>
-            </column>
-            <column>
-             <property name="text">
-              <string>%</string>
-             </property>
-            </column>
-            <column>
-             <property name="text">
-              <string>Fichier</string>
-             </property>
-            </column>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </widget>
-      </item>
-     </layout>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QMenuBar" name="menubar">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>882</width>
-     <height>21</height>
-    </rect>
-   </property>
-   <widget class="QMenu" name="menuFichier">
-    <property name="title">
-     <string>Fichier</string>
-    </property>
-    <addaction name="actionOuvrir"/>
-    <addaction name="actionEnregistrer"/>
-    <addaction name="separator"/>
-    <addaction name="actionQuitter"/>
-   </widget>
-   <widget class="QMenu" name="menuEditer">
-    <property name="title">
-     <string>Editer</string>
-    </property>
-    <addaction name="actionParam_tres"/>
-   </widget>
-   <widget class="QMenu" name="menuAide">
-    <property name="title">
-     <string>Aide</string>
-    </property>
-    <addaction name="actionA_propos_de_D_Monde"/>
-    <addaction name="actionLexique"/>
-   </widget>
-   <addaction name="menuFichier"/>
-   <addaction name="menuEditer"/>
-   <addaction name="menuAide"/>
-  </widget>
-  <widget class="QStatusBar" name="statusbar"/>
-  <action name="actionOuvrir">
-   <property name="text">
-    <string>Ouvrir</string>
-   </property>
-  </action>
-  <action name="actionEnregistrer">
-   <property name="text">
-    <string>Enregistrer</string>
-   </property>
-  </action>
-  <action name="actionQuitter">
-   <property name="text">
-    <string>Quitter</string>
-   </property>
-  </action>
-  <action name="actionA_propos_de_D_Monde">
-   <property name="text">
-    <string>A propos de DéMonde...</string>
-   </property>
-  </action>
-  <action name="actionParam_tres">
-   <property name="text">
-    <string>Paramètres</string>
-   </property>
-  </action>
-  <action name="actionLexique">
-   <property name="text">
-    <string>Lexique</string>
-   </property>
-  </action>
- </widget>
- <resources/>
- <connections/>
-</ui>

BIN
interface_qt8_2/maquette_plateauCombat.docx


BIN
interface_qt8_2/msvcp90.dll


BIN
interface_qt8_2/notes/a_reflexion echange fichiers.docx


BIN
interface_qt8_2/notes/echanges.docx


BIN
interface_qt8_2/parametresCo


+ 0 - 82
interface_qt8_2/plateau.py

@@ -1,82 +0,0 @@
-from test_graphiques import Ui_Form
-import sys, os, time
-from PyQt4 import QtCore,QtGui, QtOpenGL
-
-class Plateau(QtGui.QWidget):
-    def __init__(self):
-        QtGui.QWidget.__init__(self)
-        self.ui = Ui_Form()
-        self.ui.setupUi(self)
-
-        self.scene = QtGui.QGraphicsScene()
-        self.ui.view.setScene(self.scene)
-        self.scene.setSceneRect(0,0,self.ui.view.width(),self.ui.view.height())
-        self.ui.view.setViewport(QtOpenGL.QGLWidget())
-        self.cases = {}
-        
-        self.majQuadrillage(10,10)
-        self.nouveauPion()
-
-
-    def majQuadrillage(self, x, y):
-        #autre essai avec des rectancgles
-        if x > 0 and y > 0 and x == int(x) and y == int(y):
-            i = 1
-            lPlateau = self.ui.view.width()
-            hPlateau = self.ui.view.height()
-            self.cCase = int(lPlateau / x)  #cote de la case
-            
-            pinceau = QtGui.QPen()
-            pinceau.setColor(QtGui.QColor(85, 85, 85, 85))
-            pinceau.setWidth(1)
-            
-            #cree les cases
-            for i in range(x):
-                for j in range(y):
-                    self.cases[(i,j)] = QtGui.QGraphicsRectItem(i*self.cCase, j*self.cCase, self.cCase, self.cCase)
-                    self.cases[(i,j)].setPen(pinceau)
-                    self.scene.addItem(self.cases[(i,j)])
-
-
-    def nouveauPion(self):
-        #creation d'un pion
-        pinceau = QtGui.QPen()
-        pinceau.setColor(QtGui.QColor(0, 0, 0, 120))
-        pinceau.setWidth(2)
-        self.pion = QtGui.QGraphicsEllipseItem(0, 0, self.cCase, self.cCase)
-        self.pion.setPen(pinceau)
-        self.pion.setFlag(QtGui.QGraphicsItem.ItemIsMovable)
-        self.pion.setFlag(QtGui.QGraphicsItem.ItemIsFocusable)
-        self.pion.setBrush(QtGui.QColor(255, 0, 0, 150))
-
-        #options graphiques
-        painter = QtGui.QPainter()
-        painter.setRenderHints(QtGui.QPainter.Antialiasing, True)
-        self.pion.paint(painter, 1)
-
-
-        #ombre
-        self.shadow = QtGui.QGraphicsDropShadowEffect() 
-        self.shadow.setColor(QtGui.QColor(50, 50, 50, 200)) 
-        self.shadow.setXOffset(1) 
-        self.shadow.setYOffset(1) 
-        self.shadow.setBlurRadius(3) 
-        self.pion.setGraphicsEffect(self.shadow)
-        self.shadow.setEnabled(True)
-
-        #recentrage
-        #self.pion.mousePressEvent(self.test())
-        self.pion.setAcceptHoverEvents(True)
-        #self.pion.mouseReleaseEvent(self.test())
-        self.scene.addItem(self.pion)
-    
-
-
-def main():
-    app = QtGui.QApplication(sys.argv)
-    window = Main()
-    window.show()
-    sys.exit(app.exec_())  
-
-if __name__ == "__main__":
-    main()

+ 0 - 611
interface_qt8_2/prog.log

@@ -1,611 +0,0 @@
-[2014-07-05 13:50:00,007] DEBUG-     ----------------------    
-
-[2014-07-05 13:50:00,058] INFO- Erreur: parametresCo introuvable
-[2014-07-05 13:50:12,677] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 13:50:12,717] INFO- mon id est: 01
-
-[2014-07-05 13:51:50,026] DEBUG-     ----------------------    
-
-[2014-07-05 13:51:50,052] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 13:51:51,457] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 13:51:51,463] INFO- mon id est: 01
-
-[2014-07-05 14:08:48,173] DEBUG-     ----------------------    
-
-[2014-07-05 14:08:48,197] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 14:08:49,747] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 14:08:49,752] INFO- mon id est: 01
-
-[2014-07-05 14:16:14,983] DEBUG-     ----------------------    
-
-[2014-07-05 14:16:15,030] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 14:16:19,086] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 14:16:19,180] INFO- mon id est: 01
-
-[2014-07-05 14:17:50,112] DEBUG-     ----------------------    
-
-[2014-07-05 14:17:50,144] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 14:18:25,431] DEBUG-     ----------------------    
-
-[2014-07-05 14:18:25,463] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 14:18:26,789] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 14:18:26,867] INFO- mon id est: 01
-
-[2014-07-05 14:47:23,293] DEBUG-     ----------------------    
-
-[2014-07-05 14:47:23,325] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 14:47:24,790] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 14:47:24,790] INFO- mon id est: 01
-
-[2014-07-05 15:02:40,694] DEBUG-     ----------------------    
-
-[2014-07-05 15:02:40,726] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:02:41,723] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:02:41,723] INFO- mon id est: 01
-
-[2014-07-05 15:04:39,785] DEBUG-     ----------------------    
-
-[2014-07-05 15:04:39,801] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:04:40,892] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:04:40,892] INFO- mon id est: 01
-
-[2014-07-05 15:05:43,401] DEBUG-     ----------------------    
-
-[2014-07-05 15:05:43,417] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:05:44,415] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:05:44,431] INFO- mon id est: 01
-
-[2014-07-05 15:06:40,233] DEBUG-     ----------------------    
-
-[2014-07-05 15:06:40,263] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:06:41,512] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:06:41,512] INFO- mon id est: 01
-
-[2014-07-05 15:07:21,901] DEBUG-     ----------------------    
-
-[2014-07-05 15:07:21,931] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:07:23,132] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:07:23,132] INFO- mon id est: 01
-
-[2014-07-05 15:07:39,404] DEBUG-     ----------------------    
-
-[2014-07-05 15:07:39,434] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:07:40,559] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:07:40,559] INFO- mon id est: 01
-
-[2014-07-05 15:09:36,342] DEBUG-     ----------------------    
-
-[2014-07-05 15:09:36,374] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:09:37,217] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:09:37,232] INFO- mon id est: 01
-
-[2014-07-05 15:10:55,638] DEBUG-     ----------------------    
-
-[2014-07-05 15:10:55,668] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:10:56,605] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:10:56,605] INFO- mon id est: 01
-
-[2014-07-05 15:12:45,711] DEBUG-     ----------------------    
-
-[2014-07-05 15:12:45,726] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:12:46,756] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:12:46,773] INFO- mon id est: 01
-
-[2014-07-05 15:24:49,164] DEBUG-     ----------------------    
-
-[2014-07-05 15:24:49,197] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:24:50,289] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:24:50,289] INFO- mon id est: 01
-
-[2014-07-05 15:26:18,351] DEBUG-     ----------------------    
-
-[2014-07-05 15:26:18,381] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:26:19,536] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:26:19,568] INFO- mon id est: 01
-
-[2014-07-05 15:27:27,927] DEBUG-     ----------------------    
-
-[2014-07-05 15:27:27,957] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:27:29,049] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:27:29,049] INFO- mon id est: 01
-
-[2014-07-05 15:30:54,081] DEBUG-     ----------------------    
-
-[2014-07-05 15:30:54,111] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:30:55,173] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:30:55,173] INFO- mon id est: 01
-
-[2014-07-05 15:31:58,805] DEBUG-     ----------------------    
-
-[2014-07-05 15:31:58,821] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-05 15:31:59,913] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-05 15:31:59,928] INFO- mon id est: 01
-
-[2014-07-07 16:32:13,309] DEBUG-     ----------------------    
-
-[2014-07-07 16:32:13,341] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:32:16,819] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:32:16,835] INFO- mon id est: 01
-
-[2014-07-07 16:36:34,032] DEBUG-     ----------------------    
-
-[2014-07-07 16:36:34,063] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:36:35,451] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:36:35,467] INFO- mon id est: 01
-
-[2014-07-07 16:38:17,148] DEBUG-     ----------------------    
-
-[2014-07-07 16:38:17,180] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:38:19,020] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:38:19,052] INFO- mon id est: 01
-
-[2014-07-07 16:39:47,753] DEBUG-     ----------------------    
-
-[2014-07-07 16:39:47,785] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:40:52,012] DEBUG-     ----------------------    
-
-[2014-07-07 16:40:52,042] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:40:53,322] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:40:53,338] INFO- mon id est: 01
-
-[2014-07-07 16:41:59,371] DEBUG-     ----------------------    
-
-[2014-07-07 16:41:59,404] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:42:00,480] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:42:00,526] INFO- mon id est: 01
-
-[2014-07-07 16:42:22,772] DEBUG-     ----------------------    
-
-[2014-07-07 16:42:22,803] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:42:30,743] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:42:30,822] INFO- mon id est: 01
-
-[2014-07-07 16:50:19,118] DEBUG-     ----------------------    
-
-[2014-07-07 16:50:19,134] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:50:20,289] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:50:20,289] INFO- mon id est: 01
-
-[2014-07-07 16:56:12,141] DEBUG-     ----------------------    
-
-[2014-07-07 16:56:12,167] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 16:56:13,263] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 16:56:13,276] INFO- mon id est: 01
-
-[2014-07-07 17:03:24,596] DEBUG-     ----------------------    
-
-[2014-07-07 17:03:24,612] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:03:25,877] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:03:25,877] INFO- mon id est: 01
-
-[2014-07-07 17:04:59,351] DEBUG-     ----------------------    
-
-[2014-07-07 17:04:59,382] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:05:00,661] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:05:00,677] INFO- mon id est: 01
-
-[2014-07-07 17:05:32,549] DEBUG-     ----------------------    
-
-[2014-07-07 17:05:32,579] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:05:52,595] DEBUG-     ----------------------    
-
-[2014-07-07 17:05:52,625] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:05:53,500] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:05:53,515] INFO- mon id est: 01
-
-[2014-07-07 17:06:30,424] DEBUG-     ----------------------    
-
-[2014-07-07 17:06:30,456] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:06:31,891] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:06:31,984] INFO- mon id est: 01
-
-[2014-07-07 17:07:42,730] DEBUG-     ----------------------    
-
-[2014-07-07 17:07:42,762] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:07:43,947] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:07:44,026] INFO- mon id est: 01
-
-[2014-07-07 17:07:47,910] DEBUG-     ----------------------    
-
-[2014-07-07 17:07:47,941] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:07:48,845] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:07:56,631] INFO- mon id est: 02
-
-[2014-07-07 17:07:56,661] INFO- reg s'est connecte (02)
-[2014-07-07 17:08:02,246] INFO- reg est deja present [01]
-[2014-07-07 17:08:33,634] DEBUG-     ----------------------    
-
-[2014-07-07 17:08:33,651] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:08:34,960] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:08:35,023] INFO- mon id est: 03
-
-[2014-07-07 17:08:35,085] INFO- reg s'est connecte (03)
-[2014-07-07 17:08:35,101] INFO- reg s'est connecte (03)
-[2014-07-07 17:08:35,117] INFO- reg est deja present [02]
-[2014-07-07 17:08:35,178] INFO- reg est deja present [01]
-[2014-07-07 17:08:54,789] DEBUG-     ----------------------    
-
-[2014-07-07 17:08:54,851] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:08:56,286] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:08:56,316] INFO- mon id est: 04
-
-[2014-07-07 17:08:56,348] INFO- reg s'est connecte (04)
-[2014-07-07 17:08:56,364] INFO- reg s'est connecte (04)
-[2014-07-07 17:08:56,380] INFO- reg est deja present [02]
-[2014-07-07 17:08:56,380] INFO- reg s'est connecte (04)
-[2014-07-07 17:08:56,457] INFO- regcp010401sreg est deja present [03]
-[2014-07-07 17:09:17,142] DEBUG-     ----------------------    
-
-[2014-07-07 17:09:17,174] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:09:18,359] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:09:18,437] INFO- mon id est: 05
-
-[2014-07-07 17:09:18,469] INFO- reg s'est connecte (05)
-[2014-07-07 17:09:18,484] INFO- reg s'est connecte (05)
-[2014-07-07 17:09:18,500] INFO- reg s'est connecte (05)
-[2014-07-07 17:09:18,516] INFO- reg est deja present [02]
-[2014-07-07 17:09:18,516] INFO- reg s'est connecte (05)
-[2014-07-07 17:09:18,578] INFO- regcp010501sregcp040504creg est deja present [03]
-[2014-07-07 17:09:28,999] INFO- reg s'est deconnecte (05)
-[2014-07-07 17:09:28,999] INFO- reg s'est deconnecte (05)
-[2014-07-07 17:09:28,999] INFO- reg s'est deconnecte (05)
-[2014-07-07 17:09:28,999] INFO- reg s'est deconnecte (05)
-[2014-07-07 17:10:36,357] DEBUG-     ----------------------    
-
-[2014-07-07 17:10:36,382] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:10:37,783] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:10:37,859] INFO- mon id est: 01
-
-[2014-07-07 17:10:52,977] DEBUG-     ----------------------    
-
-[2014-07-07 17:10:53,003] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:10:53,911] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:10:53,921] INFO- mon id est: 01
-
-[2014-07-07 17:14:57,108] DEBUG-     ----------------------    
-
-[2014-07-07 17:14:57,138] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:14:58,214] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:14:58,278] INFO- mon id est: 01
-
-[2014-07-07 17:34:22,970] DEBUG-     ----------------------    
-
-[2014-07-07 17:34:22,984] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:34:24,497] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:34:24,513] INFO- mon id est: 01
-
-[2014-07-07 17:35:32,171] DEBUG-     ----------------------    
-
-[2014-07-07 17:35:32,203] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:35:38,209] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:35:44,137] INFO- mon id est: 02
-
-[2014-07-07 17:35:44,167] INFO- reg s'est connecte (02)
-[2014-07-07 17:35:51,826] INFO- reg est deja present [01]
-[2014-07-07 17:35:58,240] DEBUG-     ----------------------    
-
-[2014-07-07 17:35:58,270] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:35:59,285] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:35:59,301] INFO- mon id est: 01
-
-[2014-07-07 17:38:04,053] DEBUG-     ----------------------    
-
-[2014-07-07 17:38:04,085] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:38:05,365] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:38:05,365] INFO- mon id est: 01
-
-[2014-07-07 17:43:24,740] DEBUG-     ----------------------    
-
-[2014-07-07 17:43:24,755] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:43:26,003] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:43:26,003] INFO- mon id est: 01
-
-[2014-07-07 17:48:36,437] DEBUG-     ----------------------    
-
-[2014-07-07 17:48:36,463] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:48:37,802] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:48:37,809] INFO- mon id est: 01
-
-[2014-07-07 17:53:40,812] DEBUG-     ----------------------    
-
-[2014-07-07 17:53:40,842] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:53:41,888] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:53:41,904] INFO- mon id est: 01
-
-[2014-07-07 17:56:57,714] DEBUG-     ----------------------    
-
-[2014-07-07 17:56:57,730] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:56:58,869] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:56:58,869] INFO- mon id est: 01
-
-[2014-07-07 17:57:17,262] DEBUG-     ----------------------    
-
-[2014-07-07 17:57:17,292] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:57:20,756] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:57:24,578] INFO- mon id est: 02
-
-[2014-07-07 17:57:24,609] INFO- reg s'est connecte (02)
-[2014-07-07 17:57:24,625] INFO- reg est deja present [01]
-[2014-07-07 17:57:52,752] INFO- reg s'est deconnecte (02)
-[2014-07-07 17:58:03,546] DEBUG-     ----------------------    
-
-[2014-07-07 17:58:03,578] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 17:58:05,013] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 17:58:05,107] INFO- mon id est: 01
-
-[2014-07-07 18:00:48,377] DEBUG-     ----------------------    
-
-[2014-07-07 18:00:48,407] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:00:49,609] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:00:49,671] INFO- mon id est: 01
-
-[2014-07-07 18:01:10,013] DEBUG-     ----------------------    
-
-[2014-07-07 18:01:10,046] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:01:11,138] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:01:11,168] INFO- mon id est: 01
-
-[2014-07-07 18:01:43,118] DEBUG-     ----------------------    
-
-[2014-07-07 18:01:43,148] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:01:44,240] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:01:44,272] INFO- mon id est: 01
-
-[2014-07-07 18:16:34,551] DEBUG-     ----------------------    
-
-[2014-07-07 18:16:34,566] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:16:56,141] DEBUG-     ----------------------    
-
-[2014-07-07 18:16:56,173] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:16:57,342] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:16:57,342] INFO- mon id est: 01
-
-[2014-07-07 18:21:35,381] DEBUG-     ----------------------    
-
-[2014-07-07 18:21:35,413] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:21:36,645] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:21:36,677] INFO- mon id est: 01
-
-[2014-07-07 18:22:39,763] DEBUG-     ----------------------    
-
-[2014-07-07 18:22:39,793] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:22:41,230] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:22:41,308] INFO- mon id est: 01
-
-[2014-07-07 18:26:07,882] DEBUG-     ----------------------    
-
-[2014-07-07 18:26:07,898] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:26:26,431] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:26:26,977] INFO- mon id est: 02
-
-[2014-07-07 18:26:27,009] INFO- reg s'est connecte (02)
-[2014-07-07 18:26:27,023] INFO- reg est deja present [01]
-[2014-07-07 18:26:43,871] INFO- reg s'est deconnecte (02)
-[2014-07-07 18:26:59,440] DEBUG-     ----------------------    
-
-[2014-07-07 18:26:59,473] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:27:01,063] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:27:01,095] INFO- mon id est: 02
-
-[2014-07-07 18:27:01,125] INFO- reg s'est connecte (02)
-[2014-07-07 18:27:01,141] INFO- reg est deja present [01]
-[2014-07-07 18:27:17,319] INFO- reg s'est deconnecte (02)
-[2014-07-07 18:28:08,938] DEBUG-     ----------------------    
-
-[2014-07-07 18:28:08,970] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:28:11,388] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:28:11,434] INFO- mon id est: 02
-
-[2014-07-07 18:28:11,467] INFO- reg s'est connecte (02)
-[2014-07-07 18:28:11,482] INFO- reg est deja present [01]
-[2014-07-07 18:28:18,688] INFO- reg s'est deconnecte (02)
-[2014-07-07 18:29:10,778] DEBUG-     ----------------------    
-
-[2014-07-07 18:29:10,809] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:29:13,243] INFO- Connexion : essai 1
-[2014-07-07 18:29:14,349] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:29:14,381] INFO- Connexion : essai 2
-[2014-07-07 18:29:14,381] INFO- mon id est: 01
-
-[2014-07-07 18:29:14,397] INFO- mon id est: 01
-
-[2014-07-07 18:30:58,855] DEBUG-     ----------------------    
-
-[2014-07-07 18:30:58,887] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:31:00,384] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:31:00,384] INFO- mon id est: 01
-
-[2014-07-07 18:31:50,085] DEBUG-     ----------------------    
-
-[2014-07-07 18:31:50,118] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:31:52,082] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:31:52,130] INFO- mon id est: 01
-
-[2014-07-07 18:34:12,233] DEBUG-     ----------------------    
-
-[2014-07-07 18:34:12,249] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:34:13,404] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:34:13,418] INFO- mon id est: 01
-
-[2014-07-07 18:35:06,895] DEBUG-     ----------------------    
-
-[2014-07-07 18:35:06,927] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:35:11,904] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:35:16,319] INFO- mon id est: 02
-
-[2014-07-07 18:35:16,349] INFO- reg s'est connecte (02)
-[2014-07-07 18:35:16,365] INFO- reg est deja present [01]
-[2014-07-07 18:36:01,075] INFO- reg s'est deconnecte (02)
-[2014-07-07 18:38:35,171] DEBUG-     ----------------------    
-
-[2014-07-07 18:38:35,203] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:38:37,450] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:38:37,466] INFO- mon id est: 02
-
-[2014-07-07 18:38:37,496] INFO- reg s'est connecte (02)
-[2014-07-07 18:38:37,512] INFO- reg est deja present [01]
-[2014-07-07 18:38:44,063] INFO- reg s'est deconnecte (02)
-[2014-07-07 18:39:01,145] DEBUG-     ----------------------    
-
-[2014-07-07 18:39:01,177] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:39:05,624] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:39:05,686] INFO- mon id est: 02
-
-[2014-07-07 18:39:05,779] INFO- reg s'est connecte (02)
-[2014-07-07 18:39:05,795] INFO- reg est deja present [01]
-[2014-07-07 18:39:20,880] INFO- reg s'est deconnecte (02)
-[2014-07-07 18:40:08,180] DEBUG-     ----------------------    
-
-[2014-07-07 18:40:08,194] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:40:09,272] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:40:09,334] INFO- mon id est: 02
-
-[2014-07-07 18:40:09,365] INFO- reg s'est connecte (02)
-[2014-07-07 18:40:09,381] INFO- reg est deja present [01]
-[2014-07-07 18:55:09,056] INFO- reg s'est deconnecte (02)
-[2014-07-07 18:55:32,276] DEBUG-     ----------------------    
-
-[2014-07-07 18:55:32,308] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 18:55:35,260] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 18:55:35,331] INFO- mon id est: 02
-
-[2014-07-07 18:55:35,394] INFO- reg est deja present [01]
-[2014-07-07 18:55:35,392] INFO- reg s'est connecte (02)
-[2014-07-07 18:55:57,210] INFO- reg s'est deconnecte (02)
-[2014-07-07 23:40:21,622] DEBUG-     ----------------------    
-
-[2014-07-07 23:40:21,779] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 23:40:23,354] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 23:40:23,417] INFO- mon id est: 01
-
-[2014-07-07 23:40:50,279] DEBUG-     ----------------------    
-
-[2014-07-07 23:40:50,295] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-07 23:40:54,305] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-07 23:41:01,403] INFO- mon id est: 02
-
-[2014-07-07 23:41:01,434] INFO- reg s'est connecte (02)
-[2014-07-07 23:41:01,448] INFO- reg est deja present [01]
-[2014-07-08 09:43:10,957] DEBUG-     ----------------------    
-
-[2014-07-08 09:43:11,065] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-08 09:43:20,884] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-08 09:43:20,898] INFO- mon id est: 01
-
-[2014-07-08 09:44:09,434] DEBUG-     ----------------------    
-
-[2014-07-08 09:44:09,464] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-08 09:44:10,838] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-08 09:44:14,191] INFO- mon id est: 02
-
-[2014-07-08 09:44:14,223] INFO- reg s'est connecte (02)
-[2014-07-08 09:44:14,237] INFO- reg est deja present [01]
-[2014-07-08 09:44:18,855] INFO- reg s'est deconnecte (02)
-[2014-07-08 09:44:38,992] DEBUG-     ----------------------    
-
-[2014-07-08 09:44:39,101] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-08 09:44:40,864] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-08 09:44:40,989] INFO- mon id est: 02
-
-[2014-07-08 09:44:41,019] INFO- reg s'est connecte (02)
-[2014-07-08 09:44:41,036] INFO- reg est deja present [01]
-[2014-07-08 09:45:18,210] INFO- reg s'est deconnecte (02)
-[2014-07-15 10:14:30,279] DEBUG-     ----------------------    
-
-[2014-07-15 10:14:30,303] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-15 10:14:31,990] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-15 10:14:31,994] INFO- mon id est: 01
-
-[2014-07-15 10:32:05,561] DEBUG-     ----------------------    
-
-[2014-07-15 10:32:05,825] INFO- {u'ip': 'localhost', u'pseudo': 'reg', u'port': 6660, u'repReceptionFichiers': 'D:\\Jeux\\EnDev\\Interface\\interface_qt8\\FichiersRecus\\'}
-[2014-07-15 10:32:11,062] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2014-07-15 10:32:11,082] INFO- mon id est: 01
-
-[2014-07-25 12:53:28,068] DEBUG-     ----------------------    
-
-[2014-07-25 12:53:28,167] INFO- {u'ip': 'localhost', u'pseudo': 'oli', u'port': 6660, u'repReceptionFichiers': 'C:\\python_tmp\\interface_connexion\\interface_qt8_2\\FichiersRecus\\'}
-[2015-05-04 11:06:00,461] DEBUG-     ----------------------    
-
-[2015-05-04 11:06:00,520] INFO- {u'ip': 'localhost', u'pseudo': 'oli', u'port': 6660, u'repReceptionFichiers': 'C:\\python_tmp\\interface_connexion\\interface_qt8_2\\FichiersRecus\\'}
-[2015-05-04 11:06:03,530] INFO- Connexion etablie avec le serveur sur le port 6660
-
-[2015-05-04 11:06:03,546] INFO- mon id est: 01
-
-[2015-05-04 11:06:12,196] INFO- jet de dé: 01 -> oli: 18   (18)  [1d20]
-

+ 0 - 448
interface_qt8_2/serveur.log

@@ -1,448 +0,0 @@
-[2014-07-05 13:49:59,237] DEBUG -     ----------------------    
-
-[2014-07-05 13:50:12,677] INFO - Id 01 attribue
-[2014-07-05 13:50:12,677] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 13:50:12,717] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 13:50:23,654] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 13:51:49,992] DEBUG -     ----------------------    
-
-[2014-07-05 13:51:51,457] INFO - Id 01 attribue
-[2014-07-05 13:51:51,459] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 13:51:51,460] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 13:52:30,802] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 14:08:48,069] DEBUG -     ----------------------    
-
-[2014-07-05 14:08:49,747] INFO - Id 01 attribue
-[2014-07-05 14:08:49,749] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 14:08:49,750] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 14:09:01,092] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 14:16:14,858] DEBUG -     ----------------------    
-
-[2014-07-05 14:16:19,086] INFO - Id 01 attribue
-[2014-07-05 14:16:19,148] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 14:16:19,164] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 14:17:50,065] DEBUG -     ----------------------    
-
-[2014-07-05 14:18:19,549] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 14:18:25,400] DEBUG -     ----------------------    
-
-[2014-07-05 14:18:26,789] INFO - Id 01 attribue
-[2014-07-05 14:18:26,835] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 14:18:26,835] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 14:18:51,796] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 14:47:23,200] DEBUG -     ----------------------    
-
-[2014-07-05 14:47:24,790] INFO - Id 01 attribue
-[2014-07-05 14:47:24,790] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 14:47:24,790] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:02:40,601] DEBUG -     ----------------------    
-
-[2014-07-05 15:02:41,723] INFO - Id 01 attribue
-[2014-07-05 15:02:41,723] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:02:41,723] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:04:39,676] DEBUG -     ----------------------    
-
-[2014-07-05 15:04:40,892] INFO - Id 01 attribue
-[2014-07-05 15:04:40,892] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:04:40,892] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:05:14,979] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:05:43,371] DEBUG -     ----------------------    
-
-[2014-07-05 15:05:44,415] INFO - Id 01 attribue
-[2014-07-05 15:05:44,415] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:05:44,431] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:06:40,201] DEBUG -     ----------------------    
-
-[2014-07-05 15:06:41,512] INFO - Id 01 attribue
-[2014-07-05 15:06:41,512] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:06:41,512] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:07:04,023] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:07:21,869] DEBUG -     ----------------------    
-
-[2014-07-05 15:07:23,132] INFO - Id 01 attribue
-[2014-07-05 15:07:23,132] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:07:23,132] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:07:28,312] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:07:39,372] DEBUG -     ----------------------    
-
-[2014-07-05 15:07:40,559] INFO - Id 01 attribue
-[2014-07-05 15:07:40,559] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:07:40,559] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:07:54,614] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:09:36,312] DEBUG -     ----------------------    
-
-[2014-07-05 15:09:37,232] INFO - Id 01 attribue
-[2014-07-05 15:09:37,232] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:09:37,232] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:10:21,115] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:10:55,607] DEBUG -     ----------------------    
-
-[2014-07-05 15:10:56,605] INFO - Id 01 attribue
-[2014-07-05 15:10:56,605] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:10:56,605] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:11:09,973] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:12:45,602] DEBUG -     ----------------------    
-
-[2014-07-05 15:12:46,756] INFO - Id 01 attribue
-[2014-07-05 15:12:46,756] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:12:46,756] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:12:54,010] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:24:49,072] DEBUG -     ----------------------    
-
-[2014-07-05 15:24:50,289] INFO - Id 01 attribue
-[2014-07-05 15:24:50,289] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:24:50,289] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:24:58,290] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:26:18,319] DEBUG -     ----------------------    
-
-[2014-07-05 15:26:19,552] INFO - Id 01 attribue
-[2014-07-05 15:26:19,552] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:26:19,568] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:26:26,697] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:27:27,818] DEBUG -     ----------------------    
-
-[2014-07-05 15:27:29,049] INFO - Id 01 attribue
-[2014-07-05 15:27:29,049] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:27:29,049] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:27:36,007] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:30:54,049] DEBUG -     ----------------------    
-
-[2014-07-05 15:30:55,173] INFO - Id 01 attribue
-[2014-07-05 15:30:55,173] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:30:55,173] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:31:23,736] INFO - Client reg deconnecte (Thread-2)
-[2014-07-05 15:31:58,775] DEBUG -     ----------------------    
-
-[2014-07-05 15:31:59,928] INFO - Id 01 attribue
-[2014-07-05 15:31:59,928] INFO - Client Thread-2 connecte - Id 01
-[2014-07-05 15:31:59,928] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-05 15:32:10,177] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 16:32:13,029] DEBUG -     ----------------------    
-
-[2014-07-07 16:32:16,819] INFO - Id 01 attribue
-[2014-07-07 16:32:16,819] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:32:16,835] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:32:20,720] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 16:36:34,002] DEBUG -     ----------------------    
-
-[2014-07-07 16:36:35,451] INFO - Id 01 attribue
-[2014-07-07 16:36:35,451] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:36:35,467] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:38:17,101] DEBUG -     ----------------------    
-
-[2014-07-07 16:38:19,020] INFO - Id 01 attribue
-[2014-07-07 16:38:19,052] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:38:19,052] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:39:47,691] DEBUG -     ----------------------    
-
-[2014-07-07 16:40:51,980] DEBUG -     ----------------------    
-
-[2014-07-07 16:40:53,338] INFO - Id 01 attribue
-[2014-07-07 16:40:53,338] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:40:53,338] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:41:08,734] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 16:41:59,341] DEBUG -     ----------------------    
-
-[2014-07-07 16:42:00,480] INFO - Id 01 attribue
-[2014-07-07 16:42:00,526] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:42:00,526] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:42:11,650] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 16:42:22,726] DEBUG -     ----------------------    
-
-[2014-07-07 16:42:30,743] INFO - Id 01 attribue
-[2014-07-07 16:42:30,790] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:42:30,790] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:42:36,188] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 16:50:18,994] DEBUG -     ----------------------    
-
-[2014-07-07 16:50:20,289] INFO - Id 01 attribue
-[2014-07-07 16:50:20,289] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:50:20,289] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:50:43,454] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 16:56:12,026] DEBUG -     ----------------------    
-
-[2014-07-07 16:56:13,263] INFO - Id 01 attribue
-[2014-07-07 16:56:13,272] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 16:56:13,273] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 16:56:21,335] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:03:24,473] DEBUG -     ----------------------    
-
-[2014-07-07 17:03:25,877] INFO - Id 01 attribue
-[2014-07-07 17:03:25,877] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:03:25,877] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:03:32,959] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:04:59,321] DEBUG -     ----------------------    
-
-[2014-07-07 17:05:00,661] INFO - Id 01 attribue
-[2014-07-07 17:05:00,661] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:05:00,677] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:05:32,502] DEBUG -     ----------------------    
-
-[2014-07-07 17:05:52,563] DEBUG -     ----------------------    
-
-[2014-07-07 17:05:53,500] INFO - Id 01 attribue
-[2014-07-07 17:05:53,500] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:05:53,515] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:06:30,394] DEBUG -     ----------------------    
-
-[2014-07-07 17:06:31,891] INFO - Id 01 attribue
-[2014-07-07 17:06:31,953] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:06:31,953] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:07:42,700] DEBUG -     ----------------------    
-
-[2014-07-07 17:07:43,947] INFO - Id 01 attribue
-[2014-07-07 17:07:44,009] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:07:44,009] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:07:47,864] DEBUG -     ----------------------    
-
-[2014-07-07 17:07:48,845] INFO - Id 02 attribue
-[2014-07-07 17:07:56,615] INFO - Client Thread-4 connecte - Id 02
-[2014-07-07 17:07:56,615] INFO - connexion: Thread-4 -> reg (02)
-[2014-07-07 17:08:33,509] DEBUG -     ----------------------    
-
-[2014-07-07 17:08:34,960] INFO - Id 03 attribue
-[2014-07-07 17:08:34,976] INFO - Client Thread-5 connecte - Id 03
-[2014-07-07 17:08:35,023] INFO - connexion: Thread-5 -> reg (03)
-[2014-07-07 17:08:54,726] DEBUG -     ----------------------    
-
-[2014-07-07 17:08:56,286] INFO - Id 04 attribue
-[2014-07-07 17:08:56,302] INFO - Client Thread-6 connecte - Id 04
-[2014-07-07 17:08:56,302] INFO - connexion: Thread-6 -> reg (04)
-[2014-07-07 17:09:17,096] DEBUG -     ----------------------    
-
-[2014-07-07 17:09:18,359] INFO - Id 05 attribue
-[2014-07-07 17:09:18,391] INFO - Client Thread-7 connecte - Id 05
-[2014-07-07 17:09:18,423] INFO - connexion: Thread-7 -> reg (05)
-[2014-07-07 17:09:29,015] INFO - Client reg deconnecte (Thread-7)
-[2014-07-07 17:10:36,322] DEBUG -     ----------------------    
-
-[2014-07-07 17:10:37,785] INFO - Id 01 attribue
-[2014-07-07 17:10:37,822] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:10:37,852] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:10:42,914] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:10:52,953] DEBUG -     ----------------------    
-
-[2014-07-07 17:10:53,913] INFO - Id 01 attribue
-[2014-07-07 17:10:53,917] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:10:53,918] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:11:03,907] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:14:57,075] DEBUG -     ----------------------    
-
-[2014-07-07 17:14:58,214] INFO - Id 01 attribue
-[2014-07-07 17:14:58,262] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:14:58,262] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:15:01,226] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:34:22,845] DEBUG -     ----------------------    
-
-[2014-07-07 17:34:24,497] INFO - Id 01 attribue
-[2014-07-07 17:34:24,513] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:34:24,513] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:35:32,108] DEBUG -     ----------------------    
-
-[2014-07-07 17:35:38,209] INFO - Id 02 attribue
-[2014-07-07 17:35:44,121] INFO - Client Thread-4 connecte - Id 02
-[2014-07-07 17:35:44,121] INFO - connexion: Thread-4 -> reg (02)
-[2014-07-07 17:35:58,209] DEBUG -     ----------------------    
-
-[2014-07-07 17:35:59,285] INFO - Id 01 attribue
-[2014-07-07 17:35:59,285] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:35:59,285] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:36:05,805] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:38:04,023] DEBUG -     ----------------------    
-
-[2014-07-07 17:38:05,365] INFO - Id 01 attribue
-[2014-07-07 17:38:05,365] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:38:05,365] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:38:12,727] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:43:24,598] DEBUG -     ----------------------    
-
-[2014-07-07 17:43:26,003] INFO - Id 01 attribue
-[2014-07-07 17:43:26,003] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:43:26,003] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:43:33,506] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:48:36,322] DEBUG -     ----------------------    
-
-[2014-07-07 17:48:37,802] INFO - Id 01 attribue
-[2014-07-07 17:48:37,805] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:48:37,806] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:48:41,917] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:53:40,779] DEBUG -     ----------------------    
-
-[2014-07-07 17:53:41,888] INFO - Id 01 attribue
-[2014-07-07 17:53:41,888] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:53:41,904] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:53:52,947] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 17:56:57,589] DEBUG -     ----------------------    
-
-[2014-07-07 17:56:58,869] INFO - Id 01 attribue
-[2014-07-07 17:56:58,869] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:56:58,869] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:57:17,200] DEBUG -     ----------------------    
-
-[2014-07-07 17:57:20,756] INFO - Id 02 attribue
-[2014-07-07 17:57:24,562] INFO - Client Thread-4 connecte - Id 02
-[2014-07-07 17:57:24,562] INFO - connexion: Thread-4 -> reg (02)
-[2014-07-07 17:57:52,767] INFO - Client reg deconnecte (Thread-4)
-[2014-07-07 17:58:03,516] DEBUG -     ----------------------    
-
-[2014-07-07 17:58:05,013] INFO - Id 01 attribue
-[2014-07-07 17:58:05,075] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 17:58:05,075] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 17:58:10,068] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:00:48,329] DEBUG -     ----------------------    
-
-[2014-07-07 18:00:49,609] INFO - Id 01 attribue
-[2014-07-07 18:00:49,655] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:00:49,671] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:00:55,023] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:01:09,983] DEBUG -     ----------------------    
-
-[2014-07-07 18:01:11,138] INFO - Id 01 attribue
-[2014-07-07 18:01:11,168] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:01:11,168] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:01:17,720] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:01:43,085] DEBUG -     ----------------------    
-
-[2014-07-07 18:01:44,240] INFO - Id 01 attribue
-[2014-07-07 18:01:44,272] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:01:44,272] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:16:34,411] DEBUG -     ----------------------    
-
-[2014-07-07 18:16:56,109] DEBUG -     ----------------------    
-
-[2014-07-07 18:16:57,342] INFO - Id 01 attribue
-[2014-07-07 18:16:57,342] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:16:57,342] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:17:32,802] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:21:35,256] DEBUG -     ----------------------    
-
-[2014-07-07 18:21:36,645] INFO - Id 01 attribue
-[2014-07-07 18:21:36,677] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:21:36,677] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:21:48,845] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:22:39,732] DEBUG -     ----------------------    
-
-[2014-07-07 18:22:41,230] INFO - Id 01 attribue
-[2014-07-07 18:22:41,292] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:22:41,292] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:26:07,757] DEBUG -     ----------------------    
-
-[2014-07-07 18:26:26,431] INFO - Id 02 attribue
-[2014-07-07 18:26:26,961] INFO - Client Thread-4 connecte - Id 02
-[2014-07-07 18:26:26,961] INFO - connexion: Thread-4 -> reg (02)
-[2014-07-07 18:26:43,888] INFO - Client reg deconnecte (Thread-4)
-[2014-07-07 18:26:59,394] DEBUG -     ----------------------    
-
-[2014-07-07 18:27:01,063] INFO - Id 02 attribue
-[2014-07-07 18:27:01,063] INFO - Client Thread-5 connecte - Id 02
-[2014-07-07 18:27:01,095] INFO - connexion: Thread-5 -> reg (02)
-[2014-07-07 18:27:17,335] INFO - Client reg deconnecte (Thread-5)
-[2014-07-07 18:28:08,877] DEBUG -     ----------------------    
-
-[2014-07-07 18:28:11,388] INFO - Id 02 attribue
-[2014-07-07 18:28:11,404] INFO - Client Thread-6 connecte - Id 02
-[2014-07-07 18:28:11,404] INFO - connexion: Thread-6 -> reg (02)
-[2014-07-07 18:28:18,704] INFO - Client reg deconnecte (Thread-6)
-[2014-07-07 18:29:10,762] DEBUG -     ----------------------    
-
-[2014-07-07 18:29:14,349] INFO - Id 01 attribue
-[2014-07-07 18:29:14,365] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:29:14,381] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:29:14,381] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:29:18,687] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:30:58,825] DEBUG -     ----------------------    
-
-[2014-07-07 18:31:00,384] INFO - Id 01 attribue
-[2014-07-07 18:31:00,384] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:31:00,384] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:31:09,463] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:31:50,055] DEBUG -     ----------------------    
-
-[2014-07-07 18:31:52,082] INFO - Id 01 attribue
-[2014-07-07 18:31:52,114] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:31:52,130] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:32:14,391] INFO - Client reg deconnecte (Thread-2)
-[2014-07-07 18:34:12,108] DEBUG -     ----------------------    
-
-[2014-07-07 18:34:13,404] INFO - Id 01 attribue
-[2014-07-07 18:34:13,418] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 18:34:13,418] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 18:35:06,849] DEBUG -     ----------------------    
-
-[2014-07-07 18:35:11,904] INFO - Id 02 attribue
-[2014-07-07 18:35:16,302] INFO - Client Thread-4 connecte - Id 02
-[2014-07-07 18:35:16,302] INFO - connexion: Thread-4 -> reg (02)
-[2014-07-07 18:36:01,091] INFO - Client reg deconnecte (Thread-4)
-[2014-07-07 18:38:35,125] DEBUG -     ----------------------    
-
-[2014-07-07 18:38:37,450] INFO - Id 02 attribue
-[2014-07-07 18:38:37,450] INFO - Client Thread-5 connecte - Id 02
-[2014-07-07 18:38:37,450] INFO - connexion: Thread-5 -> reg (02)
-[2014-07-07 18:38:44,079] INFO - Client reg deconnecte (Thread-5)
-[2014-07-07 18:39:01,099] DEBUG -     ----------------------    
-
-[2014-07-07 18:39:05,624] INFO - Id 02 attribue
-[2014-07-07 18:39:05,624] INFO - Client Thread-6 connecte - Id 02
-[2014-07-07 18:39:05,686] INFO - connexion: Thread-6 -> reg (02)
-[2014-07-07 18:39:20,895] INFO - Client reg deconnecte (Thread-6)
-[2014-07-07 18:40:08,039] DEBUG -     ----------------------    
-
-[2014-07-07 18:40:09,272] INFO - Id 02 attribue
-[2014-07-07 18:40:09,272] INFO - Client Thread-7 connecte - Id 02
-[2014-07-07 18:40:09,334] INFO - connexion: Thread-7 -> reg (02)
-[2014-07-07 18:55:09,066] INFO - Client reg deconnecte (Thread-7)
-[2014-07-07 18:55:32,158] DEBUG -     ----------------------    
-
-[2014-07-07 18:55:35,260] INFO - Id 02 attribue
-[2014-07-07 18:55:35,270] INFO - Client Thread-8 connecte - Id 02
-[2014-07-07 18:55:35,321] INFO - connexion: Thread-8 -> reg (02)
-[2014-07-07 18:55:57,220] INFO - Client reg deconnecte (Thread-8)
-[2014-07-07 23:40:21,404] DEBUG -     ----------------------    
-
-[2014-07-07 23:40:23,354] INFO - Id 01 attribue
-[2014-07-07 23:40:23,401] INFO - Client Thread-2 connecte - Id 01
-[2014-07-07 23:40:23,417] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-07 23:40:50,138] DEBUG -     ----------------------    
-
-[2014-07-07 23:40:54,305] INFO - Id 02 attribue
-[2014-07-07 23:41:01,387] INFO - Client Thread-4 connecte - Id 02
-[2014-07-07 23:41:01,387] INFO - connexion: Thread-4 -> reg (02)
-[2014-07-08 02:10:37,938] WARNING - serveur : erreur reception
-[2014-07-08 02:10:37,953] INFO - Client reg deconnecte (Thread-4)
-[2014-07-08 09:43:08,648] DEBUG -     ----------------------    
-
-[2014-07-08 09:43:20,884] INFO - Id 01 attribue
-[2014-07-08 09:43:20,898] INFO - Client Thread-2 connecte - Id 01
-[2014-07-08 09:43:20,898] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-08 09:44:09,417] DEBUG -     ----------------------    
-
-[2014-07-08 09:44:10,838] INFO - Id 02 attribue
-[2014-07-08 09:44:14,176] INFO - Client Thread-4 connecte - Id 02
-[2014-07-08 09:44:14,176] INFO - connexion: Thread-4 -> reg (02)
-[2014-07-08 09:44:18,871] INFO - Client reg deconnecte (Thread-4)
-[2014-07-08 09:44:38,960] DEBUG -     ----------------------    
-
-[2014-07-08 09:44:40,864] INFO - Id 02 attribue
-[2014-07-08 09:44:40,864] INFO - Client Thread-5 connecte - Id 02
-[2014-07-08 09:44:40,911] INFO - connexion: Thread-5 -> reg (02)
-[2014-07-08 09:45:18,226] INFO - Client reg deconnecte (Thread-5)
-[2014-07-15 10:14:29,983] DEBUG -     ----------------------    
-
-[2014-07-15 10:14:31,990] INFO - Id 01 attribue
-[2014-07-15 10:14:31,990] INFO - Client Thread-2 connecte - Id 01
-[2014-07-15 10:14:31,992] INFO - connexion: Thread-2 -> reg (01)
-[2014-07-15 10:14:49,007] INFO - Client reg deconnecte (Thread-2)
-[2014-07-15 10:32:05,181] DEBUG -     ----------------------    
-
-[2014-07-15 10:32:11,062] INFO - Id 01 attribue
-[2014-07-15 10:32:11,065] INFO - Client Thread-2 connecte - Id 01
-[2014-07-15 10:32:11,079] INFO - connexion: Thread-2 -> oli (01)
-[2014-07-15 10:32:54,148] INFO - Client oli deconnecte (Thread-2)
-[2014-07-25 12:53:27,437] DEBUG -     ----------------------    
-
-[2015-05-04 11:05:58,956] DEBUG -     ----------------------    
-
-[2015-05-04 11:06:03,532] INFO - Id 01 attribue
-[2015-05-04 11:06:03,533] INFO - Client Thread-2 connecte - Id 01
-[2015-05-04 11:06:03,543] INFO - connexion: Thread-2 -> oli (01)
-[2015-05-04 11:06:38,917] INFO - Client oli deconnecte (Thread-2)

+ 0 - 464
interface_qt8_2/serveur.py

@@ -1,464 +0,0 @@
-from __future__ import unicode_literals
-# -*- coding: utf-8 -*-
-"""serveurs chat et chat vocal (TCP et UDP)"""
-from socket import socket, AF_INET, SOCK_DGRAM, SOCK_STREAM
-from threading import Thread
-from os import system
-from time import time, sleep
-import logging
-
-#### intialisation des variables ####
-hote = ''
-port = 6660
-connectes = {} #id, adresse
-pseudos = {}   #id, pseudo 
-taille_paquet = 1024
-tampon = []
-
-#parametres deboguage
-#logging.basicConfig(level=logging.DEBUG,
-#                    format='(%(threadName)-10s) %(message)s',
-#                    )
-
-#gestion des erreurs et log
-logging.basicConfig(level=logging.DEBUG)
-logServeur = logging.getLogger(__name__)
-handlerServeur = logging.FileHandler('serveur.log')
-handlerServeur.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s - %(message)s'))  #%(name)s - nom du module
-logServeur.addHandler(handlerServeur)
-logServeur.debug("    ----------------------    \n")
-
-#classes utilitaires:
-class OutilsCo():
-    """outils utilises pour gerer la connexion"""
-    def __init__(self):
-        """initialisation"""
-        self.idUtilises = ["00", "mj"]
-        
-    def genererID(self):
-        """génère un id de 2 caractères non utilisé"""
-        caracteres = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
-                      "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
-                      "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
-                      "<", ">", "+", "=", "-", "*", "@"]
-        fin = False
-    
-        for c1 in caracteres:
-            for c2 in caracteres:
-                txt = "{}{}".format(c1,c2)
-                if not txt in self.idUtilises:
-                    fin = True
-                    break
-            if fin:
-                break
-        self.idUtilises.append(str(txt))
-        logServeur.info("Id {} attribue".format(txt))
-        return txt
-    
-    def libererID(self, txt):
-        """retire un identifiant de la liste des id utilises"""
-        try:
-           self.idUtilises.remove(txt)
-        except:
-           logServeur.warning("impossible de liberer l'id {}".format(txt) )
-
-#### fils secondaires #### 
-
-class DebitMetre(Thread):
-    """debitmetre permettant de mesurer le debit d'emission/reception du serveur"""
-    def __init__(self, taille_paquet):
-        """création du serveur vocal"""
-        Thread.__init__(self)
-        self.mesureEnvoi = 0
-        self.mesureReception = 0
-        self.debitEmission = 0.00
-        self.debitReception = 0.00
-        #si oui, affiche les resultats chaque seconde:
-        self.affichage = False
-        
-    def envoi(self, taille_paquet):
-        """pour signaler l'envoi d'un paquet"""
-        self.mesureEnvoi += taille_paquet
-
-    def reception(self, taille_paquet):
-        """pour signaler la reception d'un paquet"""
-        self.mesureReception += taille_paquet
-
-    def run(self):
-        """mesure le volume en octets qui transite chaque seconde"""
-        self.lance = True
-        t0 = time()
-        while self.lance:   
-            delta = time() - t0
-            if delta >= 1:
-                self.debitEmission = self.mesureEnvoi / delta
-                self.mesureEnvoi = 0
-                self.debitReception = self.mesureReception / delta
-                self.mesureReception = 0
-                t0 = time()
-                if self.affichage:
-                    logServeur.info(self)
-
-    def __repr__(self):
-        """affiche les derniers debits mesures (en ko/s)"""
-        retour = "** Reception: {} ko/s ** -> Emission: {} ko/s **"\
-                  "".format((self.debitReception * 0.001), (self.debitEmission * 0.001))   
-        return retour    
-
-    def stop(self):
-        """Fermeture du fil debitmetre"""    
-        self.lance = False
-
-        
-class ServeurVoc(Thread):
-    """serveur UDP dedie au chat vocal"""
-    def __init__(self, port):
-        """création du serveur vocal"""
-        Thread.__init__(self)
-        self.serveur_lance = False
-        self.connectes = []
-        self.port = port
-        
-    def creer(self):
-        """creation d'une entree serveur UDP"""
-        try:
-           self.socket = socket(AF_INET, SOCK_DGRAM)
-           self.socket.bind(('', self.port))
-           retour = "Le serveur vocal ecoute a present sur le port {}".format(self.port)
-           self.serveur_lance = True
-           self.start()
-        except IOError, e:
-            if e.errno==10048:
-               retour = "Une instance du serveur est déja lancée"
-               logging.error(retour)
-            else:   
-               retour = "Echec de lancement du serveur"
-               logServeur.error(retour)
-        finally:
-            logServeur.info(retour)
-        return retour
-
-    
-    def nouveauClient(self, adresse):
-        """ajoute un nouveau client a la liste des connectes"""
-        self.connectes.append(adresse)
-        retour = "Nouveau client connecte: {})".format(adresse)
-        logServeur.info(retour)
-        return retour
-    
-    def supprimerClient(self, adresse):
-        """ajoute un nouveau client a la liste des connectes"""
-        self.connectes.remove(adresse)
-        retour = "Client deconnecte: {})".format(adresse)
-        logServeur.info(retour)
-        return retour
-
-
-    def run(self):
-        """boucle de fonctionnement du serveur"""
-        self.socket.setblocking(0)
-        while self.serveur_lance:
-            data = ""
-            #on recoit les donnees envoyees 
-            try:
-               data, adresse = self.socket.recvfrom(1024)
-               try:
-                   dM.reception(len(data))
-               except:
-                   pass
-                
-            except IOError, e:
-               if e.errno == 10035:
-                   #pas de donnee recue
-                   pass
-               elif e.errno == 10022:  
-                  logServeur.debug("erreur de reception {}".format(adresse))
-                  sleep(0.02)
-               elif e.errno == 10054:
-                  self.connectes = []
-                  logServeur.warning("reinitialisation de la liste des connectes")
-               else:
-                  logServeur.error("erreur {}".format(e.errno))
-                  #self.supprimerClient()
-
-            if len(data) > 0:
-               if not adresse in self.connectes:
-                    #l'adresse n'est pas dans la liste: on l'ajoute aux connectes
-                    self.nouveauClient(adresse)
-                    
-               for dest in self.connectes:
-                    if dest != adresse:
-                        #le client ne recoit pas ses propres donnees
-                        self.socket.sendto(data , dest)
-                        try:
-                            dM.envoi(len(data))
-                        except:
-                            pass 
-                        #tmp = "{} -> {}".format(len(data), adresse)
-        
-    def stop(self):
-        """Fermeture du serveur"""
-        self.serveur_lance = False
-        self.socket.close()
-        retour = "Serveur vocal ferme"
-        logServeur.info("Fermeture du serveur vocal")
-        return retour
-
-        
-class FilClient(Thread):
-    """fil de connexion client au serveur TCP"""
-    def __init__(self, outils, cnn):
-        """creation du fil"""
-        Thread.__init__(self)
-        self.cnn = cnn
-        self.pseudo = "inconnu"
-        self.idClient = "00"
-        self.outils = outils
-        self.connecte = False
-
-    def creer(self):
-        """initialise la connexion avec le client"""       
-        self.connecte = True
-        #on genere un id pour lui
-        self.idClient = self.outils.genererID()
-        #on ajoute son adresse reseau a la liste des connectes
-        connectes[self.idClient] = self.cnn
-        logServeur.info("Client {} connecte - Id {}".format(self.getName(), self.idClient))
-
-        #on demarre le fil de reception
-        self.start()
-
-        
-    def run(self):
-        """echange avec le client"""
-        self.cnn.setblocking(0)
-        while self.connecte:
-               #reception du message client
-               try:
-                   msgClient = self.cnn.recv(1024)
-
-                   try:
-                       dM.reception(len(msgClient))
-                   except:
-                       pass
-                    
-                   tampon.append((self.getName(), msgClient))
-
-               except IOError, e:
-                   if e.errno == 10035:
-                       #aucun message recu
-                       pass
-                   else:
-                       if self.connecte:
-                           logServeur.warning("serveur : erreur reception")
-                           self.stop()
-
-    def stop(self):
-        """ferme le fil client"""
-        self.connecte = False
-        #fermeture de la connexion avec le client:
-        #on supprime le client de la liste des connectes
-        sleep(0.01)
-        try:
-            del connectes[self.idClient]
-        except:
-            logServeur.warning("Impossible de retirer {} de la liste des connectes".format(self.idClient))
-        #on libere son identifiant
-        self.outils.libererID(self.idClient)
-        self.cnn.close()   
-        logServeur.info("Client {} deconnecte ({})".format(self.pseudo, self.getName()))
-        
-# Le fil se termine ici    
-
-class Serveur(Thread):
-    """serveur TCP pour chat, echange de fichiers ou d'objets..."""
-    def __init__(self, port):
-        """creation du serveur"""
-        self.serveur_lance = False
-        Thread.__init__(self)
-        self.port = port
-        self.outils = OutilsCo()
-        self.filsOuverts = {}
-
-    def traitement(self, nomClient, msg):
-        """traite le message selon son type et son/ses destinataire(s)"""
-        client = self.filsOuverts[nomClient] 
-
-        if len(msg) >= 6:
-            nature = msg[0:2]
-            emet = msg[2:4]
-            dest = msg[4:6]
-            try:
-               contenu = msg[6:]
-            except:
-               contenu = "" 
-
-            if dest == "sa":
-                #message pour le serveur, on ne le retransmet pas
-                if nature == "ci":
-                    #le client informe de sa connexion et demande un identifiant
-                    client.pseudo = contenu
-                    pseudos[client.idClient] = client.pseudo
-                    logServeur.info("connexion: {} -> {} ({})".format(client.getName(), client.pseudo, client.idClient))
-                    client.cnn.sendall("cisa"+client.idClient)
-                    for cnn in connectes.values():
-                        if cnn != client.cnn:
-                           msg = "ccsatc{}{}".format(client.idClient, client.pseudo)
-                           cnn.sendall(msg)
-                           sleep(0.001)
-                           try:
-                               dM.envoi(len(msg))
-                           except:
-                               pass
-                            
-                if nature == "cd":
-                    #client informe de sa deconnexion
-                    for cnn in connectes.values():
-                        if cnn != client.cnn:
-                             msg = "cdsaac{}".format(emet)
-                             cnn.sendall(msg)
-                             try:
-                                 dM.envoi(len(msg))
-                             except:
-                                 pass
-                    client.stop()
-                    
-                elif nature == "f0":
-                    #client demande un identifiant pour un envoi de fichier
-                    msg = "f0sa{}{}".format(client.idClient, self.outils.genererID())
-                    client.cnn.sendall(msg)
-                    
-                elif nature == "f1":
-                    #client signale au serveur qu'il peut liberer l'identifiant du fichier
-                    self.outils.libererID(contenu)
-                
-            elif dest == "tc":
-                #message pour tous les clients, emetteur compris
-                for cnn in connectes.values():
-                    cnn.sendall(msg)
-                    try:
-                       dM.envoi(len(msg)+1)
-                    except:
-                       pass
-                
-            elif dest == "ac":
-                #message pour tous les clients excepte l'emetteur
-                for cnn in connectes.values():
-                    if cnn != client.cnn:
-                         cnn.sendall(msg)
-                         try:
-                             dM.envoi(len(msg)+1)
-                         except:
-                             pass
-                    
-            
-            elif dest == "sv":
-                #message pour le serveur vocal
-                logServeur.debug("pour serveur vocal: {}".format(contenu))
-
-            #else: 
-            elif dest in connectes:
-                #message pour un client unique (mj ou autre)
-                connectes[dest].sendall(msg) 
-
-        else:
-            logServeur.warning("Erreur : format du message illisible -> {}".format(msg))
-
-        
-    def creer(self):
-        """demarre le serveur"""
-        """ try:"""
-        self.cnn = socket(AF_INET, SOCK_STREAM)
-        self.cnn.bind((hote, self.port))
-        self.cnn.listen(5)
-        retour = "Le serveur ecoute a present sur le port {}".format(port)
-        self.serveur_lance = True
-        self.start()
-        """except:
-           retour = "Impossible de demarrer le serveur"""
-        """finally:   
-           logServeur.info(retour)
-        """
-        return self.serveur_lance, retour
-
-    def run(self):
-        """boucle de fonctionnement"""
-        self.cnn.setblocking(0)
-        while self.serveur_lance:
-            try:
-               #tant que le serveur est lance, il reste disponible a de nouvelles connexions
-               cnnClient, adresse = self.cnn.accept()
-               #on cree un nouveau fil pour le nouveau client
-               client = FilClient(self.outils, cnnClient)
-               #on ajoute ce fil à la liste pour pouvoir le fermer
-               self.filsOuverts[client.getName()] = client
-               client.creer()
-               
-            except IOError, e:
-               if e.errno == 10035:
-                   #si pas de nouvelles connexions, on traite les messages en attente:
-                   #le serveur lit les 3 premiers car indiquant la longueur du message ('drapeaux' non  compris)
-                   #puis les retire du message avant le traitement
-                   try:
-                      nomClient, txt = tampon[0]
-                      msgClient = txt
-                      if len(msgClient) >= 9:
-                          while len(msgClient) > 0:
-                              lg = int(msgClient[0:3]) + 6
-                              self.traitement(nomClient, msgClient[3:lg+3])
-                              msgClient = msgClient[lg+3:]     
-                      tampon.remove((nomClient, txt))
-                      txt = msgClient = ""
-                   except IndexError:
-                      #la liste tampon est vide 
-                      pass     
-                   
-               else: 
-                   logServeur.error("serveur : erreur attente clients") 
-                   break        
-        
-    def stop(self):
-        """ferme le serveur"""
-        self.serveur_lance = False
-        #for client in connectes.keys():
-        for client in self.filsOuverts.values():
-            if client.connecte:
-                client.cnn.sendall("sdsatc")
-                client.stop()
-        sleep(0.1)
-        self.cnn.close()
-        logging.info("Fermeture du serveur TCP")
-        
-#### fil principal ####
-if __name__ == "__main__":
-   # si lancement direct:
-   #debitmetre pour mesurer l'emission
-
-   #dM = DebitMetre(taille_paquet)
-   #dM.affichage = False
- 
-   s = Serveur(port)
-      
-   s.creer()
-   sVoc = ServeurVoc(port)
-   sVoc.creer()
-   #dM.start()
-   
-   system("pause")
-   s.stop()
-   sVoc.stop()
-   #dM.stop()
-   logServeur.info("- Fin -")   
-   sleep(0.1)
-
-
-   
-   
-   
-
-
-
-
-    
- 
-

+ 0 - 2
interface_qt8_2/setup.cmd

@@ -1,2 +0,0 @@
-c:/python27/python.exe setup.py py2exe --includes sip 
-pause

+ 0 - 4
interface_qt8_2/setup.py

@@ -1,4 +0,0 @@
-from distutils.core import setup  
-import py2exe
-
-setup(windows=["DMonde.py"])

+ 0 - 50
interface_qt8_2/visionneuse.py

@@ -1,50 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'visionneuse.ui'
-#
-# Created: Fri May 23 17:25:40 2014
-#      by: PyQt4 UI code generator 4.10.4
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
-
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_visionneuse(object):
-    def setupUi(self, visionneuse):
-        visionneuse.setObjectName(_fromUtf8("visionneuse"))
-        visionneuse.resize(532, 452)
-        self.label = QtGui.QLabel(visionneuse)
-        self.label.setGeometry(QtCore.QRect(0, 0, 531, 451))
-        self.label.setObjectName(_fromUtf8("label"))
-
-        self.retranslateUi(visionneuse)
-        QtCore.QMetaObject.connectSlotsByName(visionneuse)
-
-    def retranslateUi(self, visionneuse):
-        visionneuse.setWindowTitle(_translate("visionneuse", "Form", None))
-        self.label.setText(_translate("visionneuse", "TextLabel", None))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    visionneuse = QtGui.QWidget()
-    ui = Ui_visionneuse()
-    ui.setupUi(visionneuse)
-    visionneuse.show()
-    sys.exit(app.exec_())
-

+ 0 - 32
interface_qt8_2/visionneuse.ui

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>visionneuse</class>
- <widget class="QWidget" name="visionneuse">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>532</width>
-    <height>452</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <widget class="QLabel" name="label">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>531</width>
-     <height>451</height>
-    </rect>
-   </property>
-   <property name="text">
-    <string>TextLabel</string>
-   </property>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>

+ 2 - 0
lib/Decor.py

@@ -15,6 +15,8 @@ class Decor(Pion):
         self.escalade = False            #peut etre escalade
         self.franchissable = False       #peut etre traverse (ex: rideau, porte)
         self.brule = False               #peut prendre feu
+        self.inventaire = []
+        self.notes = ""
 
     def ajouterAuPlateau(self, plateau):
         self.plateau = plateau

+ 5 - 2
lib/EcranEditionCombattant.py

@@ -88,7 +88,10 @@ class EcranEditionCombattant(QDialog):
     def layoutCarac(self):
         """retourne le layout des attributs"""
         return self.ui.edc_deroulementAttributs_layout        
-        
+
+    def vueGraphique(self):
+        return self.ui.edc_vueForme
+
     def ouverture(self):
         """premier affichage: on met a jour les champs"""
        
@@ -170,7 +173,7 @@ class EcranEditionCombattant(QDialog):
         """selectionne le fichier image dans la boite de dialogue dediee"""
         fichier = QFileDialog.getOpenFileName(self, 
                                               "Selectionnez une image", 
-                                              "\\img", 
+                                              "\\ressources", 
                                               "Images (*.png *.jpg)")
         if len(fichier) > 0:
             pix = QPixmap(fichier)

+ 237 - 0
lib/EcranEditionDecor.py

@@ -0,0 +1,237 @@
+#from __future__ import unicode_literals
+# -*- coding: utf-8 -*-
+from __future__ import division
+import sys
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from Decor import Decor
+from ui.ecran_editionDecor import Ui_edd_fenetre
+from EcranEditionObjet import EcranEditionObjet
+from outilsSvg import *
+from VueEditionForme import VueEditionForme
+from Objet import Objet
+
+
+class EcranEditionDecor(QDialog):
+    """interface de creation/edition de decors"""
+    def __init__(self, decor=None, pageInitiale = 0, formeCases = "H", parent=None):
+        """initialisation de la fenetre"""
+        super (EcranEditionDecor, self).__init__()
+        self.pixGraphique = None
+        self.createWidgets()
+        
+        if decor == None:
+            self.decor = Decor()
+        else:
+            self.decor = decor
+        self.modeCreation = (decor == None)
+        self.ouverture()
+        self.ui.edd_menu.setCurrentCell(pageInitiale, 0)
+        self.ui.edd_pages.setCurrentIndex(pageInitiale)
+        if formeCases == "C":
+            self.ui.edd_casesCarrees.setChecked(True)
+            self.majFormeCases()
+            
+    def nouvelIdDecor(self):
+        """renvoie un identifiant pour un nouveau terrain"""
+        dicoSvg = afficheSvg("lib\\biblio\\Decor")
+        nouvelId = 1
+        while str(nouvelId) in dicoSvg.keys():
+            nouvelId += 1
+        return str(nouvelId)
+
+    def formeCases(self):
+        retour = ""
+        if self.ui.edd_casesHexa.isChecked():
+            retour = "H"
+        else:
+            retour = "C"
+        return retour
+    
+    def createWidgets(self):
+        """construction de l'interface"""
+        #construction de l'interface
+        self.ui = Ui_edd_fenetre()
+        self.ui.setupUi(self)
+        
+        self.connect(self.ui.edd_nom, SIGNAL("textEdited(QString)"), self.majActivationEnregistrer)
+
+        self.connect(self.ui.edd_enregistrer, SIGNAL("clicked()"), self.enregistrer)
+        self.connect(self.ui.edd_annuler, SIGNAL("clicked()"), self.annuler)
+
+        self.connect(self.ui.edd_casesHexa, SIGNAL("clicked()"), self.majFormeCases)
+        self.connect(self.ui.edd_casesCarrees, SIGNAL("clicked()"), self.majFormeCases)
+        self.connect(self.ui.edd_couleur, SIGNAL("clicked()"), self.selectionCouleur)
+        self.connect(self.ui.edd_image, SIGNAL("clicked()"), self.selectionImage)
+
+        self.connect(self.ui.edd_logo, SIGNAL("imageModifiee()"), self.logoModifie)
+        self.vueForme = VueEditionForme(self)
+
+        self.construireInventaire()
+        self.connect(self.ui.edd_filtreTypeObjet, SIGNAL("currentChanged(int)"), self.filtrerInventaire)
+        self.ui.edd_filtreTypeObjet.stackUnder(self.ui.edd_listeInventaire)
+
+    def vueGraphique(self):
+        return self.ui.edd_vueForme
+
+    def ouverture(self):
+        """premier affichage: on met a jour les champs"""
+        #page_nom
+        self.ui.edd_nom.majTexte(self.decor.nom)
+        if self.decor.logo:
+            self.ui.edd_logo.chargerImage(self.decor.logo)
+        else:
+            self.ui.edd_logo.majTexte("Choisissez \nun fichier\nimage")
+
+        self.vueForme.creer(self.formeCases())
+        self.vueForme.autoriserModifForme(self.modeCreation)
+        self.vueForme.majCouleur(self.decor.couleur)
+        self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()])
+        self.vueForme.chargerImageDef(self.decor.img)
+
+        #page deplacements
+        self.ui.edd_taille.setValue(self.decor.hauteur)
+        self.ui.edd_escalade.setChecked(self.decor.escalade)
+        self.ui.edd_brule.setChecked(self.decor.brule)
+        
+        #page inventaire
+        self.ui.edd_listeInventaire.charger(self.decor.inventaire)
+
+        #page_notes
+        self.ui.edd_notes.setText(QString.fromUtf8(self.decor.notes))
+
+        #autre
+        self.majActivationEnregistrer()
+
+    ### page apparence
+    def majFormeCases(self):
+        if self.vueForme.formeCases() != self.formeCases():
+            #on enregistre la def de forme, d'image et d'etiquette en cours
+            self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
+            self.decor.img = self.vueForme.imageDef()
+            self.decor.etiquette = self.vueForme.etiquetteDef()
+
+            #on recree la scene avec la nouvelle forme de cases
+            self.vueForme.vider()
+            self.vueForme.creer(self.formeCases())
+
+            #on charge les def correspondantes a la nouvelle forme
+            self.vueForme.chargerFormeDef(self.decor.formeDef[self.formeCases()])
+            self.vueForme.chargerImageDef(self.decor.img)
+            self.vueForme.chargerEtiquetteDef(self.decor.etiquette)
+
+    def logoModifie(self):
+        if not len(self.decor.img.nomFichier) > 0:
+            #si pas d'image attribuee au pion, on utilise le logo pour le pion
+            self.vueForme.nouvelleImageDef(self.ui.edd_logo.image())
+
+    def selectionImage(self):
+        """selectionne le fichier image dans la boite de dialogue dediee"""
+        fichier = QFileDialog.getOpenFileName(self, 
+                                              "Selectionnez une image", 
+                                              "\\ressources", 
+                                              "Images (*.png *.jpg)")
+        if len(fichier) > 0:
+            pix = QPixmap(fichier)
+            if not pix.isNull():
+                self.vueForme.nouvelleImageDef(fichier)
+            else:    
+                dial = QMessageBox(self)
+                dial.setText("Format non reconnu")
+                dial.setWindowTitle("Erreur")
+                dial.setStandardButtons(QMessageBox.Ok)
+                dial.exec_()
+
+    def selectionCouleur(self):
+        """selectionne la couleur dans la boite de dialogue dediee"""
+        couleur = QColorDialog(self).getColor(QColor("white"), self)
+        if couleur.isValid():
+            nomCouleur = couleur.name()
+            self.decor.couleur = couleur
+            self.vueForme.majCouleur(couleur)
+
+    ### page inventaire
+    def construireInventaire(self):
+        """construction de la page inventaire"""
+        self.ui.edd_listeInventaire.construire()
+        self.connect(self.ui.edd_listeInventaire, SIGNAL("objetClique(int)"), self.editerObjet)
+
+    def editerObjet(self, indexObjet):
+        if indexObjet < len(self.ui.edd_listeInventaire.inventaire()):
+            objet = self.ui.edd_listeInventaire.inventaire()[indexObjet]
+        else:
+            objet = None
+        typeObjet = self.ui.edd_filtreTypeObjet.currentIndex() - 1
+        
+        self.fenetreEO = EcranEditionObjet(objet, typeObjet)
+        self.fenetreEO.show()
+        self.fenetreEO.exec_()
+        resultat = self.fenetreEO.resultat()
+
+        if resultat:
+            if objet:
+                self.ui.edd_listeInventaire.majObjet(objet, resultat)
+            else:
+                self.ui.edd_listeInventaire.ajouterObjet(resultat)
+        else:
+            if objet:
+                self.ui.edd_listeInventaire.supprimerObjet(objet)
+        
+        self.fenetreEO = None
+
+    def majTotauxInventaire(self):
+        inv = self.ui.edd_listeInventaire.inventaire()
+        poidsTotal = 0.00
+        for obj in inv:
+            poidsTotal += obj.poidsTotal()
+        self.ui.edd_inventaire_poids.majTexte("{} kg".format(poidsTotal))
+
+    def filtrerInventaire(self, index):
+        filtre = index - 1
+        self.ui.edd_listeInventaire.filtrer(filtre)
+
+    #### barre d'outils
+    def majActivationEnregistrer(self):
+        """verifie la validite des saisies"""
+        self.ui.edd_enregistrer.setEnabled(len(self.ui.edd_nom.texte()) > 0) 
+    
+    def enregistrer(self):
+        """enregistre le terrain cree/edite"""
+        #identifiant
+        if not self.decor.id:
+            self.decor.id = self.nouvelIdDecor()
+
+        #page nom
+        self.decor.nom = self.ui.edd_nom.texte()
+        self.decor.logo = self.ui.edd_logo.image()
+        
+        self.decor.formeDef[self.vueForme.formeCases()] = self.vueForme.formeDef()
+        self.decor.img = self.vueForme.imageDef()
+        self.decor.etiquette = self.vueForme.etiquetteDef()
+
+        #page dep
+        self.decor.hauteur = self.ui.edd_taille.value()
+        self.decor.escalade = self.ui.edd_escalade.isChecked()
+        self.decor.brule = self.ui.edd_brule.isChecked()
+
+        #page inventaire
+        self.decor.inventaire = self.ui.edd_listeInventaire.inventaire()
+
+        #page notes
+        self.decor.notes = str(self.ui.edd_notes.toPlainText().toUtf8())
+
+        self.done(1)
+
+    def annuler(self):
+        """annule la creation/edition"""
+        self.decor = None
+        self.done(0)
+
+if __name__ == "__main__":
+   app = QApplication(sys.argv)
+   ecran = EcranEditionDecor()
+   ecran.show()
+   r = app.exec_()
+   exit(r)      
+
+

+ 0 - 192
lib/EcranEditionDecors.py

@@ -1,192 +0,0 @@
-#from __future__ import unicode_literals
-# -*- coding: utf-8 -*-
-from __future__ import division
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from Decor import Decor
-from ui.ecran_editionDecor import Ui_edd_fenetre
-from outilsSvg import *
-from VueEditionForme import VueEditionForme
-
-
-class EcranEditionDecors(QDialog):
-    """interface de creation/edition de decors"""
-    def __init__(self, decor=None, formeCases = "H", parent=None):
-        """initialisation de la fenetre"""
-        super (EcranEditionDecors, self).__init__()
-        
-##        self.pixGraphique = None
-##        self.formeCases = formeCases
-        self.createWidgets()
-##        
-##        if decor == None:
-##            self.decor = Decor()
-##            self.accesCreation()
-##        else:
-##            self.decor = decor
-##            self.accesEdition()
-##        self.majAffichage("")    
-##        
-    def createWidgets(self):
-        """construction de l'interface"""
-        #construction de l'interface
-        self.ui = Ui_edd_fenetre()
-        self.ui.setupUi(self)
-##        self.connect(self.ui.enregistrerDecor, SIGNAL("clicked()"), self.enregistrer)
-##        self.connect(self.ui.annulerDecor, SIGNAL("clicked()"), self.annuler)
-##        self.connect(self.ui.supprimerDecor, SIGNAL("clicked()"), self.supprimer)
-##        self.connect(self.ui.idDecor, SIGNAL("textEdited(QString)"), self.majAffichage)
-##        self.connect(self.ui.nomDecor, SIGNAL("textEdited(QString)"), self.majAffichage)
-##        self.connect(self.ui.couleurDecor, SIGNAL("clicked()"), self.selectionCouleur)
-##
-##        self.connect(self.ui.imgDecor, SIGNAL("textEdited(QString)"), self.majApercuImage)
-##        self.connect(self.ui.imgLogoDecor, SIGNAL("textEdited(QString)"), self.majApercuImage)
-##        self.connect(self.ui.imgAfficherDecor, SIGNAL("stateChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgPivoteDecor, SIGNAL("stateChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgMasqueDecor, SIGNAL("stateChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgTailleXDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgTailleYDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgPosXDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgPosYDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgRotationDecor, SIGNAL("valueChanged(int)"), self.majApercuImage)
-##        self.connect(self.ui.imgReinitDecor, SIGNAL("clicked()"), self.reinitImage)
-##
-##        self.vueForme = VueEditionForme(self, self.formeCases)
-##        self.vueForme.creer()
-##        
-##    def accesEdition(self):
-##        """ouverture en mode edition"""
-##        self.ui.idDecor.setEnabled(True)
-##       
-##        self.ui.idDecor.setText(QString.fromUtf8(str(self.decor.id)))
-##        self.ui.nomDecor.setText(QString.fromUtf8(str(self.decor.nom)))        
-##        if self.decor.couleur.isValid():
-##            self.ui.affichageCouleurDecor.setStyleSheet("QLabel {backGround:%s}" %(self.decor.couleur.name()))
-##
-##        self.ui.imgLogoDecor.setText(QString.fromUtf8(str(self.decor.logo)))
-##        if self.decor.img.nom != self.decor.logo: 
-##            self.ui.imgDecor.setText(QString.fromUtf8(str(self.decor.img.nom)))
-##        self.ui.imgTailleXDecor.setValue(self.decor.img.kx)
-##        self.ui.imgTailleYDecor.setValue(self.decor.img.ky)
-##        self.ui.imgPosXDecor.setValue(self.decor.img.dx)
-##        self.ui.imgPosYDecor.setValue(self.decor.img.dy)
-##        self.ui.imgRotationDecor.setValue(self.decor.img.rotation)
-##        self.ui.imgPivoteDecor.setChecked(self.decor.img.pivote)
-##        self.ui.imgMasqueDecor.setChecked(self.decor.img.masqueAuto)
-##          
-##        self.ui.hauteurDecor.setValue(self.decor.hauteur)    
-##        self.ui.couvertDecor.setChecked(self.decor.couvert)
-##        self.ui.escaladeDecor.setChecked(self.decor.escalade)
-##        self.ui.franchissablePiedDecor.setChecked(self.decor.franchissablePied)
-##        self.ui.franchissableVolDecor.setChecked(self.decor.franchissableVol)
-##        self.ui.bruleDecor.setChecked(self.decor.brule)
-##              
-##        self.vueForme.majForme(self.decor.formeDef[self.formeCases])    
-##        self.ui.supprimerDecor.setEnabled(True)
-##        self.ui.idDecor.setEnabled(False)
-##        self.majApercuImage()
-##
-##    def accesCreation(self):
-##        """ouverture en mode creation"""
-##        self.ui.idDecor.setEnabled(True)
-##        self.ui.idDecor.setText(QString.fromUtf8(str(self.nouvelIdDecor())))
-##        self.ui.idDecor.setEnabled(False)
-##        self.majApercuImage()
-##
-##    def majAffichage(self, txt):
-##        """verifie la validite des saisies"""
-##        self.ui.enregistrerDecor.setEnabled(len(self.ui.idDecor.text().toUtf8()) > 0 and len(self.ui.nomDecor.text().toUtf8()) > 0)
-##
-##    def nouvelIdDecor(self):
-##        """renvoie un identifiant pour un nouveau decor"""
-##        dicoSvg = afficheSvg("lib\\biblio\\decor")
-##        nouvelId = 1
-##        while str(nouvelId) in dicoSvg.keys():
-##            nouvelId += 1
-##        return str(nouvelId)
-##
-##    def selectionCouleur(self):
-##        """selectionne la couleur dans la boite de dialogue dediee"""
-##        couleur = QColorDialog(self).getColor(QColor("white"), self)
-##        if couleur.isValid():
-##            nomCouleur = couleur.name()
-##            self.ui.affichageCouleurDecor.setStyleSheet("QLabel {backGround:%s}" %(nomCouleur))
-##            self.decor.couleur = couleur    
-##
-##    def majApercuImage(self):
-##        """met a jour l'image sur l'apercu du pion"""
-##        if self.ui.imgAfficherDecor.isChecked():
-##            if len(str(self.ui.imgDecor.text().toUtf8())) > 0:
-##                img = str(self.ui.imgDecor.text().toUtf8())
-##                self.vueForme.majImage(img, self.ui.imgTailleXDecor.value() \
-##                                  , self.ui.imgTailleYDecor.value() \
-##                                  , self.ui.imgPosXDecor.value() \
-##                                  , self.ui.imgPosYDecor.value() \
-##                                  , self.ui.imgRotationDecor.value() \
-##                                  , self.ui.imgPivoteDecor.isChecked() \
-##                                  , self.ui.imgMasqueDecor.isChecked())
-##            else:
-##                img = str(self.ui.imgLogoDecor.text().toUtf8())
-##                self.vueForme.majImage(img)
-##        else:
-##            img = ""
-##            self.vueForme.majImage(img)
-##
-##
-##    def reinitImage(self):
-##        self.ui.imgTailleXDecor.setValue(10)
-##        self.ui.imgTailleYDecor.setValue(10)
-##        self.ui.imgPosXDecor.setValue(0)
-##        self.ui.imgPosYDecor.setValue(0)
-##        self.ui.imgRotationDecor.setValue(0)
-##        self.ui.imgPivoteDecor.setChecked(False)
-##        self.ui.imgMasqueDecor.setChecked(False)
-##        self.majApercuImage()
-##            
-##    def enregistrer(self):
-##        """enregistre le terrain cree/edite"""
-##        self.decor.id = str(self.ui.idDecor.text().toUtf8())
-##        self.decor.nom = str(self.ui.nomDecor.text().toUtf8())
-##
-##        self.decor.logo = str(self.ui.imgLogoDecor.text().toUtf8())
-##        if len(str(self.ui.imgDecor.text().toUtf8())) > 0:       
-##            self.decor.img.nom = str(self.ui.imgDecor.text().toUtf8())
-##            self.decor.img.kx = self.ui.imgTailleXDecor.value()
-##            self.decor.img.ky = self.ui.imgTailleYDecor.value()
-##            self.decor.img.dx = self.ui.imgPosXDecor.value()
-##            self.decor.img.dy = self.ui.imgPosYDecor.value()
-##            self.decor.img.rotation = self.ui.imgRotationDecor.value()
-##            self.decor.img.pivote = self.ui.imgPivoteDecor.isChecked()
-##            self.decor.img.masqueAuto = self.ui.imgMasqueDecor.isChecked()
-##        else:
-##            self.decor.img.nom = str(self.ui.imgLogoDecor.text().toUtf8())
-##            self.decor.img.kx = 10
-##            self.decor.img.ky = 10
-##            self.decor.img.dx = 0
-##            self.decor.img.dy = 0
-##            self.decor.img.rotation = 0
-##            self.decor.img.pivote = False
-##            self.decor.img.masqueAuto = self.ui.imgMasqueDecor.isChecked()
-##            
-##        self.decor.hauteur = int(self.ui.hauteurDecor.value())        
-##        self.decor.couvert = self.ui.couvertDecor.isChecked()
-##        self.decor.brule = self.ui.bruleDecor.isChecked()
-##        self.decor.franchissablePied = self.ui.franchissablePiedDecor.isChecked()
-##        self.decor.franchissableVol = self.ui.franchissableVolDecor.isChecked()
-##        self.decor.escalade = self.ui.escaladeDecor.isChecked()
-##        
-##        self.decor.formeDef[self.formeCases] = self.vueForme.formeDef()
-##        
-##        enregistrer(self.decor.id, self.decor, "lib\\biblio\\decor")
-##        self.decor = None
-##        self.done(1)
-##
-##    def supprimer(self):
-##        """supprimer l'enregistrement de ce terrain"""
-##        supprSvg("lib\\biblio\\decor", self.decor.id)
-##        self.done(1)
-##
-##    def annuler(self):
-##        """annule la creation/edition"""
-##        self.decor = None
-##        self.done(0)

+ 6 - 4
lib/Plateau.py

@@ -25,7 +25,7 @@ from EntreeSortie import EntreeSortie
 from Terrain import Terrain
 
 from EcranEditionCombattant import EcranEditionCombattant
-from EcranEditionDecors import EcranEditionDecors
+from EcranEditionDecor import EcranEditionDecor
 from EcranEditionTerrain import EcranEditionTerrain
 from EcranAffichageTexte import EcranAffichageTexte
 from EcranGestionCombat import EcranGestionCombat
@@ -380,9 +380,9 @@ class Plateau(QGraphicsScene):
         self.editionCreature = EcranEditionCombattant(creature, 0, self.formeCases)
         self.editionCreature.setAttribute(Qt.WA_DeleteOnClose)
         r = self.editionCreature.exec_()
-        combattant = self.editionCreature.combattant
-        enregistrer(combattant.id, combattant, "lib\\biblio\\combattant")
         if r == 1:
+            combattant = self.editionCreature.combattant
+            enregistrer(combattant.id, combattant, "lib\\biblio\\combattant")
             self.majListeCreatures()
         self.editionCreature = None
         
@@ -407,10 +407,12 @@ class Plateau(QGraphicsScene):
     ##### affichage de la liste des decors enregistrees, et fonctions d'acces aux donnees""""     
     def afficheEcranEditionDecors(self, decor = None):
         """affiche l'ecran d'edition/creation de decors"""
-        self.editionDecor = EcranEditionDecors(decor, self.formeCases)
+        self.editionDecor = EcranEditionDecor(decor, 0, self.formeCases)
         self.editionDecor.setAttribute(Qt.WA_DeleteOnClose)
         r = self.editionDecor.exec_()
         if r == 1:
+            decor = self.editionDecor.decor
+            enregistrer(decor.id, decor, "lib\\biblio\\decor")
             self.majListeDecors()
             
     def majListeDecors(self):

+ 4 - 4
lib/VueEditionForme.py

@@ -27,12 +27,12 @@ class VueEditionForme(QGraphicsScene):
         self._rotation = 0
         self.selection = None
 
-        self.fenetre.ui.edc_vueForme.setScene(self)    
-        self.fenetre.ui.edc_vueForme.centerOn(self.fenetre.ui.edc_vueForme.mapFromScene(QPointF(60,60)))   #centre la vue sur la case 0,0
-        self.fenetre.ui.edc_vueForme.scale(0.22, 0.22)
+        self.fenetre.vueGraphique().setScene(self)    
+        self.fenetre.vueGraphique().centerOn(self.fenetre.vueGraphique().mapFromScene(QPointF(60,60)))   #centre la vue sur la case 0,0
+        self.fenetre.vueGraphique().scale(0.22, 0.22)
 
     def setCursor(self, curseur):
-        self.fenetre.ui.edc_vueForme.setCursor(curseur)
+        self.fenetre.vueGraphique().setCursor(curseur)
 
     #acces aux donnees
     def chargerFormeDef(self, formeDef):

BIN
lib/biblio/decor


+ 0 - 0
lib/EcranEditionAttaques.py → lib/ui/corbeille_ui/EcranEditionAttaques.py


+ 5 - 8
lib/ui/ecran_editionCombattant.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'editionCombattant.ui'
 #
-# Created: Fri Jun 26 11:37:59 2015
+# Created: Mon Jun 29 10:18:25 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -477,7 +477,7 @@ class Ui_edc_fenetre(object):
         self.label_5.setPixmap(QtGui.QPixmap(_fromUtf8(":/interface/24/ressource/plume_24.png")))
         self.label_5.setScaledContents(False)
         self.label_5.setObjectName(_fromUtf8("label_5"))
-        self.edc_taille = QtGui.QDoubleSpinBox(self.page_dep)
+        self.edc_taille = QtGui.QSpinBox(self.page_dep)
         self.edc_taille.setGeometry(QtCore.QRect(310, 60, 51, 31))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
@@ -493,10 +493,7 @@ class Ui_edc_fenetre(object):
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
         self.edc_taille.setFont(font)
-        self.edc_taille.setPrefix(_fromUtf8(""))
-        self.edc_taille.setDecimals(0)
-        self.edc_taille.setSingleStep(1.0)
-        self.edc_taille.setProperty("value", 2.0)
+        self.edc_taille.setMinimum(1)
         self.edc_taille.setObjectName(_fromUtf8("edc_taille"))
         self.label_15 = QtGui.QLabel(self.page_dep)
         self.label_15.setGeometry(QtCore.QRect(70, 60, 231, 31))
@@ -1059,8 +1056,8 @@ class Ui_edc_fenetre(object):
         self.horizontalLayout_2.addLayout(self.horizontalLayout)
 
         self.retranslateUi(edc_fenetre)
-        self.edc_pages.setCurrentIndex(5)
-        self.edc_filtreTypeObjet.setCurrentIndex(5)
+        self.edc_pages.setCurrentIndex(1)
+        self.edc_filtreTypeObjet.setCurrentIndex(4)
         QtCore.QObject.connect(self.edc_menu, QtCore.SIGNAL(_fromUtf8("cellClicked(int,int)")), self.edc_pages.setCurrentIndex)
         QtCore.QMetaObject.connectSlotsByName(edc_fenetre)
 

+ 406 - 311
lib/ui/ecran_editionDecor.py

@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'editionDecor.ui'
 #
-# Created: Fri Jun 26 11:43:38 2015
+# Created: Mon Jun 29 10:18:28 2015
 #      by: PyQt4 UI code generator 4.10.4
 #
 # WARNING! All changes made in this file will be lost!
@@ -26,20 +26,20 @@ except AttributeError:
 class Ui_edd_fenetre(object):
     def setupUi(self, edd_fenetre):
         edd_fenetre.setObjectName(_fromUtf8("edd_fenetre"))
-        edd_fenetre.resize(679, 504)
+        edd_fenetre.resize(698, 504)
         self.horizontalLayout_2 = QtGui.QHBoxLayout(edd_fenetre)
         self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
         self.horizontalLayout = QtGui.QHBoxLayout()
         self.horizontalLayout.setSpacing(3)
         self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
-        self.edc_menu = DmTableMenu(edd_fenetre)
+        self.edd_menu = DmTableMenu(edd_fenetre)
         sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Expanding)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.edc_menu.sizePolicy().hasHeightForWidth())
-        self.edc_menu.setSizePolicy(sizePolicy)
-        self.edc_menu.setMinimumSize(QtCore.QSize(170, 484))
-        self.edc_menu.setMaximumSize(QtCore.QSize(170, 484))
+        sizePolicy.setHeightForWidth(self.edd_menu.sizePolicy().hasHeightForWidth())
+        self.edd_menu.setSizePolicy(sizePolicy)
+        self.edd_menu.setMinimumSize(QtCore.QSize(170, 484))
+        self.edd_menu.setMaximumSize(QtCore.QSize(170, 484))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(6, 6, 6))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -95,96 +95,99 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(7, 7, 7))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.HighlightedText, brush)
-        self.edc_menu.setPalette(palette)
+        self.edd_menu.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Candara"))
         font.setPointSize(13)
         font.setBold(False)
         font.setWeight(50)
-        self.edc_menu.setFont(font)
-        self.edc_menu.setFocusPolicy(QtCore.Qt.NoFocus)
-        self.edc_menu.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.edc_menu.setFrameShadow(QtGui.QFrame.Sunken)
-        self.edc_menu.setLineWidth(0)
-        self.edc_menu.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
-        self.edc_menu.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
-        self.edc_menu.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
-        self.edc_menu.setProperty("showDropIndicator", False)
-        self.edc_menu.setDragDropOverwriteMode(False)
-        self.edc_menu.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
-        self.edc_menu.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
-        self.edc_menu.setIconSize(QtCore.QSize(30, 30))
-        self.edc_menu.setShowGrid(False)
-        self.edc_menu.setGridStyle(QtCore.Qt.SolidLine)
-        self.edc_menu.setCornerButtonEnabled(False)
-        self.edc_menu.setObjectName(_fromUtf8("edc_menu"))
-        self.edc_menu.setColumnCount(2)
-        self.edc_menu.setRowCount(4)
+        self.edd_menu.setFont(font)
+        self.edd_menu.setFocusPolicy(QtCore.Qt.NoFocus)
+        self.edd_menu.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.edd_menu.setFrameShadow(QtGui.QFrame.Sunken)
+        self.edd_menu.setLineWidth(0)
+        self.edd_menu.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
+        self.edd_menu.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
+        self.edd_menu.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
+        self.edd_menu.setProperty("showDropIndicator", False)
+        self.edd_menu.setDragDropOverwriteMode(False)
+        self.edd_menu.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
+        self.edd_menu.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
+        self.edd_menu.setIconSize(QtCore.QSize(30, 30))
+        self.edd_menu.setShowGrid(False)
+        self.edd_menu.setGridStyle(QtCore.Qt.SolidLine)
+        self.edd_menu.setCornerButtonEnabled(False)
+        self.edd_menu.setObjectName(_fromUtf8("edd_menu"))
+        self.edd_menu.setColumnCount(2)
+        self.edd_menu.setRowCount(4)
         item = QtGui.QTableWidgetItem()
-        self.edc_menu.setVerticalHeaderItem(0, item)
+        self.edd_menu.setVerticalHeaderItem(0, item)
         item = QtGui.QTableWidgetItem()
-        self.edc_menu.setVerticalHeaderItem(1, item)
+        self.edd_menu.setVerticalHeaderItem(1, item)
         item = QtGui.QTableWidgetItem()
-        self.edc_menu.setVerticalHeaderItem(2, item)
+        self.edd_menu.setVerticalHeaderItem(2, item)
         item = QtGui.QTableWidgetItem()
-        self.edc_menu.setVerticalHeaderItem(3, item)
+        self.edd_menu.setVerticalHeaderItem(3, item)
         item = QtGui.QTableWidgetItem()
-        self.edc_menu.setHorizontalHeaderItem(0, item)
+        self.edd_menu.setHorizontalHeaderItem(0, item)
         item = QtGui.QTableWidgetItem()
-        self.edc_menu.setHorizontalHeaderItem(1, item)
+        self.edd_menu.setHorizontalHeaderItem(1, item)
         item = QtGui.QTableWidgetItem()
         item.setFlags(QtCore.Qt.ItemIsSelectable)
-        self.edc_menu.setItem(0, 0, item)
+        self.edd_menu.setItem(0, 0, item)
         item = QtGui.QTableWidgetItem()
         item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
         icon = QtGui.QIcon()
         icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/oeil_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         item.setIcon(icon)
         item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsTristate)
-        self.edc_menu.setItem(0, 1, item)
+        self.edd_menu.setItem(0, 1, item)
         item = QtGui.QTableWidgetItem()
         item.setFlags(QtCore.Qt.ItemIsSelectable)
-        self.edc_menu.setItem(1, 0, item)
+        self.edd_menu.setItem(1, 0, item)
         item = QtGui.QTableWidgetItem()
         item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
         icon1 = QtGui.QIcon()
         icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/decor_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         item.setIcon(icon1)
         item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
-        self.edc_menu.setItem(1, 1, item)
+        self.edd_menu.setItem(1, 1, item)
         item = QtGui.QTableWidgetItem()
         item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
         icon2 = QtGui.QIcon()
         icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/sac_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         item.setIcon(icon2)
-        self.edc_menu.setItem(2, 1, item)
+        self.edd_menu.setItem(2, 1, item)
         item = QtGui.QTableWidgetItem()
         item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
-        self.edc_menu.setItem(3, 0, item)
+        self.edd_menu.setItem(3, 0, item)
         item = QtGui.QTableWidgetItem()
         item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
         icon3 = QtGui.QIcon()
         icon3.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/note_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         item.setIcon(icon3)
         item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
-        self.edc_menu.setItem(3, 1, item)
-        self.edc_menu.horizontalHeader().setVisible(False)
-        self.edc_menu.horizontalHeader().setDefaultSectionSize(10)
-        self.edc_menu.horizontalHeader().setHighlightSections(False)
-        self.edc_menu.horizontalHeader().setStretchLastSection(True)
-        self.edc_menu.verticalHeader().setVisible(False)
-        self.edc_menu.verticalHeader().setDefaultSectionSize(80)
-        self.edc_menu.verticalHeader().setHighlightSections(False)
-        self.horizontalLayout.addWidget(self.edc_menu)
+        self.edd_menu.setItem(3, 1, item)
+        self.edd_menu.horizontalHeader().setVisible(False)
+        self.edd_menu.horizontalHeader().setDefaultSectionSize(10)
+        self.edd_menu.horizontalHeader().setHighlightSections(False)
+        self.edd_menu.horizontalHeader().setStretchLastSection(True)
+        self.edd_menu.verticalHeader().setVisible(False)
+        self.edd_menu.verticalHeader().setDefaultSectionSize(80)
+        self.edd_menu.verticalHeader().setHighlightSections(False)
+        self.horizontalLayout.addWidget(self.edd_menu)
         self.verticalLayout = QtGui.QVBoxLayout()
         self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
-        self.edc_pages = QtGui.QStackedWidget(edd_fenetre)
-        self.edc_pages.setMinimumSize(QtCore.QSize(392, 0))
-        self.edc_pages.setObjectName(_fromUtf8("edc_pages"))
+        self.edd_pages = QtGui.QStackedWidget(edd_fenetre)
+        self.edd_pages.setMinimumSize(QtCore.QSize(392, 0))
+        font = QtGui.QFont()
+        font.setFamily(_fromUtf8("Verdana"))
+        self.edd_pages.setFont(font)
+        self.edd_pages.setObjectName(_fromUtf8("edd_pages"))
         self.page_nom = QtGui.QWidget()
         self.page_nom.setObjectName(_fromUtf8("page_nom"))
-        self.edc_nom = DmLineEdit(self.page_nom)
-        self.edc_nom.setGeometry(QtCore.QRect(110, 40, 271, 31))
+        self.edd_nom = DmLineEdit(self.page_nom)
+        self.edd_nom.setGeometry(QtCore.QRect(110, 40, 271, 31))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -195,21 +198,21 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_nom.setPalette(palette)
+        self.edd_nom.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_nom.setFont(font)
-        self.edc_nom.setObjectName(_fromUtf8("edc_nom"))
-        self.edc_logo = DmLabelChoixImage(self.page_nom)
-        self.edc_logo.setGeometry(QtCore.QRect(20, 10, 71, 71))
+        self.edd_nom.setFont(font)
+        self.edd_nom.setObjectName(_fromUtf8("edd_nom"))
+        self.edd_logo = DmLabelChoixImage(self.page_nom)
+        self.edd_logo.setGeometry(QtCore.QRect(20, 10, 71, 71))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
         font.setPointSize(7)
-        self.edc_logo.setFont(font)
-        self.edc_logo.setFrameShape(QtGui.QFrame.Box)
-        self.edc_logo.setFrameShadow(QtGui.QFrame.Sunken)
-        self.edc_logo.setAlignment(QtCore.Qt.AlignCenter)
-        self.edc_logo.setObjectName(_fromUtf8("edc_logo"))
+        self.edd_logo.setFont(font)
+        self.edd_logo.setFrameShape(QtGui.QFrame.Box)
+        self.edd_logo.setFrameShadow(QtGui.QFrame.Sunken)
+        self.edd_logo.setAlignment(QtCore.Qt.AlignCenter)
+        self.edd_logo.setObjectName(_fromUtf8("edd_logo"))
         self.label_8 = QtGui.QLabel(self.page_nom)
         self.label_8.setGeometry(QtCore.QRect(110, 15, 131, 21))
         font = QtGui.QFont()
@@ -218,12 +221,12 @@ class Ui_edd_fenetre(object):
         self.label_8.setFont(font)
         self.label_8.setObjectName(_fromUtf8("label_8"))
         self.frame_2 = QtGui.QFrame(self.page_nom)
-        self.frame_2.setGeometry(QtCore.QRect(30, 90, 371, 361))
-        self.frame_2.setFrameShape(QtGui.QFrame.WinPanel)
+        self.frame_2.setGeometry(QtCore.QRect(50, 80, 401, 351))
+        self.frame_2.setFrameShape(QtGui.QFrame.NoFrame)
         self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
         self.frame_2.setObjectName(_fromUtf8("frame_2"))
-        self.edc_vueForme = QtGui.QGraphicsView(self.frame_2)
-        self.edc_vueForme.setGeometry(QtCore.QRect(10, 10, 311, 321))
+        self.edd_vueForme = QtGui.QGraphicsView(self.frame_2)
+        self.edd_vueForme.setGeometry(QtCore.QRect(40, 28, 293, 296))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(244, 244, 244))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -234,49 +237,43 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_vueForme.setPalette(palette)
-        self.edc_vueForme.setFrameShape(QtGui.QFrame.NoFrame)
-        self.edc_vueForme.setFrameShadow(QtGui.QFrame.Raised)
-        self.edc_vueForme.setRenderHints(QtGui.QPainter.Antialiasing|QtGui.QPainter.HighQualityAntialiasing|QtGui.QPainter.TextAntialiasing)
-        self.edc_vueForme.setObjectName(_fromUtf8("edc_vueForme"))
-        self.edc_image = QtGui.QToolButton(self.frame_2)
-        self.edc_image.setGeometry(QtCore.QRect(330, 50, 31, 31))
+        self.edd_vueForme.setPalette(palette)
+        self.edd_vueForme.setFrameShape(QtGui.QFrame.WinPanel)
+        self.edd_vueForme.setFrameShadow(QtGui.QFrame.Raised)
+        self.edd_vueForme.setRenderHints(QtGui.QPainter.Antialiasing|QtGui.QPainter.HighQualityAntialiasing|QtGui.QPainter.TextAntialiasing)
+        self.edd_vueForme.setObjectName(_fromUtf8("edd_vueForme"))
+        self.edd_image = QtGui.QToolButton(self.frame_2)
+        self.edd_image.setGeometry(QtCore.QRect(340, 70, 31, 31))
         icon4 = QtGui.QIcon()
         icon4.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/portrait_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.edc_image.setIcon(icon4)
-        self.edc_image.setIconSize(QtCore.QSize(22, 22))
-        self.edc_image.setObjectName(_fromUtf8("edc_image"))
-        self.edc_couleur = QtGui.QToolButton(self.frame_2)
-        self.edc_couleur.setGeometry(QtCore.QRect(330, 10, 31, 31))
+        self.edd_image.setIcon(icon4)
+        self.edd_image.setIconSize(QtCore.QSize(22, 22))
+        self.edd_image.setObjectName(_fromUtf8("edd_image"))
+        self.edd_couleur = QtGui.QToolButton(self.frame_2)
+        self.edd_couleur.setGeometry(QtCore.QRect(340, 30, 31, 31))
+        self.edd_couleur.setText(_fromUtf8(""))
         icon5 = QtGui.QIcon()
         icon5.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/16/ressource/palette_16.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.edc_couleur.setIcon(icon5)
-        self.edc_couleur.setObjectName(_fromUtf8("edc_couleur"))
-        self.edc_aideForme = QtGui.QToolButton(self.frame_2)
-        self.edc_aideForme.setGeometry(QtCore.QRect(330, 270, 31, 31))
+        self.edd_couleur.setIcon(icon5)
+        self.edd_couleur.setObjectName(_fromUtf8("edd_couleur"))
+        self.edd_aideForme = QtGui.QToolButton(self.frame_2)
+        self.edd_aideForme.setGeometry(QtCore.QRect(340, 290, 31, 31))
         icon6 = QtGui.QIcon()
         icon6.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/aide_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.edc_aideForme.setIcon(icon6)
-        self.edc_aideForme.setObjectName(_fromUtf8("edc_aideForme"))
-        self.edc_casesHexa = QtGui.QRadioButton(self.frame_2)
-        self.edc_casesHexa.setGeometry(QtCore.QRect(30, 330, 131, 31))
-        self.edc_casesHexa.setChecked(True)
-        self.edc_casesHexa.setObjectName(_fromUtf8("edc_casesHexa"))
-        self.edc_casesCarrees = QtGui.QRadioButton(self.frame_2)
-        self.edc_casesCarrees.setGeometry(QtCore.QRect(170, 330, 111, 31))
-        self.edc_casesCarrees.setObjectName(_fromUtf8("edc_casesCarrees"))
-        self.edc_pages.addWidget(self.page_nom)
+        self.edd_aideForme.setIcon(icon6)
+        self.edd_aideForme.setObjectName(_fromUtf8("edd_aideForme"))
+        self.edd_casesHexa = QtGui.QRadioButton(self.frame_2)
+        self.edd_casesHexa.setGeometry(QtCore.QRect(40, 320, 151, 31))
+        self.edd_casesHexa.setChecked(True)
+        self.edd_casesHexa.setObjectName(_fromUtf8("edd_casesHexa"))
+        self.edd_casesCarrees = QtGui.QRadioButton(self.frame_2)
+        self.edd_casesCarrees.setGeometry(QtCore.QRect(220, 320, 111, 31))
+        self.edd_casesCarrees.setObjectName(_fromUtf8("edd_casesCarrees"))
+        self.edd_pages.addWidget(self.page_nom)
         self.page_dep = QtGui.QWidget()
         self.page_dep.setObjectName(_fromUtf8("page_dep"))
-        self.label_9 = QtGui.QLabel(self.page_dep)
-        self.label_9.setGeometry(QtCore.QRect(50, 100, 391, 31))
-        font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Verdana"))
-        self.label_9.setFont(font)
-        self.label_9.setFrameShape(QtGui.QFrame.NoFrame)
-        self.label_9.setObjectName(_fromUtf8("label_9"))
-        self.edc_depEscalade = QtGui.QDoubleSpinBox(self.page_dep)
-        self.edc_depEscalade.setGeometry(QtCore.QRect(220, 130, 51, 31))
+        self.edd_taille = QtGui.QSpinBox(self.page_dep)
+        self.edd_taille.setGeometry(QtCore.QRect(290, 30, 51, 31))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -287,58 +284,94 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_depEscalade.setPalette(palette)
+        self.edd_taille.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_depEscalade.setFont(font)
-        self.edc_depEscalade.setPrefix(_fromUtf8(""))
-        self.edc_depEscalade.setDecimals(0)
-        self.edc_depEscalade.setSingleStep(1.0)
-        self.edc_depEscalade.setProperty("value", 2.0)
-        self.edc_depEscalade.setObjectName(_fromUtf8("edc_depEscalade"))
-        self.label_12 = QtGui.QLabel(self.page_dep)
-        self.label_12.setGeometry(QtCore.QRect(110, 130, 91, 31))
-        font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Verdana"))
-        self.label_12.setFont(font)
-        self.label_12.setFrameShape(QtGui.QFrame.NoFrame)
-        self.label_12.setObjectName(_fromUtf8("label_12"))
-        self.edc_saut = QtGui.QDoubleSpinBox(self.page_dep)
-        self.edc_saut.setGeometry(QtCore.QRect(290, 320, 51, 31))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_saut.setPalette(palette)
+        self.edd_taille.setFont(font)
+        self.edd_taille.setMinimum(1)
+        self.edd_taille.setMaximum(999)
+        self.edd_taille.setObjectName(_fromUtf8("edd_taille"))
+        self.label_15 = QtGui.QLabel(self.page_dep)
+        self.label_15.setGeometry(QtCore.QRect(50, 30, 231, 31))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_saut.setFont(font)
-        self.edc_saut.setPrefix(_fromUtf8(""))
-        self.edc_saut.setDecimals(0)
-        self.edc_saut.setSingleStep(1.0)
-        self.edc_saut.setProperty("value", 5.0)
-        self.edc_saut.setObjectName(_fromUtf8("edc_saut"))
-        self.label_14 = QtGui.QLabel(self.page_dep)
-        self.label_14.setGeometry(QtCore.QRect(50, 320, 231, 31))
+        self.label_15.setFont(font)
+        self.label_15.setFrameShape(QtGui.QFrame.NoFrame)
+        self.label_15.setObjectName(_fromUtf8("label_15"))
+        self.edd_hauteurPlafond = QtGui.QCheckBox(self.page_dep)
+        self.edd_hauteurPlafond.setGeometry(QtCore.QRect(60, 60, 181, 17))
         font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Verdana"))
-        self.label_14.setFont(font)
-        self.label_14.setFrameShape(QtGui.QFrame.NoFrame)
-        self.label_14.setObjectName(_fromUtf8("label_14"))
-        self.label_4 = QtGui.QLabel(self.page_dep)
-        self.label_4.setGeometry(QtCore.QRect(60, 130, 31, 31))
+        font.setItalic(True)
+        self.edd_hauteurPlafond.setFont(font)
+        self.edd_hauteurPlafond.setObjectName(_fromUtf8("edd_hauteurPlafond"))
+        self.groupBox = QtGui.QGroupBox(self.page_dep)
+        self.groupBox.setGeometry(QtCore.QRect(50, 129, 341, 41))
+        self.groupBox.setTitle(_fromUtf8(""))
+        self.groupBox.setFlat(True)
+        self.groupBox.setObjectName(_fromUtf8("groupBox"))
+        self.radioButton_2 = QtGui.QRadioButton(self.groupBox)
+        self.radioButton_2.setGeometry(QtCore.QRect(280, 10, 51, 31))
+        self.radioButton_2.setChecked(True)
+        self.radioButton_2.setObjectName(_fromUtf8("radioButton_2"))
+        self.edd_escalade = QtGui.QRadioButton(self.groupBox)
+        self.edd_escalade.setGeometry(QtCore.QRect(190, 10, 51, 31))
+        self.edd_escalade.setObjectName(_fromUtf8("edd_escalade"))
+        self.label = QtGui.QLabel(self.groupBox)
+        self.label.setGeometry(QtCore.QRect(40, 10, 131, 31))
+        self.label.setObjectName(_fromUtf8("label"))
+        self.label_4 = QtGui.QLabel(self.groupBox)
+        self.label_4.setGeometry(QtCore.QRect(0, 10, 31, 31))
         self.label_4.setText(_fromUtf8(""))
         self.label_4.setPixmap(QtGui.QPixmap(_fromUtf8(":/interface/24/ressource/escalade_24.png")))
-        self.label_4.setScaledContents(False)
         self.label_4.setObjectName(_fromUtf8("label_4"))
-        self.edc_taille = QtGui.QDoubleSpinBox(self.page_dep)
-        self.edc_taille.setGeometry(QtCore.QRect(290, 60, 51, 31))
+        self.groupBox_2 = QtGui.QGroupBox(self.page_dep)
+        self.groupBox_2.setGeometry(QtCore.QRect(50, 190, 341, 41))
+        self.groupBox_2.setTitle(_fromUtf8(""))
+        self.groupBox_2.setFlat(True)
+        self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
+        self.radioButton_3 = QtGui.QRadioButton(self.groupBox_2)
+        self.radioButton_3.setGeometry(QtCore.QRect(280, 10, 51, 31))
+        self.radioButton_3.setChecked(True)
+        self.radioButton_3.setObjectName(_fromUtf8("radioButton_3"))
+        self.edd_brule = QtGui.QRadioButton(self.groupBox_2)
+        self.edd_brule.setGeometry(QtCore.QRect(190, 10, 51, 31))
+        self.edd_brule.setObjectName(_fromUtf8("edd_brule"))
+        self.label_2 = QtGui.QLabel(self.groupBox_2)
+        self.label_2.setGeometry(QtCore.QRect(40, 10, 121, 31))
+        self.label_2.setObjectName(_fromUtf8("label_2"))
+        self.label_5 = QtGui.QLabel(self.groupBox_2)
+        self.label_5.setGeometry(QtCore.QRect(0, 10, 31, 31))
+        self.label_5.setText(_fromUtf8(""))
+        self.label_5.setPixmap(QtGui.QPixmap(_fromUtf8(":/interface/24/ressource/feu_24.png")))
+        self.label_5.setScaledContents(False)
+        self.label_5.setObjectName(_fromUtf8("label_5"))
+        self.groupBox_3 = QtGui.QGroupBox(self.page_dep)
+        self.groupBox_3.setGeometry(QtCore.QRect(50, 250, 341, 41))
+        self.groupBox_3.setTitle(_fromUtf8(""))
+        self.groupBox_3.setFlat(True)
+        self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
+        self.radioButton_4 = QtGui.QRadioButton(self.groupBox_3)
+        self.radioButton_4.setGeometry(QtCore.QRect(280, 10, 51, 31))
+        self.radioButton_4.setChecked(False)
+        self.radioButton_4.setObjectName(_fromUtf8("radioButton_4"))
+        self.edd_bloqueVue = QtGui.QRadioButton(self.groupBox_3)
+        self.edd_bloqueVue.setGeometry(QtCore.QRect(190, 10, 51, 31))
+        self.edd_bloqueVue.setChecked(True)
+        self.edd_bloqueVue.setObjectName(_fromUtf8("edd_bloqueVue"))
+        self.label_3 = QtGui.QLabel(self.groupBox_3)
+        self.label_3.setGeometry(QtCore.QRect(40, 10, 131, 31))
+        self.label_3.setObjectName(_fromUtf8("label_3"))
+        self.label_6 = QtGui.QLabel(self.groupBox_3)
+        self.label_6.setGeometry(QtCore.QRect(0, 10, 31, 31))
+        self.label_6.setText(_fromUtf8(""))
+        self.label_6.setPixmap(QtGui.QPixmap(_fromUtf8(":/interface/24/ressource/oeilBarre_24.png")))
+        self.label_6.setScaledContents(False)
+        self.label_6.setObjectName(_fromUtf8("label_6"))
+        self.edd_pages.addWidget(self.page_dep)
+        self.page_invent = QtGui.QWidget()
+        self.page_invent.setObjectName(_fromUtf8("page_invent"))
+        self.edd_listeInventaire = DmTableInventaire(self.page_invent)
+        self.edd_listeInventaire.setGeometry(QtCore.QRect(10, 34, 491, 361))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -349,108 +382,172 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_taille.setPalette(palette)
+        self.edd_listeInventaire.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_taille.setFont(font)
-        self.edc_taille.setPrefix(_fromUtf8(""))
-        self.edc_taille.setDecimals(0)
-        self.edc_taille.setSingleStep(1.0)
-        self.edc_taille.setProperty("value", 2.0)
-        self.edc_taille.setObjectName(_fromUtf8("edc_taille"))
-        self.label_15 = QtGui.QLabel(self.page_dep)
-        self.label_15.setGeometry(QtCore.QRect(50, 60, 231, 31))
+        self.edd_listeInventaire.setFont(font)
+        self.edd_listeInventaire.setFrameShape(QtGui.QFrame.WinPanel)
+        self.edd_listeInventaire.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
+        self.edd_listeInventaire.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
+        self.edd_listeInventaire.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
+        self.edd_listeInventaire.setAlternatingRowColors(False)
+        self.edd_listeInventaire.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
+        self.edd_listeInventaire.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
+        self.edd_listeInventaire.setShowGrid(True)
+        self.edd_listeInventaire.setGridStyle(QtCore.Qt.SolidLine)
+        self.edd_listeInventaire.setObjectName(_fromUtf8("edd_listeInventaire"))
+        self.edd_listeInventaire.setColumnCount(5)
+        self.edd_listeInventaire.setRowCount(1)
+        item = QtGui.QTableWidgetItem()
+        self.edd_listeInventaire.setVerticalHeaderItem(0, item)
+        item = QtGui.QTableWidgetItem()
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.label_15.setFont(font)
-        self.label_15.setFrameShape(QtGui.QFrame.NoFrame)
-        self.label_15.setObjectName(_fromUtf8("label_15"))
-        self.edc_pages.addWidget(self.page_dep)
-        self.page_invent = QtGui.QWidget()
-        self.page_invent.setObjectName(_fromUtf8("page_invent"))
-        self.edc_pages.addWidget(self.page_invent)
-        self.page_notes = QtGui.QWidget()
-        self.page_notes.setObjectName(_fromUtf8("page_notes"))
-        self.label_23 = QtGui.QLabel(self.page_notes)
-        self.label_23.setGeometry(QtCore.QRect(30, 120, 151, 20))
+        font.setPointSize(7)
+        font.setBold(True)
+        font.setWeight(75)
+        item.setFont(font)
+        self.edd_listeInventaire.setHorizontalHeaderItem(0, item)
+        item = QtGui.QTableWidgetItem()
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.label_23.setFont(font)
-        self.label_23.setObjectName(_fromUtf8("label_23"))
-        self.edc_notes = QtGui.QTextEdit(self.page_notes)
-        self.edc_notes.setGeometry(QtCore.QRect(30, 150, 411, 171))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_notes.setPalette(palette)
+        font.setPointSize(7)
+        font.setBold(True)
+        font.setWeight(75)
+        item.setFont(font)
+        self.edd_listeInventaire.setHorizontalHeaderItem(1, item)
+        item = QtGui.QTableWidgetItem()
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_notes.setFont(font)
-        self.edc_notes.setObjectName(_fromUtf8("edc_notes"))
-        self.edc_detail_age = DmLineEdit(self.page_notes)
-        self.edc_detail_age.setGeometry(QtCore.QRect(350, 20, 81, 20))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_detail_age.setPalette(palette)
+        font.setPointSize(7)
+        font.setBold(True)
+        font.setItalic(False)
+        font.setWeight(75)
+        item.setFont(font)
+        self.edd_listeInventaire.setHorizontalHeaderItem(2, item)
+        item = QtGui.QTableWidgetItem()
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_detail_age.setFont(font)
-        self.edc_detail_age.setObjectName(_fromUtf8("edc_detail_age"))
-        self.label_16 = QtGui.QLabel(self.page_notes)
-        self.label_16.setGeometry(QtCore.QRect(300, 19, 41, 21))
+        font.setPointSize(7)
+        font.setBold(True)
+        font.setWeight(75)
+        item.setFont(font)
+        icon7 = QtGui.QIcon()
+        icon7.addPixmap(QtGui.QPixmap(_fromUtf8("../../img/poids.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        item.setIcon(icon7)
+        self.edd_listeInventaire.setHorizontalHeaderItem(3, item)
+        item = QtGui.QTableWidgetItem()
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        font.setPointSize(8)
-        self.label_16.setFont(font)
-        self.label_16.setObjectName(_fromUtf8("label_16"))
-        self.label_17 = QtGui.QLabel(self.page_notes)
-        self.label_17.setGeometry(QtCore.QRect(300, 49, 41, 21))
+        font.setPointSize(7)
+        font.setBold(True)
+        font.setWeight(75)
+        item.setFont(font)
+        self.edd_listeInventaire.setHorizontalHeaderItem(4, item)
+        item = QtGui.QTableWidgetItem()
+        item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter|QtCore.Qt.AlignCenter)
+        font = QtGui.QFont()
+        font.setBold(False)
+        font.setWeight(50)
+        item.setFont(font)
+        item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsEnabled)
+        self.edd_listeInventaire.setItem(0, 0, item)
+        item = QtGui.QTableWidgetItem()
+        item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
+        self.edd_listeInventaire.setItem(0, 1, item)
+        item = QtGui.QTableWidgetItem()
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
         font.setPointSize(8)
-        self.label_17.setFont(font)
-        self.label_17.setObjectName(_fromUtf8("label_17"))
-        self.edc_detail_sexe = DmLineEdit(self.page_notes)
-        self.edc_detail_sexe.setGeometry(QtCore.QRect(350, 49, 81, 20))
+        font.setItalic(True)
+        item.setFont(font)
+        item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
+        self.edd_listeInventaire.setItem(0, 2, item)
+        item = QtGui.QTableWidgetItem()
+        item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
+        self.edd_listeInventaire.setItem(0, 3, item)
+        item = QtGui.QTableWidgetItem()
+        item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsDragEnabled|QtCore.Qt.ItemIsDropEnabled|QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled)
+        self.edd_listeInventaire.setItem(0, 4, item)
+        self.edd_listeInventaire.horizontalHeader().setVisible(False)
+        self.edd_listeInventaire.horizontalHeader().setCascadingSectionResizes(False)
+        self.edd_listeInventaire.horizontalHeader().setDefaultSectionSize(60)
+        self.edd_listeInventaire.horizontalHeader().setMinimumSectionSize(32)
+        self.edd_listeInventaire.verticalHeader().setVisible(False)
+        self.edd_listeInventaire.verticalHeader().setDefaultSectionSize(18)
+        self.edd_listeInventaire.verticalHeader().setMinimumSectionSize(14)
+        self.edd_filtreTypeObjet = DmTabInventaire(self.page_invent)
+        self.edd_filtreTypeObjet.setGeometry(QtCore.QRect(10, 10, 491, 28))
         palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
+        brush = QtGui.QBrush(QtGui.QColor(170, 0, 0, 100))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
+        brush = QtGui.QBrush(QtGui.QColor(170, 0, 0, 100))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_detail_sexe.setPalette(palette)
+        self.edd_filtreTypeObjet.setPalette(palette)
         font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Verdana"))
-        self.edc_detail_sexe.setFont(font)
-        self.edc_detail_sexe.setObjectName(_fromUtf8("edc_detail_sexe"))
-        self.label_41 = QtGui.QLabel(self.page_notes)
-        self.label_41.setGeometry(QtCore.QRect(300, 79, 41, 21))
+        font.setStyleStrategy(QtGui.QFont.PreferAntialias)
+        self.edd_filtreTypeObjet.setFont(font)
+        self.edd_filtreTypeObjet.setTabShape(QtGui.QTabWidget.Rounded)
+        self.edd_filtreTypeObjet.setIconSize(QtCore.QSize(19, 21))
+        self.edd_filtreTypeObjet.setObjectName(_fromUtf8("edd_filtreTypeObjet"))
+        self.filtre_tout = QtGui.QWidget()
+        self.filtre_tout.setObjectName(_fromUtf8("filtre_tout"))
+        icon8 = QtGui.QIcon()
+        icon8.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/etoile_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.edd_filtreTypeObjet.addTab(self.filtre_tout, icon8, _fromUtf8(""))
+        self.filtre_0 = QtGui.QWidget()
+        self.filtre_0.setObjectName(_fromUtf8("filtre_0"))
+        icon9 = QtGui.QIcon()
+        icon9.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/pieces_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.edd_filtreTypeObjet.addTab(self.filtre_0, icon9, _fromUtf8(""))
+        self.filtre_1 = QtGui.QWidget()
+        self.filtre_1.setObjectName(_fromUtf8("filtre_1"))
+        icon10 = QtGui.QIcon()
+        icon10.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/armes_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.edd_filtreTypeObjet.addTab(self.filtre_1, icon10, _fromUtf8(""))
+        self.filtre_2 = QtGui.QWidget()
+        self.filtre_2.setObjectName(_fromUtf8("filtre_2"))
+        icon11 = QtGui.QIcon()
+        icon11.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/chimie_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.edd_filtreTypeObjet.addTab(self.filtre_2, icon11, _fromUtf8(""))
+        self.filtre_3 = QtGui.QWidget()
+        self.filtre_3.setObjectName(_fromUtf8("filtre_3"))
+        icon12 = QtGui.QIcon()
+        icon12.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/diamant_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.edd_filtreTypeObjet.addTab(self.filtre_3, icon12, _fromUtf8(""))
+        self.filtre_4 = QtGui.QWidget()
+        self.filtre_4.setObjectName(_fromUtf8("filtre_4"))
+        icon13 = QtGui.QIcon()
+        icon13.addPixmap(QtGui.QPixmap(_fromUtf8(":/interface/32/ressource/boiteOutils_32.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.edd_filtreTypeObjet.addTab(self.filtre_4, icon13, _fromUtf8(""))
+        self.edd_inventaire_poids = DmLabel(self.page_invent)
+        self.edd_inventaire_poids.setGeometry(QtCore.QRect(170, 400, 61, 20))
+        font = QtGui.QFont()
+        font.setItalic(True)
+        self.edd_inventaire_poids.setFont(font)
+        self.edd_inventaire_poids.setObjectName(_fromUtf8("edd_inventaire_poids"))
+        self.label_7 = QtGui.QLabel(self.page_invent)
+        self.label_7.setGeometry(QtCore.QRect(10, 400, 151, 21))
+        font = QtGui.QFont()
+        font.setItalic(True)
+        self.label_7.setFont(font)
+        self.label_7.setObjectName(_fromUtf8("label_7"))
+        self.edd_pages.addWidget(self.page_invent)
+        self.page_notes = QtGui.QWidget()
+        self.page_notes.setObjectName(_fromUtf8("page_notes"))
+        self.label_23 = QtGui.QLabel(self.page_notes)
+        self.label_23.setGeometry(QtCore.QRect(30, 120, 151, 20))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        font.setPointSize(8)
-        self.label_41.setFont(font)
-        self.label_41.setObjectName(_fromUtf8("label_41"))
-        self.edc_detail_poids = DmLineEdit(self.page_notes)
-        self.edc_detail_poids.setGeometry(QtCore.QRect(350, 80, 81, 20))
+        self.label_23.setFont(font)
+        self.label_23.setObjectName(_fromUtf8("label_23"))
+        self.edd_notes = QtGui.QTextEdit(self.page_notes)
+        self.edd_notes.setGeometry(QtCore.QRect(30, 150, 441, 171))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -461,20 +558,20 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_detail_poids.setPalette(palette)
+        self.edd_notes.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_detail_poids.setFont(font)
-        self.edc_detail_poids.setObjectName(_fromUtf8("edc_detail_poids"))
+        self.edd_notes.setFont(font)
+        self.edd_notes.setObjectName(_fromUtf8("edd_notes"))
         self.label_43 = QtGui.QLabel(self.page_notes)
-        self.label_43.setGeometry(QtCore.QRect(20, 20, 61, 21))
+        self.label_43.setGeometry(QtCore.QRect(30, 19, 61, 21))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
         font.setPointSize(8)
         self.label_43.setFont(font)
         self.label_43.setObjectName(_fromUtf8("label_43"))
-        self.edc_detail_espece = DmLineEdit(self.page_notes)
-        self.edc_detail_espece.setGeometry(QtCore.QRect(100, 21, 171, 20))
+        self.edd_detail_poids = DmLineEdit(self.page_notes)
+        self.edd_detail_poids.setGeometry(QtCore.QRect(130, 20, 151, 20))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -485,21 +582,14 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_detail_espece.setPalette(palette)
+        self.edd_detail_poids.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_detail_espece.setFont(font)
-        self.edc_detail_espece.setText(_fromUtf8(""))
-        self.edc_detail_espece.setObjectName(_fromUtf8("edc_detail_espece"))
-        self.label_44 = QtGui.QLabel(self.page_notes)
-        self.label_44.setGeometry(QtCore.QRect(20, 49, 81, 21))
-        font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Verdana"))
-        font.setPointSize(8)
-        self.label_44.setFont(font)
-        self.label_44.setObjectName(_fromUtf8("label_44"))
-        self.edc_detail_profession = DmLineEdit(self.page_notes)
-        self.edc_detail_profession.setGeometry(QtCore.QRect(100, 50, 171, 20))
+        self.edd_detail_poids.setFont(font)
+        self.edd_detail_poids.setText(_fromUtf8(""))
+        self.edd_detail_poids.setObjectName(_fromUtf8("edd_detail_poids"))
+        self.edd_detail_dim = DmLineEdit(self.page_notes)
+        self.edd_detail_dim.setGeometry(QtCore.QRect(130, 51, 151, 20))
         palette = QtGui.QPalette()
         brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
         brush.setStyle(QtCore.Qt.SolidPattern)
@@ -510,119 +600,124 @@ class Ui_edd_fenetre(object):
         brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
         brush.setStyle(QtCore.Qt.SolidPattern)
         palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_detail_profession.setPalette(palette)
+        self.edd_detail_dim.setPalette(palette)
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_detail_profession.setFont(font)
-        self.edc_detail_profession.setText(_fromUtf8(""))
-        self.edc_detail_profession.setObjectName(_fromUtf8("edc_detail_profession"))
-        self.edc_detail_religion = DmLineEdit(self.page_notes)
-        self.edc_detail_religion.setGeometry(QtCore.QRect(100, 80, 171, 21))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(248, 248, 248))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(240, 240, 240))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        self.edc_detail_religion.setPalette(palette)
-        font = QtGui.QFont()
-        font.setFamily(_fromUtf8("Verdana"))
-        self.edc_detail_religion.setFont(font)
-        self.edc_detail_religion.setText(_fromUtf8(""))
-        self.edc_detail_religion.setObjectName(_fromUtf8("edc_detail_religion"))
-        self.label_42 = QtGui.QLabel(self.page_notes)
-        self.label_42.setGeometry(QtCore.QRect(20, 70, 81, 31))
+        self.edd_detail_dim.setFont(font)
+        self.edd_detail_dim.setText(_fromUtf8(""))
+        self.edd_detail_dim.setObjectName(_fromUtf8("edd_detail_dim"))
+        self.label_44 = QtGui.QLabel(self.page_notes)
+        self.label_44.setGeometry(QtCore.QRect(30, 50, 91, 21))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
         font.setPointSize(8)
-        self.label_42.setFont(font)
-        self.label_42.setObjectName(_fromUtf8("label_42"))
-        self.edc_pages.addWidget(self.page_notes)
-        self.verticalLayout.addWidget(self.edc_pages)
+        self.label_44.setFont(font)
+        self.label_44.setObjectName(_fromUtf8("label_44"))
+        self.edd_pages.addWidget(self.page_notes)
+        self.verticalLayout.addWidget(self.edd_pages)
         self.frame = QtGui.QFrame(edd_fenetre)
         self.frame.setMinimumSize(QtCore.QSize(392, 50))
         self.frame.setMaximumSize(QtCore.QSize(16777215, 50))
         self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
         self.frame.setFrameShadow(QtGui.QFrame.Raised)
         self.frame.setObjectName(_fromUtf8("frame"))
-        self.edc_enregistrer = QtGui.QPushButton(self.frame)
-        self.edc_enregistrer.setEnabled(False)
-        self.edc_enregistrer.setGeometry(QtCore.QRect(370, 10, 91, 31))
+        self.edd_enregistrer = QtGui.QPushButton(self.frame)
+        self.edd_enregistrer.setEnabled(False)
+        self.edd_enregistrer.setGeometry(QtCore.QRect(370, 10, 121, 31))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
         font.setBold(True)
         font.setWeight(75)
-        self.edc_enregistrer.setFont(font)
-        self.edc_enregistrer.setObjectName(_fromUtf8("edc_enregistrer"))
-        self.edc_annuler = QtGui.QPushButton(self.frame)
-        self.edc_annuler.setGeometry(QtCore.QRect(10, 10, 81, 31))
+        self.edd_enregistrer.setFont(font)
+        self.edd_enregistrer.setObjectName(_fromUtf8("edd_enregistrer"))
+        self.edd_annuler = QtGui.QPushButton(self.frame)
+        self.edd_annuler.setGeometry(QtCore.QRect(10, 10, 81, 31))
         font = QtGui.QFont()
         font.setFamily(_fromUtf8("Verdana"))
-        self.edc_annuler.setFont(font)
-        self.edc_annuler.setObjectName(_fromUtf8("edc_annuler"))
+        self.edd_annuler.setFont(font)
+        self.edd_annuler.setObjectName(_fromUtf8("edd_annuler"))
         self.verticalLayout.addWidget(self.frame)
         self.horizontalLayout.addLayout(self.verticalLayout)
         self.horizontalLayout.setStretch(1, 1)
         self.horizontalLayout_2.addLayout(self.horizontalLayout)
 
         self.retranslateUi(edd_fenetre)
-        self.edc_pages.setCurrentIndex(3)
+        self.edd_pages.setCurrentIndex(1)
+        self.edd_filtreTypeObjet.setCurrentIndex(3)
+        QtCore.QObject.connect(self.edd_menu, QtCore.SIGNAL(_fromUtf8("cellClicked(int,int)")), self.edd_pages.setCurrentIndex)
         QtCore.QMetaObject.connectSlotsByName(edd_fenetre)
 
     def retranslateUi(self, edd_fenetre):
         edd_fenetre.setWindowTitle(_translate("edd_fenetre", "Création / édition de décor", None))
-        item = self.edc_menu.verticalHeaderItem(0)
+        item = self.edd_menu.verticalHeaderItem(0)
         item.setText(_translate("edd_fenetre", "1", None))
-        item = self.edc_menu.verticalHeaderItem(1)
+        item = self.edd_menu.verticalHeaderItem(1)
         item.setText(_translate("edd_fenetre", "2", None))
-        item = self.edc_menu.verticalHeaderItem(2)
+        item = self.edd_menu.verticalHeaderItem(2)
         item.setText(_translate("edd_fenetre", "4", None))
-        item = self.edc_menu.verticalHeaderItem(3)
+        item = self.edd_menu.verticalHeaderItem(3)
         item.setText(_translate("edd_fenetre", "3", None))
-        item = self.edc_menu.horizontalHeaderItem(0)
+        item = self.edd_menu.horizontalHeaderItem(0)
         item.setText(_translate("edd_fenetre", "inutile", None))
-        item = self.edc_menu.horizontalHeaderItem(1)
+        item = self.edd_menu.horizontalHeaderItem(1)
         item.setText(_translate("edd_fenetre", "menus", None))
-        __sortingEnabled = self.edc_menu.isSortingEnabled()
-        self.edc_menu.setSortingEnabled(False)
-        item = self.edc_menu.item(0, 1)
+        __sortingEnabled = self.edd_menu.isSortingEnabled()
+        self.edd_menu.setSortingEnabled(False)
+        item = self.edd_menu.item(0, 1)
         item.setText(_translate("edd_fenetre", " NOM ET APPARENCE ", None))
-        item = self.edc_menu.item(1, 1)
+        item = self.edd_menu.item(1, 1)
         item.setText(_translate("edd_fenetre", " FORME ET EFFETS", None))
-        item = self.edc_menu.item(2, 1)
+        item = self.edd_menu.item(2, 1)
         item.setText(_translate("edd_fenetre", "CONTENU", None))
-        item = self.edc_menu.item(3, 1)
+        item = self.edd_menu.item(3, 1)
         item.setText(_translate("edd_fenetre", " NOTES ", None))
-        self.edc_menu.setSortingEnabled(__sortingEnabled)
-        self.edc_logo.setText(_translate("edd_fenetre", "Choisissez \n"
+        self.edd_menu.setSortingEnabled(__sortingEnabled)
+        self.edd_logo.setText(_translate("edd_fenetre", "Choisissez \n"
 "un fichier\n"
 "image", None))
         self.label_8.setText(_translate("edd_fenetre", "Nom : ", None))
-        self.edc_image.setText(_translate("edd_fenetre", "...", None))
-        self.edc_couleur.setText(_translate("edd_fenetre", "...", None))
-        self.edc_aideForme.setText(_translate("edd_fenetre", "...", None))
-        self.edc_casesHexa.setText(_translate("edd_fenetre", "Cases hexagonales", None))
-        self.edc_casesCarrees.setText(_translate("edd_fenetre", "Cases carrées", None))
-        self.label_9.setText(_translate("edd_fenetre", "Nombre de cases que la créature peut parcourir en un tour : ", None))
-        self.label_12.setText(_translate("edd_fenetre", "Escalade ", None))
-        self.label_14.setText(_translate("edd_fenetre", "Hauteur maximum pour les sauts : ", None))
+        self.edd_image.setText(_translate("edd_fenetre", "...", None))
+        self.edd_aideForme.setText(_translate("edd_fenetre", "...", None))
+        self.edd_casesHexa.setText(_translate("edd_fenetre", "Cases hexagonales", None))
+        self.edd_casesCarrees.setText(_translate("edd_fenetre", "Cases carrées", None))
         self.label_15.setText(_translate("edd_fenetre", "Hauteur du décor (en cases) : ", None))
+        self.edd_hauteurPlafond.setText(_translate("edd_fenetre", "Jusqu\'au plafond", None))
+        self.radioButton_2.setText(_translate("edd_fenetre", "Non", None))
+        self.edd_escalade.setText(_translate("edd_fenetre", "Oui", None))
+        self.label.setText(_translate("edd_fenetre", "Peut être escaladé : ", None))
+        self.radioButton_3.setText(_translate("edd_fenetre", "Non", None))
+        self.edd_brule.setText(_translate("edd_fenetre", "Oui", None))
+        self.label_2.setText(_translate("edd_fenetre", "Peut brûler : ", None))
+        self.radioButton_4.setText(_translate("edd_fenetre", "Non", None))
+        self.edd_bloqueVue.setText(_translate("edd_fenetre", "Oui", None))
+        self.label_3.setText(_translate("edd_fenetre", "Bloque la vue : ", None))
+        self.edd_listeInventaire.setSortingEnabled(True)
+        item = self.edd_listeInventaire.verticalHeaderItem(0)
+        item.setText(_translate("edd_fenetre", "Nouvelle ligne", None))
+        item = self.edd_listeInventaire.horizontalHeaderItem(0)
+        item.setText(_translate("edd_fenetre", "Type", None))
+        item = self.edd_listeInventaire.horizontalHeaderItem(1)
+        item.setText(_translate("edd_fenetre", "Quantité", None))
+        item = self.edd_listeInventaire.horizontalHeaderItem(2)
+        item.setText(_translate("edd_fenetre", "Objet", None))
+        item = self.edd_listeInventaire.horizontalHeaderItem(4)
+        item.setText(_translate("edd_fenetre", "...", None))
+        __sortingEnabled = self.edd_listeInventaire.isSortingEnabled()
+        self.edd_listeInventaire.setSortingEnabled(False)
+        item = self.edd_listeInventaire.item(0, 0)
+        item.setText(_translate("edd_fenetre", "*", None))
+        item = self.edd_listeInventaire.item(0, 2)
+        item.setText(_translate("edd_fenetre", "(Cliquer pour ajouter un item)", None))
+        self.edd_listeInventaire.setSortingEnabled(__sortingEnabled)
+        self.edd_inventaire_poids.setText(_translate("edd_fenetre", "... kg", None))
+        self.label_7.setText(_translate("edd_fenetre", "Poids total du contenu :", None))
         self.label_23.setText(_translate("edd_fenetre", "Notes :", None))
-        self.label_16.setText(_translate("edd_fenetre", "Age : ", None))
-        self.label_17.setText(_translate("edd_fenetre", "Sexe : ", None))
-        self.label_41.setText(_translate("edd_fenetre", "Poids : ", None))
-        self.label_43.setText(_translate("edd_fenetre", "Espèce : ", None))
-        self.label_44.setText(_translate("edd_fenetre", "Profession : ", None))
-        self.label_42.setText(_translate("edd_fenetre", "Religion /\n"
-"Croyances :", None))
-        self.edc_enregistrer.setText(_translate("edd_fenetre", "Enregistrer", None))
-        self.edc_annuler.setText(_translate("edd_fenetre", "Annuler", None))
+        self.label_43.setText(_translate("edd_fenetre", "Poids : ", None))
+        self.label_44.setText(_translate("edd_fenetre", "Dimensions : ", None))
+        self.edd_enregistrer.setText(_translate("edd_fenetre", "Enregistrer", None))
+        self.edd_annuler.setText(_translate("edd_fenetre", "Annuler", None))
 
-from dm import DmLabelChoixImage, DmTableMenu, DmLineEdit
+from dm import DmTabInventaire, DmLineEdit, DmLabel, DmLabelChoixImage, DmTableMenu, DmTableInventaire
 import ressource_rc
 
 if __name__ == "__main__":

+ 10 - 19
lib/ui/editionCombattant.ui

@@ -508,7 +508,7 @@
           </font>
          </property>
          <property name="currentIndex">
-          <number>0</number>
+          <number>1</number>
          </property>
          <widget class="QWidget" name="page_nom">
           <widget class="DmLineEdit" name="edc_nom">
@@ -1298,7 +1298,7 @@ image</string>
             <bool>false</bool>
            </property>
           </widget>
-          <widget class="QDoubleSpinBox" name="edc_taille">
+          <widget class="QSpinBox" name="edc_taille">
            <property name="geometry">
             <rect>
              <x>310</x>
@@ -1349,17 +1349,8 @@ image</string>
              <family>Verdana</family>
             </font>
            </property>
-           <property name="prefix">
-            <string/>
-           </property>
-           <property name="decimals">
-            <number>0</number>
-           </property>
-           <property name="singleStep">
-            <double>1.000000000000000</double>
-           </property>
-           <property name="value">
-            <double>2.000000000000000</double>
+           <property name="minimum">
+            <number>1</number>
            </property>
           </widget>
           <widget class="QLabel" name="label_15">
@@ -1871,7 +1862,7 @@ image</string>
             <enum>QTabWidget::Rounded</enum>
            </property>
            <property name="currentIndex">
-            <number>5</number>
+            <number>4</number>
            </property>
            <property name="iconSize">
             <size>
@@ -2892,11 +2883,6 @@ parlées : </string>
   </layout>
  </widget>
  <customwidgets>
-  <customwidget>
-   <class>DmLabel</class>
-   <extends>QLabel</extends>
-   <header location="global">dm.h</header>
-  </customwidget>
   <customwidget>
    <class>DmTableMenu</class>
    <extends>QTableWidget</extends>
@@ -2912,6 +2898,11 @@ parlées : </string>
    <extends>QLineEdit</extends>
    <header location="global">dm.h</header>
   </customwidget>
+  <customwidget>
+   <class>DmLabel</class>
+   <extends>QLabel</extends>
+   <header location="global">dm.h</header>
+  </customwidget>
   <customwidget>
    <class>DmTableInventaire</class>
    <extends>QTableWidget</extends>

File diff suppressed because it is too large
+ 458 - 347
lib/ui/editionDecor.ui


+ 7 - 5
lib/ui/ressource.qrc

@@ -1,5 +1,5 @@
 <RCC>
-    <qresource lang="fr" prefix="/interface/16">
+    <qresource prefix="/interface/16" lang="fr">
         <file>ressource/ellipsePleine_16.png</file>
         <file>ressource/ellipseVide_16.png</file>
         <file>ressource/flecheHaut_16.png</file>
@@ -51,13 +51,15 @@
         <file>ressource/corbeille_16.png</file>
         <file>ressource/depart_16.png</file>
     </qresource>
-    <qresource lang="fr" prefix="/interface/24">
+    <qresource prefix="/interface/24" lang="fr">
         <file>ressource/poids_24.png</file>
         <file>ressource/nage_24.png</file>
         <file>ressource/plume_24.png</file>
         <file>ressource/escalade_24.png</file>
+        <file>ressource/feu_24.png</file>
+        <file>ressource/oeilBarre_24.png</file>
     </qresource>
-    <qresource lang="fr" prefix="/interface/32">
+    <qresource prefix="/interface/32" lang="fr">
         <file>ressource/armes_32.png</file>
         <file>ressource/etoile_32.png</file>
         <file>ressource/boiteOutils_32.png</file>
@@ -95,10 +97,10 @@
         <file>ressource/tableau_32.png</file>
         <file>ressource/nouveauJoueur_32.png</file>
     </qresource>
-    <qresource lang="fr" prefix="/interface/512">
+    <qresource prefix="/interface/512" lang="fr">
         <file>ressource/armes_512.png</file>
         <file>ressource/dossier_512.png</file>
         <file>ressource/plus_512.png</file>
     </qresource>
-    <qresource lang="fr" prefix="/curseur"/>
+    <qresource prefix="/curseur" lang="fr"/>
 </RCC>

BIN
lib/ui/ressource/feu_24.png


BIN
lib/ui/ressource/oeilBarre_24.png


+ 83 - 6
lib/ui/ressource_rc.py

@@ -2,7 +2,7 @@
 
 # Resource object code
 #
-# Created: ven. 26. juin 17:18:53 2015
+# Created: lun. 29. juin 09:41:11 2015
 #      by: The Resource Compiler for PyQt (Qt v4.8.5)
 #
 # WARNING! All changes made in this file will be lost!
@@ -4162,6 +4162,41 @@ qt_resource_data = "\
 \xab\xc7\x1c\xdc\xd4\xfa\x2d\x74\x93\xf7\xe0\x00\x3e\xe1\x78\xd3\
 \xca\x2b\x6a\xfb\xfe\xe8\x7f\xe4\xea\x3f\x9e\x7b\x29\xa7\x6c\x42\
 \xf6\xcc\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x02\x0f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x01\xd6\x49\x44\x41\x54\x48\x89\xb5\xd4\x4d\x4b\x55\x51\
+\x14\xc6\xf1\x5f\x90\x08\x0a\x62\x14\x45\x5a\x99\x35\x13\x02\xcd\
+\xac\xa0\x26\xbd\x8c\x1a\xf4\x41\xea\x03\x14\x09\x25\x56\x54\x74\
+\x93\x9a\x34\x91\x20\x68\x54\x83\xa2\x49\x83\x46\x7d\x81\x52\xa8\
+\xa0\xf7\x17\xa3\x59\x19\xa9\x54\x83\xf0\x34\xd8\xfb\x7a\xf7\x39\
+\x9c\x7b\x55\xe2\x2c\xd8\x1c\x58\x6b\x3f\xff\x7d\xf6\x5a\x6b\x2f\
+\xaa\xb1\x03\xd8\x51\x11\xdb\x55\x64\x18\xab\x02\x5e\x8b\xf0\xf7\
+\xd8\x56\x15\xfc\x5d\xd5\xf0\xad\xab\x11\xb6\xe3\x18\xc6\x71\x17\
+\x8f\xf1\x08\xb7\x71\x1a\x07\x71\x3e\xc2\x67\xb0\x73\xa5\xe0\x8d\
+\x98\xc0\xf7\x28\x5e\x6e\xad\x0a\x7e\x02\xf3\x2b\x04\x17\xe1\x9b\
+\x5b\x81\xdb\x70\xa7\x04\x70\x0d\xbb\x70\x14\xaf\x0b\xb1\xcf\x1a\
+\xfd\x3e\x82\x59\xdc\x8a\xac\x9c\xad\xc5\xc3\x44\xf8\x00\xcf\x85\
+\x9c\xa7\xb6\xaf\x09\xbc\x17\x93\x49\xec\x5e\x64\x2e\x59\x2d\x09\
+\x8e\x62\x4d\x4c\x53\xad\x70\xc0\x58\x09\x7c\x18\x6f\xa2\xe6\x6c\
+\xc2\xb9\x52\x17\x1d\xc1\x62\x74\x5e\x4f\x60\xbf\xf1\x42\xe8\x24\
+\x1a\xdd\x52\x84\xcf\x62\x21\xd1\xdd\x88\xfb\x16\x71\x18\xa6\xa3\
+\xe3\x99\x7c\xee\xea\xfe\x69\x8d\xda\x7c\x42\x7f\x8c\xef\x89\xf0\
+\x0c\x4f\x13\x5d\x1b\xa6\xa2\x7f\x4a\xfc\xeb\x0c\xbf\x30\x98\x6c\
+\x1c\x95\x2f\x68\x33\x78\x86\x53\x89\x6e\x24\xde\x7e\x29\x23\x5d\
+\xc2\x0b\xac\xcf\x90\x7a\xab\x75\x25\x90\x56\xf0\xb7\xe8\x88\xb1\
+\x2d\xf8\x12\xfd\x1f\xd0\x5d\x3f\x75\xb7\x46\xef\x7f\xc5\x7e\x5c\
+\x4c\xe0\xdb\x9b\xc0\x67\x30\x10\x63\x7b\xa3\x36\xc3\x9c\xd0\xda\
+\x39\x3b\x24\x14\x2b\xc3\xdf\xf8\xfd\x98\xc0\x07\xf0\x23\x39\xf4\
+\x32\xd6\xa3\x13\x67\x92\xb4\xcc\x0b\x23\xa4\xd4\x06\xf1\xb3\x04\
+\xde\x23\xbc\xd6\x6e\x21\x75\xbd\x38\x8e\x9b\xf2\xe3\xe4\x15\x86\
+\x9a\xc1\xe1\x5c\x09\x7c\x08\xdf\xe4\x0b\x5e\x5c\x73\xc2\x1b\xe9\
+\x6c\x05\x1f\x4f\xe0\x7d\xd1\xd7\x8e\xfb\xf8\x53\x02\x5d\xc0\x13\
+\x9c\xc4\xba\x56\x60\xb8\xa0\x51\xf9\xbe\x92\x78\x87\x90\xa2\x61\
+\xa1\x21\xfa\x15\x46\x41\x2b\xbb\xb4\x0c\xfc\xbf\x2d\xc3\x4b\x6c\
+\xaa\x02\x4e\xb8\xf6\x86\xaa\xe0\xff\x00\x4c\x84\xbf\xc1\x5e\x3e\
+\x4c\x1f\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \x00\x00\x01\xaa\
 \x89\
 \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -4240,6 +4275,38 @@ qt_resource_data = "\
 \x27\x78\x22\x75\x7c\x8d\xca\x9b\xfa\xcb\xfa\x04\xd2\x2e\xad\xf6\
 \xc2\x61\x8f\x71\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 \
+\x00\x00\x01\xd8\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\
+\x00\x00\x01\x9f\x49\x44\x41\x54\x48\x89\xb5\xd6\xcf\x8b\xcf\x41\
+\x1c\xc7\xf1\x07\x4e\x1c\xa4\x6c\xec\x5e\xec\xc9\x37\x1b\x25\x91\
+\xf6\xe6\x8e\x95\x88\x9b\xf2\xa3\xcd\x81\xe2\x24\x52\x0e\x1c\xe4\
+\x46\xec\x4d\x89\x1c\x38\xed\x1f\x20\xb9\xb9\x88\x8b\x83\x03\xeb\
+\x20\xa5\xa8\x95\x1c\xc8\xc6\xc7\xe1\x33\x6b\xa7\x4f\x33\xf3\x99\
+\x65\xbd\x6b\x6a\x3e\x9f\xcf\xf3\xf5\x7a\x7d\x66\x3e\x9f\x99\xcf\
+\x87\xfa\xba\x8f\x7d\x8b\xe0\x17\x5d\x2f\xd0\xe0\x26\x96\xff\x8f\
+\x80\x4f\x21\xa0\xc1\x8d\xa5\x36\x1f\x8b\xcc\xe7\xdb\xf1\xa5\x0c\
+\xb8\x90\x08\xf8\x82\xe1\x70\x7d\xe4\x5f\xcc\x57\x60\x26\x11\xd0\
+\xe0\x7a\x60\x8e\xe1\xc8\xdf\x06\x9c\xcc\x98\x37\xf8\x86\xb5\x98\
+\x08\xfd\x9d\x35\x86\xbb\xb1\x2c\xf4\xd7\xe0\x63\x21\xa0\xc1\x24\
+\xce\x86\xfe\x0c\x56\xf5\x05\x4c\x63\x3c\xf4\x6f\xf5\x98\x37\x78\
+\x8a\xb7\xd1\xf1\xd5\x92\xf9\x30\xbe\xe3\x34\xf6\xe3\x57\xc2\x30\
+\x75\x2e\x6e\x3f\x30\x9a\x0b\xb8\x12\xa0\x87\x98\xcd\x18\x9c\xc1\
+\x87\x9e\x90\x6b\x29\xf3\xd5\x05\xd3\xb8\x8d\x63\x23\x3e\x17\x98\
+\x77\x16\x9e\xe3\x9f\x3a\x57\x61\xde\x60\x7d\xe0\xf7\xf4\x70\x83\
+\x6e\xc0\xcb\x02\xfc\x40\x3b\xf7\xaf\x3a\x9a\xe9\x82\xe6\x40\x0c\
+\x0e\x7a\xee\x66\x2b\x9e\xe3\x52\x27\x60\x73\x41\x73\x22\x06\x0f\
+\x15\xc0\xc7\x81\xb9\x8b\xa1\xee\xb0\xf1\x2c\xa3\x3b\x1c\x43\x93\
+\x19\xe8\x27\xb6\x07\x66\x43\xc2\x1c\x2e\x66\xb4\xdb\x62\xe8\x60\
+\x06\xba\x9d\x31\x8d\x6b\x6f\x42\xf7\x5e\xe7\x2d\x1a\xc1\x5c\x07\
+\x9a\xb3\xb0\x5b\x96\x6a\x4b\x22\xe0\x7c\x0a\xbc\xd7\x81\x9e\x54\
+\x98\xc3\xa6\x8e\xee\x35\x56\xa6\xc0\x21\xed\xd0\xe6\xc1\xa9\xca\
+\x80\x1d\x91\xe6\xab\x76\x44\xd9\x1a\x68\x57\x61\xa3\xfd\xc8\xd7\
+\xd4\xd1\xc0\xcf\x62\x57\x8d\x60\x1d\x1e\xe1\x4d\x65\xc0\x1d\xed\
+\x02\x1c\xab\xe4\xd1\xfe\x35\x9c\xd2\x33\x5c\xed\xde\x7f\x59\x66\
+\xce\xe1\x37\xbd\x39\xe3\xc4\xca\xc0\xa6\x53\x00\x00\x00\x00\x49\
+\x45\x4e\x44\xae\x42\x60\x82\
 "
 
 qt_resource_name = "\
@@ -4641,6 +4708,10 @@ qt_resource_name = "\
 \x01\x52\x10\x47\
 \x00\x65\
 \x00\x73\x00\x63\x00\x61\x00\x6c\x00\x61\x00\x64\x00\x65\x00\x5f\x00\x32\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x10\
+\x03\x5b\x16\x27\
+\x00\x6f\
+\x00\x65\x00\x69\x00\x6c\x00\x42\x00\x61\x00\x72\x00\x72\x00\x65\x00\x5f\x00\x32\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x0c\
 \x0c\xbc\xa0\x67\
 \x00\x70\
@@ -4653,12 +4724,16 @@ qt_resource_name = "\
 \x02\xbf\xac\x27\
 \x00\x6e\
 \x00\x61\x00\x67\x00\x65\x00\x5f\x00\x32\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0a\
+\x02\x5a\xce\x27\
+\x00\x66\
+\x00\x65\x00\x75\x00\x5f\x00\x32\x00\x34\x00\x2e\x00\x70\x00\x6e\x00\x67\
 "
 
 qt_resource_struct = "\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x02\
-\x00\x00\x00\x2e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x34\
+\x00\x00\x00\x2e\x00\x02\x00\x00\x00\x01\x00\x00\x00\x36\
 \x00\x00\x00\x18\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\
 \x00\x00\x00\x38\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0a\
 \x00\x00\x00\x22\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\
@@ -4703,12 +4778,14 @@ qt_resource_struct = "\
 \x00\x00\x03\x12\x00\x00\x00\x4a\x00\x25\x00\x00\x36\xda\
 \x00\x00\x00\xec\x00\x00\x00\x4a\x00\x25\x00\x00\x0a\xeb\
 \x00\x00\x01\x6a\x00\x00\x00\x4a\x00\x25\x00\x00\x14\xfe\
-\x00\x00\x00\x42\x00\x02\x00\x00\x00\x04\x00\x00\x00\x30\
+\x00\x00\x00\x42\x00\x02\x00\x00\x00\x06\x00\x00\x00\x30\
 \x00\x00\x0c\x24\x00\x00\x00\x4a\x00\x25\x00\x00\xf5\x32\
-\x00\x00\x0c\x84\x00\x00\x00\x4a\x00\x25\x00\x00\xfa\x63\
-\x00\x00\x0c\x66\x00\x00\x00\x4a\x00\x25\x00\x00\xf8\xf3\
+\x00\x00\x0c\xc6\x00\x00\x00\x4a\x00\x25\x00\x00\xfd\xcb\
+\x00\x00\x0c\xaa\x00\x00\x00\x4a\x00\x25\x00\x00\xfc\x76\
 \x00\x00\x0c\x48\x00\x00\x00\x4a\x00\x25\x00\x00\xf7\x45\
-\x00\x00\x00\x42\x00\x02\x00\x00\x00\x32\x00\x00\x00\x35\
+\x00\x00\x0c\x8c\x00\x00\x00\x4a\x00\x25\x00\x00\xfb\x06\
+\x00\x00\x0c\x6e\x00\x00\x00\x4a\x00\x25\x00\x00\xf9\x58\
+\x00\x00\x00\x42\x00\x02\x00\x00\x00\x32\x00\x00\x00\x37\
 \x00\x00\x07\xf6\x00\x00\x00\x4a\x00\x25\x00\x00\x81\x42\
 \x00\x00\x05\xea\x00\x00\x00\x4a\x00\x25\x00\x00\x6e\x83\
 \x00\x00\x07\x3e\x00\x00\x00\x4a\x00\x25\x00\x00\x7a\xca\

BIN
parties/Partie1/svg/0.p


+ 1 - 1
parties/Partie1/svg/infos_sauvegarde

@@ -1 +1 @@
-€}qU0}q(UnomqUtestqUdateCreationqGAÕc[Ã,í‘UdateSvgqGAÕc[ÃÔí‘UchapitreqU1UenCoursq‰Upublicq	‰us.
+€}qU0}q(UnomqUtestqUdateCreationqGAÕc[Ã,í‘UdateSvgqGAÕd?—\)UchapitreqU1UenCoursq‰Upublicq	‰us.

+ 0 - 0
img/chevalier.png → ressources/commun/chevalier.png


+ 0 - 0
img/colonne.png → ressources/commun/colonne.png


+ 0 - 0
img/dragon.png → ressources/commun/dragon.png


+ 0 - 0
img/dragon4.png → ressources/commun/dragon4.png


+ 0 - 0
img/herbe.jpg → ressources/commun/herbe.jpg


+ 0 - 0
img/orc.png → ressources/commun/orc.png


+ 0 - 0
img/table.png → ressources/commun/table.png


Some files were not shown because too many files changed in this diff