Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjmpc <jumapico@gmail.com>2009-10-11 05:45:06 (GMT)
committer jmpc <jumapico@gmail.com>2009-10-11 05:45:06 (GMT)
commitc6bbce99a0394414c8c0c41b00e67e18d4c8d331 (patch)
treebda959b18904937d8183ce346ea2f2fa011dd92d
parent586c10bf9e9b73142dc06ae1f3686949653fdf63 (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.py61
-rw-r--r--data/background.png (renamed from background.png)bin41026 -> 41026 bytes
-rw-r--r--data/completed.png (renamed from completed.png)bin1941 -> 1941 bytes
-rw-r--r--data/failed.png (renamed from failed.png)bin3838 -> 3838 bytes
-rw-r--r--data/frame.glade180
-rw-r--r--data/gameover.png (renamed from gameover.png)bin36776 -> 36776 bytes
-rw-r--r--data/start.png (renamed from start.png)bin16189 -> 16189 bytes
-rw-r--r--data/state_inicio.glade14
-rw-r--r--data/win.png (renamed from win.png)bin45490 -> 45490 bytes
-rw-r--r--estados.py87
-rw-r--r--fracciones.xml75
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
index e4a8351..e4a8351 100644
--- a/background.png
+++ b/data/background.png
Binary files differ
diff --git a/completed.png b/data/completed.png
index c6d04c3..c6d04c3 100644
--- a/completed.png
+++ b/data/completed.png
Binary files differ
diff --git a/failed.png b/data/failed.png
index b5c1896..b5c1896 100644
--- a/failed.png
+++ b/data/failed.png
Binary files differ
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
index 085c038..085c038 100644
--- a/gameover.png
+++ b/data/gameover.png
Binary files differ
diff --git a/start.png b/data/start.png
index cc9d314..cc9d314 100644
--- a/start.png
+++ b/data/start.png
Binary files differ
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>
diff --git a/win.png b/data/win.png
index 18f6b8c..18f6b8c 100644
--- a/win.png
+++ b/data/win.png
Binary files differ
diff --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>