[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