def test_add(self): self.hook = True e = E() e.connect('signal', self._callback) GObject.add_emission_hook(E, "signal", self._emission_hook) e.emit('signal') self.assertEqual(e.status, 3)
def __init__(self, filename): """ Create a new Recorder object. :param filename: name of the script """ WidgetIntrospecter.__init__(self) self.register_event_handler() self.connect('window-removed', self.window_removed) self._filename = filename self._events = [] self._listened_objects = [] self._event_types = self._configure_event_types() self._args = None # This is sort of a hack, but there are no other realiable ways # of actually having something executed after the application # is finished atexit.register(self.save) # Register a hook that is called before normal delete-events # because if it's connected using a normal callback it will not # be called if the application returns True in it's signal handler. GObject.add_emission_hook(Gtk.Window, 'delete-event', self._emission_window__delete_event)
def testAdd(self): self.hook = True e = E() e.connect('signal', self._callback) GObject.add_emission_hook(E, "signal", self._emission_hook) e.emit('signal') self.assertEqual(e.status, 3)
def __init__(self, filename): """ Create a new Recorder object. :param filename: name of the script """ WidgetIntrospecter.__init__(self) self.register_event_handler() self.connect('window-removed', self.window_removed) self._filename = filename self._events = [] self._listened_objects = [] self._event_types = self._configure_event_types() self._args = None # This is sort of a hack, but there are no other realiable ways # of actually having something executed after the application # is finished atexit.register(self.save) # Register a hook that is called before normal delete-events # because if it's connected using a normal callback it will not # be called if the application returns True in it's signal handler. GObject.add_emission_hook( Gtk.Window, 'delete-event', self._emission_window__delete_event)
def __init__(self, service, service_media): super().__init__() self.service = service self.service_media = service_media self._installed_games = [] self._installed_games_accessed = False self._icon_updates = {} self._icon_update_timer = None self.store = Gtk.ListStore( str, str, str, Pixbuf, str, str, str, str, int, str, bool, int, str, float, str, ) self.media_loader = MediaLoader() self.media_loader.connect("icon-loaded", self.on_icon_loaded) GObject.add_emission_hook(BaseService, "service-games-loaded", self.on_service_games_updated)
def __init__(self): super(SidebarTreeView, self).__init__() self.installed_runners = [] self.active_platforms = [] self.model = Gtk.TreeStore(str, str, GdkPixbuf.Pixbuf, str, str) self.model_filter = self.model.filter_new() self.model_filter.set_visible_func(self.filter_rule) self.set_model(self.model_filter) column = Gtk.TreeViewColumn("Runners") column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) # Type type_renderer = Gtk.CellRendererText() type_renderer.set_visible(False) column.pack_start(type_renderer, True) column.add_attribute(type_renderer, "text", TYPE) # Runner slug text_renderer = Gtk.CellRendererText() text_renderer.set_visible(False) column.pack_start(text_renderer, True) column.add_attribute(text_renderer, "text", SLUG) # Icon icon_renderer = Gtk.CellRendererPixbuf() icon_renderer.set_property('width', 20) column.pack_start(icon_renderer, False) column.add_attribute(icon_renderer, "pixbuf", ICON) # Label text_renderer2 = Gtk.CellRendererText() column.pack_start(text_renderer2, True) column.add_attribute(text_renderer2, "text", LABEL) # Gamecount text_renderer3 = Gtk.CellRendererText() text_renderer3.set_alignment(1.0, 0.5) column.pack_start(text_renderer3, True) column.add_attribute(text_renderer3, "text", GAMECOUNT) self.append_column(column) self.set_headers_visible(False) self.set_fixed_height_mode(True) self.get_selection().set_mode(Gtk.SelectionMode.BROWSE) self.connect('button-press-event', self.popup_contextual_menu) GObject.add_emission_hook(RunnersDialog, "runner-installed", self.update) self.runners = sorted(runners.__all__) self.platforms = sorted(platforms.__all__) self.platform_node = None self.load_runners() self.load_platforms() self.update() self.expand_all()
def testCallbackReturnFalse(self): self.hook = False obj = F() def _emission_hook(obj): obj.status += 1 return False GObject.add_emission_hook(obj, "signal", _emission_hook) obj.emit('signal') obj.emit('signal') self.assertEqual(obj.status, 3)
def test_callback_return_false(self): self.hook = False obj = F() def _emission_hook(obj): obj.status += 1 return False GObject.add_emission_hook(obj, "signal", _emission_hook) obj.emit('signal') obj.emit('signal') self.assertEqual(obj.status, 3)
def __init__(self): super(SidebarTreeView, self).__init__() self.installed_runners = [] self.active_platforms = [] self.model = Gtk.TreeStore(str, str, GdkPixbuf.Pixbuf, str) self.model_filter = self.model.filter_new() self.model_filter.set_visible_func(self.filter_rule) self.set_model(self.model_filter) column = Gtk.TreeViewColumn("Runners") column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) # Type type_renderer = Gtk.CellRendererText() type_renderer.set_visible(False) column.pack_start(type_renderer, True) column.add_attribute(type_renderer, "text", TYPE) # Runner slug text_renderer = Gtk.CellRendererText() text_renderer.set_visible(False) column.pack_start(text_renderer, True) column.add_attribute(text_renderer, "text", SLUG) # Icon icon_renderer = Gtk.CellRendererPixbuf() icon_renderer.set_property('width', 20) column.pack_start(icon_renderer, False) column.add_attribute(icon_renderer, "pixbuf", ICON) # Label text_renderer2 = Gtk.CellRendererText() column.pack_start(text_renderer2, True) column.add_attribute(text_renderer2, "text", LABEL) self.append_column(column) self.set_headers_visible(False) self.set_fixed_height_mode(True) self.get_selection().set_mode(Gtk.SelectionMode.BROWSE) self.connect('button-press-event', self.popup_contextual_menu) GObject.add_emission_hook(RunnersDialog, "runner-installed", self.update) self.runners = sorted(runners.__all__) self.platforms = sorted(platforms.__all__) self.platform_node = None self.load_runners() self.load_platforms() self.update() self.expand_all()
def __init__(self): super().__init__( application_id="net.lutris.Lutris", flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE, ) GObject.add_emission_hook(Game, "game-launch", self.on_game_launch) GObject.add_emission_hook(Game, "game-start", self.on_game_start) GObject.add_emission_hook(Game, "game-stop", self.on_game_stop) GObject.add_emission_hook(Game, "game-install", self.on_game_install) GLib.set_application_name(_("Lutris")) self.window = None self.running_games = Gio.ListStore.new(Game) self.app_windows = {} self.tray = None self.css_provider = Gtk.CssProvider.new() self.run_in_background = False if os.geteuid() == 0: ErrorDialog(_("Running Lutris as root is not recommended and may cause unexpected issues")) try: self.css_provider.load_from_path(os.path.join(datapath.get(), "ui", "lutris.css")) except GLib.Error as e: logger.exception(e) if hasattr(self, "add_main_option"): self.add_arguments() else: ErrorDialog(_("Your Linux distribution is too old. Lutris won't function properly."))
def testRemove(self): self.hook = False e = E() e.connect('signal', self._callback) hook_id = GObject.add_emission_hook(E, "signal", self._emission_hook) GObject.remove_emission_hook(E, "signal", hook_id) e.emit('signal') self.assertEqual(e.status, 3)
def test_remove(self): self.hook = False e = E() e.connect('signal', self._callback) hook_id = GObject.add_emission_hook(E, "signal", self._emission_hook) GObject.remove_emission_hook(E, "signal", hook_id) e.emit('signal') self.assertEqual(e.status, 3)
def testCallbackReturnTrueButRemove(self): self.hook = False obj = F() def _emission_hook(obj): obj.status += 1 return True hook_id = GObject.add_emission_hook(obj, "signal", _emission_hook) obj.emit('signal') GObject.remove_emission_hook(obj, "signal", hook_id) obj.emit('signal') self.assertEqual(obj.status, 3)
def arm(self, tasklet): '''See :class:`WaitCondition.arm`''' if self._id is None: self._callback = tasklet.wait_condition_fired if self.class_ is not None: self._id = GObject.add_emission_hook(self.class_, self.signal, self._signal_cb) else: self._id = self.object.connect(self.signal, self._signal_cb) if GObject.signal_lookup("destroy", self.object): self._destroy_id = self.object.connect("destroy", self._object_destroyed)
def __init__(self): super(SidebarTreeView, self).__init__() self.installed_runners = [] self.model = Gtk.TreeStore(str, GdkPixbuf.Pixbuf, str) self.model_filter = self.model.filter_new() self.model_filter.set_visible_func(self.filter_rule) self.set_model(self.model_filter) column = Gtk.TreeViewColumn("Runners") column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) # Runner slug text_renderer = Gtk.CellRendererText() text_renderer.set_visible(False) column.pack_start(text_renderer, True) column.add_attribute(text_renderer, "text", SLUG) # Icon icon_renderer = Gtk.CellRendererPixbuf() icon_renderer.set_property('stock-size', 16) column.pack_start(icon_renderer, False) column.add_attribute(icon_renderer, "pixbuf", ICON) # Label text_renderer2 = Gtk.CellRendererText() column.pack_start(text_renderer2, True) column.add_attribute(text_renderer2, "text", LABEL) self.append_column(column) self.set_headers_visible(False) self.set_fixed_height_mode(True) self.connect('button-press-event', self.popup_contextual_menu) GObject.add_emission_hook(RunnersDialog, "runner-installed", self.update) self.runners = sorted(runners.__all__) self.load_all_runners() self.update() self.expand_all()
def test_callback_return_true_but_remove(self): self.hook = False obj = F() def _emission_hook(obj): obj.status += 1 return True hook_id = GObject.add_emission_hook(obj, "signal", _emission_hook) obj.emit('signal') GObject.remove_emission_hook(obj, "signal", hook_id) obj.emit('signal') self.assertEqual(obj.status, 3)
def __init__(self, application): super().__init__() self.application = application self.get_style_context().add_class("sidebar") self.installed_runners = [] self.active_platforms = pga.get_used_platforms() self.runners = sorted(runners.__all__) self.platforms = sorted(platforms.__all__) self.categories = pga.get_categories() 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() icon = Gtk.Image.new_from_icon_name("favorite-symbolic", Gtk.IconSize.MENU) self.add(SidebarRow("favorite", "category", _("Favorites"), icon)) all_row = SidebarRow(None, "runner", _("All"), None) self.add(all_row) self.select_row(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( SidebarRow(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() self.show_all()
def __init__(self): super().__init__() self.get_style_context().add_class("sidebar") self.installed_runners = [] self.active_platforms = pga.get_used_platforms() self.runners = sorted(runners.__all__) self.platforms = sorted(platforms.__all__) GObject.add_emission_hook(RunnersDialog, "runner-installed", self.update) # TODO: This should be in a more logical location icon_theme = Gtk.IconTheme.get_default() local_theme_path = os.path.join(datapath.get(), "icons") if local_theme_path not in icon_theme.get_search_path(): icon_theme.prepend_search_path(local_theme_path) all_row = SidebarRow(None, "runner", "All", None) self.add(all_row) self.select_row(all_row) for runner in self.runners: icon = Gtk.Image.new_from_icon_name( runner.lower().replace(" ", "") + "-symbolic", Gtk.IconSize.MENU) name = runners.import_runner(runner).human_name self.add(SidebarRow(runner, "runner", name, icon)) self.add(SidebarRow(None, "platform", "All", None)) for platform in self.platforms: icon_name = platform.lower().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() self.show_all()
def __init__(self, service_media): super().__init__() self.service_media = service_media self.store = Gtk.ListStore( str, str, str, Pixbuf, str, str, str, str, int, str, bool, int, str, float, str, ) self.media_loader = MediaLoader(service_media) self.media_loader.connect("icon-loaded", self.on_icon_loaded) GObject.add_emission_hook(Game, "game-updated", self.on_game_updated)
def __init__(self, db_game, game_actions, application): """Create the game bar with a database row""" super().__init__(orientation=Gtk.Orientation.VERTICAL, visible=True, margin_top=12, margin_left=12, margin_bottom=12, margin_right=12, spacing=6) self.game_start_hook_id = GObject.add_emission_hook( Game, "game-start", self.on_game_state_changed) self.game_started_hook_id = GObject.add_emission_hook( Game, "game-started", self.on_game_state_changed) self.game_stopped_hook_id = GObject.add_emission_hook( Game, "game-stopped", self.on_game_state_changed) self.game_updated_hook_id = GObject.add_emission_hook( Game, "game-updated", self.on_game_state_changed) self.game_removed_hook_id = GObject.add_emission_hook( Game, "game-removed", self.on_game_state_changed) self.game_installed_hook_id = GObject.add_emission_hook( Game, "game-installed", self.on_game_state_changed) self.connect("destroy", self.on_destroy) self.set_margin_bottom(12) self.game_actions = game_actions self.db_game = db_game self.service = None if db_game.get("service"): try: self.service = services.SERVICES[db_game["service"]]() except KeyError: pass game_id = None if "service_id" in db_game: self.appid = db_game["service_id"] game_id = db_game["id"] elif self.service: self.appid = db_game["appid"] if self.service.id == "lutris": game = get_game_by_field(self.appid, field="slug") else: game = get_game_for_service(self.service.id, self.appid) if game: game_id = game["id"] if game_id: self.game = application.get_game_by_id(game_id) or Game(game_id) else: self.game = Game() self.game.name = db_game["name"] self.game.slug = db_game["slug"] self.game.appid = self.appid self.game.service = self.service.id if self.service else None game_actions.set_game(self.game) self.update_view()
def __init__(self): super().__init__() self.get_style_context().add_class("sidebar") self.installed_runners = [] self.active_platforms = pga.get_used_platforms() self.runners = sorted(runners.__all__) self.platforms = sorted(platforms.__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) # TODO: This should be in a more logical location icon_theme = Gtk.IconTheme.get_default() local_theme_path = os.path.join(datapath.get(), "icons") if local_theme_path not in icon_theme.get_search_path(): icon_theme.prepend_search_path(local_theme_path) all_row = SidebarRow(None, "runner", "All", None) self.add(all_row) self.select_row(all_row) for runner in self.runners: icon = Gtk.Image.new_from_icon_name( runner.lower().replace(" ", "") + "-symbolic", Gtk.IconSize.MENU ) name = runners.import_runner(runner).human_name self.add(SidebarRow(runner, "runner", name, icon)) self.add(SidebarRow(None, "platform", "All", None)) for platform in self.platforms: icon_name = platform.lower().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() self.show_all()
def __init__(self, application, **kwargs): width = int(settings.read_setting("width") or self.default_width) height = int(settings.read_setting("height") or self.default_height) super().__init__( default_width=width, default_height=height, icon_name="lutris", application=application, **kwargs ) self.application = application self.runtime_updater = RuntimeUpdater() self.threads_stoppers = [] self.selected_runner = None self.selected_platform = None self.icon_type = None # Load settings self.window_size = (width, height) self.maximized = settings.read_setting("maximized") == "True" view_type = self.get_view_type() self.load_icon_type_from_settings(view_type) # Window initialization self.game_actions = GameActions(application=application, window=self) self.search_terms = None self.search_timer_id = None self.search_mode = "local" self.game_store = self.get_store() self.view = self.get_view(view_type) GObject.add_emission_hook(Game, "game-updated", self.on_game_updated) GObject.add_emission_hook(Game, "game-removed", self.on_game_updated) GObject.add_emission_hook(GenericPanel, "running-game-selected", self.game_selection_changed) self.connect("delete-event", self.on_window_delete) if self.maximized: self.maximize() self.init_template() self._init_actions() self._bind_zoom_adjustment() # Load view self.games_scrollwindow.add(self.view) self._connect_signals() # Set theme to dark if set in the settings self.set_dark_theme() self.set_viewtype_icon(view_type) # Add additional widgets lutris_icon = Gtk.Image.new_from_icon_name("lutris", Gtk.IconSize.MENU) lutris_icon.set_margin_right(3) self.website_search_toggle.set_image(lutris_icon) self.website_search_toggle.set_label("Search Lutris.net") self.website_search_toggle.set_tooltip_text("Search Lutris.net") self.sidebar_listbox = SidebarListBox() self.sidebar_listbox.set_size_request(250, -1) self.sidebar_listbox.connect("selected-rows-changed", self.on_sidebar_changed) self.sidebar_scrolled.add(self.sidebar_listbox) self.game_panel = GenericPanel(application=self.application) self.game_scrolled = Gtk.ScrolledWindow(visible=True) self.game_scrolled.set_size_request(320, -1) self.game_scrolled.get_style_context().add_class("game-scrolled") self.game_scrolled.set_policy(Gtk.PolicyType.EXTERNAL, Gtk.PolicyType.EXTERNAL) self.game_scrolled.add(self.game_panel) self.panel_revealer = Gtk.Revealer(visible=True) self.panel_revealer.set_transition_duration(300) self.panel_revealer.set_transition_type(Gtk.RevealerTransitionType.SLIDE_LEFT) self.panel_revealer.set_reveal_child(True) self.panel_revealer.add(self.game_scrolled) self.main_box.pack_end(self.panel_revealer, False, False, 0) self.view.show() self.game_store.load() # Contextual menu self.view.contextual_menu = ContextualMenu(self.game_actions.get_game_actions()) # Sidebar self.sidebar_revealer.set_reveal_child(self.sidebar_visible) self.sidebar_revealer.set_transition_duration(300) self.update_runtime() # Connect account and/or sync credentials = api.read_api_key() if credentials: self.on_connect_success(None, credentials["username"]) else: self.toggle_connection(False) self.sync_library() self.sync_services()
def __init__(self, application, selected=None): super().__init__() self.set_size_request(200, -1) self.application = application self.get_style_context().add_class("sidebar") self.installed_runners = [] self.service_rows = {} self.active_platforms = None self.runners = None self.platforms = None self.categories = None # A dummy objects that allows inspecting why/when we have a show() call on the object. self.running_row = DummyRow() if selected: self.selected_row_type, self.selected_row_id = selected.split(":") else: self.selected_row_type, self.selected_row_id = ("category", "all") self.row_headers = { "library": SidebarHeader(_("Library")), "sources": SidebarHeader(_("Sources")), "runners": SidebarHeader(_("Runners")), "platforms": SidebarHeader(_("Platforms")), } GObject.add_emission_hook(RunnerBox, "runner-installed", self.update) GObject.add_emission_hook(RunnerBox, "runner-removed", self.update) GObject.add_emission_hook(ServicesBox, "services-changed", self.on_services_changed) GObject.add_emission_hook(Game, "game-start", self.on_game_start) GObject.add_emission_hook(Game, "game-stop", self.on_game_stop) GObject.add_emission_hook(Game, "game-updated", self.update) GObject.add_emission_hook(Game, "game-removed", self.update) GObject.add_emission_hook(BaseService, "service-login", self.on_service_auth_changed) GObject.add_emission_hook(BaseService, "service-logout", self.on_service_auth_changed) GObject.add_emission_hook(BaseService, "service-games-load", self.on_service_games_updating) GObject.add_emission_hook(BaseService, "service-games-loaded", self.on_service_games_updated) self.set_filter_func(self._filter_func) self.set_header_func(self._header_func) self.show_all()
def add_hook(self, keyval, callback): if not self._hooks: GObject.add_emission_hook(Gtk.Window, 'key-press-event', self._on_window_key_press_event) self._hooks[keyval] = callback
def __init__(self, application, **kwargs): width = int(settings.read_setting("width") or self.default_width) height = int(settings.read_setting("height") or self.default_height) super().__init__(default_width=width, default_height=height, icon_name="lutris", application=application, **kwargs) self.application = application self.runtime_updater = RuntimeUpdater() self.threads_stoppers = [] self.selected_runner = None self.selected_platform = None self.icon_type = None # Load settings self.window_size = (width, height) self.maximized = settings.read_setting("maximized") == "True" view_type = self.get_view_type() self.load_icon_type_from_settings(view_type) # Window initialization self.game_actions = GameActions(application=application, window=self) self.search_terms = None self.search_timer_id = None self.search_mode = "local" self.game_store = self.get_store() self.view = self.get_view(view_type) GObject.add_emission_hook(Game, "game-updated", self.on_game_updated) GObject.add_emission_hook(Game, "game-removed", self.on_game_updated) GObject.add_emission_hook(Game, "game-installed", self.on_game_installed) GObject.add_emission_hook(GenericPanel, "running-game-selected", self.game_selection_changed) self.connect("delete-event", self.on_window_delete) if self.maximized: self.maximize() self.init_template() self._init_actions() self._bind_zoom_adjustment() # Load view self.games_scrollwindow.add(self.view) self._connect_signals() # Set theme to dark if set in the settings self.set_dark_theme() self.set_viewtype_icon(view_type) # Add additional widgets lutris_icon = Gtk.Image.new_from_icon_name("lutris", Gtk.IconSize.MENU) lutris_icon.set_margin_right(10) lutris_icon.set_margin_left(10) self.website_search_toggle.set_image(lutris_icon) self.website_search_toggle.set_tooltip_text("Search on Lutris.net") self.sidebar_listbox = SidebarListBox() self.sidebar_listbox.set_size_request(250, -1) self.sidebar_listbox.connect("selected-rows-changed", self.on_sidebar_changed) self.sidebar_scrolled.add(self.sidebar_listbox) self.game_panel = GenericPanel(application=self.application) self.game_scrolled = Gtk.ScrolledWindow(visible=True) self.game_scrolled.set_size_request(320, -1) self.game_scrolled.get_style_context().add_class("game-scrolled") self.game_scrolled.set_policy(Gtk.PolicyType.EXTERNAL, Gtk.PolicyType.EXTERNAL) self.game_scrolled.add(self.game_panel) self.panel_revealer = Gtk.Revealer(visible=True) self.panel_revealer.set_transition_duration(300) self.panel_revealer.set_transition_type( Gtk.RevealerTransitionType.SLIDE_LEFT) self.panel_revealer.set_reveal_child(True) self.panel_revealer.add(self.game_scrolled) self.main_box.pack_end(self.panel_revealer, False, False, 0) self.view.show() self.game_store.load() # Contextual menu self.view.contextual_menu = ContextualMenu( self.game_actions.get_game_actions()) # Sidebar self.sidebar_revealer.set_reveal_child(self.sidebar_visible) self.sidebar_revealer.set_transition_duration(300) self.update_runtime() # Connect account and/or sync credentials = api.read_api_key() if credentials: self.on_connect_success(None, credentials["username"]) else: self.toggle_connection(False) self.sync_library() self.sync_services()
def __init__(self, application, **kwargs): width = int(settings.read_setting("width") or self.default_width) height = int(settings.read_setting("height") or self.default_height) super().__init__(default_width=width, default_height=height, window_position=Gtk.WindowPosition.NONE, name="lutris", icon_name="lutris", application=application, **kwargs) update_desktop_icons() load_icon_theme() self.application = application self.window_x = settings.read_setting("window_x") self.window_y = settings.read_setting("window_y") if self.window_x and self.window_y: self.move(int(self.window_x), int(self.window_y)) self.threads_stoppers = [] self.window_size = (width, height) self.maximized = settings.read_setting("maximized") == "True" self.service = None self.game_actions = GameActions(application=application, window=self) self.search_timer_id = None self.selected_category = settings.read_setting("selected_category", default="runner:all") self.filters = self.load_filters() self.set_service(self.filters.get("service")) self.icon_type = self.load_icon_type() self.game_store = GameStore(self.service, self.service_media) self.view = Gtk.Box() self.connect("delete-event", self.on_window_delete) self.connect("configure-event", self.on_window_configure) self.connect("realize", self.on_load) if self.maximized: self.maximize() self.init_template() self._init_actions() self.set_dark_theme() self.set_viewtype_icon(self.view_type) lutris_icon = Gtk.Image.new_from_icon_name("lutris", Gtk.IconSize.MENU) lutris_icon.set_margin_right(3) self.sidebar = LutrisSidebar(self.application, selected=self.selected_category) self.sidebar.connect("selected-rows-changed", self.on_sidebar_changed) self.sidebar_scrolled.add(self.sidebar) self.sidebar_revealer.set_reveal_child(self.side_panel_visible) self.sidebar_revealer.set_transition_duration(300) self.tabs_box.hide() self.game_bar = None self.revealer_box = Gtk.HBox(visible=True) self.game_revealer.add(self.revealer_box) self.connect("view-updated", self.update_store) GObject.add_emission_hook(BaseService, "service-login", self.on_service_login) GObject.add_emission_hook(BaseService, "service-logout", self.on_service_logout) GObject.add_emission_hook(BaseService, "service-games-load", self.on_service_games_updating) GObject.add_emission_hook(BaseService, "service-games-loaded", self.on_service_games_updated) GObject.add_emission_hook(Game, "game-updated", self.on_game_collection_changed) GObject.add_emission_hook(Game, "game-removed", self.on_game_collection_changed)
def __init__(self, db_game, game_actions, application): """Create the game bar with a database row""" super().__init__(visible=True) GObject.add_emission_hook(Game, "game-start", self.on_game_state_changed) GObject.add_emission_hook(Game, "game-started", self.on_game_state_changed) GObject.add_emission_hook(Game, "game-stopped", self.on_game_state_changed) GObject.add_emission_hook(Game, "game-updated", self.on_game_state_changed) GObject.add_emission_hook(Game, "game-removed", self.on_game_state_changed) GObject.add_emission_hook(Game, "game-installed", self.on_game_state_changed) self.set_margin_bottom(12) self.game_actions = game_actions self.db_game = db_game if db_game.get("service"): self.service = services.get_services()[db_game["service"]]() else: self.service = None game_id = None if "service_id" in db_game: self.appid = db_game["service_id"] game_id = db_game["id"] elif self.service: self.appid = db_game["appid"] if self.service.id == "lutris": game = get_game_by_field(self.appid, field="slug") else: game = get_game_for_service(self.service.id, self.appid) if game: game_id = game["id"] if game_id: self.game = application.get_game_by_id(game_id) or Game(game_id) game_actions.set_game(self.game) else: self.game = Game() self.game_name = db_game["name"] self.game_slug = db_game["slug"] self.update_view()
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 __init__(self, grid): self.line_count = 0 self.grid = grid GObject.add_emission_hook(Page, "update", self.on_update_page)
def __init__(self, application, selected=None): super().__init__() self.set_size_request(200, -1) self.application = application self.get_style_context().add_class("sidebar") self.installed_runners = [] self.service_rows = {} self.active_platforms = None self.runners = None self.platforms = None self.categories = None self.running_row = None if selected: self.selected_row_type, self.selected_row_id = selected.split(":") else: self.selected_row_type, self.selected_row_id = ("category", "all") self.row_headers = { "library": SidebarHeader(_("Library")), "sources": SidebarHeader(_("Sources")), "runners": SidebarHeader(_("Runners")), "platforms": SidebarHeader(_("Platforms")), } GObject.add_emission_hook(RunnersDialog, "runner-installed", self.update) GObject.add_emission_hook(RunnersDialog, "runner-removed", self.update) GObject.add_emission_hook(Game, "game-start", self.on_game_start) GObject.add_emission_hook(Game, "game-stop", self.on_game_stop) GObject.add_emission_hook(Game, "game-updated", self.update) GObject.add_emission_hook(Game, "game-removed", self.update) GObject.add_emission_hook(BaseService, "service-logout", self.on_service_logout) GObject.add_emission_hook(BaseService, "service-games-load", self.on_service_games_updating) GObject.add_emission_hook(BaseService, "service-games-loaded", self.on_service_games_updated) self.connect("realize", self.on_realize) self.set_filter_func(self._filter_func) self.set_header_func(self._header_func) self.show_all()
def __init__(self, application, **kwargs): width = int(settings.read_setting("width") or self.default_width) height = int(settings.read_setting("height") or self.default_height) super().__init__(default_width=width, default_height=height, icon_name="lutris", application=application, **kwargs) self.application = application self.runtime_updater = RuntimeUpdater() self.threads_stoppers = [] self.selected_runner = None self.selected_platform = None self.icon_type = None # Load settings self.window_size = (width, height) self.maximized = settings.read_setting("maximized") == "True" view_type = self.get_view_type() self.load_icon_type_from_settings(view_type) # Window initialization self.game_actions = GameActions(application=application, window=self) self.game_store = GameStore( self.icon_type, self.filter_installed, self.view_sorting, self.view_sorting_ascending, self.show_installed_first, ) self.view = self.get_view(view_type) GObject.add_emission_hook(Game, "game-updated", self.on_game_updated) self.game_store.connect("sorting-changed", self.on_game_store_sorting_changed) self.connect("delete-event", self.on_window_delete) if self.maximized: self.maximize() self.init_template() self._init_actions() self._bind_zoom_adjustment() # Load view self.games_scrollwindow.add(self.view) self._connect_signals() # Set theme to dark if set in the settings self.set_dark_theme() self.set_viewtype_icon(view_type) # Add additional widgets self.sidebar_listbox = SidebarListBox() self.sidebar_listbox.set_size_request(250, -1) self.sidebar_listbox.connect("selected-rows-changed", self.on_sidebar_changed) self.sidebar_scrolled.add(self.sidebar_listbox) self.game_scrolled = Gtk.ScrolledWindow(visible=True) self.game_scrolled.set_size_request(320, -1) self.game_scrolled.get_style_context().add_class("game-scrolled") self.game_scrolled.set_policy(Gtk.PolicyType.EXTERNAL, Gtk.PolicyType.EXTERNAL) self.game_panel = GenericPanel() self.game_scrolled.add(self.game_panel) self.main_box.pack_end(self.game_scrolled, False, False, 0) self.view.show() # Contextual menu self.view.contextual_menu = ContextualMenu( self.game_actions.get_game_actions()) self.game_store.load() # Sidebar self.sidebar_revealer.set_reveal_child(self.sidebar_visible) self.update_runtime() # Connect account and/or sync credentials = api.read_api_key() if credentials: self.on_connect_success(None, credentials["username"]) else: self.toggle_connection(False) self.sync_library() self.sync_services()