grpc: update node events to include icon, pygui: updated handling node events to update icon when there is a change

This commit is contained in:
Blake Harnden 2020-08-05 12:10:27 -07:00
parent 8004be6e7c
commit b89a19a18e
3 changed files with 14 additions and 2 deletions

View file

@ -32,6 +32,7 @@ def handle_node_event(node_data: NodeData) -> core_pb2.Event:
id=node.id, id=node.id,
name=node.name, name=node.name,
model=node.type, model=node.type,
icon=node.icon,
position=position, position=position,
geo=geo, geo=geo,
services=services, services=services,

View file

@ -241,6 +241,8 @@ class CoreClient:
x = node.position.x x = node.position.x
y = node.position.y y = node.position.y
canvas_node.move(x, y) canvas_node.move(x, y)
if node.icon and node.icon != canvas_node.core_node.icon:
canvas_node.update_icon(node.icon)
elif event.message_type == MessageType.DELETE: elif event.message_type == MessageType.DELETE:
canvas_node = self.canvas_nodes[node.id] canvas_node = self.canvas_nodes[node.id]
self.app.canvas.clear_selection() self.app.canvas.clear_selection()

View file

@ -1,12 +1,13 @@
import functools import functools
import logging import logging
import tkinter as tk import tkinter as tk
from pathlib import Path
from typing import TYPE_CHECKING, Dict, List, Set from typing import TYPE_CHECKING, Dict, List, Set
import grpc import grpc
from PIL.ImageTk import PhotoImage from PIL.ImageTk import PhotoImage
from core.gui import themes from core.gui import nodeutils, themes
from core.gui.dialogs.emaneconfig import EmaneConfigDialog from core.gui.dialogs.emaneconfig import EmaneConfigDialog
from core.gui.dialogs.mobilityconfig import MobilityConfigDialog from core.gui.dialogs.mobilityconfig import MobilityConfigDialog
from core.gui.dialogs.nodeconfig import NodeConfigDialog from core.gui.dialogs.nodeconfig import NodeConfigDialog
@ -17,7 +18,7 @@ from core.gui.frames.node import NodeInfoFrame
from core.gui.graph import tags from core.gui.graph import tags
from core.gui.graph.edges import CanvasEdge, CanvasWirelessEdge from core.gui.graph.edges import CanvasEdge, CanvasWirelessEdge
from core.gui.graph.tooltip import CanvasTooltip from core.gui.graph.tooltip import CanvasTooltip
from core.gui.images import ImageEnum from core.gui.images import ImageEnum, Images
from core.gui.nodeutils import ANTENNA_SIZE, NodeUtils from core.gui.nodeutils import ANTENNA_SIZE, NodeUtils
from core.gui.wrappers import Interface, Node, NodeType from core.gui.wrappers import Interface, Node, NodeType
@ -347,3 +348,11 @@ class CanvasNode:
dx = node_x - 16 + (i * 8 * self.app.app_scale) - x dx = node_x - 16 + (i * 8 * self.app.app_scale) - x
dy = node_y - int(23 * self.app.app_scale) - y dy = node_y - int(23 * self.app.app_scale) - y
self.canvas.move(antenna_id, dx, dy) self.canvas.move(antenna_id, dx, dy)
def update_icon(self, icon_path: str) -> None:
if not Path(icon_path).exists():
logging.error(f"node icon does not exist: {icon_path}")
return
self.core_node.icon = icon_path
self.image = Images.create(icon_path, nodeutils.ICON_SIZE)
self.canvas.itemconfig(self.id, image=self.image)