示例#1
0
文件: edges.py 项目: epicjp/core
 def is_wireless(self):
     src_node = self.canvas.nodes[self.src]
     dst_node = self.canvas.nodes[self.dst]
     src_node_type = src_node.core_node.type
     dst_node_type = dst_node.core_node.type
     is_src_wireless = NodeUtils.is_wireless_node(src_node_type)
     is_dst_wireless = NodeUtils.is_wireless_node(dst_node_type)
     return is_src_wireless or is_dst_wireless
示例#2
0
 def _check_antenna(self) -> None:
     src_node = self.canvas.nodes[self.src]
     dst_node = self.canvas.nodes[self.dst]
     src_node_type = src_node.core_node.type
     dst_node_type = dst_node.core_node.type
     is_src_wireless = NodeUtils.is_wireless_node(src_node_type)
     is_dst_wireless = NodeUtils.is_wireless_node(dst_node_type)
     if is_src_wireless or is_dst_wireless:
         if is_src_wireless and not is_dst_wireless:
             dst_node.add_antenna()
         elif not is_src_wireless and is_dst_wireless:
             src_node.add_antenna()
         else:
             src_node.add_antenna()
示例#3
0
文件: edges.py 项目: epicjp/core
 def _check_antenna(self):
     src_node = self.canvas.nodes[self.src]
     dst_node = self.canvas.nodes[self.dst]
     src_node_type = src_node.core_node.type
     dst_node_type = dst_node.core_node.type
     is_src_wireless = NodeUtils.is_wireless_node(src_node_type)
     is_dst_wireless = NodeUtils.is_wireless_node(dst_node_type)
     if is_src_wireless or is_dst_wireless:
         if is_src_wireless and not is_dst_wireless:
             dst_node.add_antenna()
         elif not is_src_wireless and is_dst_wireless:
             src_node.add_antenna()
         # TODO: remove this? dont allow linking wireless nodes?
         else:
             src_node.add_antenna()
示例#4
0
文件: node.py 项目: umr-ds/core
 def show_context(self, event: tk.Event) -> None:
     # clear existing menu
     self.context.delete(0, tk.END)
     is_wlan = self.core_node.type == NodeType.WIRELESS_LAN
     is_emane = self.core_node.type == NodeType.EMANE
     if self.app.core.is_runtime():
         self.context.add_command(label="Configure", command=self.show_config)
         if is_emane:
             self.context.add_command(
                 label="EMANE Config", command=self.show_emane_config
             )
         if is_wlan:
             self.context.add_command(
                 label="WLAN Config", command=self.show_wlan_config
             )
         if is_wlan and self.core_node.id in self.app.core.mobility_players:
             self.context.add_command(
                 label="Mobility Player", command=self.show_mobility_player
             )
     else:
         self.context.add_command(label="Configure", command=self.show_config)
         if NodeUtils.is_container_node(self.core_node.type):
             self.context.add_command(label="Services", command=self.show_services)
             self.context.add_command(
                 label="Config Services", command=self.show_config_services
             )
         if is_emane:
             self.context.add_command(
                 label="EMANE Config", command=self.show_emane_config
             )
         if is_wlan:
             self.context.add_command(
                 label="WLAN Config", command=self.show_wlan_config
             )
             self.context.add_command(
                 label="Mobility Config", command=self.show_mobility_config
             )
         if NodeUtils.is_wireless_node(self.core_node.type):
             self.context.add_command(
                 label="Link To Selected", command=self.wireless_link_selected
             )
         unlink_menu = tk.Menu(self.context)
         for edge in self.edges:
             other_id = edge.src
             if self.id == other_id:
                 other_id = edge.dst
             other_node = self.canvas.nodes[other_id]
             func_unlink = functools.partial(self.click_unlink, edge)
             unlink_menu.add_command(
                 label=other_node.core_node.name, command=func_unlink
             )
         themes.style_menu(unlink_menu)
         self.context.add_cascade(label="Unlink", menu=unlink_menu)
         edit_menu = tk.Menu(self.context)
         themes.style_menu(edit_menu)
         edit_menu.add_command(label="Cut", command=self.click_cut)
         edit_menu.add_command(label="Copy", command=self.canvas_copy)
         edit_menu.add_command(label="Delete", command=self.canvas_delete)
         self.context.add_cascade(label="Edit", menu=edit_menu)
     self.context.tk_popup(event.x_root, event.y_root)
示例#5
0
 def delete_edge(self, edge: CanvasEdge):
     edge.delete()
     del self.edges[edge.token]
     src_node = self.nodes[edge.src]
     src_node.edges.discard(edge)
     if edge.src_interface in src_node.interfaces:
         src_node.interfaces.remove(edge.src_interface)
     dst_node = self.nodes[edge.dst]
     dst_node.edges.discard(edge)
     if edge.dst_interface in dst_node.interfaces:
         dst_node.interfaces.remove(edge.dst_interface)
     src_wireless = NodeUtils.is_wireless_node(src_node.core_node.type)
     if src_wireless:
         dst_node.delete_antenna()
     dst_wireless = NodeUtils.is_wireless_node(dst_node.core_node.type)
     if dst_wireless:
         src_node.delete_antenna()
     self.core.deleted_graph_edges([edge])
示例#6
0
 def delete_edge(self, edge: CanvasEdge) -> None:
     edge.delete()
     del self.edges[edge.token]
     src_node = self.nodes[edge.src]
     src_node.edges.discard(edge)
     if edge.src_iface:
         del src_node.ifaces[edge.src_iface.id]
     dst_node = self.nodes[edge.dst]
     dst_node.edges.discard(edge)
     if edge.dst_iface:
         del dst_node.ifaces[edge.dst_iface.id]
     src_wireless = NodeUtils.is_wireless_node(src_node.core_node.type)
     if src_wireless:
         dst_node.delete_antenna()
     dst_wireless = NodeUtils.is_wireless_node(dst_node.core_node.type)
     if dst_wireless:
         src_node.delete_antenna()
     self.core.deleted_canvas_edges([edge])
示例#7
0
    def is_wireless(self) -> bool:
        src_node = self.canvas.nodes[self.src]
        dst_node = self.canvas.nodes[self.dst]
        src_node_type = src_node.core_node.type
        dst_node_type = dst_node.core_node.type
        is_src_wireless = NodeUtils.is_wireless_node(src_node_type)
        is_dst_wireless = NodeUtils.is_wireless_node(dst_node_type)

        # update the wlan/EMANE network
        wlan_network = self.canvas.wireless_network
        if is_src_wireless and not is_dst_wireless:
            if self.src not in wlan_network:
                wlan_network[self.src] = set()
            wlan_network[self.src].add(self.dst)
        elif not is_src_wireless and is_dst_wireless:
            if self.dst not in wlan_network:
                wlan_network[self.dst] = set()
            wlan_network[self.dst].add(self.src)
        return is_src_wireless or is_dst_wireless
示例#8
0
 def create_context(self) -> tk.Menu:
     is_wlan = self.core_node.type == NodeType.WIRELESS_LAN
     is_emane = self.core_node.type == NodeType.EMANE
     context = tk.Menu(self.canvas)
     themes.style_menu(context)
     if self.app.core.is_runtime():
         context.add_command(label="Configure", command=self.show_config)
         if NodeUtils.is_container_node(self.core_node.type):
             context.add_command(label="Services", state=tk.DISABLED)
             context.add_command(label="Config Services", state=tk.DISABLED)
         if is_wlan:
             context.add_command(label="WLAN Config", command=self.show_wlan_config)
         if is_wlan and self.core_node.id in self.app.core.mobility_players:
             context.add_command(
                 label="Mobility Player", command=self.show_mobility_player
             )
         context.add_command(label="Select Adjacent", state=tk.DISABLED)
         context.add_command(label="Hide", state=tk.DISABLED)
         if NodeUtils.is_container_node(self.core_node.type):
             context.add_command(label="Shell Window", state=tk.DISABLED)
             context.add_command(label="Tcpdump", state=tk.DISABLED)
             context.add_command(label="Tshark", state=tk.DISABLED)
             context.add_command(label="Wireshark", state=tk.DISABLED)
             context.add_command(label="View Log", state=tk.DISABLED)
     else:
         context.add_command(label="Configure", command=self.show_config)
         if NodeUtils.is_container_node(self.core_node.type):
             context.add_command(label="Services", command=self.show_services)
             context.add_command(
                 label="Config Services", command=self.show_config_services
             )
         if is_emane:
             context.add_command(
                 label="EMANE Config", command=self.show_emane_config
             )
         if is_wlan:
             context.add_command(label="WLAN Config", command=self.show_wlan_config)
             context.add_command(
                 label="Mobility Config", command=self.show_mobility_config
             )
         if NodeUtils.is_wireless_node(self.core_node.type):
             context.add_command(
                 label="Link To Selected", command=self.wireless_link_selected
             )
             context.add_command(label="Select Members", state=tk.DISABLED)
         context.add_command(label="Select Adjacent", state=tk.DISABLED)
         context.add_command(label="Create Link To", state=tk.DISABLED)
         context.add_command(label="Assign To", state=tk.DISABLED)
         context.add_command(label="Move To", state=tk.DISABLED)
         context.add_command(label="Cut", state=tk.DISABLED)
         context.add_command(label="Copy", state=tk.DISABLED)
         context.add_command(label="Paste", state=tk.DISABLED)
         context.add_command(label="Delete", state=tk.DISABLED)
         context.add_command(label="Hide", state=tk.DISABLED)
     return context
示例#9
0
    def delete_selection_objects(self):
        edges = set()
        nodes = []
        for object_id in self.selection:
            #  delete selection box
            selection_id = self.selection[object_id]
            self.delete(selection_id)

            # delete node and related edges
            if object_id in self.nodes:
                canvas_node = self.nodes.pop(object_id)
                canvas_node.delete()
                nodes.append(canvas_node)
                is_wireless = NodeUtils.is_wireless_node(
                    canvas_node.core_node.type)

                # delete related edges
                for edge in canvas_node.edges:
                    if edge in edges:
                        continue
                    edges.add(edge)
                    self.edges.pop(edge.token, None)
                    edge.delete()

                    # update node connected to edge being deleted
                    other_id = edge.src
                    other_interface = edge.src_interface
                    if edge.src == object_id:
                        other_id = edge.dst
                        other_interface = edge.dst_interface
                    other_node = self.nodes[other_id]
                    other_node.edges.remove(edge)
                    try:
                        other_node.interfaces.remove(other_interface)
                    except ValueError:
                        pass
                    if is_wireless:
                        other_node.delete_antenna()

            # delete shape
            if object_id in self.shapes:
                shape = self.shapes.pop(object_id)
                shape.delete()

        self.selection.clear()
        return nodes
示例#10
0
    def delete_selected_objects(self) -> None:
        edges = set()
        nodes = []
        for object_id in self.selection:
            #  delete selection box
            selection_id = self.selection[object_id]
            self.delete(selection_id)

            # delete node and related edges
            if object_id in self.nodes:
                canvas_node = self.nodes.pop(object_id)
                canvas_node.delete()
                nodes.append(canvas_node)
                is_wireless = NodeUtils.is_wireless_node(
                    canvas_node.core_node.type)
                # delete related edges
                for edge in canvas_node.edges:
                    if edge in edges:
                        continue
                    edges.add(edge)
                    del self.edges[edge.token]
                    edge.delete()
                    # update node connected to edge being deleted
                    other_id = edge.src
                    other_iface = edge.src_iface
                    if edge.src == object_id:
                        other_id = edge.dst
                        other_iface = edge.dst_iface
                    other_node = self.nodes[other_id]
                    other_node.edges.remove(edge)
                    if other_iface:
                        del other_node.ifaces[other_iface.id]
                    if is_wireless:
                        other_node.delete_antenna()

            # delete shape
            if object_id in self.shapes:
                shape = self.shapes.pop(object_id)
                shape.delete()

        self.selection.clear()
        self.core.deleted_canvas_nodes(nodes)
        self.core.deleted_canvas_edges(edges)