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"])
func = partial(themes.update_menu, self.style)
self.master.bind_class("Menu", "<<ThemeChanged>>", func)
func = partial(themes.theme_change, self.style)
self.master.bind("<<ThemeChanged>>", func)
def setup_app(self):
self.master.title("CORE")

View file

@ -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

View file

@ -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)

View file

@ -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"))

View file

@ -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("<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
: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("<ButtonRelease-1>", 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),