Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Derecho_a_Transitar.py
blob: c06dd521720381943c1f88d0e993300b76a7a453 (plain)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import gtk
import gobject
import sys
import socket
import pygame
import shelve

from pygame.locals import *
from sugar.activity import activity
import Globals as G

class Derecho_a_Transitar(activity.Activity):
	def __init__(self, handle):
		activity.Activity.__init__(self, handle, False)
		self.set_title("Derecho A Transitar")
		self.socket = gtk.Socket()
		self.set_canvas(self.socket)
		self.gtkplug = gtkplug()
		self.socket.add_id(self.gtkplug.get_id())	
		self.add_events(gtk.gdk.ALL_EVENTS_MASK)
		self.connect("destroy", self.salir)
		self.connect("set-focus-child", self.refresh)
		self.show_all()
	def refresh(self, widget, datos):
		try:
			pygame.display.update()
		except:
			pass
		self.queue_draw()
		return True
	def salir(self, widget):
		pygame.quit()
		sys.exit()

class PygameCanvas(gtk.EventBox):
	def __init__(self):
		gtk.EventBox.__init__(self)
		self.set_flags(gtk.CAN_FOCUS)
		self.setup_events()
		self.socket = gtk.Socket()
		self.add(self.socket)
		self.button_state = [0,0,0]
		self.mouse_pos = (0,0)

	def setup_events(self):
		self.set_events(gtk.gdk.KEY_PRESS | gtk.gdk.EXPOSE | gtk.gdk.POINTER_MOTION_MASK | \
		            gtk.gdk.POINTER_MOTION_HINT_MASK | gtk.gdk.BUTTON_MOTION_MASK | \
		            gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK)
	
		self.connect("key-press-event", self.keypress)
		self.connect("button_press_event", self.mousedown)
		self.connect("motion-notify-event", self.mousemotion)
		self.connect('expose-event', self.expose)
		self.connect('configure-event', self.resize)
		self.connect("focus-in-event", self.set_focus)

	def keypress(self, selfmain, event, parametros= None):
		nombre = gtk.gdk.keyval_name(event.keyval)
		tipo = pygame.KEYDOWN
		unic = str.lower(nombre)
		valor = nombre
		try:
			valor = getattr(pygame, "K_%s" % (str.upper(nombre)))
		except:
			print "no has programado la traduccion de esta tecla: ", nombre
			return False
		evt = pygame.event.Event(tipo, key = valor, unicode = unic, mod = None)
		try:
			pygame.event.post(evt)
		except:
			pass
		return False

	def mousedown(self, widget, event):
		evt = pygame.event.Event(pygame.MOUSEBUTTONDOWN,
		button = event.button, pos=(int(event.x), int(event.y)))
		try:
			pygame.event.post(evt)
		except:
			pass
		return False

	def mousemotion(self, widget, event):
		x, y, state = event.window.get_pointer()
        	rel = (x - self.mouse_pos[0], y - self.mouse_pos[1])
        	self.mouse_pos = (int(x), int(y))
        	self.button_state = [
            	state & gtk.gdk.BUTTON1_MASK and 1 or 0,
            	state & gtk.gdk.BUTTON2_MASK and 1 or 0,
            	state & gtk.gdk.BUTTON3_MASK and 1 or 0,
        	]
		evt = pygame.event.Event(pygame.MOUSEMOTION, pos = self.mouse_pos,
			rel = rel, buttons = self.button_state)
		try:
			pygame.event.post(evt)
		except:
			pass
		return False

	def expose(self, event, widget):
		if pygame.display.get_init():
			try:
				pygame.event.post(pygame.event.Event(pygame.VIDEOEXPOSE))
			except:
				pass
		return False # continue processing

	def resize(self, widget, event):
		evt = pygame.event.Event(pygame.VIDEORESIZE,
			size = (event.width,event.height),
			width = event.width, height=event.height)
		try:
			pygame.event.post(evt)
		except:
			pass
		return False # continue processing

	def set_focus(self, container, widget):
		try:
			pygame.display.update()
		except:
			pass
		self.queue_draw()
		return False

class VentanaGTK(gtk.Window):
	def __init__(self):
		gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
		self.set_title("Derecho A Transitar")
		self.fullscreen()
		self.socket = gtk.Socket()
		self.add(self.socket)
		self.gtkplug = gtkplug()
		self.socket.add_id(self.gtkplug.get_id())	
		self.add_events(gtk.gdk.ALL_EVENTS_MASK)
		self.connect("destroy", self.salir)
		self.connect("set-focus-child", self.refresh)
		self.show_all()
	def refresh(self, widget, datos):
		try:
			pygame.display.update()
		except:
			pass
		self.queue_draw()
		return True
	def salir(self, widget):
		pygame.quit()
		sys.exit()

class gtkplug(gtk.Plug):
	def __init__(self):
		gtk.Plug.__init__(self, 0L)
		self.resolucion = (self.get_screen().get_width(),self.get_screen().get_height())
		self.eventbox = PygameCanvas()
		self.add(self.eventbox)
		self.ventana = None
		self.show_all()
		self.usuario = None
		self.connect("embedded", self.embed_event)
		os.putenv('SDL_WINDOWID', str(self.eventbox.socket.get_id()))
		gobject.idle_add(self.run_derecho_a_transitar)

	def embed_event(self, widget):
	    	pass

	def run_derecho_a_transitar(self):
		''' Presentacion inicial.'''
		pygame.init()
		self.eventbox.socket.window.set_cursor(None)
		from Main import Main
		main = Main()
		main.connect("run", self.run_login)
		#main.connect("run", self.run_menu)
		main.run()
		return False

	def run_login(self, widget):
		# Seleccionar un Usuario o llama a crear uno nuevo.
		from Login import Login
		login = Login()
		login.connect("crear_usuario", self.crear_usuario)
		login.connect("load_usuario", self.run_menu)
		login.run()
		return False

	def crear_usuario(self, widget):
		# Crear un Nuevo Usuario y pasa al menú o vuelve al login.
		widget.destroy()
		from Crear_Usuario import Crear_Usuario
		crear_usuario = Crear_Usuario()
		crear_usuario.connect("back", self.run_login)
		crear_usuario.connect("run", self.run_menu)
		crear_usuario.run()
		return False

	def run_menu(self, widget, usuario = None):
		# Menú con grupos de actividades.
		# Se llama desde login y crear usuario.
		if usuario: self.usuario = usuario
		filename = os.path.join(G.USERS, self.usuario['nombre'])
		d = shelve.open(filename)
		d['nombre'] = self.usuario['nombre']
		d['edad'] = self.usuario['edad']
		d['escuela'] = self.usuario['escuela']
		d['clase'] = self.usuario['clase']
		d['departamento'] = self.usuario['departamento']
		d['personaje'] = self.usuario['personaje']
		d.close()
		os.chmod(filename, 0666)
		widget.destroy()
		from Menu import Menu
		menu = Menu(self.usuario)
		menu.connect("run_grupo", self.run_grupo)
		menu.connect("back", self.run_login)
		menu.run()
		return False

	def run_grupo(self, widget, grupo, puntos = None):
		# Menú de actividades para grupos.
		widget.destroy()
		if puntos: print ">>>>", puntos # Guardar por actividad
		from Grupos import Grupos
		grupos = Grupos(grupo, self.usuario)
		grupos.connect("back", self.run_menu)
		grupos.connect("run_game", self.run_game)
		grupos.run()
		return False

	def run_game(self, widget, game):
		# Corre un juego.
		widget.destroy()
		if game == "FGR_T0101":
			from FGR_T0101 import FGR_T0101
			juego = FGR_T0101(self.usuario)
		elif game == "FGR_T0102":
			from FGR_T0102 import FGR_T0102
			juego = FGR_T0102(self.usuario)
		elif game == "FGR_T0103":
			from FGR_T0103 import FGR_T0103
			juego = FGR_T0103(self.usuario)
		elif game == "FGR_T0201":
			from FGR_T0201 import FGR_T0201
			juego = FGR_T0201(self.usuario)
		elif game == "FGR_T0202":
			from FGR_T0202 import FGR_T0202
			juego = FGR_T0202(self.usuario)
		#elif game == "FGR_T0203":
		#	from FGR_T0203 import FGR_T0203
		#	juego = FGR_T0203(self.usuario)
		elif game == "FGR_T0204":
			from FGR_T0204 import FGR_T0204
			juego = FGR_T0204(self.usuario)
		elif game == "FGR_T0301":
			from FGR_T0301 import FGR_T0301
			juego = FGR_T0301(self.usuario)
		elif game == "FGR_T0302":
			from FGR_T0302 import FGR_T0302
			juego = FGR_T0302(self.usuario)
		elif game == "FGR_T0303":
			from FGR_T0303 import FGR_T0303
			juego = FGR_T0303(self.usuario)
		elif game == "FGR_T0401":
			from FGR_T0401 import FGR_T0401
			juego = FGR_T0401(self.usuario)
		elif game == "FGR_T0402":
			from FGR_T0402 import FGR_T0402
			juego = FGR_T0402(self.usuario)
		elif game == "FGR_T0501":
			from FGR_T0501 import FGR_T0501
			juego = FGR_T0501(self.usuario)
		elif game == "FGR_T0502":
			from FGR_T0502 import FGR_T0502
			juego = FGR_T0502(self.usuario)
		#elif game == "FGR_T0503":
		#	from FGR_T0503 import FGR_T0503
		#	juego = FGR_T0503(self.usuario)
		#elif game == "FGR_T0504":
		#	from FGR_T0504 import FGR_T0504
		#	juego = FGR_T0504(self.usuario)
		juego.connect("run_grupo", self.run_grupo)
		juego.run()
		return False

if __name__=="__main__":
	VentanaGTK()
	gtk.main()