forked from clan/clan-core
Merge pull request 'prepare details view' (#755) from hsjobeki-main into main
This commit is contained in:
commit
7b953fe7ab
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:
|
||||
VMS.use().refresh()
|
||||
|
||||
# TODO(@hsjobeki): Confirm and edit details
|
||||
# Views.use().view.set_visible_child_name("details")
|
||||
|
||||
Join.use().join(item, cb=on_join)
|
||||
|
||||
# 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.use_views import Views
|
||||
from clan_vm_manager.views.details import Details
|
||||
from clan_vm_manager.views.list import ClanList
|
||||
|
||||
gi.require_version("Adw", "1")
|
||||
@ -26,6 +27,7 @@ class MainWindow(Adw.ApplicationWindow):
|
||||
Views.use().set_main_window(self)
|
||||
|
||||
stack_view.add_named(ClanList(), "list")
|
||||
stack_view.add_named(Details(), "details")
|
||||
|
||||
stack_view.set_visible_child_name(config.initial_view)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user