some refactoring for menubar code
This commit is contained in:
parent
be36940bd1
commit
99678499ce
4 changed files with 115 additions and 286 deletions
|
@ -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)
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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)
|
|
@ -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")
|
||||
|
|
Loading…
Add table
Reference in a new issue