Extracted class from app.py
This commit is contained in:
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal 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
|
||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
from collections import OrderedDict
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
@@ -15,64 +13,6 @@ from .constants import constants
|
|||||||
from .ui.clan_select_list import ClanSelectPage
|
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):
|
class ClanJoinPage(Gtk.Box):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -97,7 +37,7 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
self.notebook = Gtk.Notebook()
|
self.notebook = Gtk.Notebook()
|
||||||
vbox.add(self.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"))
|
self.notebook.append_page(ClanJoinPage(), Gtk.Label(label="Join"))
|
||||||
|
|
||||||
# Must be called AFTER all components were added
|
# Must be called AFTER all components were added
|
||||||
|
|||||||
@@ -1,23 +1,29 @@
|
|||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from typing import TYPE_CHECKING
|
|
||||||
|
|
||||||
from gi.repository import GdkPixbuf, Gtk
|
from gi.repository import GdkPixbuf, Gtk
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
from ..models import VM, list_vms
|
||||||
from ..app import VM
|
|
||||||
|
|
||||||
|
|
||||||
class ClanSelectPage(Gtk.Box):
|
class ClanSelectPage(Gtk.Box):
|
||||||
def __init__(self, vms: list["VM"]) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__(orientation=Gtk.Orientation.VERTICAL, expand=True)
|
super().__init__(orientation=Gtk.Orientation.VERTICAL, expand=True)
|
||||||
|
|
||||||
self.add(ClanSelectList(vms, self.on_cell_toggled, self.on_select_row, self.on_double_click))
|
vms = list_vms()
|
||||||
self.add(
|
|
||||||
ClanSelectButtons(
|
|
||||||
self.on_start_clicked, self.on_stop_clicked, self.on_backup_clicked
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
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:
|
def on_start_clicked(self, widget: Gtk.Widget) -> None:
|
||||||
print("Start clicked")
|
print("Start clicked")
|
||||||
@@ -42,13 +48,12 @@ class ClanSelectPage(Gtk.Box):
|
|||||||
def on_select_row(self, selection: Gtk.TreeSelection) -> None:
|
def on_select_row(self, selection: Gtk.TreeSelection) -> None:
|
||||||
model, row = selection.get_selected()
|
model, row = selection.get_selected()
|
||||||
if row is not None:
|
if row is not None:
|
||||||
print(f"Selected {model[row][0]}")
|
print(f"Selected {model[row][1]}")
|
||||||
|
|
||||||
def on_double_click(self, tree_view, path, column) -> None:
|
|
||||||
|
|
||||||
model = tree_view.get_model()
|
|
||||||
iter = model.get_iter(path)
|
|
||||||
|
|
||||||
|
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
|
# Get the selection object of the tree view
|
||||||
selection = tree_view.get_selection()
|
selection = tree_view.get_selection()
|
||||||
model, row = selection.get_selected()
|
model, row = selection.get_selected()
|
||||||
@@ -59,6 +64,7 @@ class ClanSelectPage(Gtk.Box):
|
|||||||
class ClanSelectButtons(Gtk.Box):
|
class ClanSelectButtons(Gtk.Box):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
*,
|
||||||
on_start_clicked: Callable[[Gtk.Widget], None],
|
on_start_clicked: Callable[[Gtk.Widget], None],
|
||||||
on_stop_clicked: Callable[[Gtk.Widget], None],
|
on_stop_clicked: Callable[[Gtk.Widget], None],
|
||||||
on_backup_clicked: Callable[[Gtk.Widget], None],
|
on_backup_clicked: Callable[[Gtk.Widget], None],
|
||||||
@@ -81,7 +87,8 @@ class ClanSelectButtons(Gtk.Box):
|
|||||||
class ClanSelectList(Gtk.Box):
|
class ClanSelectList(Gtk.Box):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
vms: list["VM"],
|
*,
|
||||||
|
vms: list[VM],
|
||||||
on_cell_toggled: Callable[[Gtk.Widget, str], None],
|
on_cell_toggled: Callable[[Gtk.Widget, str], None],
|
||||||
on_select_row: Callable[[Gtk.TreeSelection], None],
|
on_select_row: Callable[[Gtk.TreeSelection], None],
|
||||||
on_double_click: Callable[[Gtk.TreeSelection], None],
|
on_double_click: Callable[[Gtk.TreeSelection], None],
|
||||||
|
|||||||
1
pkgs/clan-vm-manager/test_democlan
Submodule
1
pkgs/clan-vm-manager/test_democlan
Submodule
Submodule pkgs/clan-vm-manager/test_democlan added at 99f20170a9
Reference in New Issue
Block a user