Update start/stop button based on VM state
This commit is contained in:
@@ -185,6 +185,7 @@ class ProcessManager:
|
|||||||
print("Killing all processes", file=sys.stderr)
|
print("Killing all processes", file=sys.stderr)
|
||||||
for proc in self.procs.values():
|
for proc in self.procs.values():
|
||||||
proc.kill_group()
|
proc.kill_group()
|
||||||
|
self.procs.clear()
|
||||||
|
|
||||||
def kill(self, ident: str) -> None:
|
def kill(self, ident: str) -> None:
|
||||||
if ident not in self.procs:
|
if ident not in self.procs:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from collections.abc import Callable
|
|||||||
from gi.repository import Gdk, GdkPixbuf, Gtk
|
from gi.repository import Gdk, GdkPixbuf, Gtk
|
||||||
|
|
||||||
from ..interfaces import Callbacks
|
from ..interfaces import Callbacks
|
||||||
from ..models import VMBase
|
from ..models import VMBase, VMStatus
|
||||||
from .context_menu import VmMenu
|
from .context_menu import VmMenu
|
||||||
|
|
||||||
|
|
||||||
@@ -89,20 +89,17 @@ class ClanList(Gtk.Box):
|
|||||||
cbs: Callbacks,
|
cbs: Callbacks,
|
||||||
selected_vm: VMBase | None,
|
selected_vm: VMBase | None,
|
||||||
vms: list[VMBase],
|
vms: list[VMBase],
|
||||||
show_toolbar: bool = True,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(orientation=Gtk.Orientation.VERTICAL, expand=True)
|
super().__init__(orientation=Gtk.Orientation.VERTICAL, expand=True)
|
||||||
|
|
||||||
self.remount_edit_view = remount_edit
|
self.remount_edit_view = remount_edit
|
||||||
self.remount_list_view = remount_list
|
self.remount_list_view = remount_list
|
||||||
self.set_selected = set_selected
|
self.set_selected = set_selected
|
||||||
self.show_toolbar = show_toolbar
|
|
||||||
self.cbs = cbs
|
self.cbs = cbs
|
||||||
self.show_join = cbs.show_join
|
self.show_join = cbs.show_join
|
||||||
|
|
||||||
self.selected_vm: VMBase | None = selected_vm
|
self.selected_vm: VMBase | None = selected_vm
|
||||||
|
|
||||||
if show_toolbar:
|
|
||||||
self.toolbar = ClanListToolbar(
|
self.toolbar = ClanListToolbar(
|
||||||
on_start_clicked=self.on_start_clicked,
|
on_start_clicked=self.on_start_clicked,
|
||||||
on_stop_clicked=self.on_stop_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_join_clan_clicked=self.on_join_clan_clicked,
|
||||||
on_flash_clicked=self.on_flash_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(self.toolbar)
|
||||||
|
|
||||||
self.add(
|
self.add(
|
||||||
@@ -146,11 +143,7 @@ class ClanList(Gtk.Box):
|
|||||||
self.remount_edit_view()
|
self.remount_edit_view()
|
||||||
|
|
||||||
def on_select_vm(self, vm: VMBase) -> None:
|
def on_select_vm(self, vm: VMBase) -> None:
|
||||||
if self.show_toolbar:
|
self.toolbar.set_selected_vm(vm)
|
||||||
if vm is None:
|
|
||||||
self.toolbar.set_is_selected(False)
|
|
||||||
else:
|
|
||||||
self.toolbar.set_is_selected(True)
|
|
||||||
|
|
||||||
self.set_selected(vm)
|
self.set_selected(vm)
|
||||||
self.selected_vm = vm
|
self.selected_vm = vm
|
||||||
@@ -188,11 +181,11 @@ class ClanListToolbar(Gtk.Toolbar):
|
|||||||
self.flash_button.connect("clicked", on_flash_clicked)
|
self.flash_button.connect("clicked", on_flash_clicked)
|
||||||
self.add(self.flash_button)
|
self.add(self.flash_button)
|
||||||
|
|
||||||
def set_is_selected(self, s: bool) -> None:
|
def set_selected_vm(self, vm: VMBase | None) -> None:
|
||||||
if s:
|
if vm:
|
||||||
self.edit_button.set_sensitive(True)
|
self.edit_button.set_sensitive(True)
|
||||||
self.start_button.set_sensitive(True)
|
self.start_button.set_sensitive(vm.status == VMStatus.STOPPED)
|
||||||
self.stop_button.set_sensitive(True)
|
self.stop_button.set_sensitive(vm.status == VMStatus.RUNNING)
|
||||||
else:
|
else:
|
||||||
self.edit_button.set_sensitive(False)
|
self.edit_button.set_sensitive(False)
|
||||||
self.start_button.set_sensitive(False)
|
self.start_button.set_sensitive(False)
|
||||||
|
|||||||
@@ -57,9 +57,17 @@ class OverviewWindow(Gtk.ApplicationWindow):
|
|||||||
widget = self.stack.get_child_by_name("list")
|
widget = self.stack.get_child_by_name("list")
|
||||||
if widget:
|
if widget:
|
||||||
widget.destroy()
|
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(
|
clan_list = ClanList(
|
||||||
vms=[vm.base for vm in get_initial_vms(self.cbs.running_vms())],
|
vms=vms,
|
||||||
cbs=self.cbs,
|
cbs=self.cbs,
|
||||||
remount_list=self.remount_list_view,
|
remount_list=self.remount_list_view,
|
||||||
remount_edit=self.remount_edit_view,
|
remount_edit=self.remount_edit_view,
|
||||||
|
|||||||
Reference in New Issue
Block a user