refactoring to change core_grpc to core, and update CoreGrpc to be CoreClient and have core now be client, also refactored usages of application to be just app to keep it short
This commit is contained in:
parent
1f230146a6
commit
6fa3beb1c1
14 changed files with 176 additions and 194 deletions
|
@ -1,7 +1,7 @@
|
|||
import logging
|
||||
import tkinter as tk
|
||||
|
||||
from coretk.coregrpc import CoreGrpc
|
||||
from coretk.coreclient import CoreClient
|
||||
from coretk.coremenubar import CoreMenubar
|
||||
from coretk.coretoolbar import CoreToolbar
|
||||
from coretk.graph import CanvasGraph
|
||||
|
@ -25,12 +25,12 @@ class Application(tk.Frame):
|
|||
self.radiovar = tk.IntVar(value=1)
|
||||
self.show_grid_var = tk.IntVar(value=1)
|
||||
self.adjust_to_dim_var = tk.IntVar(value=0)
|
||||
self.core_grpc = CoreGrpc(self)
|
||||
self.core = CoreClient(self)
|
||||
self.setup_app()
|
||||
self.create_menu()
|
||||
self.create_widgets()
|
||||
self.draw_canvas()
|
||||
self.core_grpc.set_up()
|
||||
self.core.set_up()
|
||||
|
||||
def setup_app(self):
|
||||
self.master.title("CORE")
|
||||
|
@ -54,7 +54,7 @@ class Application(tk.Frame):
|
|||
|
||||
def draw_canvas(self):
|
||||
self.canvas = CanvasGraph(
|
||||
self, self.core_grpc, background="#cccccc", scrollregion=(0, 0, 1200, 1000)
|
||||
self, self.core, background="#cccccc", scrollregion=(0, 0, 1200, 1000)
|
||||
)
|
||||
self.canvas.pack(fill=tk.BOTH, expand=True)
|
||||
|
||||
|
|
|
@ -56,13 +56,13 @@ class Edge:
|
|||
self.interface_2 = None
|
||||
|
||||
|
||||
class CoreGrpc:
|
||||
def __init__(self, app, sid=None):
|
||||
class CoreClient:
|
||||
def __init__(self, app):
|
||||
"""
|
||||
Create a CoreGrpc instance
|
||||
"""
|
||||
self.core = client.CoreGrpcClient()
|
||||
self.session_id = sid
|
||||
self.client = client.CoreGrpcClient()
|
||||
self.session_id = None
|
||||
self.node_ids = []
|
||||
self.app = app
|
||||
self.master = app.master
|
||||
|
@ -99,9 +99,9 @@ class CoreGrpc:
|
|||
def join_session(self, session_id):
|
||||
# query session and set as current session
|
||||
self.session_id = session_id
|
||||
response = self.core.get_session(self.session_id)
|
||||
response = self.client.get_session(self.session_id)
|
||||
logging.info("joining session(%s): %s", self.session_id, response)
|
||||
self.core.events(self.session_id, self.handle_events)
|
||||
self.client.events(self.session_id, self.handle_events)
|
||||
|
||||
# set title to session
|
||||
self.master.title(f"CORE Session({self.session_id})")
|
||||
|
@ -129,7 +129,7 @@ class CoreGrpc:
|
|||
|
||||
:return: nothing
|
||||
"""
|
||||
response = self.core.create_session()
|
||||
response = self.client.create_session()
|
||||
logging.info("created session: %s", response)
|
||||
self.join_session(response.session_id)
|
||||
|
||||
|
@ -138,15 +138,15 @@ class CoreGrpc:
|
|||
sid = self.session_id
|
||||
else:
|
||||
sid = custom_sid
|
||||
response = self.core.delete_session(sid)
|
||||
response = self.client.delete_session(sid)
|
||||
logging.info("Deleted session result: %s", response)
|
||||
|
||||
def terminate_session(self, custom_sid=None):
|
||||
def shutdown_session(self, custom_sid=None):
|
||||
if custom_sid is None:
|
||||
sid = self.session_id
|
||||
else:
|
||||
sid = custom_sid
|
||||
s = self.core.get_session(sid).session
|
||||
s = self.client.get_session(sid).session
|
||||
# delete links and nodes from running session
|
||||
if s.state == core_pb2.SessionState.RUNTIME:
|
||||
self.set_session_state("datacollect", sid)
|
||||
|
@ -160,8 +160,8 @@ class CoreGrpc:
|
|||
|
||||
:return: existing sessions
|
||||
"""
|
||||
self.core.connect()
|
||||
response = self.core.get_sessions()
|
||||
self.client.connect()
|
||||
response = self.client.get_sessions()
|
||||
|
||||
# if there are no sessions, create a new session, else join a session
|
||||
sessions = response.sessions
|
||||
|
@ -172,7 +172,7 @@ class CoreGrpc:
|
|||
dialog.show()
|
||||
|
||||
def get_session_state(self):
|
||||
response = self.core.get_session(self.session_id)
|
||||
response = self.client.get_session(self.session_id)
|
||||
# logging.info("get session: %s", response)
|
||||
return response.session.state
|
||||
|
||||
|
@ -190,27 +190,29 @@ class CoreGrpc:
|
|||
|
||||
response = None
|
||||
if state == "configuration":
|
||||
response = self.core.set_session_state(
|
||||
response = self.client.set_session_state(
|
||||
sid, core_pb2.SessionState.CONFIGURATION
|
||||
)
|
||||
elif state == "instantiation":
|
||||
response = self.core.set_session_state(
|
||||
response = self.client.set_session_state(
|
||||
sid, core_pb2.SessionState.INSTANTIATION
|
||||
)
|
||||
elif state == "datacollect":
|
||||
response = self.core.set_session_state(
|
||||
response = self.client.set_session_state(
|
||||
sid, core_pb2.SessionState.DATACOLLECT
|
||||
)
|
||||
elif state == "shutdown":
|
||||
response = self.core.set_session_state(sid, core_pb2.SessionState.SHUTDOWN)
|
||||
response = self.client.set_session_state(
|
||||
sid, core_pb2.SessionState.SHUTDOWN
|
||||
)
|
||||
elif state == "runtime":
|
||||
response = self.core.set_session_state(sid, core_pb2.SessionState.RUNTIME)
|
||||
response = self.client.set_session_state(sid, core_pb2.SessionState.RUNTIME)
|
||||
elif state == "definition":
|
||||
response = self.core.set_session_state(
|
||||
response = self.client.set_session_state(
|
||||
sid, core_pb2.SessionState.DEFINITION
|
||||
)
|
||||
elif state == "none":
|
||||
response = self.core.set_session_state(sid, core_pb2.SessionState.NONE)
|
||||
response = self.client.set_session_state(sid, core_pb2.SessionState.NONE)
|
||||
else:
|
||||
logging.error("coregrpc.py: set_session_state: INVALID STATE")
|
||||
|
||||
|
@ -218,7 +220,7 @@ class CoreGrpc:
|
|||
|
||||
def edit_node(self, node_id, x, y):
|
||||
position = core_pb2.Position(x=x, y=y)
|
||||
response = self.core.edit_node(self.session_id, node_id, position)
|
||||
response = self.client.edit_node(self.session_id, node_id, position)
|
||||
logging.info("updated node id %s: %s", node_id, response)
|
||||
|
||||
def delete_nodes(self, delete_session=None):
|
||||
|
@ -226,8 +228,8 @@ class CoreGrpc:
|
|||
sid = self.session_id
|
||||
else:
|
||||
sid = delete_session
|
||||
for node in self.core.get_session(sid).session.nodes:
|
||||
response = self.core.delete_node(self.session_id, node.id)
|
||||
for node in self.client.get_session(sid).session.nodes:
|
||||
response = self.client.delete_node(self.session_id, node.id)
|
||||
logging.info("delete nodes %s", response)
|
||||
|
||||
def delete_links(self, delete_session=None):
|
||||
|
@ -237,8 +239,8 @@ class CoreGrpc:
|
|||
else:
|
||||
sid = delete_session
|
||||
|
||||
for link in self.core.get_session(sid).session.links:
|
||||
response = self.core.delete_link(
|
||||
for link in self.client.get_session(sid).session.links:
|
||||
response = self.client.delete_link(
|
||||
self.session_id,
|
||||
link.node_one_id,
|
||||
link.node_two_id,
|
||||
|
@ -259,7 +261,7 @@ class CoreGrpc:
|
|||
wlan_configs=None,
|
||||
mobility_configs=None,
|
||||
):
|
||||
response = self.core.start_session(
|
||||
response = self.client.start_session(
|
||||
session_id=self.session_id,
|
||||
nodes=nodes,
|
||||
links=links,
|
||||
|
@ -268,7 +270,7 @@ class CoreGrpc:
|
|||
logging.debug("Start session %s, result: %s", self.session_id, response.result)
|
||||
|
||||
def stop_session(self):
|
||||
response = self.core.stop_session(session_id=self.session_id)
|
||||
response = self.client.stop_session(session_id=self.session_id)
|
||||
logging.debug("coregrpc.py Stop session, result: %s", response.result)
|
||||
|
||||
# TODO no need, might get rid of this
|
||||
|
@ -285,11 +287,11 @@ class CoreGrpc:
|
|||
"""
|
||||
if1 = self.create_interface(type1, edge.interface_1)
|
||||
if2 = self.create_interface(type2, edge.interface_2)
|
||||
response = self.core.add_link(self.session_id, id1, id2, if1, if2)
|
||||
response = self.client.add_link(self.session_id, id1, id2, if1, if2)
|
||||
logging.info("created link: %s", response)
|
||||
|
||||
def launch_terminal(self, node_id):
|
||||
response = self.core.get_node_terminal(self.session_id, node_id)
|
||||
response = self.client.get_node_terminal(self.session_id, node_id)
|
||||
logging.info("get terminal %s", response.terminal)
|
||||
os.system("xterm -e %s &" % response.terminal)
|
||||
|
||||
|
@ -300,9 +302,9 @@ class CoreGrpc:
|
|||
:param str file_path: file path that user pick
|
||||
:return: nothing
|
||||
"""
|
||||
response = self.core.save_xml(self.session_id, file_path)
|
||||
response = self.client.save_xml(self.session_id, file_path)
|
||||
logging.info("coregrpc.py save xml %s", response)
|
||||
self.core.events(self.session_id, self.handle_events)
|
||||
self.client.events(self.session_id, self.handle_events)
|
||||
|
||||
def open_xml(self, file_path):
|
||||
"""
|
||||
|
@ -311,7 +313,7 @@ class CoreGrpc:
|
|||
:param str file_path: file to open
|
||||
:return: session id
|
||||
"""
|
||||
response = self.core.open_xml(file_path)
|
||||
response = self.client.open_xml(file_path)
|
||||
logging.debug("open xml: %s", response)
|
||||
self.join_session(response.session_id)
|
||||
|
||||
|
@ -322,7 +324,7 @@ class CoreGrpc:
|
|||
:return: nothing
|
||||
"""
|
||||
logging.debug("Close grpc")
|
||||
self.core.close()
|
||||
self.client.close()
|
||||
|
||||
def peek_id(self):
|
||||
"""
|
||||
|
@ -353,7 +355,7 @@ class CoreGrpc:
|
|||
position = core_pb2.Position(x=x, y=y)
|
||||
node = core_pb2.Node(id=node_id, type=node_type, position=position, model=model)
|
||||
self.node_ids.append(node_id)
|
||||
response = self.core.add_node(self.session_id, node)
|
||||
response = self.client.add_node(self.session_id, node)
|
||||
logging.info("created node: %s", response)
|
||||
if node_type == core_pb2.NodeType.WIRELESS_LAN:
|
||||
d = OrderedDict()
|
||||
|
@ -362,7 +364,7 @@ class CoreGrpc:
|
|||
d["jitter"] = "0"
|
||||
d["delay"] = "20000"
|
||||
d["error"] = "0"
|
||||
r = self.core.set_wlan_config(self.session_id, node_id, d)
|
||||
r = self.client.set_wlan_config(self.session_id, node_id, d)
|
||||
logging.debug("set wlan config %s", r)
|
||||
return response.node_id
|
||||
|
|
@ -9,19 +9,19 @@ class CoreMenubar(object):
|
|||
Core menubar
|
||||
"""
|
||||
|
||||
def __init__(self, application, master, menubar):
|
||||
def __init__(self, app, master, menubar):
|
||||
"""
|
||||
Create a CoreMenubar instance
|
||||
|
||||
:param master:
|
||||
:param tkinter.Menu menubar: menubar object
|
||||
:param coretk.app.Application application: application object
|
||||
:param coretk.app.Application app: application object
|
||||
"""
|
||||
self.menubar = menubar
|
||||
self.master = master
|
||||
self.application = application
|
||||
self.menuaction = action.MenuAction(application, master)
|
||||
self.menu_action = MenuAction(self.application, self.master)
|
||||
self.app = app
|
||||
self.menuaction = action.MenuAction(app, master)
|
||||
self.menu_action = MenuAction(self.app, self.master)
|
||||
|
||||
# def on_quit(self):
|
||||
# """
|
||||
|
@ -649,23 +649,23 @@ class CoreMenubar(object):
|
|||
|
||||
:return: nothing
|
||||
"""
|
||||
self.application.bind_all("<Control-n>", action.file_new_shortcut)
|
||||
self.application.bind_all("<Control-o>", action.file_open_shortcut)
|
||||
self.application.bind_all("<Control-s>", action.file_save_shortcut)
|
||||
self.application.bind_all("<Control-z>", action.edit_undo_shortcut)
|
||||
self.application.bind_all("<Control-y>", action.edit_redo_shortcut)
|
||||
self.application.bind_all("<Control-x>", action.edit_cut_shortcut)
|
||||
self.application.bind_all("<Control-c>", action.edit_copy_shortcut)
|
||||
self.application.bind_all("<Control-v>", action.edit_paste_shortcut)
|
||||
self.application.bind_all("<Control-a>", action.edit_select_all_shortcut)
|
||||
self.application.bind_all("<Control-j>", action.edit_select_adjacent_shortcut)
|
||||
self.application.bind_all("<Control-f>", action.edit_find_shortcut)
|
||||
self.application.bind_all("<Prior>", action.canvas_previous_shortcut)
|
||||
self.application.bind_all("<Next>", action.canvas_next_shortcut)
|
||||
self.application.bind_all("<Home>", action.canvas_first_shortcut)
|
||||
self.application.bind_all("<End>", action.canvas_last_shortcut)
|
||||
self.application.bind_all("<Control-Shift-plus>", action.view_zoom_in_shortcut)
|
||||
self.application.bind_all("<Control-minus>", action.view_zoom_out_shortcut)
|
||||
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):
|
||||
"""
|
||||
|
|
|
@ -25,14 +25,14 @@ class CoreToolbar(object):
|
|||
Core toolbar class
|
||||
"""
|
||||
|
||||
def __init__(self, application, edit_frame, menubar):
|
||||
def __init__(self, app, edit_frame, menubar):
|
||||
"""
|
||||
Create a CoreToolbar instance
|
||||
|
||||
:param tkinter.Frame edit_frame: edit frame
|
||||
"""
|
||||
self.application = application
|
||||
self.master = application.master
|
||||
self.app = app
|
||||
self.master = app.master
|
||||
self.edit_frame = edit_frame
|
||||
self.menubar = menubar
|
||||
self.radio_value = tk.IntVar()
|
||||
|
@ -161,7 +161,7 @@ class CoreToolbar(object):
|
|||
:return: nothing
|
||||
"""
|
||||
logging.debug("Click START STOP SESSION button")
|
||||
helper = CoreToolbarHelp(self.application)
|
||||
helper = CoreToolbarHelp(self.app)
|
||||
self.destroy_children_widgets()
|
||||
self.canvas.mode = GraphMode.SELECT
|
||||
|
||||
|
@ -593,11 +593,7 @@ class CoreToolbar(object):
|
|||
"""
|
||||
logging.debug("Click on STOP button ")
|
||||
self.destroy_children_widgets()
|
||||
|
||||
# self.canvas.core_grpc.set_session_state(SessionStateEnum.DATACOLLECT.value)
|
||||
# self.canvas.core_grpc.delete_links()
|
||||
# self.canvas.core_grpc.delete_nodes()
|
||||
self.canvas.core_grpc.stop_session()
|
||||
self.app.core.stop_session()
|
||||
self.create_toolbar()
|
||||
|
||||
def click_run_button(self):
|
||||
|
|
|
@ -15,8 +15,7 @@ class CoreToolbarHelp:
|
|||
:return: nothing
|
||||
"""
|
||||
nodes = []
|
||||
core = self.app.core_grpc
|
||||
for node in core.nodes.values():
|
||||
for node in self.app.core.nodes.values():
|
||||
pos = core_pb2.Position(x=int(node.x), y=int(node.y))
|
||||
n = core_pb2.Node(
|
||||
id=node.node_id, type=node.type, position=pos, model=node.model
|
||||
|
@ -32,14 +31,9 @@ class CoreToolbarHelp:
|
|||
:return: list of protobuf links
|
||||
"""
|
||||
links = []
|
||||
core = self.app.core_grpc
|
||||
for edge in core.edges.values():
|
||||
interface_one = self.app.core_grpc.create_interface(
|
||||
edge.type1, edge.interface_1
|
||||
)
|
||||
interface_two = self.app.core_grpc.create_interface(
|
||||
edge.type2, edge.interface_2
|
||||
)
|
||||
for edge in self.app.core.edges.values():
|
||||
interface_one = self.app.core.create_interface(edge.type1, edge.interface_1)
|
||||
interface_two = self.app.core.create_interface(edge.type2, edge.interface_2)
|
||||
# TODO for now only consider the basic cases
|
||||
if (
|
||||
edge.type1 == core_pb2.NodeType.WIRELESS_LAN
|
||||
|
@ -61,8 +55,7 @@ class CoreToolbarHelp:
|
|||
|
||||
def get_wlan_configuration_list(self):
|
||||
configs = []
|
||||
core = self.app.core_grpc
|
||||
manager_configs = core.wlanconfig_management.configurations
|
||||
manager_configs = self.app.core.wlanconfig_management.configurations
|
||||
for key in manager_configs:
|
||||
cnf = core_pb2.WlanConfig(node_id=key, config=manager_configs[key])
|
||||
configs.append(cnf)
|
||||
|
@ -72,4 +65,4 @@ class CoreToolbarHelp:
|
|||
nodes = self.get_node_list()
|
||||
links = self.get_link_list()
|
||||
wlan_configs = self.get_wlan_configuration_list()
|
||||
self.app.core_grpc.start_session(nodes, links, wlan_configs=wlan_configs)
|
||||
self.app.core.start_session(nodes, links, wlan_configs=wlan_configs)
|
||||
|
|
|
@ -18,8 +18,8 @@ class SessionOptionsDialog(Dialog):
|
|||
self.draw()
|
||||
|
||||
def draw(self):
|
||||
session_id = self.master.core_grpc.session_id
|
||||
response = self.master.core_grpc.core.get_session_options(session_id)
|
||||
session_id = self.app.core.session_id
|
||||
response = self.app.core.client.get_session_options(session_id)
|
||||
logging.info("session options: %s", response)
|
||||
self.options = response.config
|
||||
self.values = configutils.create_config(self, self.options, PAD_X, PAD_Y)
|
||||
|
@ -28,7 +28,7 @@ class SessionOptionsDialog(Dialog):
|
|||
|
||||
def save(self):
|
||||
config = configutils.parse_config(self.options, self.values)
|
||||
session_id = self.master.core_grpc.session_id
|
||||
response = self.master.core_grpc.core.set_session_options(session_id, config)
|
||||
session_id = self.app.core.session_id
|
||||
response = self.app.core.client.set_session_options(session_id, config)
|
||||
logging.info("saved session config: %s", response)
|
||||
self.destroy()
|
||||
|
|
|
@ -12,7 +12,7 @@ class SessionsDialog(Dialog):
|
|||
"""
|
||||
create session table instance
|
||||
|
||||
:param coretk.coregrpc.CoreGrpc grpc: coregrpc
|
||||
:param coretk.coreclient.CoreClient grpc: coregrpc
|
||||
:param root.master master:
|
||||
"""
|
||||
super().__init__(master, app, "Sessions", modal=True)
|
||||
|
@ -51,7 +51,7 @@ class SessionsDialog(Dialog):
|
|||
self.tree.column("nodes", stretch=tk.YES)
|
||||
self.tree.heading("nodes", text="Node Count")
|
||||
|
||||
response = self.app.core_grpc.core.get_sessions()
|
||||
response = self.app.core.client.get_sessions()
|
||||
logging.info("sessions: %s", response)
|
||||
for index, session in enumerate(response.sessions):
|
||||
state_name = core_pb2.SessionState.Enum.Name(session.state)
|
||||
|
@ -105,7 +105,7 @@ class SessionsDialog(Dialog):
|
|||
b.grid(row=0, column=3, padx=2, sticky="ew")
|
||||
|
||||
def click_new(self):
|
||||
self.app.core_grpc.create_new_session()
|
||||
self.app.core.create_new_session()
|
||||
self.destroy()
|
||||
|
||||
def click_select(self, event):
|
||||
|
@ -142,7 +142,7 @@ class SessionsDialog(Dialog):
|
|||
logging.error("querysessiondrawing.py invalid state")
|
||||
|
||||
def join_session(self, session_id):
|
||||
self.app.core_grpc.join_session(session_id)
|
||||
self.app.core.join_session(session_id)
|
||||
self.destroy()
|
||||
|
||||
def on_selected(self, event):
|
||||
|
@ -151,6 +151,6 @@ class SessionsDialog(Dialog):
|
|||
self.join_session(sid)
|
||||
|
||||
def shutdown_session(self, sid):
|
||||
self.app.core_grpc.terminate_session(sid)
|
||||
self.app.core.shutdown_session(sid)
|
||||
self.click_new()
|
||||
self.destroy()
|
||||
|
|
|
@ -26,7 +26,7 @@ CORE_EMANE = ["emane"]
|
|||
|
||||
|
||||
class CanvasGraph(tk.Canvas):
|
||||
def __init__(self, master, core_grpc, cnf=None, **kwargs):
|
||||
def __init__(self, master, core, cnf=None, **kwargs):
|
||||
if cnf is None:
|
||||
cnf = {}
|
||||
kwargs["highlightthickness"] = 0
|
||||
|
@ -45,10 +45,10 @@ class CanvasGraph(tk.Canvas):
|
|||
self.setup_menus()
|
||||
self.setup_bindings()
|
||||
self.draw_grid()
|
||||
self.core_grpc = core_grpc
|
||||
self.helper = GraphHelper(self, core_grpc)
|
||||
self.throughput_draw = Throughput(self, core_grpc)
|
||||
self.wireless_draw = WirelessConnection(self, core_grpc)
|
||||
self.core = core
|
||||
self.helper = GraphHelper(self, core)
|
||||
self.throughput_draw = Throughput(self, core)
|
||||
self.wireless_draw = WirelessConnection(self, core)
|
||||
self.is_node_context_opened = False
|
||||
|
||||
def setup_menus(self):
|
||||
|
@ -147,7 +147,7 @@ class CanvasGraph(tk.Canvas):
|
|||
core_id_to_canvas_id[node.id] = n.id
|
||||
|
||||
# store the node in grpc manager
|
||||
self.core_grpc.add_preexisting_node(n, session.id, node, name)
|
||||
self.core.add_preexisting_node(n, session.id, node, name)
|
||||
|
||||
# draw existing links
|
||||
for link in session.links:
|
||||
|
@ -179,7 +179,7 @@ class CanvasGraph(tk.Canvas):
|
|||
n1.edges.add(e)
|
||||
n2.edges.add(e)
|
||||
self.edges[e.token] = e
|
||||
self.core_grpc.add_edge(session.id, e.token, n1.id, n2.id)
|
||||
self.core.add_edge(session.id, e.token, n1.id, n2.id)
|
||||
|
||||
self.helper.redraw_antenna(link, n1, n2)
|
||||
|
||||
|
@ -208,14 +208,14 @@ class CanvasGraph(tk.Canvas):
|
|||
# TODO will include throughput and ipv6 in the future
|
||||
if1 = Interface(grpc_if1.name, grpc_if1.ip4, ifid=grpc_if1.id)
|
||||
if2 = Interface(grpc_if2.name, grpc_if2.ip4, ifid=grpc_if2.id)
|
||||
self.core_grpc.edges[e.token].interface_1 = if1
|
||||
self.core_grpc.edges[e.token].interface_2 = if2
|
||||
self.core_grpc.nodes[
|
||||
core_id_to_canvas_id[link.node_one_id]
|
||||
].interfaces.append(if1)
|
||||
self.core_grpc.nodes[
|
||||
core_id_to_canvas_id[link.node_two_id]
|
||||
].interfaces.append(if2)
|
||||
self.core.edges[e.token].interface_1 = if1
|
||||
self.core.edges[e.token].interface_2 = if2
|
||||
self.core.nodes[core_id_to_canvas_id[link.node_one_id]].interfaces.append(
|
||||
if1
|
||||
)
|
||||
self.core.nodes[core_id_to_canvas_id[link.node_two_id]].interfaces.append(
|
||||
if2
|
||||
)
|
||||
|
||||
# lift the nodes so they on top of the links
|
||||
for i in self.find_withtag("node"):
|
||||
|
@ -318,13 +318,13 @@ class CanvasGraph(tk.Canvas):
|
|||
node_dst = self.nodes[edge.dst]
|
||||
node_dst.edges.add(edge)
|
||||
|
||||
self.core_grpc.add_edge(
|
||||
self.core_grpc.session_id, edge.token, node_src.id, node_dst.id
|
||||
self.core.add_edge(
|
||||
self.core.session_id, edge.token, node_src.id, node_dst.id
|
||||
)
|
||||
|
||||
# draw link info on the edge
|
||||
if1 = self.core_grpc.edges[edge.token].interface_1
|
||||
if2 = self.core_grpc.edges[edge.token].interface_2
|
||||
if1 = self.core.edges[edge.token].interface_1
|
||||
if2 = self.core.edges[edge.token].interface_2
|
||||
ip4_and_prefix_1 = None
|
||||
ip4_and_prefix_2 = None
|
||||
if if1 is not None:
|
||||
|
@ -390,12 +390,10 @@ class CanvasGraph(tk.Canvas):
|
|||
image=image,
|
||||
node_type=node_name,
|
||||
canvas=self,
|
||||
core_id=self.core_grpc.peek_id(),
|
||||
core_id=self.core.peek_id(),
|
||||
)
|
||||
self.nodes[node.id] = node
|
||||
self.core_grpc.add_graph_node(
|
||||
self.core_grpc.session_id, node.id, x, y, node_name
|
||||
)
|
||||
self.core.add_graph_node(self.core.session_id, node.id, x, y, node_name)
|
||||
return node
|
||||
|
||||
|
||||
|
@ -485,10 +483,10 @@ class CanvasNode:
|
|||
self.moving = None
|
||||
|
||||
def double_click(self, event):
|
||||
node_id = self.canvas.core_grpc.nodes[self.id].node_id
|
||||
state = self.canvas.core_grpc.get_session_state()
|
||||
node_id = self.canvas.core.nodes[self.id].node_id
|
||||
state = self.canvas.core.get_session_state()
|
||||
if state == core_pb2.SessionState.RUNTIME:
|
||||
self.canvas.core_grpc.launch_terminal(node_id)
|
||||
self.canvas.core.launch_terminal(node_id)
|
||||
else:
|
||||
self.canvas.canvas_action.display_configuration(self)
|
||||
# if self.node_type in CORE_NODES:
|
||||
|
@ -511,7 +509,7 @@ class CanvasNode:
|
|||
def click_release(self, event):
|
||||
logging.debug(f"click release {self.name}: {event}")
|
||||
self.update_coords()
|
||||
self.canvas.core_grpc.update_node_location(self.id, self.x_coord, self.y_coord)
|
||||
self.canvas.core.update_node_location(self.id, self.x_coord, self.y_coord)
|
||||
self.moving = None
|
||||
|
||||
def motion(self, event):
|
||||
|
@ -529,8 +527,8 @@ class CanvasNode:
|
|||
|
||||
new_x, new_y = self.canvas.coords(self.id)
|
||||
|
||||
if self.canvas.core_grpc.get_session_state() == core_pb2.SessionState.RUNTIME:
|
||||
self.canvas.core_grpc.edit_node(self.core_id, int(new_x), int(new_y))
|
||||
if self.canvas.core.get_session_state() == core_pb2.SessionState.RUNTIME:
|
||||
self.canvas.core.edit_node(self.core_id, int(new_x), int(new_y))
|
||||
|
||||
for edge in self.edges:
|
||||
x1, y1, x2, y2 = self.canvas.coords(edge.id)
|
||||
|
|
|
@ -11,12 +11,12 @@ CANVAS_COMPONENT_TAGS = ["edge", "node", "nodename", "wallpaper", "linkinfo"]
|
|||
|
||||
|
||||
class GraphHelper:
|
||||
def __init__(self, canvas, grpc):
|
||||
def __init__(self, canvas, core):
|
||||
"""
|
||||
create an instance of GraphHelper object
|
||||
"""
|
||||
self.canvas = canvas
|
||||
self.core_grpc = grpc
|
||||
self.core = core
|
||||
|
||||
def delete_canvas_components(self):
|
||||
"""
|
||||
|
|
|
@ -22,7 +22,7 @@ class LinkInfo:
|
|||
self.edge = edge
|
||||
# self.edge_id = edge.id
|
||||
self.radius = 37
|
||||
self.core_grpc = self.canvas.core_grpc
|
||||
self.core = self.canvas.core
|
||||
|
||||
self.ip4_address_1 = ip4_src
|
||||
self.ip6_address_1 = ip6_src
|
||||
|
@ -104,13 +104,13 @@ class LinkInfo:
|
|||
|
||||
|
||||
class Throughput:
|
||||
def __init__(self, canvas, core_grpc):
|
||||
def __init__(self, canvas, core):
|
||||
"""
|
||||
create an instance of Throughput object
|
||||
:param coretk.app.Application app: application
|
||||
"""
|
||||
self.canvas = canvas
|
||||
self.core_grpc = core_grpc
|
||||
self.core = core
|
||||
# edge canvas id mapped to throughput value
|
||||
self.tracker = {}
|
||||
# map an edge canvas id to a throughput canvas id
|
||||
|
@ -130,9 +130,7 @@ class Throughput:
|
|||
iid = t.interface_id
|
||||
tp = t.throughput
|
||||
# token = self.grpc_manager.node_id_and_interface_to_edge_token[nid, iid]
|
||||
token = self.core_grpc.core_mapping.get_token_from_node_and_interface(
|
||||
nid, iid
|
||||
)
|
||||
token = self.core.core_mapping.get_token_from_node_and_interface(nid, iid)
|
||||
print(token)
|
||||
edge_id = self.canvas.edges[token].id
|
||||
|
||||
|
|
|
@ -321,10 +321,9 @@ class MenuAction:
|
|||
Actions performed when choosing menu items
|
||||
"""
|
||||
|
||||
def __init__(self, application, master):
|
||||
def __init__(self, app, master):
|
||||
self.master = master
|
||||
self.application = application
|
||||
self.core_grpc = application.core_grpc
|
||||
self.app = app
|
||||
|
||||
def prompt_save_running_session(self):
|
||||
"""
|
||||
|
@ -335,21 +334,20 @@ class MenuAction:
|
|||
logging.info(
|
||||
"menuaction.py: clean_nodes_links_and_set_configuration() Exiting the program"
|
||||
)
|
||||
grpc = self.application.core_grpc
|
||||
state = grpc.get_session_state()
|
||||
state = self.app.core.get_session_state()
|
||||
|
||||
if (
|
||||
state == core_pb2.SessionState.SHUTDOWN
|
||||
or state == core_pb2.SessionState.DEFINITION
|
||||
):
|
||||
grpc.delete_session()
|
||||
self.app.core.delete_session()
|
||||
else:
|
||||
msgbox = messagebox.askyesnocancel("stop", "Stop the running session?")
|
||||
|
||||
if msgbox or msgbox is False:
|
||||
if msgbox:
|
||||
grpc.stop_session()
|
||||
grpc.delete_session()
|
||||
self.app.core.stop_session()
|
||||
self.app.core.delete_session()
|
||||
|
||||
def on_quit(self):
|
||||
"""
|
||||
|
@ -358,23 +356,21 @@ class MenuAction:
|
|||
:return: nothing
|
||||
"""
|
||||
self.prompt_save_running_session()
|
||||
# self.application.core_grpc.close()
|
||||
self.application.quit()
|
||||
self.app.quit()
|
||||
|
||||
def file_save_as_xml(self):
|
||||
logging.info("menuaction.py file_save_as_xml()")
|
||||
grpc = self.application.core_grpc
|
||||
file_path = filedialog.asksaveasfilename(
|
||||
initialdir=SAVEDIR,
|
||||
title="Save As",
|
||||
filetypes=(("EmulationScript XML files", "*.xml"), ("All files", "*")),
|
||||
defaultextension=".xml",
|
||||
)
|
||||
grpc.save_xml(file_path)
|
||||
self.app.core.save_xml(file_path)
|
||||
|
||||
def file_open_xml(self):
|
||||
logging.info("menuaction.py file_open_xml()")
|
||||
self.application.is_open_xml = True
|
||||
self.app.is_open_xml = True
|
||||
file_path = filedialog.askopenfilename(
|
||||
initialdir=SAVEDIR,
|
||||
title="Open",
|
||||
|
@ -382,17 +378,17 @@ class MenuAction:
|
|||
)
|
||||
# clean up before opening a new session
|
||||
self.prompt_save_running_session()
|
||||
self.application.core_grpc.open_xml(file_path)
|
||||
self.app.core.open_xml(file_path)
|
||||
|
||||
# Todo might not need
|
||||
# self.application.core_editbar.destroy_children_widgets()
|
||||
# self.application.core_editbar.create_toolbar()
|
||||
|
||||
def canvas_size_and_scale(self):
|
||||
self.application.size_and_scale = SizeAndScale(self.application)
|
||||
self.app.size_and_scale = SizeAndScale(self.app)
|
||||
|
||||
def canvas_set_wallpaper(self):
|
||||
self.application.set_wallpaper = CanvasWallpaper(self.application)
|
||||
self.app.set_wallpaper = CanvasWallpaper(self.app)
|
||||
|
||||
def help_core_github(self):
|
||||
webbrowser.open_new("https://github.com/coreemu/core")
|
||||
|
@ -402,10 +398,10 @@ class MenuAction:
|
|||
|
||||
def session_options(self):
|
||||
logging.debug("Click session options")
|
||||
dialog = SessionOptionsDialog(self.application, self.application)
|
||||
dialog = SessionOptionsDialog(self.app, self.app)
|
||||
dialog.show()
|
||||
|
||||
def session_change_sessions(self):
|
||||
logging.debug("Click session change sessions")
|
||||
dialog = SessionsDialog(self.application, self.application)
|
||||
dialog = SessionsDialog(self.app, self.app)
|
||||
dialog.show()
|
||||
|
|
|
@ -22,24 +22,24 @@ class ScaleOption(enum.Enum):
|
|||
|
||||
|
||||
class CanvasWallpaper:
|
||||
def __init__(self, application):
|
||||
def __init__(self, app):
|
||||
"""
|
||||
create an instance of CanvasWallpaper object
|
||||
|
||||
:param coretk.app.Application application: root application
|
||||
:param coretk.app.Application app: root application
|
||||
"""
|
||||
self.application = application
|
||||
self.canvas = self.application.canvas
|
||||
self.app = app
|
||||
self.canvas = self.app.canvas
|
||||
|
||||
self.top = tk.Toplevel()
|
||||
self.top.title("Set Canvas Wallpaper")
|
||||
self.radiovar = tk.IntVar()
|
||||
print(self.application.radiovar.get())
|
||||
self.radiovar.set(self.application.radiovar.get())
|
||||
print(self.app.radiovar.get())
|
||||
self.radiovar.set(self.app.radiovar.get())
|
||||
self.show_grid_var = tk.IntVar()
|
||||
self.show_grid_var.set(self.application.show_grid_var.get())
|
||||
self.show_grid_var.set(self.app.show_grid_var.get())
|
||||
self.adjust_to_dim_var = tk.IntVar()
|
||||
self.adjust_to_dim_var.set(self.application.adjust_to_dim_var.get())
|
||||
self.adjust_to_dim_var.set(self.app.adjust_to_dim_var.get())
|
||||
|
||||
self.create_image_label()
|
||||
self.create_text_label()
|
||||
|
@ -181,7 +181,7 @@ class CanvasWallpaper:
|
|||
|
||||
:return: nothing
|
||||
"""
|
||||
canvas = self.application.canvas
|
||||
canvas = self.app.canvas
|
||||
grid = canvas.find_withtag("rectangle")[0]
|
||||
x0, y0, x1, y1 = canvas.coords(grid)
|
||||
canvas_w = abs(x0 - x1)
|
||||
|
@ -215,7 +215,7 @@ class CanvasWallpaper:
|
|||
cropped_tk = ImageTk.PhotoImage(cropped)
|
||||
|
||||
# place left corner of image to the left corner of the canvas
|
||||
self.application.croppedwallpaper = cropped_tk
|
||||
self.app.croppedwallpaper = cropped_tk
|
||||
|
||||
self.delete_canvas_components(["wallpaper"])
|
||||
# self.delete_previous_wallpaper()
|
||||
|
@ -223,7 +223,7 @@ class CanvasWallpaper:
|
|||
wid = self.canvas.create_image(
|
||||
(cropx / 2, cropy / 2), image=cropped_tk, tags="wallpaper"
|
||||
)
|
||||
self.application.wallpaper_id = wid
|
||||
self.app.wallpaper_id = wid
|
||||
|
||||
def center(self, img):
|
||||
"""
|
||||
|
@ -252,13 +252,13 @@ class CanvasWallpaper:
|
|||
cropped_tk = ImageTk.PhotoImage(cropped)
|
||||
|
||||
# place the center of the image at the center of the canvas
|
||||
self.application.croppedwallpaper = cropped_tk
|
||||
self.app.croppedwallpaper = cropped_tk
|
||||
self.delete_canvas_components(["wallpaper"])
|
||||
# self.delete_previous_wallpaper()
|
||||
wid = self.canvas.create_image(
|
||||
(canvas_w / 2, canvas_h / 2), image=cropped_tk, tags="wallpaper"
|
||||
)
|
||||
self.application.wallpaper_id = wid
|
||||
self.app.wallpaper_id = wid
|
||||
|
||||
def scaled(self, img):
|
||||
"""
|
||||
|
@ -270,7 +270,7 @@ class CanvasWallpaper:
|
|||
canvas_w, canvas_h = self.get_canvas_width_and_height()
|
||||
resized_image = img.resize((int(canvas_w), int(canvas_h)), Image.ANTIALIAS)
|
||||
image_tk = ImageTk.PhotoImage(resized_image)
|
||||
self.application.croppedwallpaper = image_tk
|
||||
self.app.croppedwallpaper = image_tk
|
||||
|
||||
self.delete_canvas_components(["wallpaper"])
|
||||
# self.delete_previous_wallpaper()
|
||||
|
@ -278,7 +278,7 @@ class CanvasWallpaper:
|
|||
wid = self.canvas.create_image(
|
||||
(canvas_w / 2, canvas_h / 2), image=image_tk, tags="wallpaper"
|
||||
)
|
||||
self.application.wallpaper_id = wid
|
||||
self.app.wallpaper_id = wid
|
||||
|
||||
def tiled(self, img):
|
||||
return
|
||||
|
@ -301,15 +301,15 @@ class CanvasWallpaper:
|
|||
self.delete_canvas_components(["wallpaper"])
|
||||
self.draw_new_canvas(img_w, img_h)
|
||||
wid = self.canvas.create_image((img_w / 2, img_h / 2), image=image_tk)
|
||||
self.application.croppedwallpaper = image_tk
|
||||
self.application.wallpaper_id = wid
|
||||
self.app.croppedwallpaper = image_tk
|
||||
self.app.wallpaper_id = wid
|
||||
|
||||
def show_grid(self):
|
||||
"""
|
||||
|
||||
:return: nothing
|
||||
"""
|
||||
self.application.adjust_to_dim_var.set(self.adjust_to_dim_var.get())
|
||||
self.app.adjust_to_dim_var.set(self.adjust_to_dim_var.get())
|
||||
|
||||
if self.show_grid_var.get() == 0:
|
||||
for i in self.canvas.find_withtag("gridline"):
|
||||
|
@ -322,9 +322,9 @@ class CanvasWallpaper:
|
|||
logging.error("setwallpaper.py show_grid invalid value")
|
||||
|
||||
def save_wallpaper_options(self):
|
||||
self.application.radiovar.set(self.radiovar.get())
|
||||
self.application.show_grid_var.set(self.show_grid_var.get())
|
||||
self.application.adjust_to_dim_var.set(self.adjust_to_dim_var.get())
|
||||
self.app.radiovar.set(self.radiovar.get())
|
||||
self.app.show_grid_var.set(self.show_grid_var.get())
|
||||
self.app.adjust_to_dim_var.set(self.adjust_to_dim_var.get())
|
||||
|
||||
def click_apply(self):
|
||||
img_link_frame = self.top.grid_slaves(2, 0)[0]
|
||||
|
@ -332,23 +332,23 @@ class CanvasWallpaper:
|
|||
if not filename:
|
||||
self.delete_canvas_components(["wallpaper"])
|
||||
self.top.destroy()
|
||||
self.application.current_wallpaper = None
|
||||
self.app.current_wallpaper = None
|
||||
self.save_wallpaper_options()
|
||||
return
|
||||
try:
|
||||
img = Image.open(filename)
|
||||
self.application.current_wallpaper = img
|
||||
self.app.current_wallpaper = img
|
||||
except FileNotFoundError:
|
||||
print("invalid filename, draw original white plot")
|
||||
if self.application.wallpaper_id:
|
||||
self.canvas.delete(self.application.wallpaper_id)
|
||||
if self.app.wallpaper_id:
|
||||
self.canvas.delete(self.app.wallpaper_id)
|
||||
self.top.destroy()
|
||||
return
|
||||
|
||||
self.application.adjust_to_dim_var.set(self.adjust_to_dim_var.get())
|
||||
self.app.adjust_to_dim_var.set(self.adjust_to_dim_var.get())
|
||||
if self.adjust_to_dim_var.get() == 0:
|
||||
|
||||
self.application.radiovar.set(self.radiovar.get())
|
||||
self.app.radiovar.set(self.radiovar.get())
|
||||
|
||||
if self.radiovar.get() == ScaleOption.UPPER_LEFT.value:
|
||||
self.upper_left(img)
|
||||
|
|
|
@ -10,16 +10,16 @@ DRAW_OBJECT_TAGS = ["edge", "node", "nodename", "linkinfo", "antenna"]
|
|||
|
||||
|
||||
class SizeAndScale:
|
||||
def __init__(self, application):
|
||||
def __init__(self, app):
|
||||
"""
|
||||
create an instance for size and scale object
|
||||
|
||||
:param application: main application
|
||||
:param app: main application
|
||||
"""
|
||||
self.application = application
|
||||
self.app = app
|
||||
self.top = tk.Toplevel()
|
||||
self.top.title("Canvas Size and Scale")
|
||||
self.meter_per_pixel = self.application.canvas.meters_per_pixel
|
||||
self.meter_per_pixel = self.app.canvas.meters_per_pixel
|
||||
|
||||
self.size_chart()
|
||||
self.scale_chart()
|
||||
|
@ -108,7 +108,7 @@ class SizeAndScale:
|
|||
label = tk.Label(self.top, text="Size")
|
||||
label.grid(sticky=tk.W, padx=5)
|
||||
|
||||
canvas = self.application.canvas
|
||||
canvas = self.app.canvas
|
||||
plot = canvas.find_withtag("rectangle")
|
||||
x0, y0, x1, y1 = canvas.bbox(plot[0])
|
||||
w = abs(x0 - x1) - 2
|
||||
|
@ -222,7 +222,7 @@ class SizeAndScale:
|
|||
:param int pixel_height: height in pixel
|
||||
:return: nothing
|
||||
"""
|
||||
canvas = self.application.canvas
|
||||
canvas = self.app.canvas
|
||||
canvas.config(scrollregion=(0, 0, pixel_width + 200, pixel_height + 200))
|
||||
|
||||
# delete old plot and redraw
|
||||
|
@ -246,24 +246,24 @@ class SizeAndScale:
|
|||
|
||||
scale_frame = self.top.grid_slaves(3, 0)[0]
|
||||
meter_per_pixel = float(scale_frame.grid_slaves(0, 1)[0].get()) / 100
|
||||
self.application.canvas.meters_per_pixel = meter_per_pixel
|
||||
self.app.canvas.meters_per_pixel = meter_per_pixel
|
||||
self.redraw_grid(pixel_width, pixel_height)
|
||||
print(self.application.current_wallpaper)
|
||||
print(self.application.radiovar)
|
||||
print(self.app.current_wallpaper)
|
||||
print(self.app.radiovar)
|
||||
# if there is a current wallpaper showing, redraw it based on current wallpaper options
|
||||
wallpaper_tool = self.application.set_wallpaper
|
||||
current_wallpaper = self.application.current_wallpaper
|
||||
wallpaper_tool = self.app.set_wallpaper
|
||||
current_wallpaper = self.app.current_wallpaper
|
||||
if current_wallpaper:
|
||||
if self.application.adjust_to_dim_var.get() == 0:
|
||||
if self.application.radiovar.get() == ScaleOption.UPPER_LEFT.value:
|
||||
if self.app.adjust_to_dim_var.get() == 0:
|
||||
if self.app.radiovar.get() == ScaleOption.UPPER_LEFT.value:
|
||||
wallpaper_tool.upper_left(current_wallpaper)
|
||||
elif self.application.radiovar.get() == ScaleOption.CENTERED.value:
|
||||
elif self.app.radiovar.get() == ScaleOption.CENTERED.value:
|
||||
wallpaper_tool.center(current_wallpaper)
|
||||
elif self.application.radiovar.get() == ScaleOption.SCALED.value:
|
||||
elif self.app.radiovar.get() == ScaleOption.SCALED.value:
|
||||
wallpaper_tool.scaled(current_wallpaper)
|
||||
elif self.application.radiovar.get() == ScaleOption.TILED.value:
|
||||
elif self.app.radiovar.get() == ScaleOption.TILED.value:
|
||||
print("not implemented")
|
||||
elif self.application.adjust_to_dim_var.get() == 1:
|
||||
elif self.app.adjust_to_dim_var.get() == 1:
|
||||
wallpaper_tool.canvas_to_image_dimension(current_wallpaper)
|
||||
|
||||
wallpaper_tool.show_grid()
|
||||
|
|
|
@ -5,10 +5,9 @@ from core.api.grpc import core_pb2
|
|||
|
||||
|
||||
class WirelessConnection:
|
||||
def __init__(self, canvas, core_grpc):
|
||||
def __init__(self, canvas, core):
|
||||
self.canvas = canvas
|
||||
self.core_grpc = core_grpc
|
||||
self.core_mapping = core_grpc.core_mapping
|
||||
self.core_mapping = core.core_mapping
|
||||
# map a (node_one_id, node_two_id) to a wlan canvas id
|
||||
self.map = {}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue