updated theme and size for picker buttons, also added text for clarity

This commit is contained in:
Blake Harnden 2019-12-11 11:42:05 -08:00
parent fa1f344fd7
commit 8585911900
5 changed files with 45 additions and 33 deletions

View file

@ -42,6 +42,8 @@ class Application(tk.Frame):
self.style.theme_use(self.guiconfig["preferences"]["theme"]) self.style.theme_use(self.guiconfig["preferences"]["theme"])
func = partial(themes.update_menu, self.style) func = partial(themes.update_menu, self.style)
self.master.bind_class("Menu", "<<ThemeChanged>>", func) self.master.bind_class("Menu", "<<ThemeChanged>>", func)
func = partial(themes.theme_change, self.style)
self.master.bind("<<ThemeChanged>>", func)
def setup_app(self): def setup_app(self):
self.master.title("CORE") self.master.title("CORE")

View file

@ -9,7 +9,6 @@ DIALOG_PAD = 5
class Dialog(tk.Toplevel): class Dialog(tk.Toplevel):
def __init__(self, master, app, title, modal=False): def __init__(self, master, app, title, modal=False):
super().__init__(master) super().__init__(master)
self.geometry("800x600")
self.withdraw() self.withdraw()
self.app = app self.app = app
self.modal = modal self.modal = modal

View file

@ -13,18 +13,16 @@ class NodeDraw:
self.image_file = None self.image_file = None
self.node_type = None self.node_type = None
self.model = None self.model = None
self.tooltip = None
self.services = set() self.services = set()
@classmethod @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 = NodeDraw()
node_draw.image_enum = image_enum node_draw.image_enum = image_enum
node_draw.image = Images.get(image_enum, ICON_SIZE) node_draw.image = Images.get(image_enum, ICON_SIZE)
node_draw.node_type = node_type node_draw.node_type = node_type
node_draw.label = label
node_draw.model = model node_draw.model = model
if tooltip is None:
tooltip = model
node_draw.tooltip = tooltip node_draw.tooltip = tooltip
return node_draw return node_draw
@ -36,6 +34,7 @@ class NodeDraw:
node_draw.image = Images.get_custom(image_file, ICON_SIZE) node_draw.image = Images.get_custom(image_file, ICON_SIZE)
node_draw.node_type = NodeType.DEFAULT node_draw.node_type = NodeType.DEFAULT
node_draw.services = services node_draw.services = services
node_draw.label = name
node_draw.model = name node_draw.model = name
node_draw.tooltip = name node_draw.tooltip = name
return node_draw return node_draw
@ -81,29 +80,29 @@ class NodeUtils:
@classmethod @classmethod
def setup(cls): def setup(cls):
nodes = [ nodes = [
(ImageEnum.ROUTER, NodeType.DEFAULT, "router"), (ImageEnum.ROUTER, NodeType.DEFAULT, "Router", "router"),
(ImageEnum.HOST, NodeType.DEFAULT, "host"), (ImageEnum.HOST, NodeType.DEFAULT, "Host", "host"),
(ImageEnum.PC, NodeType.DEFAULT, "PC"), (ImageEnum.PC, NodeType.DEFAULT, "PC", "PC"),
(ImageEnum.MDR, NodeType.DEFAULT, "mdr"), (ImageEnum.MDR, NodeType.DEFAULT, "MDR", "mdr"),
(ImageEnum.PROUTER, NodeType.DEFAULT, "prouter"), (ImageEnum.PROUTER, NodeType.DEFAULT, "PRouter", "prouter"),
(ImageEnum.DOCKER, NodeType.DOCKER, "Docker"), (ImageEnum.DOCKER, NodeType.DOCKER, "Docker", None),
(ImageEnum.LXC, NodeType.LXC, "LXC"), (ImageEnum.LXC, NodeType.LXC, "LXC", None),
] ]
for image_enum, node_type, model in nodes: for image_enum, node_type, label, model in nodes:
node_draw = NodeDraw.from_setup(image_enum, node_type, model) node_draw = NodeDraw.from_setup(image_enum, node_type, label, model)
cls.NODES.append(node_draw) cls.NODES.append(node_draw)
cls.NODE_ICONS[(node_type, model)] = node_draw.image cls.NODE_ICONS[(node_type, model)] = node_draw.image
network_nodes = [ network_nodes = [
(ImageEnum.HUB, NodeType.HUB, "ethernet hub"), (ImageEnum.HUB, NodeType.HUB, "Hub"),
(ImageEnum.SWITCH, NodeType.SWITCH, "ethernet switch"), (ImageEnum.SWITCH, NodeType.SWITCH, "Switch"),
(ImageEnum.WLAN, NodeType.WIRELESS_LAN, "wireless LAN"), (ImageEnum.WLAN, NodeType.WIRELESS_LAN, "WLAN"),
(ImageEnum.EMANE, NodeType.EMANE, "EMANE"), (ImageEnum.EMANE, NodeType.EMANE, "EMANE"),
(ImageEnum.RJ45, NodeType.RJ45, "rj45 physical interface tool"), (ImageEnum.RJ45, NodeType.RJ45, "RJ45"),
(ImageEnum.TUNNEL, NodeType.TUNNEL, "tunnel tool"), (ImageEnum.TUNNEL, NodeType.TUNNEL, "Tunnel"),
] ]
for image_enum, node_type, tooltip in network_nodes: for image_enum, node_type, label in network_nodes:
node_draw = NodeDraw.from_setup(image_enum, node_type, tooltip=tooltip) node_draw = NodeDraw.from_setup(image_enum, node_type, label)
cls.NETWORK_NODES.append(node_draw) cls.NETWORK_NODES.append(node_draw)
cls.NODE_ICONS[(node_type, None)] = node_draw.image cls.NODE_ICONS[(node_type, None)] = node_draw.image
cls.ANTENNA_ICON = Images.get(ImageEnum.ANTENNA, ANTENNA_SIZE) cls.ANTENNA_ICON = Images.get(ImageEnum.ANTENNA, ANTENNA_SIZE)

View file

@ -8,6 +8,7 @@ class Styles:
tooltip = "Tooltip.TLabel" tooltip = "Tooltip.TLabel"
tooltip_frame = "Tooltip.TFrame" tooltip_frame = "Tooltip.TFrame"
service_checkbutton = "Service.TCheckbutton" service_checkbutton = "Service.TCheckbutton"
picker_button = "Picker.TButton"
class Colors: class Colors:
@ -150,3 +151,7 @@ def update_menu(style, event):
event.widget.config( event.widget.config(
background=bg, foreground=fg, activebackground=abg, activeforeground=fg background=bg, foreground=fg, activebackground=abg, activeforeground=fg
) )
def theme_change(style, event):
style.configure(Styles.picker_button, font=("TkDefaultFont", 8, "normal"))

View file

@ -3,6 +3,7 @@ import threading
import tkinter as tk import tkinter as tk
from functools import partial from functools import partial
from tkinter import ttk from tkinter import ttk
from tkinter.font import Font
from coretk.dialogs.customnodes import CustomNodesDialog from coretk.dialogs.customnodes import CustomNodesDialog
from coretk.graph import tags from coretk.graph import tags
@ -10,13 +11,15 @@ from coretk.graph.enums import GraphMode
from coretk.graph.shapeutils import ShapeType from coretk.graph.shapeutils import ShapeType
from coretk.images import ImageEnum, Images from coretk.images import ImageEnum, Images
from coretk.nodeutils import NodeUtils from coretk.nodeutils import NodeUtils
from coretk.themes import Styles
from coretk.tooltip import Tooltip from coretk.tooltip import Tooltip
WIDTH = 32 WIDTH = 32
PICKER_SIZE = 24
def icon(image_enum): def icon(image_enum, width=WIDTH):
return Images.get(image_enum, WIDTH) return Images.get(image_enum, width)
class Toolbar(ttk.Frame): class Toolbar(ttk.Frame):
@ -34,6 +37,9 @@ class Toolbar(ttk.Frame):
self.app = app self.app = app
self.master = app.master self.master = app.master
# picker data
self.picker_font = Font(size=8)
# design buttons # design buttons
self.select_button = None self.select_button = None
self.link_button = None self.link_button = None
@ -140,9 +146,9 @@ class Toolbar(ttk.Frame):
self.node_picker = ttk.Frame(self.master) self.node_picker = ttk.Frame(self.master)
# draw default nodes # draw default nodes
for node_draw in NodeUtils.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) 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 # draw custom nodes
for name in sorted(self.app.core.custom_nodes): for name in sorted(self.app.core.custom_nodes):
node_draw = self.app.core.custom_nodes[name] node_draw = self.app.core.custom_nodes[name]
@ -152,7 +158,7 @@ class Toolbar(ttk.Frame):
# draw edit node # draw edit node
image = icon(ImageEnum.EDITNODE) image = icon(ImageEnum.EDITNODE)
self.create_picker_button( 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.design_select(self.node_button)
self.node_button.after( self.node_button.after(
@ -169,21 +175,22 @@ class Toolbar(ttk.Frame):
self.wait_window(picker) self.wait_window(picker)
self.app.unbind_all("<ButtonRelease-1>") self.app.unbind_all("<ButtonRelease-1>")
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 Create button and put it on the frame
:param PIL.Image image: button image :param PIL.Image image: button image
:param func: the command that is executed when button is clicked :param func: the command that is executed when button is clicked
:param tkinter.Frame frame: frame that contains the button :param tkinter.Frame frame: frame that contains the button
:param str tooltip: tooltip text :param str label: button label
:return: nothing :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.image = image
button.bind("<ButtonRelease-1>", lambda e: func()) button.bind("<ButtonRelease-1>", lambda e: func())
button.grid(pady=1) button.grid(pady=1)
Tooltip(button, tooltip)
def create_button(self, frame, image, func, tooltip): def create_button(self, frame, image, func, tooltip):
button = ttk.Button(frame, image=image, command=func) button = ttk.Button(frame, image=image, command=func)
@ -269,12 +276,12 @@ class Toolbar(ttk.Frame):
self.hide_pickers() self.hide_pickers()
self.network_picker = ttk.Frame(self.master) self.network_picker = ttk.Frame(self.master)
for node_draw in NodeUtils.NETWORK_NODES: 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( self.create_picker_button(
image, image,
partial(self.update_button, self.network_button, image, node_draw), partial(self.update_button, self.network_button, image, node_draw),
self.network_picker, self.network_picker,
node_draw.tooltip, node_draw.label,
) )
self.design_select(self.network_button) self.design_select(self.network_button)
self.network_button.after( self.network_button.after(
@ -311,7 +318,7 @@ class Toolbar(ttk.Frame):
(ImageEnum.TEXT, ShapeType.TEXT), (ImageEnum.TEXT, ShapeType.TEXT),
] ]
for image_enum, shape_type in nodes: for image_enum, shape_type in nodes:
image = icon(image_enum) image = icon(image_enum, PICKER_SIZE)
self.create_picker_button( self.create_picker_button(
image, image,
partial(self.update_annotation, image, shape_type), partial(self.update_annotation, image, shape_type),