1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00
This commit is contained in:
Shlomi Fish 2017-04-17 13:22:30 +03:00
parent bfcfdc59a9
commit c65a948357
7 changed files with 164 additions and 181 deletions

View file

@ -23,11 +23,12 @@
# imports # imports
import os, re, sys, types import os
import gtk, gobject import gtk
import gobject
# PySol imports # PySol imports
from pysollib.mygettext import _, n_ from pysollib.mygettext import _
from pysollib.resource import CSI from pysollib.resource import CSI
from pysollib.mfxutil import kwdefault from pysollib.mfxutil import kwdefault
@ -62,8 +63,7 @@ class SelectCardsetDialogWithPreview(MfxDialog):
if self._cardset_store is None: if self._cardset_store is None:
self._createStore() self._createStore()
#padx, pady = kw.padx, kw.pady # padx, pady = kw.padx, kw.pady
padx, pady = 5, 5
# left # left
# paned # paned
hpaned = gtk.HPaned() hpaned = gtk.HPaned()
@ -74,52 +74,49 @@ class SelectCardsetDialogWithPreview(MfxDialog):
treeview = PysolTreeView(self, self._cardset_store) treeview = PysolTreeView(self, self._cardset_store)
self.treeview = treeview self.treeview = treeview
hpaned.pack1(treeview.scrolledwindow, True, True) hpaned.pack1(treeview.scrolledwindow, True, True)
##treeview.treeview.expand_all() # treeview.treeview.expand_all()
# right # right
sw = gtk.ScrolledWindow() sw = gtk.ScrolledWindow()
sw.show() sw.show()
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
hpaned.pack2(sw, True, True) hpaned.pack2(sw, True, True)
##self.scrolledwindow = sw # self.scrolledwindow = sw
# #
self.preview = MfxCanvas(self) self.preview = MfxCanvas(self)
self.preview.show() self.preview.show()
sw.add(self.preview) sw.add(self.preview)
#hpaned.pack2(self.preview, True, True) # hpaned.pack2(self.preview, True, True)
self.preview.setTile(app, app.tabletile_index, force=True) self.preview.setTile(app, app.tabletile_index, force=True)
# #
hpaned.set_position(240) hpaned.set_position(240)
self.createButtons(bottom_box, kw) self.createButtons(bottom_box, kw)
##~self.updatePreview(key) # ~self.updatePreview(key)
self.show_all() self.show_all()
gtk.main() gtk.main()
def _selectCardset(self, all_cardsets, selecter): def _selectCardset(self, all_cardsets, selecter):
if selecter is None: if selecter is None:
return [(cs.index, cs.name) for cs in all_cardsets] return [(cs.index, cs.name) for cs in all_cardsets]
return [(cs.index, cs.name) for cs in all_cardsets if selecter(cs)] return [(cs.index, cs.name) for cs in all_cardsets if selecter(cs)]
def _addCardsets(self, store, root_iter, root_label, cardsets): def _addCardsets(self, store, root_iter, root_label, cardsets):
iter = store.append(root_iter) iter = store.append(root_iter)
store.set(iter, 0, root_label, 1, -1) store.set(iter, 0, root_label, 1, -1)
for index, name in cardsets: for index, name in cardsets:
child_iter = store.append(iter) child_iter = store.append(iter)
##~ name = _(name) # ~ name = _(name)
store.set(child_iter, 0, name, 1, index) store.set(child_iter, 0, name, 1, index)
def _addCardsetsByType(self, store, root_label, all_cardsets, def _addCardsetsByType(self, store, root_label, all_cardsets,
cardset_types, selecter_type, registered): cardset_types, selecter_type, registered):
manager = self.manager manager = self.manager
root_iter = store.append(None) root_iter = store.append(None)
store.set(root_iter, 0, root_label, 1, -1) store.set(root_iter, 0, root_label, 1, -1)
items = cardset_types.items() items = cardset_types.items()
items.sort(lambda a, b: cmp(a[1], b[1])) items.sort(key=lambda x: x[1])
added = False added = False
for key, label in items: for key, label in items:
if key not in getattr(manager, registered): if key not in getattr(manager, registered):
@ -127,18 +124,18 @@ class SelectCardsetDialogWithPreview(MfxDialog):
cardsets = [] cardsets = []
for cs in all_cardsets: for cs in all_cardsets:
si = getattr(cs.si, selecter_type) si = getattr(cs.si, selecter_type)
if isinstance(si, int): # type if isinstance(si, int): # type
if key == si: if key == si:
cardsets.append((cs.index, cs.name)) cardsets.append((cs.index, cs.name))
else: # style, nationality, date else: # style, nationality, date
if key in si: if key in si:
cardsets.append((cs.index, cs.name)) cardsets.append((cs.index, cs.name))
if cardsets: if cardsets:
added = True added = True
self._addCardsets(store, root_iter, label, cardsets) self._addCardsets(store, root_iter, label, cardsets)
if added: if added:
selecter = lambda cs, selecter_type=selecter_type: \ def selecter(cs, selecter_type=selecter_type):
not getattr(cs.si, selecter_type) return getattr(cs.si, selecter_type)
cs = self._selectCardset(all_cardsets, selecter) cs = self._selectCardset(all_cardsets, selecter)
if cs: if cs:
self._addCardsets(store, root_iter, _('Uncategorized'), cs) self._addCardsets(store, root_iter, _('Uncategorized'), cs)
@ -159,11 +156,12 @@ class SelectCardsetDialogWithPreview(MfxDialog):
root_iter = store.append(None) root_iter = store.append(None)
store.set(root_iter, 0, _('by Size'), 1, -1) store.set(root_iter, 0, _('by Size'), 1, -1)
for label, selecter in ( for label, selecter in (
(_("Tiny cardsets"), lambda cs: cs.si.size == CSI.SIZE_TINY), (_("Tiny cardsets"), lambda cs: cs.si.size == CSI.SIZE_TINY),
(_("Small cardsets"), lambda cs: cs.si.size == CSI.SIZE_SMALL), (_("Small cardsets"), lambda cs: cs.si.size == CSI.SIZE_SMALL),
(_("Medium cardsets"), lambda cs: cs.si.size == CSI.SIZE_MEDIUM), (_("Medium cardsets"), lambda cs: cs.si.size == CSI.SIZE_MEDIUM),
(_("Large cardsets"), lambda cs: cs.si.size == CSI.SIZE_LARGE), (_("Large cardsets"), lambda cs: cs.si.size == CSI.SIZE_LARGE),
(_("XLarge cardsets"), lambda cs: cs.si.size == CSI.SIZE_XLARGE),): (_("XLarge cardsets"), lambda cs: cs.si.size == CSI.SIZE_XLARGE),
):
cs = self._selectCardset(all_cardsets, selecter) cs = self._selectCardset(all_cardsets, selecter)
if cs: if cs:
self._addCardsets(store, root_iter, label, cs) self._addCardsets(store, root_iter, label, cs)
@ -180,21 +178,18 @@ class SelectCardsetDialogWithPreview(MfxDialog):
self._cardset_store = store self._cardset_store = store
def getSelected(self): def getSelected(self):
index = self.treeview.getSelected() index = self.treeview.getSelected()
if index < 0: if index < 0:
return None return None
return index return index
def showSelected(self, w): def showSelected(self, w):
key = self.getSelected() key = self.getSelected()
if key is not None: if key is not None:
self.updatePreview(key) self.updatePreview(key)
pass pass
def updatePreview(self, key): def updatePreview(self, key):
if key == self.preview_key: if key == self.preview_key:
return return
@ -207,7 +202,7 @@ class SelectCardsetDialogWithPreview(MfxDialog):
return return
names, columns = cs.getPreviewCardNames() names, columns = cs.getPreviewCardNames()
try: try:
#???names, columns = cs.getPreviewCardNames() # ???names, columns = cs.getPreviewCardNames()
for n in names: for n in names:
f = os.path.join(cs.dir, n + cs.ext) f = os.path.join(cs.dir, n + cs.ext)
self.preview_images.append(loadImage(file=f)) self.preview_images.append(loadImage(file=f))
@ -228,7 +223,6 @@ class SelectCardsetDialogWithPreview(MfxDialog):
canvas.set_scroll_region(0, 0, sx+dx, sy+dy) canvas.set_scroll_region(0, 0, sx+dx, sy+dy)
self.preview_key = key self.preview_key = key
def initKw(self, kw): def initKw(self, kw):
kwdefault(kw, kwdefault(kw,
strings=(_("&Load"), _("&Cancel"), _("&Info..."),), strings=(_("&Load"), _("&Cancel"), _("&Info..."),),
@ -239,11 +233,9 @@ class SelectCardsetDialogWithPreview(MfxDialog):
) )
return MfxDialog.initKw(self, kw) return MfxDialog.initKw(self, kw)
def createInfo(self): def createInfo(self):
pass pass
def done(self, button): def done(self, button):
b = button.get_data('user_data') b = button.get_data('user_data')
if b == 2: if b == 2:
@ -257,7 +249,3 @@ class SelectCardsetDialogWithPreview(MfxDialog):
self.button = b self.button = b
self.hide() self.hide()
self.quit() self.quit()

View file

@ -23,14 +23,15 @@
# imports # imports
import os, re, sys, types import os
import gtk, gobject import gtk
import gobject
#from UserList import UserList # from UserList import UserList
# PySol imports # PySol imports
from pysollib.mygettext import _, n_ from pysollib.mygettext import _
from pysollib.mfxutil import destruct, Struct, KwStruct from pysollib.mfxutil import destruct, Struct
from pysollib.mfxutil import kwdefault from pysollib.mfxutil import kwdefault
from pysollib.mfxutil import format_time from pysollib.mfxutil import format_time
from pysollib.gamedb import GI from pysollib.gamedb import GI
@ -40,7 +41,7 @@ from pysollib.resource import CSI
# Toolkit imports # Toolkit imports
from tkutil import unbind_destroy from tkutil import unbind_destroy
from tkwidget import MfxDialog from tkwidget import MfxDialog
from tkcanvas import MfxCanvas, MfxCanvasText from tkcanvas import MfxCanvas
from pysoltree import PysolTreeView from pysoltree import PysolTreeView
@ -49,7 +50,7 @@ from pysoltree import PysolTreeView
# ************************************************************************ # ************************************************************************
class SelectGameDialogWithPreview(MfxDialog): class SelectGameDialogWithPreview(MfxDialog):
#Tree_Class = SelectGameTreeWithPreview # Tree_Class = SelectGameTreeWithPreview
game_store = None game_store = None
# #
_paned_position = 300 _paned_position = 300
@ -109,7 +110,6 @@ class SelectGameDialogWithPreview(MfxDialog):
stats_frame.set_border_width(4) stats_frame.set_border_width(4)
# info # info
self.info_labels = {} self.info_labels = {}
i = 0
for n, t, f, row in ( for n, t, f, row in (
('name', _('Name:'), info_frame, 0), ('name', _('Name:'), info_frame, 0),
('altnames', _('Alternate names:'), info_frame, 1), ('altnames', _('Alternate names:'), info_frame, 1),
@ -125,7 +125,7 @@ class SelectGameDialogWithPreview(MfxDialog):
('time', _('Playing time:'), stats_frame, 3), ('time', _('Playing time:'), stats_frame, 3),
('moves', _('Moves:'), stats_frame, 4), ('moves', _('Moves:'), stats_frame, 4),
('percent', _('% won:'), stats_frame, 5), ('percent', _('% won:'), stats_frame, 5),
): ):
title_label = gtk.Label() title_label = gtk.Label()
title_label.show() title_label.show()
title_label.set_text(t) title_label.set_text(t)
@ -149,9 +149,11 @@ class SelectGameDialogWithPreview(MfxDialog):
# canvas # canvas
self.preview = MfxCanvas(self) self.preview = MfxCanvas(self)
self.preview.show() self.preview.show()
table.attach(self.preview, table.attach(
self.preview,
0, 2, 1, 2, 0, 2, 1, 2,
gtk.EXPAND|gtk.FILL|gtk.SHRINK, gtk.EXPAND|gtk.FILL|gtk.SHRINK, gtk.EXPAND | gtk.FILL | gtk.SHRINK,
gtk.EXPAND | gtk.FILL | gtk.SHRINK,
0, 0) 0, 0)
self.preview.set_border_width(4) self.preview.set_border_width(4)
self.preview.setTile(app, app.tabletile_index, force=True) self.preview.setTile(app, app.tabletile_index, force=True)
@ -162,8 +164,8 @@ class SelectGameDialogWithPreview(MfxDialog):
self.preview_key = -1 self.preview_key = -1
self.preview_game = None self.preview_game = None
self.preview_app = None self.preview_app = None
##~ self.updatePreview(gameid, animations=0) # ~ self.updatePreview(gameid, animations=0)
##~ SelectGameTreeWithPreview.html_viewer = None # ~ SelectGameTreeWithPreview.html_viewer = None
self.connect('unrealize', self._unrealizeEvent) self.connect('unrealize', self._unrealizeEvent)
@ -172,7 +174,6 @@ class SelectGameDialogWithPreview(MfxDialog):
self.show_all() self.show_all()
gtk.main() gtk.main()
def _addGamesFromData(self, data, store, root_iter, root_label, all_games): def _addGamesFromData(self, data, store, root_iter, root_label, all_games):
gl = [] gl = []
for label, selecter in data: for label, selecter in data:
@ -186,7 +187,6 @@ class SelectGameDialogWithPreview(MfxDialog):
for label, games in gl: for label, games in gl:
self._addGames(store, iter, label, games) self._addGames(store, iter, label, games)
def _addGames(self, store, root_iter, root_label, games): def _addGames(self, store, root_iter, root_label, games):
if not games: if not games:
return return
@ -196,7 +196,6 @@ class SelectGameDialogWithPreview(MfxDialog):
child_iter = store.append(iter) child_iter = store.append(iter)
store.set(child_iter, 0, name, 1, id) store.set(child_iter, 0, name, 1, id)
def _selectGames(self, all_games, selecter): def _selectGames(self, all_games, selecter):
# return list of tuples (gameid, gamename) # return list of tuples (gameid, gamename)
if selecter is None: if selecter is None:
@ -205,7 +204,6 @@ class SelectGameDialogWithPreview(MfxDialog):
return all_games return all_games
return [(gi.id, gi.name) for gi in all_games if selecter(gi)] return [(gi.id, gi.name) for gi in all_games if selecter(gi)]
def createGameStore(self): def createGameStore(self):
store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT) store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT)
app = self.app app = self.app
@ -217,8 +215,9 @@ class SelectGameDialogWithPreview(MfxDialog):
for label, games, selecter in ( for label, games, selecter in (
(_('All Games'), all_games, None), (_('All Games'), all_games, None),
(_('Alternate Names'), alter_games, 'alt'), (_('Alternate Names'), alter_games, 'alt'),
(_('Popular Games'), all_games, lambda gi: gi.si.game_flags & GI.GT_POPULAR), (_('Popular Games'), all_games,
): lambda gi: gi.si.game_flags & GI.GT_POPULAR),
):
games = self._selectGames(games, selecter) games = self._selectGames(games, selecter)
self._addGames(store, None, label, games) self._addGames(store, None, label, games)
@ -234,11 +233,11 @@ class SelectGameDialogWithPreview(MfxDialog):
None, _("French games"), all_games) None, _("French games"), all_games)
# by skill level # by skill level
data = ( data = (
(_('Luck only'), lambda gi: gi.skill_level == GI.SL_LUCK), (_('Luck only'), lambda gi: gi.skill_level == GI.SL_LUCK),
(_('Mostly luck'), lambda gi: gi.skill_level == GI.SL_MOSTLY_LUCK), (_('Mostly luck'), lambda gi: gi.skill_level == GI.SL_MOSTLY_LUCK),
(_('Balanced'), lambda gi: gi.skill_level == GI.SL_BALANCED), (_('Balanced'), lambda gi: gi.skill_level == GI.SL_BALANCED),
(_('Mostly skill'), lambda gi: gi.skill_level == GI.SL_MOSTLY_SKILL), (_('Mostly skill'), lambda gi: gi.skill_level == GI.SL_MOSTLY_SKILL),
(_('Skill only'), lambda gi: gi.skill_level == GI.SL_SKILL), (_('Skill only'), lambda gi: gi.skill_level == GI.SL_SKILL),
) )
self._addGamesFromData(data, store, None, self._addGamesFromData(data, store, None,
_("by Skill Level"), all_games) _("by Skill Level"), all_games)
@ -247,37 +246,41 @@ class SelectGameDialogWithPreview(MfxDialog):
root_iter = store.append(None) root_iter = store.append(None)
store.set(root_iter, 0, _('by Game Feature'), 1, -1) store.set(root_iter, 0, _('by Game Feature'), 1, -1)
data = ( data = (
(_("32 cards"), lambda gi: gi.si.ncards == 32), (_("32 cards"), lambda gi: gi.si.ncards == 32),
(_("48 cards"), lambda gi: gi.si.ncards == 48), (_("48 cards"), lambda gi: gi.si.ncards == 48),
(_("52 cards"), lambda gi: gi.si.ncards == 52), (_("52 cards"), lambda gi: gi.si.ncards == 52),
(_("64 cards"), lambda gi: gi.si.ncards == 64), (_("64 cards"), lambda gi: gi.si.ncards == 64),
(_("78 cards"), lambda gi: gi.si.ncards == 78), (_("78 cards"), lambda gi: gi.si.ncards == 78),
(_("104 cards"), lambda gi: gi.si.ncards == 104), (_("104 cards"), lambda gi: gi.si.ncards == 104),
(_("144 cards"), lambda gi: gi.si.ncards == 144), (_("144 cards"), lambda gi: gi.si.ncards == 144),
(_("Other number"), lambda gi: gi.si.ncards not in (32, 48, 52, 64, 78, 104, 144)),) (_("Other number"),
self._addGamesFromData(data, store, root_iter, lambda gi: gi.si.ncards not in (32, 48, 52, 64, 78, 104, 144))
_("by Number of Cards"), all_games) )
self._addGamesFromData(
data, store, root_iter, _("by Number of Cards"), all_games)
data = ( data = (
(_("1 deck games"), lambda gi: gi.si.decks == 1), (_("1 deck games"), lambda gi: gi.si.decks == 1),
(_("2 deck games"), lambda gi: gi.si.decks == 2), (_("2 deck games"), lambda gi: gi.si.decks == 2),
(_("3 deck games"), lambda gi: gi.si.decks == 3), (_("3 deck games"), lambda gi: gi.si.decks == 3),
(_("4 deck games"), lambda gi: gi.si.decks == 4),) (_("4 deck games"), lambda gi: gi.si.decks == 4),)
self._addGamesFromData(data, store, root_iter, self._addGamesFromData(
_("by Number of Decks"), all_games) data, store, root_iter, _("by Number of Decks"), all_games)
data = ( data = (
(_("No redeal"), lambda gi: gi.si.redeals == 0), (_("No redeal"), lambda gi: gi.si.redeals == 0),
(_("1 redeal"), lambda gi: gi.si.redeals == 1), (_("1 redeal"), lambda gi: gi.si.redeals == 1),
(_("2 redeals"), lambda gi: gi.si.redeals == 2), (_("2 redeals"), lambda gi: gi.si.redeals == 2),
(_("3 redeals"), lambda gi: gi.si.redeals == 3), (_("3 redeals"), lambda gi: gi.si.redeals == 3),
(_("Unlimited redeals"), lambda gi: gi.si.redeals == -1), (_("Unlimited redeals"), lambda gi: gi.si.redeals == -1),
##(_("Variable redeals"), lambda gi: gi.si.redeals == -2), # (_("Variable redeals"), lambda gi: gi.si.redeals == -2),
(_("Other number of redeals"), lambda gi: gi.si.redeals not in (-1, 0, 1, 2, 3)),) (_("Other number of redeals"),
lambda gi: gi.si.redeals not in (-1, 0, 1, 2, 3)),)
self._addGamesFromData(data, store, root_iter, self._addGamesFromData(data, store, root_iter,
_("by Number of Redeals"), all_games) _("by Number of Redeals"), all_games)
data = [] data = []
for label, vg in GI.GAMES_BY_COMPATIBILITY: for label, vg in GI.GAMES_BY_COMPATIBILITY:
selecter = lambda gi, vg=vg: gi.id in vg def selecter(gi, vg=vg):
return gi.id in vg
data.append((label, selecter)) data.append((label, selecter))
self._addGamesFromData(data, store, root_iter, self._addGamesFromData(data, store, root_iter,
_("by Compatibility"), all_games) _("by Compatibility"), all_games)
@ -285,7 +288,8 @@ class SelectGameDialogWithPreview(MfxDialog):
# by PySol version # by PySol version
data = [] data = []
for version, vg in GI.GAMES_BY_PYSOL_VERSION: for version, vg in GI.GAMES_BY_PYSOL_VERSION:
selecter = lambda gi, vg=vg: gi.id in vg def selecter(gi, vg=vg):
return gi.id in vg
label = _("New games in v. ") + version label = _("New games in v. ") + version
data.append((label, selecter)) data.append((label, selecter))
self._addGamesFromData(data, store, None, self._addGamesFromData(data, store, None,
@ -293,24 +297,28 @@ class SelectGameDialogWithPreview(MfxDialog):
# #
data = ( data = (
(_("Games for Children (very easy)"), lambda gi: gi.si.game_flags & GI.GT_CHILDREN), (_("Games for Children (very easy)"),
(_("Games with Scoring"), lambda gi: gi.si.game_flags & GI.GT_SCORE), lambda gi: gi.si.game_flags & GI.GT_CHILDREN),
(_("Games with Separate Decks"), lambda gi: gi.si.game_flags & GI.GT_SEPARATE_DECKS), (_("Games with Scoring"),
(_("Open Games (all cards visible)"), lambda gi: gi.si.game_flags & GI.GT_OPEN), lambda gi: gi.si.game_flags & GI.GT_SCORE),
(_("Relaxed Variants"), lambda gi: gi.si.game_flags & GI.GT_RELAXED),) (_("Games with Separate Decks"),
lambda gi: gi.si.game_flags & GI.GT_SEPARATE_DECKS),
(_("Open Games (all cards visible)"),
lambda gi: gi.si.game_flags & GI.GT_OPEN),
(_("Relaxed Variants"),
lambda gi: gi.si.game_flags & GI.GT_RELAXED),)
self._addGamesFromData(data, store, None, self._addGamesFromData(data, store, None,
_("Other Categories"), all_games) _("Other Categories"), all_games)
# #
self._addGamesFromData(GI.SELECT_ORIGINAL_GAME_BY_TYPE, store, self._addGamesFromData(GI.SELECT_ORIGINAL_GAME_BY_TYPE, store,
None, _("Original Games"), all_games) None, _("Original Games"), all_games)
##self._addGamesFromData(GI.SELECT_CONTRIB_GAME_BY_TYPE, store, # self._addGamesFromData(GI.SELECT_CONTRIB_GAME_BY_TYPE, store,
## None, _("Contrib Game"), all_games) # None, _("Contrib Game"), all_games)
SelectGameDialogWithPreview.game_store = store SelectGameDialogWithPreview.game_store = store
return return
def initKw(self, kw): def initKw(self, kw):
kwdefault(kw, kwdefault(kw,
strings=(_("&Select"), _("&Rules"), _("&Cancel"),), strings=(_("&Select"), _("&Rules"), _("&Cancel"),),
@ -319,24 +327,21 @@ class SelectGameDialogWithPreview(MfxDialog):
) )
return MfxDialog.initKw(self, kw) return MfxDialog.initKw(self, kw)
def _unrealizeEvent(self, w): def _unrealizeEvent(self, w):
self.deletePreview(destroy=1) self.deletePreview(destroy=1)
#self.preview.unbind_all() # self.preview.unbind_all()
self._saveSettings() self._saveSettings()
def _saveSettings(self): def _saveSettings(self):
SelectGameDialogWithPreview._geometry = self.get_size() SelectGameDialogWithPreview._geometry = self.get_size()
SelectGameDialogWithPreview._paned_position = self.hpaned.get_position() SelectGameDialogWithPreview._paned_position = \
self.hpaned.get_position()
def _restoreSettings(self): def _restoreSettings(self):
if self._geometry: if self._geometry:
self.resize(self._geometry[0], self._geometry[1]) self.resize(self._geometry[0], self._geometry[1])
self.hpaned.set_position(self._paned_position) self.hpaned.set_position(self._paned_position)
def getSelected(self): def getSelected(self):
index = self.treeview.getSelected() index = self.treeview.getSelected()
if index < 0: if index < 0:
@ -348,17 +353,16 @@ class SelectGameDialogWithPreview(MfxDialog):
if id: if id:
self.updatePreview(id) self.updatePreview(id)
def deletePreview(self, destroy=0): def deletePreview(self, destroy=0):
self.preview_key = -1 self.preview_key = -1
# clean up the canvas # clean up the canvas
if self.preview: if self.preview:
unbind_destroy(self.preview) unbind_destroy(self.preview)
self.preview.deleteAllItems() self.preview.deleteAllItems()
##~ if destroy: # ~ if destroy:
##~ self.preview.delete("all") # ~ self.preview.delete("all")
# #
#for l in self.info_labels.values(): # for l in self.info_labels.values():
# l.config(text='') # l.config(text='')
# destruct the game # destruct the game
if self.preview_game: if self.preview_game:
@ -386,25 +390,25 @@ class SelectGameDialogWithPreview(MfxDialog):
if self.preview_app is None: if self.preview_app is None:
self.preview_app = Struct( self.preview_app = Struct(
# variables # variables
audio = self.app.audio, audio=self.app.audio,
canvas = canvas, canvas=canvas,
cardset = self.app.cardset.copy(), cardset=self.app.cardset.copy(),
comments = self.app.comments.new(), comments=self.app.comments.new(),
gamerandom = self.app.gamerandom, gamerandom=self.app.gamerandom,
gdb = self.app.gdb, gdb=self.app.gdb,
gimages = self.app.gimages, gimages=self.app.gimages,
images = self.app.subsampled_images, images=self.app.subsampled_images,
menubar = None, menubar=None,
miscrandom = self.app.miscrandom, miscrandom=self.app.miscrandom,
opt = self.app.opt.copy(), opt=self.app.opt.copy(),
startup_opt = self.app.startup_opt, startup_opt=self.app.startup_opt,
stats = self.app.stats.new(), stats=self.app.stats.new(),
top = None, top=None,
top_cursor = self.app.top_cursor, top_cursor=self.app.top_cursor,
toolbar = None, toolbar=None,
# methods # methods
constructGame = self.app.constructGame, constructGame=self.app.constructGame,
getFont = self.app.getFont, getFont=self.app.getFont,
) )
self.preview_app.opt.shadow = 0 self.preview_app.opt.shadow = 0
self.preview_app.opt.shade = 0 self.preview_app.opt.shade = 0
@ -416,17 +420,18 @@ class SelectGameDialogWithPreview(MfxDialog):
if self.preview_game: if self.preview_game:
self.preview_game.endGame() self.preview_game.endGame()
self.preview_game.destruct() self.preview_game.destruct()
##self.top.wm_title("Select Game - " + self.app.getGameTitleName(gameid)) # self.top.wm_title(
# "Select Game - " + self.app.getGameTitleName(gameid))
title = self.app.getGameTitleName(gameid) title = self.app.getGameTitleName(gameid)
self.set_title(_("Playable Preview - ") + title) self.set_title(_("Playable Preview - ") + title)
# #
self.preview_game = gi.gameclass(gi) self.preview_game = gi.gameclass(gi)
self.preview_game.createPreview(self.preview_app) self.preview_game.createPreview(self.preview_app)
tx, ty = 0, 0 # tx, ty = 0, 0
gw, gh = self.preview_game.width, self.preview_game.height # gw, gh = self.preview_game.width, self.preview_game.height
##~ canvas.config(scrollregion=(-tx, -ty, -tx, -ty)) # ~ canvas.config(scrollregion=(-tx, -ty, -tx, -ty))
##~ canvas.xview_moveto(0) # ~ canvas.xview_moveto(0)
##~ canvas.yview_moveto(0) # ~ canvas.yview_moveto(0)
# #
random = None random = None
if gameid == self.gameid: if gameid == self.gameid:
@ -435,7 +440,7 @@ class SelectGameDialogWithPreview(MfxDialog):
self.preview_game.restoreGameFromBookmark(self.bookmark) self.preview_game.restoreGameFromBookmark(self.bookmark)
else: else:
self.preview_game.newGame(random=random, autoplay=1) self.preview_game.newGame(random=random, autoplay=1)
##~ canvas.config(scrollregion=(-tx, -ty, gw, gh)) # ~ canvas.config(scrollregion=(-tx, -ty, gw, gh))
# #
self.preview_app.audio = self.app.audio self.preview_app.audio = self.app.audio
if self.app.opt.animations: if self.app.opt.animations:
@ -472,13 +477,19 @@ class SelectGameDialogWithPreview(MfxDialog):
GI.SL_SKILL: _('Skill only'), GI.SL_SKILL: _('Skill only'),
} }
skill_level = sl.get(gi.skill_level) skill_level = sl.get(gi.skill_level)
if gi.redeals == -2: redeals = _('variable') if gi.redeals == -2:
elif gi.redeals == -1: redeals = _('unlimited') redeals = _('variable')
else: redeals = str(gi.redeals) elif gi.redeals == -1:
redeals = _('unlimited')
else:
redeals = str(gi.redeals)
# stats # stats
won, lost, time, moves = self.app.stats.getFullStats(self.app.opt.player, gameid) won, lost, time, moves = self.app.stats.getFullStats(
if won+lost > 0: percent = "%.1f" % (100.0*won/(won+lost)) self.app.opt.player, gameid)
else: percent = "0.0" if won+lost > 0:
percent = "%.1f" % (100.0*won/(won+lost))
else:
percent = "0.0"
time = format_time(time) time = format_time(time)
moves = str(round(moves, 1)) moves = str(round(moves, 1))
for n, t in ( for n, t in (
@ -495,7 +506,7 @@ class SelectGameDialogWithPreview(MfxDialog):
('time', time), ('time', time),
('moves', moves), ('moves', moves),
('percent', percent), ('percent', percent),
): ):
title_label, text_label = self.info_labels[n] title_label, text_label = self.info_labels[n]
if t in ('', None): if t in ('', None):
title_label.hide() title_label.hide()
@ -507,12 +518,12 @@ class SelectGameDialogWithPreview(MfxDialog):
def done(self, button): def done(self, button):
button = button.get_data("user_data") button = button.get_data("user_data")
print 'done', button print('done', button)
if button == 0: # Ok or double click if button == 0: # Ok or double click
id = self.getSelected() id = self.getSelected()
if id: if id:
self.gameid = id self.gameid = id
##~ self.tree.n_expansions = 1 # save xyview in any case # ~ self.tree.n_expansions = 1 # save xyview in any case
if button == 1: # Rules if button == 1: # Rules
id = self.getSelected() id = self.getSelected()
if id: if id:
@ -526,5 +537,3 @@ class SelectGameDialogWithPreview(MfxDialog):
self.status = 0 self.status = 0
self.button = button self.button = button
self.quit() self.quit()

View file

@ -24,18 +24,18 @@
# imports # imports
## import os, string, sys, types # import os, string, sys, types
import gobject, gtk import gobject
import gtk
from gtk import gdk from gtk import gdk
# PySol imports # PySol imports
## from pysollib.mfxutil import destruct, Struct, KwStruct # from pysollib.mfxutil import destruct, Struct, KwStruct
from pysollib.mygettext import _, n_ from pysollib.mygettext import _
from pysollib.resource import CSI
from pysollib.mfxutil import kwdefault from pysollib.mfxutil import kwdefault
# Toolkit imports # Toolkit imports
## from tkutil import loadImage # from tkutil import loadImage
from tkwidget import MfxDialog from tkwidget import MfxDialog
from tkcanvas import MfxCanvas from tkcanvas import MfxCanvas
from tkutil import setTransient from tkutil import setTransient
@ -70,7 +70,7 @@ class SelectTileDialogWithPreview(MfxDialog):
hpaned.pack1(treeview.scrolledwindow, True, True) hpaned.pack1(treeview.scrolledwindow, True, True)
treeview.treeview.expand_all() treeview.treeview.expand_all()
# #
self.preview = MfxCanvas(top_box) # width=w2 self.preview = MfxCanvas(top_box) # width=w2
hpaned.pack2(self.preview, True, True) hpaned.pack2(self.preview, True, True)
self.preview.show() self.preview.show()
hpaned.set_position(240) hpaned.set_position(240)
@ -82,11 +82,9 @@ class SelectTileDialogWithPreview(MfxDialog):
self.show_all() self.show_all()
gtk.main() gtk.main()
def rowActivated(self, w, row, col): def rowActivated(self, w, row, col):
# FIXME # FIXME
print 'row-activated-event', row, col print('row-activated-event', row, col)
def getSelected(self): def getSelected(self):
index = self.treeview.getSelected() index = self.treeview.getSelected()
@ -94,12 +92,10 @@ class SelectTileDialogWithPreview(MfxDialog):
return None return None
return self.all_keys[index] return self.all_keys[index]
def showSelected(self, w): def showSelected(self, w):
key = self.getSelected() key = self.getSelected()
self.updatePreview(key) self.updatePreview(key)
def _createStore(self, manager, key): def _createStore(self, manager, key):
self.all_keys = [] self.all_keys = []
index = 0 index = 0
@ -138,20 +134,19 @@ class SelectTileDialogWithPreview(MfxDialog):
return model return model
def updatePreview(self, key): def updatePreview(self, key):
##print 'updatePreview:', key, type(key) # print 'updatePreview:', key, type(key)
if key is None: if key is None:
return return
if key == self.preview_key: if key == self.preview_key:
return return
canvas = self.preview canvas = self.preview
##canvas.deleteAllItems() # canvas.deleteAllItems()
if isinstance(key, str): if isinstance(key, str):
# solid color # solid color
canvas.setTile(self.app, 0, force=True) canvas.setTile(self.app, 0, force=True)
canvas.config(bg=key) canvas.config(bg=key)
##canvas.setTextColor(None) # canvas.setTextColor(None)
self.preview_key = key self.preview_key = key
self.table_color = key self.table_color = key
else: else:
@ -161,7 +156,6 @@ class SelectTileDialogWithPreview(MfxDialog):
else: else:
self.preview_key = -1 self.preview_key = -1
def initKw(self, kw): def initKw(self, kw):
kwdefault(kw, kwdefault(kw,
strings=(_('&OK'), _('&Solid color...'), _('&Cancel'),), strings=(_('&OK'), _('&Solid color...'), _('&Cancel'),),
@ -172,7 +166,6 @@ class SelectTileDialogWithPreview(MfxDialog):
) )
return MfxDialog.initKw(self, kw) return MfxDialog.initKw(self, kw)
def _colorselOkClicked(self, w, d): def _colorselOkClicked(self, w, d):
c = d.colorsel.get_current_color() c = d.colorsel.get_current_color()
c = '#%02x%02x%02x' % (c.red/256, c.green/256, c.blue/256) c = '#%02x%02x%02x' % (c.red/256, c.green/256, c.blue/256)
@ -180,13 +173,12 @@ class SelectTileDialogWithPreview(MfxDialog):
self.updatePreview(c) self.updatePreview(c)
self.treeview.unselectAll() self.treeview.unselectAll()
def createColorsel(self): def createColorsel(self):
win = gtk.ColorSelectionDialog(_('Select table color')) win = gtk.ColorSelectionDialog(_('Select table color'))
win.help_button.destroy() win.help_button.destroy()
win.set_position(gtk.WIN_POS_CENTER_ON_PARENT) win.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
if isinstance(self.preview_key, str): if isinstance(self.preview_key, str):
color = self.preview_key color = self.preview_key
else: else:
color = self.app.opt.colors['table'] color = self.app.opt.colors['table']
win.colorsel.set_current_color(gdk.color_parse(color)) win.colorsel.set_current_color(gdk.color_parse(color))
@ -196,7 +188,6 @@ class SelectTileDialogWithPreview(MfxDialog):
setTransient(win, self) setTransient(win, self)
win.show() win.show()
def done(self, button): def done(self, button):
b = button.get_data('user_data') b = button.get_data('user_data')
if b == 1: if b == 1:
@ -208,8 +199,5 @@ class SelectTileDialogWithPreview(MfxDialog):
self.key = self.preview_key self.key = self.preview_key
self.status = 0 self.status = 0
self.button = b self.button = b
##self.hide() # self.hide()
self.quit() self.quit()

View file

@ -22,7 +22,7 @@
# ---------------------------------------------------------------------------## # ---------------------------------------------------------------------------##
__all__ = [ __all__ = [
#'SolverDialog', # 'SolverDialog',
'create_solver_dialog', 'create_solver_dialog',
'connect_game_solver_dialog', 'connect_game_solver_dialog',
'destroy_solver_dialog', 'destroy_solver_dialog',
@ -30,15 +30,21 @@ __all__ = [
] ]
solver_dialog = None # solver_dialog = None
def create_solver_dialog(parent, game): def create_solver_dialog(parent, game):
pass pass
def connect_game_solver_dialog(game): def connect_game_solver_dialog(game):
pass pass
def destroy_solver_dialog(): def destroy_solver_dialog():
pass pass
solver_dialog = None # solver_dialog = None
def reset_solver_dialog(): def reset_solver_dialog():
pass pass

View file

@ -23,15 +23,12 @@
# imports # imports
import os, sys
import gtk import gtk
from gtk import glade
# PySol imports # PySol imports
from pysollib.mygettext import _, n_ from pysollib.mygettext import _
# Toolkit imports # Toolkit imports
from tkwidget import MfxDialog
# ************************************************************************ # ************************************************************************
@ -86,7 +83,7 @@ class SoundOptionsDialog:
samples_checkbuttons[n] = check samples_checkbuttons[n] = check
table.attach(check, table.attach(check,
col, col+1, row, row+1, col, col+1, row, row+1,
gtk.FILL|gtk.EXPAND, gtk.FILL, gtk.FILL | gtk.EXPAND, gtk.FILL,
4, 4) 4, 4)
if col == 1: if col == 1:
col = 0 col = 0
@ -103,6 +100,7 @@ class SoundOptionsDialog:
sc = self.widgets_tree.get_widget(n+'_scale') sc = self.widgets_tree.get_widget(n+'_scale')
sp.set_value(sc.get_value()) sp.set_value(sc.get_value())
dic[n+'_scale_value_changed'] = callback dic[n+'_scale_value_changed'] = callback
def callback(w, n=n): def callback(w, n=n):
sp = self.widgets_tree.get_widget(n+'_spinbutton') sp = self.widgets_tree.get_widget(n+'_spinbutton')
sc = self.widgets_tree.get_widget(n+'_scale') sc = self.widgets_tree.get_widget(n+'_scale')
@ -142,15 +140,13 @@ class SoundOptionsDialog:
dialog.destroy() dialog.destroy()
break break
def _translateLabels(self): def _translateLabels(self):
for n in ( for n in (
'label76', 'label76',
'label77', 'label77',
'label78', 'label78',
): ):
w = self.widgets_tree.get_widget(n) w = self.widgets_tree.get_widget(n)
w.set_text(_(w.get_text())) w.set_text(_(w.get_text()))
w = self.widgets_tree.get_widget('enable_checkbutton') w = self.widgets_tree.get_widget('enable_checkbutton')
w.set_label(_(w.get_label())) w.set_label(_(w.get_label()))

View file

@ -23,17 +23,20 @@
# imports # imports
import os, sys import sys
import gtk import gtk
# PySol imports # PySol imports
from pysollib.mygettext import _, n_ from pysollib.mygettext import _
if sys.version_info > (3,):
unicode = str
# ************************************************************************ # ************************************************************************
# * # *
# ************************************************************************ # ************************************************************************
class BasicStatusbar: class BasicStatusbar:
def __init__(self, top, row, column, columnspan): def __init__(self, top, row, column, columnspan):
self.top = top self.top = top
@ -44,7 +47,6 @@ class BasicStatusbar:
gtk.EXPAND | gtk.FILL, 0, gtk.EXPAND | gtk.FILL, 0,
0, 0) 0, 0)
def createLabel(self, name, fill=False, expand=False, def createLabel(self, name, fill=False, expand=False,
tooltip=None, grip=False, width=0): tooltip=None, grip=False, width=0):
label = gtk.Statusbar() label = gtk.Statusbar()
@ -57,12 +59,11 @@ class BasicStatusbar:
lb = label.get_children()[0].get_children()[0] lb = label.get_children()[0].get_children()[0]
lb.set_alignment(0.5, 0.0) lb.set_alignment(0.5, 0.0)
self._widgets.append(label) self._widgets.append(label)
##label.push(0, '') # label.push(0, '')
## if tooltip: # if tooltip:
## tt = gtk.Tooltips() # tt = gtk.Tooltips()
## tt.set_tip(label, tooltip, '') # tt.set_tip(label, tooltip, '')
## tt.enable() # tt.enable()
def updateText(self, **kw): def updateText(self, **kw):
for k, v in kw.items(): for k, v in kw.items():
@ -80,7 +81,6 @@ class BasicStatusbar:
label.pop(0) label.pop(0)
label.push(0, unicode(kw['text'])) label.push(0, unicode(kw['text']))
def show(self, show=True, resize=False): def show(self, show=True, resize=False):
if show: if show:
self.hbox.show() self.hbox.show()
@ -92,7 +92,6 @@ class BasicStatusbar:
self.show(False, resize) self.show(False, resize)
return True return True
def destroy(self): def destroy(self):
pass pass
@ -109,16 +108,13 @@ class PysolStatusbar(BasicStatusbar):
("moves", _('Moves/Total moves'), 10), ("moves", _('Moves/Total moves'), 10),
("gamenumber", _("Game number"), 26), ("gamenumber", _("Game number"), 26),
("stats", _("Games played: won/lost"), 12), ("stats", _("Games played: won/lost"), 12),
): ):
self.createLabel(n, width=w, tooltip=t) self.createLabel(n, width=w, tooltip=t)
# #
l = self.createLabel("info", fill=True, expand=True, grip=True) self.createLabel("info", fill=True, expand=True, grip=True)
class HelpStatusbar(BasicStatusbar): class HelpStatusbar(BasicStatusbar):
def __init__(self, top): def __init__(self, top):
BasicStatusbar.__init__(self, top, row=5, column=0, columnspan=3) BasicStatusbar.__init__(self, top, row=5, column=0, columnspan=3)
self.createLabel("info", fill=True, expand=True) self.createLabel("info", fill=True, expand=True)

View file

@ -10,7 +10,7 @@ use String::ShellQuote qw/ shell_quote /;
# my $cmd = shell_quote( 'flake8', '.' ); # my $cmd = shell_quote( 'flake8', '.' );
my $cmd = shell_quote( 'flake8', my $cmd = shell_quote( 'flake8',
grep { not($_ eq './pysollib/pysoltk.py') } glob('./pysollib/*.py ./pysollib/[cm]*/*.py ./pysollib/pysolgtk/[a-p]*.py') ); grep { not($_ eq './pysollib/pysoltk.py') } glob('./pysollib/*.py ./pysollib/[cm]*/*.py ./pysollib/pysolgtk/[a-s]*.py') );
# TEST # TEST
eq_or_diff( scalar(`$cmd`), '', "flake8 is happy with the code." ); eq_or_diff( scalar(`$cmd`), '', "flake8 is happy with the code." );