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

List:       kde-commits
Subject:    playground/games/kmj/src
From:       Wolfgang Rohdewald <wolfgang () rohdewald ! de>
Date:       2009-09-30 21:59:22
Message-ID: 1254347962.949202.21678.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1029851 by wrohdewald:

first step towards GUI separation: remove Player.spValue

 M  +56 -67    playfield.py  


--- trunk/playground/games/kmj/src/playfield.py #1029850:1029851
@@ -372,10 +372,8 @@
                     pLines = [m18n('Computed scoring for %1:', player.name)] + \
                pLines
                     pLines.append(m18n('Total for %1: %2 base points, %3 doubles, %4 \
points',  player.name, score.points, score.doubles, total))
-                elif player.spValue:
-                    total = player.spValue.value()
-                    if total:
-                        pLines.append(m18n('Manual score for %1: %2 points',  \
player.name, total)) +                elif player.total:
+                    pLines.append(m18n('Manual score for %1: %2 points',  \
player.name, player.total))  pLines.append('')
                 lines.extend(pLines)
         self.model.setStringList(lines)
@@ -629,6 +627,7 @@
         self.setWindowTitle(m18n('Scoring for this Hand') + ' - kmj')
         self.__game = None
         self.nameLabels = [None] * 4
+        self.spValues = [None] * 4
         self.windLabels = [None] * 4
         self.__tilePixMaps = []
         self.__meldPixMaps = []
@@ -642,17 +641,17 @@
         self.detailTabs = QTabWidget()
         pGrid.addWidget(self.detailTabs, 0, 4, 8, 1)
         for idx, player in enumerate(game.players):
-            player.spValue = QSpinBox()
+            self.spValues[idx] = QSpinBox()
             self.nameLabels[idx] = QLabel()
-            self.nameLabels[idx].setBuddy(player.spValue)
+            self.nameLabels[idx].setBuddy(self.spValues[idx])
             self.windLabels[idx] = WindLabel(player.wind.name, game.roundsFinished)
             pGrid.addWidget(self.nameLabels[idx], idx+2, 0)
             pGrid.addWidget(self.windLabels[idx], idx+2, 1)
-            pGrid.addWidget(player.spValue, idx+2, 2)
+            pGrid.addWidget(self.spValues[idx], idx+2, 2)
             player.wonBox = QCheckBox("")
             pGrid.addWidget(player.wonBox, idx+2, 3)
             self.connect(player.wonBox, SIGNAL('clicked(bool)'), self.wonChanged)
-            self.connect(player.spValue, SIGNAL('valueChanged(int)'), \
self.slotInputChanged) +            self.connect(self.spValues[idx], \
SIGNAL('valueChanged(int)'), self.slotInputChanged)  player.detailTab = QWidget()
             self.detailTabs.addTab(player.detailTab,'')
             player.detailGrid = QVBoxLayout(player.detailTab)
@@ -692,7 +691,7 @@
         btnBox.addWidget(self.btnPenalties)
         btnBox.addWidget(self.btnSave)
         pGrid.addLayout(btnBox, 8, 4)
-        game.players[0].spValue.setFocus()
+        self.spValues[0].setFocus()
         self.game = game
         self.state = StateSaver(self)
 
@@ -703,7 +702,7 @@
         def fset(self, game):
             self.__game = game
             for idx, player in enumerate(game.players):
-                player.spValue.setRange(0, game.ruleset.limit)
+                self.spValues[idx].setRange(0, game.ruleset.limit)
                 self.nameLabels[idx].setText(player.name)
                 self.windLabels[idx].wind = player.wind.name
                 self.windLabels[idx].roundsFinished = game.roundsFinished
@@ -783,10 +782,15 @@
         for player in self.game.players:
             player.refreshManualRules(self.game)
 
-    def clear(self):
+    def clearScoringDialog(self):
         """prepare for next hand"""
+        self.game.winner = None
+        for idx, player in enumerate(self.game.players):
+            player.handBoard.clear()
+            self.spValues[idx].clear()
+            player.payment = 0
         self.updateManualRules()
-        self.game.players.clear()
+
         self.fillLastTileCombo()
         if self.game.gameOver():
             self.hide()
@@ -795,18 +799,18 @@
                 self.windLabels[idx].setPixmap(WINDPIXMAPS[(player.wind.name,
                             player.wind.name == WINDS[self.game.roundsFinished])])
             self.computeScores()
-            self.game.players[0].spValue.setFocus()
+            self.spValues[0].setFocus()
 
     def computeScores(self):
         """if tiles have been selected, compute their value"""
         if self.game.gameOver():
             self.hide()
             return
-        for player in self.game.players:
+        for idx, player in enumerate(self.game.players):
             if player.handBoard.allTiles():
-                player.spValue.blockSignals(True) # we do not want that change to \
call computeScores again +                self.spValues[idx].blockSignals(True) # we \
                do not want that change to call computeScores again
                 player.wonBox.blockSignals(True) # we do not want that change to \
                call computeScores again
-                player.spValue.setEnabled(False)
+                self.spValues[idx].setEnabled(False)
                 for loop in range(10):
                     hand = player.hand(self.game)
                     player.wonBox.setVisible(hand.maybeMahjongg())
@@ -814,17 +818,19 @@
                         player.wonBox.setChecked(False)
                         player.refreshManualRules(self.game)
                         continue
-                    if player.spValue.value() == hand.total():
+                    if player.total == hand.total():
                         break
-                    player.spValue.setValue(hand.total())
+                    self.spValues[idx].setValue(hand.total())
+                    player.total = hand.total()
                     player.refreshManualRules(self.game)
-                player.spValue.blockSignals(False)
+                self.spValues[idx].blockSignals(False)
                 player.wonBox.blockSignals(False)
             else:
-                if not player.spValue.isEnabled():
-                    player.spValue.clear()
-                    player.spValue.setEnabled(True)
-                player.wonBox.setVisible(player.spValue.value() >= \
self.game.ruleset.minMJPoints) +                if not \
self.spValues[idx].isEnabled(): +                    self.spValues[idx].clear()
+                    player.total = 0
+                    self.spValues[idx].setEnabled(True)
+                player.wonBox.setVisible(player.total >= \
                self.game.ruleset.minMJPoints)
             if not player.wonBox.isVisibleTo(self) and player is self.winner:
                 self.winner = None
         if self.game.explainView:
@@ -996,6 +1002,10 @@
 
     def slotInputChanged(self):
         """some input fields changed: update"""
+        for idx in range(4):
+            if self.sender() == self.spValues[idx]:
+                self.game.players[idx].total = self.spValues[idx].value()
+                break
         self.updateManualRules()
         self.computeScores()
         self.validate()
@@ -1003,7 +1013,7 @@
     def validate(self):
         """update the status of the OK button"""
         valid = True
-        if self.winner and self.winner.score < 20:
+        if self.winner and self.winner.total < 20:
             valid = False
         elif not self.winner and not self.draw.isChecked():
             valid = False
@@ -1037,12 +1047,6 @@
         """a list of the losers"""
         return [p for p in self if p != self.winner]
 
-    def clear(self):
-        """clear player scoring data"""
-        self.winner = None
-        for player in self:
-            player.clear()
-
     def havingWind(self, wind):
         """return player with wind"""
         for player in self:
@@ -1060,7 +1064,6 @@
         self.wonBox = None
         self.manualRuleBoxes = []
         self.__proxy = None
-        self.spValue = None
         self.nameItem = None
         self.__balance = 0
         self.__payment = 0
@@ -1071,6 +1074,7 @@
         self.handBoard = HandBoard(self)
         self.handBoard.setPos(yHeight= 1.5)
         self.isWinner = False
+        self.total = 0
 
     def refreshManualRules(self, game):
         """update status of manual rules"""
@@ -1170,45 +1174,30 @@
             self.placeOnWall()
         return property(**locals())
 
-    def clear(self):
-        """clear tiles and counters"""
-        self.handBoard.clear()
-        self.spValue.setValue(0)
-        self.spValue.clear()
-        self.__payment = 0
-
-    def clearBalance(self):
-        """sets the balance and the payments to 0"""
-        self.__balance = 0
-        self.__payment = 0
-
-    @property
-    def balance(self):
+    @apply
+    def balance():
         """the balance of this player"""
-        return self.__balance
+        def fget(self):
+            return self.__balance
+        def fset(self, balance):
+            assert balance == 0
+            self.__balance = 0
+            self.__payment = 0
+        return property(**locals())
 
     def getsPayment(self, payment):
         """make a payment to this player"""
         self.__balance += payment
         self.__payment += payment
 
-    @property
-    def payment(self):
-        """the payments for the current hand"""
-        return self.__payment
-
     @apply
-    def score():
+    def payment():
+        """the payments for the current hand"""
         def fget(self):
-            return self.spValue.value()
-        def fset(self,  score):
-            if self.spValue is not None:
-                self.spValue.setValue(score)
-            if score == 0:
-                # do not display 0 but an empty field
-                if self.spValue is not None:
-                    self.spValue.clear()
-                self.__payment = 0
+            return self.__payment
+        def fset(self, payment):
+            assert payment == 0
+            self.__payment = 0
         return property(**locals())
 
 class PlayField(KXmlGuiWindow):
@@ -1702,7 +1691,7 @@
         for idx, player in enumerate(self.players):
             player.name = selectDialog.names[idx]
             player.nameid = self.allPlayerIds[player.name]
-            player.clearBalance()
+            player.balance = 0
         self.gameid = self.newGameId()
         self.showBalance()
         if self.explainView:
@@ -1742,7 +1731,7 @@
         self.saveScores()
         self.rotate()
         if self.scoringDialog:
-            self.scoringDialog.clear()
+            self.scoringDialog.clearScoringDialog()
 
     def saveScores(self):
         """save computed values to data base, update score table and balance in \
status line""" @@ -1756,7 +1745,7 @@
             "VALUES(%d,%d,'%s','%s',%d,'%s',%d,'%s','%s',%d,%d,%d,%d)" % \
             (self.gameid, self.handctr, hand.string, manualrules, player.nameid,
                 scoretime, int(player == self.players.winner),
-            WINDS[self.roundsFinished], player.wind.name, player.score,
+            WINDS[self.roundsFinished], player.wind.name, player.total,
             player.payment, player.balance, self.rotated))
         Query(cmdList)
         self.showBalance()
@@ -1840,7 +1829,7 @@
                 'game %d data inconsistent: player %d missing in game table' % \
                     (game, playerid), syslog.LOG_ERR)
             else:
-                player.clearBalance()
+                player.balance = 0
                 player.getsPayment(record[2])
                 player.wind.setWind(wind,  self.roundsFinished)
             if record[3]:
@@ -1917,9 +1906,9 @@
                     else:
                         efactor = 1
                     if player2 != winner:
-                        player1.getsPayment(player1.score * efactor)
+                        player1.getsPayment(player1.total * efactor)
                     if player1 != winner:
-                        player1.getsPayment(-player2.score * efactor)
+                        player1.getsPayment(-player2.total * efactor)
 
     def lastTile(self):
         """compile hand info into  a string as needed by the scoring engine"""


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

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