Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xNEWS11
-rwxr-xr-xactivity/activity.info8
-rwxr-xr-xactivity/agenda.svg4
-rwxr-xr-xagenda.py112
-rwxr-xr-xagendacanvas.py565
-rwxr-xr-xavatars/cafe.svg134
-rwxr-xr-xavatars/corazon.svg128
-rwxr-xr-xavatars/none.svg5
-rwxr-xr-xavatars/pizza.svg278
-rwxr-xr-xavatars/sun.svg459
-rwxr-xr-xicons/open-from-journal.svg131
-rwxr-xr-xicons/pcman.svg405
-rwxr-xr-xicons/user.svg4
-rwxr-xr-xlocale/es/LC_MESSAGES/org.ceibaljam.agenda.mobin0 -> 1056 bytes
-rwxr-xr-xlocale/es/activity.linfo2
-rwxr-xr-xpo/Contacts.pot78
-rwxr-xr-xpo/es.po78
-rwxr-xr-xsetup.py3
18 files changed, 2405 insertions, 0 deletions
diff --git a/NEWS b/NEWS
new file mode 100755
index 0000000..6df9a0f
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,11 @@
+Version 1
+Primera Version
+
+Version 2
+Agregado el "estilo sugar" al selector de avatar.
+Modificada la posicion del boton agregar (Sugerencia de Agustin Zubiaga)
+
+Version 3:
+NO es necesario tocar enter para guardar cambios.
+Iconos "aceptar" al lado de los entrys removidos..
+Arreglada la traduccion al español.
diff --git a/activity/activity.info b/activity/activity.info
new file mode 100755
index 0000000..ef7cac9
--- /dev/null
+++ b/activity/activity.info
@@ -0,0 +1,8 @@
+[Activity]
+name = Contacts
+activity_version = 3
+show_launcher = 1
+bundle_id = org.ceibaljam.agenda
+exec = sugar-activity agenda.Agenda -s
+icon = agenda
+license = GPLv3+
diff --git a/activity/agenda.svg b/activity/agenda.svg
new file mode 100755
index 0000000..93d9c9e
--- /dev/null
+++ b/activity/agenda.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?><!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#ffffff">
+ <!ENTITY fill_color "#000000">
+]><svg enable-background="new 0 0 100 100" height="55" id="Layer_1" inkscape:version="0.48.4 r9939" sodipodi:docname="agenda.svg" version="1.1" viewBox="0 0 55 55" width="55" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" y="0px"><metadata id="metadata15"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><defs id="defs13"/><sodipodi:namedview bordercolor="#666666" borderopacity="1" gridtolerance="10" guidetolerance="10" id="namedview11" inkscape:current-layer="Layer_1" inkscape:cx="85.896284" inkscape:cy="40.12603" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="551" inkscape:window-maximized="1" inkscape:window-width="1024" inkscape:window-x="0" inkscape:window-y="0" inkscape:zoom="4" objecttolerance="10" pagecolor="#ffffff" showgrid="false"/><path d="m 17.307942,34.854876 c 0.664904,-0.664905 1.33055,-1.33018 1.995084,-1.995456 2.069002,2.069376 4.13875,4.138381 6.208124,6.207756 0.241443,0.241445 0.644102,0.241072 0.885922,0 1.334265,-1.334266 2.66853,-2.668162 4.002797,-4.0028 0.241444,-0.241446 0.241444,-0.644475 0,-0.885921 -2.069376,-2.069374 -4.138752,-4.13912 -6.208127,-6.207752 0.665275,-0.665275 1.330552,-1.330553 1.995456,-1.995085 0.378512,-0.378884 0.109576,-1.084649 -0.442773,-1.069419 -2.881005,0.07838 -5.762752,0.156755 -8.643755,0.235876 -0.348426,0.009 -0.617359,0.277849 -0.626644,0.626272 -0.07913,2.881004 -0.157497,5.762749 -0.235874,8.644126 -0.01411,0.551982 0.691648,0.820917 1.06979,0.442403 z" id="path3" inkscape:connector-curvature="0" style="fill:&stroke_color;;stroke:&fill_color;"/><path d="m 45.905943,19.808848 -5.474399,6.735327 c -0.279341,0.351737 -0.487523,1.020034 -0.01349,1.449888 l 1.384041,1.382404 7.034708,-8.654336 -1.382401,-1.150912 c -0.538652,-0.234761 -1.200815,-0.105113 -1.548459,0.237629 z" id="path5" inkscape:connector-curvature="0" style="fill:&stroke_color;;stroke:&fill_color;"/><path d="m 38.711311,39.454924 -0.0059,-0.0059 c -2.401618,2.349268 -4.61428,4.087497 -5.3881,4.678087 -1.214305,0.867069 -1.538639,0.771363 -2.33577,0.326377 -0.548054,-0.306337 -0.805313,-0.478523 -1.149684,-0.775455 l -8.724316,7.091114 c 0.697337,0.674839 1.895692,1.559089 3.182391,2.271966 1.3914,0.754188 2.907545,1.357042 3.954164,1.455617 3.762345,-1.47934 10.472318,-5.201602 15.389253,-10.118539 l 0.0033,-0.0033 c 4.917357,-4.917239 8.639212,-11.627621 10.119369,-15.389967 -0.09898,-1.046209 -0.702249,-2.562354 -1.455619,-3.953753 -0.713286,-1.2867 -1.596716,-2.485463 -2.272783,-3.182392 l -7.09032,8.724273 c 0.296522,0.34519 0.468708,0.601221 0.775455,1.149685 0.444577,0.797948 0.540691,1.121055 -0.326377,2.33577 -0.590181,0.773818 -2.328819,2.986481 -4.678087,5.388101 l 0.0059,0.0059 -0.0028,0.0025 z" id="path7" inkscape:connector-curvature="0" style="fill:&stroke_color;;stroke:&fill_color;"/><path d="m 19.067687,46.647101 c -0.342735,0.347236 -0.472796,1.009808 -0.238442,1.548454 l 1.152138,1.381994 8.654335,-7.034714 -1.383629,-1.384042 c -0.42822,-0.474431 -1.097744,-0.265027 -1.449479,0.0139 l -6.734923,5.4744 z" id="path9" inkscape:connector-curvature="0" style="fill:&stroke_color;;stroke:&fill_color;"/><path d="m 36.632528,19.672679 c -0.664905,0.664904 -1.330551,1.330179 -1.995086,1.995455 -2.069001,-2.069375 -4.138749,-4.13838 -6.208123,-6.207753 -0.241446,-0.241447 -0.644103,-0.241076 -0.885922,0 -1.334265,1.334264 -2.668531,2.668161 -4.002798,4.002797 -0.241443,0.241448 -0.241443,0.644476 0,0.885921 2.069377,2.069377 4.138753,4.13912 6.208127,6.207752 -0.665276,0.665275 -1.330551,1.330551 -1.995456,1.995084 -0.378514,0.378886 -0.109576,1.084648 0.442774,1.069419 2.881003,-0.07838 5.762751,-0.156753 8.643753,-0.235874 0.348427,-0.009 0.61736,-0.277848 0.626648,-0.626274 0.07912,-2.881004 0.157496,-5.762749 0.235873,-8.644125 0.01412,-0.551982 -0.691649,-0.820915 -1.06979,-0.442402 z" id="path3-5" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;"/><path d="m 8.3532814,35.190955 5.4743996,-6.735327 c 0.279341,-0.351737 0.487522,-1.020034 0.01349,-1.449888 l -1.38404,-1.382404 -7.0347089,8.654335 1.3824016,1.150912 c 0.5386512,0.234762 1.2008141,0.105114 1.5484587,-0.237628 z" id="path5-6" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;"/><path d="m 15.547914,15.54488 0.0059,0.0059 c 2.401618,-2.349267 4.614281,-4.087497 5.3881,-4.678086 1.214306,-0.86707 1.538639,-0.771363 2.33577,-0.326377 0.548055,0.306337 0.805314,0.478523 1.149684,0.775455 L 33.151645,4.2306177 C 32.454308,3.5557778 31.255952,2.6715282 29.969254,1.9586515 28.577853,1.2044632 27.061708,0.60160883 26.01509,0.50303475 22.252745,1.9823745 15.542772,5.7046365 10.625837,10.621573 l -0.0033,0.0033 c -4.9173569,4.917239 -8.6392116,11.62762 -10.11936891,15.389965 0.0989823,1.04621 0.70224891,2.562355 1.45561881,3.953754 0.7132859,1.286699 1.5967161,2.485462 2.2727836,3.182391 L 11.32189,24.426712 c -0.296521,-0.34519 -0.468707,-0.601222 -0.775455,-1.149685 -0.444576,-0.797948 -0.540691,-1.121056 0.326377,-2.33577 0.590182,-0.773818 2.32882,-2.986481 4.678087,-5.388101 l -0.0059,-0.0059 0.0028,-0.0025 z" id="path7-3" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;"/><path d="M 35.191537,8.352702 C 35.534272,8.0054667 35.664333,7.3428946 35.42998,6.8042484 l -1.152138,-1.3819944 -8.654335,7.034715 1.383629,1.384041 c 0.42822,0.474431 1.097743,0.265027 1.449478,-0.0139 l 6.734923,-5.4744009 z" id="path9-1" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;"/></svg> \ No newline at end of file
diff --git a/agenda.py b/agenda.py
new file mode 100755
index 0000000..63e2416
--- /dev/null
+++ b/agenda.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Ignacio Rodríguez <nachoel01@gmail.com>
+# Rafael Cordano <rafael.cordano@gmail.com>
+# CeibalJAM! - Uruguay 2013
+
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+import gtk
+from sugar.activity import activity
+from sugar.activity.widgets import StopButton
+from sugar.activity.widgets import ActivityToolbarButton
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toolbarbox import ToolbarBox
+from gettext import gettext as _
+from agendacanvas import canvas
+import agendacanvas
+import simplejson
+import os
+from agendacanvas import AddTelephoneArea
+
+
+
+class Agenda(activity.Activity):
+
+ def __init__(self, handle):
+ super(Agenda, self).__init__(handle, True)
+ tool = ToolbarBox()
+ toolbar = tool.toolbar
+ activitybtn = ActivityToolbarButton(self)
+ self.separator = gtk.SeparatorToolItem()
+ self.separator.props.draw = False
+ self.separator.set_expand(True)
+ stpbtn = StopButton(self)
+ self.addbtn = ToolButton('add')
+ self.addbtn.connect('clicked', self._show_palette_add_button)
+ toolbar.insert(activitybtn, 0)
+ toolbar.insert(gtk.SeparatorToolItem(), -1)
+ toolbar.insert(self.addbtn, -1)
+ toolbar.insert(self.separator, -1)
+ toolbar.insert(stpbtn, -1)
+
+ self.canvas = canvas()
+ self.toolarea = AddTelephoneArea(self.addbtn, self.canvas)
+
+ self.set_toolbar_box(tool)
+ self.set_canvas(self.canvas)
+ self.addbtn.set_tooltip(_('Add a new contact'))
+ self._create_palette_add_button(self.addbtn)
+ self.show_all()
+
+ def _show_palette_add_button(self, button):
+ button.props.palette.popup(immediate=True, state=1)
+
+ def _create_palette_add_button(self, button):
+ pallete = button.get_palette()
+ pallete.set_content(self.toolarea)
+
+ def read_file(self, file_path):
+ fd = open(file_path, 'r')
+ text = fd.read()
+ data = simplejson.loads(text)
+ fd.close()
+ c = 0
+ for x in data['avatars']:
+ if os.path.exists(x):
+ pass
+ else:
+ data['avatars'].__setitem__(c, os.path.join(os.getcwd(),
+ 'avatars','none.svg'))
+ c += 1
+ current = 0
+ for x in data['names']:
+ numero = data['telephones'][current]
+ edad = data['ages'][current]
+ email = data['emails'][current]
+ direction = data['directions'][current]
+ avatar = data['avatars'][current]
+ self.canvas._add(x, numero, edad, email, direction, avatar)
+ current += 1
+
+ def write_file(self, file_path):
+ data = {}
+ data['names'] = agendacanvas.NAMES
+ data['telephones'] = agendacanvas.NUMBERS
+ data['ages'] = agendacanvas.AGES
+ data['emails'] = agendacanvas.EMAILS
+ data['directions'] = agendacanvas.DIRECTIONS
+ data['avatars'] = agendacanvas.AVATARS
+
+ fd = open(file_path, 'w')
+ text = simplejson.dumps(data)
+ fd.write(text)
+ fd.close()
+
+ def destroy(self):
+ for x in os.listdir('.'):
+ if 'pyo' in x:
+ os.remove(x)
diff --git a/agendacanvas.py b/agendacanvas.py
new file mode 100755
index 0000000..1d688da
--- /dev/null
+++ b/agendacanvas.py
@@ -0,0 +1,565 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Ignacio Rodríguez <nachoel01@gmail.com>
+# Rafael Cordano <rafael.cordano@gmail.com>
+# CeibalJAM! - Uruguay 2013
+
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+import simplejson
+import gtk
+from sugar.graphics.toolbutton import ToolButton
+from gettext import gettext as _
+import gobject
+import os
+from sugar.graphics.objectchooser import ObjectChooser
+
+NAMES = []
+AGES = []
+NUMBERS = []
+EMAILS = []
+DIRECTIONS = []
+AVATARS = []
+
+IMAGE = gtk.Image()
+
+icon_theme = gtk.icon_theme_get_default()
+icon_theme.append_search_path('icons/')
+
+if __name__ == "__main__":
+ a = gtk.settings_get_default()
+ a.set_property('gtk-icon-theme-name', 'sugar')
+ a.set_property('gtk-theme-name', 'sugar-100')
+
+def pixbuf(path):
+ pix = gtk.gdk.pixbuf_new_from_file_at_size(path, 200, 200)
+ return pix
+
+
+class utils():
+ iter_sel = None
+ model = None
+ entrys = []
+
+
+class AddTelephoneArea(gtk.VBox):
+ def __init__(self, button, canvas):
+ super(AddTelephoneArea, self).__init__()
+ self.bb = button
+ self.canvas = canvas
+ self.hbox = gtk.HBox()
+ self.nombre = gtk.Entry()
+ self.nn = gtk.Label(_('Write a name:'))
+ x = gtk.gdk.screen_width() / 2
+ self.set_size_request(x, -1)
+ self.hbox.pack_start(self.nn, False, False, 6)
+ self.hbox.pack_start(self.nombre, True, True, 6)
+ self.pack_start(self.hbox)
+ self.toolbar = gtk.Toolbar()
+ #
+ self.toolbar.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black'))
+ #
+ self.btn = gtk.ToolButton()
+ self.btn.set_icon_name('dialog-ok')
+ self.btn.connect('clicked', self.add)
+ #
+ self.separator = gtk.SeparatorToolItem()
+ self.separator.props.draw = False
+ self.separator.set_expand(True)
+ #
+ self.toolbar.insert(self.separator, -1)
+ self.toolbar.insert(self.btn, -1)
+ self.pack_end(self.toolbar)
+ self.show_all()
+
+ def add(self, widget):
+ name = self.nombre.get_text()
+ if name != "":
+ self.canvas._add(name)
+ self.nombre.set_text("")
+ self.bb.props.palette.popdown(True)
+
+
+class canvas(gtk.HPaned):
+
+ def __init__(self):
+ super(canvas, self).__init__()
+ ####
+ self.toolbar = gtk.Toolbar()
+ self.remove = ToolButton('remove')
+ self.remove.set_tooltip(_('Remove this contact'))
+ self.addbtn = ToolButton('add')
+ self.addbtn.connect('clicked', self._show_palette_add_button)
+
+ self.sep = gtk.SeparatorToolItem()
+ self.toolarea = AddTelephoneArea(self.addbtn, self)
+ self.sep.props.draw = False
+ self.sep.set_expand(True)
+ self.toolbar.insert(self.sep, -1)
+ self.toolbar.insert(self.remove, -1)
+ ###
+ self.ficha = Ficha()
+ self.set1 = Telefonos(self.remove, self.ficha)
+ self.scroll = gtk.ScrolledWindow()
+ self.scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self.scroll.add_with_viewport(self.set1)
+ self.vbx = gtk.VBox()
+ self.vbx.pack_start(self.scroll, True, True, 0)
+ self.vbx.pack_end(self.toolbar, False, True, 0)
+ self.vbx.set_size_request(gtk.gdk.screen_width() / 3, -1)
+
+ self.add1(self.vbx)
+ self.add2(self.ficha)
+ self.show_all()
+ self.addbtn.set_tooltip(_('Add a new contact'))
+
+ if __name__ == "__main__":
+ self.toolbar.insert(self.addbtn, -1)
+ if os.path.isfile("users"):
+ self.read_file('users')
+
+ self._create_palette_add_button(self.addbtn)
+
+ def read_file(self, file_path):
+ fd = open(file_path, 'r')
+ text = fd.read()
+ data = simplejson.loads(text)
+ fd.close()
+ current = 0
+ for x in data['names']:
+ numero = data['telephones'][current]
+ edad = data['ages'][current]
+ email = data['emails'][current]
+ direction = data['directions'][current]
+ avatar = data['avatars'][current]
+ self._add(x, numero, edad, email, direction, avatar)
+ current += 1
+
+ def _show_palette_add_button(self, button):
+ button.props.palette.popup(immediate=True, state=1)
+
+ def _create_palette_add_button(self, button):
+ pallete = button.get_palette()
+ pallete.set_content(self.toolarea)
+
+ txt = _("Unknown")
+ pt = os.path.join(os.getcwd(), 'avatars', 'none.svg')
+ td = _("None")
+
+ def _add(self, name, number=txt, age=1, email=td, direct=txt, av=pt):
+ self.set1._add_telephone(name, number, age, email, direct, av)
+ self.show_all()
+
+
+class Telefonos(gtk.TreeView):
+
+ def __init__(self, rmbutton, ficha):
+ super(Telefonos, self).__init__()
+ self.set_property("rules-hint", True)
+
+ self._model = gtk.ListStore(str)
+ #
+ gobject.timeout_add(10, self.check)
+ #
+ self.ficha = ficha
+ self.btn = rmbutton
+ self.btn.connect('clicked', self.remove)
+ #
+ self.selection = self.get_selection()
+ self.selection.set_mode(gtk.SELECTION_SINGLE)
+ self.selection.set_select_function(self.user_press)
+ #
+ self.set_model(self._model)
+ #
+ self.user = gtk.CellRendererText()
+ self.user.set_property('editable', False)
+ self.users = gtk.TreeViewColumn(_("Contacts:"))
+ self.users.pack_start(self.user, True)
+ self.append_column(self.users)
+ #
+ self.current = 0
+ self.users.add_attribute(self.user, 'text', 0)
+ self.show_all()
+
+ def user_press(self, selection):
+ iter_sel = self._model.get_iter(selection)
+ name = self._model.get_value(iter_sel, 0)
+ utils.iter_sel = iter_sel
+ utils.model = self._model
+ echo = False
+ a = 0
+ while not echo:
+ if name == NAMES[a]:
+ utils.current = a
+ echo = True
+ a += 1
+ self.ficha.name_entry.set_text(name)
+ self.ficha.age_entry.set_text(str(AGES[utils.current]))
+ self.ficha.telephone_entry.set_text(str(NUMBERS[utils.current]))
+ self.ficha.email_entry.set_text(str(EMAILS[utils.current]))
+ self.ficha.direction_entry.set_text(str(DIRECTIONS[utils.current]))
+ IMAGE.set_from_pixbuf(pixbuf(str(AVATARS[utils.current])))
+ IMAGE.show_all()
+ for x in list(self.ficha.user):
+ self.ficha.user.remove(x)
+ self.ficha.user.add(IMAGE)
+ self.ficha.user.disconnect(self.ficha.conectado)
+ pt = str(AVATARS[utils.current])
+ self.ficha.conectado = self.ficha.user.connect('clicked',
+ self.ficha.open, pt)
+ self.ficha.show_all()
+ return True
+
+ def _add_telephone(self, name, number, age, email, direction, avatar):
+ self._model.insert(self.current, [name])
+ self.up()
+ NAMES.append(name)
+ AGES.append(age)
+ NUMBERS.append(number)
+ EMAILS.append(email)
+ DIRECTIONS.append(direction)
+ AVATARS.append(avatar)
+ IMAGE.set_from_pixbuf(pixbuf(avatar))
+ IMAGE.show_all()
+
+ self.show_all()
+
+ def check(self):
+ """ Aca nadie se hace el "vivo".. :P """
+ model, iter = self.selection.get_selected()
+ tipo = str(type(iter))
+ if "None" in tipo:
+ self.btn.set_sensitive(False)
+ self.ficha.name_entry.set_text("")
+ self.ficha.show_all()
+ self.ficha.set_sensitive(False)
+ for x in utils.entrys:
+ if not "button" in str(x):
+ x.set_text("")
+ else:
+ x.set_text(1)
+ else:
+ self.btn.set_sensitive(True)
+ self.ficha.set_sensitive(True)
+ return True
+
+ def remove(self, widget):
+ model, iter = self.selection.get_selected()
+ d = self._model.get_value(iter, 0)
+ self._model.remove(iter)
+ NAMES.remove(d)
+ self.down()
+
+ def up(self):
+ self.current += 1
+
+ def down(self):
+ self.current -= 1
+
+
+class Ficha(gtk.VBox):
+
+ def __init__(self):
+ super(Ficha, self).__init__()
+ """
+ Image - Name -Entry-
+ Age -Entry-
+ Telephone -Entry-
+ Email -Entry-
+ Direction -Entry-
+ """
+ ###
+ self.namee = gtk.Label(_('Name:'))
+ self.age = gtk.Label(_('Age:'))
+ self.telephone = gtk.Label(_('Telephone:'))
+ self.email = gtk.Label('Email:')
+ self.direction = gtk.Label(_('Adress:'))
+
+ self.namee.set_size_request(100, -1)
+ self.age.set_size_request(100, -1)
+ self.telephone.set_size_request(100, -1)
+ self.email.set_size_request(100, -1)
+ self.direction.set_size_request(100, -1)
+
+ ###
+ self.name_entry = gtk.Entry()
+ self.user = gtk.Button()
+ self.conectado = self.user.connect('clicked', self.open)
+ IMAGE.set_size_request(200, 200)
+ self.user.add(IMAGE)
+ self.age_entry = gtk.SpinButton()
+
+ #
+ adj = gtk.Adjustment(1, 1, 90, 1, 10)
+ self.age_entry.set_adjustment(adj)
+ #
+ self.telephone_entry = gtk.Entry()
+
+ self.email_entry = gtk.Entry()
+ self.direction_entry = gtk.Entry()
+ utils.entrys.append(self.name_entry)
+ utils.entrys.append(self.age_entry)
+ utils.entrys.append(self.telephone_entry)
+ utils.entrys.append(self.email_entry)
+ utils.entrys.append(self.direction_entry)
+ ##
+ for x in utils.entrys:
+ x.set_size_request(300, -1)
+ ##
+
+ self.windowd = None
+ self.namebox = gtk.HBox()
+ self.agebox = gtk.HBox()
+ self.telephonebox = gtk.HBox()
+ self.emailbox = gtk.HBox()
+ self.directionbox = gtk.HBox()
+ ###
+ self.namebox.pack_start(self.user, expand=True, fill=True, padding=6)
+ self.namebox.pack_start(self.namee, False, False, 6)
+ self.namebox.pack_end(self.name_entry, True, True, 6)
+ self.agebox.pack_start(self.age, False, False, 6)
+ self.agebox.pack_end(self.age_entry, True, True, 6)
+ self.telephonebox.pack_start(self.telephone, False, False, 6)
+ self.telephonebox.pack_start(self.telephone_entry, True, True, 6)
+ self.emailbox.pack_start(self.email, False, False, 6)
+ self.emailbox.pack_end(self.email_entry, True, True, 6)
+ self.directionbox.pack_start(self.direction, False, False, 6)
+ self.directionbox.pack_end(self.direction_entry, True, True, 6)
+ ##
+ self.name_entry.connect('activate', self.set_param, NAMES)
+ self.name_entry.connect('focus-in-event', self.set_param, NAMES)
+ self.name_entry.connect('focus-out-event', self.set_param, NAMES)
+ self.telephone_entry.connect('activate', self.set_param, NUMBERS)
+ self.telephone_entry.connect('focus-in-event', self.set_param, NUMBERS)
+ self.telephone_entry.connect('focus-out-event', self.set_param, NUMBERS)
+ self.direction_entry.connect('activate', self.set_param, DIRECTIONS)
+ self.direction_entry.connect('focus-in-event',
+ self.set_param, DIRECTIONS)
+ self.direction_entry.connect('focus-out-event',
+ self.set_param, DIRECTIONS)
+ self.age_entry.connect('activate', self.set_param, AGES)
+ self.age_entry.connect('focus-in-event', self.set_param, AGES)
+ self.age_entry.connect('focus-out-event', self.set_param, AGES)
+ self.email_entry.connect('activate', self.set_param, EMAILS)
+ self.email_entry.connect('focus-in-event', self.set_param, EMAILS)
+ self.email_entry.connect('focus-out-event', self.set_param, EMAILS)
+
+ ###
+ self.pack_start(self.namebox, True, True, 6)
+ self.pack_start(self.agebox, True, True, 6)
+ self.pack_start(self.telephonebox, True, True, 6)
+ self.pack_start(self.emailbox, True, True, 6)
+ self.pack_start(self.directionbox, True, True, 6)
+ self.show_all()
+
+ def set_param(self, widget, event, lista):
+ d = utils.model.get_value(utils.iter_sel, 0)
+ echo = False
+ a = 0
+ while not echo:
+ if d == NAMES[a]:
+ utils.current = a
+ echo = True
+ a += 1
+ if lista == NAMES:
+ utils.model.set_value(utils.iter_sel, 0, widget.get_text())
+ lista.__setitem__(utils.current, widget.get_text())
+
+ def _set_img(self, widget, win):
+ win.destroy()
+ chooser = ObjectChooser()
+ res = chooser.run()
+ if res == gtk.RESPONSE_CANCEL:
+ chooser.destroy()
+ else:
+ chooser.destroy()
+ image = gtk.Image()
+ ch = chooser.get_selected_object()
+ self.user.disconnect(self.conectado)
+ path = ch.file_path
+ self.conectado = self.user.connect('clicked', self.open, path)
+ pix = gtk.gdk.pixbuf_new_from_file_at_size(path, 200, 200)
+ image.set_from_pixbuf(pix)
+ for x in list(self.user):
+ self.user.remove(x)
+ self.user.add(image)
+ ###
+ d = utils.model.get_value(utils.iter_sel, 0)
+ echo = False
+ a = 0
+ while not echo:
+ if d == NAMES[a]:
+ utils.current = a
+ echo = True
+ a += 1
+ AVATARS.__setitem__(utils.current, path)
+ ##
+ self.show_all()
+
+ def _set_img_button(self, widget, path, win):
+ win.destroy()
+ image = gtk.Image()
+ pix = gtk.gdk.pixbuf_new_from_file_at_size(path, 200, 200)
+ image.set_from_pixbuf(pix)
+ self.user.disconnect(self.conectado)
+ self.conectado = self.user.connect('clicked', self.open, path)
+ for x in list(self.user):
+ self.user.remove(x)
+ ###
+ d = utils.model.get_value(utils.iter_sel, 0)
+ echo = False
+ a = 0
+ while not echo:
+ if d == NAMES[a]:
+ utils.current = a
+ echo = True
+ a += 1
+ AVATARS.__setitem__(utils.current, path)
+ ###
+ self.set_sensitive(True)
+ self.user.add(image)
+ self.show_all()
+
+ def open(self, widget, path="none"):
+ win = gtk.Window(gtk.WINDOW_POPUP)
+ av = Avatars(self._set_img_button, self._set_img, win, path)
+ win.add(av)
+ win.show()
+
+
+class Avatars(gtk.VBox):
+ def __init__(self, btnfunction, loadfunction, win, path="none"):
+ super(Avatars, self).__init__()
+ win.set_title(_('Select a avatar'))
+ win.set_decorated(False)
+ win.set_position(gtk.WIN_POS_CENTER)
+ y = gtk.gdk.screen_height() - 100
+ win.set_size_request(gtk.gdk.screen_width() - 100, y)
+ self.win = win
+ scroll = gtk.ScrolledWindow()
+ scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self.hbox = gtk.HBox()
+ self.show_all()
+ self.function = btnfunction
+ self.a = 0
+ self.vbx = gtk.VBox()
+ self.vbx.pack_start(self.hbox, False, False, 6)
+ self.eventbox = gtk.EventBox()
+ self.eventbox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('white'))
+ self.eventbox.add(self.vbx)
+ scroll.add_with_viewport(self.eventbox)
+
+ ####
+ # Sugar Style
+ ####
+ tl = gtk.Toolbar()
+ tl.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('black'))
+ self.loadfromjournal = ToolButton('open-from-journal')
+ self.loadfromjournal.set_tooltip(_('Load from journal'))
+ self.loadfromjournal.connect('clicked', loadfunction, win)
+ self.accept = ToolButton('dialog-ok')
+ self.accept.set_tooltip(_('Accept'))
+ self.cancel = ToolButton('gtk-cancel')
+ self.cancel.set_tooltip(_('Cancel'))
+ self.cancel.connect('clicked', lambda x: win.destroy())
+ sep = gtk.SeparatorToolItem()
+ sep.set_expand(True)
+ sep.props.draw = False
+ tl.insert(self.loadfromjournal, 0)
+ tl.insert(sep, 1)
+ tl.insert(self.accept, 2)
+ tl.insert(self.cancel, 3)
+ tl.set_size_request(55, -1)
+ self.pack_start(tl, False, False, 0)
+ self.eventbox.add(scroll)
+ self.pack_end(scroll, True, True, 0)
+ ####
+ self.path = None
+ self.actual = None
+ for x in os.listdir('avatars'):
+ if path != "none":
+ if path == os.path.join(os.getcwd(), 'avatars', x):
+ sensitive = False
+ else:
+ sensitive = True
+ else:
+ sensitive = True
+ self._gen_avatars(x, sensitive)
+ gobject.timeout_add(10, self._check)
+
+ def _check(self):
+ a = str(type(self.path)).lower()
+ if 'none' in a:
+ self.accept.set_sensitive(False)
+ else:
+ self.accept.set_sensitive(True)
+ return True
+
+ def _gen_avatars(self, name, sensi):
+ path = os.path.join(os.getcwd(), 'avatars', name)
+ button = gtk.Button()
+ if not sensi:
+ self.actual = button
+ button.set_sensitive(sensi)
+ button.set_tooltip_text(path)
+ image = gtk.Image()
+ pix = gtk.gdk.pixbuf_new_from_file_at_size(path, 100, 100)
+ image.set_from_pixbuf(pix)
+ button.add(image)
+ button.connect('clicked', self._set_path)
+ if not self.a + 1 == 6:
+ self.hbox.pack_start(button, False, False, 0)
+ self.a += 1
+ else:
+ self.hbox = gtk.HBox()
+ self.vbx.pack_start(self.hbox, False, False, 6)
+ self.hbox.pack_start(button, False, False, 0)
+ self.a = 0
+ button.props.has_tooltip = False
+ self.show_all()
+
+ def _set_path(self, widget):
+ try:
+ self.actual.set_sensitive(True)
+ except:
+ pass
+ self.path = widget.get_tooltip_text()
+ self.accept.connect('clicked', self.function, self.path, self.win)
+ widget.set_sensitive(False)
+ self.actual = widget
+
+if __name__ == "__main__":
+ win = gtk.Window()
+ win.add(canvas())
+ win.set_size_request(600, 600)
+ win.show_all()
+
+ def destroy(widget, event, file_path="users"):
+ data = {}
+ data['names'] = NAMES
+ data['telephones'] = NUMBERS
+ data['ages'] = AGES
+ data['emails'] = EMAILS
+ data['directions'] = DIRECTIONS
+ data['avatars'] = AVATARS
+
+ fd = open(file_path, 'w')
+ text = simplejson.dumps(data)
+ fd.write(text)
+ fd.close()
+
+ win.connect('delete-event', destroy)
+ gtk.main()
diff --git a/avatars/cafe.svg b/avatars/cafe.svg
new file mode 100755
index 0000000..dd99cb3
--- /dev/null
+++ b/avatars/cafe.svg
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ enable-background="new 0 0 100 100"
+ height="200"
+ id="Layer_1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="TazaCafe.svg"
+ version="1.1"
+ viewBox="0 0 200 200"
+ width="200"
+ x="0px"
+ xml:space="preserve"
+ y="0px"><metadata
+ id="metadata6611"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs6609"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 50 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="100 : 50 : 1"
+ inkscape:persp3d-origin="50 : 33.333333 : 1"
+ id="perspective3921" />
+
+
+
+</defs><sodipodi:namedview
+ bordercolor="#666666"
+ borderopacity="1"
+ gridtolerance="10"
+ guidetolerance="10"
+ id="namedview6607"
+ inkscape:current-layer="Layer_1"
+ inkscape:cx="100"
+ inkscape:cy="75.35993"
+ inkscape:guide-bbox="true"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-height="808"
+ inkscape:window-maximized="1"
+ inkscape:window-width="1200"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ inkscape:zoom="1.949847"
+ objecttolerance="10"
+ pagecolor="#ffffff"
+ showgrid="false"
+ showguides="true" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<g
+ id="g4480"
+ transform="matrix(1.000003,0,0,1.000003,0.5742234,-5.5535089e-4)"><g
+ transform="matrix(0.99999701,0,0,0.99999701,-1.7148811e-6,-13.878705)"
+ id="g4472"><path
+ d="m 151.3033,67.103798 c 0,-6.947153 -4.42092,-16.696973 -25.4916,-23.657612 -13.59537,-4.495072 -31.512771,-6.967368 -50.446045,-6.967368 -18.935519,0 -36.85066,2.472296 -50.448274,6.967368 -21.070683,6.962885 -25.49160268,16.710459 -25.49160268,23.657612 0,29.638303 1.02712651,53.197012 6.04364358,71.824622 4.8704171,18.08371 13.3795981,31.91507 28.4493541,46.24538 9.430679,8.96544 23.763241,13.7055 41.446879,13.7055 17.683639,0 32.013965,-4.74006 41.444645,-13.7055 11.47594,-10.9118 19.23445,-22.04612 25.14548,-36.09998 0.0787,-0.18655 0.26746,-0.62706 1.7823,-1.10579 2.34194,-0.73495 5.76044,-0.82035 8.1316,-0.82035 1.44741,0 2.94427,0.036 4.39618,0.0719 1.42943,0.0315 2.90607,0.0674 4.31753,0.0674 10.05774,0 19.52213,-4.25909 26.65582,-11.99737 6.66395,-7.22809 10.48701,-16.91049 10.48701,-26.56592 0,-10.138653 -3.93544,-19.295132 -11.0871,-25.77928 -6.7224,-6.097581 -15.97552,-9.453159 -26.05798,-9.453159 -3.66349,0 -6.74262,0.537167 -9.30931,1.177718 0.027,-2.409364 0.0315,-4.926612 0.0315,-7.565221 l -2e-5,7e-5 z m 38.16546,41.619942 c 0,7.60118 -6.63274,10.73842 -11.90771,16.45841 -5.54918,6.02341 20.61818,-11.70091 14.57104,-16.50401 C 37.567757,-14.088832 87.58002,136.77813 84.572813,136.77813 c -7.488802,0 -5.645907,-18.95041 -8.217092,-12.84385 -5.230021,12.42665 4.95928,-91.66728 -6.098614,-81.151046 -7.72929,7.349462 5.037003,37.266798 -10.814901,37.266798 -15.851893,0 -12.098878,106.481288 -19.830414,99.134078 C 12.409815,153.31942 70.904797,181.05264 7.6899894,67.103798 1.6976259,56.302163 14.19749,184.10462 51.571831,184.10462 c 37.376598,0 79.451809,-124.811294 79.451809,-115.498608 0,9.312676 -43.012713,12.147953 -43.1251,17.683639 -38.655211,48.734639 55.78334,-1.412269 56.1879,-1.412269 4.2591,0 -23.44037,7.393658 -15.64815,7.393658 8.02373,0 30.93101,-3.412946 36.13182,1.302398 5.39858,4.897392 24.89865,7.373852 24.89865,15.150342 l 0,-4e-5 z"
+ id="path4468"
+ inkscape:connector-curvature="0"
+ style="fill:#f2f2f2;stroke:none"
+ sodipodi:nodetypes="ccscsscscssssssscscccccssccscsszcssccc" /><path
+ style="fill:#000000;stroke:none"
+ inkscape:connector-curvature="0"
+ id="path6481"
+ d="m 153.00285,67.103793 c 0,-6.947146 -4.42092,-16.696973 -25.4916,-23.657604 -13.59537,-4.495079 -31.512758,-6.967374 -50.446032,-6.967374 -18.935523,0 -36.850663,2.472295 -50.448278,6.967374 C 5.5462541,50.409067 1.1253432,60.156647 1.1253432,67.103793 c 0,29.638308 1.0271257,53.197017 6.0436349,71.824627 4.8704179,18.08371 13.3796039,31.91507 28.4493579,46.24538 9.430678,8.96544 23.763239,13.7055 41.446882,13.7055 17.68364,0 32.013962,-4.74006 41.444632,-13.7055 11.47594,-10.9118 19.23445,-22.04612 25.14548,-36.09998 0.0787,-0.18655 0.26746,-0.62706 1.7823,-1.10579 2.34194,-0.73495 5.76044,-0.82035 8.1316,-0.82035 1.44742,0 2.94428,0.036 4.39618,0.0719 1.42944,0.0315 2.90607,0.0674 4.31753,0.0674 10.05774,0 19.52213,-4.25909 26.65582,-11.99737 6.66395,-7.22809 10.48702,-16.91049 10.48702,-26.56592 0,-10.138652 -3.93544,-19.29513 -11.08711,-25.779283 -6.72239,-6.097575 -15.97552,-9.453152 -26.05798,-9.453152 -3.66349,0 -6.74262,0.537162 -9.3093,1.177711 0.027,-2.409363 0.0315,-4.926608 0.0315,-7.565219 z m 38.16547,41.619947 c 0,7.60118 -3.02744,15.24506 -8.30241,20.96504 -5.54917,6.02341 -12.85817,9.33404 -20.58072,9.33404 -2.69705,0 -5.70651,-0.1416 -8.71371,-0.1416 -7.48881,0 -14.95963,0.87879 -17.53081,6.98536 -5.23003,12.42664 -12.16594,22.80129 -23.22383,33.31753 -7.72929,7.34946 -19.899723,11.42874 -35.751622,11.42874 -15.851898,0 -28.022327,-4.08153 -35.753863,-11.42874 C 14.10938,153.31942 9.3895465,129.33143 9.3895465,67.103793 c 0,-12.352479 30.3013325,-22.363021 67.6756715,-22.363021 37.376592,0 67.675672,10.010542 67.675672,22.363021 0,6.272884 -0.0494,12.147953 -0.16182,17.683643 0.4023,0.06293 0.80237,0.08991 1.20692,0.08991 4.2591,0 8.70697,-3.121833 16.4992,-3.121833 8.02372,0 15.30799,2.595909 20.5088,7.311247 5.39858,4.89739 8.37433,11.88049 8.37433,19.65698 z" /><path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;stroke:none"
+ id="path4470"
+ sodipodi:cx="164.64203"
+ sodipodi:cy="111.46184"
+ sodipodi:rx="11.83505"
+ sodipodi:ry="13.333158"
+ d="m 176.47708,111.46184 c 0,7.3637 -5.29873,13.33316 -11.83505,13.33316 -6.53632,0 -11.83505,-5.96946 -11.83505,-13.33316 0,-7.3637 5.29873,-13.33316 11.83505,-13.33316 6.53632,0 11.83505,5.96946 11.83505,13.33316 z"
+ transform="matrix(1.3200626,0,0,1.0027399,-55.998619,-0.54490502)" /><path
+ style="fill:#000000;stroke:none"
+ inkscape:connector-curvature="0"
+ id="path6483"
+ d="m 143.83963,103.46449 c -0.33039,5.18732 -2.6004,21.04597 -3.16004,25.57925 2.3262,-1.37999 5.56266,-1.75083 8.92722,-1.75083 3.86802,0 7.89786,0.48997 10.90282,0.48997 0.6428,0 1.24064,-0.0225 1.7778,-0.0787 9.48237,-0.95296 17.55779,-8.86879 17.55779,-18.97822 0,-9.504854 -6.89096,-15.64738 -17.55779,-15.64738 -8.83282,-0.0022 -15.24505,4.52205 -18.4478,10.38588 z m 16.67,16.05418 c -1.13725,0 -2.64535,-0.0989 -4.23886,-0.20452 -1.81826,-0.11913 -3.85004,-0.24948 -5.92227,-0.28095 0.61808,-4.65915 1.23615,-9.53631 1.55755,-12.8784 1.51034,-2.02954 4.63218,-4.81648 10.37914,-4.81648 4.2411,0 9.29583,1.2811 9.29583,7.38542 0,6.09532 -5.14688,10.25552 -10.12292,10.75672 -0.15733,0.018 -0.45176,0.0382 -0.94847,0.0382 z" /><path
+ style="fill:#000000;stroke:none"
+ inkscape:connector-curvature="0"
+ id="path6485"
+ d="m 125.59635,60.606156 c -1.00465,-0.541657 -2.25878,-0.166319 -2.80268,0.838332 -0.53941,1.006898 -0.16408,2.25653 0.84282,2.798187 2.75099,1.483376 4.32876,3.079129 4.32876,4.37596 0,1.15074 -1.2766,2.753236 -4.44338,4.434396 -7.63938,-5.598621 -25.55903,-9.529569 -46.458899,-9.529569 -20.897625,0 -38.817261,3.930948 -46.4544,9.529569 -3.166784,-1.68116 -4.443387,-3.283656 -4.443387,-4.434396 0,-1.303573 1.582268,-2.899326 4.346742,-4.384951 1.004651,-0.537161 1.382237,-1.786794 0.842827,-2.793691 -0.539409,-1.006898 -1.793536,-1.382237 -2.795939,-0.845075 -4.328762,2.328451 -6.522361,5.027747 -6.522361,8.023717 0,10.57018 27.682948,16.103623 55.031012,16.103623 27.348065,0 55.031015,-5.533443 55.031015,-16.103623 -0.002,-2.991476 -2.18911,-5.686276 -6.50213,-8.012479 z" /><path
+ style="fill:#deaa87;fill-opacity:1;stroke:none"
+ d="m 76.875726,62.884458 c -20.897625,0 -38.788604,4.080812 -46.425745,9.859838 1.411476,7.286609 31.212997,8.64315 46.636452,9.207348 27.335737,0 49.516117,-5.046945 49.516117,-11.237315 -0.22121,-0.160228 -2.47731,1.547164 -3.23084,2.029967 -7.63938,-5.779026 -25.596112,-9.859838 -46.495984,-9.859838 z"
+ id="path4465"
+ sodipodi:nodetypes="cccccc" /></g></g></svg> \ No newline at end of file
diff --git a/avatars/corazon.svg b/avatars/corazon.svg
new file mode 100755
index 0000000..a409eac
--- /dev/null
+++ b/avatars/corazon.svg
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ enable-background="new 0 0 100 100"
+ height="200"
+ id="Layer_1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Corazon.svg"
+ version="1.1"
+ viewBox="0 0 200 200"
+ width="200"
+ x="0px"
+ xml:space="preserve"
+ y="0px"><metadata
+ id="metadata6732"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs6730"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 51.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="103 : 51.5 : 1"
+ inkscape:persp3d-origin="51.5 : 34.333333 : 1"
+ id="perspective5072" /><inkscape:perspective
+ id="perspective5301"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><linearGradient
+ gradientTransform="matrix(1.0780226,0,0,0.92762438,3.8505098e-4,4.04e-4)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4974"
+ inkscape:collect="always"
+ x1="-4.9125605"
+ x2="29.409975"
+ xlink:href="#linearGradient832-0"
+ y1="-1.6511714"
+ y2="34.932926" /><linearGradient
+ id="linearGradient832-0"><stop
+ id="stop833-7"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" /><stop
+ id="stop834-4"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.0000000;" /></linearGradient><inkscape:perspective
+ id="perspective5301-0"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><linearGradient
+ gradientTransform="matrix(1.0780226,0,0,0.92762438,3.8505098e-4,4.04e-4)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4974-0"
+ inkscape:collect="always"
+ x1="-4.9125605"
+ x2="29.409975"
+ xlink:href="#linearGradient832-0-2"
+ y1="-1.6511714"
+ y2="34.932926" /><linearGradient
+ id="linearGradient832-0-2"><stop
+ id="stop833-7-5"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" /><stop
+ id="stop834-4-7"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.0000000;" /></linearGradient><linearGradient
+ y2="34.932926"
+ x2="29.409975"
+ y1="-1.6511714"
+ x1="-4.9125605"
+ gradientTransform="matrix(1.433573,0,0,0.92762438,14.043925,14.021743)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5310"
+ xlink:href="#linearGradient832-0-2"
+ inkscape:collect="always" /><filter
+ inkscape:collect="always"
+ id="filter5870"
+ x="-0.33653608"
+ width="1.6730722"
+ y="-0.38698104"
+ height="1.7739621"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="5.0910123"
+ id="feGaussianBlur5872" /></filter></defs><sodipodi:namedview
+ bordercolor="#666666"
+ borderopacity="1"
+ gridtolerance="10"
+ guidetolerance="10"
+ id="namedview6728"
+ inkscape:current-layer="Layer_1"
+ inkscape:cx="189.19492"
+ inkscape:cy="50"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-height="900"
+ inkscape:window-maximized="1"
+ inkscape:window-width="1200"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:zoom="1"
+ objecttolerance="10"
+ pagecolor="#ffffff"
+ showgrid="false" />
+<path
+ clip-rule="evenodd"
+ d="M 52.411409,6.3943857 C 76.192795,6.4402362 88.138955,18.139304 99.997135,41.501566 111.85531,18.13731 123.80147,6.4402327 147.57711,6.3943857 173.99025,6.3445563 195.45929,27.47424 195.50903,53.55745 c 0.063,47.25875 -47.72342,94.6052 -95.511895,141.95164 C 52.214413,148.16464 4.4259493,100.8162 4.4909783,53.55745 4.5311431,27.476235 25.998274,6.3445518 52.411409,6.3943857 z"
+ id="path6726"
+ inkscape:connector-curvature="0"
+ style="fill:#ff5555;fill-rule:evenodd;stroke:#ff0000;stroke-width:8.98182392;stroke-miterlimit:4;stroke-dasharray:none" />
+<path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:0.75584418;stroke:none;filter:url(#filter5870)"
+ id="path5350"
+ sodipodi:cx="55.720341"
+ sodipodi:cy="67.584747"
+ sodipodi:rx="20.550848"
+ sodipodi:ry="12.5"
+ d="m 76.271189,67.584747 a 20.550848,12.5 0 1 1 -41.101696,0 20.550848,12.5 0 1 1 41.101696,0 z"
+ transform="matrix(0.80661888,-0.59107189,0.59107189,0.80661888,-40.612861,19.733155)" /></svg> \ No newline at end of file
diff --git a/avatars/none.svg b/avatars/none.svg
new file mode 100755
index 0000000..c4f982a
--- /dev/null
+++ b/avatars/none.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#000000">
+ <!ENTITY fill_color "#cccccc">
+]><svg enable-background="new 0 0 100 100" height="103" id="Layer_1" inkscape:version="0.48.4 r9939" sodipodi:docname="none.svg" version="1.0" viewBox="0 0 103 103" width="103" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><metadata id="metadata7289"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/></cc:Work></rdf:RDF></metadata><defs id="defs7287"><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3012" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-6"><stop id="stop4458-9" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-6" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-6" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-9" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4479" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-0"><stop id="stop4458-1" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-4" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-5" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-3" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446"><stop id="stop4458" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3012-8" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6-9" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-6-9"><stop id="stop4458-9-3" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-6-4" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-6-9" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-9-5" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6-9" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4479-2" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0-6" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-0-6"><stop id="stop4458-1-7" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-4-6" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-5-0" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-3-3" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0-6" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-5" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-8" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-8"><stop id="stop4458-5" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-5" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-0" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient></defs><sodipodi:namedview bordercolor="#666666" borderopacity="1" gridtolerance="10" guidetolerance="10" id="namedview7285" inkscape:current-layer="Layer_1" inkscape:cx="78.309642" inkscape:cy="50" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="551" inkscape:window-maximized="1" inkscape:window-width="1024" inkscape:window-x="0" inkscape:window-y="0" inkscape:zoom="2.36" objecttolerance="10" pagecolor="#ffffff" showgrid="false"/><g id="g3021" style="fill:&fill_color;;stroke:&stroke_color;"><path clip-rule="evenodd" d="M 95.253871,99.263365 V 74.76721 c 0,-10.513461 -8.523077,-19.032692 -19.032692,-19.032692 H 26.906756 c -10.513462,0 -19.0355774,8.519231 -19.0355774,19.032692 V 99.263365 H 95.253871 z" id="path7281" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;"/><path clip-rule="evenodd" d="m 51.56541,3.1095175 c 13.451923,0 24.360577,10.9086545 24.360577,24.3644235 0,13.451923 -10.908654,24.360577 -24.360577,24.360577 -13.456731,0 -24.365385,-10.908654 -24.365385,-24.360577 0,-13.455769 10.908654,-24.3644235 24.365385,-24.3644235 z" id="path7283" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;"/><text id="text3017" sodipodi:linespacing="125%" style="font-size:128.69537353999999141px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:&stroke_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:1.27309834999999993;font-family:Sans" x="16.227858" xml:space="preserve" y="97.778702"><tspan id="tspan3019" sodipodi:role="line" style="stroke-width:1.27309834999999993;fill:&stroke_color;;stroke:&stroke_color;" x="16.227858" y="97.778702">?</tspan></text>
+</g></svg> \ No newline at end of file
diff --git a/avatars/pizza.svg b/avatars/pizza.svg
new file mode 100755
index 0000000..142c27b
--- /dev/null
+++ b/avatars/pizza.svg
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ x="0px"
+ y="0px"
+ width="200"
+ height="200"
+ viewBox="0 0 200 200"
+ enable-background="new 0 0 100 100"
+ xml:space="preserve"
+ id="svg13003"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="noun_project_1158.svg"><metadata
+ id="metadata13318"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs13316"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 50 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="100 : 50 : 1"
+ inkscape:persp3d-origin="50 : 33.333333 : 1"
+ id="perspective13320" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<inkscape:perspective
+ id="perspective14694"
+ inkscape:persp3d-origin="50 : 33.333333 : 1"
+ inkscape:vp_z="100 : 50 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 50 : 1"
+ sodipodi:type="inkscape:persp3d" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ </defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1200"
+ inkscape:window-height="808"
+ id="namedview13314"
+ showgrid="false"
+ inkscape:zoom="1.18"
+ inkscape:cx="78.668065"
+ inkscape:cy="83.898305"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg13003" />
+
+
+
+
+
+<path
+ sodipodi:type="arc"
+ style="fill:#a0c02c;fill-opacity:1;stroke:none"
+ id="path15285"
+ sodipodi:cx="80.932205"
+ sodipodi:cy="0.84745771"
+ sodipodi:rx="57.203388"
+ sodipodi:ry="53.389832"
+ d="m 138.13559,0.84745771 a 57.203388,53.389832 0 1 1 -114.406773,0 57.203388,53.389832 0 1 1 114.406773,0 z"
+ transform="matrix(0.36253195,0,0,0.3820106,66.056725,79.25802)" /><path
+ sodipodi:type="arc"
+ style="fill:#a0c02c;fill-opacity:1;stroke:none"
+ id="path15289"
+ sodipodi:cx="80.932205"
+ sodipodi:cy="0.84745771"
+ sodipodi:rx="57.203388"
+ sodipodi:ry="53.389832"
+ d="m 138.13559,0.84745771 a 57.203388,53.389832 0 1 1 -114.406773,0 57.203388,53.389832 0 1 1 114.406773,0 z"
+ transform="matrix(0.36253195,0,0,0.3820106,33.853335,130.10548)" /><path
+ transform="matrix(0.36253195,0,0,0.3820106,75.378759,115.6987)"
+ d="m 138.13559,0.84745771 a 57.203388,53.389832 0 1 1 -114.406773,0 57.203388,53.389832 0 1 1 114.406773,0 z"
+ sodipodi:ry="53.389832"
+ sodipodi:rx="57.203388"
+ sodipodi:cy="0.84745771"
+ sodipodi:cx="80.932205"
+ id="path15287"
+ style="fill:#a0c02c;fill-opacity:1;stroke:none"
+ sodipodi:type="arc" /><g
+ id="g15276"
+ transform="matrix(2.0093695,0,0,2.0093695,0.06750421,-1.1061178)"><g
+ id="BG">
+</g><g
+ id="B001">
+</g><path
+ style="fill:#ff9955"
+ sodipodi:nodetypes="cssccscccsscccsssccsssccsssc"
+ d="m 4.6589944,90.856839 c 0,0 1.6693927,3.053398 4.4499425,1.957735 C 27.365006,85.622571 45.480606,78.103709 63.645118,70.720655 75.410726,65.938646 87.177587,61.157787 98.948211,56.383834 97.845774,55.03037 97.217421,53.978443 96.966582,53.51808 96.86875,53.475496 96.765911,53.438666 96.670592,53.396085 87.176333,49.152699 81.519912,41.315037 80.049995,38.956834 69.030912,32.885074 56.592091,21.513807 47.029536,12.739222 c 0.416909,0.05917 1.558256,1.230103 -3.230807,-1.773545 C 34.482566,26.100075 25.109963,41.208003 15.68343,56.284856 11.081787,63.646043 6.4211953,70.999174 1.9688029,78.437471 -1.2293955,83.781123 1.753564,80.220143 0.29869734,86.470709 -0.78247381,94.619665 0.8015095,96.518404 4.6589944,90.856839 z M 31.348331,55.764646 c 4.804822,-0.33146 9.020174,3.312305 9.4165,8.136897 0.395071,4.825745 -3.180641,9.005831 -7.985462,9.337292 -4.804824,0.33146 -9.020174,-3.311152 -9.415246,-8.136897 -0.395072,-4.824593 3.179385,-9.00583 7.984208,-9.337292 z m 29.40712,2.042857 c 0.395072,4.825743 -3.179384,9.005831 -7.984207,9.337291 -4.804823,0.33146 -9.018921,-3.311154 -9.415245,-8.136898 -0.395072,-4.825743 3.179385,-9.006981 7.984208,-9.338442 4.804823,-0.331459 9.018919,3.312305 9.415244,8.138049 z M 56.666775,38.514886 c 0.395071,4.825743 -3.179386,9.00583 -7.984208,9.33729 -4.804823,0.331461 -9.021428,-3.312304 -9.4165,-8.136897 -0.395072,-4.825744 3.18064,-9.00583 7.984209,-9.33729 4.806076,-0.331461 9.021427,3.312303 9.416499,8.136897 z"
+ id="path13128" /><g
+ id="B003">
+</g><g
+ id="TEXT_and_line">
+</g><path
+ style="fill:#a05a2c"
+ sodipodi:nodetypes="cccscccssssssssscc"
+ id="path13984"
+ d="m 43.908747,15.176 c 1.55,1.735 7.08,6.943 12.665,9.448 0.854,2.278 5.607,11.144 15.25,14.125 1.203,2.102 5.348,8.734 13.236,12.311 0.014,0.006 0.028,0.012 0.042,0.019 l 0.339,0.151 0.199,0.362 c 0.878,1.537 3.684,5.65 9.864,8.443 4.095,1.851 3.989,-6.102 3.996,-8.25 0.014,-4.478 -0.356,-9.286 -3.394,-12.839 -2.995,-3.504 -7.67,-5.222 -11.368,-7.828 -5.147,-3.627 -10.22,-7.389 -15.307,-11.103 -6.567,-4.793 -13.204,-9.498 -19.8,-14.2489999 -0.515,-0.371 -1.13,-0.566 -1.754,-0.566 -0.213,0 -0.427,0.022 -0.639,0.069 -0.832,0.181 -1.547,0.708 -1.969,1.448 -1.513,2.66 -3.031,5.3159999 -4.54,7.9809999 l 3.18,0.478 z" /><path
+ style="fill:#a05a2c"
+ sodipodi:nodetypes="cccsscc"
+ d="m 4.1296713,95.107504 c 0.3685131,0 0.7390951,-0.06534 1.0931674,-0.20011 L 96.106286,60.450269 C 95.061639,59.841647 94.11609,59.207108 93.268602,58.562189 92.40976,57.907954 84.015406,62.033511 83.118368,62.370491 67.673661,68.164322 52.231023,73.961266 36.784248,79.748871 20.519936,86.47353 -7.6956957,92.948599 4.1296713,95.107504 z"
+ id="path14502" /></g></svg> \ No newline at end of file
diff --git a/avatars/sun.svg b/avatars/sun.svg
new file mode 100755
index 0000000..897efb2
--- /dev/null
+++ b/avatars/sun.svg
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="200"
+ height="200"
+ viewBox="0 0 200 200"
+ enable-background="new 0 0 100 100"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="noun_project_1029.svg"><metadata
+ id="metadata6880"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs6878"><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7691"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7693" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7695" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7681"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7683" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7685" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7673"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7675" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7677" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7665"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7667" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7669" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7655"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7657" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7659" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7647"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7649" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7651" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7394"><stop
+ style="stop-color:#ffff00;stop-opacity:1;"
+ offset="0"
+ id="stop7396" /><stop
+ style="stop-color:#ffff00;stop-opacity:0;"
+ offset="1"
+ id="stop7398" /></linearGradient><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 50 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="100 : 50 : 1"
+ inkscape:persp3d-origin="50 : 33.333333 : 1"
+ id="perspective6882" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7394"
+ id="linearGradient7420"
+ x1="9.9460001"
+ y1="19.9725"
+ x2="29.999001"
+ y2="19.9725"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7394"
+ id="linearGradient7422"
+ x1="46.692001"
+ y1="11.844"
+ x2="53.307999"
+ y2="11.844"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7394"
+ id="linearGradient7424"
+ x1="70.002747"
+ y1="19.9715"
+ x2="90.055252"
+ y2="19.9715"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7394"
+ id="linearGradient7426"
+ x1="76.310997"
+ y1="50"
+ x2="100"
+ y2="50"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7394"
+ id="linearGradient7428"
+ x1="70.001999"
+ y1="80.027496"
+ x2="90.055252"
+ y2="80.027496"
+ gradientUnits="userSpaceOnUse" /><inkscape:perspective
+ id="perspective7538"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7494"
+ id="linearGradient7500"
+ x1="0"
+ y1="50"
+ x2="23.688999"
+ y2="50"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7494"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7496" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7498" /></linearGradient><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7494"
+ id="linearGradient7546"
+ x1="0"
+ y1="50"
+ x2="23.688999"
+ y2="50"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ y2="50"
+ x2="23.688999"
+ y1="50"
+ x1="0"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient7556"
+ xlink:href="#linearGradient7494"
+ inkscape:collect="always" /><linearGradient
+ y2="50"
+ x2="23.688999"
+ y1="50"
+ x1="0"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient7558"
+ xlink:href="#linearGradient7494"
+ inkscape:collect="always" /><inkscape:perspective
+ id="perspective7599"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><linearGradient
+ y2="50"
+ x2="23.688999"
+ y1="50"
+ x1="0"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient7558-8"
+ xlink:href="#linearGradient7494-5"
+ inkscape:collect="always" /><linearGradient
+ inkscape:collect="always"
+ id="linearGradient7494-5"><stop
+ style="stop-color:#ff7f2a;stop-opacity:1;"
+ offset="0"
+ id="stop7496-8" /><stop
+ style="stop-color:#ff7f2a;stop-opacity:0;"
+ offset="1"
+ id="stop7498-7" /></linearGradient><linearGradient
+ y2="50"
+ x2="23.688999"
+ y1="50"
+ x1="0"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient7556-8"
+ xlink:href="#linearGradient7494-5"
+ inkscape:collect="always" /><linearGradient
+ y2="50"
+ x2="23.688999"
+ y1="50"
+ x1="0"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient7616"
+ xlink:href="#linearGradient7494-5"
+ inkscape:collect="always" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7647"
+ id="linearGradient7653"
+ x1="9.9460001"
+ y1="80.027496"
+ x2="29.999001"
+ y2="80.027496"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7655"
+ id="linearGradient7661"
+ x1="46.692001"
+ y1="88.155502"
+ x2="53.307999"
+ y2="88.155502"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7655"
+ id="linearGradient7663"
+ gradientUnits="userSpaceOnUse"
+ x1="50"
+ y1="100"
+ x2="50"
+ y2="76.310997" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7665"
+ id="linearGradient7671"
+ x1="90.055252"
+ y1="90.054001"
+ x2="70.001999"
+ y2="70.000999"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7673"
+ id="linearGradient7679"
+ x1="100"
+ y1="50"
+ x2="76.310997"
+ y2="50"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7681"
+ id="linearGradient7687"
+ x1="50"
+ y1="0"
+ x2="50"
+ y2="19.9715"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7681"
+ id="linearGradient7689"
+ x1="90.055252"
+ y1="9.9449997"
+ x2="70.002747"
+ y2="29.997999"
+ gradientUnits="userSpaceOnUse" /><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7691"
+ id="linearGradient7697"
+ x1="9.9460001"
+ y1="9.9460001"
+ x2="29.999001"
+ y2="29.999001"
+ gradientUnits="userSpaceOnUse" /><filter
+ inkscape:collect="always"
+ id="filter7715"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7717" /></filter><filter
+ inkscape:collect="always"
+ id="filter7719"
+ x="-0.28048217"
+ width="1.5609643"
+ y="-0.078334674"
+ height="1.1566693"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7721" /></filter><filter
+ inkscape:collect="always"
+ id="filter7723"
+ x="-0.28048217"
+ width="1.5609643"
+ y="-0.078337982"
+ height="1.1566761"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7725" /></filter><filter
+ inkscape:collect="always"
+ id="filter7727"
+ x="-0.078334674"
+ width="1.1566693"
+ y="-0.28048217"
+ height="1.5609643"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7729" /></filter><filter
+ inkscape:collect="always"
+ id="filter7731"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7733" /></filter><filter
+ inkscape:collect="always"
+ id="filter7735"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7737" /></filter><filter
+ inkscape:collect="always"
+ id="filter7739"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7741" /></filter><filter
+ inkscape:collect="always"
+ id="filter7743"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7745" /></filter><filter
+ inkscape:collect="always"
+ id="filter7747"
+ x="-0.078334674"
+ width="1.1566693"
+ y="-0.28048217"
+ height="1.5609643"
+ color-interpolation-filters="sRGB"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.77319588"
+ id="feGaussianBlur7749" /></filter><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7647"
+ id="linearGradient7751"
+ gradientUnits="userSpaceOnUse"
+ x1="9.9460001"
+ y1="80.027496"
+ x2="29.999001"
+ y2="80.027496" /></defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1200"
+ inkscape:window-height="808"
+ id="namedview6876"
+ showgrid="false"
+ inkscape:zoom="5.515"
+ inkscape:cx="100"
+ inkscape:cy="50"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g6840"
+ style="fill:#ffff00;filter:url(#filter7715)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <circle
+ cx="50"
+ cy="50"
+ r="23.896"
+ id="circle6842"
+ style="fill:#ffff00"
+ sodipodi:cx="50"
+ sodipodi:cy="50"
+ sodipodi:rx="23.896"
+ sodipodi:ry="23.896"
+ d="M 73.896,50 C 73.896,63.197396 63.197396,73.896 50,73.896 36.802604,73.896 26.104,63.197396 26.104,50 26.104,36.802604 36.802604,26.104 50,26.104 63.197396,26.104 73.896,36.802604 73.896,50 z" />
+</g>
+<g
+ id="g6844"
+ style="fill:url(#linearGradient7661);fill-opacity:1;filter:url(#filter7719)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <path
+ d="m 50,100 c -1.827,0 -3.308,-1.481 -3.308,-3.308 V 79.619 c 0,-1.827 1.48,-3.308 3.308,-3.308 1.828,0 3.308,1.48 3.308,3.308 V 96.692 C 53.308,98.519 51.827,100 50,100 z"
+ id="path6846"
+ style="fill:url(#linearGradient7663);fill-opacity:1" />
+</g>
+<g
+ id="g6848"
+ style="fill:#ff7f2a;fill-opacity:1;filter:url(#filter7723)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <path
+ d="m 50,23.688 c -1.827,0 -3.308,-1.481 -3.308,-3.308 V 3.308 C 46.692,1.481 48.173,0 50,0 c 1.827,0 3.308,1.481 3.308,3.308 v 17.073 c 0,1.827 -1.481,3.307 -3.308,3.307 z"
+ id="path6850"
+ style="fill:url(#linearGradient7687);fill-opacity:1" />
+</g>
+
+<g
+ id="g6856"
+ style="fill:#ff7f2a;fill-opacity:1;filter:url(#filter7727)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <path
+ d="M 96.692,53.308 H 79.619 c -1.827,0 -3.308,-1.481 -3.308,-3.308 0,-1.827 1.48,-3.308 3.308,-3.308 h 17.073 c 1.826,0 3.308,1.48 3.308,3.308 0,1.827 -1.481,3.308 -3.308,3.308 z"
+ id="path6858"
+ style="fill:url(#linearGradient7679);fill-opacity:1" />
+</g>
+<g
+ id="g6860"
+ style="fill:url(#linearGradient7653);fill-opacity:1;filter:url(#filter7731)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <path
+ d="m 13.254,90.054 c -0.847,0 -1.693,-0.323 -2.339,-0.969 -1.292,-1.292 -1.292,-3.386 0,-4.678 L 24.352,70.97 c 1.292,-1.292 3.386,-1.292 4.678,0 1.292,1.292 1.292,3.386 0,4.678 L 15.593,89.085 c -0.646,0.646 -1.492,0.969 -2.339,0.969 z"
+ id="path6862"
+ style="fill:url(#linearGradient7751);fill-opacity:1" />
+</g>
+<g
+ id="g6864"
+ style="fill:#ff7f2a;fill-opacity:1;filter:url(#filter7735)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <path
+ d="m 73.311,29.998 c -0.847,0 -1.693,-0.323 -2.34,-0.969 -1.291,-1.292 -1.291,-3.386 0,-4.678 L 84.408,10.914 c 1.292,-1.292 3.386,-1.292 4.679,0 1.291,1.292 1.291,3.386 0,4.678 L 75.649,29.029 c -0.646,0.646 -1.492,0.969 -2.338,0.969 z"
+ id="path6866"
+ style="fill:url(#linearGradient7689);fill-opacity:1" />
+</g>
+<g
+ id="g6868"
+ style="fill:#ff7f2a;fill-opacity:1;filter:url(#filter7739)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <path
+ d="m 26.69,29.999 c -0.847,0 -1.692,-0.323 -2.339,-0.969 L 10.915,15.593 c -1.292,-1.292 -1.292,-3.386 0,-4.678 1.293,-1.292 3.387,-1.292 4.678,0 L 29.03,24.352 c 1.292,1.292 1.292,3.386 0,4.678 -0.646,0.646 -1.493,0.969 -2.34,0.969 z"
+ id="path6870"
+ style="fill:url(#linearGradient7697);fill-opacity:1" />
+</g>
+<g
+ id="g6872"
+ style="fill:#ff7f2a;fill-opacity:1;filter:url(#filter7743)"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)">
+ <path
+ d="m 86.746,90.054 c -0.847,0 -1.692,-0.323 -2.339,-0.969 L 70.971,75.648 c -1.292,-1.292 -1.292,-3.386 0,-4.678 1.292,-1.292 3.386,-1.292 4.678,0 l 13.438,13.437 c 1.291,1.292 1.291,3.386 0,4.678 -0.648,0.646 -1.494,0.969 -2.341,0.969 z"
+ id="path6874"
+ style="fill:url(#linearGradient7671);fill-opacity:1" />
+</g>
+<g
+ style="fill:url(#linearGradient7558);fill-opacity:1;filter:url(#filter7747)"
+ id="g7526"
+ transform="matrix(1.966998,0,0,1.966998,-0.20557072,3.5057696)"><path
+ style="fill:url(#linearGradient7556);fill-opacity:1"
+ id="path7528"
+ d="M 20.381,53.308 H 3.308 C 1.481,53.308 0,51.827 0,50 0,48.173 1.481,46.692 3.308,46.692 h 17.073 c 1.827,0 3.308,1.48 3.308,3.308 -0.001,1.827 -1.481,3.308 -3.308,3.308 z" /></g></svg> \ No newline at end of file
diff --git a/icons/open-from-journal.svg b/icons/open-from-journal.svg
new file mode 100755
index 0000000..befd9d1
--- /dev/null
+++ b/icons/open-from-journal.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ enable-background="new 0 0 55 55"
+ height="55px"
+ id="Layer_1"
+ version="1.1"
+ viewBox="0 0 55 55"
+ width="55px"
+ x="0px"
+ xml:space="preserve"
+ y="0px"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="open-from-journal.svg"><metadata
+ id="metadata36"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs34" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="640"
+ inkscape:window-height="480"
+ id="namedview32"
+ showgrid="false"
+ inkscape:zoom="4.2909091"
+ inkscape:cx="27.5"
+ inkscape:cy="42.782185"
+ inkscape:window-x="0"
+ inkscape:window-y="26"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="g4" />
+<g
+ display="block"
+ id="document-save">
+ <g
+ id="g4">
+ <g
+ id="g6">
+ <g
+ id="g8">
+ <path
+ d="M6.736,49.002 h24.52c2.225,0,3.439-1.447,3.439-3.441V18.281c0-1.73-1.732-3.441-3.439-3.441h-4.389"
+ id="path10"
+ stroke-linejoin="round"
+ stroke-linecap="round"
+ stroke-width="3.5"
+ stroke="#010101"
+ fill="#FFFFFF" />
+ </g>
+ </g>
+ <g
+ id="g12">
+ <g
+ id="g14">
+ <path
+ d="M26.867,38.592 c0,1.836-1.345,3.201-3.441,4.047l-16.69,6.363V14.84l16.69-8.599c2.228-0.394,3.441,0.84,3.441,2.834V38.592z"
+ fill="#FFFFFF"
+ stroke="#010101"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="3.5"
+ id="path16" />
+ </g>
+ </g>
+ <path
+ d="M9.424,42.607 c0,0-1.351-0.543-2.702-0.543s-2.703,0.543-2.703,0.543"
+ fill="none"
+ stroke="#010101"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ id="path18" />
+ <path
+ d="M9.424,32.006 c0,0-1.239-0.543-2.815-0.543c-1.577,0-2.59,0.543-2.59,0.543"
+ fill="none"
+ stroke="#010101"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ id="path20" />
+ <path
+ d="M9.424,21.678 c0,0-1.125-0.544-2.927-0.544c-1.802,0-2.478,0.544-2.478,0.544"
+ fill="none"
+ stroke="#010101"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ id="path22" />
+
+ <line
+ fill="none"
+ stroke="#010101"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ x1="13.209"
+ x2="13.209"
+ y1="46.533"
+ y2="11.505"
+ id="line24" />
+
+ <g
+ id="g26"
+ transform="matrix(-0.9995945,-0.02847492,0.02847492,-0.9995945,93.291195,22.433532)">
+ <line
+ x1="41.169998"
+ x2="52.441002"
+ y1="16.188"
+ y2="4.9169998"
+ id="line28"
+ style="fill:none;stroke:#ffffff;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round" />
+ <polyline
+ points=" 51.562,15.306 41.17,16.188 42.053,5.794 "
+ id="polyline30"
+ style="fill:none;stroke:#ffffff;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round" />
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/icons/pcman.svg b/icons/pcman.svg
new file mode 100755
index 0000000..a8bbe63
--- /dev/null
+++ b/icons/pcman.svg
@@ -0,0 +1,405 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="600"
+ height="600"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="malo.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4139">
+ <stop
+ style="stop-color:#666666;stop-opacity:1;"
+ offset="0"
+ id="stop4141" />
+ <stop
+ style="stop-color:#666666;stop-opacity:0;"
+ offset="1"
+ id="stop4143" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4123">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4125" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4127" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3871">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3873" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0.47484276;"
+ offset="1"
+ id="stop3875" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3781">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3783" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3785" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3769">
+ <stop
+ style="stop-color:#ff3000;stop-opacity:0.36477986;"
+ offset="0"
+ id="stop3771" />
+ <stop
+ style="stop-color:#ff0c00;stop-opacity:0.60691822;"
+ offset="1"
+ id="stop3773" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ id="filter3825"
+ x="-0.33931661"
+ width="1.6786332"
+ y="-0.34963802"
+ height="1.699276"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="14.480161"
+ id="feGaussianBlur3827" />
+ </filter>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3769"
+ id="radialGradient3837"
+ cx="346.90567"
+ cy="884.28613"
+ fx="346.90567"
+ fy="884.28613"
+ r="193.36359"
+ gradientTransform="matrix(0.92005935,1.2906722,-1.7216332,1.2272711,1434.1837,-664.3927)"
+ gradientUnits="userSpaceOnUse" />
+ <filter
+ inkscape:collect="always"
+ id="filter3865"
+ x="-0.75199997"
+ width="2.5039999"
+ y="-0.35249999"
+ height="1.705"
+ color-interpolation-filters="sRGB">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="13.293607"
+ id="feGaussianBlur3867" />
+ </filter>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3769"
+ id="radialGradient4083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.92005935,1.2906722,-1.7216332,1.2272711,1434.1837,-664.3927)"
+ cx="346.90567"
+ cy="884.28613"
+ fx="346.90567"
+ fy="884.28613"
+ r="193.36359" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3769"
+ id="radialGradient4085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.92005935,1.2906722,-1.7216332,1.2272711,1434.1837,-664.3927)"
+ cx="346.90567"
+ cy="884.28613"
+ fx="346.90567"
+ fy="884.28613"
+ r="193.36359" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4123"
+ id="radialGradient4129"
+ cx="541.6438"
+ cy="535.4671"
+ fx="541.6438"
+ fy="535.4671"
+ r="18.384777"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4139"
+ id="radialGradient4145"
+ cx="584.28571"
+ cy="536.64789"
+ fx="584.28571"
+ fy="536.64789"
+ r="44.285713"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4139"
+ id="radialGradient4201"
+ gradientUnits="userSpaceOnUse"
+ cx="584.28571"
+ cy="536.64789"
+ fx="584.28571"
+ fy="536.64789"
+ r="44.285713" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4123"
+ id="radialGradient4203"
+ gradientUnits="userSpaceOnUse"
+ cx="541.6438"
+ cy="535.4671"
+ fx="541.6438"
+ fy="535.4671"
+ r="18.384777" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3769"
+ id="radialGradient4205"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.92005935,1.2906722,-1.7216332,1.2272711,1434.1837,-664.3927)"
+ cx="346.90567"
+ cy="884.28613"
+ fx="346.90567"
+ fy="884.28613"
+ r="193.36359" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3871"
+ id="radialGradient4209"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4492163,0,0,0.34469851,-237.95187,738.5194)"
+ cx="375"
+ cy="708.36218"
+ fx="375"
+ fy="708.36218"
+ r="195.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3769"
+ id="radialGradient4213"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.91815365,-1.121259,1.2205774,0.99948138,-775.91411,458.26729)"
+ cx="350.77316"
+ cy="544.94397"
+ fx="350.77316"
+ fy="544.94397"
+ r="193.36359" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35355339"
+ inkscape:cx="479.94664"
+ inkscape:cy="515.21341"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1024"
+ inkscape:window-height="551"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Capa 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-452.36218)">
+ <path
+ style="fill:url(#radialGradient4209);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 290.92151,913.23755 c -72.91248,1.46828 -146.84921,6.55798 -216.79371,28.07857 -18.901156,7.19025 -41.315817,14.02809 -51.990627,32.51679 -6.921606,13.36707 4.254567,26.85799 15.171475,33.46779 34.331379,20.757 74.959542,27.4163 114.026752,34.1948 96.07018,13.8531 194.34519,14.2172 290.65504,2.4846 43.2508,-6.3051 87.78147,-13.0278 126.72772,-33.5998 11.9858,-6.6408 26.49255,-18.9352 21.05892,-34.41885 -8.43002,-18.27916 -29.29827,-25.44655 -46.70264,-32.45445 -63.45133,-21.36702 -131.05506,-26.82851 -197.67065,-29.72931 -18.15383,-0.56181 -36.32059,-0.80038 -54.48228,-0.54014 z"
+ id="path3869"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g2989"
+ transform="matrix(1.4492163,0,0,1.4492163,-167.56136,-192.94148)"
+ style="fill:url(#radialGradient4205);fill-opacity:1;stroke:none">
+ <path
+ id="path3889"
+ transform="translate(17.142857,-211.42857)"
+ style="fill:url(#radialGradient4083);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 500,850.93359 c 0,61.62802 -5.39657,104.4956 -15.15567,134.13121 -9.7591,29.6356 -23.88074,46.0393 -41.33088,54.7394 -17.45014,8.7002 -46.80021,-70.30322 -69.87332,-71.48164 -23.07311,-1.17841 -39.86927,75.46814 -66.49728,75.46814 -26.62802,0 -48.95988,-76.64655 -71.80978,-75.46814 -22.84989,1.17841 -46.21782,80.18184 -63.48939,71.48164 -34.54313,-17.4003 -56.1294,-65.61456 -57.55797,-188.87061 -1.23442,-106.50491 86.34508,-192.85714 192.85714,-192.85714 53.25603,0 101.47032,21.58627 136.3706,56.48655 17.45014,17.45014 31.57178,38.22878 41.33088,61.30189 C 494.60343,798.938 500,824.30557 500,850.93359 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssssssssssss" />
+ </g>
+ <path
+ style="fill:url(#radialGradient4213);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 295.1107,452.47025 c -84.161,1.59471 -166.13068,43.3876 -216.960565,110.2622 -39.757028,51.06029 -60.153853,116.62021 -57.076755,181.41475 1.583412,60.59341 4.638604,122.14793 22.279436,180.39498 10.100579,32.6513 27.547201,65.87077 58.473634,82.89592 5.35664,4.2837 13.10157,3.7903 18.06714,-0.8057 15.83564,-14.17108 24.52378,-34.47447 35.57248,-52.2066 10.25502,-16.33057 19.05352,-34.88639 35.3325,-45.96958 8.79476,-6.09517 19.40537,0.17783 25.50472,7.12768 24.87592,27.24645 37.84855,64.22635 64.55204,89.8089 8.29188,7.9879 21.11799,13.2623 32.07459,7.4066 17.23914,-9.4693 26.3553,-28.17682 36.11914,-44.40829 11.5092,-19.39978 20.21698,-41.21033 36.67623,-57.02184 6.16757,-6.36766 16.39019,-7.18826 23.18047,-1.45653 18.52192,13.923 29.86706,35.16951 42.99625,53.96282 11.02833,15.54443 20.28143,33.41346 36.24503,44.27534 5.43275,3.8044 12.50711,2.4631 17.57129,-1.3635 31.0054,-17.44846 48.2386,-51.1322 58.04416,-84.16878 16.77573,-57.69526 19.21315,-118.47105 20.06475,-178.28495 C 586.2652,676.77564 563.87409,608.85021 521.11617,556.6624 470.44426,493.4927 391.44503,454.16095 310.29676,452.4863 c -5.05982,-0.15828 -10.12598,-0.16683 -15.18606,-0.0161 z"
+ id="path2999"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffffff;fill-rule:evenodd;stroke:none;filter:url(#filter3825)"
+ d="M 22.03125,541.28125 C 14.044236,543.16201 11.959441,552.77843 9.6315289,559.46152 1.9991877,590.35287 2.0865277,623.05246 7.0625,654.375 c 2.3883359,9.86564 3.697191,21.65388 11.96875,28.40625 6.513553,3.85118 12.039669,-3.96869 13.875,-9.34375 9.021151,-24.50718 9.161558,-51.39917 8.228557,-77.24668 -1.533606,-17.00684 -2.51589,-35.22098 -11.259807,-50.22207 -1.766939,-2.57877 -4.503868,-5.02084 -7.84375,-4.6875 z"
+ id="path3799"
+ inkscape:connector-curvature="0"
+ transform="matrix(1.0072755,1.0419327,-1.0419327,1.0072755,795.58172,-50.886483)" />
+ <path
+ style="fill:#ffffff;fill-rule:evenodd;stroke:none;filter:url(#filter3865)"
+ d="m 764.40625,620.46875 c -11.66082,1.40607 -16.82841,14.35283 -19.65996,24.21728 -4.8387,20.3461 -4.32469,43.53687 6.84746,61.72022 4.06722,6.99245 13.81664,11.52411 20.9375,6.15625 11.61647,-8.97662 14.37007,-25.01495 15.58596,-38.84225 0.62112,-16.79185 -1.13814,-35.58503 -12.77346,-48.564 -2.83118,-2.8976 -6.78674,-4.97471 -10.9375,-4.6875 z"
+ id="path3863"
+ inkscape:connector-curvature="0"
+ transform="matrix(1.303577,0.63317853,-0.63317853,1.303577,-52.169115,-414.67869)" />
+ <g
+ id="g4175"
+ transform="matrix(1.4492163,0,0,1.4492163,-237.95187,-43.879247)">
+ <g
+ id="g4168">
+ <path
+ sodipodi:open="true"
+ sodipodi:end="6.2227444"
+ sodipodi:start="0"
+ transform="translate(-94.285711,-51.428571)"
+ d="m 628.57142,536.64789 c 0,24.45832 -19.82739,44.28571 -44.28571,44.28571 -24.45833,0 -44.28572,-19.82739 -44.28572,-44.28571 0,-24.45833 19.82739,-44.28572 44.28572,-44.28572 23.41944,0 42.79021,18.234 44.20484,41.61068"
+ sodipodi:ry="44.285713"
+ sodipodi:rx="44.285713"
+ sodipodi:cy="536.64789"
+ sodipodi:cx="584.28571"
+ id="path3779"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ sodipodi:type="arc" />
+ <g
+ id="g4147">
+ <path
+ sodipodi:open="true"
+ sodipodi:end="6.2227444"
+ sodipodi:start="0"
+ transform="matrix(1.3113551,0,0,1.3113551,-270.19563,-213.92043)"
+ d="m 628.57142,536.64789 c 0,24.45832 -19.82739,44.28571 -44.28571,44.28571 -24.45833,0 -44.28572,-19.82739 -44.28572,-44.28571 0,-24.45833 19.82739,-44.28572 44.28572,-44.28572 23.41944,0 42.79021,18.234 44.20484,41.61068"
+ sodipodi:ry="44.285713"
+ sodipodi:rx="44.285713"
+ sodipodi:cy="536.64789"
+ sodipodi:cx="584.28571"
+ id="path4109"
+ style="fill:url(#radialGradient4145);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:open="true"
+ sodipodi:end="6.2227444"
+ sodipodi:start="0"
+ transform="matrix(0.58064515,0,0,0.58064515,160.73733,175.04589)"
+ d="m 628.57142,536.64789 c 0,24.45832 -19.82739,44.28571 -44.28571,44.28571 -24.45833,0 -44.28572,-19.82739 -44.28572,-44.28571 0,-24.45833 19.82739,-44.28572 44.28572,-44.28572 23.41944,0 42.79021,18.234 44.20484,41.61068"
+ sodipodi:ry="44.285713"
+ sodipodi:rx="44.285713"
+ sodipodi:cy="536.64789"
+ sodipodi:cx="584.28571"
+ id="path3793"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.2884615,0,0,1.2884615,-219.52946,-221.99036)"
+ sodipodi:open="true"
+ sodipodi:end="6.2227444"
+ sodipodi:start="0"
+ d="m 560.02858,535.4671 c 0,10.15363 -8.23115,18.38478 -18.38478,18.38478 -10.15363,0 -18.38478,-8.23115 -18.38478,-18.38478 0,-10.15363 8.23115,-18.38478 18.38478,-18.38478 9.72235,0 17.76394,7.56967 18.35121,17.27427"
+ sodipodi:ry="18.384777"
+ sodipodi:rx="18.384777"
+ sodipodi:cy="535.4671"
+ sodipodi:cx="541.6438"
+ id="path4121"
+ style="fill:url(#radialGradient4129);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g4187"
+ transform="matrix(1.4492163,0,0,1.4492163,-381.42429,-43.878711)">
+ <g
+ id="g4189">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path4191"
+ sodipodi:cx="584.28571"
+ sodipodi:cy="536.64789"
+ sodipodi:rx="44.285713"
+ sodipodi:ry="44.285713"
+ d="m 628.57142,536.64789 c 0,24.45832 -19.82739,44.28571 -44.28571,44.28571 -24.45833,0 -44.28572,-19.82739 -44.28572,-44.28571 0,-24.45833 19.82739,-44.28572 44.28572,-44.28572 23.41944,0 42.79021,18.234 44.20484,41.61068"
+ transform="translate(-94.285711,-51.428571)"
+ sodipodi:start="0"
+ sodipodi:end="6.2227444"
+ sodipodi:open="true" />
+ <g
+ id="g4193">
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient4201);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path4195"
+ sodipodi:cx="584.28571"
+ sodipodi:cy="536.64789"
+ sodipodi:rx="44.285713"
+ sodipodi:ry="44.285713"
+ d="m 628.57142,536.64789 c 0,24.45832 -19.82739,44.28571 -44.28571,44.28571 -24.45833,0 -44.28572,-19.82739 -44.28572,-44.28571 0,-24.45833 19.82739,-44.28572 44.28572,-44.28572 23.41944,0 42.79021,18.234 44.20484,41.61068"
+ transform="matrix(1.3113551,0,0,1.3113551,-270.19563,-213.92043)"
+ sodipodi:start="0"
+ sodipodi:end="6.2227444"
+ sodipodi:open="true" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path4197"
+ sodipodi:cx="584.28571"
+ sodipodi:cy="536.64789"
+ sodipodi:rx="44.285713"
+ sodipodi:ry="44.285713"
+ d="m 628.57142,536.64789 c 0,24.45832 -19.82739,44.28571 -44.28571,44.28571 -24.45833,0 -44.28572,-19.82739 -44.28572,-44.28571 0,-24.45833 19.82739,-44.28572 44.28572,-44.28572 23.41944,0 42.79021,18.234 44.20484,41.61068"
+ transform="matrix(0.58064515,0,0,0.58064515,160.73733,175.04589)"
+ sodipodi:start="0"
+ sodipodi:end="6.2227444"
+ sodipodi:open="true" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient4203);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="path4199"
+ sodipodi:cx="541.6438"
+ sodipodi:cy="535.4671"
+ sodipodi:rx="18.384777"
+ sodipodi:ry="18.384777"
+ d="m 560.02858,535.4671 c 0,10.15363 -8.23115,18.38478 -18.38478,18.38478 -10.15363,0 -18.38478,-8.23115 -18.38478,-18.38478 0,-10.15363 8.23115,-18.38478 18.38478,-18.38478 9.72235,0 17.76394,7.56967 18.35121,17.27427"
+ sodipodi:start="0"
+ sodipodi:end="6.2227444"
+ sodipodi:open="true"
+ transform="matrix(1.2884615,0,0,1.2884615,-219.52946,-221.99036)" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/icons/user.svg b/icons/user.svg
new file mode 100755
index 0000000..80fbb24
--- /dev/null
+++ b/icons/user.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#000000">
+ <!ENTITY fill_color "#cccccc">
+]><svg enable-background="new 0 0 100 100" height="103" id="Layer_1" inkscape:version="0.48.4 r9939" sodipodi:docname="user.svg" version="1.0" viewBox="0 0 103 103" width="103" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><metadata id="metadata7289"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/></cc:Work></rdf:RDF></metadata><defs id="defs7287"><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3012" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-6"><stop id="stop4458-9" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-6" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-6" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-9" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4479" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-0"><stop id="stop4458-1" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-4" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-5" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-3" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446"><stop id="stop4458" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient3012-8" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6-9" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-6-9"><stop id="stop4458-9-3" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-6-4" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-6-9" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-9-5" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-6-9" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4479-2" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0-6" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-0-6"><stop id="stop4458-1-7" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-4-6" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-5-0" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-3-3" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-0-6" y1="136.78104" y2="-7.2029276"/><linearGradient gradientUnits="userSpaceOnUse" id="linearGradient4454-5" inkscape:collect="always" x1="147.14549" x2="64.077477" xlink:href="#linearGradient4446-8" y1="136.78104" y2="-7.2029276"/><linearGradient id="linearGradient4446-8"><stop id="stop4458-5" offset="0" style="stop-color:#0045f3;stop-opacity:1;"/><stop id="stop4460-5" offset="0.5" style="stop-color:#008ded;stop-opacity:0.74901961;"/><stop id="stop4456-0" offset="1" style="stop-color:#00d5e7;stop-opacity:0.49803922;"/></linearGradient></defs><sodipodi:namedview bordercolor="#666666" borderopacity="1" gridtolerance="10" guidetolerance="10" id="namedview7285" inkscape:current-layer="Layer_1" inkscape:cx="78.309642" inkscape:cy="50" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="551" inkscape:window-maximized="1" inkscape:window-width="1024" inkscape:window-x="0" inkscape:window-y="0" inkscape:zoom="2.36" objecttolerance="10" pagecolor="#ffffff" showgrid="false"/><path clip-rule="evenodd" d="M 95.253871,99.263365 V 74.76721 c 0,-10.513461 -8.523077,-19.032692 -19.032692,-19.032692 H 26.906756 c -10.513462,0 -19.0355774,8.519231 -19.0355774,19.032692 V 99.263365 H 95.253871 z" id="path7281" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:1.50000000000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"/><path clip-rule="evenodd" d="m 51.56541,3.1095175 c 13.451923,0 24.360577,10.9086545 24.360577,24.3644235 0,13.451923 -10.908654,24.360577 -24.360577,24.360577 -13.456731,0 -24.365385,-10.908654 -24.365385,-24.360577 0,-13.455769 10.908654,-24.3644235 24.365385,-24.3644235 z" id="path7283" inkscape:connector-curvature="0" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:1.50000004999999992;stroke-miterlimit:4;stroke-dasharray:none;stroke-linejoin:round"/></svg> \ No newline at end of file
diff --git a/locale/es/LC_MESSAGES/org.ceibaljam.agenda.mo b/locale/es/LC_MESSAGES/org.ceibaljam.agenda.mo
new file mode 100755
index 0000000..824cd2a
--- /dev/null
+++ b/locale/es/LC_MESSAGES/org.ceibaljam.agenda.mo
Binary files differ
diff --git a/locale/es/activity.linfo b/locale/es/activity.linfo
new file mode 100755
index 0000000..13988a7
--- /dev/null
+++ b/locale/es/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Contactos
diff --git a/po/Contacts.pot b/po/Contacts.pot
new file mode 100755
index 0000000..0fa5fb1
--- /dev/null
+++ b/po/Contacts.pot
@@ -0,0 +1,78 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-10 17:23+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Contacts"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agenda.py:61
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:127
+msgid "Add a new contact"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:65
+msgid "Write a name:"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:103
+msgid "Remove this contact"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:158
+msgid "Unknown"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:160
+msgid "None"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:189
+msgid "Contacts:"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:285
+msgid "Name:"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:286
+msgid "Age:"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:287
+msgid "Telephone:"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:289
+msgid "Adress:"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:446
+msgid "Select a avatar"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:471
+msgid "Load from journal"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:474
+msgid "Accept"
+msgstr ""
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:476
+msgid "Cancel"
+msgstr ""
diff --git a/po/es.po b/po/es.po
new file mode 100755
index 0000000..3a6486c
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,78 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-10 17:23+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Contacts"
+msgstr "Contactos"
+
+#: /home/olpc/Activities/Contacts.activity/agenda.py:61
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:127
+msgid "Add a new contact"
+msgstr "Agregar un nuevo contacto"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:65
+msgid "Write a name:"
+msgstr "Escribe el nombre:"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:103
+msgid "Remove this contact"
+msgstr "Eliminar este contacto"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:158
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:160
+msgid "None"
+msgstr "Ninguno"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:189
+msgid "Contacts:"
+msgstr "Contactos:"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:285
+msgid "Name:"
+msgstr "Nombre:"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:286
+msgid "Age:"
+msgstr "Edad:"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:287
+msgid "Telephone:"
+msgstr "Teléfono:"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:289
+msgid "Adress:"
+msgstr "Dirección:"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:446
+msgid "Select a avatar"
+msgstr "Seleccione un avatar"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:471
+msgid "Load from journal"
+msgstr "Cargar desde el diario"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:474
+msgid "Accept"
+msgstr "Aceptar"
+
+#: /home/olpc/Activities/Contacts.activity/agendacanvas.py:476
+msgid "Cancel"
+msgstr "Cancelar"
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..ec0f64e
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,3 @@
+#!/usr/bin/env python
+from sugar.activity import bundlebuilder
+bundlebuilder.start()