[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/games/kmj
From:       Wolfgang Rohdewald <wolfgang () rohdewald ! de>
Date:       2009-04-02 1:38:50
Message-ID: 1238636330.072479.2481.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 948034 by wrohdewald:

class PlayerWindLabel


 M  +30 -6     board.py  
 M  +3 -23     kmj.py  


--- trunk/playground/games/kmj/board.py #948033:948034
@@ -22,7 +22,7 @@
 from PyKDE4.kdecore import i18n
 from PyQt4.QtCore import Qt, QPointF,  QPoint,  QString,  QRectF, QMimeData,  SIGNAL, QVariant
 from PyQt4.QtGui import  QGraphicsRectItem, QGraphicsItem,  QSizePolicy, QFrame, QGraphicsItemGroup
-from PyQt4.QtGui import  QMenu, QCursor, QGraphicsView,  QGraphicsEllipseItem,  QGraphicsScene
+from PyQt4.QtGui import  QMenu, QCursor, QGraphicsView,  QGraphicsEllipseItem,  QGraphicsScene, QLabel
 from PyQt4.QtGui import QColor, QPainter, QDrag, QPixmap, QStyleOptionGraphicsItem, QPen, QBrush
 from PyQt4.QtSvg import QGraphicsSvgItem
 from tileset import Tileset, TileException,  LIGHTSOURCES, elements,  Elements
@@ -30,7 +30,8 @@
 
 import random
 
-from util import logException
+import util
+from util import logException, PREF
 
 ROUNDWINDCOLOR = QColor(235, 235, 173)
 
@@ -286,6 +287,27 @@
         windtilenr = {'N':1, 'S':2, 'E':3, 'W':4}
         self.face.setElementId('WIND_%d' % windtilenr[name])
 
+class PlayerWindLabel(QLabel):
+    def __init__(self, name, roundsFinished=0, parent=None):
+        QLabel.__init__(self, parent)
+        pwind = PlayerWind(name, roundsFinished)
+        self.tileset = Tileset(util.PREF.windTilesetName)
+        pwind.setFaceTileset(self.tileset)
+        pm= QPixmap(70, 70)
+        self.pm = pm
+        pm.fill(Qt.transparent)
+        painter = QPainter(pm)
+        painter.setRenderHint(QPainter.Antialiasing)
+        painter.scale(0.65, 0.65)
+        pwind.paint(painter, QStyleOptionGraphicsItem())
+        for child in pwind.childItems():
+            if isinstance(child, QGraphicsSvgItem):
+                painter.save()
+                painter.translate(child.mapToParent(0.0, 0.0))
+                child.paint(painter, QStyleOptionGraphicsItem())
+                painter.restore()
+        self.setPixmap(pm)
+
 class Board(QGraphicsRectItem):
     """ a board with any number of positioned tiles"""
     def __init__(self, width, height, tileset, tiles=None,  rotation = 0):
@@ -861,10 +883,12 @@
         assert event # quieten pylint
         # also adjust the background to the container. Do this here because this way
         # it is easier to minimize calls to setBackground()
-        grandpa = self.parentWidget().parentWidget()
-        if grandpa and grandpa.objectName() == 'MainWindow':
-            grandpa.applySettings()
-            grandpa.setBackground()
+        parent = self.parentWidget()
+        if parent:
+            grandpa = parent.parentWidget()
+            if grandpa and grandpa.objectName() == 'MainWindow':
+                grandpa.applySettings()
+                grandpa.setBackground()
         if self.scene():
             self.fitInView(self.scene().itemsBoundingRect(), Qt.KeepAspectRatio)
 
--- trunk/playground/games/kmj/kmj.py #948033:948034
@@ -62,7 +62,7 @@
 
 try:
     import board
-    from board import Tile,  PlayerWind, Walls,  FittingView,  ROUNDWINDCOLOR, \
+    from board import Tile, PlayerWind, PlayerWindLabel, Walls,  FittingView,  ROUNDWINDCOLOR, \
         HandBoard,  SelectorBoard, MJScene
     from playerlist import PlayerList
     from tileset import Tileset, elements, LIGHTSOURCES
@@ -226,9 +226,7 @@
         self.connect(self.buttonBox, SIGNAL("rejected()"), self, SLOT("reject()"))
         grid = QGridLayout()
         self.names = None
-        self.scenes = []
         self.nameWidgets = []
-        self.tileset = Tileset(util.PREF.tilesetName)
         for idx, wind in enumerate(WINDS):
             cbName = QComboBox()
             # increase width, we want to see the full window title
@@ -236,15 +234,7 @@
             cbName.addItems(playerNames)
             grid.addWidget(cbName, idx+1, 1)
             self.nameWidgets.append(cbName)
-            self.scenes.append(QGraphicsScene())
-            view = FittingView()
-            view.setEnabled(False)
-            view.setScene(self.scenes[idx])
-            pwind = PlayerWind(wind)
-            pwind.setFaceTileset(self.tileset)
-            pwind.scale(0.3, 0.3)
-            self.scenes[idx].addItem(pwind)
-            grid.addWidget(view, idx+1, 0)
+            grid.addWidget(PlayerWindLabel(wind), idx+1, 0)
             self.connect(cbName, SIGNAL('currentIndexChanged(const QString&)'),
                 self.slotValidate)
         grid.setColumnStretch(0, 1)
@@ -309,23 +299,13 @@
         grid.addWidget(QLabel(i18n("Wind")), 0, 1)
         grid.addWidget(QLabel(i18n("Score")), 0, 2)
         grid.addWidget(QLabel(i18n("Mah Jongg")), 0, 3)
-        self.scenes = []
-        self.tileset = Tileset(util.PREF.windTilesetName)
         for idx, player in enumerate(self.players):
             player.spValue = QSpinBox()
             player.spValue.setRange(0, util.PREF.upperLimit)
             name = QLabel(player.name)
             name.setBuddy(player.spValue)
             grid.addWidget(name, idx+1, 0)
-            self.scenes.append(QGraphicsScene())
-            view = FittingView()
-            view.setScene(self.scenes[idx])
-            pwind = PlayerWind(player.wind.name, self.game.roundsFinished)
-            pwind.setFaceTileset(self.tileset)
-            pwind.scale(0.3, 0.3)
-            self.scenes[idx].addItem(pwind)
-            view.setEnabled(False)
-            grid.addWidget(view, idx+1, 1)
+            grid.addWidget(PlayerWindLabel(player.wind.name, self.game.roundsFinished), idx+1, 1)
             grid.addWidget(player.spValue, idx+1, 2)
             player.won = QCheckBox("")
             grid.addWidget(player.won, idx+1, 3)
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic