def anal_combo_set_value(combobox, value, show_arrow_check, ana_check, analyzer_type): engine = discoverer.getEngineByMd5(value) if engine is None: combobox.set_active(0) # This return saves us from the None-engine being used # in later code -Jonas Thiem return else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index) from pychess.widgets.gamewidget import widgets perspective = perspective_manager.get_perspective("games") for gmwidg in perspective.gamewidgets: spectators = gmwidg.gamemodel.spectators md5 = engine.get('md5') if analyzer_type in spectators and \ spectators[analyzer_type].md5 != md5: gmwidg.gamemodel.remove_analyzer(analyzer_type) asyncio.async(gmwidg.gamemodel.start_analyzer(analyzer_type)) if not widgets[show_arrow_check].get_active(): gmwidg.gamemodel.pause_analyzer(analyzer_type)
def anal_combo_set_value(combobox, value, show_arrow_check, ana_check, analyzer_type): engine = discoverer.getEngineByMd5(value) if engine is None: combobox.set_active(0) # This return saves us from the None-engine being used # in later code -Jonas Thiem return else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index) from pychess.widgets.gamewidget import widgets perspective = perspective_manager.get_perspective("games") for gmwidg in perspective.gamewidgets: spectators = gmwidg.gamemodel.spectators md5 = engine.get('md5') if analyzer_type in spectators and \ spectators[analyzer_type].md5 != md5: gmwidg.gamemodel.remove_analyzer(analyzer_type) asyncio. async (gmwidg.gamemodel.start_analyzer(analyzer_type)) if not widgets[show_arrow_check].get_active(): gmwidg.gamemodel.pause_analyzer(analyzer_type)
def start(discoverer): atexit.register(SubProcess.finishAllSubprocesses) pgnfile, gameno = queryGameno(sys.argv[1]) analyzer = queryAnalyzer(discoverer.getAnalyzers()) secs = queryTime() name1, name2 = pgnfile.get_player_names(gameno) print("%s will now analyze the game between %s and %s with %d seconds per move." % \ (discoverer.getName(analyzer), name1, name2, secs)) print() global game, values values = {} game = GameModel() game.setPlayers([DummyPlayer(), DummyPlayer()]) analyzer = discoverer.initAnalyzerEngine(analyzer, ANALYZING, game.variant) analyzer.connect('analyze', onAnalyze) game.spectators[HINT] = analyzer game.loadAndStart(sys.argv[1], pgn, gameno, -1) def cb(): if game.ply == game.lowply: on_finish() return False check_blund() return True glib.timeout_add_seconds(secs, cb)
def start(discoverer): atexit.register(SubProcess.finishAllSubprocesses) pgnfile, gameno = queryGameno(sys.argv[1]) analyzer = queryAnalyzer(discoverer.getAnalyzers()) secs = queryTime() name1, name2 = pgnfile.get_player_names(gameno) print("%s will now analyze the game between %s and %s with %d seconds per move." % \ (discoverer.getName(analyzer), name1, name2, secs)) print() global game, values values = {} game = GameModel() game.setPlayers([DummyPlayer(), DummyPlayer()]) analyzer = discoverer.initAnalyzerEngine(analyzer, ANALYZING, game.variant) analyzer.connect('analyze', onAnalyze) game.spectators[HINT] = analyzer game.loadAndStart(sys.argv[1], pgn, gameno, -1) def cb(): if game.ply == game.lowply: on_finish() return False check_blund() return True GLib.timeout_add_seconds(secs, cb)
def set_value (combobox, value, show_arrow_check, ana_check, analyzer_type): engine = discoverer.getEngineByMd5(value) if engine is None: combobox.set_active(0) # This return saves us from the None-engine being used # in later code -Jonas Thiem return else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index) replace_analyzers = False if widgets[show_arrow_check].get_active() is True and \ widgets[ana_check].get_active() is True: replace_analyzers = True from pychess.Main import gameDic for gmwidg in gameDic.keys(): spectators = gmwidg.gamemodel.spectators md5 = engine.get('md5') if analyzer_type in spectators and \ spectators[analyzer_type].md5 != md5: gmwidg.gamemodel.remove_analyzer(analyzer_type) if replace_analyzers: gmwidg.gamemodel.start_analyzer(analyzer_type)
def set_value (combobox, value): engine = discoverer.getEngineByMd5(value) if not engine: combobox.set_active(0) else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index)
def set_value(combobox, value): engine = discoverer.getEngineByMd5(value) if not engine: combobox.set_active(0) else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index)
def anal_combo_get_value(combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] return engine.get("md5")
def anal_combo_get_value(combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] return engine.get("md5")
def workfunc(worker, gamemodel, player0tup, player1tup, loaddata=None): log.debug("ionest.workfunc: %s\n %s\n %s\n" % (gamemodel, player0tup, player1tup)) gmwidg = gamewidget.GameWidget(gamemodel) player0 = {} player1 = {} for player, playertup in ((player0, player0tup), (player1, player1tup)): player["name"] = playertup[3] player["rating"] = (len(playertup) > 4 and playertup[4]) and "(" + playertup[4] + ")" or None player["tabtext"] = player["rating"] and player["name"] + " " + player["rating"] \ or player["name"] text = [player0["tabtext"], _("vs"), player1["tabtext"]] gmwidg.setTabText(" ".join(text)) # Initing analyze engines # We have to do this before publishing gmwidg to make sure that # gamemodel.*EngineSupportsVariant is set right before on_gmwidg_created() is called anaengines = list(discoverer.getAnalyzers()) specs = {} engine = discoverer.getEngineByMd5(conf.get("ana_combobox", 0)) if engine is None: engine = anaengines[0] if gamemodel.variant.board.variant in discoverer.getEngineVariants(engine) or \ gamemodel.variant.standard_rules: if conf.get("analyzer_check", True): hintanalyzer = discoverer.initAnalyzerEngine( engine, ANALYZING, gamemodel.variant) specs[HINT] = hintanalyzer log.debug("Hint Analyzer: %s\n" % repr(hintanalyzer)) gamemodel.hintEngineSupportsVariant = True else: gamemodel.hintEngineSupportsVariant = False engine = discoverer.getEngineByMd5(conf.get("inv_ana_combobox", 0)) if engine is None: engine = anaengines[0] if gamemodel.variant.board.variant in discoverer.getEngineVariants(engine) or \ gamemodel.variant.standard_rules: if conf.get("inv_analyzer_check", True): spyanalyzer = discoverer.initAnalyzerEngine( engine, INVERSE_ANALYZING, gamemodel.variant) specs[SPY] = spyanalyzer log.debug("Spy Analyzer: %s\n" % repr(spyanalyzer)) gamemodel.spyEngineSupportsVariant = True else: gamemodel.spyEngineSupportsVariant = False worker.publish((gmwidg, gamemodel)) # For updating names players = [] def updateTitle(color=None): name0_name1 = gmwidg.getTabText().split(" %s " % _("vs")) if not name0_name1: name0, name1 = _("White"), _("Black") else: name0, name1 = name0_name1 if color is None: name0 = repr(players[WHITE]) name0 += player0["rating"] and " " + player0["rating"] or "" name1 = repr(players[BLACK]) name1 += player1["rating"] and " " + player1["rating"] or "" elif color == WHITE: name0 = repr(players[WHITE]) name0 += player0["rating"] and " " + player0["rating"] or "" elif color == BLACK: name1 = repr(players[BLACK]) name1 += player1["rating"] and " " + player1["rating"] or "" gmwidg.setTabText("%s %s %s" % (name0, _("vs"), name1)) # Initing players for i, playertup in enumerate((player0tup, player1tup)): type, func, args = (playertup[0:3]) if type != LOCAL: players.append(func(*args)) if type == ARTIFICIAL: def readyformoves(player, color): updateTitle(color) players[i].connect("readyForMoves", readyformoves, i) else: # Until PyChess has a proper profiles system, as discussed on the # issue tracker, we need to give human players special treatment ichandle = None if len(args) > 2: ichandle = args[2] args = [v for v in args[0:2]] player = func(gmwidg, ichandle=ichandle, *args) players.append(player) if i == 0 or (i == 1 and player0tup[0] != LOCAL): key = "firstName" alt = conf.username else: key = "secondName" alt = _("Guest") player.setName(conf.get(key, alt)) def callback(none, color, key, alt): players[color].setName(conf.get(key, alt)) updateTitle(color) conf.notify_add(key, callback, i, key, alt) worker.publish(updateTitle) # Setting game gamemodel.setPlayers(players) gamemodel.setSpectactors(specs) # Starting if loaddata: try: uri, loader, gameno, position = loaddata gamemodel.loadAndStart(uri, loader, gameno, position) except LoadingError, e: d = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK) d.set_markup("<big><b>%s</b></big>" % e.args[0]) d.format_secondary_text(e.args[1] + "\n\n" + _( "Correct the move, or start playing with what could be read")) d.connect("response", lambda d, a: d.hide()) worker.publish(d.show)
def __init__ (self, widgets): # Put engines in trees and combos engines = discoverer.getEngines() allstore = gtk.ListStore(gtk.gdk.Pixbuf, str) for engine in engines.values(): c = discoverer.getCountry(engine) if c: flag = addDataPrefix("flags/%s.png" % c) if not c or not os.path.isfile(flag): flag = addDataPrefix("flags/unknown.png") flag_icon = gtk.gdk.pixbuf_new_from_file(flag) allstore.append((flag_icon, discoverer.getName(engine))) tv = widgets["engines_treeview"] tv.set_model(allstore) tv.append_column(gtk.TreeViewColumn( _("Flag"), gtk.CellRendererPixbuf(), pixbuf=0)) tv.append_column(gtk.TreeViewColumn( _("Name"), gtk.CellRendererText(), text=1)) analyzers = list(discoverer.getAnalyzers()) ana_data = [] invana_data = [] for engine in analyzers: name = discoverer.getName(engine) c = discoverer.getCountry(engine) if c: flag = addDataPrefix("flags/%s.png" % c) if not c or not os.path.isfile(flag): flag = addDataPrefix("flags/unknown.png") flag_icon = gtk.gdk.pixbuf_new_from_file(flag) ana_data.append((flag_icon, name)) invana_data.append((flag_icon, name)) uistuff.createCombo(widgets["ana_combobox"], ana_data) uistuff.createCombo(widgets["inv_ana_combobox"], invana_data) # Save, load and make analyze combos active conf.set("ana_combobox", conf.get("ana_combobox", 0)) conf.set("inv_ana_combobox", conf.get("inv_ana_combobox", 0)) def on_analyzer_check_toggled (check): widgets["analyzers_vbox"].set_sensitive(check.get_active()) widgets["hint_mode"].set_active(check.get_active()) from pychess.Main import gameDic if gameDic: widgets["hint_mode"].set_sensitive(check.get_active()) widgets["analyzer_check"].connect("toggled", on_analyzer_check_toggled) uistuff.keep(widgets["analyzer_check"], "analyzer_check") def on_invanalyzer_check_toggled (check): widgets["inv_analyzers_vbox"].set_sensitive(check.get_active()) widgets["spy_mode"].set_active(check.get_active()) from pychess.Main import gameDic if gameDic: widgets["spy_mode"].set_sensitive(check.get_active()) widgets["inv_analyzer_check"].connect("toggled", on_invanalyzer_check_toggled) uistuff.keep(widgets["inv_analyzer_check"], "inv_analyzer_check") # Put options in trees in add/edit dialog #======================================================================= # tv = widgets["optionview"] # tv.append_column(gtk.TreeViewColumn( # "Option", gtk.CellRendererText(), text=0)) # tv.append_column(gtk.TreeViewColumn( # "Value", gtk.CellRendererText(), text=1)) # # def edit (button): # # iter = widgets["engines_treeview"].get_selection().get_selected()[1] # if iter: row = allstore.get_path(iter)[0] # else: return # # engine = discoverer.getEngineN(row) # optionstags = engine.getElementsByTagName("options") # if not optionstags: # widgets["engine_options_expander"].hide() # else: # widgets["engine_options_expander"].show() # widgets["engine_options_expander"].set_expanded(False) # # optionsstore = gtk.ListStore(str, str) # tv = widgets["optionview"] # tv.set_model(optionsstore) # # for option in optionstags[0].childNodes: # if option.nodeType != option.ELEMENT_NODE: continue # optionsstore.append( [option.getAttribute("name"), # option.getAttribute("default")] ) # # widgets["engine_path_chooser"].set_title(_("Locate Engine")) # widgets["engine_path_chooser"].set_uri("file:///usr/bin/gnuchess") # # dialog = widgets["addconfig_engine"] # answer = dialog.run() # dialog.hide() # widgets["edit_engine_button"].connect("clicked", edit) #======================================================================= #widgets["remove_engine_button"].connect("clicked", remove) #widgets["add_engine_button"].connect("clicked", add) # Give widgets to kepper for combo in ("ana_combobox", "inv_ana_combobox"): def get_value (combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] if engine.find('md5') != None: return engine.find('md5').text.strip() def set_value (combobox, value): engine = discoverer.getEngineByMd5(value) if not engine: combobox.set_active(0) else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index) uistuff.keep (widgets[combo], combo, get_value, set_value) # Init info box uistuff.makeYellow(widgets["analyzer_pref_infobox"]) widgets["analyzer_pref_infobox"].hide() def updatePrefInfobox (widget, *args): widgets["analyzer_pref_infobox"].show() widgets["ana_combobox"].connect("changed", updatePrefInfobox) widgets["analyzer_check"].connect("toggled", updatePrefInfobox) widgets["inv_ana_combobox"].connect("changed", updatePrefInfobox) widgets["inv_analyzer_check"].connect("toggled", updatePrefInfobox) widgets["preferences"].connect("hide", lambda *a: widgets["analyzer_pref_infobox"].hide())
def get_value (combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] if engine.find('md5') != None: return engine.find('md5').text.strip()
def __init__(self, widgets): # Put engines in trees and combos engines = discoverer.getEngines() allstore = gtk.ListStore(gtk.gdk.Pixbuf, str) for engine in engines.values(): c = discoverer.getCountry(engine) if c: flag = addDataPrefix("flags/%s.png" % c) if not c or not os.path.isfile(flag): flag = addDataPrefix("flags/unknown.png") flag_icon = gtk.gdk.pixbuf_new_from_file(flag) allstore.append((flag_icon, discoverer.getName(engine))) tv = widgets["engines_treeview"] tv.set_model(allstore) tv.append_column( gtk.TreeViewColumn(_("Flag"), gtk.CellRendererPixbuf(), pixbuf=0)) tv.append_column( gtk.TreeViewColumn(_("Name"), gtk.CellRendererText(), text=1)) analyzers = list(discoverer.getAnalyzers()) ana_data = [] invana_data = [] for engine in analyzers: name = discoverer.getName(engine) c = discoverer.getCountry(engine) if c: flag = addDataPrefix("flags/%s.png" % c) if not c or not os.path.isfile(flag): flag = addDataPrefix("flags/unknown.png") flag_icon = gtk.gdk.pixbuf_new_from_file(flag) ana_data.append((flag_icon, name)) invana_data.append((flag_icon, name)) uistuff.createCombo(widgets["ana_combobox"], ana_data) uistuff.createCombo(widgets["inv_ana_combobox"], invana_data) # Save, load and make analyze combos active conf.set("ana_combobox", conf.get("ana_combobox", 0)) conf.set("inv_ana_combobox", conf.get("inv_ana_combobox", 0)) def on_analyzer_check_toggled(check): widgets["analyzers_vbox"].set_sensitive(check.get_active()) widgets["hint_mode"].set_active(check.get_active()) from pychess.Main import gameDic if gameDic: widgets["hint_mode"].set_sensitive(check.get_active()) widgets["analyzer_check"].connect("toggled", on_analyzer_check_toggled) uistuff.keep(widgets["analyzer_check"], "analyzer_check") def on_invanalyzer_check_toggled(check): widgets["inv_analyzers_vbox"].set_sensitive(check.get_active()) widgets["spy_mode"].set_active(check.get_active()) from pychess.Main import gameDic if gameDic: widgets["spy_mode"].set_sensitive(check.get_active()) widgets["inv_analyzer_check"].connect("toggled", on_invanalyzer_check_toggled) uistuff.keep(widgets["inv_analyzer_check"], "inv_analyzer_check") # Put options in trees in add/edit dialog #======================================================================= # tv = widgets["optionview"] # tv.append_column(gtk.TreeViewColumn( # "Option", gtk.CellRendererText(), text=0)) # tv.append_column(gtk.TreeViewColumn( # "Value", gtk.CellRendererText(), text=1)) # # def edit (button): # # iter = widgets["engines_treeview"].get_selection().get_selected()[1] # if iter: row = allstore.get_path(iter)[0] # else: return # # engine = discoverer.getEngineN(row) # optionstags = engine.getElementsByTagName("options") # if not optionstags: # widgets["engine_options_expander"].hide() # else: # widgets["engine_options_expander"].show() # widgets["engine_options_expander"].set_expanded(False) # # optionsstore = gtk.ListStore(str, str) # tv = widgets["optionview"] # tv.set_model(optionsstore) # # for option in optionstags[0].childNodes: # if option.nodeType != option.ELEMENT_NODE: continue # optionsstore.append( [option.getAttribute("name"), # option.getAttribute("default")] ) # # widgets["engine_path_chooser"].set_title(_("Locate Engine")) # widgets["engine_path_chooser"].set_uri("file:///usr/bin/gnuchess") # # dialog = widgets["addconfig_engine"] # answer = dialog.run() # dialog.hide() # widgets["edit_engine_button"].connect("clicked", edit) #======================================================================= #widgets["remove_engine_button"].connect("clicked", remove) #widgets["add_engine_button"].connect("clicked", add) # Give widgets to kepper for combo in ("ana_combobox", "inv_ana_combobox"): def get_value(combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] if engine.find('md5') != None: return engine.find('md5').text.strip() def set_value(combobox, value): engine = discoverer.getEngineByMd5(value) if not engine: combobox.set_active(0) else: try: index = list(discoverer.getAnalyzers()).index(engine) except ValueError: index = 0 combobox.set_active(index) uistuff.keep(widgets[combo], combo, get_value, set_value) # Init info box uistuff.makeYellow(widgets["analyzer_pref_infobox"]) widgets["analyzer_pref_infobox"].hide() def updatePrefInfobox(widget, *args): widgets["analyzer_pref_infobox"].show() widgets["ana_combobox"].connect("changed", updatePrefInfobox) widgets["analyzer_check"].connect("toggled", updatePrefInfobox) widgets["inv_ana_combobox"].connect("changed", updatePrefInfobox) widgets["inv_analyzer_check"].connect("toggled", updatePrefInfobox) widgets["preferences"].connect( "hide", lambda *a: widgets["analyzer_pref_infobox"].hide())
def get_value(combobox): engine = list(discoverer.getAnalyzers())[combobox.get_active()] if engine.find('md5') != None: return engine.find('md5').text.strip()
def workfunc (worker, gamemodel, player0tup, player1tup, loaddata=None): log.debug("ionest.workfunc: %s\n %s\n %s\n" % (gamemodel, player0tup, player1tup)) gmwidg = gamewidget.GameWidget(gamemodel) player0 = {} player1 = {} for player, playertup in ((player0, player0tup), (player1, player1tup)): player["name"] = playertup[3] player["rating"] = (len(playertup) > 4 and playertup[4]) and "("+playertup[4]+")" or None player["tabtext"] = player["rating"] and player["name"] + " " + player["rating"] \ or player["name"] text = [ player0["tabtext"], _("vs"), player1["tabtext"] ] gmwidg.setTabText(" ".join(text)) # Initing analyze engines # We have to do this before publishing gmwidg to make sure that # gamemodel.*EngineSupportsVariant is set right before on_gmwidg_created() is called anaengines = list(discoverer.getAnalyzers()) specs = {} engine = discoverer.getEngineByMd5(conf.get("ana_combobox", 0)) if engine is None: engine = anaengines[0] if gamemodel.variant.board.variant in discoverer.getEngineVariants(engine) or \ gamemodel.variant.standard_rules: if conf.get("analyzer_check", True): hintanalyzer = discoverer.initAnalyzerEngine(engine, ANALYZING, gamemodel.variant) specs[HINT] = hintanalyzer log.debug("Hint Analyzer: %s\n" % repr(hintanalyzer)) gamemodel.hintEngineSupportsVariant = True else: gamemodel.hintEngineSupportsVariant = False engine = discoverer.getEngineByMd5(conf.get("inv_ana_combobox", 0)) if engine is None: engine = anaengines[0] if gamemodel.variant.board.variant in discoverer.getEngineVariants(engine) or \ gamemodel.variant.standard_rules: if conf.get("inv_analyzer_check", True): spyanalyzer = discoverer.initAnalyzerEngine(engine, INVERSE_ANALYZING, gamemodel.variant) specs[SPY] = spyanalyzer log.debug("Spy Analyzer: %s\n" % repr(spyanalyzer)) gamemodel.spyEngineSupportsVariant = True else: gamemodel.spyEngineSupportsVariant = False worker.publish((gmwidg,gamemodel)) # For updating names players = [] def updateTitle (color=None): name0_name1 = gmwidg.getTabText().split(" %s "%_("vs")) if not name0_name1: name0, name1 = _("White"), _("Black") else: name0, name1 = name0_name1 if color is None: name0 = repr(players[WHITE]) name0 += player0["rating"] and " "+player0["rating"] or "" name1 = repr(players[BLACK]) name1 += player1["rating"] and " "+player1["rating"] or "" elif color == WHITE: name0 = repr(players[WHITE]) name0 += player0["rating"] and " "+player0["rating"] or "" elif color == BLACK: name1 = repr(players[BLACK]) name1 += player1["rating"] and " "+player1["rating"] or "" gmwidg.setTabText("%s %s %s" % (name0, _("vs"), name1)) # Initing players for i, playertup in enumerate((player0tup, player1tup)): type, func, args = (playertup[0:3]) if type != LOCAL: players.append(func(*args)) if type == ARTIFICIAL: def readyformoves (player, color): updateTitle(color) players[i].connect("readyForMoves", readyformoves, i) else: # Until PyChess has a proper profiles system, as discussed on the # issue tracker, we need to give human players special treatment ichandle = None if len(args) > 2: ichandle = args[2] args = [ v for v in args[0:2] ] player = func(gmwidg, ichandle=ichandle, *args) players.append(player) if i == 0 or (i == 1 and player0tup[0] != LOCAL): key = "firstName" alt = conf.username else: key = "secondName" alt = _("Guest") player.setName(conf.get(key, alt)) def callback (none, color, key, alt): players[color].setName(conf.get(key, alt)) updateTitle(color) conf.notify_add(key, callback, i, key, alt) worker.publish(updateTitle) # Setting game gamemodel.setPlayers(players) gamemodel.setSpectactors(specs) # Starting if loaddata: try: uri, loader, gameno, position = loaddata gamemodel.loadAndStart (uri, loader, gameno, position) except LoadingError, e: d = gtk.MessageDialog (type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK) d.set_markup ("<big><b>%s</b></big>" % e.args[0]) d.format_secondary_text (e.args[1] + "\n\n" + _("Correct the move, or start playing with what could be read")) d.connect("response", lambda d,a: d.hide()) worker.publish(d.show)