class CucaraSimsWidget(gtk.HPaned): __gsignals__ = { "exit": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), "set-cursor": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, )), "volumen": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_FLOAT, )) } def __init__(self, escenario): gtk.HPaned.__init__(self) self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#ffffff")) self.lecciones = [] self.toolbar = Toolbar() vbox = gtk.VBox() vbox.pack_start(self.toolbar, False, False, 0) vbox.pack_start(escenario, True, True, 0) self.toolbarestado = ToolbarEstado() vbox.pack_end(self.toolbarestado, False, False, 0) self.pack1(vbox, resize=True, shrink=True) self.derecha = Derecha() self.pack2(self.derecha, resize=False, shrink=False) self.toolbarestado.connect("volumen", self.__volumen_changed) self.derecha.connect("select", self.__set_cursor) self.derecha.connect("lectura", self.__run_lectura) self.show_all() self.agua_cursor = False self.alimento_cursor = False self.cursor_root = False self.cursor_tipo = False gobject.idle_add(self.__config_cursors) def __volumen_changed(self, widget, valor): self.emit('volumen', valor) def __config_cursors(self): icono = os.path.join(BASE_PATH, "Imagenes", "jarra.png") pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(icono, -1, 24) self.agua_cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default(), pixbuf, 0, 0) icono = os.path.join(BASE_PATH, "Imagenes", "pan.png") pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(icono, -1, 24) self.alimento_cursor = gtk.gdk.Cursor(gtk.gdk.display_get_default(), pixbuf, 0, 0) self.cursor_root = self.get_toplevel().get_property( "window").get_cursor() return False def __set_cursor(self, widget, tipo): """ Cuando el usuario selecciona alimento o agua en la interfaz gtk, setea el cursor y manda una señal para hacerlo tambien en pygame. """ win = self.get_toplevel().get_property("window") if tipo == "agua": if self.cursor_tipo == "agua": win.set_cursor(self.cursor_root) self.cursor_tipo = False else: win.set_cursor(self.agua_cursor) self.cursor_tipo = "agua" elif tipo == "alimento": if self.cursor_tipo == "alimento": win.set_cursor(self.cursor_root) self.cursor_tipo = False else: win.set_cursor(self.alimento_cursor) self.cursor_tipo = "alimento" else: win.set_cursor(self.cursor_root) self.cursor_tipo = False self.emit("set-cursor", self.cursor_tipo) def __run_lectura(self, derecha, lectura): """ La Interfaz gtk manda abrir una lectura. """ if lectura == "salir": self.emit("exit") return try: self.get_toplevel().juego.pause() except: # Para Sugar self.get_toplevel().interfaz.juego.pause() dialog = Widget_Leccion(parent=self.get_toplevel(), lectura=lectura) dialog.run() dialog.stop() dialog.destroy() try: self.get_toplevel().juego.unpause() except: # Para Sugar self.get_toplevel().interfaz.juego.unpause() def update(self, juego, _dict): """ El juego pygame actualiza información en la interfaz gtk. """ infocucas = " %sH + %sM = %s" % (_dict["hembras"], _dict["machos"], _dict["cucas"]) infoootecas = " = %s" % _dict["ootecas"] infoagua = "= %s" % int(_dict["agua"]) infoalimento = " = %s" % int(_dict["alimento"]) tiempo = " Años: %s Dias: %s Horas: %s" % ( _dict["Años"], _dict["Dias"], _dict["Horas"]) self.toolbar.set_info(infocucas, infoootecas, infoagua, infoalimento, tiempo) def run_lectura(self, juego, lectura): """ El Juego pygame manda abrir una lectura. """ if not lectura in self.lecciones: self.lecciones.append(lectura) try: self.get_toplevel().juego.pause() except: # Para Sugar self.get_toplevel().interfaz.juego.pause() dialog = Widget_Leccion(parent=self.get_toplevel(), lectura=lectura) dialog.run() dialog.stop() dialog.destroy() try: self.get_toplevel().juego.unpause() except: # Para Sugar self.get_toplevel().interfaz.juego.unpause() if lectura == "muerte": self.toolbarestado.set_info( "Se han producido muertes en el habitat.") elif lectura == "reproducción": self.toolbarestado.set_info("Hay nuevas ootecas en el habitat.") elif lectura == "ciclo vital": self.toolbarestado.set_info( "Se han producido nacimientos en el habitat.") elif lectura == "muda de exoesqueleto": self.toolbarestado.set_info( "Algunas Cucarachas han realizado la muda de su exoesqueleto.") elif lectura == "plaga": self.toolbarestado.set_info( "Hay Demasiadas Cucarachas en el habitat. Algunas migrarán. !!!" ) elif lectura == "extinción": self.toolbarestado.set_info( "Ya no es Posible la Reproducción en el Habitat.") else: print lectura, self.run_lectura def clear_cursor(self, widget): """ El juego pygame indica que ya no debe haber cursor personalizado. """ self.__set_cursor(False, False) self.toolbarestado.set_info( "Las Cucarachas Detectan el Alimento con sus Antenas.") def puntos(self, juego, puntos): self.derecha.set_puntos(puntos)
class CucaraSimsWidget(Gtk.HPaned): __gsignals__ = { "exit": (GObject.SignalFlags.RUN_LAST, None, []), "set-cursor": (GObject.SignalFlags.RUN_LAST, None, (GObject.TYPE_PYOBJECT, )), "volumen": (GObject.SignalFlags.RUN_LAST, None, (GObject.TYPE_FLOAT, ))} def __init__(self, escenario): GObject.GObject.__init__(self) self.override_background_color(Gtk.StateType.NORMAL, color_parser("#ffffff")) self.lecciones = [] self.toolbar = Toolbar() vbox = Gtk.VBox() vbox.pack_start(self.toolbar, False, False, 0) vbox.pack_start(escenario, True, True, 0) self.toolbarestado = ToolbarEstado() vbox.pack_end(self.toolbarestado, False, False, 0) self.pack1(vbox, resize=True, shrink=True) self.derecha = Derecha() self.pack2(self.derecha, resize=False, shrink=False) self.toolbarestado.connect("volumen", self.__volumen_changed) self.derecha.connect("select", self.__set_cursor) self.derecha.connect("lectura", self.__run_lectura) self.show_all() self.agua_cursor = False self.alimento_cursor = False self.cursor_root = False self.cursor_tipo = False GLib.idle_add(self.__config_cursors) def __volumen_changed(self, widget, valor): self.emit('volumen', valor) def __config_cursors(self): icono = os.path.join(BASE_PATH, "Imagenes", "jarra.png") pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icono, -1, 24) self.agua_cursor = Gdk.Cursor.new_from_pixbuf( Gdk.Display.get_default(), pixbuf, 0, 0) icono = os.path.join(BASE_PATH, "Imagenes", "pan.png") pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icono, -1, 24) self.alimento_cursor = Gdk.Cursor.new_from_pixbuf( Gdk.Display.get_default(), pixbuf, 0, 0) self.cursor_root = self.get_toplevel().get_property( "window").get_cursor() return False def __set_cursor(self, widget, tipo): """ Cuando el usuario selecciona alimento o agua en la interfaz gtk, setea el cursor y manda una señal para hacerlo tambien en pygame. """ win = self.get_toplevel().get_property("window") if tipo == "agua": if self.cursor_tipo == "agua": win.set_cursor(self.cursor_root) self.cursor_tipo = False else: win.set_cursor(self.agua_cursor) self.cursor_tipo = "agua" elif tipo == "alimento": if self.cursor_tipo == "alimento": win.set_cursor(self.cursor_root) self.cursor_tipo = False else: win.set_cursor(self.alimento_cursor) self.cursor_tipo = "alimento" else: win.set_cursor(self.cursor_root) self.cursor_tipo = False self.emit("set-cursor", self.cursor_tipo) def __run_lectura(self, derecha, lectura): """ La Interfaz gtk manda abrir una lectura. """ if lectura == "salir": self.emit("exit") return try: self.get_toplevel().juego.pause() except: # Para Sugar self.get_toplevel().interfaz.juego.pause() dialog = Widget_Leccion( parent=self.get_toplevel(), lectura=lectura) dialog.run() dialog.stop() dialog.destroy() try: self.get_toplevel().juego.unpause() except: # Para Sugar self.get_toplevel().interfaz.juego.unpause() def update(self, juego, _dict): """ El juego pygame actualiza información en la interfaz Gtk. """ infocucas = " %sH + %sM = %s" % (_dict["hembras"], _dict["machos"], _dict["cucas"]) infoootecas = " = %s" % _dict["ootecas"] infoagua = "= %s" % int(_dict["agua"]) infoalimento = " = %s" % int(_dict["alimento"]) tiempo = " Años: %s Dias: %s Horas: %s" % (_dict["Años"], _dict["Dias"], _dict["Horas"]) self.toolbar.set_info(infocucas, infoootecas, infoagua, infoalimento, tiempo) def run_lectura(self, juego, lectura): """ El Juego pygame manda abrir una lectura. """ if not lectura in self.lecciones: self.lecciones.append(lectura) try: self.get_toplevel().juego.pause() except: # Para Sugar self.get_toplevel().interfaz.juego.pause() dialog = Widget_Leccion( parent=self.get_toplevel(), lectura=lectura) dialog.run() dialog.stop() dialog.destroy() try: self.get_toplevel().juego.unpause() except: # Para Sugar self.get_toplevel().interfaz.juego.unpause() if lectura == "muerte": self.toolbarestado.set_info( "Se han producido muertes en el habitat.") elif lectura == "reproducción": self.toolbarestado.set_info("Hay nuevas ootecas en el habitat.") elif lectura == "ciclo vital": self.toolbarestado.set_info( "Se han producido nacimientos en el habitat.") elif lectura == "muda de exoesqueleto": self.toolbarestado.set_info( "Algunas Cucarachas han realizado la muda de su exoesqueleto.") elif lectura == "plaga": self.toolbarestado.set_info( "Hay Demasiadas Cucarachas en el habitat. Algunas migrarán. !!!") elif lectura == "extinción": self.toolbarestado.set_info( "Ya no es Posible la Reproducción en el Habitat.") else: print lectura, self.run_lectura def clear_cursor(self, widget): """ El juego pygame indica que ya no debe haber cursor personalizado. """ self.__set_cursor(False, False) self.toolbarestado.set_info( "Las Cucarachas Detectan el Alimento con sus Antenas.") def puntos(self, juego, puntos): self.derecha.set_puntos(puntos)