From db52c784375de8d768a7ca2922a6e654338837d6 Mon Sep 17 00:00:00 2001 From: skomoroh Date: Fri, 25 May 2007 21:27:03 +0000 Subject: [PATCH] + human readable config file (~/.PySolFC/options.cfg; options.dat is gone) + added `custom games' node to select games dialog * cleanup code git-svn-id: https://pysolfc.svn.sourceforge.net/svnroot/pysolfc/PySolFC/trunk@170 39dd0a4e-7c14-0410-91b3-c4f2d318f732 --- html-src/gen-html.py | 5 +- html-src/index.html | 9 +- pysollib/actions.py | 16 +- pysollib/app.py | 363 +++++++++++++++++++++++----- pysollib/game.py | 12 - pysollib/games/mahjongg/mahjongg.py | 5 +- pysollib/help.py | 3 +- pysollib/hint.py | 26 +- pysollib/mfxutil.py | 14 +- pysollib/resource.py | 6 +- pysollib/settings.py | 2 - pysollib/stack.py | 2 +- pysollib/tile/selectgame.py | 118 +++++---- pysollib/tk/selectgame.py | 118 ++++++--- pysollib/tk/statusbar.py | 2 - pysollib/tk/tkstats.py | 5 +- pysollib/util.py | 22 +- 17 files changed, 487 insertions(+), 241 deletions(-) diff --git a/html-src/gen-html.py b/html-src/gen-html.py index 24bddeb8..ebea4c39 100755 --- a/html-src/gen-html.py +++ b/html-src/gen-html.py @@ -10,8 +10,9 @@ pysollib_dir = '../' import sys, os, re from glob import glob -import gettext -gettext.install('pysol', 'locale', unicode=True) +import __builtin__ +__builtin__._ = lambda x: x +__builtin__.n_ = lambda x: x try: os.mkdir('html') except: pass diff --git a/html-src/index.html b/html-src/index.html index cfbcf6ce..ae7f09f8 100644 --- a/html-src/index.html +++ b/html-src/index.html @@ -17,9 +17,14 @@


+

Visit the official PySolFC Home +Page. diff --git a/pysollib/actions.py b/pysollib/actions.py index dce51d0e..a60532c6 100644 --- a/pysollib/actions.py +++ b/pysollib/actions.py @@ -38,7 +38,7 @@ import os, locale # PySol imports -from mfxutil import EnvError, SubclassResponsibility +from mfxutil import SubclassResponsibility from mfxutil import Struct, openURL from pysolrandom import constructRandom from settings import PACKAGE, PACKAGE_URL @@ -565,7 +565,7 @@ class PysolMenubarActions: file = open(filename, "a") a = FileStatsFormatter(self.app, file) write_method(a, player) - except EnvError, ex: + except EnvironmentError, ex: if file: file.close() d = MfxExceptionDialog(self.top, ex, text=_("Error while writing to file")) @@ -756,18 +756,6 @@ class PysolMenubarActions: self.app.opt.timeouts['highlight_cards'] = d.highlight_cards_timeout self.app.opt.timeouts['highlight_samerank'] = d.highlight_samerank_timeout -## def mOptSave(self, *args): -## if self._cancelDrag(break_pause=False): return -## try: -## self.app.saveOptions() -## except Exception, ex: -## d = MfxExceptionDialog(self.top, ex, -## text=_("Error while saving options")) -## else: -## # tell the player where their config files reside -## d = MfxMessageDialog(self.top, title=PACKAGE+_(" Info"), bitmap="info", -## text=_("Options were saved to\n\n") + self.app.fn.opt) - # # Help menu diff --git a/pysollib/app.py b/pysollib/app.py index 02a3a214..1708db24 100644 --- a/pysollib/app.py +++ b/pysollib/app.py @@ -37,16 +37,15 @@ # imports import sys, os, re import traceback +import ConfigParser # PySol imports from mfxutil import destruct, Struct from mfxutil import pickle, unpickle, UnpicklingError -from mfxutil import getusername, gethomedir, getprefdir, EnvError +from mfxutil import getusername, gethomedir, getprefdir from mfxutil import latin1_to_ascii, print_err -from mfxutil import Image -from util import Timer from util import CARDSET, IMAGE_EXTENSIONS -from settings import PACKAGE, VERSION, VERSION_TUPLE, WIN_SYSTEM +from settings import PACKAGE, VERSION_TUPLE, WIN_SYSTEM from resource import CSI, CardsetConfig, Cardset, CardsetManager from resource import Tile, TileManager from resource import Sample, SampleManager @@ -72,7 +71,6 @@ from pysoltk import HTMLViewer from pysoltk import TOOLBAR_BUTTONS from pysoltk import destroy_find_card_dialog from pysoltk import destroy_solver_dialog -from pysoltk import connect_game_solver_dialog from help import help_about, destroy_help_html @@ -82,9 +80,80 @@ from help import help_about, destroy_help_html class Options: + GENERAL_OPTIONS = [ + ('player', 'str'), + ('confirm', 'bool'), + ('update_player_stats', 'bool'), + ('autofaceup', 'bool'), + ('autodrop', 'bool'), + ('autodeal', 'bool'), + ('quickplay', 'bool'), + ('undo', 'bool'), + ('bookmarks', 'bool'), + ('hint', 'bool'), + ('highlight_piles', 'bool'), + ('highlight_cards', 'bool'), + ('highlight_samerank', 'bool'), + ('highlight_not_matching', 'bool'), + ('mahjongg_show_removed', 'bool'), + ('mahjongg_create_solvable', 'int'), + ('shisen_show_hint', 'bool'), + ('animations', 'int'), + ('redeal_animation', 'bool'), + ('win_animation', 'bool'), + ('shadow', 'bool'), + ('shade', 'bool'), + ('shrink_face_down', 'bool'), + ('shade_filled_stacks', 'bool'), + ('demo_logo', 'bool'), + ('tile_theme', 'str'), + ('default_tile_theme', 'str'), + ('toolbar', 'int'), + ('toolbar_style', 'str'), + ('toolbar_relief', 'str'), + ('toolbar_compound', 'str'), + ('toolbar_size', 'int'), + ('statusbar', 'bool'), + ('num_cards', 'bool'), + ('helpbar', 'bool'), + ('num_recent_games', 'int'), + ('last_gameid', 'int'), + ('game_holded', 'int'), + ('wm_maximized', 'bool'), + ('splashscreen', 'bool'), + ('mouse_type', 'str'), + ('mouse_undo', 'bool'), + ('negative_bottom', 'bool'), + ('randomize_place', 'bool'), + ('save_cardsets', 'bool'), + ('dragcursor', 'bool'), + ('save_games_geometry', 'bool'), + ('sound', 'bool'), + ('sound_mode', 'int'), + ('sound_sample_volume', 'int'), + ('sound_music_volume', 'int'), + ('tabletile_name', 'str'), + #('toolbar_vars', 'list'), + #('recent_gameid', 'list'), + #('favorite_gameid', 'list'), + ] + + def __init__(self): - self.version_tuple = VERSION_TUPLE - self.saved = 0 + config = self._config = ConfigParser.ConfigParser() + for section in ( + 'general', + 'sound_samples', + 'fonts', + 'colors', + 'timeouts', + 'cardsets', + 'games_geometry', + ): + config.add_section(section) + + self.version_tuple = VERSION_TUPLE # XXX + self.saved = 0 # XXX # options menu: self.player = _("Unknown") self.confirm = True @@ -112,20 +181,10 @@ class Options: self.shade_filled_stacks = True self.demo_logo = True self.tile_theme = 'default' - if WIN_SYSTEM == 'win32': - self.tile_theme = self.default_tile_theme = 'winnative' - if sys.getwindowsversion() >= (5, 1): # xp - self.tile_theme = 'xpnative' - elif WIN_SYSTEM == 'x11': - self.tile_theme = 'clam' - self.default_tile_theme = 'default' - elif WIN_SYSTEM == 'aqua': - self.tile_theme = self.default_tile_theme = 'aqua' + self.default_tile_theme = 'default' self.toolbar = 1 # 0 == hide, 1,2,3,4 == top, bottom, lef, right ##self.toolbar_style = 'default' self.toolbar_style = 'bluecurve' - if WIN_SYSTEM == 'win32': - self.toolbar_style = 'crystal' self.toolbar_relief = 'flat' self.toolbar_compound = 'none' # icons only self.toolbar_size = 0 @@ -135,6 +194,10 @@ class Options: self.statusbar = True self.num_cards = False self.helpbar = False + self.splashscreen = True + self.mouse_type = 'drag-n-drop' # or 'sticky-mouse' or 'point-n-click' + self.mouse_undo = False # use mouse for undo/redo + self.negative_bottom = True # sound self.sound = True self.sound_mode = 1 @@ -164,22 +227,18 @@ class Options: 'gamewon' : False, } # fonts - self.fonts = {"default" : None, - #"default" : ("helvetica", 12), - "sans" : ("times", 12), # for html - "fixed" : ("courier", 12), # for html & log - "small" : ("helvetica", 12), - "canvas_default" : ("helvetica", 12), - #"canvas_card" : ("helvetica", 12), - "canvas_fixed" : ("courier", 12), - "canvas_large" : ("helvetica", 16), - "canvas_small" : ("helvetica", 10), - } - if WIN_SYSTEM == 'win32': - self.fonts["sans"] = ("times new roman", 12) - self.fonts["fixed"] = ("courier new", 10) - elif WIN_SYSTEM == 'x11': - self.fonts["sans"] = ("helvetica", 12) + self.fonts = { + "default" : None, + #"default" : ("helvetica", 12), + "sans" : ("times", 12), # for html + "fixed" : ("courier", 12), # for html & log + "small" : ("helvetica", 12), + "canvas_default" : ("helvetica", 12), + #"canvas_card" : ("helvetica", 12), + "canvas_fixed" : ("courier", 12), + "canvas_large" : ("helvetica", 16), + "canvas_small" : ("helvetica", 10), + } # colors self.colors = { 'table': '#008200', @@ -205,38 +264,57 @@ class Options: self.num_recent_games = 15 self.recent_gameid = [] self.favorite_gameid = [] - self.last_gameid = 0 # last game played - #self.last_player = None # last player - #self.last_save_dir = None # last directory for load/save - self.game_holded = 0 + self.last_gameid = 0 # last game played + self.game_holded = 0 # gameid or 0 self.wm_maximized = 0 self.save_games_geometry = False - self.games_geometry = {} # saved games geometry (gameid: (width, height)) + self.games_geometry = {} # saved games geometry (gameid: (width, height)) # - self.splashscreen = True - self.mouse_type = 'drag-n-drop' # or 'sticky-mouse' or 'point-n-click' - self.mouse_undo = False # use mouse for undo/redo - self.negative_bottom = True self.randomize_place = False self.save_cardsets = True + self.dragcursor = True # defaults & constants self.setDefaults() self.setConstants() def setDefaults(self, top=None): + # toolbar + if WIN_SYSTEM == 'win32': + self.toolbar_style = 'crystal' + # fonts + if WIN_SYSTEM == 'win32': + self.fonts["sans"] = ("times new roman", 12) + self.fonts["fixed"] = ("courier new", 10) + elif WIN_SYSTEM == 'x11': + self.fonts["sans"] = ("helvetica", 12) + # tile theme + if WIN_SYSTEM == 'win32': + self.tile_theme = self.default_tile_theme = 'winnative' + if sys.getwindowsversion() >= (5, 1): # xp + self.tile_theme = 'xpnative' + elif WIN_SYSTEM == 'x11': + self.tile_theme = 'clam' + self.default_tile_theme = 'default' + elif WIN_SYSTEM == 'aqua': + self.tile_theme = self.default_tile_theme = 'aqua' + # cardsets sw, sh, sd = 0, 0, 8 if top: - sw, sh, sd = top.winfo_screenwidth(), top.winfo_screenheight(), top.winfo_screendepth() + sw, sh, sd = (top.winfo_screenwidth(), + top.winfo_screenheight(), + top.winfo_screendepth()) if sd > 8: - self.tabletile_name = "Nostalgy.gif" # basename + self.tabletile_name = "Nostalgy.gif" # basename else: self.tabletile_name = None # - #c = "Oxymoron" c = "Standard" if sw < 800 or sh < 600: c = "2000" + #if sw > 1024 and sh > 768: + # c = 'Dondorf' self.cardset = { + # game_type: (cardset_name, back_file) 0: (c, ""), CSI.TYPE_FRENCH: (c, ""), CSI.TYPE_HANAFUDA: ("Kintengu", ""), @@ -252,9 +330,9 @@ class Options: # not changeable options def setConstants(self): - self.dragcursor = True - self.randomize_place = False - self.mahjongg_create_solvable = 2 +## self.dragcursor = True +## self.randomize_place = False + pass def copy(self): opt = Options() @@ -262,6 +340,165 @@ class Options: opt.setConstants() return opt + def save(self, filename): + config = self._config + + # general + for key, t in self.GENERAL_OPTIONS: + val = getattr(self, key) + config.set('general', key, val) + + recent_gameid = ' '.join([str(i) for i in self.recent_gameid]) + config.set('general', 'recent_gameid', recent_gameid) + + favorite_gameid = ' '.join([str(i) for i in self.favorite_gameid]) + config.set('general', 'favorite_gameid', favorite_gameid) + + visible_buttons = [b for b in self.toolbar_vars + if self.toolbar_vars[b]] + visible_buttons = ' '.join(visible_buttons) + config.set('general', 'visible_buttons', visible_buttons) + + # sound_samples + for key, val in self.sound_samples.items(): + config.set('sound_samples', key, val) + + # fonts + for key, val in self.fonts.items(): + if val is None: + continue + val = list(val) + val[0] = val[0].replace(' ', '_') # XXX: hack + val = ' '.join([str(i) for i in val]) + config.set('fonts', key, val) + + # colors + for key, val in self.colors.items(): + config.set('colors', key, val) + + # timeouts + for key, val in self.timeouts.items(): + config.set('timeouts', key, val) + + # cardsets + for key, val in self.cardset.items(): + val = list(val) + if val[1] == '': + val[1] = 'none' + val = ' '.join(val) + config.set('cardsets', str(key), val) + + # games_geometry + for key, val in self.games_geometry.items(): + val = ' '.join(val) + config.set('games_geometry', str(key), val) + + config.write(file(filename, 'w')) + #config.write(sys.stdout) + + def _getOption(self, section, key, t): + config = self._config + try: + if t == 'bool': + val = config.getboolean(section, key) + elif t == 'int': + val = config.getint(section, key) + elif t == 'float': + val = config.getfloat(section, key) + else: + val = config.get(section, key) + except ConfigParser.NoOptionError: + val = None + except: + traceback.print_exc() + val = None + return val + + def load(self, filename): + config = self._config + config.read(filename) + + # general + for key, t in self.GENERAL_OPTIONS: + val = self._getOption('general', key, t) + if val is not None: + setattr(self, key, val) + + recent_gameid = self._getOption('general', 'recent_gameid', 'str') + if recent_gameid is not None: + try: + self.recent_gameid = [int(i) for i in recent_gameid.split()] + except: + traceback.print_exc() + + favorite_gameid = self._getOption('general', 'favorite_gameid', 'str') + if favorite_gameid is not None: + try: + self.favorite_gameid = [int(i) for i in favorite_gameid.split()] + except: + traceback.print_exc() + + visible_buttons = self._getOption('general', 'visible_buttons', 'str') + if visible_buttons is not None: + visible_buttons = visible_buttons.split() + for key in self.toolbar_vars: + self.toolbar_vars[key] = (key in visible_buttons) + + # sound_samples + for key in self.sound_samples: + val = self._getOption('sound_samples', key, 'bool') + if val is not None: + self.sound_samples[key] = val + + # fonts + for key in self.fonts: + val = self._getOption('fonts', key, 'str') + if val is not None: + val = val.split() + try: + val[0] = val[0].replace('_', ' ') + val[1] = int(val[1]) + except: + traceback.print_exc() + else: + val = tuple(val) + self.fonts[key] = val + + # colors + for key in self.colors: + val = self._getOption('colors', key, 'str') + if val is not None: + self.colors[key] = val + + # timeouts + for key in self.timeouts: + val = self._getOption('timeouts', key, 'float') + if val is not None: + self.timeouts[key] = val + + # cardsets + for key in self.cardset: + val = self._getOption('cardsets', str(key), 'str') + if val is not None: + try: + i = val.rindex(' ') + if val[i+1:] == 'none': + val = (val[:i], '') + else: + val = [val[:i], val[i+1:]] + self.cardset[int(key)] = val + except: + traceback.print_exc() + + # games_geometry + for key, val in config.items('games_geometry'): + try: + val = [int(i) for i in val.split()] + assert len(val) == 2 + self.games_geometry[int(key)] = val + except: + traceback.print_exc() + # /*********************************************************************** # // Statistics @@ -519,7 +756,6 @@ class Comments: class Application: def __init__(self): - ##self.starttimer = Timer("Application.__init__") self.gdb = GAME_DB self.opt = Options() self.startup_opt = self.opt.copy() @@ -581,7 +817,7 @@ class Application: # file names self.fn = Struct( opt = os.path.join(self.dn.config, "options.dat"), - opt_conf = os.path.join(self.dn.config, "options.conf"), + opt_cfg = os.path.join(self.dn.config, "options.cfg"), stats = os.path.join(self.dn.config, "statistics.dat"), holdgame = os.path.join(self.dn.config, "holdgame.dat"), comments = os.path.join(self.dn.config, "comments.dat"), @@ -867,9 +1103,9 @@ class Application: s = self.top.wm_state() ##print "wm_save_state", s if s == "zoomed": # Windows only - self.opt.wm_maximized = 1 + self.opt.wm_maximized = True elif s == "normal": - self.opt.wm_maximized = 0 + self.opt.wm_maximized = False def wm_withdraw(self): if self.intro.progress: @@ -1217,16 +1453,9 @@ Please select a %s type %s. def loadOptions(self): self.opt.setDefaults(self.top) - if not os.path.exists(self.fn.opt): + if not os.path.exists(self.fn.opt_cfg): return - opt = unpickle(self.fn.opt) - if opt: - if DEBUG >= 6: - import pprint - print '======== options ========' - pprint.pprint(opt.__dict__) - print '=========================' - self.opt.__dict__.update(opt.__dict__) + self.opt.load(self.fn.opt_cfg) self.opt.setConstants() def loadStatistics(self): @@ -1247,11 +1476,11 @@ Please select a %s type %s. def __saveObject(self, obj, fn): obj.version_tuple = VERSION_TUPLE - obj.saved = obj.saved + 1 + obj.saved += 1 pickle(obj, fn, protocol=-1) def saveOptions(self): - self.__saveObject(self.opt, self.fn.opt) + self.opt.save(self.fn.opt_cfg) def saveStatistics(self): self.__saveObject(self.stats, self.fn.stats) @@ -1596,7 +1825,7 @@ Please select a %s type %s. except Exception, err: ##traceback.print_exc() pass - except EnvError, ex: + except EnvironmentError, ex: pass # register cardsets for obj in found: @@ -1645,7 +1874,7 @@ Please select a %s type %s. if key not in t: t[key] = 1 found.append((n, tile)) - except EnvError, ex: + except EnvironmentError, ex: pass # register tiles found.sort() @@ -1686,7 +1915,7 @@ Please select a %s type %s. if key not in t: t[key] = 1 found.append((n, obj)) - except EnvError, ex: + except EnvironmentError, ex: pass # register songs found.sort() diff --git a/pysollib/game.py b/pysollib/game.py index 0f8ffa77..b03f43e2 100644 --- a/pysollib/game.py +++ b/pysollib/game.py @@ -47,7 +47,6 @@ from mfxutil import Image, ImageTk from mfxutil import destruct, Struct, SubclassResponsibility from mfxutil import uclock, usleep from mfxutil import format_time -from util import Timer from settings import PACKAGE, TOOLKIT, TOP_TITLE from settings import VERSION, VERSION_TUPLE, FC_VERSION from settings import DEBUG @@ -152,7 +151,6 @@ class Game: # main constructor def create(self, app): - ##timer = Timer("Game.create") old_busy = self.busy self.__createCommon(app) self.setCursor(cursor=CURSOR_WATCH) @@ -161,9 +159,7 @@ class Game: self.top.wm_iconname(PACKAGE + " - " + self.getTitleName()) # create the game if self.app.intro.progress: self.app.intro.progress.update(step=1) - ##print timer self.createGame() - ##print timer # set some defaults self.sg.openstacks = filter(lambda s: s.cap.max_accept >= s.cap.min_accept, self.sg.openstacks) self.sg.hp_stacks = filter(lambda s: s.cap.max_move >= 2, self.sg.dropstacks) @@ -191,13 +187,11 @@ class Game: # optimize regions self.optimizeRegions() # create cards - ##print timer if not self.cards: self.cards = self.createCards(progress=self.app.intro.progress) self.initBindings() ##self.top.bind('', self.top._sleepEvent) ##self.top.bind('<3>', self.top._sleepEvent) - ##print timer # update display properties self.top.wm_geometry("") # cancel user-specified geometry self.canvas.setInitialSize(self.width, self.height) @@ -213,7 +207,6 @@ class Game: # self.stats.update_time = time.time() self.busy = old_busy - ##print timer self.showHelp() # just in case ##self.reallocateStacks() @@ -298,13 +291,11 @@ class Game: ) def createPreview(self, app): - ##timer = Timer("Game.createPreview") old_busy = self.busy self.__createCommon(app) self.preview = max(1, self.canvas.preview) # create game self.createGame() - ##print timer # set some defaults self.sg.openstacks = filter(lambda s: s.cap.max_accept >= s.cap.min_accept, self.sg.openstacks) self.sg.hp_stacks = filter(lambda s: s.cap.max_move >= 2, self.sg.dropstacks) @@ -437,7 +428,6 @@ class Game: ##print self.random, self.random.__dict__ self.shuffle() assert len(self.s.talon.cards) == self.gameinfo.ncards - ##print self.app.starttimer for stack in self.allstacks: stack.updateText() self.updateText() @@ -725,7 +715,6 @@ class Game: # Create all cards for the game. def createCards(self, progress=None): - ##timer = Timer("Game.createCards") gi = self.gameinfo pstep = 0 if progress: @@ -752,7 +741,6 @@ class Game: if progress: progress.update(step=pstep) if progress: progress.update(percent=100) assert len(cards) == gi.ncards - ##print timer return cards def _createCard(self, id, deck, suit, rank, x, y): diff --git a/pysollib/games/mahjongg/mahjongg.py b/pysollib/games/mahjongg/mahjongg.py index 15df39da..daf04412 100644 --- a/pysollib/games/mahjongg/mahjongg.py +++ b/pysollib/games/mahjongg/mahjongg.py @@ -392,8 +392,9 @@ class AbstractMahjonggGame(Game): left_margin = l.XM + 4*cardw+fdxx+d_x + l.XM else: left_margin = l.XM - w = left_margin + (max_tx+2)*cardw/2+dxx+d_x + l.XM+ti_width+l.XM - # left margin | tiles | right margin + tableau_width = (max_tx+2)*cardw/2+dxx+d_x + right_margin = l.XM+ti_width+l.XM + w = left_margin + tableau_width + right_margin h = l.YM + dyy + (max_ty + 2) * cardh / 2 + d_y + l.YM if show_removed: h = max(h, l.YM+fdyy+cardh*9+d_y+l.YM) diff --git a/pysollib/help.py b/pysollib/help.py index d5c6cf18..90ff07a6 100644 --- a/pysollib/help.py +++ b/pysollib/help.py @@ -37,7 +37,6 @@ # imports # PySol imports -from mfxutil import EnvError from settings import PACKAGE, PACKAGE_URL, TOOLKIT, FC_VERSION from pysoltk import make_help_toplevel from pysoltk import MfxMessageDialog @@ -130,7 +129,7 @@ def help_html(app, document, dir_, top=None): if help_html_index is None: document, dir_ = "index.html", "html" help_html_index = app.dataloader.findFile(document, dir_) - except EnvError: + except EnvironmentError: d = MfxMessageDialog(app.top, title=PACKAGE + _(" HTML Problem"), text=_("Cannot find help document\n") + document, bitmap="warning") diff --git a/pysollib/hint.py b/pysollib/hint.py index 2b251898..faed140f 100644 --- a/pysollib/hint.py +++ b/pysollib/hint.py @@ -35,11 +35,11 @@ # imports -import os, sys +import os import time # PySol imports -from settings import DEBUG, USE_FREECELL_SOLVER, FCS_COMMAND +from settings import DEBUG, FCS_COMMAND from mfxutil import destruct from util import KING @@ -253,17 +253,17 @@ class AbstractHint(HintInterface): def _canDropAllCards(self, from_stack, stacks, stackcards): assert from_stack not in stacks return 0 - # FIXME: this does not account for cards which are dropped herein - cards = pile[:] - cards.reverse() - for card in cards: - for s in stacks: - if s is not from_stack: - if s.acceptsCards(from_stack, [card]): - break - else: - return 0 - return 1 +## # FIXME: this does not account for cards which are dropped herein +## cards = pile[:] +## cards.reverse() +## for card in cards: +## for s in stacks: +## if s is not from_stack: +## if s.acceptsCards(from_stack, [card]): +## break +## else: +## return 0 +## return 1 # # misc. constants diff --git a/pysollib/mfxutil.py b/pysollib/mfxutil.py index 62102437..cf411d89 100644 --- a/pysollib/mfxutil.py +++ b/pysollib/mfxutil.py @@ -65,21 +65,13 @@ if TOOLKIT == 'tk': import JpegImagePlugin import BmpImagePlugin import PpmImagePlugin - Image._initialized=2 + Image._initialized = 2 -if os.name == "mac": - # macfs module is deprecated, consider using Carbon.File or Carbon.Folder - import macfs, MACFS # /*********************************************************************** # // exceptions # ************************************************************************/ -# work around a Mac problem -##EnvError = EnvironmentError -EnvError = (IOError, OSError, os.error,) - - class SubclassResponsibility(Exception): pass @@ -143,10 +135,6 @@ def gethomedir(): def getprefdir(package, home=None): if os.name == "nt": return win32_getprefdir(package) - if os.name == "mac": - vrefnum, dirid = macfs.FindFolder(MACFS.kOnSystemDisk, MACFS.kPreferencesFolderType, 0) - fss = macfs.FSSpec((vrefnum, dirid, ":" + "PySolFC")) - return fss.as_pathname() if home is None: home = gethomedir() return os.path.join(home, ".PySolFC") diff --git a/pysollib/resource.py b/pysollib/resource.py index 38386c8d..10f1942e 100644 --- a/pysollib/resource.py +++ b/pysollib/resource.py @@ -38,7 +38,7 @@ import os, glob # PySol imports -from mfxutil import Struct, KwStruct, EnvError +from mfxutil import Struct, KwStruct from settings import DEBUG @@ -129,7 +129,7 @@ class ResourceManager: dir = os.path.normpath(dir) if dir and os.path.isdir(dir) and dir not in result: result.append(dir) - except EnvError, ex: + except EnvironmentError, ex: pass def getSearchDirs(self, app, search, env=None): @@ -156,7 +156,7 @@ class ResourceManager: self._addDir(result, d) else: self._addDir(result, os.path.join(dir, s)) - except EnvError, ex: + except EnvironmentError, ex: pass if DEBUG >= 6: print "getSearchDirs", env, search, "->", result diff --git a/pysollib/settings.py b/pysollib/settings.py index efefdac4..cc9a9147 100644 --- a/pysollib/settings.py +++ b/pysollib/settings.py @@ -66,8 +66,6 @@ if os.name == 'posix': ] if os.name == 'nt': pass -if os.name == 'mac': - pass TOP_SIZE = 10 TOP_TITLE = n_('Top 10') diff --git a/pysollib/stack.py b/pysollib/stack.py index 310928c2..7c98e859 100644 --- a/pysollib/stack.py +++ b/pysollib/stack.py @@ -108,7 +108,7 @@ import types # PySol imports from mfxutil import Struct, kwdefault, SubclassResponsibility -from mfxutil import Image, ImageTk, ImageOps +from mfxutil import Image, ImageTk from util import ACE, KING from util import ANY_SUIT, ANY_COLOR, ANY_RANK, NO_RANK from pysoltk import EVENT_HANDLED, EVENT_PROPAGATE diff --git a/pysollib/tile/selectgame.py b/pysollib/tile/selectgame.py index 9a24e7ad..db0f5b7f 100644 --- a/pysollib/tile/selectgame.py +++ b/pysollib/tile/selectgame.py @@ -118,16 +118,21 @@ class SelectGameData(SelectDialogTreeData): select_mahjongg_game = lambda gi: gi.si.game_type == GI.GT_MAHJONGG gg = None if filter(select_mahjongg_game, self.all_games_gi): - gg = SelectGameNode(None, _("Mahjongg Games"), select_mahjongg_game) + gg = SelectGameNode(None, _("Mahjongg Games"), + select_mahjongg_game) g.append(gg) if g[0]: - s_by_type = SelectGameNode(None, _("French games"), tuple(g[0]), expanded=1) + s_by_type = SelectGameNode(None, _("French games"), + tuple(g[0]), expanded=1) if g[1]: - s_oriental = SelectGameNode(None, _("Oriental Games"), tuple(g[1])) + s_oriental = SelectGameNode(None, _("Oriental Games"), + tuple(g[1])) if g[2]: - s_special = SelectGameNode(None, _("Special Games"), tuple(g[2])) + s_special = SelectGameNode(None, _("Special Games"), + tuple(g[2])) if g[3]: - s_original = SelectGameNode(None, _("Original Games"), tuple(g[3])) + s_original = SelectGameNode(None, _("Original Games"), + tuple(g[3])) ## if g[4]: ## s_contrib = SelectGameNode(None, "Contributed Games", tuple(g[4])) if g[5]: @@ -141,8 +146,8 @@ class SelectGameData(SelectDialogTreeData): name = _(name) gg.append(SelectGameNode(None, name, select_func)) if 1 and gg: - s_by_compatibility = SelectGameNode(None, _("by Compatibility"), tuple(gg)) - pass + s_by_compatibility = SelectGameNode(None, _("by Compatibility"), + tuple(gg)) # s_by_pysol_version, gg = None, [] for name, games in GI.GAMES_BY_PYSOL_VERSION: @@ -152,62 +157,93 @@ class SelectGameData(SelectDialogTreeData): name = _("New games in v. ") + name gg.append(SelectGameNode(None, name, select_func)) if 1 and gg: - s_by_pysol_version = SelectGameNode(None, _("by PySol version"), tuple(gg)) - pass + s_by_pysol_version = SelectGameNode(None, _("by PySol version"), + tuple(gg)) # ul_alternate_names = UserList(list(app.gdb.getGamesTuplesSortedByAlternateName())) # self.rootnodes = filter(None, ( - #SelectGameNode(None, "All Games", lambda gi: 1, expanded=0), SelectGameNode(None, _("All Games"), None, expanded=0), SelectGameNode(None, _("Alternate Names"), ul_alternate_names), - SelectGameNode(None, _("Popular Games"), lambda gi: gi.si.game_flags & GI.GT_POPULAR, expanded=0), + SelectGameNode(None, _("Popular Games"), + lambda gi: gi.si.game_flags & GI.GT_POPULAR), + s_by_type, s_mahjongg, s_oriental, s_special, - s_by_type, + SelectGameNode(None, _("Custom Games"), + lambda gi: gi.si.game_type == GI.GT_CUSTOM), SelectGameNode(None, _('by Skill Level'), ( - SelectGameNode(None, _('Luck only'), lambda gi: gi.skill_level == GI.SL_LUCK), - SelectGameNode(None, _('Mostly luck'), lambda gi: gi.skill_level == GI.SL_MOSTLY_LUCK), - SelectGameNode(None, _('Balanced'), lambda gi: gi.skill_level == GI.SL_BALANCED), - SelectGameNode(None, _('Mostly skill'), lambda gi: gi.skill_level == GI.SL_MOSTLY_SKILL), - SelectGameNode(None, _('Skill only'), lambda gi: gi.skill_level == GI.SL_SKILL), + SelectGameNode(None, _('Luck only'), + lambda gi: gi.skill_level == GI.SL_LUCK), + SelectGameNode(None, _('Mostly luck'), + lambda gi: gi.skill_level == GI.SL_MOSTLY_LUCK), + SelectGameNode(None, _('Balanced'), + lambda gi: gi.skill_level == GI.SL_BALANCED), + SelectGameNode(None, _('Mostly skill'), + lambda gi: gi.skill_level == GI.SL_MOSTLY_SKILL), + SelectGameNode(None, _('Skill only'), + lambda gi: gi.skill_level == GI.SL_SKILL), )), SelectGameNode(None, _("by Game Feature"), ( SelectGameNode(None, _("by Number of Cards"), ( - SelectGameNode(None, _("32 cards"), lambda gi: gi.si.ncards == 32), - SelectGameNode(None, _("48 cards"), lambda gi: gi.si.ncards == 48), - SelectGameNode(None, _("52 cards"), lambda gi: gi.si.ncards == 52), - SelectGameNode(None, _("64 cards"), lambda gi: gi.si.ncards == 64), - SelectGameNode(None, _("78 cards"), lambda gi: gi.si.ncards == 78), - SelectGameNode(None, _("104 cards"), lambda gi: gi.si.ncards == 104), - SelectGameNode(None, _("144 cards"), lambda gi: gi.si.ncards == 144), - SelectGameNode(None, _("Other number"), lambda gi: gi.si.ncards not in (32, 48, 52, 64, 78, 104, 144)), + SelectGameNode(None, _("32 cards"), + lambda gi: gi.si.ncards == 32), + SelectGameNode(None, _("48 cards"), + lambda gi: gi.si.ncards == 48), + SelectGameNode(None, _("52 cards"), + lambda gi: gi.si.ncards == 52), + SelectGameNode(None, _("64 cards"), + lambda gi: gi.si.ncards == 64), + SelectGameNode(None, _("78 cards"), + lambda gi: gi.si.ncards == 78), + SelectGameNode(None, _("104 cards"), + lambda gi: gi.si.ncards == 104), + SelectGameNode(None, _("144 cards"), + lambda gi: gi.si.ncards == 144), + SelectGameNode(None, _("Other number"), + lambda gi: gi.si.ncards not in (32, 48, 52, 64, 78, 104, 144)), )), SelectGameNode(None, _("by Number of Decks"), ( - SelectGameNode(None, _("1 deck games"), lambda gi: gi.si.decks == 1), - SelectGameNode(None, _("2 deck games"), lambda gi: gi.si.decks == 2), - SelectGameNode(None, _("3 deck games"), lambda gi: gi.si.decks == 3), - SelectGameNode(None, _("4 deck games"), lambda gi: gi.si.decks == 4), + SelectGameNode(None, _("1 deck games"), + lambda gi: gi.si.decks == 1), + SelectGameNode(None, _("2 deck games"), + lambda gi: gi.si.decks == 2), + SelectGameNode(None, _("3 deck games"), + lambda gi: gi.si.decks == 3), + SelectGameNode(None, _("4 deck games"), + lambda gi: gi.si.decks == 4), )), SelectGameNode(None, _("by Number of Redeals"), ( - SelectGameNode(None, _("No redeal"), lambda gi: gi.si.redeals == 0), - SelectGameNode(None, _("1 redeal"), lambda gi: gi.si.redeals == 1), - SelectGameNode(None, _("2 redeals"), lambda gi: gi.si.redeals == 2), - SelectGameNode(None, _("3 redeals"), lambda gi: gi.si.redeals == 3), - SelectGameNode(None, _("Unlimited redeals"), lambda gi: gi.si.redeals == -1), -## SelectGameNode(None, "Variable redeals", lambda gi: gi.si.redeals == -2), - SelectGameNode(None, _("Other number of redeals"), lambda gi: gi.si.redeals not in (-1, 0, 1, 2, 3)), + SelectGameNode(None, _("No redeal"), + lambda gi: gi.si.redeals == 0), + SelectGameNode(None, _("1 redeal"), + lambda gi: gi.si.redeals == 1), + SelectGameNode(None, _("2 redeals"), + lambda gi: gi.si.redeals == 2), + SelectGameNode(None, _("3 redeals"), + lambda gi: gi.si.redeals == 3), + SelectGameNode(None, _("Unlimited redeals"), + lambda gi: gi.si.redeals == -1), +## SelectGameNode(None, "Variable redeals", +## lambda gi: gi.si.redeals == -2), + SelectGameNode(None, _("Other number of redeals"), + lambda gi: gi.si.redeals not in (-1, 0, 1, 2, 3)), )), s_by_compatibility, )), s_by_pysol_version, SelectGameNode(None, _("Other Categories"), ( - SelectGameNode(None, _("Games for Children (very easy)"), lambda gi: gi.si.game_flags & GI.GT_CHILDREN), - SelectGameNode(None, _("Games with Scoring"), lambda gi: gi.si.game_flags & GI.GT_SCORE), - SelectGameNode(None, _("Games with Separate Decks"), lambda gi: gi.si.game_flags & GI.GT_SEPARATE_DECKS), - SelectGameNode(None, _("Open Games (all cards visible)"), lambda gi: gi.si.game_flags & GI.GT_OPEN), - SelectGameNode(None, _("Relaxed Variants"), lambda gi: gi.si.game_flags & GI.GT_RELAXED), + SelectGameNode(None, _("Games for Children (very easy)"), + lambda gi: gi.si.game_flags & GI.GT_CHILDREN), + SelectGameNode(None, _("Games with Scoring"), + lambda gi: gi.si.game_flags & GI.GT_SCORE), + SelectGameNode(None, _("Games with Separate Decks"), + lambda gi: gi.si.game_flags & GI.GT_SEPARATE_DECKS), + SelectGameNode(None, _("Open Games (all cards visible)"), + lambda gi: gi.si.game_flags & GI.GT_OPEN), + SelectGameNode(None, _("Relaxed Variants"), + lambda gi: gi.si.game_flags & GI.GT_RELAXED), )), s_original, s_contrib, diff --git a/pysollib/tk/selectgame.py b/pysollib/tk/selectgame.py index 2fb99b69..178f420a 100644 --- a/pysollib/tk/selectgame.py +++ b/pysollib/tk/selectgame.py @@ -117,16 +117,21 @@ class SelectGameData(SelectDialogTreeData): select_mahjongg_game = lambda gi: gi.si.game_type == GI.GT_MAHJONGG gg = None if filter(select_mahjongg_game, self.all_games_gi): - gg = SelectGameNode(None, _("Mahjongg Games"), select_mahjongg_game) + gg = SelectGameNode(None, _("Mahjongg Games"), + select_mahjongg_game) g.append(gg) if g[0]: - s_by_type = SelectGameNode(None, _("French games"), tuple(g[0]), expanded=1) + s_by_type = SelectGameNode(None, _("French games"), + tuple(g[0]), expanded=1) if g[1]: - s_oriental = SelectGameNode(None, _("Oriental Games"), tuple(g[1])) + s_oriental = SelectGameNode(None, _("Oriental Games"), + tuple(g[1])) if g[2]: - s_special = SelectGameNode(None, _("Special Games"), tuple(g[2])) + s_special = SelectGameNode(None, _("Special Games"), + tuple(g[2])) if g[3]: - s_original = SelectGameNode(None, _("Original Games"), tuple(g[3])) + s_original = SelectGameNode(None, _("Original Games"), + tuple(g[3])) ## if g[4]: ## s_contrib = SelectGameNode(None, "Contributed Games", tuple(g[4])) if g[5]: @@ -140,7 +145,8 @@ class SelectGameData(SelectDialogTreeData): name = _(name) gg.append(SelectGameNode(None, name, select_func)) if 1 and gg: - s_by_compatibility = SelectGameNode(None, _("by Compatibility"), tuple(gg)) + s_by_compatibility = SelectGameNode(None, _("by Compatibility"), + tuple(gg)) pass # s_by_pysol_version, gg = None, [] @@ -151,62 +157,94 @@ class SelectGameData(SelectDialogTreeData): name = _("New games in v. ") + name gg.append(SelectGameNode(None, name, select_func)) if 1 and gg: - s_by_pysol_version = SelectGameNode(None, _("by PySol version"), tuple(gg)) + s_by_pysol_version = SelectGameNode(None, _("by PySol version"), + tuple(gg)) pass # ul_alternate_names = UserList(list(app.gdb.getGamesTuplesSortedByAlternateName())) # self.rootnodes = filter(None, ( - #SelectGameNode(None, "All Games", lambda gi: 1, expanded=0), - SelectGameNode(None, _("All Games"), None, expanded=0), + SelectGameNode(None, _("All Games"), None), SelectGameNode(None, _("Alternate Names"), ul_alternate_names), - SelectGameNode(None, _("Popular Games"), lambda gi: gi.si.game_flags & GI.GT_POPULAR, expanded=0), + SelectGameNode(None, _("Popular Games"), + lambda gi: gi.si.game_flags & GI.GT_POPULAR), s_mahjongg, s_oriental, s_special, + SelectGameNode(None, _("Custom Games"), + lambda gi: gi.si.game_type == GI.GT_CUSTOM), s_by_type, SelectGameNode(None, _('by Skill Level'), ( - SelectGameNode(None, _('Luck only'), lambda gi: gi.skill_level == GI.SL_LUCK), - SelectGameNode(None, _('Mostly luck'), lambda gi: gi.skill_level == GI.SL_MOSTLY_LUCK), - SelectGameNode(None, _('Balanced'), lambda gi: gi.skill_level == GI.SL_BALANCED), - SelectGameNode(None, _('Mostly skill'), lambda gi: gi.skill_level == GI.SL_MOSTLY_SKILL), - SelectGameNode(None, _('Skill only'), lambda gi: gi.skill_level == GI.SL_SKILL), + SelectGameNode(None, _('Luck only'), + lambda gi: gi.skill_level == GI.SL_LUCK), + SelectGameNode(None, _('Mostly luck'), + lambda gi: gi.skill_level == GI.SL_MOSTLY_LUCK), + SelectGameNode(None, _('Balanced'), + lambda gi: gi.skill_level == GI.SL_BALANCED), + SelectGameNode(None, _('Mostly skill'), + lambda gi: gi.skill_level == GI.SL_MOSTLY_SKILL), + SelectGameNode(None, _('Skill only'), + lambda gi: gi.skill_level == GI.SL_SKILL), )), SelectGameNode(None, _("by Game Feature"), ( SelectGameNode(None, _("by Number of Cards"), ( - SelectGameNode(None, _("32 cards"), lambda gi: gi.si.ncards == 32), - SelectGameNode(None, _("48 cards"), lambda gi: gi.si.ncards == 48), - SelectGameNode(None, _("52 cards"), lambda gi: gi.si.ncards == 52), - SelectGameNode(None, _("64 cards"), lambda gi: gi.si.ncards == 64), - SelectGameNode(None, _("78 cards"), lambda gi: gi.si.ncards == 78), - SelectGameNode(None, _("104 cards"), lambda gi: gi.si.ncards == 104), - SelectGameNode(None, _("144 cards"), lambda gi: gi.si.ncards == 144), - SelectGameNode(None, _("Other number"), lambda gi: gi.si.ncards not in (32, 48, 52, 64, 78, 104, 144)), + SelectGameNode(None, _("32 cards"), + lambda gi: gi.si.ncards == 32), + SelectGameNode(None, _("48 cards"), + lambda gi: gi.si.ncards == 48), + SelectGameNode(None, _("52 cards"), + lambda gi: gi.si.ncards == 52), + SelectGameNode(None, _("64 cards"), + lambda gi: gi.si.ncards == 64), + SelectGameNode(None, _("78 cards"), + lambda gi: gi.si.ncards == 78), + SelectGameNode(None, _("104 cards"), + lambda gi: gi.si.ncards == 104), + SelectGameNode(None, _("144 cards"), + lambda gi: gi.si.ncards == 144), + SelectGameNode(None, _("Other number"), + lambda gi: gi.si.ncards not in (32, 48, 52, 64, 78, 104, 144)), )), SelectGameNode(None, _("by Number of Decks"), ( - SelectGameNode(None, _("1 deck games"), lambda gi: gi.si.decks == 1), - SelectGameNode(None, _("2 deck games"), lambda gi: gi.si.decks == 2), - SelectGameNode(None, _("3 deck games"), lambda gi: gi.si.decks == 3), - SelectGameNode(None, _("4 deck games"), lambda gi: gi.si.decks == 4), + SelectGameNode(None, _("1 deck games"), + lambda gi: gi.si.decks == 1), + SelectGameNode(None, _("2 deck games"), + lambda gi: gi.si.decks == 2), + SelectGameNode(None, _("3 deck games"), + lambda gi: gi.si.decks == 3), + SelectGameNode(None, _("4 deck games"), + lambda gi: gi.si.decks == 4), )), SelectGameNode(None, _("by Number of Redeals"), ( - SelectGameNode(None, _("No redeal"), lambda gi: gi.si.redeals == 0), - SelectGameNode(None, _("1 redeal"), lambda gi: gi.si.redeals == 1), - SelectGameNode(None, _("2 redeals"), lambda gi: gi.si.redeals == 2), - SelectGameNode(None, _("3 redeals"), lambda gi: gi.si.redeals == 3), - SelectGameNode(None, _("Unlimited redeals"), lambda gi: gi.si.redeals == -1), -## SelectGameNode(None, "Variable redeals", lambda gi: gi.si.redeals == -2), - SelectGameNode(None, _("Other number of redeals"), lambda gi: gi.si.redeals not in (-1, 0, 1, 2, 3)), + SelectGameNode(None, _("No redeal"), + lambda gi: gi.si.redeals == 0), + SelectGameNode(None, _("1 redeal"), + lambda gi: gi.si.redeals == 1), + SelectGameNode(None, _("2 redeals"), + lambda gi: gi.si.redeals == 2), + SelectGameNode(None, _("3 redeals"), + lambda gi: gi.si.redeals == 3), + SelectGameNode(None, _("Unlimited redeals"), + lambda gi: gi.si.redeals == -1), + SelectGameNode(None, "Variable redeals", + lambda gi: gi.si.redeals == -2), + SelectGameNode(None, _("Other number of redeals"), + lambda gi: gi.si.redeals not in (-1, 0, 1, 2, 3)), )), s_by_compatibility, )), s_by_pysol_version, SelectGameNode(None, _("Other Categories"), ( - SelectGameNode(None, _("Games for Children (very easy)"), lambda gi: gi.si.game_flags & GI.GT_CHILDREN), - SelectGameNode(None, _("Games with Scoring"), lambda gi: gi.si.game_flags & GI.GT_SCORE), - SelectGameNode(None, _("Games with Separate Decks"), lambda gi: gi.si.game_flags & GI.GT_SEPARATE_DECKS), - SelectGameNode(None, _("Open Games (all cards visible)"), lambda gi: gi.si.game_flags & GI.GT_OPEN), - SelectGameNode(None, _("Relaxed Variants"), lambda gi: gi.si.game_flags & GI.GT_RELAXED), + SelectGameNode(None, _("Games for Children (very easy)"), + lambda gi: gi.si.game_flags & GI.GT_CHILDREN), + SelectGameNode(None, _("Games with Scoring"), + lambda gi: gi.si.game_flags & GI.GT_SCORE), + SelectGameNode(None, _("Games with Separate Decks"), + lambda gi: gi.si.game_flags & GI.GT_SEPARATE_DECKS), + SelectGameNode(None, _("Open Games (all cards visible)"), + lambda gi: gi.si.game_flags & GI.GT_OPEN), + SelectGameNode(None, _("Relaxed Variants"), + lambda gi: gi.si.game_flags & GI.GT_RELAXED), )), s_original, s_contrib, @@ -362,7 +400,7 @@ class SelectGameDialogWithPreview(SelectGameDialog): ('altnames', _('Alternate names:'), info_frame, 1), ('category', _('Category:'), info_frame, 2), ('type', _('Type:'), info_frame, 3), - ('skill_level', _('Skill level:'), info_frame, 4), + ('skill_level', _('Skill level:'), info_frame, 4), ('decks', _('Decks:'), info_frame, 5), ('redeals', _('Redeals:'), info_frame, 6), # diff --git a/pysollib/tk/statusbar.py b/pysollib/tk/statusbar.py index c8c80910..bb6b96cd 100644 --- a/pysollib/tk/statusbar.py +++ b/pysollib/tk/statusbar.py @@ -73,8 +73,6 @@ class MfxStatusbar: self.frame.grid(row=self._row, column=self._column, columnspan=self._columnspan, sticky='ew', padx=1, pady=1) - #if os.name == "mac": - # Tkinter.Label(self.frame, width=2).pack(side='right') if WIN_SYSTEM == 'win32': self.frame.config(relief='raised') self.padx = 0 diff --git a/pysollib/tk/tkstats.py b/pysollib/tk/tkstats.py index c6ee263f..fed9ef31 100644 --- a/pysollib/tk/tkstats.py +++ b/pysollib/tk/tkstats.py @@ -457,10 +457,7 @@ class AllGames_StatsDialogScrolledCanvas(MfxScrolledCanvas): class AllGames_StatsDialog(MfxDialog): - # for font "canvas_fixed" - #CHAR_W, CHAR_H = 7, 16 - #if os.name == "mac": CHAR_W = 6 - # + YVIEW = 0 FONT_TYPE = "default" diff --git a/pysollib/util.py b/pysollib/util.py index 7687b513..789d647f 100644 --- a/pysollib/util.py +++ b/pysollib/util.py @@ -54,12 +54,11 @@ __all__ = ['SUITS', 'VARIABLE_REDEALS', 'CARDSET', 'IMAGE_EXTENSIONS', - 'Timer', 'DataLoader', ] # imports -import sys, os, re, time +import sys, os # PySol imports from settings import DATA_DIRS, TOOLKIT @@ -116,25 +115,6 @@ if Image: IMAGE_EXTENSIONS = (".png", ".gif", ".jpg", ".ppm", ".bmp") -# /*********************************************************************** -# // simple benchmarking -# ************************************************************************/ - -class Timer: - def __init__(self, msg = ""): - self.msg = msg - self.clock = time.time - if os.name == "nt": - self.clock = time.clock - self.start = self.clock() - def reset(self): - self.start = self.clock() - def get(self): - return self.clock() - self.start - def __repr__(self): - return "%-20s %6.3f seconds" % (self.msg, self.clock() - self.start) - - # /*********************************************************************** # // DataLoader # ************************************************************************/