1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00
PySolFC/pysollib/pysolgtk/card.py
2006-08-18 21:21:08 +00:00

137 lines
4.6 KiB
Python

## vim:ts=4:et:nowrap
##
##---------------------------------------------------------------------------##
##
## PySol -- a Python Solitaire game
##
## Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
## Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; see the file COPYING.
## If not, write to the Free Software Foundation, Inc.,
## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
##
## Markus F.X.J. Oberhumer
## <markus.oberhumer@jk.uni-linz.ac.at>
## http://wildsau.idv.uni-linz.ac.at/mfx/pysol.html
##
##---------------------------------------------------------------------------##
# imports
import gtk
# PySol imports
from pysollib.acard import AbstractCard
# Toolkit imports
from tkcanvas import MfxCanvasGroup, MfxCanvasImage
# /***********************************************************************
# //
# ************************************************************************/
class _HideableCard(AbstractCard):
def hide(self, stack):
if stack is self.hide_stack:
return
self.item.hide()
self.hide_stack = stack
def unhide(self):
if self.hide_stack is None:
return 0
self.item.show()
self.hide_stack = None
return 1
# /***********************************************************************
# //
# ************************************************************************/
class _OneImageCard(_HideableCard):
def __init__(self, id, deck, suit, rank, game, x=0, y=0):
_HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
images = game.app.images
self.__face_image = images.getFace(deck, suit, rank)
self.__back_image = images.getBack(deck, suit, rank)
self.__image = MfxCanvasImage(game.canvas, self.x, self.y,
image=self.__back_image,
anchor=gtk.ANCHOR_NW)
if 0:
# using a group for a single image doesn't gain much
self.item = MfxCanvasGroup(game.canvas)
self.__image.addtag(self.item)
else:
self.item = self.__image
def showFace(self, unhide=1):
if not self.face_up:
self.__image.config(image=self.__face_image)
self.tkraise(unhide)
self.face_up = 1
def showBack(self, unhide=1):
if self.face_up:
self.__image.config(image=self.__back_image)
self.tkraise(unhide)
self.face_up = 0
def updateCardBackground(self, image):
self.__back_image = image
if not self.face_up:
self.__image.config(image=image)
# /***********************************************************************
# //
# ************************************************************************/
class _TwoImageCard(_HideableCard):
def __init__(self, id, deck, suit, rank, game, x=0, y=0):
_HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
images = game.app.images
self.item = MfxCanvasGroup(game.canvas)
self.__face = MfxCanvasImage(game.canvas, self.x, self.y, image=images.getFace(deck, suit, rank), anchor='nw')
self.__back = MfxCanvasImage(game.canvas, self.x, self.y, image=images.getBack(deck, suit, rank), anchor='nw')
self.__face.addtag(self.item)
self.__back.addtag(self.item)
self.__face.hide()
def showFace(self, unhide=1):
if not self.face_up:
self.__back.hide()
self.__face.show()
##self.tkraise(unhide)
self.face_up = 1
def showBack(self, unhide=1):
if self.face_up:
self.__face.hide()
self.__back.show()
##self.tkraise(unhide)
self.face_up = 0
def updateCardBackground(self, image):
self.__back.config(image=image)
# choose the implementation
Card = _TwoImageCard
#Card = _OneImageCard # FIXME: this implementation lost any cards (bug?)