48 self.inhibit = False |
48 self.inhibit = False |
49 self.changed = False |
49 self.changed = False |
50 |
50 |
51 def setinput(self, attrname, value): |
51 def setinput(self, attrname, value): |
52 self.inputs[attrname] = value |
52 self.inputs[attrname] = value |
53 |
53 |
54 def getinput(self, attrname, default=None): |
54 def getinput(self, attrname, default=None): |
55 if not self.inputs.has_key(attrname): |
55 if not self.inputs.has_key(attrname): |
56 self.inputs[attrname] = default |
56 self.inputs[attrname] = default |
57 return self.inputs[attrname] |
57 return self.inputs[attrname] |
58 |
58 |
59 def setoutput(self, attrname, value): |
59 def setoutput(self, attrname, value): |
60 if self.outputs.get(attrname) != value: |
60 if self.outputs.get(attrname) != value: |
61 self.outputs[attrname] = value |
61 self.outputs[attrname] = value |
62 self.changed = True |
62 self.changed = True |
63 self.RefreshInterface() |
63 self.RefreshInterface() |
64 |
64 |
65 def updateoutputs(self, **kwargs): |
65 def updateoutputs(self, **kwargs): |
66 for attrname, value in kwargs.iteritems(): |
66 for attrname, value in kwargs.iteritems(): |
67 if self.outputs.get(attrname) != value: |
67 if self.outputs.get(attrname) != value: |
68 self.outputs[attrname] = value |
68 self.outputs[attrname] = value |
69 self.changed = True |
69 self.changed = True |
70 self.RefreshInterface() |
70 self.RefreshInterface() |
71 |
71 |
72 def RefreshInterface(self): |
72 def RefreshInterface(self): |
73 interface = website.getHMI() |
73 interface = website.getHMI() |
74 if isinstance(interface, SVGUI_HMI) and self.changed and not self.inhibit: |
74 if isinstance(interface, SVGUI_HMI) and self.changed and not self.inhibit: |
75 self.changed = False |
75 self.changed = False |
76 d = interface.sendData(self) |
76 d = interface.sendData(self) |
77 if d is not None: |
77 if d is not None: |
78 self.inhibit = True |
78 self.inhibit = True |
79 d.addCallback(self.InterfaceRefreshed) |
79 d.addCallback(self.InterfaceRefreshed) |
80 |
80 |
81 def InterfaceRefreshed(self, result): |
81 def InterfaceRefreshed(self, result): |
82 self.inhibit = False |
82 self.inhibit = False |
83 if self.changed: |
83 if self.changed: |
84 self.RefreshInterface() |
84 self.RefreshInterface() |
85 |
85 |
101 } |
101 } |
102 return d |
102 return d |
103 |
103 |
104 class SVGUI_HMI(website.PLCHMI): |
104 class SVGUI_HMI(website.PLCHMI): |
105 jsClass = u"LiveSVGPage.LiveSVGWidget" |
105 jsClass = u"LiveSVGPage.LiveSVGWidget" |
106 |
106 |
107 docFactory = loaders.stan(tags.div(render=tags.directive('liveElement'))[ |
107 docFactory = loaders.stan(tags.div(render=tags.directive('liveElement'))[ |
108 tags.xml(loaders.xmlfile(os.path.join(WorkingDir, svgfile))), |
108 tags.xml(loaders.xmlfile(os.path.join(WorkingDir, svgfile))), |
109 ]) |
109 ]) |
110 |
110 |
111 def HMIinitialisation(self): |
111 def HMIinitialisation(self): |
112 gadgets = [] |
112 gadgets = [] |
113 for gadget in svguiWidgets.values(): |
113 for gadget in svguiWidgets.values(): |
114 gadgets.append(unicode(json.dumps(gadget, default=get_object_init_state, indent=2), 'ascii')) |
114 gadgets.append(unicode(json.dumps(gadget, default=get_object_init_state, indent=2), 'ascii')) |
115 d = self.callRemote('init', gadgets) |
115 d = self.callRemote('init', gadgets) |
116 d.addCallback(self.HMIinitialised) |
116 d.addCallback(self.HMIinitialised) |
117 |
117 |
118 def sendData(self,data): |
118 def sendData(self,data): |
119 if self.initialised: |
119 if self.initialised: |
120 return self.callRemote('receiveData',unicode(json.dumps(data, default=get_object_current_state, indent=2), 'ascii')) |
120 return self.callRemote('receiveData',unicode(json.dumps(data, default=get_object_current_state, indent=2), 'ascii')) |
121 return None |
121 return None |
122 |
122 |
123 def setattr(self, id, attrname, value): |
123 def setattr(self, id, attrname, value): |
124 svguiWidgets[id].setinput(attrname, value) |
124 svguiWidgets[id].setinput(attrname, value) |
125 |
125 |
126 def createSVGUIControl(*args, **kwargs): |
126 def createSVGUIControl(*args, **kwargs): |
127 id = getNewId() |
127 id = getNewId() |