diff --git a/pysollib/app.py b/pysollib/app.py index 068c295b..cf71787b 100644 --- a/pysollib/app.py +++ b/pysollib/app.py @@ -646,13 +646,15 @@ class Application: self.opt.cardset[(1, gi.id)] = (cs.name, cs.backname) # from pprint import pprint; pprint(self.opt.cardset) - def loadCardset(self, cs, id=0, update=7, progress=None): + def loadCardset(self, cs, id=0, update=7, progress=None, + tocache=False, noprogress=False): # print 'loadCardset', cs.ident r = 0 if cs is None or cs.error: return 0 if cs is self.cardset: - self.updateCardset(id, update=update) + if not tocache: + self.updateCardset(id, update=update) return 1 # cache carsets # self.cardsets_cache: @@ -662,12 +664,13 @@ class Application: if c and c[0] == cs.ident: # print 'load from cache', c self.images, self.subsampled_images = c[1], c[2] - self.updateCardset(id, update=update) - if self.menubar is not None: - self.menubar.updateBackgroundImagesMenu() + if not tocache: + self.updateCardset(id, update=update) + if self.menubar is not None: + self.menubar.updateBackgroundImagesMenu() return 1 # - if progress is None: + if progress is None and not noprogress: self.wm_save_state() self.wm_withdraw() title = _("Loading cardset %s...") % cs.name @@ -682,25 +685,31 @@ class Application: if not images.load(app=self, progress=progress): raise Exception("Invalid or damaged cardset") simages = SubsampledImages(images) - if self.opt.save_cardsets: - c = self.cardsets_cache.get(cs.type) - if c: - # c[1].destruct() - destruct(c[1]) - self.cardsets_cache[cs.type] = (cs.ident, images, simages) - elif self.images is not None: - # self.images.destruct() - destruct(self.images) - # - if self.cardset: - if self.cardset.ident != cs.ident: - if self.cardset.type == cs.type: - # clear saved games geometry - self.opt.games_geometry = {} - # update - self.images = images - self.subsampled_images = simages - self.updateCardset(id, update=update) + if tocache: + simages.setNegative(self.opt.negative_bottom) + # The save cardsets option is deprecated, and its existence + # directly conflicts with the ability to allow previews of + # other cardset types. + # if self.opt.save_cardsets: + c = self.cardsets_cache.get(cs.type) + if c: + # c[1].destruct() + destruct(c[1]) + self.cardsets_cache[cs.type] = (cs.ident, images, simages) + if not tocache: + # elif self.images is not None: + # # self.images.destruct() + # destruct(self.images) + # + if self.cardset: + if self.cardset.ident != cs.ident: + if self.cardset.type == cs.type: + # clear saved games geometry + self.opt.games_geometry = {} + # update + self.images = images + self.subsampled_images = simages + self.updateCardset(id, update=update) r = 1 except (Exception, TclError, UnpicklingError) as ex: traceback.print_exc() @@ -715,7 +724,7 @@ class Application: self.top, ex, title=_("Cardset load error"), text=_("Error while loading cardset")) self.intro.progress = progress - if r and self.menubar is not None: + if r and not tocache and self.menubar is not None: self.menubar.updateBackgroundImagesMenu() return r diff --git a/pysollib/options.py b/pysollib/options.py index e670e8cb..effe752b 100644 --- a/pysollib/options.py +++ b/pysollib/options.py @@ -111,7 +111,6 @@ mouse_type = string mouse_undo = boolean negative_bottom = boolean randomize_place = boolean -save_cardsets = boolean dragcursor = boolean save_games_geometry = boolean game_geometry = int_list(min=2, max=2) @@ -258,7 +257,7 @@ class Options: ('mouse_undo', 'bool'), ('negative_bottom', 'bool'), ('randomize_place', 'bool'), - ('save_cardsets', 'bool'), + # ('save_cardsets', 'bool'), ('dragcursor', 'bool'), ('save_games_geometry', 'bool'), ('sound', 'bool'), @@ -437,7 +436,7 @@ class Options: self.offsets = {} # cards offsets # self.randomize_place = False - self.save_cardsets = True + # self.save_cardsets = True self.dragcursor = True # self.scale_cards = False diff --git a/pysollib/pysolgtk/selectgame.py b/pysollib/pysolgtk/selectgame.py index 698b4047..4e99c4c4 100644 --- a/pysollib/pysolgtk/selectgame.py +++ b/pysollib/pysolgtk/selectgame.py @@ -396,7 +396,7 @@ class SelectGameDialogWithPreview(MfxDialog): gamerandom=self.app.gamerandom, gdb=self.app.gdb, gimages=self.app.gimages, - images=self.app.subsampled_images, + images=None, menubar=None, miscrandom=self.app.miscrandom, opt=self.app.opt.copy(), @@ -412,6 +412,16 @@ class SelectGameDialogWithPreview(MfxDialog): self.preview_app.opt.shadow = 0 self.preview_app.opt.shade = 0 # + + c = self.app.cardsets_cache.get(gi.category) + if not c: + cardset = self.app.cardset_manager.getByName( + self.app.opt.cardset[gi.category][0]) + self.app.loadCardset(cardset, id=gi.category, + tocache=True, noprogress=True) + c = self.app.cardsets_cache.get(gi.category) + self.preview_app.images = c[2] + self.preview_app.audio = None # turn off audio for initial dealing if animations >= 0: self.preview_app.opt.animations = animations diff --git a/pysollib/tile/selectgame.py b/pysollib/tile/selectgame.py index 2b24d9e4..6e401674 100644 --- a/pysollib/tile/selectgame.py +++ b/pysollib/tile/selectgame.py @@ -485,7 +485,7 @@ class SelectGameDialogWithPreview(SelectGameDialog): gamerandom=self.app.gamerandom, gdb=self.app.gdb, gimages=self.app.gimages, - images=self.app.subsampled_images, + images=None, menubar=None, miscrandom=self.app.miscrandom, opt=self.app.opt.copy(), @@ -501,6 +501,16 @@ class SelectGameDialogWithPreview(SelectGameDialog): self.preview_app.opt.shadow = 0 self.preview_app.opt.shade = 0 # + + c = self.app.cardsets_cache.get(gi.category) + if not c: + cardset = self.app.cardset_manager.getByName( + self.app.opt.cardset[gi.category][0]) + self.app.loadCardset(cardset, id=gi.category, + tocache=True, noprogress=True) + c = self.app.cardsets_cache.get(gi.category) + self.preview_app.images = c[2] + self.preview_app.audio = None # turn off audio for initial dealing if animations >= 0: self.preview_app.opt.animations = animations diff --git a/pysollib/tk/selectgame.py b/pysollib/tk/selectgame.py index d6c6bb94..fb17f429 100644 --- a/pysollib/tk/selectgame.py +++ b/pysollib/tk/selectgame.py @@ -487,7 +487,7 @@ class SelectGameDialogWithPreview(SelectGameDialog): gamerandom=self.app.gamerandom, gdb=self.app.gdb, gimages=self.app.gimages, - images=self.app.subsampled_images, + images=None, menubar=None, miscrandom=self.app.miscrandom, opt=self.app.opt.copy(), @@ -503,6 +503,16 @@ class SelectGameDialogWithPreview(SelectGameDialog): self.preview_app.opt.shadow = 0 self.preview_app.opt.shade = 0 # + + c = self.app.cardsets_cache.get(gi.category) + if not c: + cardset = self.app.cardset_manager.getByName( + self.app.opt.cardset[gi.category][0]) + self.app.loadCardset(cardset, id=gi.category, + tocache=True, noprogress=True) + c = self.app.cardsets_cache.get(gi.category) + self.preview_app.images = c[2] + self.preview_app.audio = None # turn off audio for initial dealing if animations >= 0: self.preview_app.opt.animations = animations