47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
# Copyright 2023 (c) Anna Schumaker.
|
|
"""Our sidebar for selecting a specific xfstests run to view."""
|
|
import typing
|
|
from gi.repository import GObject
|
|
from gi.repository import Gio
|
|
from gi.repository import Gtk
|
|
from . import row
|
|
from . import tree
|
|
|
|
|
|
class RunidView(Gtk.ScrolledWindow):
|
|
"""Our RunidView class."""
|
|
|
|
runid = GObject.Property(type=int)
|
|
model = GObject.Property(type=Gio.ListModel)
|
|
|
|
def __init__(self, model: tree.DateDeviceList) -> None:
|
|
"""Initialize a RunidView instance."""
|
|
super().__init__(model=model, vexpand=True)
|
|
self._selection = Gtk.SingleSelection(model=model.treemodel)
|
|
self._view = Gtk.ListView(model=self._selection,
|
|
factory=row.SidebarFactory(),
|
|
single_click_activate=True)
|
|
|
|
self._view.connect("activate", self.__activate)
|
|
self.connect("notify::model", self.__notify_model)
|
|
|
|
self._view.add_css_class("navigation-sidebar")
|
|
self._view.add_css_class("background")
|
|
self.set_child(self._view)
|
|
|
|
def __activate(self, view: Gtk.ListView, position: int) -> None:
|
|
treeitem = self._selection[position]
|
|
item = treeitem.get_item()
|
|
if isinstance(item, tree.XfstestsRun):
|
|
self.runid = item.runid
|
|
elif treeitem.props.expanded:
|
|
treeitem.props.expanded = False
|
|
else:
|
|
treeitem.props.expanded = True
|
|
self.runid = item.get_earliest_run().runid
|
|
|
|
def __notify_model(self, sidebar: typing.Self,
|
|
param: GObject.ParamSpec) -> None:
|
|
model = None if self.model is None else self.model.treemodel
|
|
self._selection.props.model = model
|