1
0
forked from clan/clan-core

Merge pull request 'prepare details view' (#755) from hsjobeki-main into main

This commit is contained in:
clan-bot 2024-01-21 11:48:36 +00:00
commit 7b953fe7ab
3 changed files with 60 additions and 0 deletions

View 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

View File

@ -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

View File

@ -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)