From: <umg...@us...> - 2007-04-09 15:31:55
|
Revision: 410 http://svn.sourceforge.net/pybridge/?rev=410&view=rev Author: umgangee Date: 2007-04-09 08:31:52 -0700 (Mon, 09 Apr 2007) Log Message: ----------- Move game result message box into gameComplete(). Support hand-click to join game. Modified Paths: -------------- trunk/pybridge/pybridge/ui/window_bridgetable.py Modified: trunk/pybridge/pybridge/ui/window_bridgetable.py =================================================================== --- trunk/pybridge/pybridge/ui/window_bridgetable.py 2007-04-09 11:56:19 UTC (rev 409) +++ trunk/pybridge/pybridge/ui/window_bridgetable.py 2007-04-09 15:31:52 UTC (rev 410) @@ -84,6 +84,7 @@ # Set up CardArea widget. self.cardarea = CardArea() self.cardarea.on_card_clicked = self.on_card_clicked + self.cardarea.on_hand_clicked = self.on_hand_clicked self.cardarea.set_size_request(640, 480) self.scrolled_cardarea.add_with_viewport(self.cardarea) self.cardarea.show() @@ -258,6 +259,44 @@ self.score_store.prepend([textContract, textMade, textNS, textEW]) + def gameComplete(self): + for position in Direction: + self.redrawHand(position, all=True) + self.setTurnIndicator() + + dialog = gtk.MessageDialog(parent=self.window, flags=gtk.DIALOG_MODAL, + type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_OK) + dialog.set_title(_('Game result')) + + # Determine and display score in dialog box. + if self.table.game.contract: + declarerWon, defenceWon = self.table.game.play.getTrickCount() + required = self.table.game.contract['bid'].level.index + 7 + offset = declarerWon - required + score = self.table.game.getScore() + self.addScore(self.table.game.contract, declarerWon, score) + + contractText = self.formatContract(self.table.game.contract) + if offset > 0: + dialog.set_markup(_('Contract %s made by %s tricks.') \ + % (contractText, offset)) + elif offset < 0: + dialog.set_markup(_('Contract %s failed by %s tricks.') \ + % (contractText, abs(offset))) + else: + dialog.set_markup(_('Contract %s made exactly.') % contractText) + + scorer = (score >= 0 and _('declarer')) or _('defence') + dialog.format_secondary_text(_('Score %s points for %s.' % (abs(score), scorer))) + + else: + dialog.set_markup(_('Bidding passed out.')) + dialog.format_secondary_text(_('No score.')) + + dialog.run() + dialog.destroy() + + def redrawHand(self, position, all=False): """Redraws cards making up the hand at position. @@ -349,8 +388,7 @@ text = _("It is %s's turn") % str(turn) self.statusbar.push(context, text) except GameError: # Game not in progress - turn = None - self.cardarea.set_turn(turn) + pass def setVulnerability(self): @@ -413,7 +451,7 @@ #self.children.close('dialog_gameresult') self.resetGame() - #self.redrawTrick() # Clear trick. + self.redrawTrick() # Clear trick. for position in Direction: self.redrawHand(position) @@ -432,12 +470,16 @@ def event_makeCall(self, call, position): self.addCall(call, position) self.setTurnIndicator() + if self.table.game.bidding.isComplete(): self.setContract() if self.children.get(WindowBidbox): # If a player. self.children.close(self.children[WindowBidbox]) + if not self.table.game.inProgress(): + self.gameComplete() + def event_playCard(self, card, position): # Determine the position of the hand from which card was played. playfrom = self.table.game.play.whoPlayed(card) @@ -446,36 +488,11 @@ self.setTrickCount() self.redrawTrick() self.redrawHand(playfrom) + + if not self.table.game.inProgress(): + self.gameComplete() - def event_gameFinished(self): - for position in self.table.game.deal: - self.redrawHand(position, all=True) - self.setTurnIndicator() - - # Determine and display score in dialog box. - contract = self.table.game.bidding.getContract() - if contract: - trickCount = self.table.game.getTrickCount() - offset = trickCount['declarerWon'] - trickCount['required'] - score = self.table.game.score() - self.addScore(contract, trickCount['declarerWon'], score) - - textContract = _('Contract %s') % self.formatContract(contract) - textTrick = (offset > 0 and _('made by %s tricks') % offset) or \ - (offset < 0 and _('failed by %s tricks') % abs(offset)) or \ - _('made exactly') - scorer = (score >= 0 and _('declarer')) or _('defence') - textScore = _('Score %s points for %s') % (abs(score), scorer) - - message = '%s %s.\n\n%s.' % (textContract, textTrick, textScore) - else: - message = _('Bidding passed out.') - - dialog = self.children.open('dialog_gameresult', parent=self) - dialog.setup(message) - - def event_revealHand(self, hand, position): self.redrawHand(position) @@ -519,10 +536,17 @@ d.addErrback(self.errback) + def on_hand_clicked(self, position): + if not self.player and not self.table.players.get(position): + # Join game at position. + self.on_seat_activated(self.cardarea, position) + + def on_card_clicked(self, card, position): if self.player: - d = self.player.callRemote('playCard', card) - d.addErrback(self.errback) + if self.table.game.inProgress() and self.table.game.play: + d = self.player.callRemote('playCard', card) + d.addErrback(self.errback) def on_seat_activated(self, widget, position): @@ -531,8 +555,8 @@ self.player = player # RemoteReference to BridgePlayer object. self.position = position - self.takeseat.set_property('sensitive', False) - self.leaveseat.set_property('sensitive', True) + self.takeseat.set_property('visible', False) + self.leaveseat.set_property('visible', True) # If game is running and bidding is active, open bidding box. if self.table.game.inProgress(): d = self.player.callRemote('getHand') @@ -559,8 +583,8 @@ def success(r): self.player = None self.position = None - self.takeseat.set_property('sensitive', True) - self.leaveseat.set_property('sensitive', False) + self.takeseat.set_property('visible', True) + self.leaveseat.set_property('visible', False) if self.children.get(WindowBidbox): self.children.close(self.children[WindowBidbox]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |