prepare details view
This commit is contained in:
55
pkgs/clan-vm-manager/clan_vm_manager/views/details.py
Normal file
55
pkgs/clan-vm-manager/clan_vm_manager/views/details.py
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
import os
|
||||||
|
from collections.abc import Callable
|
||||||
|
from functools import partial
|
||||||
|
from typing import Any, Literal
|
||||||
|
|
||||||
|
import gi
|
||||||
|
|
||||||
|
gi.require_version("Adw", "1")
|
||||||
|
from gi.repository import Adw, Gio, GObject, Gtk
|
||||||
|
|
||||||
|
|
||||||
|
def create_details_list(
|
||||||
|
model: Gio.ListStore, render_row: Callable[[Gtk.ListBox, GObject], Gtk.Widget]
|
||||||
|
) -> Gtk.ListBox:
|
||||||
|
boxed_list = Gtk.ListBox()
|
||||||
|
boxed_list.set_selection_mode(Gtk.SelectionMode.NONE)
|
||||||
|
boxed_list.add_css_class("boxed-list")
|
||||||
|
boxed_list.bind_model(model, create_widget_func=partial(render_row, boxed_list))
|
||||||
|
return boxed_list
|
||||||
|
|
||||||
|
|
||||||
|
class PreferencesValue(GObject.Object):
|
||||||
|
variant: Literal["CPU", "MEMORY"]
|
||||||
|
editable: bool
|
||||||
|
data: Any
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self, variant: Literal["CPU", "MEMORY"], editable: bool, data: Any
|
||||||
|
) -> None:
|
||||||
|
super().__init__()
|
||||||
|
self.variant = variant
|
||||||
|
self.editable = editable
|
||||||
|
self.data = data
|
||||||
|
|
||||||
|
|
||||||
|
class Details(Gtk.Box):
|
||||||
|
def __init__(self) -> None:
|
||||||
|
super().__init__(orientation=Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
|
preferences_store = Gio.ListStore.new(PreferencesValue)
|
||||||
|
preferences_store.append(PreferencesValue("CPU", True, 1))
|
||||||
|
|
||||||
|
self.details_list = create_details_list(
|
||||||
|
model=preferences_store, render_row=self.render_entry_row
|
||||||
|
)
|
||||||
|
|
||||||
|
self.append(self.details_list)
|
||||||
|
|
||||||
|
def render_entry_row(
|
||||||
|
self, boxed_list: Gtk.ListBox, item: PreferencesValue
|
||||||
|
) -> Gtk.Widget:
|
||||||
|
row = Adw.SpinRow.new_with_range(0, os.cpu_count(), 1)
|
||||||
|
row.set_value(item.data)
|
||||||
|
|
||||||
|
return row
|
||||||
@@ -169,6 +169,9 @@ class ClanList(Gtk.Box):
|
|||||||
def on_join(_history: list[HistoryEntry]) -> None:
|
def on_join(_history: list[HistoryEntry]) -> None:
|
||||||
VMS.use().refresh()
|
VMS.use().refresh()
|
||||||
|
|
||||||
|
# TODO(@hsjobeki): Confirm and edit details
|
||||||
|
# Views.use().view.set_visible_child_name("details")
|
||||||
|
|
||||||
Join.use().join(item, cb=on_join)
|
Join.use().join(item, cb=on_join)
|
||||||
|
|
||||||
# If the join request list is empty disable the shadow artefact
|
# If the join request list is empty disable the shadow artefact
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import gi
|
|||||||
|
|
||||||
from clan_vm_manager.models.interfaces import ClanConfig
|
from clan_vm_manager.models.interfaces import ClanConfig
|
||||||
from clan_vm_manager.models.use_views import Views
|
from clan_vm_manager.models.use_views import Views
|
||||||
|
from clan_vm_manager.views.details import Details
|
||||||
from clan_vm_manager.views.list import ClanList
|
from clan_vm_manager.views.list import ClanList
|
||||||
|
|
||||||
gi.require_version("Adw", "1")
|
gi.require_version("Adw", "1")
|
||||||
@@ -26,6 +27,7 @@ class MainWindow(Adw.ApplicationWindow):
|
|||||||
Views.use().set_main_window(self)
|
Views.use().set_main_window(self)
|
||||||
|
|
||||||
stack_view.add_named(ClanList(), "list")
|
stack_view.add_named(ClanList(), "list")
|
||||||
|
stack_view.add_named(Details(), "details")
|
||||||
|
|
||||||
stack_view.set_visible_child_name(config.initial_view)
|
stack_view.set_visible_child_name(config.initial_view)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user