mirror of
https://github.com/lutris/lutris
synced 2024-09-15 22:09:55 +00:00
Update runners sidebar whenever games are added/removed/modified
This commit is contained in:
parent
5eb6924dc6
commit
59ff8f2504
|
@ -140,12 +140,13 @@ class LutrisWindow(object):
|
|||
# Timer
|
||||
self.timer_id = GLib.timeout_add(2000, self.refresh_status)
|
||||
|
||||
# Sidebar
|
||||
sidebar_paned = self.builder.get_object('sidebar_paned')
|
||||
sidebar_paned.set_position(150)
|
||||
sidebar_treeview = SidebarTreeView()
|
||||
sidebar_treeview.connect('cursor-changed', self.on_sidebar_changed)
|
||||
self.sidebar_treeview = SidebarTreeView()
|
||||
self.sidebar_treeview.connect('cursor-changed', self.on_sidebar_changed)
|
||||
self.sidebar_viewport = self.builder.get_object('sidebar_viewport')
|
||||
self.sidebar_viewport.add(sidebar_treeview)
|
||||
self.sidebar_viewport.add(self.sidebar_treeview)
|
||||
|
||||
# Window initialization
|
||||
self.window = self.builder.get_object("window")
|
||||
|
@ -247,6 +248,7 @@ class LutrisWindow(object):
|
|||
def set_library_synced(result, error):
|
||||
self.set_status("Library synced")
|
||||
self.switch_splash_screen()
|
||||
self.sidebar_treeview.update()
|
||||
self.set_status("Syncing library")
|
||||
sync = Sync()
|
||||
async_call(
|
||||
|
@ -436,6 +438,7 @@ class LutrisWindow(object):
|
|||
|
||||
def on_game_installed(self, view, slug):
|
||||
view.set_installed(Game(slug))
|
||||
self.sidebar_treeview.update()
|
||||
|
||||
def on_image_downloaded(self, game_slug):
|
||||
is_installed = Game(game_slug).is_installed
|
||||
|
@ -447,6 +450,7 @@ class LutrisWindow(object):
|
|||
add_game_dialog.run()
|
||||
if add_game_dialog.saved:
|
||||
self.view.set_installed(game)
|
||||
self.sidebar_treeview.update()
|
||||
|
||||
def on_view_game_log_activate(self, widget):
|
||||
if not self.running_game:
|
||||
|
@ -471,6 +475,7 @@ class LutrisWindow(object):
|
|||
def do_add_game():
|
||||
self.view.add_game(game)
|
||||
self.switch_splash_screen()
|
||||
self.sidebar_treeview.update()
|
||||
GLib.idle_add(do_add_game)
|
||||
|
||||
def on_remove_game(self, _widget, _data=None):
|
||||
|
@ -482,11 +487,13 @@ class LutrisWindow(object):
|
|||
def do_remove_game():
|
||||
self.view.remove_game(game_slug)
|
||||
self.switch_splash_screen()
|
||||
self.sidebar_treeview.update()
|
||||
|
||||
if from_library:
|
||||
GLib.idle_add(do_remove_game)
|
||||
else:
|
||||
self.view.update_image(game_slug, is_installed=False)
|
||||
self.sidebar_treeview.update()
|
||||
|
||||
def on_browse_files(self, widget):
|
||||
game = Game(self.view.selected_game)
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
from gi.repository import Gtk, GdkPixbuf
|
||||
|
||||
import lutris.runners
|
||||
from lutris import pga
|
||||
from lutris.gui.widgets import get_runner_icon
|
||||
|
||||
|
@ -9,9 +11,12 @@ ICON = 1
|
|||
class SidebarTreeView(Gtk.TreeView):
|
||||
|
||||
def __init__(self):
|
||||
self.model = Gtk.TreeStore(str, GdkPixbuf.Pixbuf)
|
||||
super(SidebarTreeView, self).__init__()
|
||||
|
||||
super(SidebarTreeView, self).__init__(model=self.model)
|
||||
self.model = Gtk.TreeStore(str, GdkPixbuf.Pixbuf)
|
||||
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)
|
||||
|
@ -31,13 +36,15 @@ class SidebarTreeView(Gtk.TreeView):
|
|||
self.set_headers_visible(False)
|
||||
self.set_fixed_height_mode(True)
|
||||
|
||||
self.get_runners()
|
||||
self.used_runners = pga.get_used_runners()
|
||||
self.load_all_runners()
|
||||
self.update()
|
||||
self.expand_all()
|
||||
|
||||
def get_runners(self):
|
||||
def load_all_runners(self):
|
||||
"""Append runners to the model."""
|
||||
runner_node = self.model.append(None, ["Runners", None])
|
||||
runners = pga.get_runners()
|
||||
runners = lutris.runners.__all__
|
||||
for runner in runners:
|
||||
icon = get_runner_icon(runner, format='pixbuf', size=(16, 16))
|
||||
self.model.append(runner_node, [runner, icon])
|
||||
|
@ -51,3 +58,12 @@ class SidebarTreeView(Gtk.TreeView):
|
|||
runner_name = model.get_value(iter, LABEL)
|
||||
if runner_name != 'Runners':
|
||||
return runner_name
|
||||
|
||||
def filter_rule(self, model, iter, data):
|
||||
if model[iter][0] == 'Runners':
|
||||
return True
|
||||
return model[iter][0] in self.used_runners
|
||||
|
||||
def update(self):
|
||||
self.used_runners = pga.get_used_runners()
|
||||
self.model_filter.refilter()
|
||||
|
|
|
@ -242,7 +242,8 @@ def check_for_file(game, file_id):
|
|||
return False
|
||||
|
||||
|
||||
def get_runners():
|
||||
def get_used_runners():
|
||||
"""Return a list of the runners in use by installed games."""
|
||||
with sql.db_cursor(PGA_DB) as cursor:
|
||||
query = ("select distinct runner from games "
|
||||
"where runner is not null order by runner")
|
||||
|
|
Loading…
Reference in a new issue