Added windows folder

This commit is contained in:
Luis Hebendanz 2023-12-06 18:38:19 +01:00
parent a5caed0de9
commit 6b8216b3ac
5 changed files with 128 additions and 95 deletions

View File

@ -1,23 +1,11 @@
import argparse
from .app import Application
from clan_cli.clan_uri import ClanURI
def join_command(args: argparse.Namespace) -> None:
print("Joining the flake")
print(args.clan_uri)
app = Application()
return app.run()
def register_join_parser(parser: argparse.ArgumentParser) -> None:
parser.add_argument("clan_uri", type=str, help="clan URI to join")
parser.set_defaults(func=join_command)
def start_app(args: argparse.Namespace) -> None:
app = Application()
return app.run()
from .windows.join import register_join_parser
from .windows.overview import show_overview, OverviewWindow
def main() -> None:
@ -32,6 +20,6 @@ def main() -> None:
register_join_parser(subparser.add_parser("join", help="join a clan"))
# Executed when no command is given
parser.set_defaults(func=start_app)
parser.set_defaults(func=show_overview)
args = parser.parse_args()
args.func(args)

View File

@ -15,96 +15,22 @@ from .ui.clan_join_page import ClanJoinPage
from .ui.clan_select_list import ClanEdit, ClanList
class MainWindow(Gtk.ApplicationWindow):
def __init__(self, application: Gtk.Application) -> None:
super().__init__(application=application)
# Initialize the main window
self.set_title("cLAN Manager")
self.connect("delete-event", self.on_quit)
self.set_default_size(800, 600)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6, expand=True)
self.add(vbox)
# Add a notebook layout
# https://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html#notebook
self.notebook = Gtk.Notebook()
self.stack = Gtk.Stack()
# self.stack_switcher = Gtk.StackSwitcher()
self.list_hooks = {
"remount_list": self.remount_list_view,
"remount_edit": self.remount_edit_view,
"set_selected": self.set_selected,
}
clan_list = ClanList(**self.list_hooks, selected_vm=None) # type: ignore
# Add named stacks
self.stack.add_titled(clan_list, "list", "List")
self.stack.add_titled(
ClanJoinPage(stack=self.remount_list_view), "join", "Join"
)
self.stack.add_titled(
ClanEdit(remount_list=self.remount_list_view, selected_vm=None),
"edit",
"Edit",
)
vbox.add(self.stack)
# Must be called AFTER all components were added
self.show_all()
def set_selected(self, sel: VMBase | None) -> None:
self.selected_vm = sel
if self.selected_vm:
print(f"APP selected + {self.selected_vm.name}")
def remount_list_view(self) -> None:
widget = self.stack.get_child_by_name("list")
print("Remounting ClanListView")
if widget:
widget.destroy()
clan_list = ClanList(**self.list_hooks, selected_vm=self.selected_vm) # type: ignore
self.stack.add_titled(clan_list, "list", "List")
self.show_all()
self.stack.set_visible_child_name("list")
def remount_edit_view(self) -> None:
print("Remounting ClanEdit")
widget = self.stack.get_child_by_name("edit")
if widget:
widget.destroy()
self.stack.add_titled(
ClanEdit(remount_list=self.remount_list_view, selected_vm=self.selected_vm),
"edit",
"Edit",
)
self.show_all()
self.stack.set_visible_child_name("edit")
def on_quit(self, *args: Any) -> None:
Gio.Application.quit(self.get_application())
class Application(Gtk.Application):
def __init__(self) -> None:
def __init__(self, window: Gtk.ApplicationWindow) -> None:
super().__init__(
application_id=constants["APPID"], flags=Gio.ApplicationFlags.FLAGS_NONE
)
self.init_style()
self.window = window
def do_startup(self) -> None:
Gtk.Application.do_startup(self)
Gtk.init(sys.argv)
Gtk.init()
def do_activate(self) -> None:
win = self.props.active_window
if not win:
# win = SwitchTreeView(application=self)
win = MainWindow(application=self)
win = self.window(application=self)
win.present()
# TODO: For css styling

View File

@ -0,0 +1,16 @@
from ..app import Application
import argparse
from .overview import OverviewWindow
from clan_cli.clan_uri import ClanURI
def show_join(args: argparse.Namespace) -> None:
print(f"Joining clan {args.clan_uri}")
app = Application(OverviewWindow)
return app.run()
def register_join_parser(parser: argparse.ArgumentParser) -> None:
parser.add_argument("clan_uri", type=ClanURI, help="clan URI to join")
parser.set_defaults(func=show_join)

View File

@ -0,0 +1,103 @@
import sys
from typing import Any
import gi
from ..models import VMBase
gi.require_version("Gtk", "3.0")
from gi.repository import Gio, Gtk
from ..constants import constants
from ..ui.clan_join_page import ClanJoinPage
from ..ui.clan_select_list import ClanEdit, ClanList
from ..app import Application
from clan_cli.clan_uri import ClanURI
import argparse
class OverviewWindow(Gtk.ApplicationWindow):
def __init__(self, application: Gtk.Application) -> None:
super().__init__(application=application)
# Initialize the main window
self.set_title("cLAN Manager")
self.connect("delete-event", self.on_quit)
self.set_default_size(800, 600)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6, expand=True)
self.add(vbox)
# Add a notebook layout
# https://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html#notebook
self.notebook = Gtk.Notebook()
self.stack = Gtk.Stack()
# self.stack_switcher = Gtk.StackSwitcher()
self.list_hooks = {
"remount_list": self.remount_list_view,
"remount_edit": self.remount_edit_view,
"set_selected": self.set_selected,
}
clan_list = ClanList(**self.list_hooks, selected_vm=None) # type: ignore
# Add named stacks
self.stack.add_titled(clan_list, "list", "List")
self.stack.add_titled(
ClanJoinPage(stack=self.remount_list_view), "join", "Join"
)
self.stack.add_titled(
ClanEdit(remount_list=self.remount_list_view, selected_vm=None),
"edit",
"Edit",
)
vbox.add(self.stack)
# Must be called AFTER all components were added
self.show_all()
def set_selected(self, sel: VMBase | None) -> None:
self.selected_vm = sel
if self.selected_vm:
print(f"APP selected + {self.selected_vm.name}")
def remount_list_view(self) -> None:
widget = self.stack.get_child_by_name("list")
print("Remounting ClanListView")
if widget:
widget.destroy()
clan_list = ClanList(**self.list_hooks, selected_vm=self.selected_vm) # type: ignore
self.stack.add_titled(clan_list, "list", "List")
self.show_all()
self.stack.set_visible_child_name("list")
def remount_edit_view(self) -> None:
print("Remounting ClanEdit")
widget = self.stack.get_child_by_name("edit")
if widget:
widget.destroy()
self.stack.add_titled(
ClanEdit(remount_list=self.remount_list_view, selected_vm=self.selected_vm),
"edit",
"Edit",
)
self.show_all()
self.stack.set_visible_child_name("edit")
def on_quit(self, *args: Any) -> None:
Gio.Application.quit(self.get_application())
def show_overview(args: argparse.Namespace) -> None:
app = Application(OverviewWindow)
return app.run()
def register_overview_parser(parser: argparse.ArgumentParser) -> None:
parser.add_argument("clan_uri", type=ClanURI, help="clan URI to join")
parser.set_defaults(func=show_overview)