def __init__(self, application, selected=None): super().__init__() self.application = application self.get_style_context().add_class("sidebar") self.installed_runners = [] self.active_platforms = games_db.get_used_platforms() self.runners = sorted(runners.__all__) self.platforms = sorted(platforms.__all__) self.categories = categories_db.get_categories() if selected: row_type, row_id = selected.split(":") else: row_type, row_id = ("runner", "all") GObject.add_emission_hook(RunnersDialog, "runner-installed", self.update) GObject.add_emission_hook(RunnersDialog, "runner-removed", self.update) GObject.add_emission_hook(Game, "game-updated", self.update) GObject.add_emission_hook(Game, "game-removed", self.update) load_icon_theme() self.add( SidebarRow( "running", "dynamic_category", _("Running"), Gtk.Image.new_from_icon_name("media-playback-start-symbolic", Gtk.IconSize.MENU))) self.add( SidebarRow( "installed", "dynamic_category", _("Installed"), Gtk.Image.new_from_icon_name("drive-harddisk-symbolic", Gtk.IconSize.MENU))) self.add( SidebarRow( "favorite", "category", _("Favorites"), Gtk.Image.new_from_icon_name("favorite-symbolic", Gtk.IconSize.MENU))) service_classes = services.get_services() for service_name in service_classes: service = service_classes[service_name]() self.add( SidebarRow( service.id, "service", service.name, Gtk.Image.new_from_icon_name(service.icon, Gtk.IconSize.MENU))) all_row = RunnerSidebarRow(None, "runner", _("All"), None) self.add(all_row) for runner_name in self.runners: icon_name = runner_name.lower().replace(" ", "") + "-symbolic" icon = Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.MENU) runner = runners.import_runner(runner_name)() self.add( RunnerSidebarRow(runner_name, "runner", runner.human_name, icon, application=self.application)) self.add(SidebarRow(None, "platform", _("All"), None)) for platform in self.platforms: icon_name = (platform.lower().replace(" ", "").replace("/", "_") + "-symbolic") icon = Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.MENU) self.add(SidebarRow(platform, "platform", platform, icon)) self.set_filter_func(self._filter_func) self.set_header_func(self._header_func) self.update() for row in self.get_children(): if row.type == row_type and row.id == row_id: self.select_row(row) break self.show_all()
def on_realize(self, widget): self.active_platforms = games_db.get_used_platforms() self.runners = sorted(runners.__all__) self.platforms = sorted(platforms.__all__) self.categories = categories_db.get_categories() self.add( SidebarRow( "all", "category", _("Games"), Gtk.Image.new_from_icon_name("applications-games-symbolic", Gtk.IconSize.MENU))) self.add( SidebarRow( "recent", "dynamic_category", _("Recent"), Gtk.Image.new_from_icon_name("document-open-recent-symbolic", Gtk.IconSize.MENU))) self.add( SidebarRow( "favorite", "category", _("Favorites"), Gtk.Image.new_from_icon_name("favorite-symbolic", Gtk.IconSize.MENU))) self.running_row = SidebarRow( "running", "dynamic_category", _("Running"), Gtk.Image.new_from_icon_name("media-playback-start-symbolic", Gtk.IconSize.MENU)) # I wanted this to be on top but it really messes with the headers when showing/hiding the row. self.add(self.running_row) service_classes = services.get_services() for service_name in service_classes: service = service_classes[service_name]() row_class = OnlineServiceSidebarRow if service.online else ServiceSidebarRow service_row = row_class(service) self.service_rows[service_name] = service_row self.add(service_row) for runner_name in self.runners: icon_name = runner_name.lower().replace(" ", "") + "-symbolic" runner = runners.import_runner(runner_name)() self.add( RunnerSidebarRow(runner_name, "runner", runner.human_name, self.get_sidebar_icon(icon_name), application=self.application)) for platform in self.platforms: icon_name = (platform.lower().replace(" ", "").replace("/", "_") + "-symbolic") self.add( SidebarRow(platform, "platform", platform, self.get_sidebar_icon(icon_name))) self.update() for row in self.get_children(): if row.type == self.selected_row_type and row.id == self.selected_row_id: self.select_row(row) break self.show_all() self.running_row.hide()