fix right click service on custom nodes with empty services, load services to custom node when drawn on canvas, show current services for custom node's service dialog

This commit is contained in:
Huy Pham 2020-01-27 13:20:31 -08:00
parent b3463f1fb7
commit 09cc65646f
3 changed files with 23 additions and 3 deletions

View file

@ -736,6 +736,9 @@ class CoreClient:
image=image,
emane=emane,
)
if NodeUtils.is_custom(model):
services = NodeUtils.get_custom_node_services(self.app.guiconfig, model)
node.services[:] = services
logging.debug(
"adding node to core session: %s, coords: (%s, %s), name: %s",
self.session_id,

View file

@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any, Set
from core.gui.dialogs.dialog import Dialog
from core.gui.dialogs.serviceconfig import ServiceConfigDialog
from core.gui.nodeutils import NodeUtils
from core.gui.themes import FRAME_PAD, PADX, PADY
from core.gui.widgets import CheckboxList, ListboxScroll
@ -35,10 +36,14 @@ class NodeServiceDialog(Dialog):
services = canvas_node.core_node.services
model = canvas_node.core_node.model
if len(services) == 0:
if not NodeUtils.is_custom(canvas_node.core_node.model):
services = set(self.app.core.default_services[model])
else:
services = set(
NodeUtils.get_custom_node_services(self.app.guiconfig, model)
)
else:
services = set(services)
self.current_services = services
self.draw()
@ -137,7 +142,8 @@ class NodeServiceDialog(Dialog):
def click_save(self):
if (
self.current_services
self.canvas_node.core_node.model not in self.app.core.default_services
or self.current_services
!= self.app.core.default_services[self.canvas_node.core_node.model]
):
self.canvas_node.core_node.services[:] = self.current_services

View file

@ -106,6 +106,17 @@ class NodeUtils:
logging.error("invalid icon: %s", core_node.icon)
return image
@classmethod
def is_custom(cls, model):
return model not in cls.NODE_MODELS
@classmethod
def get_custom_node_services(cls, gui_config, name):
for m in gui_config["nodes"]:
if m["name"] == name:
return m["services"]
return []
@classmethod
def setup(cls):
nodes = [