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