Repository navigation
Expand file tree
/
Copy pathUIInstructions.py
More file actions
133 lines (104 loc) · 4.44 KB
/
Copy pathUIInstructions.py
File metadata and controls
133 lines (104 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from flask import Flask
from flask import render_template
import os
from os import path
import json
import csv
# This file defines the UI elements that can be made.
inputDataPath = "input.json"
flatten = lambda l: [item for sublist in l for item in sublist]
class UIElement:
def __init__(self,fieldname,classname,uiname,onupdate,myclass):
self.fieldname = fieldname
self.uiname = uiname
self.onupdate = onupdate
self.classname = classname
self.value = myclass.__dict__[fieldname]
self.myclass = myclass
def performUpdate(self):
if self.onupdate!=None:
getattr(self.myclass, self.onupdate)()
class Switch(UIElement):
def __init__(self,fieldname,classname,uiname,myclass,onupdate):
UIElement.__init__(self,fieldname,classname,uiname,onupdate,myclass)
def getInstructions(self):
return ["switch",self.classname,self.uiname,self.value]
def updateValue(self,_):
self.myclass.__dict__[self.fieldname] = not self.myclass.__dict__[self.fieldname]
class Slider(UIElement):
def __init__(self,fieldname,classname,uiname,min,max,myclass,onupdate):
UIElement.__init__(self,fieldname,classname,uiname,onupdate,myclass)
self.min = min
self.max = max
def getInstructions(self):
return ["slider",self.classname,self.uiname, self.min,self.max,self.value]
def updateValue(self,value):
self.myclass.__dict__[self.fieldname] = float(value)
class Button():
def __init__(self,classname,uiname,myclass,onclick):
self.uiname = uiname
self.onclick = onclick
self.classname = classname
self.myclass = myclass
def performUpdate(self):
if self.onclick!=None:
getattr(self.myclass, self.onclick)()
def getInstructions(self):
return ["button",self.classname,self.uiname]
def updateValue(self,value):
pass
class Dropdown(UIElement):
def __init__(self,fieldname,classname,uiname,myclass,options,optionlabels,onupdate):
UIElement.__init__(self,fieldname,classname,uiname,onupdate,myclass)
if isinstance(self.value, (list,)):
self.value = tuple(self.value)
try:
self.value = optionlabels[options.index((self.value))]
except:
for i,option in enumerate(options):
if type(option) == type(self.value):
self.value = optionlabels[i]
self.options = options
self.optionlabels = optionlabels
# Maybe also execute some callback in myclass
def getInstructions(self):
return ["dropdown",self.classname,self.uiname,self.value] + self.optionlabels
def updateValue(self,label):
self.myclass.__dict__[self.fieldname] = self.options[self.optionlabels.index(label)]
class AddingFigure():
def updateValues(self):
self.t += 0.01
self.y = [self.myclass.__dict__[yFieldName] for yFieldName in self.yfieldnames]
def __init__(self,myclass,xfieldName,yFieldNames,xname,ynames):
self.xfieldname = xfieldName
self.yfieldnames = yFieldNames
self.myclass = myclass
self.ynames= ynames
self.updatePol = "Add"
self.t = 0
self.y = [self.myclass.__dict__[yFieldName] for yFieldName in self.yfieldnames]
def getInstructions(self):
return ["figure",0,len(self.y),self.updatePol,"Time"] + self.ynames + [self.t] + self.y
def getUpdateInstructions(self):
self.updateValues()
return [1,len(self.y), self.t] + self.y
class ReplacingFigure():
def updateValues(self):
self.x = self.myclass.__dict__[self.xfieldname]
self.y = [self.myclass.__dict__[yFieldName] for yFieldName in self.yfieldnames]
def __init__(self,myclass,xfieldName,yFieldNames,xname,ynames):
self.xfieldname = xfieldName
self.yfieldnames = yFieldNames
self.xname = xname
self.myclass = myclass
self.ynames= ynames
self.updatePol = "Replace"
self.updateValues()
def getInstructions(self):
yflat =flatten(self.y)
print(yflat)
return ["figure",len(self.x),len(self.y),self.updatePol,self.xname] + self.ynames + list(self.x) + yflat
def getUpdateInstructions(self):
self.updateValues()
# A way to also update x may need to be added in the future.
return [len(self.x),len(self.y)] + list(self.x) + flatten(self.y)