| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #from __future__ import unicode_literals
- # -*- coding: utf-8 -*-
- from __future__ import division
- import Modes
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- from Case import Case
- class Cache(QGraphicsItem):
- """cache place sur le plateau"""
- def __init__(self, plateau, numero, parent=None):
- """initialisation de la fenetre"""
- super (Cache, self).__init__(parent)
- self.plateau = plateau
- self.numero = numero
- self.nom = ""
- self.listeCases = []
- self._active = False
- self._etiquette = None
- self._listePolygones = []
- def __getstate__(self):
- """selectionne les attributs qui seront sauvegardes"""
- self._active = False
- state = {key:value for key, value in self.__dict__.items() if key in ["numero", "nom", "listeCases", "_active"]}
- return (state)
- def __setstate__(self, state):
- """recupere les attributs sauvegardes"""
- self.__dict__ = state
- def recreer(self, plateau):
- super (Cache, self).__init__()
- self._etiquette = None
- self.plateau = plateau
- self._listePolygones = []
- self.creer()
-
- def creer(self):
- """cree le cache sur la liste de cases en parametre"""
- self.setFlag(QGraphicsItem.ItemIsFocusable)
- self.setAcceptHoverEvents(True)
- self._etiquette = QGraphicsTextItem(QString.fromUtf8("{}".format(self.nom)))
- self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
- police = QFont("Arial",30)
- police.setBold(True)
- self._etiquette.setFont(police)
- self._etiquette.setDefaultTextColor(QColor(255, 255, 255, 200))
- self._etiquette.setParentItem(self)
- self._etiquette.setZValue(10)
- for coord in self.listeCases:
- self.ajouterPolygone(Case(self.plateau).polygone(coord[0], coord[1]))
- self.setZValue(100)
- self.setFlag(QGraphicsItem.ItemHasNoContents)
- self.setHandlesChildEvents(True)
- self.plateau.addItem(self)
- self._active = True
- def ajouterPolygone(self, polygone):
- polygoneGraphique = PolygoneCache(self)
- polygoneGraphique.creer(polygone)
- polygoneGraphique.setParentItem(self)
- self._listePolygones.append(polygoneGraphique)
-
- def majForme(self, listeCases):
- for polygone in self._listePolygones:
- polygone.setParentItem(None)
- self._listePolygones = []
- self.listeCases = listeCases
- for coord in self.listeCases:
- self.ajouterPolygone(Case(self.plateau).polygone(coord[0], coord[1]))
- self._etiquette.setPos(self.mapFromScene(self.plateau.cases[self.coordCentre()].centreGraphique))
- def majEtiquette(self):
- self._etiquette.setPlainText(QString().fromUtf8(self.nom))
- def modeChange(self, mode):
- if self._active:
- if issubclass(mode, Modes.ModeBaseCp):
- transparence = 100
- else:
- transparence = 255
- for polygone in self._listePolygones:
- polygone.majTransparence(transparence)
- def activer(self, actif):
- self._active = actif
- self.majAffichage()
- def actif(self):
- return self._active
- def majAffichage(self):
- self.setVisible(self._active)
- def coordCentre(self):
- """renvoie les coordonnees de la case la plus centrale de la liste"""
- xtot = 0
- ytot = 0
- for coord in self.listeCases:
- xtot += coord[0]
- ytot += coord[1]
- ecartMin = None
- coordRetenues = None
- for coord in self.listeCases:
- ecartX = abs(xtot - (coord[0] * len(self.listeCases)))
- ecartY = abs(ytot - (coord[1] * len(self.listeCases)))
- if not ecartMin or (ecartX + ecartY) < ecartMin:
- coordRetenues = coord
- ecartMin = ecartX + ecartY
- return coordRetenues
- def sceneEvent(self, event):
- """filtre les evenements souris et clavier
- si vrai: l'evenement est bloque"""
- retour = (not self.actif() or issubclass(self.plateau.modeActif.__class__, Modes.ModeBaseCp))
- if not retour:
- event.accept()
- else:
- event.ignore()
- return retour
-
- def boundingRect(self):
- return QRectF()
- class PolygoneCache(QGraphicsPolygonItem):
- def __init__(self, cache, parent=None):
- """initialisation de la fenetre"""
- super (PolygoneCache, self).__init__(parent)
- self.cache = cache
- self.setAcceptHoverEvents(True)
-
- def creer(self, polygone):
- self.setPolygon(polygone)
- self.majTransparence(255)
- self.setParentItem(self)
- def majTransparence(self, transparence):
- self.setBrush(QColor(0,0,0,transparence))
- pinceau = QPen()
- pinceau.setBrush(QColor(0,0,0,transparence))
- pinceau.setWidth(1)
- self.setPen(pinceau)
|