Example #1
0
    def __init__(self, app):
        self.app = app
        self.filename = ""

        widgets = gtk.glade.XML(utils.locate_data_dir() + "chessmonk.glade")
        widgets.signal_autoconnect(self)

        self.window = widgets.get_widget("mainwindow")
        self.boardbox = widgets.get_widget("alignment_board_display")
        self.hpane = widgets.get_widget("hpane")
        self.vpane = widgets.get_widget("vpane")

        self.hpane.set_position(380)
        self.vpane.set_position(150)

        self.window.set_size_request(800, 600)

        try:
            icon = gtk.icon_theme_get_default().load_icon("chessmonk", 48, 0)
            self.window.set_icon(icon)
        except:
            print "Warning:", sys.exc_info()[1]

        # Move control buttons
        self.button_move_first = widgets.get_widget("button_move_first")
        self.button_move_back = widgets.get_widget("button_move_back")
        self.button_move_takeback = widgets.get_widget("button_move_takeback")
        self.button_move_forward = widgets.get_widget("button_move_forward")
        self.button_move_last = widgets.get_widget("button_move_last")

        from gtkboardview.BoardView import *
        self.boardview = BoardView()
        #self.board = self.boardview.board
        self.boardbox.add(self.boardview)

        self.boardview.board.connect('position-changed-event',
                                     self.position_changed_event)

        self.notationview = NotationView()
        self.notationview.board = self.boardview.board
        self.boardview.board.connect('position-changed-event',
                                     self.notationview.position_changed_event)
        widgets.get_widget('sw_notation').add(self.notationview)

        self.gamelist = GameList(self)

        #self.notebook = gtk.Notebook()
        #widgets.get_widget("notebook_box").add(self.notebook)
        #self.notebook.append_page(self.gamelist)
        widgets.get_widget("sw_gamelist").add(self.gamelist)

        self.window.show_all()
        self.button_move_takeback.hide()  # TODO: reconsider
Example #2
0
	def __init__(self, app):
		Gtk.ApplicationWindow.__init__(self,
		                               application=app,
		                               title=app.fullname)
		self.set_wmclass (app.fullname, app.fullname)
		self.set_default_icon_name(app.simplename)
		
		self.app = app
		
		self.set_size_request(887, 640)
		self.set_position(Gtk.WindowPosition.CENTER)
		
		
		self.headerbar = HeaderBar ()
		
		allgames = self.app.gamesdb.get_games ()
		self.gamelist = GameList(allgames)
		
		mostusedgames = self.app.gamesdb.get_most_used_games ()[:20]
		self.mostusedgamelist = GameList(mostusedgames)
		
		self.gameview = GameView()
		
		self.set_titlebar (self.headerbar)
		
		self.stack = Gtk.Stack ()
		self.stack.set_transition_type (Gtk.StackTransitionType.CROSSFADE)
		self.stack.show ()
		
		self.stack.add_titled (self.mostusedgamelist, 'frequent', 'Frequently used')
		self.stack.add_titled (self.gamelist, 'all', 'All')
		self.stack.add (self.gameview)
		
		self.add(self.stack)
		
		self.switcher = Gtk.StackSwitcher()
		self.switcher.set_stack(self.stack)
		
		self.headerbar.previous_button.connect('clicked', self.on_previous_clicked)
		self.headerbar.add_games_button.connect('clicked', self.on_add_games_clicked)
		self.headerbar.play_game_button.connect('clicked', self.on_play_game_clicked)
		self.gamelist.connect('game_clicked', self.on_game_clicked)
		self.mostusedgamelist.connect('game_clicked', self.on_game_clicked)
		
		self.headerbar.show ()
		self.switcher.show()
		self.gamelist.show ()
		self.mostusedgamelist.show ()
		self.gameview.show ()
		
		self.set_mode ('list')
Example #3
0
 async def start(self, ctx):
     if not isinstance(ctx.channel, discord.channel.DMChannel):
         game = ctx.message.content.split(" ")[1]
         games = GameList.instance.get_games()
         open_games = GameList.instance.get_open_games() 
         if game in open_games:
             game_IDs = GameList.get_all_IDs(game)
             playing_IDs = ameList.get_playing_IDs()
             for ID in game_IDs:
                 if ID in playing_IDs:
                     await ctx.send("{} is already playing a game!".format(ctx.message.guild.get_member(ID)))
                     return 
             creatorID = GameList.instance.get_creator(game)
             if ctx.author.id == creatorID:
                 GameList.instance.start_game(game)
                 await ctx.send("{} has been started!!".format(game))
                 await self.run(game, ctx)
             else:
                 await ctx.send("{} does not have permission to start {}!".format(ctx.author, game))
         if game in games:
             await ctx.send("{} has already started!".format(game))
         else:
             await ctx.send("{} does not exist!".format(game))
     else:
         await ctx.send("Please join a server to use this command.")
Example #4
0
	def play(self, game):
		id = GameList.get_game_reference (game)
		if id and (not (id in self.running_games) or self.running_games[id] == False):
			self.running_games[id] = True
			p = GameProcess(game)
			p.connect('game_started', self.on_game_started)
			p.connect('game_stopped', self.on_game_stopped)
			p.start()
Example #5
0
	def on_game_stopped(self, process, game, return_code, start_time, end_time):
		id = GameList.get_game_reference (game)
		self.running_games[id] = False
		time_played = end_time - start_time
		
		if return_code == 0 or time_played > 10:
			game_id = self.gamesdb.get_game_id (game.get_uri ())
			#self.gamesdb.update_play_time (game_id, start_time, end_time)
			game.emit('played', start_time, end_time)
Example #6
0
        def __init__(self):
                super(GameHallPanel, self).__init__()
                layout = QVBoxLayout(self)
                layout.setAlignment(Qt.AlignTop)

                self.playerName = QLineEdit()
                self.playerName.setAlignment(Qt.AlignCenter)
                self.playerName.setFrame(False)
                self.playerName.setPlaceholderText('Player Name')
                self.playerName.setFocusPolicy(Qt.ClickFocus)
                self.playerName.setText(settings.value('player/name'))
                self.playerName.textChanged.connect(self._onPlayerNameChanged)
                layout.addWidget(self.playerName)

                self.gameList = GameList()
                self.mapList = MapList()
Example #7
0
    def main(self):
        self.opts.directory = os.path.normpath(self.opts.directory)
        os.chdir(self.opts.directory)
        self.config = ConfigParser.SafeConfigParser()
        self.config.read('mamematic.ini')

        gamelist = GameList()
        if self.opts.xml:
            gamelist.readxml(self.opts.xml)
        else:
            gamelist.readxml(self.config.get('mame','exec'))

        for g in gamelist:
            log.info(g)

        return(0)
Example #8
0
    def __init__(self):
        self.__root = root = Tk()
        root.title("飞机大战(达内科技)")
        from skycanvas import SkyCanvas #F画布
        self.__canvas = canvas = SkyCanvas(root, width=480, height=654)
        canvas.pack()

        # 处理按键事件和鼠标事件
        from gamelist import EventList

        # 创建能够接收控制事件的列表 (pause_button, hero_plane, 
        self.__event_list = event_list = EventList()  # 创建能够接收控制事件的列表
        root.bind('<Key>', lambda event: event_list.on_key_down(event))
        root.bind('<KeyRelease>', lambda event: event_list.on_key_up(event))
        root.bind('<Button>', lambda event: event_list.on_mouse_down(event))
        root.bind('<Motion>', lambda event: event_list.on_mouse_move(event))
        root.bind('<ButtonRelease>',
                  lambda event: event_list.on_mouse_up(event))

        # 创建游戏中能接收定时器事5件的列表
        from gamelist import TimerList
        self.__timer_list = time_list = TimerList()
        self.__timer_interval = 40  # 设定刷新时间为40ms
        self.__tick_count = 0

        # 创建敌方武器对象列表
        from gamelist import GameList
        self.__enemy_list = GameList()
        # 创建游戏方的武器对象列表
        # self.player_list = GameList()

        self.create_backgound()

        self.__life_count = 3  # 生命数

        # 创建飞机个数的图标
        from planes_label import PlaneLabel
        self.__plane_label = PlaneLabel(canvas, count=self.__life_count)

        self.create_new_hero()

        # 创建得分标签:
        from score_label import ScoreLabel
        self.__score_label = ScoreLabel(canvas)
        self.__score = 0

        # 创建暂停按钮
        from pause_button import PauseButton
        self.__pause_btn = PauseButton(canvas, callback=self.pause_game)
        self.__event_list.append(self.__pause_btn)

        from enemy_plane import EnemyPlane1, EnemyPlane2, EnemyPlane3, EnemyPlane1_2
        self.__random_list = [EnemyPlane1] * 10 + \
            [EnemyPlane2] * 3 + [EnemyPlane3] + [EnemyPlane1_2] * 2
        self.__min_list_len = len(self.__random_list)
        self.__random_list.extend([None] * 500)
        # self.__random_list = [EnemyPlane1] * 10 + [EnemyPlane2] * 3 + [EnemyPlane3] + [None] * 10

        from startwindow import StartWindow
        self.__start_window = start_window = StartWindow(
            canvas, start_callback=self.start_game, destroy=self.destroy_object)
        event_list.append(start_window)      
Example #9
0
class MainApp:
    def __init__(self):
        self.__root = root = Tk()
        root.title("飞机大战(达内科技)")
        from skycanvas import SkyCanvas #F画布
        self.__canvas = canvas = SkyCanvas(root, width=480, height=654)
        canvas.pack()

        # 处理按键事件和鼠标事件
        from gamelist import EventList

        # 创建能够接收控制事件的列表 (pause_button, hero_plane, 
        self.__event_list = event_list = EventList()  # 创建能够接收控制事件的列表
        root.bind('<Key>', lambda event: event_list.on_key_down(event))
        root.bind('<KeyRelease>', lambda event: event_list.on_key_up(event))
        root.bind('<Button>', lambda event: event_list.on_mouse_down(event))
        root.bind('<Motion>', lambda event: event_list.on_mouse_move(event))
        root.bind('<ButtonRelease>',
                  lambda event: event_list.on_mouse_up(event))

        # 创建游戏中能接收定时器事5件的列表
        from gamelist import TimerList
        self.__timer_list = time_list = TimerList()
        self.__timer_interval = 40  # 设定刷新时间为40ms
        self.__tick_count = 0

        # 创建敌方武器对象列表
        from gamelist import GameList
        self.__enemy_list = GameList()
        # 创建游戏方的武器对象列表
        # self.player_list = GameList()

        self.create_backgound()

        self.__life_count = 3  # 生命数

        # 创建飞机个数的图标
        from planes_label import PlaneLabel
        self.__plane_label = PlaneLabel(canvas, count=self.__life_count)

        self.create_new_hero()

        # 创建得分标签:
        from score_label import ScoreLabel
        self.__score_label = ScoreLabel(canvas)
        self.__score = 0

        # 创建暂停按钮
        from pause_button import PauseButton
        self.__pause_btn = PauseButton(canvas, callback=self.pause_game)
        self.__event_list.append(self.__pause_btn)

        from enemy_plane import EnemyPlane1, EnemyPlane2, EnemyPlane3, EnemyPlane1_2
        self.__random_list = [EnemyPlane1] * 10 + \
            [EnemyPlane2] * 3 + [EnemyPlane3] + [EnemyPlane1_2] * 2
        self.__min_list_len = len(self.__random_list)
        self.__random_list.extend([None] * 500)
        # self.__random_list = [EnemyPlane1] * 10 + [EnemyPlane2] * 3 + [EnemyPlane3] + [None] * 10

        from startwindow import StartWindow
        self.__start_window = start_window = StartWindow(
            canvas, start_callback=self.start_game, destroy=self.destroy_object)
        event_list.append(start_window)      

    def create_backgound(self):
        from background import Background
        self.__background = background = Background(self.__canvas)
        self.__timer_list.append(background)
    def on_timer(self):
        # 再次启动定时器
        self.timer_id = self.__canvas.after(
            self.__timer_interval, self.on_timer)  # 让定时器重复启动
        self.on_timer_tick()
        self.__tick_count += 1
        if self.__tick_count == 25:
            self.__tick_count = 0
            self.on_timer_second()

    def start_timer(self):
        # print("已启动定时器")
        self.timer_id = self.__canvas.after(
            self.__timer_interval, self.on_timer)
    def on_timer_tick(self):
        '''定时器触发时调用此方法'''
        # 刷新背景图
        if self.__timer_list.on_timer():
            return

        # 随机生成敌机
        self.random_enemys()
        # 检测飞机得分及飞机是否飞机被摧毁
        #if self.__hero_plane:
        #    score = self.__hero_plane.check_attack(
        #        self.__enemy_list.get_objs())
        #    self.increase_score(score)

    # Fred: What would happen when random list > list_len?
    def on_timer_second(self):
        '''定时器每秒钟调用一次此方法'''
        if len(self.__random_list) > self.__min_list_len:
            self.__random_list.pop()

    def start_game(self):
        self.__timer_list.append(self.__start_window)
        self.__event_list.remove(self.__start_window)
        del self.__start_window  # ??????????????????????????????
        self.start_timer() 
    
    def pause_game(self):
        # print("游戏已暂暂停....")
        self.stop_timer()
        from resume_widget import ResumeWidet
        self.resume_widget = ResumeWidet(
            self.__canvas, resume_cb=self.begin_resume_game, destroy_cb=self.resume_game)
        self.__event_list.append(self.resume_widget)

    def begin_resume_game(self):
        '''开始恢复游戏进入恢复倒计时'''
        # print("游戏开始恢复!!!!!")
        self.__event_list.remove(self.resume_widget)
        self.__timer_list.append_head(self.resume_widget)
        self.start_timer()
        pass

    def resume_game(self):
        '''已恢复,正式开战'''
        # print("游戏已恢复!!!!!")
        self.__timer_list.remove(self.resume_widget)
        del self.resume_widget
    def __del__(self):
        self.stop_timer()

    def stop_timer(self):
        self.__canvas.after_cancel(self.timer_id)  # 取消定时器
        # print("定时器已取消!")   
    def destroy_object(self, obj):
        """删除对象"""
        self.__timer_list.remove(obj)
        self.__event_list.remove(obj)
        self.__enemy_list.remove(obj)
    def create_new_hero(self):
        from heroplane import HeroPlane
        self.__hero_plane = hero_plane = HeroPlane(
            self.__canvas, destroy_cb=self.hero_crush)
        self.__event_list.append(hero_plane)
        self.__timer_list.append(hero_plane)
        self.__life_count -= 1
        self.__plane_label.set_count(self.__life_count)
    def hero_crush(self, obj):
        '''飞机坠落'''
        # print('''飞机坠落''')
        self.destroy_object(self.__hero_plane)
        self.__hero_plane = None
        if self.__life_count > 0:
            self.create_new_hero()
            # print("剩余生命数为:", self.__life_count)
        else:
            self.game_over()

    def random_enemys(self):
        plane = random.choice(self.__random_list)
        if plane:
            ep = plane(self.__canvas, destroy_cb=self.destroy_object)
            self.__timer_list.append(ep)
            self.__enemy_list.append(ep)

    def run(self):
        # 进入主事件循环
        self.__root.mainloop()
Example #10
0
 def __init__(self, client):
     self.client = client
     GameList.instance = GameList()
Example #11
0
class Window(Gtk.ApplicationWindow):
	__gsignals__ = {
		'play_clicked': (GObject.SIGNAL_RUN_FIRST, None, (object,))
	}
	
	def __init__(self, app):
		Gtk.ApplicationWindow.__init__(self,
		                               application=app,
		                               title=app.fullname)
		self.set_wmclass (app.fullname, app.fullname)
		self.set_default_icon_name(app.simplename)
		
		self.app = app
		
		self.set_size_request(887, 640)
		self.set_position(Gtk.WindowPosition.CENTER)
		
		
		self.headerbar = HeaderBar ()
		
		allgames = self.app.gamesdb.get_games ()
		self.gamelist = GameList(allgames)
		
		mostusedgames = self.app.gamesdb.get_most_used_games ()[:20]
		self.mostusedgamelist = GameList(mostusedgames)
		
		self.gameview = GameView()
		
		self.set_titlebar (self.headerbar)
		
		self.stack = Gtk.Stack ()
		self.stack.set_transition_type (Gtk.StackTransitionType.CROSSFADE)
		self.stack.show ()
		
		self.stack.add_titled (self.mostusedgamelist, 'frequent', 'Frequently used')
		self.stack.add_titled (self.gamelist, 'all', 'All')
		self.stack.add (self.gameview)
		
		self.add(self.stack)
		
		self.switcher = Gtk.StackSwitcher()
		self.switcher.set_stack(self.stack)
		
		self.headerbar.previous_button.connect('clicked', self.on_previous_clicked)
		self.headerbar.add_games_button.connect('clicked', self.on_add_games_clicked)
		self.headerbar.play_game_button.connect('clicked', self.on_play_game_clicked)
		self.gamelist.connect('game_clicked', self.on_game_clicked)
		self.mostusedgamelist.connect('game_clicked', self.on_game_clicked)
		
		self.headerbar.show ()
		self.switcher.show()
		self.gamelist.show ()
		self.mostusedgamelist.show ()
		self.gameview.show ()
		
		self.set_mode ('list')
	
	def on_previous_clicked(self, button):
		self.set_mode ('list')
	
	def on_add_games_clicked(self, button):
		print ("add games clicked")
	
	def on_play_game_clicked(self, button):
		self.emit("play_clicked", self.game)
	
	def on_game_clicked(self, view, game):
		self.game = game
		self.gameview.set_game (game, self.app.gamesdb.get_play_info (game))
		self.set_mode ('game')
	
	def set_mode (self, mode):
		if mode == 'list':
			self.stack.set_visible_child (self.gamelist)
			
			self.headerbar.previous_button.hide ()
			self.headerbar.add_games_button.show ()
			self.headerbar.play_game_button.hide ()
			
			self.headerbar.set_title (self.app.fullname)
			self.headerbar.set_custom_title (self.switcher)
		
		elif mode == 'game':
			self.stack.set_visible_child (self.gameview)
			
			self.headerbar.previous_button.show ()
			self.headerbar.add_games_button.hide ()
			self.headerbar.play_game_button.show ()
			
			self.headerbar.set_title (self.game.get_info ('common_title').get_property ('common_title'))
			self.headerbar.set_custom_title (None)
Example #12
0
class MainWindow:
    def __init__(self, app):
        self.app = app
        self.filename = ""

        widgets = gtk.glade.XML(utils.locate_data_dir() + "chessmonk.glade")
        widgets.signal_autoconnect(self)

        self.window = widgets.get_widget("mainwindow")
        self.boardbox = widgets.get_widget("alignment_board_display")
        self.hpane = widgets.get_widget("hpane")
        self.vpane = widgets.get_widget("vpane")

        self.hpane.set_position(380)
        self.vpane.set_position(150)

        self.window.set_size_request(800, 600)

        try:
            icon = gtk.icon_theme_get_default().load_icon("chessmonk", 48, 0)
            self.window.set_icon(icon)
        except:
            print "Warning:", sys.exc_info()[1]

        # Move control buttons
        self.button_move_first = widgets.get_widget("button_move_first")
        self.button_move_back = widgets.get_widget("button_move_back")
        self.button_move_takeback = widgets.get_widget("button_move_takeback")
        self.button_move_forward = widgets.get_widget("button_move_forward")
        self.button_move_last = widgets.get_widget("button_move_last")

        from gtkboardview.BoardView import *
        self.boardview = BoardView()
        #self.board = self.boardview.board
        self.boardbox.add(self.boardview)

        self.boardview.board.connect('position-changed-event',
                                     self.position_changed_event)

        self.notationview = NotationView()
        self.notationview.board = self.boardview.board
        self.boardview.board.connect('position-changed-event',
                                     self.notationview.position_changed_event)
        widgets.get_widget('sw_notation').add(self.notationview)

        self.gamelist = GameList(self)

        #self.notebook = gtk.Notebook()
        #widgets.get_widget("notebook_box").add(self.notebook)
        #self.notebook.append_page(self.gamelist)
        widgets.get_widget("sw_gamelist").add(self.gamelist)

        self.window.show_all()
        self.button_move_takeback.hide()  # TODO: reconsider

    def on_resize(self, widget):
        #self.boardview.on_resize()
        pass

    def on_rotate(self, widget):
        self.boardview.flip()

    def on_show_coordinates_toggle(self, widget):
        self.boardview.toggle_coordinates()

    def on_button_move_back_clicked(self, widget):
        self.boardview.board.move_back()

    def on_button_move_forward_clicked(self, widget):
        self.boardview.board.move_forward()

    def on_button_move_first_clicked(self, widget):
        self.boardview.board.move_first()

    def on_button_move_last_clicked(self, widget):
        self.boardview.board.move_last()

    def open_game(self, game):
        #game.notation.nodes = PGN.parse_string(game.notation_string)
        from gtkboardview import PGNfeeder
        PGNfeeder.feed(self.boardview.board, game.notation_string)
        #self.boardview.board.set_game(game)
        #self.boardview.update()
        self.notationview.update()

    def load_games(self, filename):
        self.gamelist.load(filename)
        self.open_game(self.gamelist.games[0])
        self.filename = filename
        filebase = os.path.splitext(os.path.basename(filename))[0]
        self.window.set_title(filebase)

    def on_open(self, sender):
        fc = gtk.FileChooserDialog(
            title="Open",
            parent=self.window,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OPEN,
                     gtk.RESPONSE_ACCEPT))
        if self.filename:
            fc.set_filename(self.filename)
        result = fc.run()
        fc.hide()
        if result == gtk.RESPONSE_ACCEPT:
            self.load_games(fc.get_filename())

    def on_save_board_image(self, sender):
        fc = gtk.FileChooserDialog(
            title="Save Image",
            parent=self.window,
            action=gtk.FILE_CHOOSER_ACTION_SAVE,
            buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OPEN,
                     gtk.RESPONSE_ACCEPT))
        result = fc.run()
        fc.hide()
        if result == gtk.RESPONSE_ACCEPT:
            self.boardview.save_png(fc.get_filename())

    def on_about(self, sender):
        ad = gtk.AboutDialog()
        ad.set_name("Chessmonk")
        ad.set_comments("Open Source Chess Viewer and Database Tool")
        ad.set_version(utils.get_version())
        ad.set_copyright("Copyright © 2006 Daniel Borgmann")
        ad.set_authors([
            "Daniel Borgmann <*****@*****.**>",
            "Nils R Grotnes <*****@*****.**>",
        ])
        ad.set_license(utils.get_license())
        ad.set_logo_icon_name("chessmonk")
        ad.run()

    def on_close(self, sender=None, event=None):
        gtk.main_quit()

    def position_changed_event(self, sender, new_position=None):
        print self.app.eco.get_name(new_position.get_FEN())
Example #13
0
    def __init__(self, app):
        self.app = app
        self.filename = ""
        self.data = Data()
        self.current_game = 0

        self.UNSEEN_SCORE = 0
        self.DONT_KNOW_SCORE = 1
        self.FUZZY_SCORE = 2
        self.GOT_IT_SCORE = 3
    
        widgets = gtk.glade.XML(utils.locate_data_dir() + "chessmemory.glade")
        widgets.signal_autoconnect(self)
        
        self.window = widgets.get_widget("mainwindow")
        self.boardbox = widgets.get_widget("alignment_board_display")
        self.hpane = widgets.get_widget("hpane")
        self.vpane = widgets.get_widget("vpane")
        
        self.hpane.set_position(680)
        self.vpane.set_position(350)

        self.window.set_size_request(1440, 800)

        self.window.connect("key_press_event", self.key_press_event)
        self.window.set_events(gtk.gdk.KEY_PRESS_MASK)
        
        try:
            icon = gtk.icon_theme_get_default().load_icon("chessmemory", 48, 0)
            self.window.set_icon(icon)
        except:
            print "Warning:", sys.exc_info()[1]
                    
        # Move control buttons
        self.button_move_first = widgets.get_widget("button_move_first")
        self.button_move_back = widgets.get_widget("button_move_back")
        self.button_move_takeback = widgets.get_widget("button_move_takeback")
        self.button_move_forward = widgets.get_widget("button_move_forward")
        self.button_move_last = widgets.get_widget("button_move_last")
        self.button_dont_know = widgets.get_widget("button_dont_know")
        self.button_fuzzy = widgets.get_widget("button_fuzzy")
        self.button_got_it = widgets.get_widget("button_got_it")
        
        self.boardview = BoardView(self)
        #self.board = self.boardview.board
        self.boardbox.add(self.boardview)
        
        self.boardview.board.connect('position-changed-event', self.position_changed_event)
        
        self.notationview = NotationView()
        self.notationview.board = self.boardview.board
        self.boardview.board.connect('position-changed-event', self.notationview.position_changed_event) 
        widgets.get_widget('sw_notation').add(self.notationview)
        
        self.gamelist = GameList(self)
                
        #self.notebook = gtk.Notebook()
        #widgets.get_widget("notebook_box").add(self.notebook)
        #self.notebook.append_page(self.gamelist)
        widgets.get_widget("sw_gamelist").add(self.gamelist)
        
        self.window.show_all()        
        self.button_move_takeback.hide() # TODO: reconsider
Example #14
0
class MainWindow:
    def __init__(self, app):
        self.app = app
        self.filename = ""
        self.data = Data()
        self.current_game = 0

        self.UNSEEN_SCORE = 0
        self.DONT_KNOW_SCORE = 1
        self.FUZZY_SCORE = 2
        self.GOT_IT_SCORE = 3
    
        widgets = gtk.glade.XML(utils.locate_data_dir() + "chessmemory.glade")
        widgets.signal_autoconnect(self)
        
        self.window = widgets.get_widget("mainwindow")
        self.boardbox = widgets.get_widget("alignment_board_display")
        self.hpane = widgets.get_widget("hpane")
        self.vpane = widgets.get_widget("vpane")
        
        self.hpane.set_position(680)
        self.vpane.set_position(350)

        self.window.set_size_request(1440, 800)

        self.window.connect("key_press_event", self.key_press_event)
        self.window.set_events(gtk.gdk.KEY_PRESS_MASK)
        
        try:
            icon = gtk.icon_theme_get_default().load_icon("chessmemory", 48, 0)
            self.window.set_icon(icon)
        except:
            print "Warning:", sys.exc_info()[1]
                    
        # Move control buttons
        self.button_move_first = widgets.get_widget("button_move_first")
        self.button_move_back = widgets.get_widget("button_move_back")
        self.button_move_takeback = widgets.get_widget("button_move_takeback")
        self.button_move_forward = widgets.get_widget("button_move_forward")
        self.button_move_last = widgets.get_widget("button_move_last")
        self.button_dont_know = widgets.get_widget("button_dont_know")
        self.button_fuzzy = widgets.get_widget("button_fuzzy")
        self.button_got_it = widgets.get_widget("button_got_it")
        
        self.boardview = BoardView(self)
        #self.board = self.boardview.board
        self.boardbox.add(self.boardview)
        
        self.boardview.board.connect('position-changed-event', self.position_changed_event)
        
        self.notationview = NotationView()
        self.notationview.board = self.boardview.board
        self.boardview.board.connect('position-changed-event', self.notationview.position_changed_event) 
        widgets.get_widget('sw_notation').add(self.notationview)
        
        self.gamelist = GameList(self)
                
        #self.notebook = gtk.Notebook()
        #widgets.get_widget("notebook_box").add(self.notebook)
        #self.notebook.append_page(self.gamelist)
        widgets.get_widget("sw_gamelist").add(self.gamelist)
        
        self.window.show_all()        
        self.button_move_takeback.hide() # TODO: reconsider
        
    def on_resize(self, widget):
        #self.boardview.on_resize()
        pass
        
    def on_rotate(self, widget):
        self.boardview.flip()

    def key_press_event(self, widget, event):
        if gtk.gdk.keyval_name(event.keyval) == "Right":
            self.boardview.board.move_forward()
        elif gtk.gdk.keyval_name(event.keyval) == "Left":
            self.boardview.board.move_back()
        elif gtk.gdk.keyval_name(event.keyval) == "question":
            self.load_random_game()
        elif gtk.gdk.keyval_name(event.keyval) == "Return":
            self.on_button_got_it_clicked(self)
        elif gtk.gdk.keyval_name(event.keyval) == "space":
            self.on_button_fuzzy_clicked(self)
        elif gtk.gdk.keyval_name(event.keyval) == "Shift_L":
            self.on_button_dont_know_clicked(self)

    def on_show_coordinates_toggle(self, widget):
        self.boardview.toggle_coordinates()
    
    def on_button_move_back_clicked(self, widget):
        self.boardview.board.move_back()
    
    def on_button_move_forward_clicked(self, widget):
        self.boardview.board.move_forward()
        
    def on_button_move_first_clicked(self, widget):
        self.boardview.board.move_first()
    
    def on_button_move_last_clicked(self, widget):
        self.boardview.board.move_last()

    def on_button_dont_know_clicked(self, widget):
        self.data.set_score(self.current_game, self.DONT_KNOW_SCORE)
        self.gamelist.store[self.current_game][1] = self.DONT_KNOW_SCORE
        self.save_state()
        self.load_random_game()
        
    def on_button_fuzzy_clicked(self, widget):
        self.data.set_score(self.current_game, self.FUZZY_SCORE)
        self.gamelist.store[self.current_game][1] = self.FUZZY_SCORE
        self.save_state()
        self.load_random_game()
        
    def on_button_got_it_clicked(self, widget):
        self.data.set_score(self.current_game, self.GOT_IT_SCORE)
        self.gamelist.store[self.current_game][1] = self.GOT_IT_SCORE
        self.save_state()
        self.load_random_game()
        
    def load_random_game(self):
        random_index = randrange(0,len(self.gamelist.games))
        self.open_game(self.gamelist.games[random_index])

    def save_state(self):
        save_filename = self.filename + ".dat"
        f = open(save_filename, 'w')
        pickle.dump(self.data, f)

    def load_state(self):
        load_filename = self.filename + ".dat"
        try:
            f = open(load_filename)
            unpickler = pickle.Unpickler(f)
            self.data = unpickler.load()
        except:
            pass

    def open_game(self, game):
        game.notation.nodes = PGN.parse_string(game.notation_string)
        self.boardview.board.set_game(game)
        #self.boardview.update()
        self.notationview.update()
        self.current_game = game.index
        self.gamelist.set_cursor(game.index)
        self.data.inc_seen()

        # TODO P3: check for list of player names
        if game.keys['Black'] == 'Player' and self.boardview._flipped is False:
            self.boardview.flip()
        
    def load_games(self, filename):
        self.filename = filename
        self.load_state()
        self.gamelist.load(filename)
        #self.open_game(self.gamelist.games[0])
        self.load_random_game()
        filebase = os.path.splitext(os.path.basename(filename))[0]
        self.window.set_title(filebase)
        
    def on_open(self, sender):
        fc = gtk.FileChooserDialog(title="Open", parent=self.window,
                                   buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                                            gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT))
        if self.filename:
            fc.set_filename(self.filename)
        result = fc.run()
        fc.hide()
        if result == gtk.RESPONSE_ACCEPT:
            self.load_games(fc.get_filename())
            
    def on_save_board_image(self, sender):
        fc = gtk.FileChooserDialog(title="Save Image", parent=self.window,
                                   action=gtk.FILE_CHOOSER_ACTION_SAVE,
                                   buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
                                            gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT))
        result = fc.run()
        fc.hide()
        if result == gtk.RESPONSE_ACCEPT:
            self.boardview.save_png(fc.get_filename())
            
    def on_about(self, sender):
        ad = gtk.AboutDialog()
        ad.set_name("Chessmemory")
        ad.set_comments("Open Source Chess Viewer and Database Tool")
        ad.set_version(utils.get_version())
        ad.set_copyright("Copyright © 2006 Daniel Borgmann")
        ad.set_authors([
            "Daniel Borgmann <*****@*****.**>",
            "Nils R Grotnes <*****@*****.**>",
        ])
        ad.set_license(utils.get_license())
        ad.set_logo_icon_name("chessmemory")
        ad.run()
        
    def on_close(self, sender=None, event=None):
        gtk.main_quit()
            
    def position_changed_event(self, sender, new_position=None):
        print self.app.eco.get_name(new_position.get_FEN())