Added SubmitPanel, HelpPanel for PlanetLab and VINI
[sfa-gui.git] / SfaGUI.py
1 import pyjd # this is dummy in pyjs
2
3 from pyjamas.ui.Button import Button
4 from pyjamas.ui.RootPanel import RootPanel
5 from pyjamas.ui.HTML import HTML
6 from pyjamas.ui.DockPanel import DockPanel
7 from pyjamas.ui import HasAlignment
8 from pyjamas.ui.Hyperlink import Hyperlink
9 from pyjamas.ui.VerticalPanel import VerticalPanel
10 from pyjamas import Window
11 from SinkList import SinkList
12 from Configure import TopPanel
13 from pyjamas import History
14 import Welcome
15 import Slices
16 import Identities
17 import PlanetLab
18 import VINI
19 import OpenCirrus
20 import SfaBrowser
21 import Configure
22
23 class SfaGUI:
24     def onHistoryChanged(self, token):
25         info = self.sink_list.find(token)
26         if info:
27             self.show(info, False)
28         else:
29             self.showInfo()
30
31     def onModuleLoad(self):
32         self.tp = TopPanel()
33         self.tp.setWidth("100%")
34
35         self.curInfo=''
36         self.curSink=None
37         self.description=HTML()
38         self.sink_list=SinkList()
39         self.panel=DockPanel()
40         self.loadSinks()
41         self.sinkContainer = DockPanel()
42         self.sinkContainer.setStyleName("ks-Sink")
43
44         vp=VerticalPanel()
45         vp.setWidth("100%")
46         vp.setHeight("100%")
47         vp.add(self.description)
48         vp.add(self.sinkContainer)
49
50         self.description.setStyleName("ks-Info")
51
52         self.panel.add(self.sink_list, DockPanel.WEST)
53         self.panel.add(vp, DockPanel.CENTER)
54
55         self.panel.setCellVerticalAlignment(self.sink_list, HasAlignment.ALIGN_TOP)
56         self.panel.setCellWidth(vp, "100%")
57         self.panel.setCellHeight(vp, "100%")
58
59         History.addHistoryListener(self)
60         RootPanel().add(self.tp)
61         RootPanel().add(self.panel)
62
63         #Show the initial screen.
64         initToken = History.getToken()
65         if len(initToken):
66             self.onHistoryChanged(initToken)
67         else:
68             self.showInfo()
69
70     def show(self, info, affectHistory):
71         if info == self.curInfo: return
72         self.curInfo = info
73
74         if self.curSink <> None:
75             self.curSink.onHide()
76             self.sinkContainer.remove(self.curSink)
77
78         self.curSink = info.getInstance()
79         self.sink_list.setSinkSelection(info.getName())
80         self.description.setHTML(info.getDescription())
81
82         if (affectHistory):
83             History.newItem(info.getName())
84
85         self.sinkContainer.add(self.curSink, DockPanel.CENTER)
86         self.sinkContainer.setCellWidth(self.curSink, "100%")
87         self.sinkContainer.setCellHeight(self.curSink, "100%")
88         self.sinkContainer.setCellVerticalAlignment(self.curSink, HasAlignment.ALIGN_TOP)
89         self.curSink.onShow()
90         
91     def loadSinks(self):
92         self.sink_list.addSink(Welcome.init())
93         self.sink_list.addSink(Identities.init())
94         # self.sink_list.addSink(Slices.init())
95         self.sink_list.addSink(PlanetLab.init())
96         self.sink_list.addSink(VINI.init())
97         self.sink_list.addSink(OpenCirrus.init())
98         self.sink_list.addSink(SfaBrowser.init())
99         self.sink_list.addSink(Configure.init())
100
101     def showInfo(self):
102         self.show(self.sink_list.find("Welcome"), False)
103
104
105
106
107 if __name__ == '__main__':
108     pyjd.setup("public/SfaGUI.html")
109     app = SfaGUI()
110     app.onModuleLoad()
111     pyjd.run()