Merge branch 'coretk' of https://github.com/coreemu/core into coretk

This commit is contained in:
Blake Harnden 2019-11-25 15:05:24 -08:00
commit 6fd38c4195
6 changed files with 116 additions and 25 deletions

View file

@ -10,6 +10,7 @@ from coretk.images import ImageEnum, Images
from coretk.menuaction import MenuAction from coretk.menuaction import MenuAction
from coretk.menubar import Menubar from coretk.menubar import Menubar
from coretk.nodeutils import NodeUtils from coretk.nodeutils import NodeUtils
from coretk.status import StatusBar
from coretk.toolbar import Toolbar from coretk.toolbar import Toolbar
@ -80,7 +81,7 @@ class Application(tk.Frame):
self.canvas.configure(yscrollcommand=scroll_y.set) self.canvas.configure(yscrollcommand=scroll_y.set)
def draw_status(self): def draw_status(self):
self.statusbar = ttk.Frame(self) self.statusbar = StatusBar(master=self, app=self)
self.statusbar.pack(side=tk.BOTTOM, fill=tk.X) self.statusbar.pack(side=tk.BOTTOM, fill=tk.X)
def on_closing(self): def on_closing(self):

View file

@ -350,10 +350,7 @@ class CanvasGraph(tk.Canvas):
:param event: :param event:
:return: :return:
""" """
# delete canvas data
nodes = self.canvas_management.delete_selected_nodes() nodes = self.canvas_management.delete_selected_nodes()
# delete core data
self.core.delete_graph_nodes(nodes) self.core.delete_graph_nodes(nodes)
def add_node(self, x, y): def add_node(self, x, y):

View file

@ -88,18 +88,41 @@ class WlanAntennaManager:
""" """
if self.quantity < 5: if self.quantity < 5:
x, y = self.canvas.coords(self.node_id) x, y = self.canvas.coords(self.node_id)
self.antennas.append( aid = self.canvas.create_image(
self.canvas.create_image(
x - 16 + self.offset, x - 16 + self.offset,
y - 16, y - 23,
anchor=tk.CENTER, anchor=tk.CENTER,
image=self.image, image=self.image,
tags="antenna", tags="antenna",
) )
) # self.canvas.tag_raise("antenna")
self.antennas.append(aid)
self.quantity = self.quantity + 1 self.quantity = self.quantity + 1
self.offset = self.offset + 8 self.offset = self.offset + 8
def delete_antenna(self):
"""
delete one antenna
:return: nothing
"""
if len(self.antennas) > 0:
self.canvas.delete(self.antennas.pop())
self.quantity -= 1
self.offset -= 8
def delete_antennas(self):
"""
delete all antennas
:return: nothing
"""
for aid in self.antennas:
self.canvas.delete(aid)
self.antennas.clear()
self.quantity = 0
self.offset = 0
def update_antennas_position(self, offset_x, offset_y): def update_antennas_position(self, offset_x, offset_y):
""" """
redraw antennas of a node according to the new node position redraw antennas of a node according to the new node position
@ -108,15 +131,3 @@ class WlanAntennaManager:
""" """
for i in self.antennas: for i in self.antennas:
self.canvas.move(i, offset_x, offset_y) self.canvas.move(i, offset_x, offset_y)
def delete_antenna(self, canvas_id):
return
def delete_antennas(self):
"""
Delete all the antennas of a node
:return: nothing
"""
for i in self.antennas:
self.canvas.delete(i)

View file

@ -1,6 +1,7 @@
""" """
manage deletion manage deletion
""" """
from core.api.grpc import core_pb2
class CanvasComponentManagement: class CanvasComponentManagement:
@ -41,6 +42,24 @@ class CanvasComponentManagement:
def delete_selected_nodes(self): def delete_selected_nodes(self):
edges = set() edges = set()
nodes = [] nodes = []
for cnid in self.selected:
canvas_node = self.canvas.nodes[cnid]
if canvas_node.core_node.type != core_pb2.NodeType.WIRELESS_LAN:
canvas_node.antenna_draw.delete_antennas()
else:
for e in canvas_node.edges:
link_proto = self.app.links[e.token]
node_one_id, node_two_id = (
link_proto.node_one_id,
link_proto.node_two_id,
)
if node_one_id == canvas_node.core_node.id:
neighbor_id = node_two_id
else:
neighbor_id = node_one_id
neighbor = self.app.canvas_nodes[neighbor_id]
if neighbor.core_node.type != core_pb2.NodeType.WIRELESS_LAN:
neighbor.antenna_draw.delete_antenna()
for node_id in list(self.selected): for node_id in list(self.selected):
bbox_id = self.selected[node_id] bbox_id = self.selected[node_id]
canvas_node = self.canvas.nodes.pop(node_id) canvas_node = self.canvas.nodes.pop(node_id)

44
coretk/coretk/status.py Normal file
View file

@ -0,0 +1,44 @@
"status bar"
import time
import tkinter as tk
from tkinter import ttk
class StatusBar(ttk.Frame):
def __init__(self, master, app, **kwargs):
super().__init__(master, **kwargs)
self.app = app
self.status = None
self.statusvar = tk.StringVar()
self.zoom = None
self.cpu_usage = None
self.memory = None
self.emulation_light = None
self.running = False
self.draw()
def draw(self):
self.columnconfigure(0, weight=8)
self.columnconfigure(1, weight=1)
self.columnconfigure(2, weight=1)
self.columnconfigure(3, weight=1)
self.status = ttk.Label(self, textvariable=self.statusvar)
self.statusvar.set("status")
self.status.grid(row=0, column=0)
self.zoom = ttk.Label(self, text="zoom")
self.zoom.grid(row=0, column=1)
self.cpu_usage = ttk.Label(self, text="cpu usage")
self.cpu_usage.grid(row=0, column=2)
self.emulation_light = ttk.Label(self, text="emulation light")
self.emulation_light.grid(row=0, column=3)
def processing(self):
texts = ["Processing.", "Processing..", "Processing...", "Processing...."]
i = 0
while self.running:
self.statusvar.set(texts[i % 4])
self.master.update()
i = i + 1
time.sleep(0.002)
print("thread finish")

View file

@ -1,4 +1,5 @@
import logging import logging
import time
import tkinter as tk import tkinter as tk
from functools import partial from functools import partial
from tkinter import ttk from tkinter import ttk
@ -195,13 +196,25 @@ class Toolbar(ttk.Frame):
:return: nothing :return: nothing
""" """
logging.debug("clicked start button") self.app.statusbar.running = True
# thread = threading.Thread(target=self.app.statusbar.processing)
# thread.start()
self.master.config(cursor="watch") self.master.config(cursor="watch")
self.master.update() self.master.update()
self.app.canvas.mode = GraphMode.SELECT self.app.canvas.mode = GraphMode.SELECT
start = time.time()
self.app.core.start_session() self.app.core.start_session()
dur = time.time() - start
self.runtime_frame.tkraise() self.runtime_frame.tkraise()
self.master.config(cursor="") self.master.config(cursor="")
nodes_num = len(self.app.core.canvas_nodes)
links_num = len(self.app.core.links)
self.app.statusbar.statusvar.set(
"Network topology instantiated in %s seconds (%s node(s) and %s link(s))"
% ("%.3f" % dur, nodes_num, links_num)
)
# self.app.statusbar.running = False
# print("done")
def click_link(self): def click_link(self):
logging.debug("Click LINK button") logging.debug("Click LINK button")
@ -355,7 +368,13 @@ class Toolbar(ttk.Frame):
:return: nothing :return: nothing
""" """
logging.debug("Click on STOP button ") logging.debug("Click on STOP button ")
# self.status_thread.join()
start = time.time()
self.app.core.stop_session() self.app.core.stop_session()
dur = time.time() - start
self.app.statusbar.statusvar.set(
"Cleanup completed in %s seconds" % "%.3f" % dur
)
self.app.canvas.delete("wireless") self.app.canvas.delete("wireless")
self.design_frame.tkraise() self.design_frame.tkraise()