Пример #1
0
    def draw_emane_buttons(self) -> None:
        frame = ttk.Frame(self.top)
        frame.grid(sticky=tk.EW, pady=PADY)
        for i in range(2):
            frame.columnconfigure(i, weight=1)

        image = images.from_enum(ImageEnum.EDITNODE, width=images.BUTTON_SIZE)
        self.emane_model_button = ttk.Button(
            frame,
            text=f"{self.emane_model.get()} options",
            image=image,
            compound=tk.RIGHT,
            command=self.click_model_config,
        )
        self.emane_model_button.image = image
        self.emane_model_button.grid(row=0, column=0, padx=PADX, sticky=tk.EW)

        image = images.from_enum(ImageEnum.EDITNODE, width=images.BUTTON_SIZE)
        button = ttk.Button(
            frame,
            text="EMANE options",
            image=image,
            compound=tk.RIGHT,
            command=self.click_emane_config,
        )
        button.image = image
        button.grid(row=0, column=1, sticky=tk.EW)
Пример #2
0
    def draw_buttons(self) -> None:
        frame = ttk.Frame(self.top)
        for i in range(4):
            frame.columnconfigure(i, weight=1)
        frame.grid(sticky=tk.EW)

        image = images.from_enum(ImageEnum.DOCUMENTNEW,
                                 width=images.BUTTON_SIZE)
        b = ttk.Button(frame,
                       image=image,
                       text="New",
                       compound=tk.LEFT,
                       command=self.click_new)
        b.image = image
        b.grid(row=0, padx=PADX, sticky=tk.EW)

        image = images.from_enum(ImageEnum.FILEOPEN, width=images.BUTTON_SIZE)
        self.connect_button = ttk.Button(
            frame,
            image=image,
            text="Connect",
            compound=tk.LEFT,
            command=self.click_connect,
            state=tk.DISABLED,
        )
        self.connect_button.image = image
        self.connect_button.grid(row=0, column=1, padx=PADX, sticky=tk.EW)

        image = images.from_enum(ImageEnum.DELETE, width=images.BUTTON_SIZE)
        self.delete_button = ttk.Button(
            frame,
            image=image,
            text="Delete",
            compound=tk.LEFT,
            command=self.click_delete,
            state=tk.DISABLED,
        )
        self.delete_button.image = image
        self.delete_button.grid(row=0, column=2, padx=PADX, sticky=tk.EW)

        image = images.from_enum(ImageEnum.CANCEL, width=images.BUTTON_SIZE)
        if self.is_start_app:
            b = ttk.Button(
                frame,
                image=image,
                text="Exit",
                compound=tk.LEFT,
                command=self.click_exit,
            )
        else:
            b = ttk.Button(
                frame,
                image=image,
                text="Cancel",
                compound=tk.LEFT,
                command=self.destroy,
            )
        b.image = image
        b.grid(row=0, column=3, sticky=tk.EW)
Пример #3
0
def setup() -> None:
    global ANTENNA_ICON
    nodes = [
        (ImageEnum.ROUTER, NodeType.DEFAULT, "Router", "router"),
        (ImageEnum.HOST, NodeType.DEFAULT, "Host", "host"),
        (ImageEnum.PC, NodeType.DEFAULT, "PC", "PC"),
        (ImageEnum.MDR, NodeType.DEFAULT, "MDR", "mdr"),
        (ImageEnum.PROUTER, NodeType.DEFAULT, "PRouter", "prouter"),
        (ImageEnum.DOCKER, NodeType.DOCKER, "Docker", None),
        (ImageEnum.LXC, NodeType.LXC, "LXC", None),
    ]
    for image_enum, node_type, label, model in nodes:
        node_draw = NodeDraw.from_setup(image_enum, node_type, label, model)
        NODES.append(node_draw)
        NODE_ICONS[(node_type, model)] = node_draw.image
    network_nodes = [
        (ImageEnum.HUB, NodeType.HUB, "Hub"),
        (ImageEnum.SWITCH, NodeType.SWITCH, "Switch"),
        (ImageEnum.WLAN, NodeType.WIRELESS_LAN, "WLAN"),
        (ImageEnum.EMANE, NodeType.EMANE, "EMANE"),
        (ImageEnum.RJ45, NodeType.RJ45, "RJ45"),
        (ImageEnum.TUNNEL, NodeType.TUNNEL, "Tunnel"),
    ]
    for image_enum, node_type, label in network_nodes:
        node_draw = NodeDraw.from_setup(image_enum, node_type, label)
        NETWORK_NODES.append(node_draw)
        NODE_ICONS[(node_type, None)] = node_draw.image
    ANTENNA_ICON = images.from_enum(ImageEnum.ANTENNA,
                                    width=images.ANTENNA_SIZE)
Пример #4
0
def get_icon(node: Node, app: "Application") -> PhotoImage:
    scale = app.app_scale
    image = None
    # node icon was overriden with a specific value
    if node.icon:
        try:
            image = images.from_file(node.icon,
                                     width=images.NODE_SIZE,
                                     scale=scale)
        except OSError:
            logging.error("invalid icon: %s", node.icon)
    # custom node
    elif is_custom(node):
        image_file = _get_custom_file(app.guiconfig, node.model)
        logging.info("custom node file: %s", image_file)
        if image_file:
            image = images.from_file(image_file,
                                     width=images.NODE_SIZE,
                                     scale=scale)
    # built in node
    else:
        image = images.from_node(node, scale=scale)
    # default image, if everything above fails
    if not image:
        image = images.from_enum(ImageEnum.EDITNODE,
                                 width=images.NODE_SIZE,
                                 scale=scale)
    return image
Пример #5
0
    def draw_emane_configuration(self) -> None:
        """
        draw the main frame for emane configuration
        """
        label = ttk.Label(
            self.top,
            text=
            "The EMANE emulation system provides more complex wireless radio "
            "emulation \nusing pluggable MAC and PHY modules. Refer to the wiki "
            "for configuration option details",
            justify=tk.CENTER,
        )
        label.grid(pady=PADY)

        image = images.from_enum(ImageEnum.EDITNODE, width=images.BUTTON_SIZE)
        button = ttk.Button(
            self.top,
            image=image,
            text="EMANE Wiki",
            compound=tk.RIGHT,
            command=lambda: webbrowser.open_new(
                "https://github.com/adjacentlink/emane/wiki"),
        )
        button.image = image
        button.grid(sticky=tk.EW, pady=PADY)
Пример #6
0
 def setup_app(self) -> None:
     self.master.title("CORE")
     self.center()
     self.master.protocol("WM_DELETE_WINDOW", self.on_closing)
     image = images.from_enum(ImageEnum.CORE, width=images.DIALOG_SIZE)
     self.master.tk.call("wm", "iconphoto", self.master._w, image)
     self.master.option_add("*tearOff", tk.FALSE)
     self.setup_file_dialogs()
Пример #7
0
 def draw(self) -> None:
     self.top.columnconfigure(0, weight=1)
     self.top.rowconfigure(1, weight=1)
     image = images.from_enum(ImageEnum.ERROR, width=images.ERROR_SIZE)
     label = ttk.Label(
         self.top, text=self.message, image=image, compound=tk.LEFT, anchor=tk.CENTER
     )
     label.image = image
     label.grid(sticky=tk.W, pady=PADY)
     self.error_message = CodeText(self.top)
     self.error_message.text.insert("1.0", self.details)
     self.error_message.text.config(state=tk.DISABLED)
     self.error_message.grid(sticky=tk.EW, pady=PADY)
     button = ttk.Button(self.top, text="Close", command=lambda: self.destroy())
     button.grid(sticky=tk.EW)
Пример #8
0
 def from_setup(
     cls,
     image_enum: ImageEnum,
     node_type: NodeType,
     label: str,
     model: str = None,
     tooltip: str = None,
 ) -> "NodeDraw":
     node_draw = NodeDraw()
     node_draw.image_enum = image_enum
     node_draw.image = images.from_enum(image_enum, width=images.NODE_SIZE)
     node_draw.node_type = node_type
     node_draw.label = label
     node_draw.model = model
     node_draw.tooltip = tooltip
     return node_draw
Пример #9
0
 def __init__(
     self,
     app: "Application",
     title: str,
     modal: bool = True,
     master: tk.BaseWidget = None,
 ) -> None:
     if master is None:
         master = app
     super().__init__(master)
     self.withdraw()
     self.app: "Application" = app
     self.modal: bool = modal
     self.title(title)
     self.protocol("WM_DELETE_WINDOW", self.destroy)
     image = images.from_enum(ImageEnum.CORE, width=images.DIALOG_SIZE)
     self.tk.call("wm", "iconphoto", self._w, image)
     self.columnconfigure(0, weight=1)
     self.rowconfigure(0, weight=1)
     self.top: ttk.Frame = ttk.Frame(self, padding=DIALOG_PAD)
     self.top.grid(sticky=tk.NSEW)
Пример #10
0
 def get_enum_icon(self, image_enum: ImageEnum, *,
                   width: int) -> PhotoImage:
     return images.from_enum(image_enum, width=width, scale=self.app_scale)
Пример #11
0
    def draw_tab_files(self) -> None:
        tab = ttk.Frame(self.notebook, padding=FRAME_PAD)
        tab.grid(sticky=tk.NSEW)
        tab.columnconfigure(0, weight=1)
        self.notebook.add(tab, text="Files")

        label = ttk.Label(
            tab,
            text="Config files and scripts that are generated for this service."
        )
        label.grid()

        frame = ttk.Frame(tab)
        frame.grid(sticky=tk.EW, pady=PADY)
        frame.columnconfigure(1, weight=1)
        label = ttk.Label(frame, text="File Name")
        label.grid(row=0, column=0, padx=PADX, sticky=tk.W)
        self.filename_combobox = ttk.Combobox(frame, values=self.filenames)
        self.filename_combobox.bind("<<ComboboxSelected>>",
                                    self.display_service_file_data)
        self.filename_combobox.grid(row=0, column=1, sticky=tk.EW, padx=PADX)
        button = ttk.Button(frame,
                            image=self.documentnew_img,
                            command=self.add_filename)
        button.grid(row=0, column=2, padx=PADX)
        button = ttk.Button(frame,
                            image=self.editdelete_img,
                            command=self.delete_filename)
        button.grid(row=0, column=3)

        frame = ttk.Frame(tab)
        frame.grid(sticky=tk.EW, pady=PADY)
        frame.columnconfigure(1, weight=1)
        button = ttk.Radiobutton(
            frame,
            variable=self.radiovar,
            text="Copy Source File",
            value=1,
            state=tk.DISABLED,
        )
        button.grid(row=0, column=0, sticky=tk.W, padx=PADX)
        entry = ttk.Entry(frame, state=tk.DISABLED)
        entry.grid(row=0, column=1, sticky=tk.EW, padx=PADX)
        image = images.from_enum(ImageEnum.FILEOPEN, width=images.BUTTON_SIZE)
        button = ttk.Button(frame, image=image)
        button.image = image
        button.grid(row=0, column=2)

        frame = ttk.Frame(tab)
        frame.grid(sticky=tk.EW, pady=PADY)
        frame.columnconfigure(0, weight=1)
        button = ttk.Radiobutton(
            frame,
            variable=self.radiovar,
            text="Use text below for file contents",
            value=2,
        )
        button.grid(row=0, column=0, sticky=tk.EW)
        image = images.from_enum(ImageEnum.FILEOPEN, width=images.BUTTON_SIZE)
        button = ttk.Button(frame, image=image)
        button.image = image
        button.grid(row=0, column=1)
        image = images.from_enum(ImageEnum.DOCUMENTSAVE,
                                 width=images.BUTTON_SIZE)
        button = ttk.Button(frame, image=image)
        button.image = image
        button.grid(row=0, column=2)

        self.service_file_data = CodeText(tab)
        self.service_file_data.grid(sticky=tk.NSEW)
        tab.rowconfigure(self.service_file_data.grid_info()["row"], weight=1)
        if len(self.filenames) > 0:
            self.filename_combobox.current(0)
            self.service_file_data.text.delete(1.0, "end")
            self.service_file_data.text.insert(
                "end", self.temp_service_files[self.filenames[0]])
        self.service_file_data.text.bind("<FocusOut>",
                                         self.update_temp_service_file_data)