some refactoring for menubar code

This commit is contained in:
bharnden 2019-11-07 21:46:40 -08:00
parent be36940bd1
commit 99678499ce
4 changed files with 115 additions and 286 deletions

View file

@ -3,10 +3,10 @@ import tkinter as tk
from coretk import appdirs
from coretk.coreclient import CoreClient
from coretk.coremenubar import CoreMenubar
from coretk.graph import CanvasGraph
from coretk.images import ImageEnum, Images
from coretk.menuaction import MenuAction
from coretk.menubar import Menubar
from coretk.toolbar import Toolbar
@ -15,9 +15,9 @@ class Application(tk.Frame):
super().__init__(master)
Images.load_all()
self.menubar = None
self.core_menu = None
self.canvas = None
self.toolbar = None
self.canvas = None
self.statusbar = None
self.is_open_xml = False
self.size_and_scale = None
self.set_wallpaper = None
@ -41,29 +41,18 @@ class Application(tk.Frame):
self.pack(fill=tk.BOTH, expand=True)
def draw(self):
self.draw_menu()
self.draw_toolbar()
self.draw_canvas()
def draw_menu(self):
self.master.option_add("*tearOff", tk.FALSE)
self.menubar = tk.Menu(self.master)
self.core_menu = CoreMenubar(self, self.master, self.menubar)
self.core_menu.create_core_menubar()
self.master.config(menu=self.menubar)
def draw_toolbar(self):
self.menubar = Menubar(self.master, self)
self.toolbar = Toolbar(self, self)
self.toolbar.pack(side=tk.LEFT, fill=tk.Y, ipadx=2, ipady=2)
self.draw_canvas()
self.draw_status()
def draw_canvas(self):
self.canvas = CanvasGraph(
self, self.core, background="#cccccc", scrollregion=(0, 0, 1200, 1000)
)
self.canvas.pack(fill=tk.BOTH, expand=True)
self.toolbar.canvas = self.canvas
scroll_x = tk.Scrollbar(
self.canvas, orient=tk.HORIZONTAL, command=self.canvas.xview
)
@ -73,14 +62,15 @@ class Application(tk.Frame):
self.canvas.configure(xscrollcommand=scroll_x.set)
self.canvas.configure(yscrollcommand=scroll_y.set)
status_bar = tk.Frame(self)
status_bar.pack(side=tk.BOTTOM, fill=tk.X)
b = tk.Button(status_bar, text="Button 1")
b.pack(side=tk.LEFT, padx=1)
b = tk.Button(status_bar, text="Button 2")
b.pack(side=tk.LEFT, padx=1)
b = tk.Button(status_bar, text="Button 3")
b.pack(side=tk.LEFT, padx=1)
def draw_status(self):
self.statusbar = tk.Frame(self)
self.statusbar.pack(side=tk.BOTTOM, fill=tk.X)
button = tk.Button(self.statusbar, text="Button 1")
button.pack(side=tk.LEFT, padx=1)
button = tk.Button(self.statusbar, text="Button 2")
button.pack(side=tk.LEFT, padx=1)
button = tk.Button(self.statusbar, text="Button 3")
button.pack(side=tk.LEFT, padx=1)
def on_closing(self):
menu_action = MenuAction(self, self.master)

View file

@ -21,34 +21,14 @@ def sub_menu_items():
logging.debug("Click on sub menu items")
def file_new():
def file_new(event=None):
logging.debug("Click file New")
def file_new_shortcut(event):
logging.debug("Shortcut for file new shortcut")
def file_open():
logging.debug("Click file Open")
def file_open_shortcut(event):
logging.debug("Shortcut for file open")
def file_reload():
logging.debug("Click file Reload")
# def file_save():
# logging.debug("Click file save")
def file_save_shortcut(event):
logging.debug("Shortcut for file save")
def file_export_python_script():
logging.debug("Click file export python script")
@ -73,70 +53,38 @@ def file_save_screenshot():
logging.debug("Click file save screenshot")
def edit_undo():
def edit_undo(event=None):
logging.debug("Click edit undo")
def edit_undo_shortcut(event):
logging.debug("Shortcut for edit undo")
def edit_redo():
def edit_redo(event=None):
logging.debug("Click edit redo")
def edit_redo_shortcut(event):
logging.debug("Shortcut for edit redo")
def edit_cut():
def edit_cut(event=None):
logging.debug("Click edit cut")
def edit_cut_shortcut(event):
logging.debug("Shortcut for edit cut")
def edit_copy():
def edit_copy(event=None):
logging.debug("Click edit copy")
def edit_copy_shortcut(event):
logging.debug("Shortcut for edit copy")
def edit_paste():
def edit_paste(event=None):
logging.debug("Click edit paste")
def edit_paste_shortcut(event):
logging.debug("Shortcut for edit paste")
def edit_select_all():
def edit_select_all(event=None):
logging.debug("Click edit select all")
def edit_select_all_shortcut(event):
logging.debug("Shortcut for edit select all")
def edit_select_adjacent():
def edit_select_adjacent(event=None):
logging.debug("Click edit select adjacent")
def edit_select_adjacent_shortcut(event):
logging.debug("Shortcut for edit select adjacent")
def edit_find():
def edit_find(event=None):
logging.debug("CLick edit find")
def edit_find_shortcut(event):
logging.debug("Shortcut for edit find")
def edit_clear_marker():
logging.debug("Click edit clear marker")
@ -157,38 +105,22 @@ def canvas_delete():
logging.debug("Click canvas delete")
def canvas_previous():
def canvas_previous(event=None):
logging.debug("Click canvas previous")
def canvas_previous_shortcut(event):
logging.debug("Shortcut for canvas previous")
def canvas_next():
def canvas_next(event=None):
logging.debug("Click canvas next")
def canvas_next_shortcut(event):
logging.debug("Shortcut for canvas next")
def canvas_first():
def canvas_first(event=None):
logging.debug("CLick canvas first")
def canvas_first_shortcut(event):
logging.debug("Shortcut for canvas first")
def canvas_last():
def canvas_last(event=None):
logging.debug("CLick canvas last")
def canvas_last_shortcut(event):
logging.debug("Shortcut canvas last")
def view_show():
logging.debug("Click view show")
@ -205,22 +137,14 @@ def view_3d_gui():
logging.debug("CLick view 3D GUI")
def view_zoom_in():
def view_zoom_in(event=None):
logging.debug("Click view zoom in")
def view_zoom_in_shortcut(event):
logging.debug("Shortcut view zoom in")
def view_zoom_out():
def view_zoom_out(event=None):
logging.debug("Click view zoom out")
def view_zoom_out_shortcut(event):
logging.debug("Shortcut view zoom out")
def tools_auto_rearrange_all():
logging.debug("Click tools, auto rearrange all")
@ -343,7 +267,7 @@ class MenuAction:
self.prompt_save_running_session()
self.app.quit()
def file_save_as_xml(self):
def file_save_as_xml(self, event=None):
logging.info("menuaction.py file_save_as_xml()")
file_path = filedialog.asksaveasfilename(
initialdir=str(XML_PATH),
@ -354,7 +278,7 @@ class MenuAction:
if file_path:
self.app.core.save_xml(file_path)
def file_open_xml(self):
def file_open_xml(self, event=None):
logging.info("menuaction.py file_open_xml()")
self.app.is_open_xml = True
file_path = filedialog.askopenfilename(

View file

@ -1,15 +1,14 @@
import tkinter as tk
import coretk.menuaction as action
from coretk.menuaction import MenuAction
class CoreMenubar(object):
class Menubar(tk.Menu):
"""
Core menubar
"""
def __init__(self, app, master, menubar):
def __init__(self, master, app, cnf={}, **kwargs):
"""
Create a CoreMenubar instance
@ -17,63 +16,54 @@ class CoreMenubar(object):
:param tkinter.Menu menubar: menubar object
:param coretk.app.Application app: application object
"""
self.menubar = menubar
self.master = master
super().__init__(master, cnf, **kwargs)
self.master.config(menu=self)
self.app = app
self.menuaction = action.MenuAction(app, master)
self.menu_action = MenuAction(self.app, self.master)
self.draw()
# def on_quit(self):
# """
# Prompt use to stop running session before application is closed
#
# :return: nothing
# """
# state = self.application.core_grpc.get_session_state()
#
# if state == core_pb2.SessionState.SHUTDOWN or state == core_pb2.SessionState.DEFINITION:
# self.application.core_grpc.delete_session()
# self.application.core_grpc.core.close()
# # self.application.quit()
# else:
# msgbox = tk.messagebox.askyesnocancel("stop", "Stop the running session?")
#
# if msgbox or msgbox == False:
# if msgbox:
# self.application.core_grpc.set_session_state("datacollect")
# self.application.core_grpc.delete_links()
# self.application.core_grpc.delete_nodes()
# self.application.core_grpc.delete_session()
#
# self.application.core_grpc.core.close()
# # self.application.quit()
def draw(self):
"""
Create core menubar and bind the hot keys to their matching command
def create_file_menu(self):
:return: nothing
"""
self.draw_file_menu()
self.draw_edit_menu()
self.draw_canvas_menu()
self.draw_view_menu()
self.draw_tools_menu()
self.draw_widgets_menu()
self.draw_session_menu()
self.draw_help_menu()
def draw_file_menu(self):
"""
Create file menu
:return: nothing
"""
file_menu = tk.Menu(self.menubar)
# menu_action = MenuAction(self.application, self.master)
file_menu = tk.Menu(self)
file_menu.add_command(
label="New", command=action.file_new, accelerator="Ctrl+N", underline=0
label="New Session",
command=action.file_new,
accelerator="Ctrl+N",
underline=0,
)
self.app.bind_all("<Control-n>", action.file_new)
file_menu.add_command(
label="Open...",
command=self.menu_action.file_open_xml,
command=self.menuaction.file_open_xml,
accelerator="Ctrl+O",
underline=0,
)
self.app.bind_all("<Control-o>", self.menuaction.file_open_xml)
file_menu.add_command(label="Reload", command=action.file_reload, underline=0)
# file_menu.add_command(
# label="Save", command=action.file_save, accelerator="Ctrl+S", underline=0
# )
# file_menu.add_command(label="Save As XML...", command=action.file_save_as_xml)
file_menu.add_command(label="Save", command=self.menu_action.file_save_as_xml)
file_menu.add_command(
label="Save", accelerator="Ctrl+S", command=self.menuaction.file_save_as_xml
)
self.app.bind_all("<Control-s>", self.menuaction.file_save_as_xml)
file_menu.add_separator()
file_menu.add_command(
label="Export Python script...", command=action.file_export_python_script
)
@ -85,9 +75,7 @@ class CoreMenubar(object):
label="Execute Python script with options...",
command=action.file_execute_python_script_with_options,
)
file_menu.add_separator()
file_menu.add_command(
label="Open current file in editor...",
command=action.file_open_current_file_in_editor,
@ -96,97 +84,95 @@ class CoreMenubar(object):
file_menu.add_command(
label="Save screenshot...", command=action.file_save_screenshot
)
file_menu.add_separator()
file_menu.add_command(
label="Quit", command=self.menuaction.on_quit, underline=0
)
self.menubar.add_cascade(label="File", menu=file_menu, underline=0)
self.add_cascade(label="File", menu=file_menu, underline=0)
def create_edit_menu(self):
def draw_edit_menu(self):
"""
Create edit menu
:return: nothing
"""
edit_menu = tk.Menu(self.menubar)
edit_menu = tk.Menu(self)
edit_menu.add_command(
label="Undo", command=action.edit_undo, accelerator="Ctrl+Z", underline=0
)
self.app.bind_all("<Control-z>", action.edit_undo)
edit_menu.add_command(
label="Redo", command=action.edit_redo, accelerator="Ctrl+Y", underline=0
)
self.app.bind_all("<Control-y>", action.edit_redo)
edit_menu.add_separator()
edit_menu.add_command(
label="Cut", command=action.edit_cut, accelerator="Ctrl+X", underline=0
)
self.app.bind_all("<Control-x>", action.edit_cut)
edit_menu.add_command(
label="Copy", command=action.edit_copy, accelerator="Ctrl+C", underline=0
)
self.app.bind_all("<Control-c>", action.edit_copy)
edit_menu.add_command(
label="Paste", command=action.edit_paste, accelerator="Ctrl+V", underline=0
)
self.app.bind_all("<Control-v>", action.edit_paste)
edit_menu.add_separator()
edit_menu.add_command(
label="Select all", command=action.edit_select_all, accelerator="Ctrl+A"
)
self.app.bind_all("<Control-a>", action.edit_select_all)
edit_menu.add_command(
label="Select Adjacent",
command=action.edit_select_adjacent,
accelerator="Ctrl+J",
)
self.app.bind_all("<Control-j>", action.edit_select_adjacent)
edit_menu.add_separator()
edit_menu.add_command(
label="Find...", command=action.edit_find, accelerator="Ctrl+F", underline=0
)
self.app.bind_all("<Control-f>", action.edit_find)
edit_menu.add_command(label="Clear marker", command=action.edit_clear_marker)
edit_menu.add_command(label="Preferences...", command=action.edit_preferences)
self.add_cascade(label="Edit", menu=edit_menu, underline=0)
self.menubar.add_cascade(label="Edit", menu=edit_menu, underline=0)
def create_canvas_menu(self):
def draw_canvas_menu(self):
"""
Create canvas menu
:return: nothing
"""
canvas_menu = tk.Menu(self.menubar)
canvas_menu = tk.Menu(self)
canvas_menu.add_command(label="New", command=action.canvas_new)
canvas_menu.add_command(label="Manage...", command=action.canvas_manage)
canvas_menu.add_command(label="Delete", command=action.canvas_delete)
canvas_menu.add_separator()
canvas_menu.add_command(
label="Size/scale...", command=self.menu_action.canvas_size_and_scale
label="Size/scale...", command=self.menuaction.canvas_size_and_scale
)
canvas_menu.add_command(
label="Wallpaper...", command=self.menu_action.canvas_set_wallpaper
label="Wallpaper...", command=self.menuaction.canvas_set_wallpaper
)
canvas_menu.add_separator()
canvas_menu.add_command(
label="Previous", command=action.canvas_previous, accelerator="PgUp"
)
self.app.bind_all("<Prior>", action.canvas_previous)
canvas_menu.add_command(
label="Next", command=action.canvas_next, accelerator="PgDown"
)
self.app.bind_all("<Next>", action.canvas_next)
canvas_menu.add_command(
label="First", command=action.canvas_first, accelerator="Home"
)
self.app.bind_all("<Home>", action.canvas_first)
canvas_menu.add_command(
label="Last", command=action.canvas_last, accelerator="End"
)
self.menubar.add_cascade(label="Canvas", menu=canvas_menu, underline=0)
self.app.bind_all("<End>", action.canvas_last)
self.add_cascade(label="Canvas", menu=canvas_menu, underline=0)
def create_show_menu(self, view_menu):
"""
@ -206,33 +192,31 @@ class CoreMenubar(object):
show_menu.add_command(label="Annotations", command=action.sub_menu_items)
show_menu.add_command(label="Grid", command=action.sub_menu_items)
show_menu.add_command(label="API Messages", command=action.sub_menu_items)
view_menu.add_cascade(label="Show", menu=show_menu)
def create_view_menu(self):
def draw_view_menu(self):
"""
Create view menu
:return: nothing
"""
view_menu = tk.Menu(self.menubar)
view_menu = tk.Menu(self)
self.create_show_menu(view_menu)
view_menu.add_command(
label="Show hidden nodes", command=action.view_show_hidden_nodes
)
view_menu.add_command(label="Locked", command=action.view_locked)
view_menu.add_command(label="3D GUI...", command=action.view_3d_gui)
view_menu.add_separator()
view_menu.add_command(
label="Zoom in", command=action.view_zoom_in, accelerator="+"
)
self.app.bind_all("<Control-Shift-plus>", action.view_zoom_in)
view_menu.add_command(
label="Zoom out", command=action.view_zoom_out, accelerator="-"
)
self.menubar.add_cascade(label="View", menu=view_menu, underline=0)
self.app.bind_all("<Control-minus>", action.view_zoom_out)
self.add_cascade(label="View", menu=view_menu, underline=0)
def create_experimental_menu(self, tools_menu):
"""
@ -251,7 +235,6 @@ class CoreMenubar(object):
experimental_menu.add_command(
label="Topology partitioning...", command=action.sub_menu_items
)
tools_menu.add_cascade(
label="Experimental", menu=experimental_menu, underline=0
)
@ -269,7 +252,6 @@ class CoreMenubar(object):
for i in nums:
the_label = "R(" + str(i) + ")"
random_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(
label="Random", menu=random_menu, underline=0
)
@ -282,14 +264,11 @@ class CoreMenubar(object):
:return: nothing
"""
grid_menu = tk.Menu(topology_generator_menu)
# list of number of nodes to create
nums = [1, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 100]
for i in nums:
the_label = "G(" + str(i) + ")"
grid_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(label="Grid", menu=grid_menu, underline=0)
def create_connected_grid_menu(self, topology_generator_menu):
@ -324,7 +303,6 @@ class CoreMenubar(object):
for i in nums:
the_label = "P(" + str(i) + ")"
chain_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(label="Chain", menu=chain_menu, underline=0)
def create_star_menu(self, topology_generator_menu):
@ -338,7 +316,6 @@ class CoreMenubar(object):
for i in range(3, 26, 1):
the_label = "C(" + str(i) + ")"
star_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(label="Star", menu=star_menu, underline=0)
def create_cycle_menu(self, topology_generator_menu):
@ -352,7 +329,6 @@ class CoreMenubar(object):
for i in range(3, 25, 1):
the_label = "C(" + str(i) + ")"
cycle_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(label="Cycle", menu=cycle_menu, underline=0)
def create_wheel_menu(self, topology_generator_menu):
@ -366,7 +342,6 @@ class CoreMenubar(object):
for i in range(4, 26, 1):
the_label = "W(" + str(i) + ")"
wheel_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(label="Wheel", menu=wheel_menu, underline=0)
def create_cube_menu(self, topology_generator_menu):
@ -380,7 +355,6 @@ class CoreMenubar(object):
for i in range(2, 7, 1):
the_label = "Q(" + str(i) + ")"
cube_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(label="Cube", menu=cube_menu, underline=0)
def create_clique_menu(self, topology_generator_menu):
@ -394,7 +368,6 @@ class CoreMenubar(object):
for i in range(3, 25, 1):
the_label = "K(" + str(i) + ")"
clique_menu.add_command(label=the_label, command=action.sub_menu_items)
topology_generator_menu.add_cascade(
label="Clique", menu=clique_menu, underline=0
)
@ -429,7 +402,6 @@ class CoreMenubar(object):
:return: nothing
"""
topology_generator_menu = tk.Menu(tools_menu)
self.create_random_menu(topology_generator_menu)
self.create_grid_menu(topology_generator_menu)
self.create_connected_grid_menu(topology_generator_menu)
@ -440,19 +412,17 @@ class CoreMenubar(object):
self.create_cube_menu(topology_generator_menu)
self.create_clique_menu(topology_generator_menu)
self.create_bipartite_menu(topology_generator_menu)
tools_menu.add_cascade(
label="Topology generator", menu=topology_generator_menu, underline=0
)
def create_tools_menu(self):
def draw_tools_menu(self):
"""
Create tools menu
:return: nothing
"""
tools_menu = tk.Menu(self.menubar)
tools_menu = tk.Menu(self)
tools_menu.add_command(
label="Auto rearrange all",
command=action.tools_auto_rearrange_all,
@ -464,13 +434,10 @@ class CoreMenubar(object):
underline=0,
)
tools_menu.add_separator()
tools_menu.add_command(
label="Align to grid", command=action.tools_align_to_grid, underline=0
)
tools_menu.add_separator()
tools_menu.add_command(label="Traffic...", command=action.tools_traffic)
tools_menu.add_command(
label="IP addresses...", command=action.tools_ip_addresses, underline=0
@ -489,8 +456,7 @@ class CoreMenubar(object):
self.create_experimental_menu(tools_menu)
self.create_topology_generator_menu(tools_menu)
tools_menu.add_command(label="Debugger...", command=action.tools_debugger)
self.menubar.add_cascade(label="Tools", menu=tools_menu, underline=0)
self.add_cascade(label="Tools", menu=tools_menu, underline=0)
def create_observer_widgets_menu(self, widget_menu):
"""
@ -544,9 +510,8 @@ class CoreMenubar(object):
label="PIM neighbors", command=action.sub_menu_items
)
observer_widget_menu.add_command(
label="Edit...", command=self.menu_action.edit_observer_widgets
label="Edit...", command=self.menuaction.edit_observer_widgets
)
widget_menu.add_cascade(label="Observer Widgets", menu=observer_widget_menu)
def create_adjacency_menu(self, widget_menu):
@ -561,47 +526,40 @@ class CoreMenubar(object):
adjacency_menu.add_command(label="OSPFv3", command=action.sub_menu_items)
adjacency_menu.add_command(label="OSLR", command=action.sub_menu_items)
adjacency_menu.add_command(label="OSLRv2", command=action.sub_menu_items)
widget_menu.add_cascade(label="Adjacency", menu=adjacency_menu)
def create_widgets_menu(self):
def draw_widgets_menu(self):
"""
Create widget menu
:return: nothing
"""
widget_menu = tk.Menu(self.menubar)
widget_menu = tk.Menu(self)
self.create_observer_widgets_menu(widget_menu)
self.create_adjacency_menu(widget_menu)
widget_menu.add_command(label="Throughput", command=action.widgets_throughput)
widget_menu.add_separator()
widget_menu.add_command(
label="Configure Adjacency...", command=action.widgets_configure_adjacency
)
widget_menu.add_command(
label="Configure Throughput...", command=action.widgets_configure_throughput
)
self.add_cascade(label="Widgets", menu=widget_menu, underline=0)
self.menubar.add_cascade(label="Widgets", menu=widget_menu, underline=0)
def create_session_menu(self):
def draw_session_menu(self):
"""
Create session menu
:return: nothing
"""
session_menu = tk.Menu(self.menubar)
session_menu = tk.Menu(self)
session_menu.add_command(
label="Change sessions...",
command=self.menu_action.session_change_sessions,
command=self.menuaction.session_change_sessions,
underline=0,
)
session_menu.add_separator()
session_menu.add_command(
label="Node types...", command=action.session_node_types, underline=0
)
@ -609,7 +567,7 @@ class CoreMenubar(object):
label="Comments...", command=action.session_comments, underline=0
)
session_menu.add_command(
label="Hooks...", command=self.menu_action.session_hooks, underline=0
label="Hooks...", command=self.menuaction.session_hooks, underline=0
)
session_menu.add_command(
label="Reset node positions",
@ -618,69 +576,27 @@ class CoreMenubar(object):
)
session_menu.add_command(
label="Emulation servers...",
command=self.menu_action.session_servers,
command=self.menuaction.session_servers,
underline=0,
)
session_menu.add_command(
label="Options...", command=self.menu_action.session_options, underline=0
label="Options...", command=self.menuaction.session_options, underline=0
)
self.add_cascade(label="Session", menu=session_menu, underline=0)
self.menubar.add_cascade(label="Session", menu=session_menu, underline=0)
def create_help_menu(self):
def draw_help_menu(self):
"""
Create help menu
:return: nothing
"""
help_menu = tk.Menu(self.menubar)
help_menu = tk.Menu(self)
help_menu.add_command(
label="Core Github (www)", command=self.menu_action.help_core_github
label="Core Github (www)", command=self.menuaction.help_core_github
)
help_menu.add_command(
label="Core Documentation (www)",
command=self.menu_action.help_core_documentation,
command=self.menuaction.help_core_documentation,
)
help_menu.add_command(label="About", command=action.help_about)
self.menubar.add_cascade(label="Help", menu=help_menu)
def bind_menubar_shortcut(self):
"""
Bind hot keys to matching command
:return: nothing
"""
self.app.bind_all("<Control-n>", action.file_new_shortcut)
self.app.bind_all("<Control-o>", action.file_open_shortcut)
self.app.bind_all("<Control-s>", action.file_save_shortcut)
self.app.bind_all("<Control-z>", action.edit_undo_shortcut)
self.app.bind_all("<Control-y>", action.edit_redo_shortcut)
self.app.bind_all("<Control-x>", action.edit_cut_shortcut)
self.app.bind_all("<Control-c>", action.edit_copy_shortcut)
self.app.bind_all("<Control-v>", action.edit_paste_shortcut)
self.app.bind_all("<Control-a>", action.edit_select_all_shortcut)
self.app.bind_all("<Control-j>", action.edit_select_adjacent_shortcut)
self.app.bind_all("<Control-f>", action.edit_find_shortcut)
self.app.bind_all("<Prior>", action.canvas_previous_shortcut)
self.app.bind_all("<Next>", action.canvas_next_shortcut)
self.app.bind_all("<Home>", action.canvas_first_shortcut)
self.app.bind_all("<End>", action.canvas_last_shortcut)
self.app.bind_all("<Control-Shift-plus>", action.view_zoom_in_shortcut)
self.app.bind_all("<Control-minus>", action.view_zoom_out_shortcut)
def create_core_menubar(self):
"""
Create core menubar and bind the hot keys to their matching command
:return: nothing
"""
self.create_file_menu()
self.create_edit_menu()
self.create_canvas_menu()
self.create_view_menu()
self.create_tools_menu()
self.create_widgets_menu()
self.create_session_menu()
self.create_help_menu()
self.bind_menubar_shortcut()
self.add_cascade(label="Help", menu=help_menu)

View file

@ -34,7 +34,6 @@ class Toolbar(tk.Frame):
self.link_layer_option_menu = None
self.marker_option_menu = None
self.network_layer_option_menu = None
self.canvas = None
self.node_button = None
self.network_button = None
self.annotation_button = None
@ -204,7 +203,7 @@ class Toolbar(tk.Frame):
def click_selection_tool(self):
logging.debug("clicked selection tool")
self.canvas.mode = GraphMode.SELECT
self.app.canvas.mode = GraphMode.SELECT
def click_start_session_tool(self):
"""
@ -214,13 +213,13 @@ class Toolbar(tk.Frame):
:return: nothing
"""
logging.debug("clicked start button")
self.canvas.mode = GraphMode.SELECT
self.app.canvas.mode = GraphMode.SELECT
self.app.core.start_session()
self.runtime_frame.tkraise()
def click_link_tool(self):
logging.debug("Click LINK button")
self.canvas.mode = GraphMode.EDGE
self.app.canvas.mode = GraphMode.EDGE
def update_button(self, button, image_enum, name):
logging.info("update button(%s): %s, %s", button, image_enum, name)
@ -232,9 +231,9 @@ class Toolbar(tk.Frame):
image = Images.get(image_enum)
logging.info("updating button(%s): %s", button, name)
button.configure(image=image)
self.canvas.mode = GraphMode.NODE
self.canvas.draw_node_image = image
self.canvas.draw_node_name = name
self.app.canvas.mode = GraphMode.NODE
self.app.canvas.draw_node_image = image
self.app.canvas.draw_node_name = name
def hide_pickers(self):
logging.info("hiding pickers")