diff --git a/coretk/coretk/app.py b/coretk/coretk/app.py index c2eeadc3..0a9275f1 100644 --- a/coretk/coretk/app.py +++ b/coretk/coretk/app.py @@ -42,6 +42,8 @@ class Application(tk.Frame): self.style.theme_use(self.guiconfig["preferences"]["theme"]) func = partial(themes.update_menu, self.style) self.master.bind_class("Menu", "<>", func) + func = partial(themes.theme_change, self.style) + self.master.bind("<>", func) def setup_app(self): self.master.title("CORE") diff --git a/coretk/coretk/dialogs/dialog.py b/coretk/coretk/dialogs/dialog.py index d814a47c..29362960 100644 --- a/coretk/coretk/dialogs/dialog.py +++ b/coretk/coretk/dialogs/dialog.py @@ -9,7 +9,6 @@ DIALOG_PAD = 5 class Dialog(tk.Toplevel): def __init__(self, master, app, title, modal=False): super().__init__(master) - self.geometry("800x600") self.withdraw() self.app = app self.modal = modal diff --git a/coretk/coretk/nodeutils.py b/coretk/coretk/nodeutils.py index 10d926f7..cb0bc7a3 100644 --- a/coretk/coretk/nodeutils.py +++ b/coretk/coretk/nodeutils.py @@ -13,18 +13,16 @@ class NodeDraw: self.image_file = None self.node_type = None self.model = None - self.tooltip = None self.services = set() @classmethod - def from_setup(cls, image_enum, node_type, model=None, tooltip=None): + def from_setup(cls, image_enum, node_type, label, model=None, tooltip=None): node_draw = NodeDraw() node_draw.image_enum = image_enum node_draw.image = Images.get(image_enum, ICON_SIZE) node_draw.node_type = node_type + node_draw.label = label node_draw.model = model - if tooltip is None: - tooltip = model node_draw.tooltip = tooltip return node_draw @@ -36,6 +34,7 @@ class NodeDraw: node_draw.image = Images.get_custom(image_file, ICON_SIZE) node_draw.node_type = NodeType.DEFAULT node_draw.services = services + node_draw.label = name node_draw.model = name node_draw.tooltip = name return node_draw @@ -81,29 +80,29 @@ class NodeUtils: @classmethod def setup(cls): nodes = [ - (ImageEnum.ROUTER, NodeType.DEFAULT, "router"), - (ImageEnum.HOST, NodeType.DEFAULT, "host"), - (ImageEnum.PC, NodeType.DEFAULT, "PC"), - (ImageEnum.MDR, NodeType.DEFAULT, "mdr"), - (ImageEnum.PROUTER, NodeType.DEFAULT, "prouter"), - (ImageEnum.DOCKER, NodeType.DOCKER, "Docker"), - (ImageEnum.LXC, NodeType.LXC, "LXC"), + (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, model in nodes: - node_draw = NodeDraw.from_setup(image_enum, node_type, model) + for image_enum, node_type, label, model in nodes: + node_draw = NodeDraw.from_setup(image_enum, node_type, label, model) cls.NODES.append(node_draw) cls.NODE_ICONS[(node_type, model)] = node_draw.image network_nodes = [ - (ImageEnum.HUB, NodeType.HUB, "ethernet hub"), - (ImageEnum.SWITCH, NodeType.SWITCH, "ethernet switch"), - (ImageEnum.WLAN, NodeType.WIRELESS_LAN, "wireless LAN"), + (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 physical interface tool"), - (ImageEnum.TUNNEL, NodeType.TUNNEL, "tunnel tool"), + (ImageEnum.RJ45, NodeType.RJ45, "RJ45"), + (ImageEnum.TUNNEL, NodeType.TUNNEL, "Tunnel"), ] - for image_enum, node_type, tooltip in network_nodes: - node_draw = NodeDraw.from_setup(image_enum, node_type, tooltip=tooltip) + for image_enum, node_type, label in network_nodes: + node_draw = NodeDraw.from_setup(image_enum, node_type, label) cls.NETWORK_NODES.append(node_draw) cls.NODE_ICONS[(node_type, None)] = node_draw.image cls.ANTENNA_ICON = Images.get(ImageEnum.ANTENNA, ANTENNA_SIZE) diff --git a/coretk/coretk/themes.py b/coretk/coretk/themes.py index b80caf87..a1982b3e 100644 --- a/coretk/coretk/themes.py +++ b/coretk/coretk/themes.py @@ -8,6 +8,7 @@ class Styles: tooltip = "Tooltip.TLabel" tooltip_frame = "Tooltip.TFrame" service_checkbutton = "Service.TCheckbutton" + picker_button = "Picker.TButton" class Colors: @@ -150,3 +151,7 @@ def update_menu(style, event): event.widget.config( background=bg, foreground=fg, activebackground=abg, activeforeground=fg ) + + +def theme_change(style, event): + style.configure(Styles.picker_button, font=("TkDefaultFont", 8, "normal")) diff --git a/coretk/coretk/toolbar.py b/coretk/coretk/toolbar.py index a47cac5e..72288b71 100644 --- a/coretk/coretk/toolbar.py +++ b/coretk/coretk/toolbar.py @@ -3,6 +3,7 @@ import threading import tkinter as tk from functools import partial from tkinter import ttk +from tkinter.font import Font from coretk.dialogs.customnodes import CustomNodesDialog from coretk.graph import tags @@ -10,13 +11,15 @@ from coretk.graph.enums import GraphMode from coretk.graph.shapeutils import ShapeType from coretk.images import ImageEnum, Images from coretk.nodeutils import NodeUtils +from coretk.themes import Styles from coretk.tooltip import Tooltip WIDTH = 32 +PICKER_SIZE = 24 -def icon(image_enum): - return Images.get(image_enum, WIDTH) +def icon(image_enum, width=WIDTH): + return Images.get(image_enum, width) class Toolbar(ttk.Frame): @@ -34,6 +37,9 @@ class Toolbar(ttk.Frame): self.app = app self.master = app.master + # picker data + self.picker_font = Font(size=8) + # design buttons self.select_button = None self.link_button = None @@ -140,9 +146,9 @@ class Toolbar(ttk.Frame): self.node_picker = ttk.Frame(self.master) # draw default nodes for node_draw in NodeUtils.NODES: - image = icon(node_draw.image_enum) + image = icon(node_draw.image_enum, PICKER_SIZE) func = partial(self.update_button, self.node_button, image, node_draw) - self.create_picker_button(image, func, self.node_picker, node_draw.tooltip) + self.create_picker_button(image, func, self.node_picker, node_draw.label) # draw custom nodes for name in sorted(self.app.core.custom_nodes): node_draw = self.app.core.custom_nodes[name] @@ -152,7 +158,7 @@ class Toolbar(ttk.Frame): # draw edit node image = icon(ImageEnum.EDITNODE) self.create_picker_button( - image, self.click_edit_node, self.node_picker, "custom nodes" + image, self.click_edit_node, self.node_picker, "Custom" ) self.design_select(self.node_button) self.node_button.after( @@ -169,21 +175,22 @@ class Toolbar(ttk.Frame): self.wait_window(picker) self.app.unbind_all("") - def create_picker_button(self, image, func, frame, tooltip): + def create_picker_button(self, image, func, frame, label): """ Create button and put it on the frame :param PIL.Image image: button image :param func: the command that is executed when button is clicked :param tkinter.Frame frame: frame that contains the button - :param str tooltip: tooltip text + :param str label: button label :return: nothing """ - button = ttk.Button(frame, image=image) + button = ttk.Button( + frame, image=image, text=label, compound=tk.TOP, style=Styles.picker_button + ) button.image = image button.bind("", lambda e: func()) button.grid(pady=1) - Tooltip(button, tooltip) def create_button(self, frame, image, func, tooltip): button = ttk.Button(frame, image=image, command=func) @@ -269,12 +276,12 @@ class Toolbar(ttk.Frame): self.hide_pickers() self.network_picker = ttk.Frame(self.master) for node_draw in NodeUtils.NETWORK_NODES: - image = icon(node_draw.image_enum) + image = icon(node_draw.image_enum, PICKER_SIZE) self.create_picker_button( image, partial(self.update_button, self.network_button, image, node_draw), self.network_picker, - node_draw.tooltip, + node_draw.label, ) self.design_select(self.network_button) self.network_button.after( @@ -311,7 +318,7 @@ class Toolbar(ttk.Frame): (ImageEnum.TEXT, ShapeType.TEXT), ] for image_enum, shape_type in nodes: - image = icon(image_enum) + image = icon(image_enum, PICKER_SIZE) self.create_picker_button( image, partial(self.update_annotation, image, shape_type),