diff --git a/pysollib/tile/menubar.py b/pysollib/tile/menubar.py index 713464b9..03239604 100644 --- a/pysollib/tile/menubar.py +++ b/pysollib/tile/menubar.py @@ -43,7 +43,7 @@ from tkwidget import MfxMessageDialog from selectgame import SelectGameDialog, SelectGameDialogWithPreview from soundoptionsdialog import SoundOptionsDialog from selecttile import SelectTileDialogWithPreview -from findcarddialog import connect_game_find_card_dialog, destroy_find_card_dialog +from pysollib.ui.tktile.findcarddialog import connect_game_find_card_dialog, destroy_find_card_dialog from solverdialog import connect_game_solver_dialog from pysollib.ui.tktile.menubar import MfxMenu, PysolMenubarTkCommon diff --git a/pysollib/tk/findcarddialog.py b/pysollib/tk/findcarddialog.py deleted file mode 100644 index 13ee69e4..00000000 --- a/pysollib/tk/findcarddialog.py +++ /dev/null @@ -1,229 +0,0 @@ -#!/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 . -## -##---------------------------------------------------------------------------## - -__all__ = ['create_find_card_dialog', - 'connect_game_find_card_dialog', - 'destroy_find_card_dialog', - ] - -# imports -import os -import Tkinter - -# PySol imports -from pysollib.mygettext import _, n_ - -# Toolkit imports -from pysollib.ui.tktile.tkutil import after, after_cancel -from pysollib.ui.tktile.tkutil import bind, unbind_destroy, makeImage -from pysollib.ui.tktile.tkcanvas import MfxCanvas, MfxCanvasGroup, MfxCanvasImage, MfxCanvasRectangle - -from pysollib.settings import TITLE - - -# ************************************************************************ -# * -# ************************************************************************ - -LARGE_EMBLEMS_SIZE = (38, 34) -SMALL_EMBLEMS_SIZE = (31, 21) - -class FindCardDialog(Tkinter.Toplevel): - CARD_IMAGES = {} # key: (rank, suit) - - def __init__(self, parent, game, dir, size='large'): - Tkinter.Toplevel.__init__(self) - title = TITLE + ' - ' + _('Find card') - self.title(title) - self.wm_resizable(False, False) - # - ##self.images_dir = dir - if size == 'large': - self.images_dir = os.path.join(dir, 'large') - 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) - # - ##self.normal_timeout = 400 # in milliseconds - self.normal_timeout = int(1000*game.app.opt.timeouts['highlight_samerank']) - self.hidden_timeout = 200 - self.timer = None - - def createCardLabel(self, suit, rank, x0, y0): - dx, dy = self.label_width, self.label_height - dir = self.images_dir - canvas = self.canvas - group = MfxCanvasGroup(canvas) - # - im = FindCardDialog.CARD_IMAGES.get((rank, suit)) - if im is None: - r = '%02d' % (rank+1) - s = 'cshd'[suit] - fn = os.path.join(dir, r+s+'.gif') - im = makeImage(file=fn) - FindCardDialog.CARD_IMAGES[(rank, suit)] = im - cim = MfxCanvasImage(canvas, x0, y0, image=im, anchor='nw') - cim.addtag(group) - cim.lower() - # - rect_width = 4 - x1, y1 = x0+dx, y0+dy - rect = MfxCanvasRectangle(self.canvas, x0+1, y0+1, x1-1, y1-1, - width=rect_width, - fill=None, - outline='red', - state='hidden' - ) - rect.addtag(group) - # - bind(group, '', - lambda e, suit=suit, rank=rank, rect=rect: - self.enterEvent(suit, rank, rect, group)) - bind(group, '', - lambda e, suit=suit, rank=rank, rect=rect: - self.leaveEvent(suit, rank, rect, group)) - self.groups.append(group) - - def connectGame(self, game): - self.canvas.delete('all') - self.game = game - suits = game.gameinfo.suits - ranks = game.gameinfo.ranks - dx, dy = self.label_width, self.label_height - uniq_suits = [] - i = 0 - for suit in suits: - if suit in uniq_suits: - continue - uniq_suits.append(suit) - j = 0 - for rank in ranks: - x, y = dx*j+2, dy*i+2 - self.createCardLabel(suit=suit, rank=rank, x0=x, y0=y) - j += 1 - i += 1 - w, h = dx*j+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 enterEvent(self, suit, rank, rect, group): - ##print 'enterEvent', suit, rank, self.busy - if self.busy: return - if self.game.demo: return - self.busy = True - self.highlight_items = self.game.highlightCard(suit, rank) - if not self.highlight_items: - self.highlight_items = [] - if self.highlight_items: - self.timer = after(self, self.normal_timeout, self.timeoutEvent) - rect.config(state='normal') - self.canvas.update_idletasks() - self.busy = False - - def leaveEvent(self, suit, rank, rect, group): - ##print 'leaveEvent', suit, rank, self.busy - if self.busy: return - self.busy = True - if self.highlight_items: - for i in self.highlight_items: - i.delete() - self.highlight_items = [] - if self.timer: - after_cancel(self.timer) - self.timer = None - rect.config(state='hidden') - if self.game.canvas: - self.game.canvas.update_idletasks() - self.canvas.update_idletasks() - self.busy = False - - - def timeoutEvent(self, *event): - if self.highlight_items: - state = self.highlight_items[0].cget('state') - if state in ('', 'normal'): - state = 'hidden' - self.timer = after(self, self.hidden_timeout, - self.timeoutEvent) - else: - state = 'normal' - self.timer = after(self, self.normal_timeout, - self.timeoutEvent) - for item in self.highlight_items: - item.config(state=state) - - def destroy(self, *args): - for l in self.groups: - unbind_destroy(l) - unbind_destroy(self) - if self.timer: - after_cancel(self.timer) - self.timer = None - self.wm_withdraw() - if self.highlight_items: - for i in self.highlight_items: - i.delete() - Tkinter.Toplevel.destroy(self) - - - -find_card_dialog = None - -def create_find_card_dialog(parent, game, dir): - global find_card_dialog - try: - find_card_dialog.wm_deiconify() - find_card_dialog.tkraise() - except: - ##traceback.print_exc() - find_card_dialog = FindCardDialog(parent, game, dir) - -def connect_game_find_card_dialog(game): - try: - find_card_dialog.connectGame(game) - except: - pass - -def destroy_find_card_dialog(): - global find_card_dialog - try: - find_card_dialog.destroy() - except: - ##traceback.print_exc() - pass - find_card_dialog = None - - diff --git a/pysollib/tk/menubar.py b/pysollib/tk/menubar.py index a4eaa02f..50832737 100644 --- a/pysollib/tk/menubar.py +++ b/pysollib/tk/menubar.py @@ -39,7 +39,7 @@ from selectgame import SelectGameDialog, SelectGameDialogWithPreview from soundoptionsdialog import SoundOptionsDialog from selectcardset import SelectCardsetDialogWithPreview from selecttile import SelectTileDialogWithPreview -from findcarddialog import connect_game_find_card_dialog, destroy_find_card_dialog +from pysollib.ui.tktile.findcarddialog import connect_game_find_card_dialog, destroy_find_card_dialog from solverdialog import connect_game_solver_dialog from pysollib.ui.tktile.menubar import PysolMenubarTkCommon diff --git a/pysollib/tile/findcarddialog.py b/pysollib/ui/tktile/findcarddialog.py similarity index 100% rename from pysollib/tile/findcarddialog.py rename to pysollib/ui/tktile/findcarddialog.py diff --git a/scripts/gen_individual_importing_tests.py b/scripts/gen_individual_importing_tests.py index 8f90f88e..d1a888d8 100644 --- a/scripts/gen_individual_importing_tests.py +++ b/scripts/gen_individual_importing_tests.py @@ -136,7 +136,6 @@ for module_name in [ 'pysollib.tile.basetilemfxdialog', 'pysollib.tile.colorsdialog', 'pysollib.tile.edittextdialog', -'pysollib.tile.findcarddialog', 'pysollib.tile.fontsdialog', 'pysollib.tile.gameinfodialog', 'pysollib.tile.menubar', @@ -159,7 +158,6 @@ for module_name in [ 'pysollib.tile.wizarddialog', 'pysollib.tk.colorsdialog', 'pysollib.tk.edittextdialog', -'pysollib.tk.findcarddialog', 'pysollib.tk.fontsdialog', 'pysollib.tk.gameinfodialog', 'pysollib.tk.menubar', @@ -183,6 +181,7 @@ for module_name in [ 'pysollib.ui.tktile.card', 'pysollib.ui.tktile.colorsdialog', 'pysollib.ui.tktile.edittextdialog', +'pysollib.ui.tktile.findcarddialog', 'pysollib.ui.tktile.menubar', 'pysollib.ui.tktile.solverdialog', 'pysollib.ui.tktile.tkcanvas',