From kde-commits Tue Mar 31 23:40:27 2009 From: Wolfgang Rohdewald Date: Tue, 31 Mar 2009 23:40:27 +0000 To: kde-commits Subject: playground/games/kmj Message-Id: <1238542827.166393.10675.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=123854284707984 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):