Mercurial > libervia-web
comparison libervia.py @ 0:140cec48224a
Initial commit
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 30 Jan 2011 21:50:22 +0100 |
parents | |
children | 0a7c685faa53 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:140cec48224a |
---|---|
1 #!/usr/bin/python | |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 Libervia: a Salut à Toi frontend | |
6 Copyright (C) 2011 Jérôme Poisson (goffi@goffi.org) | |
7 | |
8 This program is free software: you can redistribute it and/or modify | |
9 it under the terms of the GNU Affero General Public License as published by | |
10 the Free Software Foundation, either version 3 of the License, or | |
11 (at your option) any later version. | |
12 | |
13 This program is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU Affero General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU Affero General Public License | |
19 along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 """ | |
21 | |
22 import pyjd # this is dummy in pyjs | |
23 from pyjamas.ui.SimplePanel import SimplePanel | |
24 from pyjamas.ui.RootPanel import RootPanel | |
25 from pyjamas.ui.VerticalPanel import VerticalPanel | |
26 from pyjamas.ui.HorizontalPanel import HorizontalPanel | |
27 from pyjamas.ui.Label import Label | |
28 from pyjamas.ui import HasAlignment | |
29 from pyjamas.ui.MenuBar import MenuBar | |
30 from pyjamas.ui.MenuItem import MenuItem | |
31 from pyjamas import Window | |
32 from pyjamas.ui.AutoComplete import AutoCompleteTextBox | |
33 from pyjamas.JSONService import JSONProxy | |
34 from register import RegisterPanel, RegisterBox | |
35 | |
36 | |
37 class LiberviaJsonProxy(JSONProxy): | |
38 def __init__(self, *args, **kwargs): | |
39 JSONProxy.__init__(self, *args, **kwargs) | |
40 self.handler=self | |
41 self.cb={} | |
42 | |
43 def call(self, method, cb, *args): | |
44 self.cb[method] = cb | |
45 self.callMethod(method,args) | |
46 | |
47 def onRemoteResponse(self, response, request_info): | |
48 if self.cb.has_key(request_info.method): | |
49 self.cb[request_info.method](response) | |
50 del self.cb[request_info.method] | |
51 | |
52 def onRemoteError(self, code, errobj, request_info): | |
53 if code != 0: | |
54 Window.alert("Internal server error") | |
55 else: | |
56 if isinstance(errobj['message'],dict): | |
57 Window.alert("Error %s: %s" % (errobj['message']['faultCode'], errobj['message']['faultString'])) | |
58 else: | |
59 Window.alert("Error: %s" % errobj['message']) | |
60 import pdb | |
61 pdb.set_trace() | |
62 | |
63 class RegisterCall(LiberviaJsonProxy): | |
64 def __init__(self): | |
65 LiberviaJsonProxy.__init__(self, "/register_api", | |
66 ["isRegistered","isConnected","connect"]) | |
67 self.handler=self | |
68 self.cb={} | |
69 | |
70 class BrigeCall(LiberviaJsonProxy): | |
71 def __init__(self): | |
72 LiberviaJsonProxy.__init__(self, "/json_api", | |
73 ["getContacts"]) | |
74 | |
75 class MenuCmd: | |
76 | |
77 def __init__(self, object, handler): | |
78 self._object = object | |
79 self._handler = handler | |
80 | |
81 def execute(self): | |
82 handler = getattr(self._object, self._handler) | |
83 handler() | |
84 | |
85 class Menu(SimplePanel): | |
86 | |
87 def __init__(self): | |
88 SimplePanel.__init__(self) | |
89 | |
90 menu_general = MenuBar(vertical=True) | |
91 menu_general.addItem("Properties", MenuCmd(self, "onProperties")) | |
92 | |
93 menu_games = MenuBar(vertical=True) | |
94 menu_games.addItem("Tarot", MenuCmd(self, "onTarotGame")) | |
95 menu_games.addItem("Xiangqi", MenuCmd(self, "onXiangqiGame")) | |
96 | |
97 menubar = MenuBar(vertical=False) | |
98 menubar.addItem(MenuItem("General", menu_general)) | |
99 menubar.addItem(MenuItem("Games", True, menu_games)) | |
100 self.add(menubar) | |
101 | |
102 def onProperties(self): | |
103 Window.alert("Properties selected") | |
104 | |
105 def onTarotGame(self): | |
106 Window.alert("Tarot selected") | |
107 | |
108 def onXiangqiGame(self): | |
109 Window.alert("Xiangqi selected") | |
110 | |
111 class MagicBox(AutoCompleteTextBox): | |
112 | |
113 def __init__(self): | |
114 AutoCompleteTextBox.__init__(self) | |
115 self.setCompletionItems(['@amis: ','@famille: ', '@collègues']) | |
116 | |
117 class ContactPanel(SimplePanel): | |
118 | |
119 def __init__(self): | |
120 SimplePanel.__init__(self) | |
121 | |
122 | |
123 class MiddlePannel(HorizontalPanel): | |
124 | |
125 def __init__(self): | |
126 HorizontalPanel.__init__(self) | |
127 | |
128 class MainPanel(VerticalPanel): | |
129 | |
130 def __init__(self): | |
131 VerticalPanel.__init__(self) | |
132 | |
133 self.setHorizontalAlignment(HasAlignment.ALIGN_LEFT) | |
134 self.setVerticalAlignment(HasAlignment.ALIGN_TOP) | |
135 | |
136 menu = Menu() | |
137 magic_box = MagicBox() | |
138 middle_panel = MiddlePannel() | |
139 | |
140 self.add(menu) | |
141 self.add(magic_box) | |
142 self.add(middle_panel) | |
143 | |
144 self.setCellHeight(menu, "5%") | |
145 self.setCellHeight(magic_box, "5%") | |
146 self.setCellVerticalAlignment(magic_box, HasAlignment.ALIGN_CENTER) | |
147 self.setCellHorizontalAlignment(magic_box, HasAlignment.ALIGN_CENTER) | |
148 self.setCellHeight(middle_panel, "90%") | |
149 | |
150 self.setWidth("100%") | |
151 self.setHeight("100%") | |
152 | |
153 class SatWebFrontend: | |
154 def onModuleLoad(self): | |
155 self.panel = MainPanel() | |
156 self._dialog = None | |
157 RootPanel().add(self.panel) | |
158 self._register = RegisterCall() | |
159 self._register.call('isRegistered',self.isRegistered) | |
160 | |
161 def isRegistered(self, registered): | |
162 if not registered: | |
163 self._dialog = RegisterBox(self.logged,centered=True) | |
164 self._dialog.show() | |
165 else: | |
166 self._register.call('isConnected', self.isConnected) | |
167 | |
168 def isConnected(self, connected): | |
169 if not connected: | |
170 self._register.call('connect',self.logged) | |
171 else: | |
172 self.logged() | |
173 | |
174 def logged(self): | |
175 if self._dialog: | |
176 self._dialog.hide() | |
177 del self._dialog # don't work if self._dialog is None | |
178 Window.alert("Logged successfuly :o)") | |
179 | |
180 | |
181 if __name__ == '__main__': | |
182 pyjd.setup("./public/Libervia.html") | |
183 app = SatWebFrontend() | |
184 app.onModuleLoad() | |
185 pyjd.run() | |
186 |