diff options
author | jmpc <jumapico@gmail.com> | 2009-10-11 05:45:06 (GMT) |
---|---|---|
committer | jmpc <jumapico@gmail.com> | 2009-10-11 05:45:06 (GMT) |
commit | c6bbce99a0394414c8c0c41b00e67e18d4c8d331 (patch) | |
tree | bda959b18904937d8183ce346ea2f2fa011dd92d | |
parent | 586c10bf9e9b73142dc06ae1f3686949653fdf63 (diff) |
* Movemos las imagenes y los archivos de glade al directorio data.
* Comenzamos a refactorizar el código de la aplicacion segun el nuevo diseño.
-rw-r--r-- | application.py | 61 | ||||
-rw-r--r-- | data/background.png (renamed from background.png) | bin | 41026 -> 41026 bytes | |||
-rw-r--r-- | data/completed.png (renamed from completed.png) | bin | 1941 -> 1941 bytes | |||
-rw-r--r-- | data/failed.png (renamed from failed.png) | bin | 3838 -> 3838 bytes | |||
-rw-r--r-- | data/frame.glade | 180 | ||||
-rw-r--r-- | data/gameover.png (renamed from gameover.png) | bin | 36776 -> 36776 bytes | |||
-rw-r--r-- | data/start.png (renamed from start.png) | bin | 16189 -> 16189 bytes | |||
-rw-r--r-- | data/state_inicio.glade | 14 | ||||
-rw-r--r-- | data/win.png (renamed from win.png) | bin | 45490 -> 45490 bytes | |||
-rw-r--r-- | estados.py | 87 | ||||
-rw-r--r-- | fracciones.xml | 75 |
11 files changed, 342 insertions, 75 deletions
diff --git a/application.py b/application.py new file mode 100644 index 0000000..f023929 --- /dev/null +++ b/application.py @@ -0,0 +1,61 @@ +# -*- encoding: utf-8 +""" +Modulo que define la aplicación principal que carga el Frame de la ventana, +inicializa la informacion de la aplicación y permite cambiar entre los +estados que manejan el Content. + +""" +import logging +import gtk +from estados import Inicio + + +log = logging.getLogger(__name__) + + +class Application: + """ + Singleton correspondiente a la aplicación principal. + Contiene un diccionario que mantiene la información que sera utilizada por + los distintos estados del juego. + + """ + def __init__(self): + """ + Cargamos el xml que define la interfaz (el marco), asignamos los + eventos, creamos y asignamos el primer estado del juego. + + """ + builder = gtk.Builder() + builder.add_from_file("data/frame.glade") + window = builder.get_object("window") + self.content = builder.get_object("dummycontent") + builder.connect_signals(self) + + self.info = dict() + self.change_state(Inicio) + window.show() + + + def change_state(self, state_class): + """ + Cambiamos el estado de la aplicación, modificamos Content. + + """ + parent = self.content.parent + parent.remove(self.content) + new_state = state_class(self) + # del self.content + self.content = new_state + self.content.get_content().reparent(parent) + + + def on_FRAME_destroy(self, userdata): + gtk.main_quit() + + + def run(self): + gtk.main() + + +app = Application() diff --git a/background.png b/data/background.png Binary files differindex e4a8351..e4a8351 100644 --- a/background.png +++ b/data/background.png diff --git a/completed.png b/data/completed.png Binary files differindex c6d04c3..c6d04c3 100644 --- a/completed.png +++ b/data/completed.png diff --git a/failed.png b/data/failed.png Binary files differindex b5c1896..b5c1896 100644 --- a/failed.png +++ b/data/failed.png diff --git a/data/frame.glade b/data/frame.glade new file mode 100644 index 0000000..03fc067 --- /dev/null +++ b/data/frame.glade @@ -0,0 +1,180 @@ +<?xml version="1.0"?> +<interface> + <requires lib="gtk+" version="2.16"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window1"> + <child> + <object class="GtkVBox" id="vbox1"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkMenuBar" id="menubar1"> + <property name="visible">True</property> + <child> + <object class="GtkMenuItem" id="menuitem1"> + <property name="visible">True</property> + <property name="label" translatable="yes">_File</property> + <property name="use_underline">True</property> + <child type="submenu"> + <object class="GtkMenu" id="menu1"> + <property name="visible">True</property> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem1"> + <property name="label">gtk-new</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem2"> + <property name="label">gtk-open</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem3"> + <property name="label">gtk-save</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem4"> + <property name="label">gtk-save-as</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + <child> + <object class="GtkSeparatorMenuItem" id="separatormenuitem1"> + <property name="visible">True</property> + </object> + </child> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem5"> + <property name="label">gtk-quit</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkMenuItem" id="menuitem2"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Edit</property> + <property name="use_underline">True</property> + <child type="submenu"> + <object class="GtkMenu" id="menu2"> + <property name="visible">True</property> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem6"> + <property name="label">gtk-cut</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem7"> + <property name="label">gtk-copy</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem8"> + <property name="label">gtk-paste</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem9"> + <property name="label">gtk-delete</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkMenuItem" id="menuitem3"> + <property name="visible">True</property> + <property name="label" translatable="yes">_View</property> + <property name="use_underline">True</property> + </object> + </child> + <child> + <object class="GtkMenuItem" id="menuitem4"> + <property name="visible">True</property> + <property name="label" translatable="yes">_Help</property> + <property name="use_underline">True</property> + <child type="submenu"> + <object class="GtkMenu" id="menu3"> + <property name="visible">True</property> + <child> + <object class="GtkImageMenuItem" id="imagemenuitem10"> + <property name="label">gtk-about</property> + <property name="visible">True</property> + <property name="use_underline">True</property> + <property name="use_stock">True</property> + </object> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="scrolledwindow1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">automatic</property> + <property name="vscrollbar_policy">automatic</property> + <child> + <object class="GtkViewport" id="CONTAINER"> + <property name="visible">True</property> + <property name="resize_mode">queue</property> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkStatusbar" id="statusbar1"> + <property name="visible">True</property> + <property name="spacing">2</property> + </object> + <packing> + <property name="expand">False</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/gameover.png b/data/gameover.png Binary files differindex 085c038..085c038 100644 --- a/gameover.png +++ b/data/gameover.png diff --git a/start.png b/data/start.png Binary files differindex cc9d314..cc9d314 100644 --- a/start.png +++ b/data/start.png diff --git a/data/state_inicio.glade b/data/state_inicio.glade new file mode 100644 index 0000000..59aee52 --- /dev/null +++ b/data/state_inicio.glade @@ -0,0 +1,14 @@ +<?xml version="1.0"?> +<interface> + <requires lib="gtk+" version="2.16"/> + <!-- interface-naming-policy project-wide --> + <object class="GtkWindow" id="window"> + <child> + <object class="GtkDrawingArea" id="drawingarea"> + <property name="visible">True</property> + <signal name="button_press_event" handler="on_drawingarea_button_press_event"/> + <signal name="expose_event" handler="on_drawingarea_expose_event"/> + </object> + </child> + </object> +</interface> Binary files differdiff --git a/estados.py b/estados.py new file mode 100644 index 0000000..516e40c --- /dev/null +++ b/estados.py @@ -0,0 +1,87 @@ +# -*- encoding: utf-8 +""" +Mantenemos los distintos estados de la aplicación. + +class State: + def __init__(self): + debe retornar el contenido que se pondra en CONTENT. + +""" +import logging +import gtk +import cairo + + +log = logging.getLogger(__name__) +IMAGE = { + "start": cairo.ImageSurface.create_from_png("data/start.png"), + "background": cairo.ImageSurface.create_from_png("data/background.png"), + "completed": cairo.ImageSurface.create_from_png("data/completed.png"), + "failed": cairo.ImageSurface.create_from_png("data/failed.png"), + "win": cairo.ImageSurface.create_from_png("data/win.png"), + "gameover": cairo.ImageSurface.create_from_png("data/gameover.png"), +} + + +class Inicio: + def __init__(self, state): + builder = gtk.Builder() + builder.add_from_file("data/state_inicio.glade") + builder.connect_signals(self) + self.content = builder.get_object("window").child + self.state = state + + + def get_content(self): + """ + Devuelve el widget que colocaremos en content_container. + + """ + log.debug("gtk: %s", self.content) + return self.content + + + def dibujar(self): + cr = self.content.window.cairo_create() + cr.set_source_surface(IMAGE["start"], 0, 0) + cr.paint() + + + def on_drawingarea_button_press_event(self, widget, event): + #log.debug("-> cambiar estado a Jugar") + self.state.change_state(Fin) + + + def on_drawingarea_expose_event(self, widget, event): + self.dibujar() + + +class Fin: + def __init__(self, state): + builder = gtk.Builder() + builder.add_from_file("data/state_inicio.glade") + builder.connect_signals(self) + self.content = builder.get_object("window").child + + + def get_content(self): + """ + Devuelve el widget que colocaremos en content_container. + + """ + log.debug("gtk: %s", self.content) + return self.content + + + def dibujar(self): + cr = self.content.window.cairo_create() + cr.set_source_surface(IMAGE["win"], 0, 0) + cr.paint() + + + def on_drawingarea_button_press_event(self, widget, event): + log.debug("-> cambiar estado a Jugar") + + + def on_drawingarea_expose_event(self, widget, event): + self.dibujar() diff --git a/fracciones.xml b/fracciones.xml deleted file mode 100644 index 3109f42..0000000 --- a/fracciones.xml +++ /dev/null @@ -1,75 +0,0 @@ -<?xml version="1.0"?> -<interface> - <!-- interface-requires gtk+ 2.12 --> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkWindow" id="window"> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property> - <property name="extension_events">all</property> - <property name="resizable">False</property> - <property name="window_position">center</property> - <signal name="destroy" handler="on_window_destroy"/> - <child> - <object class="GtkVBox" id="vbox1"> - <property name="visible">True</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkDrawingArea" id="drawingarea"> - <property name="width_request">320</property> - <property name="height_request">240</property> - <property name="visible">True</property> - <property name="app_paintable">True</property> - <property name="events">GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK</property> - <property name="extension_events">all</property> - <signal name="expose_event" handler="on_drawingarea_expose_event"/> - <signal name="button_press_event" handler="on_drawingarea_button_press_event"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <child> - <object class="GtkStatusbar" id="statusbar"> - <property name="visible">True</property> - <property name="spacing">2</property> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="alignment1"> - <property name="visible">True</property> - <property name="xalign">1</property> - <property name="yalign">1</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <child> - <object class="GtkButton" id="button"> - <property name="label" translatable="yes">CHECK!</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="clicked" handler="on_button_clicked"/> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - </object> -</interface> |