[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-03-31 23:40:27
Message-ID: 1238542827.166393.10675.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 947632 by wrohdewald:

change applySettings, fix repositoining wind/name on wall when changing tileset


 M  +5 -7      board.py  
 M  +46 -35    kmj.py  


--- trunk/playground/games/kmj/board.py #947631:947632
@@ -26,7 +26,7 @@
 from PyQt4.QtGui import QColor, QPainter, QDrag, QPixmap, QStyleOptionGraphicsItem, QPen, QBrush
 from PyQt4.QtSvg import QGraphicsSvgItem
 from tileset import Tileset, TileException,  LIGHTSOURCES, elements,  Elements
-from scoring import Meld,  Hand, Ruleset, EXPOSED, CONCEALED, CLAIMEDKONG, meldSort
+from scoring import Meld,  Hand, Ruleset, EXPOSED, CONCEALED, meldSort
 
 import random
 
@@ -249,12 +249,10 @@
         self.face.setParentItem(self)
         self.prevailing = None
         self.setWind(name, roundsFinished)
-        if parent and parent.tileset:
-            self.setTileset(parent.tileset)
 
-    def setTileset(self, tileset):
+    def setFaceTileset(self, tileset):
         """sets tileset and defines the round wind tile according to tileset"""
-        self.face.tileset = tileset
+        self.resetTransform()
         size = tileset.faceSize
         self.setFlag(QGraphicsItem.ItemClipsChildrenToShape)
         if tileset.desktopFileName == 'traditional':
@@ -312,10 +310,12 @@
 
     def dragEnterEvent(self, event):
         """drag enters the HandBoard: highlight it"""
+        assert event # quieten pylint
         self.setPen(QPen(QColor('blue')))
 
     def dragLeaveEvent(self, event):
         """drag leaves the HandBoard"""
+        assert event # quieten pylint
         self._noPen()
 
     def _noPen(self):
@@ -750,7 +750,6 @@
                 if meldX+ len(meld) >= bonusStart:
                     meldY = 1.0 + self.rowDistance - meldY
                     meldX = 9
-                    print 'alternate row:', meldY, meldX, len(meld)
                 for idx, tile in enumerate(meld):
                     tile.setPos(meldX, meldY)
                     tile.dark = meld.contentPairs[idx][0].isupper()
@@ -767,7 +766,6 @@
             xPos = self.width - 4.0
         for bonus in sorted(bonusTiles):
             bonus.board = self
-            print bonus, xPos, yPos
             bonus.setPos(xPos, yPos)
             xPos += 1
 
--- trunk/playground/games/kmj/kmj.py #947631:947632
@@ -69,7 +69,7 @@
     from background import Background
     from games import Games
     from genericdelegates import GenericDelegate,  IntegerColumnDelegate
-    from config import Preferences,  ConfigDialog
+    from config import PrefSkeleton,  PrefContainer, ConfigDialog
 except ImportError,  e:
     NOTFOUND.append('kmj modules: %s' % e.message)
 
@@ -228,7 +228,7 @@
         self.names = None
         self.scenes = []
         self.nameWidgets = []
-        tileset = Tileset('traditional')
+        self.tileset = Tileset(util.PREF.tilesetName)
         for idx, wind in enumerate(WINDS):
             cbName = QComboBox()
             # increase width, we want to see the full window title
@@ -241,7 +241,7 @@
             view.setEnabled(False)
             view.setScene(self.scenes[idx])
             pwind = PlayerWind(wind)
-            pwind.setTileset(tileset)
+            pwind.setFaceTileset(self.tileset)
             pwind.scale(0.3, 0.3)
             self.scenes[idx].addItem(pwind)
             grid.addWidget(view, idx+1, 0)
@@ -318,7 +318,7 @@
         grid.addWidget(QLabel(i18n("Mah Jongg")), 0, 3)
         self.scenes = []
         self.selectTileDialog = SelectTiles(self.players)
-        tileset = Tileset('traditional')
+        self.tileset = Tileset(util.PREF.windTilesetName)
         for idx, player in enumerate(self.players):
             player.spValue = QSpinBox()
             player.spValue.setRange(0, util.PREF.upperLimit)
@@ -329,7 +329,7 @@
             view = FittingView()
             view.setScene(self.scenes[idx])
             pwind = PlayerWind(player.wind.name, self.game.roundsFinished)
-            pwind.setTileset(tileset)
+            pwind.setFaceTileset(self.tileset)
             pwind.scale(0.3, 0.3)
             self.scenes[idx].addItem(pwind)
             view.setEnabled(False)
@@ -422,16 +422,23 @@
         """the name of the player"""
         return self.__name
 
-    def setNameColor(self):
+    def getTileset(self):
+        """getter for tileset"""
+        return self.wall.tileset
+
+    def setTileset(self, tileset):
         """sets the name color matching to the wall color"""
         if self.nameItem is None:
             return
-        if self.wall.tileset.desktopFileName == 'jade':
+        if tileset.desktopFileName == 'jade':
             color = Qt.white
         else:
             color = Qt.black
         self.nameItem.setBrush(QBrush(QColor(color)))
+        self.placeOnWall()
 
+    tileset = property(getTileset, setTileset)
+
     def setName(self, name):
         """change the name of the player, write it on the wall"""
         if self.__name == name:
@@ -442,7 +449,7 @@
         if name == '':
             return
         self.nameItem = self.scene.addSimpleText(name)
-        self.setNameColor()
+        self.tileset = self.wall.tileset
         self.nameItem.scale(3, 3)
         if self.wall.rotation == 180:
             # rotate name around its center:
@@ -497,7 +504,8 @@
     def __init__(self):
         super(PlayField, self).__init__()
         board.PLAYFIELD = self
-        self.pref = Preferences()
+        PrefSkeleton() # defines PREF
+        self.prevPreferences = PrefContainer() # default values
         self.background = None
         self.settingsChanged = False
 
@@ -606,7 +614,7 @@
     def setBackground(self):
         """sets the background of the central widget"""
         if not self.background:
-            self.background = Background(self.pref.background)
+            self.background = Background(util.PREF.background)
         self.background.setPalette(self.centralWidget())
         self.centralWidget().setAutoFillBackground(True)
 
@@ -636,24 +644,25 @@
         layout.setContentsMargins(0, 0, 0, 0)
         layout.addWidget(self.centralView)
         # setBrush(QColor(Qt.transparent) should work too but does  not
-        self.tileset = Tileset(self.pref.tileset)
+        tileset = Tileset(util.PREF.tilesetName)
         self.tiles = [Tile(element) for element in elements.all()]  # [:32] # 32 for testing
-        self.walls = Walls(self.tileset, self.tiles)
+        self.walls = Walls(tileset, self.tiles)
         scene.addItem(self.walls)
-        self.selectorBoard = SelectorBoard(self.tileset)
+        self.selectorBoard = SelectorBoard(tileset)
         self.selectorBoard.scale(1.7, 1.7)
         self.selectorBoard.setPos(xWidth=1.7, yWidth=3.9)
         self.selectorBoard.tileDragEnabled = True
         scene.addItem(self.selectorBoard)
-#       self.soli = Solitaire(self.tileset, [Tile(element) for element in elements.all()])
+#       self.soli = Solitaire(tileset, [Tile(element) for element in elements.all()])
 #       scene.addItem(self.soli)
         self.connect(scene, SIGNAL('tileClicked'), self.tileClicked)
 
         self.players =  [Player(WINDS[idx], self.centralScene, self.walls[idx]) \
             for idx in range(0, 4)]
-        self.windTileset = Tileset('traditional')
+        self.windTileset = Tileset(util.PREF.windTilesetName)
+
         for player in self.players:
-            player.wind.setTileset(self.windTileset)
+            player.wind.setFaceTileset(self.windTileset)
 
         self.setCentralWidget(centralWidget)
         self.centralView.setScene(scene)
@@ -737,32 +746,34 @@
 
     def applySettings(self):
         """apply preferences"""
-        if not self.settingsChanged:
-            return
-        self.settingsChanged = False
-        if self.tileset.desktopFileName != self.pref.tileset:
-            self.tileset = Tileset(self.pref.tileset)
-            self.walls.tileset = self.tileset
-            self.selectorBoard.tileset = self.tileset
-            for player in self.players:
-                player.setNameColor()
-            # the new tiles might be larger:
-            self._adjustView()
-        self.background = None # force setBackground to reload
-        self.setBackground()
-
-    def slotSettingsChanged(self):
-        """force applySettings"""
         self.settingsChanged = True
-        self.applySettings()
+        if util.PREF.tilesetName != self.prevPreferences.tilesetName:
+            tileset = Tileset(util.PREF.tilesetName)
+            for item in self.centralScene.items():
+                if not isinstance(item, Tile): # shortcut
+                    try:
+                        item.tileset = tileset
+                    except AttributeError:
+                        pass
+            # change players last because we need the wall already to be repositioned
+            for player in self.players: # class Player is no graphicsitem
+                player.tileset = tileset
+            self._adjustView() # the new tiles might be larger
+            # bug in qt4.5: after qgraphicssvgitem.setElementId(),
+            # the previous cache content continues to be shown
+            QPixmapCache.clear()
+        if util.PREF.background != self.prevPreferences.background:
+            self.background = None # force setBackground to reload
+            self.setBackground()
+        self.prevPreferences = PrefContainer(util.PREF)
 
     def showSettings(self):
         """show preferences dialog. If it already is visible, do nothing"""
         if  kdeui.KConfigDialog.showDialog("settings"):
             return
-        confDialog = ConfigDialog(self, "settings", self.pref)
+        confDialog = ConfigDialog(self, "settings", util.PREF)
         self.connect(confDialog, SIGNAL('settingsChanged(QString)'),
-           self.slotSettingsChanged)
+           self.applySettings)
         confDialog.show()
 
     def swapPlayers(self, winds):
[prev in list] [next in list] [prev in thread] [next in thread] 

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