def testPolyglot_2(self): """Testing Polyglot book creation""" widgets = uistuff.GladeWidgets("PyChess.glade") gamewidget.setWidgets(widgets) perspective_manager.set_widgets(widgets) self.games_persp = Games() perspective_manager.add_perspective(self.games_persp) self.database_persp = Database() self.database_persp.create_toolbuttons() perspective_manager.add_perspective(self.database_persp) PGN = "polyglot.pgn" if os.path.isfile(PGN): os.remove(PGN) with open(PGN, "w") as f: f.write(pgn) self.database_persp.open_chessfile(PGN) BIN = "polyglot_book.bin" if os.path.isfile(BIN): os.remove(BIN) def coro(): def on_book_created(persp, event): self.assertTrue(os.path.isfile(BIN)) book.path = BIN book.bookfile = True testcase = testcases[0] board = LBoard(Board) board.applyFen(testcase[0]) openings = book.getOpenings(board) self.assertEqual(sorted(openings), sorted([(newMove(E2, E4), 2, 0), (newMove(A2, A4), 0, 0)])) testcase = testcases[-1] board = LBoard(Board) board.applyFen(testcase[0]) openings = book.getOpenings(board) self.assertEqual(openings, []) event.set() event = asyncio.Event() self.database_persp.connect("bookfile_created", on_book_created, event) self.database_persp.create_book(BIN) yield from event.wait() loop = asyncio.get_event_loop() loop.set_debug(enabled=True) loop.run_until_complete(coro())
def setUp(self): widgets = uistuff.GladeWidgets("PyChess.glade") gamewidget.setWidgets(widgets) perspective_manager.set_widgets(widgets) self.welcome_persp = Welcome() perspective_manager.add_perspective(self.welcome_persp) self.games_persp = Games() perspective_manager.add_perspective(self.games_persp)
def setUp(self): widgets = uistuff.GladeWidgets("PyChess.glade") gamewidget.setWidgets(widgets) perspective_manager.set_widgets(widgets) self.games_persp = Games() perspective_manager.add_perspective(self.games_persp) self.database_persp = Database() self.database_persp.create_toolbuttons() perspective_manager.add_perspective(self.database_persp)
def setUp(self): widgets = uistuff.GladeWidgets("PyChess.glade") gamewidget.setWidgets(widgets) perspective_manager.set_widgets(widgets) self.games_persp = Games() perspective_manager.add_perspective(self.games_persp) self.learn_persp = Learn() self.learn_persp.create_toolbuttons() perspective_manager.add_perspective(self.learn_persp) perspective_manager.current_perspective = self.learn_persp dd = DiscovererDialog(discoverer) self.dd_task = create_task(dd.start())
def setUp(self): EmittingTestCase.setUp(self) self.loop.set_debug(enabled=True) self.manager = self.connection.bm widgets = uistuff.GladeWidgets("PyChess.glade") gamewidget.setWidgets(widgets) perspective_manager.set_widgets(widgets) self.games_persp = Games() perspective_manager.add_perspective(self.games_persp) self.fics_persp = FICS() perspective_manager.add_perspective(self.fics_persp) self.fics_persp.connection = self.connection self.connection.bm.connect("obsGameCreated", self.fics_persp.onObserveGameCreated) self.connection.bm.connect("exGameCreated", self.fics_persp.onObserveGameCreated)
def setUp(self): if sys.platform == "win32": from asyncio.windows_events import ProactorEventLoop loop = ProactorEventLoop() asyncio.set_event_loop(loop) else: loop = asyncio.SelectorEventLoop() asyncio.set_event_loop(loop) self.loop = asyncio.get_event_loop() self.loop.set_debug(enabled=True) widgets = uistuff.GladeWidgets("PyChess.glade") gamewidget.setWidgets(widgets) perspective_manager.set_widgets(widgets) self.welcome_persp = Welcome() perspective_manager.add_perspective(self.welcome_persp) self.games_persp = Games() perspective_manager.add_perspective(self.games_persp)
def initGlade(self, log_viewer): #======================================================================= # Init glade and the 'GladeHandlers' #======================================================================= #Gtk.about_dialog_set_url_hook(self.website) widgets = uistuff.GladeWidgets("PyChess.glade") widgets.getGlade().connect_signals(GladeHandlers()) tasker = TaskerManager() tasker.packTaskers (NewGameTasker(), InternetGameTasker()) widgets["Background"].add(tasker) #------------------------------------------------------ Redirect widgets gamewidget.setWidgets(widgets) def on_sensitive_changed (widget, prop): name = widget.get_property('name') sensitive = widget.get_property('sensitive') #print "'%s' changed to '%s'" % (name, sensitive) widgets['pause1'].connect("notify::sensitive", on_sensitive_changed) widgets['resume1'].connect("notify::sensitive", on_sensitive_changed) #-------------------------- Main.py still needs a minimum of information ionest.handler.connect("gmwidg_created", GladeHandlers.__dict__["on_gmwidg_created"]) #---------------------- The only menuitems that need special initing for widget in ("hint_mode", "spy_mode"): widgets[widget].set_sensitive(False) uistuff.keep(widgets["hint_mode"], "hint_mode", first_value=True) uistuff.keep(widgets["spy_mode"], "spy_mode") uistuff.keep(widgets["show_sidepanels"], "show_sidepanels") uistuff.keep(widgets["auto_call_flag"], "autoCallFlag", first_value=True) #======================================================================= # Show main window and init d'n'd #======================================================================= widgets["window1"].set_title('%s - PyChess' % _('Welcome')) widgets["window1"].connect("delete-event", GladeHandlers.__dict__["on_quit1_activate"]) widgets["window1"].connect("key-press-event", GladeHandlers.__dict__["on_window_key_press"]) uistuff.keepWindowSize("main", widgets["window1"], (575,479), POSITION_GOLDEN) widgets["window1"].show() widgets["Background"].show_all() flags = Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP # To get drag in the whole window, we add it to the menu and the # background. If it can be gotten to work, the drag_dest_set_proxy # method is very interesting. #widgets["menubar1"].drag_dest_set(flags, dnd_list, Gdk.DragAction.COPY) #widgets["Background"].drag_dest_set(flags, dnd_list, Gdk.DragAction.COPY) # TODO: http://code.google.com/p/pychess/issues/detail?id=737 # The following two should really be set in the glade file #widgets["menubar1"].set_events(widgets["menubar1"].get_events() | Gdk.DRAG_STATUS) #widgets["Background"].set_events(widgets["Background"].get_events() | Gdk.DRAG_STATUS) #======================================================================= # Init 'minor' dialogs #======================================================================= #------------------------------------------------------------ Log dialog if log_viewer: from pychess.widgets import LogDialog LogDialog.add_destroy_notify(lambda: widgets["log_viewer1"].set_active(0)) else: widgets["log_viewer1"].set_property('sensitive', False) #---------------------------------------------------------- About dialog self.aboutdialog = widgets["aboutdialog1"] self.aboutdialog.set_program_name(NAME) link = self.aboutdialog.get_website() self.aboutdialog.set_copyright("Copyright © 2006-2015") self.aboutdialog.set_version(VERSION_NAME+" "+VERSION) if os.path.isdir(prefix.addDataPrefix(".git")): try: label = subprocess.check_output(["git", "describe"]) except subprocess.CalledProcessError: label = "" if label: comments = self.aboutdialog.get_comments() self.git_rev = label self.aboutdialog.set_comments("git %s\n%s" % (self.git_rev, comments)) with open(prefix.addDataPrefix("ARTISTS"), encoding="utf-8") as f: self.aboutdialog.set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS"), encoding="utf-8") as f: self.aboutdialog.set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS"), encoding="utf-8") as f: self.aboutdialog.set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS"), encoding="utf-8") as f: self.aboutdialog.set_translator_credits(f.read()) def on_about_response(dialog, response, *args): # system-defined GtkDialog responses are always negative, in which # case we want to hide it if response < 0: self.aboutdialog.hide() self.aboutdialog.emit_stop_by_name('response') def on_about_close(widget, event=None): self.aboutdialog.hide() return True self.aboutdialog.connect("response", on_about_response) self.aboutdialog.connect("close", on_about_close) self.aboutdialog.connect("delete-event", on_about_close) #---------------------------------------------------- RecentChooser def recent_item_activated (self): uri = self.get_current_uri() try: urlopen(unquote(uri)).close() newGameDialog.LoadFileExtension.run(self.get_current_uri()) except (IOError, OSError): #shomething wrong whit the uri recentManager.remove_item(uri) #self.menu_recent = Gtk.RecentChooserMenu(recentManager) self.menu_recent = Gtk.RecentChooserMenu() self.menu_recent.set_show_tips(True) self.menu_recent.set_sort_type(Gtk.RecentSortType.MRU) self.menu_recent.set_limit(10) self.menu_recent.set_name("menu_recent") self.file_filter = Gtk.RecentFilter() self.file_filter.add_mime_type("application/x-chess-pgn") self.menu_recent.set_filter(self.file_filter) self.menu_recent.connect("item-activated", recent_item_activated) widgets["load_recent_game1"].set_submenu(self.menu_recent) #----------------------------------------------------- Discoverer dialog def discovering_started (discoverer, binnames): GLib.idle_add(DiscovererDialog.show, discoverer, widgets["window1"], binnames) discoverer.connect("discovering_started", discovering_started) DiscovererDialog.init(discoverer) discoverer.discover() #------------------------------------------------- Tip of the day dialog if conf.get("show_tip_at_startup", False): tipOfTheDay.TipOfTheDay.show()
def initGlade(self, log_viewer): # Init glade and the 'GladeHandlers' self.widgets = widgets = uistuff.GladeWidgets("PyChess.glade") self.glade_handlers = GladeHandlers(self) widgets.getGlade().connect_signals(self.glade_handlers) self.window = widgets["main_window"] # new_game_tasker, internet_game_tasker = NewGameTasker( # ), InternetGameTasker() # tasker.packTaskers(new_game_tasker, internet_game_tasker) # widgets["Background"].add(tasker) # Redirect widgets gamewidget.setWidgets(widgets) # The only menuitems that need special initing for widget in ("hint_mode", "spy_mode"): widgets[widget].set_sensitive(False) uistuff.keep(widgets["hint_mode"], "hint_mode") uistuff.keep(widgets["spy_mode"], "spy_mode") uistuff.keep(widgets["show_sidepanels"], "show_sidepanels") uistuff.keep(widgets["auto_call_flag"], "autoCallFlag") # Show main window and init d'n'd widgets["main_window"].set_title('%s - PyChess' % _('Welcome')) widgets["main_window"].connect("delete-event", self.glade_handlers.on_quit1_activate) widgets["main_window"].connect("key-press-event", self.glade_handlers.on_window_key_press) uistuff.keepWindowSize("main", widgets["main_window"], None, uistuff.POSITION_GOLDEN) # To get drag in the whole window, we add it to the menu and the # background. If it can be gotten to work, the drag_dest_set_proxy # method is very interesting. widgets["menubar1"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) widgets["box2"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) widgets["perspectives_notebook"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) # Init 'minor' dialogs # Log dialog if log_viewer: from pychess.widgets import LogDialog LogDialog.add_destroy_notify( lambda: widgets["log_viewer1"].set_active(0)) else: widgets["log_viewer1"].set_property('sensitive', False) # About dialog self.aboutdialog = widgets["aboutdialog1"] self.aboutdialog.set_program_name(NAME) self.aboutdialog.set_copyright("Copyright © 2006-2018") self.aboutdialog.set_version(VERSION_NAME + " " + VERSION) if os.path.isdir(prefix.addDataPrefix(".git")): try: label = subprocess.check_output(["git", "describe"]) except subprocess.CalledProcessError: label = "" if label: comments = self.aboutdialog.get_comments() self.git_rev = label self.aboutdialog.set_comments("git %s\n%s" % (self.git_rev, comments)) with open(prefix.addDataPrefix("ARTISTS"), encoding="utf-8") as f: self.aboutdialog.set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS"), encoding="utf-8") as f: self.aboutdialog.set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS"), encoding="utf-8") as f: self.aboutdialog.set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS"), encoding="utf-8") as f: self.aboutdialog.set_translator_credits(f.read()) with open(prefix.addDataPrefix("LICENSE"), encoding="utf-8") as f: self.aboutdialog.set_license(f.read()) widgets["load_recent_game1"].set_submenu(recent_menu) if conf.get("autoLogin"): internet_game_tasker.connectClicked(None)
def initGlade(self, log_viewer): # Init glade and the 'GladeHandlers' widgets = uistuff.GladeWidgets("PyChess.glade") widgets.getGlade().connect_signals(GladeHandlers()) tasker = TaskerManager() new_game_tasker, internet_game_tasker = NewGameTasker( ), InternetGameTasker() tasker.packTaskers(new_game_tasker, internet_game_tasker) widgets["Background"].add(tasker) # Redirect widgets gamewidget.setWidgets(widgets) # Main.py still needs a minimum of information ionest.handler.connect("gmwidg_created", GladeHandlers.__dict__["on_gmwidg_created"]) # The only menuitems that need special initing for widget in ("hint_mode", "spy_mode"): widgets[widget].set_sensitive(False) uistuff.keep(widgets["hint_mode"], "hint_mode", first_value=True) uistuff.keep(widgets["spy_mode"], "spy_mode", first_value=True) uistuff.keep(widgets["show_sidepanels"], "show_sidepanels", first_value=True) uistuff.keep(widgets["auto_call_flag"], "autoCallFlag", first_value=True) # Show main window and init d'n'd widgets["window1"].set_title('%s - PyChess' % _('Welcome')) widgets["window1"].connect("delete-event", GladeHandlers.__dict__["on_quit1_activate"]) widgets["window1"].connect( "key-press-event", GladeHandlers.__dict__["on_window_key_press"]) uistuff.keepWindowSize("main", widgets["window1"], None, POSITION_GOLDEN) widgets["window1"].show() widgets["Background"].show_all() # To get drag in the whole window, we add it to the menu and the # background. If it can be gotten to work, the drag_dest_set_proxy # method is very interesting. widgets["menubar1"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) widgets["Background"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) # Init 'minor' dialogs # Log dialog if log_viewer: from pychess.widgets import LogDialog LogDialog.add_destroy_notify( lambda: widgets["log_viewer1"].set_active(0)) else: widgets["log_viewer1"].set_property('sensitive', False) # About dialog self.aboutdialog = widgets["aboutdialog1"] self.aboutdialog.set_program_name(NAME) self.aboutdialog.set_copyright("Copyright © 2006-2016") self.aboutdialog.set_version(VERSION_NAME + " " + VERSION) if os.path.isdir(prefix.addDataPrefix(".git")): try: label = subprocess.check_output(["git", "describe"]) except subprocess.CalledProcessError: label = "" if label: comments = self.aboutdialog.get_comments() self.git_rev = label self.aboutdialog.set_comments("git %s\n%s" % (self.git_rev, comments)) with open(prefix.addDataPrefix("ARTISTS"), encoding="utf-8") as f: self.aboutdialog.set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS"), encoding="utf-8") as f: self.aboutdialog.set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS"), encoding="utf-8") as f: self.aboutdialog.set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS"), encoding="utf-8") as f: self.aboutdialog.set_translator_credits(f.read()) with open(prefix.addDataPrefix("LICENSE"), encoding="utf-8") as f: self.aboutdialog.set_license(f.read()) # RecentChooser def recent_item_activated(self): uri = self.get_current_uri() try: urlopen(unquote(uri)).close() newGameDialog.LoadFileExtension.run(self.get_current_uri()) except (IOError, OSError): # shomething wrong whit the uri recentManager.remove_item(uri) self.menu_recent = Gtk.RecentChooserMenu() self.menu_recent.set_show_tips(True) self.menu_recent.set_sort_type(Gtk.RecentSortType.MRU) self.menu_recent.set_limit(10) self.menu_recent.set_name("menu_recent") self.file_filter = Gtk.RecentFilter() self.file_filter.add_mime_type("application/x-chess-pgn") self.menu_recent.set_filter(self.file_filter) self.menu_recent.connect("item-activated", recent_item_activated) widgets["load_recent_game1"].set_submenu(self.menu_recent) # Discoverer dialog def discovering_started(discoverer, binnames): GLib.idle_add(DiscovererDialog.show, discoverer, widgets["window1"], binnames) discoverer.connect("discovering_started", discovering_started) DiscovererDialog.init(discoverer) discoverer.discover() # Tip of the day dialog if conf.get("show_tip_at_startup", False): tipOfTheDay.TipOfTheDay.show() if conf.get("autoLogin", False): internet_game_tasker.connectClicked(None)
def initGlade(self): #======================================================================= # Init glade and the 'GladeHandlers' #======================================================================= gtk.about_dialog_set_url_hook(self.website) widgets = uistuff.GladeWidgets("PyChess.glade") widgets.getGlade().connect_signals(GladeHandlers.__dict__) tasker = TaskerManager() tasker.packTaskers (NewGameTasker(), InternetGameTasker()) widgets["Background"].add(tasker) #------------------------------------------------------ Redirect widgets gamewidget.setWidgets(widgets) def on_sensitive_changed (widget, prop): name = widget.get_property('name') sensitive = widget.get_property('sensitive') #print "'%s' changed to '%s'" % (name, sensitive) widgets['pause1'].connect("notify::sensitive", on_sensitive_changed) widgets['resume1'].connect("notify::sensitive", on_sensitive_changed) #-------------------------- Main.py still needs a minimum of information ionest.handler.connect("gmwidg_created", GladeHandlers.__dict__["on_gmwidg_created"]) #---------------------- The only menuitems that need special initing for widget in ("hint_mode", "spy_mode"): widgets[widget].set_sensitive(False) uistuff.keep(widgets["hint_mode"], "hint_mode") uistuff.keep(widgets["spy_mode"], "spy_mode") uistuff.keep(widgets["show_sidepanels"], "show_sidepanels") uistuff.keep(widgets["auto_call_flag"], "autoCallFlag") #======================================================================= # Show main window and init d'n'd #======================================================================= widgets["window1"].set_title('%s - PyChess' % _('Welcome')) widgets["window1"].connect("key-press-event", GladeHandlers.__dict__["on_window_key_press"]) uistuff.keepWindowSize("main", widgets["window1"], (575,479), POSITION_GOLDEN) widgets["window1"].show() widgets["Background"].show_all() flags = DEST_DEFAULT_MOTION | DEST_DEFAULT_HIGHLIGHT | DEST_DEFAULT_DROP # To get drag in the whole window, we add it to the menu and the # background. If it can be gotten to work, the drag_dest_set_proxy # method is very interesting. widgets["menubar1"].drag_dest_set(flags, dnd_list, gtk.gdk.ACTION_COPY) widgets["Background"].drag_dest_set(flags, dnd_list, gtk.gdk.ACTION_COPY) # TODO: http://code.google.com/p/pychess/issues/detail?id=737 # The following two should really be set in the glade file #widgets["menubar1"].set_events(widgets["menubar1"].get_events() | gtk.gdk.DRAG_STATUS) #widgets["Background"].set_events(widgets["Background"].get_events() | gtk.gdk.DRAG_STATUS) #======================================================================= # Init 'minor' dialogs #======================================================================= #------------------------------------------------------------ Log dialog LogDialog.add_destroy_notify(lambda: widgets["log_viewer1"].set_active(0)) #---------------------------------------------------------- About dialog aboutdialog = widgets["aboutdialog1"] clb = aboutdialog.get_child().get_children()[1].get_children()[2] aboutdialog.set_name(NAME) #aboutdialog.set_position(gtk.WIN_POS_CENTER) #aboutdialog.set_website_label(_("PyChess Homepage")) link = aboutdialog.get_website() aboutdialog.set_copyright("Copyright © 2006-2013") aboutdialog.set_version(VERSION_NAME+" "+VERSION) if os.path.isdir(prefix.addDataPrefix(".hg")): cmd = ["hg", "tip", "--cwd", prefix.getDataPrefix(), "--template", "{node|short} {date|isodate}"] process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) out = process.stdout.readline().split() if len(out)>=2: comments = aboutdialog.get_comments() self.hg_rev = out[0] self.hg_date = out[1] aboutdialog.set_comments("rev. %s\n%s\n%s" % (self.hg_rev, self.hg_date, comments)) with open(prefix.addDataPrefix("ARTISTS")) as f: aboutdialog.set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS")) as f: aboutdialog.set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS")) as f: aboutdialog.set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS")) as f: aboutdialog.set_translator_credits(f.read()) def callback(button, *args): aboutdialog.hide() return True clb.connect("activate", callback) clb.connect("clicked", callback) aboutdialog.connect("delete-event", callback) #---------------------------------------------------- RecentChooser def recent_item_activated (self): uri = self.get_current_uri() try: urllib.urlopen(uri).close() newGameDialog.LoadFileExtension.run(self.get_current_uri()) except (IOError, OSError): #shomething wrong whit the uri recentManager.remove_item(uri) self.menu_recent = gtk.RecentChooserMenu(recentManager) self.menu_recent.set_show_tips(True) self.menu_recent.set_sort_type(gtk.RECENT_SORT_MRU) self.menu_recent.set_limit(10) self.menu_recent.set_name("menu_recent") self.file_filter = gtk.RecentFilter() self.file_filter.add_mime_type("application/x-chess-pgn") self.menu_recent.set_filter(self.file_filter) self.menu_recent.connect("item-activated", recent_item_activated) widgets["load_recent_game1"].set_submenu(self.menu_recent) #----------------------------------------------------- Discoverer dialog def discovering_started (discoverer, binnames): gobject.idle_add(DiscovererDialog.show, discoverer, widgets["window1"]) discoverer.connect("discovering_started", discovering_started) DiscovererDialog.init(discoverer) discoverer.start() #------------------------------------------------- Tip of the day dialog if conf.get("show_tip_at_startup", False): tipOfTheDay.TipOfTheDay.show()
def test3(self): """ Accepting a seek """ loop = asyncio.get_event_loop() loop.set_debug(enabled=True) widgets = uistuff.GladeWidgets("PyChess.glade") gamewidget.setWidgets(widgets) perspective_manager.set_widgets(widgets) self.welcome_persp = Welcome() perspective_manager.add_perspective(self.welcome_persp) self.games_persp = Games() perspective_manager.add_perspective(self.games_persp) self.fics_persp = FICS() perspective_manager.add_perspective(self.fics_persp) self.fics_persp.create_toolbuttons() self.lounge = perspective_manager.get_perspective("fics") self.lounge.open_lounge(self.connection, self.connection, "freechess.org") lines = [ "<s> 11 w=WLTL ti=00 rt=2030 t=1 i=0 r=r tp=lightning c=? rr=0-9999 a=t f=f", "fics% ", BLOCK_START + "52" + BLOCK_SEPARATOR + "158" + BLOCK_SEPARATOR, "<sr> 11 16", "fics% ", "Creating: WLTL (2030) gbtami (1771) rated lightning 1 0", "{Game 85 (WLTL vs. gbtami) Creating rated lightning match.}", "", "<12> rnbqkbnr pppppppp -------- -------- -------- -------- PPPPPPPP RNBQKBNR W -1 1 1 1 1 0 85 WLTL gbtami -1 1 0 39 39 60000 60000 1 none (0:00.000) none 1 0 0\n\nGame 85: A disconnection will be considered a forfeit.", BLOCK_END, "fics% "] me = self.connection.players.get('gbtami') me.ratings[TYPE_LIGHTNING] = 1771 opponent = self.connection.players.get('WLTL') opponent.ratings[TYPE_LIGHTNING] = 2030 game = FICSGame(opponent, me, gameno=85, rated=True, game_type=GAME_TYPES['lightning'], private=False, minutes=1, inc=0, board=FICSBoard(60000, 60000, fen=FEN_START)) me.game = game opponent.game = game self.runAndAssertEquals("playGameCreated", lines, (game, )) gamemodel = self.games_persp.cur_gmwidg().gamemodel def on_game_started(game): p1 = gamemodel.players[1] p1.move_queue.put_nowait(Move(newMove(G8, F6))) gamemodel.connect("game_started", on_game_started) lines = [ "<12> rnbqkbnr pppppppp -------- -------- -------- -P------ P-PPPPPP RNBQKBNR B -1 1 1 1 1 0 85 WLTL gbtami 1 1 0 39 39 60000 60000 1 P/b2-b3 (0:00.000) b3 1 0 0", "fics% "] game = self.connection.games[game] def coro(): yield from self.connection.process_lines(lines) self.loop.run_until_complete(coro()) self.assertEqual(game.move_queue.qsize(), 0) lines = [ BLOCK_START + "59" + BLOCK_SEPARATOR + "1" + BLOCK_SEPARATOR, "<12> rnbqkb-r pppppppp -----n-- -------- -------- -P------ P-PPPPPP RNBQKBNR W -1 1 1 1 1 1 85 WLTL gbtami -1 1 0 39 39 60000 60000 2 N/g8-f6 (0:00.000) Nf6 1 1 0", BLOCK_END, "fics% ", "<12> rnbqkb-r pppppppp -----n-- -------- -------- -P----P- P-PPPP-P RNBQKBNR B -1 1 1 1 1 0 85 WLTL gbtami 1 1 0 39 39 59900 60000 2 P/g2-g3 (0:00.100) g3 1 1 285", "fics% "] def coro(): yield from self.connection.process_lines(lines) self.loop.run_until_complete(coro()) self.assertEqual(game.move_queue.qsize(), 0) self.assertEqual(gamemodel.ply, 3) print(gamemodel.boards[-1])
def initGlade(self): #======================================================================= # Init glade and the 'GladeHandlers' #======================================================================= gtk.glade.set_custom_handler(self.widgetHandler) gtk.about_dialog_set_url_hook(self.website) widgets = uistuff.GladeWidgets("PyChess.glade") widgets.getGlade().signal_autoconnect(GladeHandlers.__dict__) #------------------------------------------------------ Redirect widgets gamewidget.setWidgets(widgets) #-------------------------- Main.py still needs a minimum of information ionest.handler.connect("gmwidg_created", GladeHandlers.__dict__["on_gmwidg_created"]) #---------------------- The only menuitems that need special initing uistuff.keep(widgets["hint_mode"], "hint_mode") uistuff.keep(widgets["spy_mode"], "spy_mode") uistuff.keep(widgets["show_sidepanels"], "show_sidepanels") #======================================================================= # Show main window and init d'n'd #======================================================================= widgets["window1"].set_title('%s - PyChess' % _('Welcome')) widgets["window1"].connect("key-press-event", GladeHandlers.__dict__["on_window_key_press"]) uistuff.keepWindowSize("main", widgets["window1"], (575,479), POSITION_GOLDEN) widgets["window1"].show() widgets["Background"].show_all() flags = DEST_DEFAULT_MOTION | DEST_DEFAULT_HIGHLIGHT | DEST_DEFAULT_DROP widgets["menubar1"].drag_dest_set(flags, dnd_list, gtk.gdk.ACTION_COPY) widgets["Background"].drag_dest_set(flags, dnd_list, gtk.gdk.ACTION_COPY) #======================================================================= # Init 'minor' dialogs #======================================================================= #------------------------------------------------------------ Log dialog LogDialog.add_destroy_notify(lambda: widgets["log_viewer1"].set_active(0)) #---------------------------------------------------------- About dialog clb = widgets["aboutdialog1"].get_child().get_children()[1].get_children()[2] widgets["aboutdialog1"].set_name(NAME) #widgets["aboutdialog1"].set_position(gtk.WIN_POS_CENTER) #widgets["aboutdialog1"].set_website_label(_("PyChess Homepage")) link = widgets["aboutdialog1"].get_website() if os.path.isfile(prefix.addDataPrefix(".svn/entries")): f = open(prefix.addDataPrefix(".svn/entries")) line4 = [f.next() for i in xrange(4)][-1].strip() widgets["aboutdialog1"].set_version(VERSION_NAME+" r"+line4) else: widgets["aboutdialog1"].set_version(VERSION_NAME+" "+VERSION) with open(prefix.addDataPrefix("ARTISTS")) as f: widgets["aboutdialog1"].set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS")) as f: widgets["aboutdialog1"].set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS")) as f: widgets["aboutdialog1"].set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS")) as f: widgets["aboutdialog1"].set_translator_credits(f.read()) def callback(button, *args): widgets["aboutdialog1"].hide() return True clb.connect("activate", callback) clb.connect("clicked", callback) widgets["aboutdialog1"].connect("delete-event", callback) #----------------------------------------------------- Discoverer dialog def discovering_started (discoverer, binnames): gobject.idle_add(DiscovererDialog.show, discoverer, widgets["window1"]) discoverer.connect("discovering_started", discovering_started) DiscovererDialog.init(discoverer) discoverer.start() #------------------------------------------------- Tip of the day dialog if conf.get("show_tip_at_startup", False): tipOfTheDay.TipOfTheDay.show()
def initGlade(self, log_viewer): #======================================================================= # Init glade and the 'GladeHandlers' #======================================================================= #Gtk.about_dialog_set_url_hook(self.website) widgets = uistuff.GladeWidgets("PyChess.glade") widgets.getGlade().connect_signals(GladeHandlers()) tasker = TaskerManager() tasker.packTaskers(NewGameTasker(), InternetGameTasker()) widgets["Background"].add(tasker) #------------------------------------------------------ Redirect widgets gamewidget.setWidgets(widgets) def on_sensitive_changed(widget, prop): name = widget.get_property('name') sensitive = widget.get_property('sensitive') #print "'%s' changed to '%s'" % (name, sensitive) widgets['pause1'].connect("notify::sensitive", on_sensitive_changed) widgets['resume1'].connect("notify::sensitive", on_sensitive_changed) #-------------------------- Main.py still needs a minimum of information ionest.handler.connect("gmwidg_created", GladeHandlers.__dict__["on_gmwidg_created"]) #---------------------- The only menuitems that need special initing for widget in ("hint_mode", "spy_mode"): widgets[widget].set_sensitive(False) uistuff.keep(widgets["hint_mode"], "hint_mode", first_value=True) uistuff.keep(widgets["spy_mode"], "spy_mode") uistuff.keep(widgets["show_sidepanels"], "show_sidepanels") uistuff.keep(widgets["auto_call_flag"], "autoCallFlag", first_value=True) #======================================================================= # Show main window and init d'n'd #======================================================================= widgets["window1"].set_title('%s - PyChess' % _('Welcome')) widgets["window1"].connect("delete-event", GladeHandlers.__dict__["on_quit1_activate"]) widgets["window1"].connect( "key-press-event", GladeHandlers.__dict__["on_window_key_press"]) uistuff.keepWindowSize("main", widgets["window1"], (575, 479), POSITION_GOLDEN) widgets["window1"].show() widgets["Background"].show_all() flags = Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP # To get drag in the whole window, we add it to the menu and the # background. If it can be gotten to work, the drag_dest_set_proxy # method is very interesting. #widgets["menubar1"].drag_dest_set(flags, dnd_list, Gdk.DragAction.COPY) #widgets["Background"].drag_dest_set(flags, dnd_list, Gdk.DragAction.COPY) # TODO: http://code.google.com/p/pychess/issues/detail?id=737 # The following two should really be set in the glade file #widgets["menubar1"].set_events(widgets["menubar1"].get_events() | Gdk.DRAG_STATUS) #widgets["Background"].set_events(widgets["Background"].get_events() | Gdk.DRAG_STATUS) #======================================================================= # Init 'minor' dialogs #======================================================================= #------------------------------------------------------------ Log dialog if log_viewer: from pychess.widgets import LogDialog LogDialog.add_destroy_notify( lambda: widgets["log_viewer1"].set_active(0)) else: widgets["log_viewer1"].set_property('sensitive', False) #---------------------------------------------------------- About dialog self.aboutdialog = widgets["aboutdialog1"] self.aboutdialog.set_program_name(NAME) link = self.aboutdialog.get_website() self.aboutdialog.set_copyright("Copyright © 2006-2015") self.aboutdialog.set_version(VERSION_NAME + " " + VERSION) if os.path.isdir(prefix.addDataPrefix(".git")): label = subprocess.check_output(["git", "describe"]) if label: comments = self.aboutdialog.get_comments() self.git_rev = label self.aboutdialog.set_comments("git %s\n%s" % (self.git_rev, comments)) with open(prefix.addDataPrefix("ARTISTS"), encoding="utf-8") as f: self.aboutdialog.set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS"), encoding="utf-8") as f: self.aboutdialog.set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS"), encoding="utf-8") as f: self.aboutdialog.set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS"), encoding="utf-8") as f: self.aboutdialog.set_translator_credits(f.read()) def on_about_response(dialog, response, *args): # system-defined GtkDialog responses are always negative, in which # case we want to hide it if response < 0: self.aboutdialog.hide() self.aboutdialog.emit_stop_by_name('response') def on_about_close(widget, event=None): self.aboutdialog.hide() return True self.aboutdialog.connect("response", on_about_response) self.aboutdialog.connect("close", on_about_close) self.aboutdialog.connect("delete-event", on_about_close) #---------------------------------------------------- RecentChooser def recent_item_activated(self): uri = self.get_current_uri() try: urlopen(uri).close() newGameDialog.LoadFileExtension.run(self.get_current_uri()) except (IOError, OSError): #shomething wrong whit the uri recentManager.remove_item(uri) #self.menu_recent = Gtk.RecentChooserMenu(recentManager) self.menu_recent = Gtk.RecentChooserMenu() self.menu_recent.set_show_tips(True) self.menu_recent.set_sort_type(Gtk.RecentSortType.MRU) self.menu_recent.set_limit(10) self.menu_recent.set_name("menu_recent") self.file_filter = Gtk.RecentFilter() self.file_filter.add_mime_type("application/x-chess-pgn") self.menu_recent.set_filter(self.file_filter) self.menu_recent.connect("item-activated", recent_item_activated) widgets["load_recent_game1"].set_submenu(self.menu_recent) #----------------------------------------------------- Discoverer dialog def discovering_started(discoverer, binnames): GLib.idle_add(DiscovererDialog.show, discoverer, widgets["window1"], binnames) discoverer.connect("discovering_started", discovering_started) DiscovererDialog.init(discoverer) discoverer.discover() #------------------------------------------------- Tip of the day dialog if conf.get("show_tip_at_startup", False): tipOfTheDay.TipOfTheDay.show()
def initGlade(self, log_viewer): # Init glade and the 'GladeHandlers' self.widgets = widgets = uistuff.GladeWidgets("PyChess.glade") self.glade_handlers = GladeHandlers(self) widgets.getGlade().connect_signals(self.glade_handlers) self.window = widgets["main_window"] # new_game_tasker, internet_game_tasker = NewGameTasker( # ), InternetGameTasker() # tasker.packTaskers(new_game_tasker, internet_game_tasker) # widgets["Background"].add(tasker) # Redirect widgets gamewidget.setWidgets(widgets) # The only menuitems that need special initing for widget in ("hint_mode", "spy_mode"): widgets[widget].set_sensitive(False) uistuff.keep(widgets["hint_mode"], "hint_mode", first_value=True) uistuff.keep(widgets["spy_mode"], "spy_mode", first_value=True) uistuff.keep(widgets["show_sidepanels"], "show_sidepanels", first_value=True) uistuff.keep(widgets["auto_call_flag"], "autoCallFlag", first_value=True) # Show main window and init d'n'd widgets["main_window"].set_title('%s - PyChess' % _('Welcome')) widgets["main_window"].connect("delete-event", self.glade_handlers.on_quit1_activate) widgets["main_window"].connect("key-press-event", self.glade_handlers.on_window_key_press) uistuff.keepWindowSize("main", widgets["main_window"], None, uistuff.POSITION_GOLDEN) # To get drag in the whole window, we add it to the menu and the # background. If it can be gotten to work, the drag_dest_set_proxy # method is very interesting. widgets["menubar1"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) widgets["box2"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) widgets["perspectives_notebook"].drag_dest_set(Gtk.DestDefaults.ALL, DND_LIST, DRAG_ACTION) # Init 'minor' dialogs # Log dialog if log_viewer: from pychess.widgets import LogDialog LogDialog.add_destroy_notify( lambda: widgets["log_viewer1"].set_active(0)) else: widgets["log_viewer1"].set_property('sensitive', False) # About dialog self.aboutdialog = widgets["aboutdialog1"] self.aboutdialog.set_program_name(NAME) self.aboutdialog.set_copyright("Copyright © 2006-2017") self.aboutdialog.set_version(VERSION_NAME + " " + VERSION) if os.path.isdir(prefix.addDataPrefix(".git")): try: label = subprocess.check_output(["git", "describe"]) except subprocess.CalledProcessError: label = "" if label: comments = self.aboutdialog.get_comments() self.git_rev = label self.aboutdialog.set_comments("git %s\n%s" % (self.git_rev, comments)) with open(prefix.addDataPrefix("ARTISTS"), encoding="utf-8") as f: self.aboutdialog.set_artists(f.read().splitlines()) with open(prefix.addDataPrefix("AUTHORS"), encoding="utf-8") as f: self.aboutdialog.set_authors(f.read().splitlines()) with open(prefix.addDataPrefix("DOCUMENTERS"), encoding="utf-8") as f: self.aboutdialog.set_documenters(f.read().splitlines()) with open(prefix.addDataPrefix("TRANSLATORS"), encoding="utf-8") as f: self.aboutdialog.set_translator_credits(f.read()) with open(prefix.addDataPrefix("LICENSE"), encoding="utf-8") as f: self.aboutdialog.set_license(f.read()) widgets["load_recent_game1"].set_submenu(recent_menu) if conf.get("autoLogin", False): internet_game_tasker.connectClicked(None)