diff --git a/lazy_player/__init__.py b/lazy_player/__init__.py index 6dcaa38..7f471d4 100644 --- a/lazy_player/__init__.py +++ b/lazy_player/__init__.py @@ -11,6 +11,8 @@ from gi.repository import Gdk, Gtk # NOQA: E402 class MainWindow(Gtk.ApplicationWindow): + file_info_label: Gtk.Label + def __init__(self, *args: Any, **kwargs: Any): super().__init__(*args, **kwargs) @@ -30,8 +32,8 @@ class MainWindow(Gtk.ApplicationWindow): left_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) left_box.set_valign(Gtk.Align.CENTER) left_box.set_halign(Gtk.Align.FILL) - left_label = Gtk.Label(label="Left Side") - left_box.append(left_label) + self.file_info_label = Gtk.Label(label="") + left_box.append(self.file_info_label) # Right two-thirds (2/3 width) right_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) @@ -46,7 +48,9 @@ class MainWindow(Gtk.ApplicationWindow): # Create list store and view list_store = Gtk.StringList() list_view = Gtk.ListView() - list_view.set_model(Gtk.SingleSelection.new(list_store)) + selection_model = Gtk.SingleSelection.new(list_store) + selection_model.connect("selection-changed", self._on_selection_changed) + list_view.set_model(selection_model) list_view.set_vexpand(True) # Factory for list items @@ -65,39 +69,56 @@ class MainWindow(Gtk.ApplicationWindow): self.set_child(main_box) - def _setup_list_item(self, factory: Gtk.SignalListItemFactory, list_item: Gtk.ListItem) -> None: + def _setup_list_item(self, factory: Gtk.SignalListItemFactory, list_item: Gtk.ListItem): label = Gtk.Label() label.set_halign(Gtk.Align.START) list_item.set_child(label) - def _bind_list_item(self, factory: Gtk.SignalListItemFactory, list_item: Gtk.ListItem) -> None: + def _bind_list_item(self, factory: Gtk.SignalListItemFactory, list_item: Gtk.ListItem): label = cast(Gtk.Label, list_item.get_child()) item = cast(Gtk.StringObject, list_item.get_item()) label.set_text(item.get_string()) + def _on_selection_changed( + self, + selection_model: Gtk.SingleSelection, + position: int, + n_items: int, + ): + if selection_model.get_selected() == Gtk.INVALID_LIST_POSITION: + self.file_info_label.set_text("") + else: + selected_item = selection_model.get_selected_item() + if selected_item: + string_obj = cast(Gtk.StringObject, selected_item) + self.file_info_label.set_text(string_obj.get_string()) + def _populate_file_list(self, list_store: Gtk.StringList) -> None: # TODO: Implement proper version sort (strverscmp equivalent) - directories: list[str] = [".."] + directories: list[str] = ["../"] files: list[str] = [] with os.scandir(".") as it: for entry in it: if entry.name == ".." or not entry.name.startswith("."): if entry.is_dir(): - directories.append(entry.name) + directories.append(entry.name + "/") else: files.append(entry.name) directories.sort(key=lambda x: x.lower()) files.sort(key=lambda x: x.lower()) - for name in directories: - list_store.append(f"{name}/") + while list_store.get_n_items(): + list_store.remove(0) - for name in files: + for name in directories + files: list_store.append(name) + all = directories + files + self.file_info_label.set_text(all[0] if all else "") + class App(Gtk.Application): def __init__(self):