Update start/stop button based on VM state

This commit is contained in:
Jörg Thalheim
2024-01-04 18:35:26 +01:00
parent 738aaa3b5d
commit c7fda31ab3
3 changed files with 25 additions and 23 deletions

View File

@@ -185,6 +185,7 @@ class ProcessManager:
print("Killing all processes", file=sys.stderr)
for proc in self.procs.values():
proc.kill_group()
self.procs.clear()
def kill(self, ident: str) -> None:
if ident not in self.procs:

View File

@@ -3,7 +3,7 @@ from collections.abc import Callable
from gi.repository import Gdk, GdkPixbuf, Gtk
from ..interfaces import Callbacks
from ..models import VMBase
from ..models import VMBase, VMStatus
from .context_menu import VmMenu
@@ -89,20 +89,17 @@ class ClanList(Gtk.Box):
cbs: Callbacks,
selected_vm: VMBase | None,
vms: list[VMBase],
show_toolbar: bool = True,
) -> None:
super().__init__(orientation=Gtk.Orientation.VERTICAL, expand=True)
self.remount_edit_view = remount_edit
self.remount_list_view = remount_list
self.set_selected = set_selected
self.show_toolbar = show_toolbar
self.cbs = cbs
self.show_join = cbs.show_join
self.selected_vm: VMBase | None = selected_vm
if show_toolbar:
self.toolbar = ClanListToolbar(
on_start_clicked=self.on_start_clicked,
on_stop_clicked=self.on_stop_clicked,
@@ -110,7 +107,7 @@ class ClanList(Gtk.Box):
on_join_clan_clicked=self.on_join_clan_clicked,
on_flash_clicked=self.on_flash_clicked,
)
self.toolbar.set_is_selected(self.selected_vm is not None)
self.toolbar.set_selected_vm(self.selected_vm)
self.add(self.toolbar)
self.add(
@@ -146,11 +143,7 @@ class ClanList(Gtk.Box):
self.remount_edit_view()
def on_select_vm(self, vm: VMBase) -> None:
if self.show_toolbar:
if vm is None:
self.toolbar.set_is_selected(False)
else:
self.toolbar.set_is_selected(True)
self.toolbar.set_selected_vm(vm)
self.set_selected(vm)
self.selected_vm = vm
@@ -188,11 +181,11 @@ class ClanListToolbar(Gtk.Toolbar):
self.flash_button.connect("clicked", on_flash_clicked)
self.add(self.flash_button)
def set_is_selected(self, s: bool) -> None:
if s:
def set_selected_vm(self, vm: VMBase | None) -> None:
if vm:
self.edit_button.set_sensitive(True)
self.start_button.set_sensitive(True)
self.stop_button.set_sensitive(True)
self.start_button.set_sensitive(vm.status == VMStatus.STOPPED)
self.stop_button.set_sensitive(vm.status == VMStatus.RUNNING)
else:
self.edit_button.set_sensitive(False)
self.start_button.set_sensitive(False)

View File

@@ -57,9 +57,17 @@ class OverviewWindow(Gtk.ApplicationWindow):
widget = self.stack.get_child_by_name("list")
if widget:
widget.destroy()
vms = []
for vm in get_initial_vms(self.cbs.running_vms()):
vms.append(vm.base)
# FIXME: It feels very odd that we have to re-fetch the selected VM.
# The model should be just updated in-place.
if self.selected_vm and vm.base.url == self.selected_vm.url:
self.selected_vm = vm.base
clan_list = ClanList(
vms=[vm.base for vm in get_initial_vms(self.cbs.running_vms())],
vms=vms,
cbs=self.cbs,
remount_list=self.remount_list_view,
remount_edit=self.remount_edit_view,