コード例 #1
0
ファイル: customnodes.py プロジェクト: q9512268/core
 def click_icon(self) -> None:
     file_path = image_chooser(self, ICONS_PATH)
     if file_path:
         image = Images.create(file_path, nodeutils.ICON_SIZE)
         self.image = image
         self.image_file = file_path
         self.image_button.config(image=self.image)
コード例 #2
0
 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)
コード例 #3
0
 def node_image(
     cls, core_node: Node, gui_config: GuiConfig, scale: float = 1.0
 ) -> PhotoImage:
     image = cls.node_icon(core_node.type, core_node.model, gui_config, scale)
     if core_node.icon:
         try:
             image = Images.create(core_node.icon, int(ICON_SIZE * scale))
         except OSError:
             logging.error("invalid icon: %s", core_node.icon)
     return image
コード例 #4
0
 def node_image(
         cls, core_node: "core_pb2.Node",
         gui_config: Dict[str, List[Dict[str,
                                         str]]]) -> "ImageTk.PhotoImage":
     image = cls.node_icon(core_node.type, core_node.model, gui_config)
     if core_node.icon:
         try:
             image = Images.create(core_node.icon, ICON_SIZE)
         except OSError:
             logging.error("invalid icon: %s", core_node.icon)
     return image
コード例 #5
0
    def draw_session(self, session):
        """
        Draw existing session.

        :return: nothing
        """
        # draw existing nodes
        for core_node in session.nodes:
            # peer to peer node is not drawn on the GUI
            if NodeUtils.is_ignore_node(core_node.type):
                continue

            # draw nodes on the canvas
            logging.info("drawing core node: %s", core_node)
            image = NodeUtils.node_icon(core_node.type, core_node.model)
            if core_node.icon:
                try:
                    image = Images.create(core_node.icon, nodeutils.ICON_SIZE)
                except OSError:
                    logging.error("invalid icon: %s", core_node.icon)

            x = core_node.position.x
            y = core_node.position.y
            node = CanvasNode(self.master, x, y, core_node, image)
            self.nodes[node.id] = node
            self.core.canvas_nodes[core_node.id] = node

        # draw existing links
        for link in session.links:
            logging.info("drawing link: %s", link)
            canvas_node_one = self.core.canvas_nodes[link.node_one_id]
            node_one = canvas_node_one.core_node
            canvas_node_two = self.core.canvas_nodes[link.node_two_id]
            node_two = canvas_node_two.core_node
            token = tuple(sorted((canvas_node_one.id, canvas_node_two.id)))

            if link.type == core_pb2.LinkType.WIRELESS:
                self.add_wireless_edge(canvas_node_one, canvas_node_two)
            else:
                if token not in self.edges:
                    edge = CanvasEdge(
                        node_one.position.x,
                        node_one.position.y,
                        node_two.position.x,
                        node_two.position.y,
                        canvas_node_one.id,
                        self,
                    )
                    edge.token = token
                    edge.dst = canvas_node_two.id
                    edge.set_link(link)
                    edge.check_wireless()
                    canvas_node_one.edges.add(edge)
                    canvas_node_two.edges.add(edge)
                    self.edges[edge.token] = edge
                    self.core.links[edge.token] = edge
                    if link.HasField("interface_one"):
                        canvas_node_one.interfaces.append(link.interface_one)
                    if link.HasField("interface_two"):
                        canvas_node_two.interfaces.append(link.interface_two)
                elif link.options.unidirectional:
                    edge = self.edges[token]
                    edge.asymmetric_link = link
                else:
                    logging.error("duplicate link received: %s", link)

        # raise the nodes so they on top of the links
        self.tag_raise(tags.NODE)
コード例 #6
0
 def draw_preview(self):
     image = Images.create(self.filename.get(), 250, 135)
     self.image_label.config(image=image)
     self.image_label.image = image