1
0
forked from clan/clan-core

Extracted class from app.py

This commit is contained in:
Luis Hebendanz 2023-12-01 15:17:54 +01:00
parent 5c9b95c0b9
commit a4a16361c9
4 changed files with 29 additions and 78 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "pkgs/clan-vm-manager/test_democlan"]
path = pkgs/clan-vm-manager/test_democlan
url = gitea@git.clan.lol:clan/democlan.git

View File

@ -2,8 +2,6 @@
import argparse
import sys
from collections import OrderedDict
from pathlib import Path
from typing import Any
import gi
@ -15,64 +13,6 @@ from .constants import constants
from .ui.clan_select_list import ClanSelectPage
class VM:
def __init__(
self,
icon: Path,
name: str,
url: str,
path: Path,
running: bool = False,
autostart: bool = False,
) -> None:
self.icon = icon.resolve()
assert self.icon.exists()
assert self.icon.is_file()
self.url = url
self.autostart = autostart
self.running = running
self.name = name
self.path = path
def list_display(self) -> OrderedDict[str, Any]:
return OrderedDict(
{
"Icon": str(self.icon),
"Name": self.name,
"URL": self.url,
"Running": self.running,
}
)
assets = Path(__file__).parent / "assets"
vms = [
VM(
assets / "cybernet.jpeg",
"Cybernet Clan",
"clan://cybernet.lol",
"/home/user/w-clan",
True,
),
VM(
assets / "zenith.jpeg",
"Zenith Clan",
"clan://zenith.lol",
"/home/user/lassulus-clan",
),
VM(
assets / "firestorm.jpeg",
"Firestorm Clan",
"clan://firestorm.lol",
"/home/user/mic-clan",
),
]
# vms.extend(vms)
# vms.extend(vms)
# vms.extend(vms)
class ClanJoinPage(Gtk.Box):
def __init__(self) -> None:
super().__init__()
@ -97,7 +37,7 @@ class MainWindow(Gtk.ApplicationWindow):
self.notebook = Gtk.Notebook()
vbox.add(self.notebook)
self.notebook.append_page(ClanSelectPage(vms), Gtk.Label(label="Overview"))
self.notebook.append_page(ClanSelectPage(), Gtk.Label(label="Overview"))
self.notebook.append_page(ClanJoinPage(), Gtk.Label(label="Join"))
# Must be called AFTER all components were added

View File

@ -1,23 +1,29 @@
from collections.abc import Callable
from typing import TYPE_CHECKING
from gi.repository import GdkPixbuf, Gtk
if TYPE_CHECKING:
from ..app import VM
from ..models import VM, list_vms
class ClanSelectPage(Gtk.Box):
def __init__(self, vms: list["VM"]) -> None:
def __init__(self) -> None:
super().__init__(orientation=Gtk.Orientation.VERTICAL, expand=True)
self.add(ClanSelectList(vms, self.on_cell_toggled, self.on_select_row, self.on_double_click))
self.add(
ClanSelectButtons(
self.on_start_clicked, self.on_stop_clicked, self.on_backup_clicked
)
)
vms = list_vms()
list_hooks = {
"on_cell_toggled": self.on_cell_toggled,
"on_select_row": self.on_select_row,
"on_double_click": self.on_double_click,
}
self.add(ClanSelectList(vms=vms, **list_hooks))
button_hooks = {
"on_start_clicked": self.on_start_clicked,
"on_stop_clicked": self.on_stop_clicked,
"on_backup_clicked": self.on_backup_clicked,
}
self.add(ClanSelectButtons(**button_hooks))
def on_start_clicked(self, widget: Gtk.Widget) -> None:
print("Start clicked")
@ -42,13 +48,12 @@ class ClanSelectPage(Gtk.Box):
def on_select_row(self, selection: Gtk.TreeSelection) -> None:
model, row = selection.get_selected()
if row is not None:
print(f"Selected {model[row][0]}")
def on_double_click(self, tree_view, path, column) -> None:
model = tree_view.get_model()
iter = model.get_iter(path)
print(f"Selected {model[row][1]}")
def on_double_click(
self, tree_view: Gtk.TreeView, path: Gtk.TreePath, column: Gtk.TreeViewColumn
) -> None:
breakpoint()
# Get the selection object of the tree view
selection = tree_view.get_selection()
model, row = selection.get_selected()
@ -59,6 +64,7 @@ class ClanSelectPage(Gtk.Box):
class ClanSelectButtons(Gtk.Box):
def __init__(
self,
*,
on_start_clicked: Callable[[Gtk.Widget], None],
on_stop_clicked: Callable[[Gtk.Widget], None],
on_backup_clicked: Callable[[Gtk.Widget], None],
@ -81,7 +87,8 @@ class ClanSelectButtons(Gtk.Box):
class ClanSelectList(Gtk.Box):
def __init__(
self,
vms: list["VM"],
*,
vms: list[VM],
on_cell_toggled: Callable[[Gtk.Widget, str], None],
on_select_row: Callable[[Gtk.TreeSelection], None],
on_double_click: Callable[[Gtk.TreeSelection], None],

@ -0,0 +1 @@
Subproject commit 99f20170a9a122b4349fbb5226d1f07183dc1bd9