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, image=image,
emane=emane, emane=emane,
) )
if NodeUtils.is_custom(model):
services = NodeUtils.get_custom_node_services(self.app.guiconfig, model)
node.services[:] = services
logging.debug( logging.debug(
"adding node to core session: %s, coords: (%s, %s), name: %s", "adding node to core session: %s, coords: (%s, %s), name: %s",
self.session_id, 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.dialog import Dialog
from core.gui.dialogs.serviceconfig import ServiceConfigDialog 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.themes import FRAME_PAD, PADX, PADY
from core.gui.widgets import CheckboxList, ListboxScroll from core.gui.widgets import CheckboxList, ListboxScroll
@ -35,10 +36,14 @@ class NodeServiceDialog(Dialog):
services = canvas_node.core_node.services services = canvas_node.core_node.services
model = canvas_node.core_node.model model = canvas_node.core_node.model
if len(services) == 0: if len(services) == 0:
services = set(self.app.core.default_services[model]) 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: else:
services = set(services) services = set(services)
self.current_services = services self.current_services = services
self.draw() self.draw()
@ -137,7 +142,8 @@ class NodeServiceDialog(Dialog):
def click_save(self): def click_save(self):
if ( 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.app.core.default_services[self.canvas_node.core_node.model]
): ):
self.canvas_node.core_node.services[:] = self.current_services 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) logging.error("invalid icon: %s", core_node.icon)
return image 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 @classmethod
def setup(cls): def setup(cls):
nodes = [ nodes = [