#!/usr/bin/env python # -*- mode: python; coding: utf-8; -*- # --------------------------------------------------------------------------- # # Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer # Copyright (C) 2003 Mt. Hood Playing Card Co. # Copyright (C) 2005-2009 Skomoroh # # 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 3 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. If not, see . # # --------------------------------------------------------------------------- import tkinter from pysollib.mygettext import _ from pysollib.settings import TITLE from pysollib.ui.tktile.tkcanvas import MfxCanvas, MfxCanvasGroup from pysollib.ui.tktile.tkcanvas import MfxCanvasImage from pysollib.ui.tktile.tkutil import bind, unbind_destroy class FullPictureDialog(tkinter.Toplevel): CARD_IMAGES = {} # key: (type, rank, suit) def __init__(self, parent, game): tkinter.Toplevel.__init__(self) title = TITLE + ' - ' + _('Full picture') self.title(title) self.wm_resizable(False, False) self.cardsettype = '' self.images = {} self.label_width = 0 self.label_height = 0 # if size == 'large': # self.images_dir = os.path.join(dir, 'large', cs_type) # self.label_width, self.label_height = LARGE_EMBLEMS_SIZE # else: # self.images_dir = os.path.join(dir, 'small') # self.label_width, self.label_height = SMALL_EMBLEMS_SIZE self.canvas = MfxCanvas(self, bg='white') # self.canvas = MfxCanvas(self, bg='black') self.canvas.pack(expand=True, fill='both') # self.groups = [] self.highlight_items = None self.busy = False self.connectGame(game) # bind(self, "WM_DELETE_WINDOW", self.destroy) bind(self, "", self.destroy) # def createCardLabel(self, suit, rank, x0, y0): canvas = self.canvas group = MfxCanvasGroup(canvas) # im = self.images.getFace(0, 0, rank) FullPictureDialog.CARD_IMAGES[rank] = im cim = MfxCanvasImage(canvas, x0, y0, image=im, anchor='nw') cim.addtag(group) cim.lower() self.groups.append(group) def connectGame(self, game): self.images = game.app.subsampled_images # # self.images_dir = dir self.label_width = self.images.CARDW self.label_height = self.images.CARDH self.cardsettype = game.gameinfo.subcategory # # self.images_dir = dir self.canvas.delete('all') self.game = game cards = game.gameinfo.trumps dx, dy = self.label_width, self.label_height i = 0 k = 0 for card in cards: x, y = dx * k + 2, dy * i + 2 self.createCardLabel(suit=0, rank=card, x0=x, y0=y) k += 1 if k >= self.cardsettype: k = 0 i += 1 if k > 0: i += 1 w, h = dx*self.cardsettype+2, dy*i+2 self.canvas.config(width=w, height=h) self.wm_iconname(TITLE + " - " + game.getTitleName()) self.wm_geometry('') # cancel user-specified geometry def destroy(self, *args): for group in self.groups: unbind_destroy(group) unbind_destroy(self) self.wm_withdraw() tkinter.Toplevel.destroy(self) full_picture_dialog = None def create_full_picture_dialog(parent, game): global full_picture_dialog try: full_picture_dialog.wm_deiconify() full_picture_dialog.tkraise() except Exception: # traceback.print_exc() full_picture_dialog = FullPictureDialog(parent, game) def connect_game_full_picture_dialog(game): try: full_picture_dialog.connectGame(game) except Exception: pass def raise_full_picture_dialog(game): try: if game.app.opt.topmost_dialogs: full_picture_dialog.tkraise() full_picture_dialog.attributes("-topmost", True) else: full_picture_dialog.attributes("-topmost", False) except Exception: pass def unraise_full_picture_dialog(): try: full_picture_dialog.attributes("-topmost", False) except Exception: pass def destroy_full_picture_dialog(): global full_picture_dialog try: full_picture_dialog.destroy() except Exception: # traceback.print_exc() pass full_picture_dialog = None