diff --git a/coretk/coretk/app.py b/coretk/coretk/app.py index a53b0f8b..4bb23bc0 100644 --- a/coretk/coretk/app.py +++ b/coretk/coretk/app.py @@ -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) diff --git a/coretk/coretk/menuaction.py b/coretk/coretk/menuaction.py index 12f81559..88f32bf4 100644 --- a/coretk/coretk/menuaction.py +++ b/coretk/coretk/menuaction.py @@ -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( diff --git a/coretk/coretk/coremenubar.py b/coretk/coretk/menubar.py similarity index 79% rename from coretk/coretk/coremenubar.py rename to coretk/coretk/menubar.py index f720b093..143833b7 100644 --- a/coretk/coretk/coremenubar.py +++ b/coretk/coretk/menubar.py @@ -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("", 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("", 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("", 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("", action.edit_undo) edit_menu.add_command( label="Redo", command=action.edit_redo, accelerator="Ctrl+Y", underline=0 ) - + self.app.bind_all("", 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("", action.edit_cut) edit_menu.add_command( label="Copy", command=action.edit_copy, accelerator="Ctrl+C", underline=0 ) + self.app.bind_all("", action.edit_copy) edit_menu.add_command( label="Paste", command=action.edit_paste, accelerator="Ctrl+V", underline=0 ) - + self.app.bind_all("", 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("", action.edit_select_all) edit_menu.add_command( label="Select Adjacent", command=action.edit_select_adjacent, accelerator="Ctrl+J", ) - + self.app.bind_all("", 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("", 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("", action.canvas_previous) canvas_menu.add_command( label="Next", command=action.canvas_next, accelerator="PgDown" ) + self.app.bind_all("", action.canvas_next) canvas_menu.add_command( label="First", command=action.canvas_first, accelerator="Home" ) + self.app.bind_all("", 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("", 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("", 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("", 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("", action.file_new_shortcut) - self.app.bind_all("", action.file_open_shortcut) - self.app.bind_all("", action.file_save_shortcut) - self.app.bind_all("", action.edit_undo_shortcut) - self.app.bind_all("", action.edit_redo_shortcut) - self.app.bind_all("", action.edit_cut_shortcut) - self.app.bind_all("", action.edit_copy_shortcut) - self.app.bind_all("", action.edit_paste_shortcut) - self.app.bind_all("", action.edit_select_all_shortcut) - self.app.bind_all("", action.edit_select_adjacent_shortcut) - self.app.bind_all("", action.edit_find_shortcut) - self.app.bind_all("", action.canvas_previous_shortcut) - self.app.bind_all("", action.canvas_next_shortcut) - self.app.bind_all("", action.canvas_first_shortcut) - self.app.bind_all("", action.canvas_last_shortcut) - self.app.bind_all("", action.view_zoom_in_shortcut) - self.app.bind_all("", 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) diff --git a/coretk/coretk/toolbar.py b/coretk/coretk/toolbar.py index ace49796..91e09508 100644 --- a/coretk/coretk/toolbar.py +++ b/coretk/coretk/toolbar.py @@ -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")