diff --git a/pysollib/pysoltk.py b/pysollib/pysoltk.py
index 779f121e..99b42c0c 100644
--- a/pysollib/pysoltk.py
+++ b/pysollib/pysoltk.py
@@ -26,8 +26,9 @@ from pysollib.settings import TOOLKIT, USE_TILE
if TOOLKIT == 'tk':
from pysollib.ui.tktile.tkconst import *
from pysollib.ui.tktile.tkutil import *
+ from pysollib.ui.tktile.card import *
+ from pysollib.ui.tktile.tkcanvas import *
if USE_TILE:
- from pysollib.tile.tkcanvas import *
from pysollib.tile.tkwrap import *
from pysollib.tile.tkwidget import *
from pysollib.tile.tkhtml import *
@@ -45,11 +46,9 @@ if TOOLKIT == 'tk':
from pysollib.tile.statusbar import *
from pysollib.tile.progressbar import *
from pysollib.tile.menubar import *
- from pysollib.tile.card import *
from pysollib.tile.selectcardset import *
from pysollib.tile.selecttree import *
else:
- from pysollib.tk.tkcanvas import *
from pysollib.tk.tkwrap import *
from pysollib.tk.tkwidget import *
from pysollib.tk.tkhtml import *
@@ -67,7 +66,6 @@ if TOOLKIT == 'tk':
from pysollib.tk.statusbar import *
from pysollib.tk.progressbar import *
from pysollib.tk.menubar import *
- from pysollib.tk.card import *
from pysollib.tk.selectcardset import *
from pysollib.tk.selecttree import *
diff --git a/pysollib/tile/findcarddialog.py b/pysollib/tile/findcarddialog.py
index 1ab75263..1b4b4dc1 100644
--- a/pysollib/tile/findcarddialog.py
+++ b/pysollib/tile/findcarddialog.py
@@ -34,7 +34,7 @@ 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 tkcanvas import MfxCanvas, MfxCanvasGroup, MfxCanvasImage, MfxCanvasRectangle
+from pysollib.ui.tktile.tkcanvas import MfxCanvas, MfxCanvasGroup, MfxCanvasImage, MfxCanvasRectangle
from pysollib.settings import TITLE
diff --git a/pysollib/tile/selectcardset.py b/pysollib/tile/selectcardset.py
index ec7d2482..b594ff5b 100644
--- a/pysollib/tile/selectcardset.py
+++ b/pysollib/tile/selectcardset.py
@@ -38,7 +38,7 @@ from pysollib.resource import CSI
# Toolkit imports
from pysollib.ui.tktile.tkutil import loadImage
from tkwidget import MfxDialog, MfxScrolledCanvas, PysolScale
-from tkcanvas import MfxCanvasImage
+from pysollib.ui.tktile.tkcanvas import MfxCanvasImage
from selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from selecttree import SelectDialogTreeData, SelectDialogTreeCanvas
diff --git a/pysollib/tile/tkwidget.py b/pysollib/tile/tkwidget.py
index e3097ef8..24493094 100644
--- a/pysollib/tile/tkwidget.py
+++ b/pysollib/tile/tkwidget.py
@@ -47,7 +47,7 @@ from pysollib.settings import WIN_SYSTEM
from pysollib.ui.tktile.tkutil import after, after_cancel
from pysollib.ui.tktile.tkutil import bind, unbind_destroy
from pysollib.ui.tktile.tkutil import makeToplevel, setTransient
-from tkcanvas import MfxCanvas
+from pysollib.ui.tktile.tkcanvas import MfxCanvas
# ************************************************************************
diff --git a/pysollib/tk/card.py b/pysollib/tk/card.py
deleted file mode 100644
index f63001e4..00000000
--- a/pysollib/tk/card.py
+++ /dev/null
@@ -1,250 +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__ = ['Card']
-
-# imports
-
-# 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.config(state="hidden")
- self.hide_stack = stack
- ##print "hide:", self.id, self.item.coords()
-
- def unhide(self):
- if self.hide_stack is None:
- return 0
- ##print "unhide:", self.id, self.item.coords()
- self.item.config(state="normal")
- self.hide_stack = None
- return 1
-
-
-# ************************************************************************
-# * New implementation since 2.10
-# *
-# * We use a single CanvasImage and call CanvasImage.config() to
-# * turn the card.
-# * This makes turning cards a little bit slower, but dragging cards
-# * around is noticeable faster as the total number of images is
-# * reduced by half.
-# ************************************************************************
-
-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)
- self._face_image = game.getCardFaceImage(deck, suit, rank)
- self._back_image = game.getCardBackImage(deck, suit, rank)
- self._shade_image = game.getCardShadeImage()
- self._active_image = self._back_image
- self.item = MfxCanvasImage(game.canvas, self.x, self.y, image=self._active_image, anchor="nw")
- self.shade_item = None
- ##self._setImage = self.item.config
-
- def _setImage(self, image):
- if image is not self._active_image:
- self.item.config(image=image)
- self._active_image = image
-
- def showFace(self, unhide=1):
- if not self.face_up:
- self._setImage(image=self._face_image)
- self.tkraise(unhide)
- self.face_up = 1
-
- def showBack(self, unhide=1):
- if self.face_up:
- self._setImage(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._setImage(image=image)
-
- #
- # optimized by inlining
- #
-
- def moveBy(self, dx, dy):
- dx, dy = int(dx), int(dy)
- self.x = self.x + dx
- self.y = self.y + dy
- item = self.item
- item.canvas.tk.call(item.canvas._w, "move", item.id, dx, dy)
-
- # for resize
- def update(self, id, deck, suit, rank, game):
- self._face_image = game.getCardFaceImage(deck, suit, rank)
- self._back_image = game.getCardBackImage(deck, suit, rank)
- self._shade_image = game.getCardShadeImage()
- if self.face_up:
- img = self._face_image
- else:
- img = self._back_image
- self.item.config(image=img)
- self._active_image = img
-
-
-# ************************************************************************
-# * New idea since 3.00
-# *
-# * Hide a card by configuring the canvas image to None.
-# ************************************************************************
-
-class _OneImageCardWithHideByConfig(_OneImageCard):
- def hide(self, stack):
- if stack is self.hide_stack:
- return
- self._setImage(image=None)
- self.hide_stack = stack
-
- def unhide(self):
- if self.hide_stack is None:
- return 0
- if self.face_up:
- self._setImage(image=self._face_image)
- else:
- self._setImage(image=self._back_image)
- self.hide_stack = None
- return 1
-
- #
- # much like in _OneImageCard
- #
-
- def showFace(self, unhide=1):
- if not self.face_up:
- if unhide:
- self._setImage(image=self._face_image)
- self.item.tkraise()
- self.face_up = 1
-
- def showBack(self, unhide=1):
- if self.face_up:
- if unhide:
- self._setImage(image=self._back_image)
- self.item.tkraise()
- self.face_up = 0
-
- def updateCardBackground(self, image):
- self._back_image = image
- if not self.face_up and not self.hide_stack:
- self._setImage(image=image)
-
-
-# ************************************************************************
-# * Old implementation prior to 2.10
-# *
-# * The card consists of two CanvasImages. To show the card face up,
-# * the face item is placed in front of the back. To show it face
-# * down, this is reversed.
-# ************************************************************************
-
-class _TwoImageCard(_HideableCard):
- # Private instance variables:
- # __face, __back -- the canvas items making up the card
- def __init__(self, id, deck, suit, rank, game, x=0, y=0):
- _HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
- self.item = MfxCanvasGroup(game.canvas)
- self.__face = MfxCanvasImage(game.canvas, self.x, self.y, image=game.getCardFaceImage(deck, suit, rank), anchor="nw")
- self.__back = MfxCanvasImage(game.canvas, self.x, self.y, image=game.getCardBackImage(deck, suit, rank), anchor="nw")
- self.__face.addtag(self.item)
- self.__back.addtag(self.item)
-
- def showFace(self, unhide=1):
- if not self.face_up:
- self.__face.tkraise()
- self.tkraise(unhide)
- self.face_up = 1
-
- def showBack(self, unhide=1):
- if self.face_up:
- self.__back.tkraise()
- self.tkraise(unhide)
- self.face_up = 0
-
- def updateCardBackground(self, image):
- self.__back.config(image=image)
-
-
-# ************************************************************************
-# * New idea since 2.90
-# *
-# * The card consists of two CanvasImages. Instead of raising
-# * one image above the other we move the inactive image out
-# * of the visible canvas.
-# ************************************************************************
-
-class _TwoImageCardWithHideItem(_HideableCard):
- # Private instance variables:
- # __face, __back -- the canvas items making up the card
- def __init__(self, id, deck, suit, rank, game, x=0, y=0):
- _HideableCard.__init__(self, id, deck, suit, rank, game, x=x, y=y)
- self.item = MfxCanvasGroup(game.canvas)
- self.__face = MfxCanvasImage(game.canvas, self.x, self.y + 11000, image=game.getCardFaceImage(deck, suit, rank), anchor="nw")
- self.__back = MfxCanvasImage(game.canvas, self.x, self.y, image=game.getCardBackImage(deck, suit, rank), anchor="nw")
- self.__face.addtag(self.item)
- self.__back.addtag(self.item)
-
- def showFace(self, unhide=1):
- if not self.face_up:
- self.__back.move(0, 10000)
- ##self.__face.tkraise()
- self.__face.move(0, -11000)
- self.tkraise(unhide)
- self.face_up = 1
-
- def showBack(self, unhide=1):
- if self.face_up:
- self.__face.move(0, 11000)
- ##self.__back.tkraise()
- self.__back.move(0, -10000)
- self.tkraise(unhide)
- self.face_up = 0
-
- def updateCardBackground(self, image):
- self.__back.config(image=image)
-
-
-
-# choose the implementation
-Card = _TwoImageCardWithHideItem
-Card = _TwoImageCard
-Card = _OneImageCardWithHideByConfig
-Card = _OneImageCard
-
diff --git a/pysollib/tk/findcarddialog.py b/pysollib/tk/findcarddialog.py
index a8a14b7a..3bba685e 100644
--- a/pysollib/tk/findcarddialog.py
+++ b/pysollib/tk/findcarddialog.py
@@ -37,7 +37,7 @@ 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 tkcanvas import MfxCanvas, MfxCanvasGroup, MfxCanvasImage, MfxCanvasRectangle
+from pysollib.ui.tktile.tkcanvas import MfxCanvas, MfxCanvasGroup, MfxCanvasImage, MfxCanvasRectangle
from pysollib.settings import TITLE
diff --git a/pysollib/tk/selectcardset.py b/pysollib/tk/selectcardset.py
index 9a7172e3..fdd78eab 100644
--- a/pysollib/tk/selectcardset.py
+++ b/pysollib/tk/selectcardset.py
@@ -36,7 +36,7 @@ from pysollib.resource import CSI
# Toolkit imports
from pysollib.ui.tktile.tkutil import loadImage
from tkwidget import MfxDialog, MfxScrolledCanvas
-from tkcanvas import MfxCanvasImage
+from pysollib.ui.tktile.tkcanvas import MfxCanvasImage
from selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from selecttree import SelectDialogTreeData, SelectDialogTreeCanvas
diff --git a/pysollib/tk/tkcanvas.py b/pysollib/tk/tkcanvas.py
deleted file mode 100644
index 7912ed38..00000000
--- a/pysollib/tk/tkcanvas.py
+++ /dev/null
@@ -1,403 +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__ = ['MfxCanvasGroup',
- 'MfxCanvasImage',
- 'MfxCanvasText',
- 'MfxCanvasLine',
- 'MfxCanvasRectangle',
- 'MfxCanvas']
-
-# imports
-import Tkinter, Canvas
-
-# PySol imports
-from pysollib.mfxutil import Image, ImageTk
-
-# Toolkit imports
-from pysollib.ui.tktile.tkutil import bind, unbind_destroy, loadImage
-
-
-# ************************************************************************
-# * canvas items
-# ************************************************************************
-
-class MfxCanvasGroup(Canvas.Group):
- def __init__(self, canvas, tag=None):
- Canvas.Group.__init__(self, canvas=canvas, tag=tag)
- # register ourself so that we can unbind from the canvas
- assert self.id not in self.canvas.items
- self.canvas.items[self.id] = self
- def addtag(self, tag, option="withtag"):
- self.canvas.addtag(tag, option, self.id)
- def delete(self):
- del self.canvas.items[self.id]
- Canvas.Group.delete(self)
- def gettags(self):
- return self.canvas.tk.splitlist(self._do("gettags"))
-
-class MfxCanvasImage(Canvas.ImageItem):
- def __init__(self, canvas, x, y, **kwargs):
- self.init_coord = x, y
- group = None
- if 'group' in kwargs:
- group = kwargs['group']
- del kwargs['group']
- if 'image' in kwargs:
- self._image = kwargs['image']
- Canvas.ImageItem.__init__(self, canvas, x, y, **kwargs)
- if group:
- self.addtag(group)
- def moveTo(self, x, y):
- c = self.coords()
- self.move(x - int(c[0]), y - int(c[1]))
- def show(self):
- self.config(state='normal')
- def hide(self):
- self.config(state='hidden')
-
-MfxCanvasLine = Canvas.Line
-
-class MfxCanvasRectangle(Canvas.Rectangle):
- def __init__(self, canvas, *args, **kwargs):
- group = None
- if 'group' in kwargs:
- group = kwargs['group']
- del kwargs['group']
- Canvas.Rectangle.__init__(self, canvas, *args, **kwargs)
- if group:
- self.addtag(group)
-
-class MfxCanvasText(Canvas.CanvasText):
- def __init__(self, canvas, x, y, preview=-1, **kwargs):
- self.init_coord = x, y
- self.x, self.y = x, y
- if preview < 0:
- preview = canvas.preview
- if preview > 1:
- return
- if "fill" not in kwargs:
- kwargs["fill"] = canvas._text_color
- group = None
- if 'group' in kwargs:
- group = kwargs['group']
- del kwargs['group']
- Canvas.CanvasText.__init__(self, canvas, x, y, **kwargs)
- self.text_format = None
- canvas._text_items.append(self)
- if group:
- self.addtag(group)
- def moveTo(self, x, y):
- dx, dy = x - self.x, y - self.y
- self.x, self.y = x, y
- self.move(dx, dy)
-
-
-# ************************************************************************
-# * canvas
-# ************************************************************************
-
-class MfxCanvas(Tkinter.Canvas):
- def __init__(self, *args, **kw):
- Tkinter.Canvas.__init__(self, *args, **kw)
- self.preview = 0
- self.busy = False
- # this is also used by lib-tk/Canvas.py
- self.items = {}
- # private
- self.__tileimage = None
- self.__tiles = [] # id of canvas items
- self.__topimage = None
- self.__tops = [] # id of canvas items
- # friend MfxCanvasText
- self._text_color = "#000000"
- self._stretch_bg_image = 0
- self._save_aspect_bg_image = 0
- self._text_items = []
- #
- self.xmargin, self.ymargin = 10, 10
- # resize bg image
- self.bind('', self.setBackgroundImage)
-
- def setBackgroundImage(self, event=None):
- ##print 'setBackgroundImage', self._bg_img
- if not hasattr(self, '_bg_img'):
- return
- if not self._bg_img: # solid color
- return
- stretch = self._stretch_bg_image
- save_aspect = self._save_aspect_bg_image
- if Image:
- if stretch:
- w, h = self._geometry()
- if save_aspect:
- w0, h0 = self._bg_img.size
- a = min(float(w0)/w, float(h0)/h)
- w0, h0 = int(w0/a), int(h0/a)
- im = self._bg_img.resize((w0, h0))
- else:
- im = self._bg_img.resize((w, h))
- image = ImageTk.PhotoImage(im)
- else:
- image = ImageTk.PhotoImage(self._bg_img)
- else: # not Image
- stretch = 0
- image = self._bg_img
- for id in self.__tiles:
- self.delete(id)
- self.__tiles = []
- # must keep a reference to the image, otherwise Python will
- # garbage collect it...
- self.__tileimage = image
- if stretch:
- #
- if self.preview:
- dx, dy = 0, 0
- else:
- dx, dy = -self.xmargin, -self.ymargin
- id = self._x_create("image", dx, dy, image=image, anchor="nw")
- self.tag_lower(id) # also see tag_lower above
- self.__tiles.append(id)
- else:
- iw, ih = image.width(), image.height()
- sw, sh = self._geometry()
- for x in range(-self.xmargin, sw, iw):
- for y in range(-self.ymargin, sh, ih):
- id = self._x_create("image", x, y, image=image, anchor="nw")
- self.tag_lower(id) # also see tag_lower above
- self.__tiles.append(id)
- return 1
-
- def _geometry(self):
- w = max(self.winfo_width(), int(self.cget('width')))
- h = max(self.winfo_height(), int(self.cget('height')))
- scrollregion = self.cget('scrollregion')
- if not scrollregion:
- return w, h
- x, y, sw, sh = [int(i) for i in scrollregion.split()]
- sw -= x
- sh -= y
- w = max(w, sw)
- h = max(h, sh)
- return w, h
-
-
- #
- # top-image support
- #
-
- def _x_create(self, itemType, *args, **kw):
- return Tkinter.Canvas._create(self, itemType, args, kw)
-
- def _create(self, itemType, args, kw):
- ##print "_create:", itemType, args, kw
- id = Tkinter.Canvas._create(self, itemType, args, kw)
- if self.__tops:
- self.tk.call(self._w, "lower", id, self.__tops[0])
- return id
-
- def tag_raise(self, id, aboveThis=None):
- ##print "tag_raise:", id, aboveThis
- if aboveThis is None and self.__tops:
- self.tk.call(self._w, "lower", id, self.__tops[0])
- else:
- self.tk.call(self._w, "raise", id, aboveThis)
-
- def tag_lower(self, id, belowThis=None):
- ##print "tag_lower:", id, belowThis
- if belowThis is None and self.__tiles:
- self.tk.call(self._w, "raise", id, self.__tiles[-1])
- else:
- self.tk.call(self._w, "lower", id, belowThis)
-
-
- #
- #
- #
-
- def setInitialSize(self, width, height, margins=True, scrollregion=True):
- #print 'Canvas.setInitialSize:', width, height, scrollregion
- if self.preview:
- self.config(width=width, height=height,
- scrollregion=(0, 0, width, height))
- else:
- # add margins
- dx, dy = self.xmargin, self.ymargin
- if margins:
- w, h = dx+width+dx, dy+height+dy
- else:
- w, h = width, height
- self.config(width=w, height=h)
- if scrollregion:
- self.config(scrollregion=(-dx, -dy, width+dx, height+dy))
- else:
- # no scrolls
- self.config(scrollregion=(-dx, -dy, dx, dy))
-
-
- #
- #
- #
-
- # delete all CanvasItems, but keep the background and top tiles
- def deleteAllItems(self):
- self._text_items = []
- for id in self.items.keys():
- assert id not in self.__tiles # because the tile is created by id
- unbind_destroy(self.items[id])
- self.items[id].delete()
- assert self.items == {}
-
- def findCard(self, stack, event):
- if isinstance(stack.cards[0].item, Canvas.Group):
- current = self.gettags("current") # get tags
- for i in range(len(stack.cards)):
- if stack.cards[i].item.tag in current:
- return i
- else:
-## current = self.find("withtag", "current") # get item ids
-## for i in range(len(stack.cards)):
-## if stack.cards[i].item.id in current:
-## return i
- if self.preview:
- dx, dy = 0, 0
- else:
- dx, dy = -self.xmargin, -self.ymargin
- x = event.x+dx+self.xview()[0]*int(self.cget('width'))
- y = event.y+dy+self.yview()[0]*int(self.cget('height'))
- ##x, y = event.x, event.y
- items = list(self.find_overlapping(x,y,x,y))
- items.reverse()
- for item in items:
- for i in range(len(stack.cards)):
- if stack.cards[i].item.id == item:
- return i
- return -1
-
- def setTextColor(self, color):
- if color is None:
- c = self.cget("bg")
- if not isinstance(c, str) or c[0] != "#" or len(c) != 7:
- return
- v = []
- for i in (1, 3, 5):
- v.append(int(c[i:i+2], 16))
- luminance = (0.212671 * v[0] + 0.715160 * v[1] + 0.072169 * v[2]) / 255
- ##print c, ":", v, "luminance", luminance
- color = ("#000000", "#ffffff") [luminance < 0.3]
- if self._text_color != color:
- self._text_color = color
- for item in self._text_items:
- item.config(fill=self._text_color)
-
- def setTile(self, image, stretch=0, save_aspect=0):
- ##print 'setTile:', image, stretch
- if image:
- if Image:
- try:
- self._bg_img = Image.open(image)
- except:
- return 0
- else:
- try:
- self._bg_img = loadImage(file=image, dither=1)
- except:
- return 0
- self._stretch_bg_image = stretch
- self._save_aspect_bg_image = save_aspect
- self.setBackgroundImage()
- else:
- for id in self.__tiles:
- self.delete(id)
- self.__tiles = []
- self._bg_img = None
- return 1
-
- def setTopImage(self, image, cw=0, ch=0):
- try:
- if image and isinstance(image, str):
- image = loadImage(file=image)
- except Tkinter.TclError:
- return 0
- if len(self.__tops) == 1 and image is self.__tops[0]:
- return 1
- for id in self.__tops:
- self.delete(id)
- self.__tops = []
- # must keep a reference to the image, otherwise Python will
- # garbage collect it...
- self.__topimage = image
- if image is None:
- return 1
- iw, ih = image.width(), image.height()
- if cw <= 0:
- ##cw = max(int(self.cget("width")), self.winfo_width())
- cw = self.winfo_width()
- if ch <= 0:
- ##ch = max(int(self.cget("height")), self.winfo_height())
- ch = self.winfo_height()
- ###print iw, ih, cw, ch
- x = (cw-iw)/2-self.xmargin+self.xview()[0]*int(self.cget('width'))
- y = (ch-ih)/2-self.ymargin+self.yview()[0]*int(self.cget('height'))
- id = self._x_create("image", x, y, image=image, anchor="nw")
- self.tk.call(self._w, "raise", id)
- self.__tops.append(id)
- return 1
-
- #
- # Pause support
- #
-
- def hideAllItems(self):
- for item in self.items.values():
- item.config(state='hidden')
-
- def showAllItems(self):
- for item in self.items.values():
- item.config(state='normal')
-
-
- #
- # restricted but fast _bind and _substitute
- #
-
- def _bind(self, what, sequence, func, add, needcleanup=1):
- funcid = self._register(func, self._substitute, needcleanup)
- cmd = ('%sif {"[%s %s]" == "break"} break\n' %
- (add and '+' or '', funcid, "%x %y"))
- self.tk.call(what + (sequence, cmd))
- return funcid
-
- def _substitute(self, *args):
- e = Tkinter.Event()
- try:
- # Tk changed behavior in 8.4.2, returning "??" rather more often.
- e.x = int(args[0])
- except ValueError:
- e.x = args[0]
- try:
- e.y = int(args[1])
- except ValueError:
- e.y = args[1]
- return (e,)
-
diff --git a/pysollib/tk/tkwidget.py b/pysollib/tk/tkwidget.py
index 6f27a1c0..ecf6aad9 100644
--- a/pysollib/tk/tkwidget.py
+++ b/pysollib/tk/tkwidget.py
@@ -46,7 +46,7 @@ from pysollib.settings import WIN_SYSTEM
from pysollib.ui.tktile.tkutil import after, after_cancel
from pysollib.ui.tktile.tkutil import bind, unbind_destroy
from pysollib.ui.tktile.tkutil import makeToplevel, setTransient
-from tkcanvas import MfxCanvas
+from pysollib.ui.tktile.tkcanvas import MfxCanvas
# ************************************************************************
diff --git a/pysollib/tile/card.py b/pysollib/ui/tktile/card.py
similarity index 99%
rename from pysollib/tile/card.py
rename to pysollib/ui/tktile/card.py
index f63001e4..5f8d1da7 100644
--- a/pysollib/tile/card.py
+++ b/pysollib/ui/tktile/card.py
@@ -29,7 +29,7 @@ __all__ = ['Card']
from pysollib.acard import AbstractCard
# Toolkit imports
-from tkcanvas import MfxCanvasGroup, MfxCanvasImage
+from pysollib.ui.tktile.tkcanvas import MfxCanvasGroup, MfxCanvasImage
# ************************************************************************
diff --git a/pysollib/tile/tkcanvas.py b/pysollib/ui/tktile/tkcanvas.py
similarity index 100%
rename from pysollib/tile/tkcanvas.py
rename to pysollib/ui/tktile/tkcanvas.py
diff --git a/scripts/gen_individual_importing_tests.py b/scripts/gen_individual_importing_tests.py
index 56f1a5d0..67bf53c7 100644
--- a/scripts/gen_individual_importing_tests.py
+++ b/scripts/gen_individual_importing_tests.py
@@ -133,7 +133,6 @@ for module_name in [
'pysollib.settings',
'pysollib.stack',
'pysollib.stats',
-'pysollib.tile.card',
'pysollib.tile.colorsdialog',
'pysollib.tile.edittextdialog',
'pysollib.tile.findcarddialog',
@@ -150,7 +149,6 @@ for module_name in [
'pysollib.tile.soundoptionsdialog',
'pysollib.tile.statusbar',
'pysollib.tile.timeoutsdialog',
-'pysollib.tile.tkcanvas',
'pysollib.tile.tkhtml',
'pysollib.tile.tkstats',
'pysollib.tile.tktree',
@@ -159,7 +157,6 @@ for module_name in [
'pysollib.tile.toolbar',
'pysollib.tile.ttk',
'pysollib.tile.wizarddialog',
-'pysollib.tk.card',
'pysollib.tk.colorsdialog',
'pysollib.tk.edittextdialog',
'pysollib.tk.findcarddialog',
@@ -177,7 +174,6 @@ for module_name in [
'pysollib.tk.statusbar',
'pysollib.tk.tabpage',
'pysollib.tk.timeoutsdialog',
-'pysollib.tk.tkcanvas',
'pysollib.tk.tkhtml',
'pysollib.tk.tkstats',
'pysollib.tk.tktree',
@@ -185,7 +181,9 @@ for module_name in [
'pysollib.tk.tkwrap',
'pysollib.tk.toolbar',
'pysollib.tk.wizarddialog',
+'pysollib.ui.tktile.card',
'pysollib.ui.tktile.menubar',
+'pysollib.ui.tktile.tkcanvas',
'pysollib.ui.tktile.tkconst',
'pysollib.ui.tktile.tkutil',
'pysollib.util',