work on wlan configuration
This commit is contained in:
parent
96d020a53d
commit
eabca7dfcf
4 changed files with 243 additions and 3 deletions
19
coretk/coretk/custom_node.py
Normal file
19
coretk/coretk/custom_node.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
"""
|
||||
edit node types
|
||||
"""
|
||||
|
||||
import tkinter as tk
|
||||
|
||||
|
||||
class EditNodeTypes:
|
||||
def __init__(self):
|
||||
self.top = tk.Toplevel
|
||||
self.top.title("CORE Node Types")
|
||||
|
||||
def node_types(self):
|
||||
"""
|
||||
list box of node types
|
||||
:return:
|
||||
"""
|
||||
lbl = tk.Label(self.top, text="Node types")
|
||||
lbl.grid()
|
210
coretk/coretk/dialogs/mobilityconfig.py
Normal file
210
coretk/coretk/dialogs/mobilityconfig.py
Normal file
|
@ -0,0 +1,210 @@
|
|||
"""
|
||||
mobility configuration
|
||||
"""
|
||||
|
||||
import os
|
||||
import tkinter as tk
|
||||
from pathlib import Path
|
||||
from tkinter import filedialog
|
||||
|
||||
from coretk.dialogs.dialog import Dialog
|
||||
|
||||
|
||||
class MobilityConfiguration(Dialog):
|
||||
def __init__(self, master, app, canvas_node):
|
||||
"""
|
||||
create an instance of mobility configuration
|
||||
|
||||
:param app: core application
|
||||
:param root.master master:
|
||||
"""
|
||||
super().__init__(master, app, "ns2script configuration", modal=True)
|
||||
self.canvas_node = canvas_node
|
||||
self.mobility_script_parameters()
|
||||
self.ns2script_options()
|
||||
self.loop = "On"
|
||||
|
||||
def create_string_var(self, val):
|
||||
"""
|
||||
create string variable for entry widget
|
||||
|
||||
:return: nothing
|
||||
"""
|
||||
var = tk.StringVar()
|
||||
var.set(val)
|
||||
return var
|
||||
|
||||
def open_file(self, entry):
|
||||
configs_dir = os.path.join(Path.home(), ".core/configs")
|
||||
if os.path.isdir(configs_dir):
|
||||
filename = filedialog.askopenfilename(initialdir=configs_dir, title="Open")
|
||||
if filename:
|
||||
entry.delete(0, tk.END)
|
||||
entry.insert(0, filename)
|
||||
|
||||
def set_loop_value(self, value):
|
||||
"""
|
||||
set loop value when user changes the option
|
||||
:param value:
|
||||
:return:
|
||||
"""
|
||||
self.loop = value
|
||||
|
||||
def create_label_entry_filebrowser(
|
||||
self, parent_frame, text_label, filebrowser=False
|
||||
):
|
||||
f = tk.Frame(parent_frame, bg="#d9d9d9")
|
||||
lbl = tk.Label(f, text=text_label, bg="#d9d9d9")
|
||||
lbl.grid(padx=3, pady=3)
|
||||
# f.grid()
|
||||
e = tk.Entry(f, textvariable=self.create_string_var(""), bg="#ffffff")
|
||||
e.grid(row=0, column=1, padx=3, pady=3)
|
||||
if filebrowser:
|
||||
b = tk.Button(f, text="...", command=lambda: self.open_file(e))
|
||||
b.grid(row=0, column=2, padx=3, pady=3)
|
||||
f.grid(sticky=tk.E)
|
||||
|
||||
def mobility_script_parameters(self):
|
||||
lbl = tk.Label(self, text="node ns2script")
|
||||
lbl.grid(sticky=tk.W + tk.E)
|
||||
|
||||
sb = tk.Scrollbar(self, orient=tk.VERTICAL)
|
||||
sb.grid(row=1, column=1, sticky=tk.N + tk.S + tk.E)
|
||||
|
||||
f = tk.Frame(self, bg="#d9d9d9")
|
||||
lbl = tk.Label(
|
||||
f, text="ns-2 Mobility Scripts Parameters", bg="#d9d9d9", relief=tk.RAISED
|
||||
)
|
||||
lbl.grid(row=0, column=0, sticky=tk.W)
|
||||
|
||||
f1 = tk.Canvas(
|
||||
f,
|
||||
yscrollcommand=sb.set,
|
||||
bg="#d9d9d9",
|
||||
relief=tk.RAISED,
|
||||
highlightbackground="#b3b3b3",
|
||||
highlightcolor="#b3b3b3",
|
||||
highlightthickness=0.5,
|
||||
bd=0,
|
||||
)
|
||||
self.create_label_entry_filebrowser(
|
||||
f1, "mobility script file", filebrowser=True
|
||||
)
|
||||
self.create_label_entry_filebrowser(f1, "Refresh time (ms)")
|
||||
|
||||
# f12 = tk.Frame(f1)
|
||||
#
|
||||
# lbl = tk.Label(f12, text="Refresh time (ms)")
|
||||
# lbl.grid()
|
||||
#
|
||||
# e = tk.Entry(f12, textvariable=self.create_string_var("50"))
|
||||
# e.grid(row=0, column=1)
|
||||
# f12.grid()
|
||||
|
||||
f13 = tk.Frame(f1)
|
||||
|
||||
lbl = tk.Label(f13, text="loop")
|
||||
lbl.grid()
|
||||
|
||||
om = tk.OptionMenu(
|
||||
f13,
|
||||
self.create_string_var("On"),
|
||||
"On",
|
||||
"Off",
|
||||
command=self.set_loop_value,
|
||||
indicatoron=True,
|
||||
)
|
||||
om.grid(row=0, column=1)
|
||||
|
||||
f13.grid(sticky=tk.E)
|
||||
|
||||
self.create_label_entry_filebrowser(f1, "auto-start seconds (0.0 for runtime)")
|
||||
# f14 = tk.Frame(f1)
|
||||
#
|
||||
# lbl = tk.Label(f14, text="auto-start seconds (0.0 for runtime)")
|
||||
# lbl.grid()
|
||||
#
|
||||
# e = tk.Entry(f14, textvariable=self.create_string_var(""))
|
||||
# e.grid(row=0, column=1)
|
||||
#
|
||||
# f14.grid()
|
||||
self.create_label_entry_filebrowser(
|
||||
f1, "node mapping (optional, e.g. 0:1, 1:2, 2:3)"
|
||||
)
|
||||
# f15 = tk.Frame(f1)
|
||||
#
|
||||
# lbl = tk.Label(f15, text="node mapping (optional, e.g. 0:1, 1:2, 2:3)")
|
||||
# lbl.grid()
|
||||
#
|
||||
# e = tk.Entry(f15, textvariable=self.create_string_var(""))
|
||||
# e.grid(row=0, column=1)
|
||||
#
|
||||
# f15.grid()
|
||||
|
||||
self.create_label_entry_filebrowser(
|
||||
f1, "script file to run upon start", filebrowser=True
|
||||
)
|
||||
self.create_label_entry_filebrowser(
|
||||
f1, "script file to run upon pause", filebrowser=True
|
||||
)
|
||||
self.create_label_entry_filebrowser(
|
||||
f1, "script file to run upon stop", filebrowser=True
|
||||
)
|
||||
f1.grid()
|
||||
sb.config(command=f1.yview)
|
||||
f.grid(row=1, column=0)
|
||||
|
||||
def ns2script_apply(self):
|
||||
"""
|
||||
|
||||
:return:
|
||||
"""
|
||||
config_frame = self.grid_slaves(row=1, column=0)[0]
|
||||
canvas = config_frame.grid_slaves(row=1, column=0)[0]
|
||||
file = (
|
||||
canvas.grid_slaves(row=0, column=0)[0].grid_slaves(row=0, column=1)[0].get()
|
||||
)
|
||||
|
||||
refresh_time = (
|
||||
canvas.grid_slaves(row=1, column=0)[0].grid_slaves(row=0, column=1)[0].get()
|
||||
)
|
||||
auto_start_seconds = (
|
||||
canvas.grid_slaves(row=3, column=0)[0].grid_slaves(row=0, column=1)[0].get()
|
||||
)
|
||||
|
||||
node_mapping = (
|
||||
canvas.grid_slaves(row=4, column=0)[0].grid_slaves(row=0, column=1)[0].get()
|
||||
)
|
||||
|
||||
file_upon_start = (
|
||||
canvas.grid_slaves(row=5, column=0)[0].grid_slaves(row=0, column=1)[0].get()
|
||||
)
|
||||
file_upon_pause = (
|
||||
canvas.grid_slaves(row=6, column=0)[0].grid_slaves(row=0, column=1)[0].get()
|
||||
)
|
||||
file_upon_stop = (
|
||||
canvas.grid_slaves(row=7, column=0)[0].grid_slaves(row=0, column=1)[0].get()
|
||||
)
|
||||
|
||||
print("mobility script file: ", file)
|
||||
print("refresh time: ", refresh_time)
|
||||
print("auto start seconds: ", auto_start_seconds)
|
||||
print("node mapping: ", node_mapping)
|
||||
print("script file to run upon start: ", file_upon_start)
|
||||
print("file upon pause: ", file_upon_pause)
|
||||
print("file upon stop: ", file_upon_stop)
|
||||
|
||||
self.destroy()
|
||||
|
||||
def ns2script_options(self):
|
||||
"""
|
||||
create the options for ns2script configuration
|
||||
|
||||
:return: nothing
|
||||
"""
|
||||
f = tk.Frame(self)
|
||||
b = tk.Button(f, text="Apply", command=self.ns2script_apply)
|
||||
b.grid()
|
||||
b = tk.Button(f, text="Cancel", command=self.destroy)
|
||||
b.grid(row=0, column=1)
|
||||
f.grid()
|
|
@ -39,9 +39,9 @@ class Images:
|
|||
if node_type == core_pb2.NodeType.HUB:
|
||||
return Images.get(ImageEnum.HUB), "hub"
|
||||
if node_type == core_pb2.NodeType.WIRELESS_LAN:
|
||||
return Images.get(ImageEnum.WLAN.value), "wlan"
|
||||
return Images.get(ImageEnum.WLAN), "wlan"
|
||||
if node_type == core_pb2.NodeType.EMANE:
|
||||
return Images.get(ImageEnum.EMANE.value), "emane"
|
||||
return Images.get(ImageEnum.EMANE), "emane"
|
||||
|
||||
if node_type == core_pb2.NodeType.RJ45:
|
||||
return Images.get(ImageEnum.RJ45), "rj45"
|
||||
|
|
|
@ -5,6 +5,7 @@ wlan configuration
|
|||
import tkinter as tk
|
||||
from functools import partial
|
||||
|
||||
from coretk.dialogs.mobilityconfig import MobilityConfiguration
|
||||
from coretk.imagemodification import ImageModification
|
||||
|
||||
|
||||
|
@ -224,6 +225,12 @@ class WlanConfiguration:
|
|||
f2.grid()
|
||||
f.grid(sticky=tk.W, padx=3, pady=3)
|
||||
|
||||
def click_ns2_mobility_script(self):
|
||||
dialog = MobilityConfiguration(
|
||||
self.top, self.canvas.core_grpc.app, self.canvas_node
|
||||
)
|
||||
dialog.show()
|
||||
|
||||
def wlan_options(self):
|
||||
"""
|
||||
create wireless node options
|
||||
|
@ -231,7 +238,11 @@ class WlanConfiguration:
|
|||
:return:
|
||||
"""
|
||||
f = tk.Frame(self.top)
|
||||
b = tk.Button(f, text="ns-2 mobility script...")
|
||||
b = tk.Button(
|
||||
f,
|
||||
text="ns-2 mobility script...",
|
||||
command=lambda: self.click_ns2_mobility_script(),
|
||||
)
|
||||
b.pack(side=tk.LEFT, padx=1)
|
||||
b = tk.Button(f, text="Link to all routers")
|
||||
b.pack(side=tk.LEFT, padx=1)
|
||||
|
|
Loading…
Add table
Reference in a new issue