From 554028ad5ce56ab368b6a94b5663430f20dc3993 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Wed, 27 Nov 2019 12:11:11 -0800 Subject: [PATCH 1/5] display mobility player context for mobility configured nodes during runtime --- coretk/coretk/graph.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/coretk/coretk/graph.py b/coretk/coretk/graph.py index c03d7b48..d45cce9b 100644 --- a/coretk/coretk/graph.py +++ b/coretk/coretk/graph.py @@ -77,9 +77,16 @@ class CanvasGraph(tk.Canvas): context.add_command( label="WLAN Config", command=canvas_node.show_wlan_config ) - context.add_command( - label="Mobility Config", command=canvas_node.show_mobility_config - ) + if self.master.core.is_runtime(): + if canvas_node.core_node.id in self.master.core.mobility_players: + context.add_command( + label="Mobility Player", + command=canvas_node.show_mobility_player, + ) + else: + context.add_command( + label="Mobility Config", command=canvas_node.show_mobility_config + ) if node.type == NodeType.EMANE: context.add_command( label="EMANE Config", command=canvas_node.show_emane_config @@ -688,6 +695,9 @@ class CanvasNode: dialog = MobilityConfigDialog(self.app, self.app, self) dialog.show() + def show_mobility_player(self): + self.canvas.context = None + def show_emane_config(self): self.canvas.context = None dialog = EmaneConfigDialog(self.app, self.app, self) From 5708dbd083378409abe5a00578c0f3a207d57bd4 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Wed, 27 Nov 2019 12:16:56 -0800 Subject: [PATCH 2/5] fixed issue when deleting node without a link tuple --- coretk/coretk/appconfig.py | 7 ++++--- coretk/coretk/{ => data}/backgrounds/sample1-bg.gif | Bin coretk/coretk/{ => data}/backgrounds/sample4-bg.jpg | Bin coretk/coretk/{ => data}/icons/OVS.gif | Bin coretk/coretk/{ => data}/icons/antenna.gif | Bin coretk/coretk/{ => data}/icons/core-icon.png | Bin coretk/coretk/{ => data}/icons/docker.png | Bin coretk/coretk/{ => data}/icons/document-new.gif | Bin .../coretk/{ => data}/icons/document-properties.gif | Bin coretk/coretk/{ => data}/icons/document-save.gif | Bin coretk/coretk/{ => data}/icons/edit-delete.gif | Bin coretk/coretk/{ => data}/icons/edit-node.png | Bin coretk/coretk/{ => data}/icons/emane.png | Bin coretk/coretk/{ => data}/icons/fileopen.gif | Bin coretk/coretk/{ => data}/icons/host.png | Bin coretk/coretk/{ => data}/icons/hub.png | Bin coretk/coretk/{ => data}/icons/lanswitch.png | Bin coretk/coretk/{ => data}/icons/link.png | Bin coretk/coretk/{ => data}/icons/lxc.png | Bin coretk/coretk/{ => data}/icons/marker.png | Bin coretk/coretk/{ => data}/icons/mdr.png | Bin coretk/coretk/{ => data}/icons/observe.gif | Bin coretk/coretk/{ => data}/icons/oval.png | Bin coretk/coretk/{ => data}/icons/pause.png | Bin coretk/coretk/{ => data}/icons/pc.png | Bin coretk/coretk/{ => data}/icons/plot.gif | Bin coretk/coretk/{ => data}/icons/prouter.png | Bin coretk/coretk/{ => data}/icons/rectangle.png | Bin coretk/coretk/{ => data}/icons/rj45.png | Bin coretk/coretk/{ => data}/icons/router.png | Bin coretk/coretk/{ => data}/icons/run.png | Bin coretk/coretk/{ => data}/icons/select.png | Bin coretk/coretk/{ => data}/icons/start.png | Bin coretk/coretk/{ => data}/icons/stop.png | Bin coretk/coretk/{ => data}/icons/text.png | Bin coretk/coretk/{ => data}/icons/tunnel.gif | Bin coretk/coretk/{ => data}/icons/twonode.png | Bin coretk/coretk/{ => data}/icons/wlan.png | Bin coretk/coretk/{ => data}/oldicons/docker.gif | Bin coretk/coretk/{ => data}/oldicons/emane.gif | Bin coretk/coretk/{ => data}/oldicons/host.gif | Bin coretk/coretk/{ => data}/oldicons/hub.gif | Bin coretk/coretk/{ => data}/oldicons/lanswitch.gif | Bin coretk/coretk/{ => data}/oldicons/link.gif | Bin coretk/coretk/{ => data}/oldicons/lxc.gif | Bin coretk/coretk/{ => data}/oldicons/marker.gif | Bin coretk/coretk/{ => data}/oldicons/mdr.gif | Bin coretk/coretk/{ => data}/oldicons/oval.gif | Bin coretk/coretk/{ => data}/oldicons/pc.gif | Bin coretk/coretk/{ => data}/oldicons/rectangle.gif | Bin coretk/coretk/{ => data}/oldicons/rj45.gif | Bin coretk/coretk/{ => data}/oldicons/router.gif | Bin coretk/coretk/{ => data}/oldicons/router_green.gif | Bin coretk/coretk/{ => data}/oldicons/run.gif | Bin coretk/coretk/{ => data}/oldicons/select.gif | Bin coretk/coretk/{ => data}/oldicons/start.gif | Bin coretk/coretk/{ => data}/oldicons/stop.gif | Bin coretk/coretk/{ => data}/oldicons/text.gif | Bin coretk/coretk/{ => data}/oldicons/twonode.gif | Bin coretk/coretk/{ => data}/oldicons/wlan.gif | Bin .../coretk/{ => data}/todelete/servicefileconfig.py | 0 .../coretk/{ => data}/todelete/servicenodeconfig.py | 0 coretk/coretk/{ => data}/xmls/sample1.xml | 0 coretk/coretk/nodedelete.py | 3 ++- 64 files changed, 6 insertions(+), 4 deletions(-) rename coretk/coretk/{ => data}/backgrounds/sample1-bg.gif (100%) rename coretk/coretk/{ => data}/backgrounds/sample4-bg.jpg (100%) rename coretk/coretk/{ => data}/icons/OVS.gif (100%) rename coretk/coretk/{ => data}/icons/antenna.gif (100%) rename coretk/coretk/{ => data}/icons/core-icon.png (100%) rename coretk/coretk/{ => data}/icons/docker.png (100%) rename coretk/coretk/{ => data}/icons/document-new.gif (100%) rename coretk/coretk/{ => data}/icons/document-properties.gif (100%) rename coretk/coretk/{ => data}/icons/document-save.gif (100%) rename coretk/coretk/{ => data}/icons/edit-delete.gif (100%) rename coretk/coretk/{ => data}/icons/edit-node.png (100%) rename coretk/coretk/{ => data}/icons/emane.png (100%) rename coretk/coretk/{ => data}/icons/fileopen.gif (100%) rename coretk/coretk/{ => data}/icons/host.png (100%) rename coretk/coretk/{ => data}/icons/hub.png (100%) rename coretk/coretk/{ => data}/icons/lanswitch.png (100%) rename coretk/coretk/{ => data}/icons/link.png (100%) rename coretk/coretk/{ => data}/icons/lxc.png (100%) rename coretk/coretk/{ => data}/icons/marker.png (100%) rename coretk/coretk/{ => data}/icons/mdr.png (100%) rename coretk/coretk/{ => data}/icons/observe.gif (100%) rename coretk/coretk/{ => data}/icons/oval.png (100%) rename coretk/coretk/{ => data}/icons/pause.png (100%) rename coretk/coretk/{ => data}/icons/pc.png (100%) rename coretk/coretk/{ => data}/icons/plot.gif (100%) rename coretk/coretk/{ => data}/icons/prouter.png (100%) rename coretk/coretk/{ => data}/icons/rectangle.png (100%) rename coretk/coretk/{ => data}/icons/rj45.png (100%) rename coretk/coretk/{ => data}/icons/router.png (100%) rename coretk/coretk/{ => data}/icons/run.png (100%) rename coretk/coretk/{ => data}/icons/select.png (100%) rename coretk/coretk/{ => data}/icons/start.png (100%) rename coretk/coretk/{ => data}/icons/stop.png (100%) rename coretk/coretk/{ => data}/icons/text.png (100%) rename coretk/coretk/{ => data}/icons/tunnel.gif (100%) rename coretk/coretk/{ => data}/icons/twonode.png (100%) rename coretk/coretk/{ => data}/icons/wlan.png (100%) rename coretk/coretk/{ => data}/oldicons/docker.gif (100%) rename coretk/coretk/{ => data}/oldicons/emane.gif (100%) rename coretk/coretk/{ => data}/oldicons/host.gif (100%) rename coretk/coretk/{ => data}/oldicons/hub.gif (100%) rename coretk/coretk/{ => data}/oldicons/lanswitch.gif (100%) rename coretk/coretk/{ => data}/oldicons/link.gif (100%) rename coretk/coretk/{ => data}/oldicons/lxc.gif (100%) rename coretk/coretk/{ => data}/oldicons/marker.gif (100%) rename coretk/coretk/{ => data}/oldicons/mdr.gif (100%) rename coretk/coretk/{ => data}/oldicons/oval.gif (100%) rename coretk/coretk/{ => data}/oldicons/pc.gif (100%) rename coretk/coretk/{ => data}/oldicons/rectangle.gif (100%) rename coretk/coretk/{ => data}/oldicons/rj45.gif (100%) rename coretk/coretk/{ => data}/oldicons/router.gif (100%) rename coretk/coretk/{ => data}/oldicons/router_green.gif (100%) rename coretk/coretk/{ => data}/oldicons/run.gif (100%) rename coretk/coretk/{ => data}/oldicons/select.gif (100%) rename coretk/coretk/{ => data}/oldicons/start.gif (100%) rename coretk/coretk/{ => data}/oldicons/stop.gif (100%) rename coretk/coretk/{ => data}/oldicons/text.gif (100%) rename coretk/coretk/{ => data}/oldicons/twonode.gif (100%) rename coretk/coretk/{ => data}/oldicons/wlan.gif (100%) rename coretk/coretk/{ => data}/todelete/servicefileconfig.py (100%) rename coretk/coretk/{ => data}/todelete/servicenodeconfig.py (100%) rename coretk/coretk/{ => data}/xmls/sample1.xml (100%) diff --git a/coretk/coretk/appconfig.py b/coretk/coretk/appconfig.py index 74d52553..a85e5991 100644 --- a/coretk/coretk/appconfig.py +++ b/coretk/coretk/appconfig.py @@ -18,9 +18,10 @@ XML_PATH = HOME_PATH.joinpath("xml") CONFIG_PATH = HOME_PATH.joinpath("gui.yaml") # local paths -LOCAL_ICONS_PATH = Path(__file__).parent.joinpath("icons").absolute() -LOCAL_BACKGROUND_PATH = Path(__file__).parent.joinpath("backgrounds").absolute() -LOCAL_XMLS_PATH = Path(__file__).parent.joinpath("xmls").absolute() +DATA_PATH = Path(__file__).parent.joinpath("data") +LOCAL_ICONS_PATH = DATA_PATH.joinpath("icons").absolute() +LOCAL_BACKGROUND_PATH = DATA_PATH.joinpath("backgrounds").absolute() +LOCAL_XMLS_PATH = DATA_PATH.joinpath("xmls").absolute() # configuration data TERMINALS = [ diff --git a/coretk/coretk/backgrounds/sample1-bg.gif b/coretk/coretk/data/backgrounds/sample1-bg.gif similarity index 100% rename from coretk/coretk/backgrounds/sample1-bg.gif rename to coretk/coretk/data/backgrounds/sample1-bg.gif diff --git a/coretk/coretk/backgrounds/sample4-bg.jpg b/coretk/coretk/data/backgrounds/sample4-bg.jpg similarity index 100% rename from coretk/coretk/backgrounds/sample4-bg.jpg rename to coretk/coretk/data/backgrounds/sample4-bg.jpg diff --git a/coretk/coretk/icons/OVS.gif b/coretk/coretk/data/icons/OVS.gif similarity index 100% rename from coretk/coretk/icons/OVS.gif rename to coretk/coretk/data/icons/OVS.gif diff --git a/coretk/coretk/icons/antenna.gif b/coretk/coretk/data/icons/antenna.gif similarity index 100% rename from coretk/coretk/icons/antenna.gif rename to coretk/coretk/data/icons/antenna.gif diff --git a/coretk/coretk/icons/core-icon.png b/coretk/coretk/data/icons/core-icon.png similarity index 100% rename from coretk/coretk/icons/core-icon.png rename to coretk/coretk/data/icons/core-icon.png diff --git a/coretk/coretk/icons/docker.png b/coretk/coretk/data/icons/docker.png similarity index 100% rename from coretk/coretk/icons/docker.png rename to coretk/coretk/data/icons/docker.png diff --git a/coretk/coretk/icons/document-new.gif b/coretk/coretk/data/icons/document-new.gif similarity index 100% rename from coretk/coretk/icons/document-new.gif rename to coretk/coretk/data/icons/document-new.gif diff --git a/coretk/coretk/icons/document-properties.gif b/coretk/coretk/data/icons/document-properties.gif similarity index 100% rename from coretk/coretk/icons/document-properties.gif rename to coretk/coretk/data/icons/document-properties.gif diff --git a/coretk/coretk/icons/document-save.gif b/coretk/coretk/data/icons/document-save.gif similarity index 100% rename from coretk/coretk/icons/document-save.gif rename to coretk/coretk/data/icons/document-save.gif diff --git a/coretk/coretk/icons/edit-delete.gif b/coretk/coretk/data/icons/edit-delete.gif similarity index 100% rename from coretk/coretk/icons/edit-delete.gif rename to coretk/coretk/data/icons/edit-delete.gif diff --git a/coretk/coretk/icons/edit-node.png b/coretk/coretk/data/icons/edit-node.png similarity index 100% rename from coretk/coretk/icons/edit-node.png rename to coretk/coretk/data/icons/edit-node.png diff --git a/coretk/coretk/icons/emane.png b/coretk/coretk/data/icons/emane.png similarity index 100% rename from coretk/coretk/icons/emane.png rename to coretk/coretk/data/icons/emane.png diff --git a/coretk/coretk/icons/fileopen.gif b/coretk/coretk/data/icons/fileopen.gif similarity index 100% rename from coretk/coretk/icons/fileopen.gif rename to coretk/coretk/data/icons/fileopen.gif diff --git a/coretk/coretk/icons/host.png b/coretk/coretk/data/icons/host.png similarity index 100% rename from coretk/coretk/icons/host.png rename to coretk/coretk/data/icons/host.png diff --git a/coretk/coretk/icons/hub.png b/coretk/coretk/data/icons/hub.png similarity index 100% rename from coretk/coretk/icons/hub.png rename to coretk/coretk/data/icons/hub.png diff --git a/coretk/coretk/icons/lanswitch.png b/coretk/coretk/data/icons/lanswitch.png similarity index 100% rename from coretk/coretk/icons/lanswitch.png rename to coretk/coretk/data/icons/lanswitch.png diff --git a/coretk/coretk/icons/link.png b/coretk/coretk/data/icons/link.png similarity index 100% rename from coretk/coretk/icons/link.png rename to coretk/coretk/data/icons/link.png diff --git a/coretk/coretk/icons/lxc.png b/coretk/coretk/data/icons/lxc.png similarity index 100% rename from coretk/coretk/icons/lxc.png rename to coretk/coretk/data/icons/lxc.png diff --git a/coretk/coretk/icons/marker.png b/coretk/coretk/data/icons/marker.png similarity index 100% rename from coretk/coretk/icons/marker.png rename to coretk/coretk/data/icons/marker.png diff --git a/coretk/coretk/icons/mdr.png b/coretk/coretk/data/icons/mdr.png similarity index 100% rename from coretk/coretk/icons/mdr.png rename to coretk/coretk/data/icons/mdr.png diff --git a/coretk/coretk/icons/observe.gif b/coretk/coretk/data/icons/observe.gif similarity index 100% rename from coretk/coretk/icons/observe.gif rename to coretk/coretk/data/icons/observe.gif diff --git a/coretk/coretk/icons/oval.png b/coretk/coretk/data/icons/oval.png similarity index 100% rename from coretk/coretk/icons/oval.png rename to coretk/coretk/data/icons/oval.png diff --git a/coretk/coretk/icons/pause.png b/coretk/coretk/data/icons/pause.png similarity index 100% rename from coretk/coretk/icons/pause.png rename to coretk/coretk/data/icons/pause.png diff --git a/coretk/coretk/icons/pc.png b/coretk/coretk/data/icons/pc.png similarity index 100% rename from coretk/coretk/icons/pc.png rename to coretk/coretk/data/icons/pc.png diff --git a/coretk/coretk/icons/plot.gif b/coretk/coretk/data/icons/plot.gif similarity index 100% rename from coretk/coretk/icons/plot.gif rename to coretk/coretk/data/icons/plot.gif diff --git a/coretk/coretk/icons/prouter.png b/coretk/coretk/data/icons/prouter.png similarity index 100% rename from coretk/coretk/icons/prouter.png rename to coretk/coretk/data/icons/prouter.png diff --git a/coretk/coretk/icons/rectangle.png b/coretk/coretk/data/icons/rectangle.png similarity index 100% rename from coretk/coretk/icons/rectangle.png rename to coretk/coretk/data/icons/rectangle.png diff --git a/coretk/coretk/icons/rj45.png b/coretk/coretk/data/icons/rj45.png similarity index 100% rename from coretk/coretk/icons/rj45.png rename to coretk/coretk/data/icons/rj45.png diff --git a/coretk/coretk/icons/router.png b/coretk/coretk/data/icons/router.png similarity index 100% rename from coretk/coretk/icons/router.png rename to coretk/coretk/data/icons/router.png diff --git a/coretk/coretk/icons/run.png b/coretk/coretk/data/icons/run.png similarity index 100% rename from coretk/coretk/icons/run.png rename to coretk/coretk/data/icons/run.png diff --git a/coretk/coretk/icons/select.png b/coretk/coretk/data/icons/select.png similarity index 100% rename from coretk/coretk/icons/select.png rename to coretk/coretk/data/icons/select.png diff --git a/coretk/coretk/icons/start.png b/coretk/coretk/data/icons/start.png similarity index 100% rename from coretk/coretk/icons/start.png rename to coretk/coretk/data/icons/start.png diff --git a/coretk/coretk/icons/stop.png b/coretk/coretk/data/icons/stop.png similarity index 100% rename from coretk/coretk/icons/stop.png rename to coretk/coretk/data/icons/stop.png diff --git a/coretk/coretk/icons/text.png b/coretk/coretk/data/icons/text.png similarity index 100% rename from coretk/coretk/icons/text.png rename to coretk/coretk/data/icons/text.png diff --git a/coretk/coretk/icons/tunnel.gif b/coretk/coretk/data/icons/tunnel.gif similarity index 100% rename from coretk/coretk/icons/tunnel.gif rename to coretk/coretk/data/icons/tunnel.gif diff --git a/coretk/coretk/icons/twonode.png b/coretk/coretk/data/icons/twonode.png similarity index 100% rename from coretk/coretk/icons/twonode.png rename to coretk/coretk/data/icons/twonode.png diff --git a/coretk/coretk/icons/wlan.png b/coretk/coretk/data/icons/wlan.png similarity index 100% rename from coretk/coretk/icons/wlan.png rename to coretk/coretk/data/icons/wlan.png diff --git a/coretk/coretk/oldicons/docker.gif b/coretk/coretk/data/oldicons/docker.gif similarity index 100% rename from coretk/coretk/oldicons/docker.gif rename to coretk/coretk/data/oldicons/docker.gif diff --git a/coretk/coretk/oldicons/emane.gif b/coretk/coretk/data/oldicons/emane.gif similarity index 100% rename from coretk/coretk/oldicons/emane.gif rename to coretk/coretk/data/oldicons/emane.gif diff --git a/coretk/coretk/oldicons/host.gif b/coretk/coretk/data/oldicons/host.gif similarity index 100% rename from coretk/coretk/oldicons/host.gif rename to coretk/coretk/data/oldicons/host.gif diff --git a/coretk/coretk/oldicons/hub.gif b/coretk/coretk/data/oldicons/hub.gif similarity index 100% rename from coretk/coretk/oldicons/hub.gif rename to coretk/coretk/data/oldicons/hub.gif diff --git a/coretk/coretk/oldicons/lanswitch.gif b/coretk/coretk/data/oldicons/lanswitch.gif similarity index 100% rename from coretk/coretk/oldicons/lanswitch.gif rename to coretk/coretk/data/oldicons/lanswitch.gif diff --git a/coretk/coretk/oldicons/link.gif b/coretk/coretk/data/oldicons/link.gif similarity index 100% rename from coretk/coretk/oldicons/link.gif rename to coretk/coretk/data/oldicons/link.gif diff --git a/coretk/coretk/oldicons/lxc.gif b/coretk/coretk/data/oldicons/lxc.gif similarity index 100% rename from coretk/coretk/oldicons/lxc.gif rename to coretk/coretk/data/oldicons/lxc.gif diff --git a/coretk/coretk/oldicons/marker.gif b/coretk/coretk/data/oldicons/marker.gif similarity index 100% rename from coretk/coretk/oldicons/marker.gif rename to coretk/coretk/data/oldicons/marker.gif diff --git a/coretk/coretk/oldicons/mdr.gif b/coretk/coretk/data/oldicons/mdr.gif similarity index 100% rename from coretk/coretk/oldicons/mdr.gif rename to coretk/coretk/data/oldicons/mdr.gif diff --git a/coretk/coretk/oldicons/oval.gif b/coretk/coretk/data/oldicons/oval.gif similarity index 100% rename from coretk/coretk/oldicons/oval.gif rename to coretk/coretk/data/oldicons/oval.gif diff --git a/coretk/coretk/oldicons/pc.gif b/coretk/coretk/data/oldicons/pc.gif similarity index 100% rename from coretk/coretk/oldicons/pc.gif rename to coretk/coretk/data/oldicons/pc.gif diff --git a/coretk/coretk/oldicons/rectangle.gif b/coretk/coretk/data/oldicons/rectangle.gif similarity index 100% rename from coretk/coretk/oldicons/rectangle.gif rename to coretk/coretk/data/oldicons/rectangle.gif diff --git a/coretk/coretk/oldicons/rj45.gif b/coretk/coretk/data/oldicons/rj45.gif similarity index 100% rename from coretk/coretk/oldicons/rj45.gif rename to coretk/coretk/data/oldicons/rj45.gif diff --git a/coretk/coretk/oldicons/router.gif b/coretk/coretk/data/oldicons/router.gif similarity index 100% rename from coretk/coretk/oldicons/router.gif rename to coretk/coretk/data/oldicons/router.gif diff --git a/coretk/coretk/oldicons/router_green.gif b/coretk/coretk/data/oldicons/router_green.gif similarity index 100% rename from coretk/coretk/oldicons/router_green.gif rename to coretk/coretk/data/oldicons/router_green.gif diff --git a/coretk/coretk/oldicons/run.gif b/coretk/coretk/data/oldicons/run.gif similarity index 100% rename from coretk/coretk/oldicons/run.gif rename to coretk/coretk/data/oldicons/run.gif diff --git a/coretk/coretk/oldicons/select.gif b/coretk/coretk/data/oldicons/select.gif similarity index 100% rename from coretk/coretk/oldicons/select.gif rename to coretk/coretk/data/oldicons/select.gif diff --git a/coretk/coretk/oldicons/start.gif b/coretk/coretk/data/oldicons/start.gif similarity index 100% rename from coretk/coretk/oldicons/start.gif rename to coretk/coretk/data/oldicons/start.gif diff --git a/coretk/coretk/oldicons/stop.gif b/coretk/coretk/data/oldicons/stop.gif similarity index 100% rename from coretk/coretk/oldicons/stop.gif rename to coretk/coretk/data/oldicons/stop.gif diff --git a/coretk/coretk/oldicons/text.gif b/coretk/coretk/data/oldicons/text.gif similarity index 100% rename from coretk/coretk/oldicons/text.gif rename to coretk/coretk/data/oldicons/text.gif diff --git a/coretk/coretk/oldicons/twonode.gif b/coretk/coretk/data/oldicons/twonode.gif similarity index 100% rename from coretk/coretk/oldicons/twonode.gif rename to coretk/coretk/data/oldicons/twonode.gif diff --git a/coretk/coretk/oldicons/wlan.gif b/coretk/coretk/data/oldicons/wlan.gif similarity index 100% rename from coretk/coretk/oldicons/wlan.gif rename to coretk/coretk/data/oldicons/wlan.gif diff --git a/coretk/coretk/todelete/servicefileconfig.py b/coretk/coretk/data/todelete/servicefileconfig.py similarity index 100% rename from coretk/coretk/todelete/servicefileconfig.py rename to coretk/coretk/data/todelete/servicefileconfig.py diff --git a/coretk/coretk/todelete/servicenodeconfig.py b/coretk/coretk/data/todelete/servicenodeconfig.py similarity index 100% rename from coretk/coretk/todelete/servicenodeconfig.py rename to coretk/coretk/data/todelete/servicenodeconfig.py diff --git a/coretk/coretk/xmls/sample1.xml b/coretk/coretk/data/xmls/sample1.xml similarity index 100% rename from coretk/coretk/xmls/sample1.xml rename to coretk/coretk/data/xmls/sample1.xml diff --git a/coretk/coretk/nodedelete.py b/coretk/coretk/nodedelete.py index 92844aac..f52731e4 100644 --- a/coretk/coretk/nodedelete.py +++ b/coretk/coretk/nodedelete.py @@ -75,7 +75,8 @@ class CanvasComponentManagement: neighbor = self.app.canvas_nodes[neighbor_id] if neighbor.core_node.type != core_pb2.NodeType.WIRELESS_LAN: neighbor.antenna_draw.delete_antenna() - for link_tuple in node_to_wlink[canvas_node.core_node.id]: + + for link_tuple in node_to_wlink.get(canvas_node.core_node.id, []): nid_one, nid_two = link_tuple if link_tuple in self.canvas.wireless_draw.map: self.canvas.delete(self.canvas.wireless_draw.map[link_tuple]) From 354d227cb3a6badc24c741327ac8a084c6620e30 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Wed, 27 Nov 2019 12:20:00 -0800 Subject: [PATCH 3/5] removed old service config code --- .../coretk/data/todelete/servicefileconfig.py | 37 -------- .../coretk/data/todelete/servicenodeconfig.py | 85 ------------------- 2 files changed, 122 deletions(-) delete mode 100644 coretk/coretk/data/todelete/servicefileconfig.py delete mode 100644 coretk/coretk/data/todelete/servicenodeconfig.py diff --git a/coretk/coretk/data/todelete/servicefileconfig.py b/coretk/coretk/data/todelete/servicefileconfig.py deleted file mode 100644 index 06a134cd..00000000 --- a/coretk/coretk/data/todelete/servicefileconfig.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -service file configuration -""" - - -class ServiceFileConfig: - def __init__(self): - # dict(node_id:dict(service:dict(filename, data))) - self.configurations = {} - - # def set_service_configs(self, node_id, service_name, file_configs): - # """ - # store file configs - # - # :param int node_id: node id - # :param str service_name: service name - # :param dict(str, str) file_configs: map of service file to its data - # :return: nothing - # """ - # for key, value in file_configs.items(): - # self.configurations[node_id][service_name][key] = value - - def set_custom_service_file_config(self, node_id, service_name, file_name, data): - """ - store file config - - :param int node_id: node id - :param str service_name: service name - :param str file_name: file name - :param str data: data - :return: nothing - """ - if node_id not in self.configurations: - self.configurations[node_id] = {} - if service_name not in self.configurations[node_id]: - self.configurations[node_id][service_name] = {} - self.configurations[node_id][service_name][file_name] = data diff --git a/coretk/coretk/data/todelete/servicenodeconfig.py b/coretk/coretk/data/todelete/servicenodeconfig.py deleted file mode 100644 index 3473e1d8..00000000 --- a/coretk/coretk/data/todelete/servicenodeconfig.py +++ /dev/null @@ -1,85 +0,0 @@ -""" -service node configuration -""" -import logging -from tkinter import messagebox - -import grpc - - -class ServiceNodeConfig: - def __init__(self, app): - self.app = app - # dict(node_id:dict(service:node_service_config_proto)) - # maps node to all of its service configuration - self.configurations = {} - # dict(node_id:set(str)) - # maps node to current configurations - self.current_services = {} - self.default_services = {} - - # todo rewrite, no need self.default services - def node_default_services_configuration(self, node_id, node_model): - """ - set the default configurations for the default services of a node - - :param coretk.graph.CanvasNode canvas_node: canvas node object - :return: nothing - """ - session_id = self.app.core.session_id - client = self.app.core.client - - if len(self.default_services) == 0: - response = client.get_service_defaults(session_id) - logging.info("session default services: %s", response) - for default in response.defaults: - self.default_services[default.node_type] = default.services - - self.configurations[node_id] = {} - - self.current_services[node_id] = set() - for default in self.default_services[node_model]: - response = client.get_node_service(session_id, node_id, default) - logging.info( - "servicenodeconfig.py get node service (%s), result: %s", - node_id, - response, - ) - self.configurations[node_id][default] = response.service - self.current_services[node_id].add(default) - - def node_new_service_configuration(self, node_id, service_name): - """ - store node's configuration if a new service is added from the GUI - - :param int node_id: node id - :param str service_name: service name - :return: nothing - """ - try: - config = self.app.core.get_node_service(node_id, service_name) - except grpc.RpcError: - messagebox.showerror("Service problem", "Service not found") - return False - if node_id not in self.configurations: - self.configurations[node_id] = {} - if node_id not in self.current_services: - self.current_services[node_id] = set() - if service_name not in self.configurations[node_id]: - self.configurations[node_id][service_name] = config - self.current_services[node_id].add(service_name) - return True - - def node_custom_service_configuration(self, node_id, service_name): - self.configurations[node_id][service_name] = self.app.core.get_node_service( - node_id, service_name - ) - - def node_service_custom_configuration( - self, node_id, service_name, startups, validates, shutdowns - ): - self.app.core.set_node_service( - node_id, service_name, startups, validates, shutdowns - ) - config = self.app.core.get_node_service(node_id, service_name) - self.configurations[node_id][service_name] = config From d1db5e4b4ec00f96c9a03d2038a4b27834a0b0f1 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Wed, 27 Nov 2019 12:55:39 -0800 Subject: [PATCH 4/5] added some data for node events to have a source field to help distinguish what originates from the gui or not --- coretk/coretk/coreclient.py | 23 +++++++++++------------ coretk/coretk/graph.py | 6 +++--- daemon/core/api/grpc/client.py | 9 +++++++-- daemon/core/api/grpc/server.py | 7 +++++-- daemon/core/emulator/data.py | 1 + daemon/core/nodes/base.py | 4 +++- daemon/proto/core/api/grpc/core.proto | 2 ++ 7 files changed, 32 insertions(+), 20 deletions(-) diff --git a/coretk/coretk/coreclient.py b/coretk/coretk/coreclient.py index e6dfb77e..1671a0fe 100644 --- a/coretk/coretk/coreclient.py +++ b/coretk/coretk/coreclient.py @@ -141,15 +141,19 @@ class CoreClient: else: logging.warning("unknown session event: %s", session_event) elif event.HasField("node_event"): - node_event = event.node_event - node_id = node_event.node.id - x = node_event.node.position.x - y = node_event.node.position.y - canvas_node = self.canvas_nodes[node_id] - canvas_node.move(x, y) + self.handle_node_event(event.node_event) else: logging.info("unhandled event: %s", event) + def handle_node_event(self, event): + if event.source == "gui": + return + node_id = event.node.id + x = event.node.position.x + y = event.node.position.y + canvas_node = self.canvas_nodes[node_id] + canvas_node.move(x, y) + def handle_throughputs(self, event): interface_throughputs = event.interface_throughputs for i in interface_throughputs: @@ -164,9 +168,6 @@ class CoreClient: ) def join_session(self, session_id, query_location=True): - # self.master.config(cursor="watch") - # self.master.update() - # update session and title self.session_id = session_id self.master.title(f"CORE Session({self.session_id})") @@ -253,7 +254,6 @@ class CoreClient: self.app.toolbar.runtime_frame.tkraise() else: self.app.toolbar.design_frame.tkraise() - # self.master.config(cursor="") self.app.statusbar.progress_bar.stop() def is_runtime(self): @@ -321,8 +321,7 @@ class CoreClient: def edit_node(self, node_id, x, y): position = core_pb2.Position(x=x, y=y) - response = self.client.edit_node(self.session_id, node_id, position) - logging.info("updated node id %s: %s", node_id, response) + self.client.edit_node(self.session_id, node_id, position, source="gui") def start_session(self): nodes = [x.core_node for x in self.canvas_nodes.values()] diff --git a/coretk/coretk/graph.py b/coretk/coretk/graph.py index d45cce9b..7bfe7ed3 100644 --- a/coretk/coretk/graph.py +++ b/coretk/coretk/graph.py @@ -600,6 +600,9 @@ class CanvasNode: y_offset = y - old_y self.core_node.position.x = x self.core_node.position.y = y + self.canvas.move(self.id, x_offset, y_offset) + self.canvas.move(self.text_id, x_offset, y_offset) + self.antenna_draw.update_antennas_position(x_offset, y_offset) for edge in self.edges: x1, y1, x2, y2 = self.canvas.coords(edge.id) if edge.src == self.id: @@ -608,9 +611,6 @@ class CanvasNode: self.canvas.coords(edge.id, x1, y1, x_offset, y_offset) edge.link_info.recalculate_info() self.canvas.helper.update_wlan_connection(old_x, old_y, x, y, self.wlans) - self.canvas.move(self.id, x_offset, y_offset) - self.canvas.move(self.text_id, x_offset, y_offset) - self.antenna_draw.update_antennas_position(x_offset, y_offset) def on_enter(self, event): if self.app.core.is_runtime() and self.app.core.observer: diff --git a/daemon/core/api/grpc/client.py b/daemon/core/api/grpc/client.py index ceec0448..05380b79 100644 --- a/daemon/core/api/grpc/client.py +++ b/daemon/core/api/grpc/client.py @@ -428,7 +428,7 @@ class CoreGrpcClient: request = core_pb2.GetNodeRequest(session_id=session_id, node_id=node_id) return self.stub.GetNode(request) - def edit_node(self, session_id, node_id, position, icon=None): + def edit_node(self, session_id, node_id, position, icon=None, source=None): """ Edit a node, currently only changes position. @@ -436,12 +436,17 @@ class CoreGrpcClient: :param int node_id: node id :param core_pb2.Position position: position to set node to :param str icon: path to icon for gui to use for node + :param str source: application source editing node :return: response with result of success or failure :rtype: core_pb2.EditNodeResponse :raises grpc.RpcError: when session or node doesn't exist """ request = core_pb2.EditNodeRequest( - session_id=session_id, node_id=node_id, position=position, icon=icon + session_id=session_id, + node_id=node_id, + position=position, + icon=icon, + source=source, ) return self.stub.EditNode(request) diff --git a/daemon/core/api/grpc/server.py b/daemon/core/api/grpc/server.py index c0fe1d94..a914d617 100644 --- a/daemon/core/api/grpc/server.py +++ b/daemon/core/api/grpc/server.py @@ -504,7 +504,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer): position=position, services=services, ) - return core_pb2.NodeEvent(node=node_proto) + return core_pb2.NodeEvent(node=node_proto, source=event.source) def _handle_link_event(self, event): """ @@ -800,7 +800,10 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer): result = True try: session.edit_node(node.id, options) - node_data = node.data(0) + source = None + if request.source: + source = request.source + node_data = node.data(0, source=source) session.broadcast_node(node_data) except CoreError: result = False diff --git a/daemon/core/emulator/data.py b/daemon/core/emulator/data.py index ba0dd457..0ed1fa67 100644 --- a/daemon/core/emulator/data.py +++ b/daemon/core/emulator/data.py @@ -76,6 +76,7 @@ NodeData = collections.namedtuple( "altitude", "icon", "opaque", + "source", ], ) NodeData.__new__.__defaults__ = (None,) * len(NodeData._fields) diff --git a/daemon/core/nodes/base.py b/daemon/core/nodes/base.py index 72fc0fe1..a663741e 100644 --- a/daemon/core/nodes/base.py +++ b/daemon/core/nodes/base.py @@ -176,7 +176,7 @@ class NodeBase: self.ifindex += 1 return ifindex - def data(self, message_type, lat=None, lon=None, alt=None): + def data(self, message_type, lat=None, lon=None, alt=None, source=None): """ Build a data object for this node. @@ -184,6 +184,7 @@ class NodeBase: :param str lat: latitude :param str lon: longitude :param str alt: altitude + :param str source: source of node data :return: node data object :rtype: core.emulator.data.NodeData """ @@ -217,6 +218,7 @@ class NodeBase: model=model, server=server, services=services, + source=source, ) return node_data diff --git a/daemon/proto/core/api/grpc/core.proto b/daemon/proto/core/api/grpc/core.proto index ac7cc2ed..57bbf3f4 100644 --- a/daemon/proto/core/api/grpc/core.proto +++ b/daemon/proto/core/api/grpc/core.proto @@ -298,6 +298,7 @@ message Event { message NodeEvent { Node node = 1; + string source = 2; } message LinkEvent { @@ -378,6 +379,7 @@ message EditNodeRequest { int32 node_id = 2; Position position = 3; string icon = 4; + string source = 5; } message EditNodeResponse { From 804b95d486de3ac21e218a965da68c34ff826703 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Wed, 27 Nov 2019 13:23:45 -0800 Subject: [PATCH 5/5] consolidated node move logic to one function, used by both node events and node drag --- coretk/coretk/graph.py | 36 ++++++------------------------------ coretk/coretk/nodedelete.py | 4 +++- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/coretk/coretk/graph.py b/coretk/coretk/graph.py index 7bfe7ed3..274073df 100644 --- a/coretk/coretk/graph.py +++ b/coretk/coretk/graph.py @@ -598,17 +598,18 @@ class CanvasNode: old_y = self.core_node.position.y x_offset = x - old_x y_offset = y - old_y - self.core_node.position.x = x - self.core_node.position.y = y + self.core_node.position.x = int(x) + self.core_node.position.y = int(y) self.canvas.move(self.id, x_offset, y_offset) self.canvas.move(self.text_id, x_offset, y_offset) self.antenna_draw.update_antennas_position(x_offset, y_offset) + self.canvas.canvas_management.node_drag(self, x_offset, y_offset) for edge in self.edges: x1, y1, x2, y2 = self.canvas.coords(edge.id) if edge.src == self.id: - self.canvas.coords(edge.id, x_offset, y_offset, x2, y2) + self.canvas.coords(edge.id, x, y, x2, y2) else: - self.canvas.coords(edge.id, x1, y1, x_offset, y_offset) + self.canvas.coords(edge.id, x1, y1, x, y) edge.link_info.recalculate_info() self.canvas.helper.update_wlan_connection(old_x, old_y, x, y, self.wlans) @@ -650,32 +651,7 @@ class CanvasNode: if self.canvas.mode == GraphMode.EDGE or self.canvas.mode == GraphMode.NODE: return x, y = self.canvas.canvas_xy(event) - moving_x, moving_y = self.moving - offset_x, offset_y = x - moving_x, y - moving_y - self.moving = x, y - - old_x, old_y = self.canvas.coords(self.id) - self.canvas.move(self.id, offset_x, offset_y) - self.canvas.move(self.text_id, offset_x, offset_y) - self.antenna_draw.update_antennas_position(offset_x, offset_y) - self.canvas.canvas_management.node_drag(self, offset_x, offset_y) - - new_x, new_y = self.canvas.coords(self.id) - - if self.canvas.core.is_runtime(): - self.canvas.core.edit_node(self.core_node.id, int(new_x), int(new_y)) - - for edge in self.edges: - x1, y1, x2, y2 = self.canvas.coords(edge.id) - if x1 == old_x and y1 == old_y: - self.canvas.coords(edge.id, new_x, new_y, x2, y2) - else: - self.canvas.coords(edge.id, x1, y1, new_x, new_y) - edge.link_info.recalculate_info() - - self.canvas.helper.update_wlan_connection( - old_x, old_y, new_x, new_y, self.wlans - ) + self.move(x, y) def select_multiple(self, event): self.canvas.canvas_management.node_select(self, True) diff --git a/coretk/coretk/nodedelete.py b/coretk/coretk/nodedelete.py index f52731e4..341f95ef 100644 --- a/coretk/coretk/nodedelete.py +++ b/coretk/coretk/nodedelete.py @@ -35,7 +35,9 @@ class CanvasComponentManagement: self.selected[canvas_node.id] = bbox_id def node_drag(self, canvas_node, offset_x, offset_y): - self.canvas.move(self.selected[canvas_node.id], offset_x, offset_y) + select_id = self.selected.get(canvas_node.id) + if select_id is not None: + self.canvas.move(select_id, offset_x, offset_y) def delete_current_bbox(self): for bbid in self.selected.values():