blob: a0b33abdf0035ccdbd70ef7b4e62c75c2d7f97eb [file] [log] [blame]
ashu7b6ba182015-04-17 15:02:37 -05001#!/usr/bin/env python
2
3from Tkinter import *
4
5LOG_LEVELS = [
6 "NONE",
7 "ERROR",
8 "WARN",
9 "INFO",
10 "DEBUG",
11 "TRACE",
12 "ALL"
13]
14
15class GuiFrame(Frame):
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050016 def __init__(self, notebook, prefValues, appId):
ashu7b6ba182015-04-17 15:02:37 -050017 Frame.__init__(self, notebook)
18
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050019 self.prefValues = prefValues
20 self.appId = appId
21
ashu7b6ba182015-04-17 15:02:37 -050022 self.row = 0
23 self.column = 0
24
25 def addEntryBox(self, label, variable, defaultValue=""):
26 variable.set(defaultValue)
27
28 Label(self, text=label).grid(row=self.row, sticky=E)
29 entry = Entry(self, textvariable=variable)
30 entry.grid(row=self.row, column=1)
31
32 self.row += 1
33
34 def addDropDown(self, label, variable, values, defaultValue=""):
35 variable.set(defaultValue)
36
37 Label(self, text=label).grid(row=self.row, sticky=E)
38
39 self.entry = apply(OptionMenu, (self, variable) + tuple(values))
40 self.entry.grid(row=self.row, column=1)
41
42 self.row += 1
43
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050044 def getPreferredOrDefaultValue(self, key, defaultValue):
45 if self.appId in self.prefValues:
46 return self.prefValues[self.appId][key]
47 else:
48 return defaultValue
49
ashu7b6ba182015-04-17 15:02:37 -050050class NfdFrame(GuiFrame):
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050051 def __init__(self, notebook, prefValues):
52 GuiFrame.__init__(self, notebook, prefValues, "nfd")
ashu7b6ba182015-04-17 15:02:37 -050053
54 self.frameLabel = "NFD"
55
56 # log-level
57 self.logLevel = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050058 self.addDropDown("Log level:",
59 self.logLevel,
60 LOG_LEVELS,
61 self.getPreferredOrDefaultValue("log-level", LOG_LEVELS[3]))
ashu7b6ba182015-04-17 15:02:37 -050062
Ashlesh Gawande3a4afb12015-07-09 09:23:30 -050063 def getValues(self):
64 return {
65 "log-level": self.logLevel.get()
66 }
67
ashu7b6ba182015-04-17 15:02:37 -050068class NlsrFrame(GuiFrame):
69
70 HYPERBOLIC_STATES = [
71 "off",
72 "on",
73 "dry-run"
74 ]
75
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050076 def __init__(self, notebook, prefValues):
77 GuiFrame.__init__(self, notebook, prefValues, "nlsr")
ashu7b6ba182015-04-17 15:02:37 -050078
79 self.frameLabel = "NLSR"
80
81 # general: network
82 self.network = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050083 self.addEntryBox("Network:",
84 self.network,
85 self.getPreferredOrDefaultValue("network", "/ndn"))
ashu7b6ba182015-04-17 15:02:37 -050086
87 # general: site
88 self.site = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050089 self.addEntryBox("Site:", self.site, self.getPreferredOrDefaultValue("site", "/edu/site"))
ashu7b6ba182015-04-17 15:02:37 -050090
91 # general: router
92 self.router = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050093 self.addEntryBox("Router:",
94 self.router,
95 self.getPreferredOrDefaultValue("router", "/%C1.Router/cs/host"))
ashu7b6ba182015-04-17 15:02:37 -050096
97 # general: log-level
98 self.logLevel = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -050099 self.addDropDown("Log level:",
100 self.logLevel,
101 LOG_LEVELS,
102 self.getPreferredOrDefaultValue("log-level", LOG_LEVELS[3]))
ashu7b6ba182015-04-17 15:02:37 -0500103
104 # hyperbolic: state
105 self.hyperbolicState = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -0500106 self.addDropDown("Hyperbolic routing:",
107 self.hyperbolicState,
108 self.HYPERBOLIC_STATES,
109 self.getPreferredOrDefaultValue("hyperbolic-state", self.HYPERBOLIC_STATES[0]))
ashu7b6ba182015-04-17 15:02:37 -0500110
111 # hyperbolic: angle
112 self.angle = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -0500113 self.addEntryBox("Angle:", self.angle, self.getPreferredOrDefaultValue("angle", "0.0"))
ashu7b6ba182015-04-17 15:02:37 -0500114
115 # hyperbolic: radius
116 self.radius = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -0500117 self.addEntryBox("Radius:", self.radius, self.getPreferredOrDefaultValue("radius", "0.0"))
ashu7b6ba182015-04-17 15:02:37 -0500118
119 # fib: max-faces-per-prefix
120 self.maxFaces = StringVar(self)
Ashlesh Gawandeab087da2015-07-09 15:10:02 -0500121 self.addEntryBox("Max faces per prefix:",
122 self.maxFaces,
123 self.getPreferredOrDefaultValue("max-faces-per-prefix", "0"))
ashu7b6ba182015-04-17 15:02:37 -0500124
125 def getValues(self):
126 return {
127 "network": self.network.get(),
128 "site": self.site.get(),
129 "router": self.router.get(),
130 "log-level": self.logLevel.get(),
131 "hyperbolic-state": self.hyperbolicState.get(),
132 "angle": self.angle.get(),
133 "radius": self.radius.get(),
134 "max-faces-per-prefix": self.maxFaces.get()
135 }
136