clan-core/pkgs/clan-vm-manager/clan_vm_manager/app.py

69 lines
2.1 KiB
Python
Raw Normal View History

2023-11-25 00:55:01 +00:00
#!/usr/bin/env python3
2023-11-21 17:13:30 +00:00
2023-11-25 00:55:01 +00:00
import argparse
2023-11-21 17:13:30 +00:00
2023-11-25 00:55:01 +00:00
import gi
2023-11-21 17:13:30 +00:00
2023-11-25 00:55:01 +00:00
gi.require_version("Gtk", "3.0")
2023-11-28 09:31:25 +00:00
from gi.repository import Gtk
2023-11-28 09:23:49 +00:00
vms = [
("clan://clan.lol", True, "/home/user/my-clan"),
("clan://lassul.lol", False, "/home/user/my-clan"),
("clan://mic.lol", False, "/home/user/my-clan"),
]
2023-11-28 09:31:25 +00:00
class MainWindow(Gtk.Window):
2023-11-28 09:23:49 +00:00
def __init__(self) -> None:
super().__init__()
# Initialize the main window
self.set_title("Clan VM Manager")
self.connect("delete-event", Gtk.main_quit)
# Some styling
self.set_border_width(10)
# self.set_default_size(500,300)
2023-11-28 09:31:25 +00:00
2023-11-28 09:23:49 +00:00
# Add a notebook layout
# https://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html#notebook
self.notebook = Gtk.Notebook()
self.add(self.notebook)
2023-11-28 09:31:25 +00:00
vms_store = Gtk.ListStore(str, bool, str)
2023-11-28 09:23:49 +00:00
for vm in vms:
vms_store.append(list(vm))
2023-11-28 09:31:25 +00:00
self.machine_tree_view = Gtk.TreeView(vms_store)
2023-11-28 09:23:49 +00:00
for idx, title in enumerate(["Url", "Autostart", "Path"]):
renderer = Gtk.CellRendererText()
2023-11-28 09:31:25 +00:00
col = Gtk.TreeViewColumn(title, renderer, text=idx)
2023-11-28 09:23:49 +00:00
col.set_sort_column_id(idx)
self.machine_tree_view.append_column(col)
2023-11-28 09:31:25 +00:00
selection = self.machine_tree_view.get_selection()
selection.connect("changed", self.on_select_row)
2023-11-28 09:23:49 +00:00
self.machine_page = Gtk.Box()
2023-11-28 09:31:25 +00:00
self.machine_page.set_border_width(10)
2023-11-28 09:23:49 +00:00
self.machine_page.add(self.machine_tree_view)
self.notebook.append_page(self.machine_page, Gtk.Label(label="Overview"))
self.join_page = Gtk.Box()
self.join_page.set_border_width(10)
self.join_page.add(Gtk.Label(label="Add/Join another clan"))
2023-11-28 09:31:25 +00:00
self.notebook.append_page(self.join_page, Gtk.Label(label="Add/Join"))
2023-11-25 00:55:01 +00:00
2023-11-28 09:23:49 +00:00
# Must be called AFTER all components were added
self.show_all()
2023-11-28 09:31:25 +00:00
def on_select_row(self, selection):
model, row = selection.get_selected()
if row is not None:
print(f"Selected {model[row][0]}")
2023-11-25 00:55:01 +00:00
def start_app(args: argparse.Namespace) -> None:
2023-11-28 09:23:49 +00:00
MainWindow()
2023-11-28 09:31:25 +00:00
Gtk.main()