Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Cordano <rafael.cordano@gmail.com>2012-12-15 21:16:45 (GMT)
committer Rafael Cordano <rafael.cordano@gmail.com>2012-12-15 21:16:45 (GMT)
commit131a654c5e4bd938e2e0143f98139041abf983b6 (patch)
tree4736ec76c17a1d566826364c61d3e950bba394cb
parentdd68ea86a31716a219a2790bb3c9e6c82cebfc67 (diff)
My first commit
-rw-r--r--Compress.py116
-rw-r--r--CompressCanvas.py524
-rw-r--r--CompressCanvas3.py526
-rw-r--r--Probar.py6
-rw-r--r--activity/Compress.svg55
-rw-r--r--activity/activity.info8
-rw-r--r--icons/Abrir.svg107
-rw-r--r--icons/Archivo.svg25
-rw-r--r--icons/Compress.svg55
-rw-r--r--icons/audio.svg17
-rw-r--r--icons/ceibaljam.pngbin0 -> 1412 bytes
-rw-r--r--icons/ceibaljam.svg212
-rw-r--r--icons/ceibaljam_chico.svg228
-rw-r--r--icons/imagen.svg16
-rw-r--r--icons/open-from-journal.svg131
-rw-r--r--icons/sugarlabs.svg127
-rw-r--r--icons/texto.svg17
-rw-r--r--icons/video.svg20
-rw-r--r--locale/en/LC_MESSAGES/org.CeibalJAM.Compress.mobin0 -> 3130 bytes
-rw-r--r--locale/en/activity.linfo2
-rw-r--r--po/Compress.pot206
-rw-r--r--po/en.po208
-rw-r--r--setup.py5
-rw-r--r--utils.py158
-rw-r--r--utils3.py160
25 files changed, 2929 insertions, 0 deletions
diff --git a/Compress.py b/Compress.py
new file mode 100644
index 0000000..85d6b42
--- /dev/null
+++ b/Compress.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Ignacio Rodríguez <nachoel01@gmail.com>
+# Rafael Cordano <rafael.cordano@gmail.com>
+# Ezequiel Pereira <eze2307@gmail.com>
+
+# 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
+try: # gtk3
+ from sugar30.activity import activity
+ from sugar3.activity.widgets import StopButton
+ from sugar3.activity.widgets import ActivityToolbarButton
+ from sugar3.graphics.toolbutton import ToolButton
+ from sugar3.graphics.toolbarbox import ToolbarBox
+ from gettext import gettext as _ # Traduccion
+ import utils3 as utils
+ from utils3 import Boton
+ from gi.repository import Gtk
+ Abrir = Boton(_("Abrir"),"Abrir")
+ Arriba = Boton(_('Arriba'),'up')
+ Home = Boton(_('Directorio Zip'),'gtk-home')
+ #open_from_journal = Boton(_("Open from journal"),"open-from-journal")
+ Add = Boton(_('Añadir archivo'),"add")
+ save = Boton(_('Guardar archivo:'))
+ Barra = ToolbarBox()
+ from CompressCanvas3 import Canvas_box as PyApp
+ from CompressCanvas3 import *
+ class Compress(activity.Activity):
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle, True)
+ canvas = PyApp()
+ Actividad = ActivityToolbarButton(self)
+ Parar = StopButton(self)
+ Parar.set_tooltip(_('Parar - Gtk3'))
+ #<-------------Separadores------------->#
+ Separador = Gtk.SeparatorToolItem()
+ Separador2 = Gtk.SeparatorToolItem()
+ Separador3 = Gtk.SeparatorToolItem()
+ Separador3.set_expand(True)
+ Separador3.props.draw = False
+ Barra.toolbar.insert(Actividad, 0)
+ Barra.toolbar.insert(Separador2, 1)
+ Barra.toolbar.insert(Add, 2)
+ Barra.toolbar.insert(Home,3)
+ Barra.toolbar.insert(Arriba,4)
+ Barra.toolbar.insert(Separador3, 5)
+ Barra.toolbar.insert(Abrir, 6)
+ Barra.toolbar.insert(save,7)
+ Barra.toolbar.insert(Separador3, 8)
+ Barra.toolbar.insert(Parar, 9)
+
+ self.set_toolbar_box(Barra) # Barra
+ self.set_canvas(canvas)
+ self.show_all()
+ save.hide()
+except ImportError:
+ 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 _ # Traduccion
+ import utils
+ from utils import Boton
+ Abrir = Boton(_("Abrir"),"Abrir")
+ Arriba = Boton(_('Arriba'),'up')
+ Home = Boton(_('Directorio Zip'),'gtk-home')
+ #open_from_journal = Boton(_("Open from journal"),"open-from-journal")
+ Add = Boton(_('Añadir archivo'),"add")
+ save = Boton(_('Guardar archivo:'))
+ Barra = ToolbarBox()
+ from CompressCanvas import Canvas_box as PyApp
+ from CompressCanvas import *
+ class Compress(activity.Activity):
+ def __init__(self, handle):
+ activity.Activity.__init__(self, handle, True)
+ canvas = PyApp()
+ Actividad = ActivityToolbarButton(self)
+ Parar = StopButton(self)
+ Parar.set_tooltip(_('Parar - Gtk2'))
+ #<-------------Separadores------------->#
+ Separador = gtk.SeparatorToolItem()
+ Separador2 = gtk.SeparatorToolItem()
+ Separador3 = gtk.SeparatorToolItem()
+ Separador3.set_expand(True)
+ Separador3.props.draw = False
+ Barra.toolbar.insert(Actividad, 0)
+ Barra.toolbar.insert(Separador2, 1)
+ Barra.toolbar.insert(Add, 2)
+ Barra.toolbar.insert(Home,3)
+ Barra.toolbar.insert(Arriba,4)
+ Barra.toolbar.insert(Separador3, 5)
+ Barra.toolbar.insert(Abrir, 6)
+ Barra.toolbar.insert(save,7)
+ Barra.toolbar.insert(Separador3, 8)
+ Barra.toolbar.insert(Parar, 9)
+
+ self.set_toolbar_box(Barra) # Barra
+ self.set_canvas(canvas)
+ self.show_all()
+ save.hide()
+
+
+
diff --git a/CompressCanvas.py b/CompressCanvas.py
new file mode 100644
index 0000000..11bd0c3
--- /dev/null
+++ b/CompressCanvas.py
@@ -0,0 +1,524 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Ignacio Rodríguez <nachoel01@gmail.com>
+# Rafael Cordano <rafael.cordano@gmail.com>
+# Ezequiel Pereira <eze2307@gmail.com>
+
+# 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
+try:
+ from Compress import *
+ import utils
+ import gtk,os,shutil,gobject,pygtk
+ from sugar.graphics.objectchooser import ObjectChooser
+ from sugar.datastore import datastore
+ shutil.rmtree('/tmp/Compress')
+ os.mkdir('/tmp/Compress')
+ os.mkdir('/tmp/Compress/Work')
+except:
+ pass
+from gettext import gettext as _
+Archivo = None
+# CONSTANTES #
+Directorio = _("Nuevo directorio")
+Hboxx = gtk.HBox()
+Uri = gtk.Entry()
+Uri.set_text(os.getcwd())
+Uri.props.secondary_icon_stock = 'gtk-apply'
+Uri.props.secondary_icon_activatable = True
+Estado = False
+entrada = gtk.Entry()
+entrada.props.secondary_icon_stock = 'gtk-apply'
+entrada.props.secondary_icon_activatable = True
+botons = gtk.Button(gtk.STOCK_OK)
+save = utils.Boton(_('Guardar archivo'),'document-save')
+entrada.set_text(_("Para que los cambios se guarden presione la tecla '↵' o el icono √ "))
+###
+
+class Canvas(gtk.TreeView):
+ def __init__(self):
+
+ self.modelo = None
+ self.treeview_arbol = None
+ self.barra_de_estado = None
+ gtk.TreeView.__init__(self)
+ try:
+ Home.connect('clicked',self.home)
+ Abrir.connect('clicked',self.open,True)
+ Arriba.connect('clicked',self.back)
+ save.connect('clicked',self.copiar_al_diario)
+# open_from_journal.connect('clicked',self.open_diario)
+ Add.connect('clicked',self.anadir)
+ except:
+ pass
+ Uri.connect('activate',self.change)
+ Uri.connect("icon-press", self.change)
+ self.set_tooltip_text(_('Archivos en el directorio'))
+ self.set_property("rules-hint", True)
+ entrada.connect('icon-press',self.update,entrada)
+ entrada.connect('activate',self.update_e,entrada)
+
+ self.Copiado = None
+ self.modelo = self.construir_lista()
+ self.construir_columnas()
+ self.seleccion = self.get_selection() # treeview.get_selection()
+ self.seleccion.set_mode(gtk.SELECTION_SINGLE)
+ self.seleccion.set_select_function(self.archivo_clickeado, self.modelo, True)
+ self.connect("row-activated", self.doble_click)
+ self.connect('button-release-event', self.menu_click)
+ self.connect('key-release-event', self.atras_button)
+ self.set_model(self.modelo)
+ self.presentado = False
+ self.show_all()
+ self.icon_name = None
+ if Estado:
+ Hboxx.show()
+ else:
+ Hboxx.hide()
+ def update(self,widget,a,b,entrada): # Icono
+ botons.connect('clicked',self.descomprimir_final,entrada.get_text())
+ def update_e(self,widget,entrada): # Enter en la entrada
+ botons.connect('clicked',self.descomprimir_final,entrada.get_text())
+ def compress_file(self,widget,archivo): # Comprime un archivo
+ utils.compress(utils.Archivos,os.getcwd()+"/"+utils.Archivos+".zip")
+ self.set_model(self.construir_lista())
+ def open(self,widget,clickeado=False): # Abrir
+ if not clickeado:
+ try:
+ utils.decompress(utils.Archivos,Hboxx,'/tmp/Compress/Work','Abrir')
+ utils.Archivo_d = Uri.get_text()+"/"+utils.Archivos
+ os.chdir('/tmp/Compress/Work')
+ except:
+ utils.Abrir(Hboxx,entrada)
+ if clickeado:
+ utils.Abrir(Hboxx,entrada)
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ self.set_model(self.construir_lista())
+ def archivo_clickeado(self, seleccion, modelo, archivo, seleccionado, a): # Cuando se selecciona
+ iter= modelo.get_iter(archivo)
+ directorio = modelo.get_value(iter,0)
+ utils.Archivos = directorio
+ estado = utils.describe_archivo(os.getcwd()+"/"+utils.Archivos)
+
+ if 'image' in estado:
+ self.icon_name = 'imagen'
+ save.set_tooltip(_('Guardar imagen: '+utils.Archivos+' al diario'))
+ if 'text' in estado:
+ self.icon_name = 'texto'
+ save.set_tooltip(_('Guardar texto: '+utils.Archivos+' al diario'))
+ if 'audio' in estado:
+ self.icon_name = 'audio'
+ save.set_tooltip(_('Guardar audio: '+utils.Archivos+' al diario'))
+
+ if 'video' in estado:
+ self.icon_name = 'video'
+ save.set_tooltip(_('Guardar: '+utils.Archivos+' al diario'))
+ if not 'directory' in estado and not 'no read permission' in estado:
+ save.set_icon_name(self.icon_name)
+ save.show()
+ else:
+ save.hide()
+ return True
+ def anadir(self,widget):
+ Selector = gtk.FileChooserDialog(_("Seleccione un archivo"),None,gtk.FILE_CHOOSER_ACTION_OPEN,(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,gtk.STOCK_OK, gtk.RESPONSE_OK))
+ Selector.set_default_response(gtk.RESPONSE_CANCEL)
+ if utils.Archivo_d != None:
+ Echo = Selector.run()
+ if Echo == gtk.RESPONSE_OK:
+ File = Selector.get_filename()
+ print 'ARCHIVO'
+ print File
+ utils.compress(File,utils.Archivo_d)
+ print 'AÑADIDO'
+ utils.decompress(utils.Archivo_d,Hboxx)
+ print 'DESCOMPRIMIDO'
+ Selector.destroy()
+ elif Echo == gtk.RESPONSE_CANCEL:
+ Selector.destroy()
+ if utils.Archivo_d == None:
+ self.errores('Copiar_a_nada')
+ os.chdir('/tmp/Compress/Work')
+ self.set_model(self.construir_lista())
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ def open_diario(self,widget): # Abrir un zip desde el diario.
+ chooser = ObjectChooser()
+ resultado = chooser.run()
+ if resultado == gtk.RESPONSE_ACCEPT:
+ Archivo_s = chooser.get_selected_object()
+ Archivo = Archivo_s.get_file_path()
+ try:
+ print Archivo
+ utils.Archivo_d = Archivo
+ utils.decompress(Archivo,Hboxx,'/tmp/Compress/Work','Abrir',True)
+
+ except IOError:
+ Mensaje = _("""Oh..Parece que no selecciono un archivo zip""")
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=Mensaje)
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+ self.set_model(self.construir_lista())
+ Uri.set_text(os.getcwd())
+ def construir_lista(self):
+ store = gtk.ListStore(str)
+ dirList=os.listdir(os.getcwd())
+ dircontents = []
+ for item in dirList:
+ if item[0] != '.':
+ if os.path.isdir(item):
+ dircontents.append(['/'+item])
+ else:
+ dircontents.append([item])
+
+ dircontents.sort()
+ for act in dircontents:
+ store.append([act[0]])
+ return store
+ def descomprimir_en(self,widget=None):
+ if not self.presentado:
+ label = gtk.Label(_('Carpeta:'))
+
+ #entrada.set_text('/tmp/Compress/Work')
+ boton = gtk.Button(gtk.STOCK_OPEN)
+ botona = gtk.Button(gtk.STOCK_CANCEL)
+ botona.set_use_stock(True)
+ botona.connect('clicked',lambda x:Hboxx.hide())
+ boton.set_use_stock(True)
+ boton.connect('clicked',utils.Abrir_Directorio,entrada,utils.Archivos,Estado,Hboxx)
+ Hboxx.pack_start(label,False,False,0)
+ Hboxx.pack_start(entrada,True,True,0)
+ Hboxx.modify_bg(gtk.STATE_NORMAL,gtk.gdk.color_parse('#FF0000'))
+ Hboxx.pack_start(boton,False,False,0)
+ botons.set_use_stock(True)
+ Hboxx.pack_start(botons,False,False,0)
+ Hboxx.pack_start(botona,False,False,0)
+
+ Hboxx.show_all()
+ self.presentado = True
+ else:
+ Hboxx.show_all()
+ def descomprimir_final(self,widget,dire):
+ utils.decompress(utils.Archivos,Hboxx,dire,'Descomprimir')
+ Hboxx.hide()
+ os.chdir(dire)
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ self.set_model(self.construir_lista())
+ def descomprimir(self,widget):
+ self.descomprimir_en()
+ Estado = True
+ def construir_columnas(self):
+ columna= gtk.TreeViewColumn(_('Archivos en el directorio'))
+ celda_de_texto = gtk.CellRendererText() # para el texto
+ columna.pack_start(celda_de_texto, True)
+ self.append_column (columna)
+ columna.set_attributes(celda_de_texto, text=0)
+ def doble_click(self, widget, row, col): # Clickeado
+ model = widget.get_model()
+ target = model[row][0]
+ Archivo = utils.describe_archivo(os.getcwd()+"/"+utils.Archivos)
+ if target[0] != "/":
+ utils.Archivos = target
+ ventana = gtk.Window()
+ ventana.set_title(target)
+ ventana.connect('destroy',lambda x: ventana.destroy)
+ if 'image' in Archivo:
+ try:
+ pix = gtk.gdk.pixbuf_new_from_file(target)
+ image = gtk.Image()
+ image.set_from_pixbuf(pix)
+ ventana.add(image)
+ image.show()
+ ventana.show()
+ except IOError:
+ self.ops(_('imagen'))
+ if not 'binary' in Archivo:
+ try:
+ ventana.set_size_request(gtk.gdk.screen_width()/2,gtk.gdk.screen_height()/2)
+ texta = gtk.ScrolledWindow()
+ texs = gtk.TextBuffer()
+ text = gtk.TextView(texs)
+ texta.add(text)
+ text.set_editable(False)
+ texs.set_text(open(target).read())
+ ventana.add(texta)
+ ventana.show_all()
+ except IOError:
+ self.ops(_('archivo'))
+ else:
+ try:
+ os.chdir(os.getcwd()+target)
+ self.set_model(self.construir_lista())
+ except:
+ self.ops(_('directorio'))
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ def create_columns(self, treeView):
+ rendererText = gtk.CellRendererText()
+ img = celda_de_imagen = gtk.CellRendererPixbuf()
+ column = gtk.TreeViewColumn(_('Archivos en el directorio'))
+ column.set_sort_column_id(0)
+ column.pack_start(rendererText,False)
+ column.set_attributes(rendererText, text=0)
+ self.append_column(column)
+ def close(self,widget):
+ shutil.rmtree('/tmp/Compress/Work')
+ os.mkdir('/tmp/Compress/Work')
+ utils.Archivo_d = None
+ self.set_model(self.construir_lista())
+ def menu_click(self,widget,event):
+ Boton = event.button
+ Tiempo = event.time
+ Menu = gtk.Menu()
+ Archivo = utils.describe_archivo(os.getcwd()+"/"+utils.Archivos)
+ if Boton == 3:
+ if utils.Archivo_d == None:
+ if 'zip' in Archivo:
+ Abrir = gtk.MenuItem(_('Abrir zip'))
+ Abrir.connect('activate',self.open)
+ Menu.append(Abrir)
+ else:
+ pass
+ else:
+ Close = gtk.MenuItem(_('Cerrar zip: %s'%utils.Archivo_d))
+ Close.connect('activate',self.close)
+ Menu.append(Close)
+ Menu.append(gtk.SeparatorMenuItem())
+ Copy = gtk.MenuItem(_('Copiar'))
+ Copy.connect('activate',self.copy)
+ if 'zip' in Archivo:
+ Des = gtk.MenuItem(_('Descomprimir'))
+ Des.connect('activate',self.descomprimir)
+ Cut = gtk.MenuItem(_('Cortar'))
+ Cut.connect('activate',self.cut)
+ Delete = gtk.MenuItem(_('Borrar'))
+ Delete.connect('activate',self.sure)
+ CompressFile= gtk.MenuItem(_('Comprimir este archivo'))
+ CompressFile.connect('activate',self.compress_file,utils.Archivos)
+ Menu.append(CompressFile)
+ try:
+ Menu.append(Des)
+ except:
+ pass
+ Menu.append(gtk.SeparatorMenuItem())
+ if utils.Archivo_d != None:
+ Copyw = gtk.MenuItem(_('Copiar al zip'))
+ Copyw.connect('activate',self.copy,True)
+ Menu.append(Copyw)
+ Menu.append(Copy)
+
+ Menu.append(Cut)
+ Back = gtk.MenuItem(_('Atras'))
+ Back.connect('activate',self.back)
+ if os.listdir('/tmp/Compress/') != ['Work']:
+ Paste = gtk.MenuItem(_('Pegar'))
+ Paste.connect('activate',self.paste)
+ Menu.append(Paste)
+ Menu.append(gtk.SeparatorMenuItem())
+ Menu.append(Delete)
+ Menu.append(Back)
+ Menu.show_all()
+ Menu.popup(None, None, None, Boton, Tiempo)
+ def atras_button(self,widget,event):
+ Boton = event.keyval
+ if Boton == 65288:
+ self.back()
+ if Boton == 65535: # Solo existe en la 1.5 y en las magallanes
+ self.sure()
+ def delete(self,widget=None):
+ try:
+ try:
+ os.remove(os.getcwd()+"/"+utils.Archivos)
+ except:
+ shutil.rmtree(os.getcwd()+utils.Archivos)
+ except:
+ self.errores('Desconocido')
+
+ self.set_model(self.construir_lista())
+ def cut(self,widget):
+ try:
+ self.Copiado = utils.Archivos
+# os.system('mv '+ os.getcwd()+"/"+utils.Archivos+" "+'/tmp/Compress/'+utils.Archivos)
+ shutil.move(os.getcwd()+"/"+utils.Archivos,'/tmp/Compress/'+utils.Archivos)
+ self.set_model(self.construir_lista())
+ except:
+ self.errores('Cortar')
+ def paste(self,widget):
+ try:
+
+ #os.system('mv /tmp/Compress/'+self.Copiado+" " + os.getcwd()+"/")
+ shutil.move('/tmp/Compress/'+self.Copiado,os.getcwd()+"/")
+ self.set_model(self.construir_lista())
+ except:
+ List = os.listdir('/tmp/Compress')
+ if List == ['Work']:
+ self.errores("Pegar_None")
+ else:
+ self.errores('Pegar')
+ def back(self,widget=None):
+ os.chdir(os.getcwd()+"/..")
+ self.set_model(self.construir_lista())
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ def change(self,widget,a=None,b=None):
+ try:
+ os.chdir(widget.get_text())
+ self.set_model(self.construir_lista())
+ except:
+ self.ops(_('directorio'))
+ def copy(self,widget,W=False):
+ try:
+ self.Copiado = utils.Archivos
+ if not W:
+ try:
+ shutil.copy(os.getcwd()+"/"+utils.Archivos,'/tmp/Compress/')
+ except:
+ shutil.copytree(os.getcwd()+"/"+utils.Archivos,'/tmp/Compress/'+utils.Archivos)
+
+ if W:
+ try:
+ utils.compress("./"+utils.Archivos,utils.Archivo_d)
+ utils.decompress(utils.Archivo_d,Hboxx)
+
+ except:
+ self.errores('Copiar_a_nada')
+
+ except:
+ self.errores('Copiar')
+ def sure(self,widget=None):
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_YES_NO,
+ message_format=_("Seguro que desea borrar el archivo: %s" %utils.Archivos))
+ respuesta = info.run()
+ if respuesta == gtk.RESPONSE_YES:
+ self.delete()
+ info.destroy()
+ else:
+ info.destroy()
+ def ops(self,donde):
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,
+ message_format=_("Error al acceder al "+donde+" razón:\n%s" %self.razon(str(Uri.get_text()),donde)))
+ respuesta = info.run()
+ if respuesta == gtk.RESPONSE_OK:
+ Ant = os.getcwd()
+ os.chdir(Ant)
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ info.destroy()
+ def razon(self,directorio,razon):
+ if not os.path.exists(directorio):
+ return _("El "+razon+" no existe")
+ else:
+ try:
+ open(directorio)
+ except:
+ return _("No tiene acceso a ese "+razon )
+ try:
+ open(directorio+"/")
+ except:
+ return _(directorio+" no es un directorio")
+ def home(self,widget=None):
+ os.chdir('/tmp/Compress/Work')
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ self.set_model(self.construir_lista())
+ def copiar_al_diario(self,widget):
+ descripcion = utils.describe_archivo(utils.Archivos)
+ mime = utils.describe_mime(utils.Archivos)
+ if not 'directory' in descripcion:
+ acopiar = datastore.create()
+ acopiar.metadata['title'] = utils.Archivos
+ acopiar.metadata['mime_type'] = mime
+ acopiar.set_file_path(os.getcwd()+"/"+utils.Archivos)
+ datastore.write(acopiar)
+ acopiar.destroy()
+ def errores(self,Evento=None):
+ if Evento == "Copiar":
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=_("Error al intentar copiar: %s "%utils.Archivos))
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+ if Evento == "Cortar":
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=_("Error al intentar cortar: %s "%utils.Archivos))
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+ if Evento == "Pegar_None":
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=_("Error: No hay nada en el portapapeles" ))
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+ if Evento == "Pegar":
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=_("Error al intentar pegar un archivo" ))
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+ if Evento == 'Copiar_a_nada':
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=_("¡Ups! Parece que aún no abrio ningun archivo"))
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+ if Evento == 'Desconocido':
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=_("Error desconocido"))
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+class Canvas_box(gtk.EventBox):
+ def __init__(self):
+ gtk.EventBox.__init__(self)
+
+ vbox = gtk.VBox(False, 8)
+ xhbox = gtk.HBox()
+ sw = gtk.ScrolledWindow()
+ sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ xhbox.pack_start(Uri,True,True,0)
+ hbox = gtk.HBox()
+ vbox.pack_start(xhbox,False,False)
+ vbox.pack_start(hbox)
+ Logo = gtk.Image()
+ Logo.set_from_file('icons/ceibaljam.svg')
+ hbox.pack_start(sw, True, True, 0)
+ sw.add(Canvas())
+ hx = gtk.HBox()
+ Logo2 = gtk.Image()
+ Logo.set_tooltip_text('http://www.ceibaljam.org')
+ Logo2.set_from_file('icons/sugarlabs.svg')
+ Logo2.set_tooltip_text('http://www.wiki.sugarlabs.org')
+
+ self.add(vbox)
+ vbox.pack_start(Hboxx,False,False,0)
+ if gtk.gdk.screen_width() >= 1200:
+ vbox.pack_start(hx,False,False,0)
+ hx.pack_start(Logo2,True,True,0)
+ hx.pack_start(Logo,True,True,100)
+ else:
+ Uri.set_size_request(int(gtk.gdk.screen_width()-157.797),int(45.466))
+ Uri.show()
+ LogoChico = gtk.Image()
+ LogoChico.set_from_file('icons/ceibaljam_chico.svg')
+
+ LogoChico.show()
+ xhbox.pack_start(LogoChico,False,False,0)
+ self.show_all()
+
+if __name__ == "__main__":
+ a = gtk.Window()
+ a.add(Canvas_box())
+ a.set_title('COMPRESS CANVAS GTK2')
+ a.show_all()
+ a.connect('destroy',lambda x: gtk.main_quit())
+ a.set_size_request(500,500)
+ gtk.main()
diff --git a/CompressCanvas3.py b/CompressCanvas3.py
new file mode 100644
index 0000000..9f22b95
--- /dev/null
+++ b/CompressCanvas3.py
@@ -0,0 +1,526 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Ignacio Rodríguez <nachoel01@gmail.com>
+# Rafael Cordano <rafael.cordano@gmail.com>
+# Ezequiel Pereira <eze2307@gmail.com>
+
+# 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
+try:
+ from Compress import *
+ import utils3 as utils
+ import shutil,os,pygtk
+ from gi.repository import Gtk,Gdk,GdkPixbuf
+ from sugar3.graphics.objectchooser import ObjectChooser
+ from sugar3.datastore import datastore
+ shutil.rmtree('/tmp/Compress')
+ os.mkdir('/tmp/Compress')
+ os.mkdir('/tmp/Compress/Work')
+except:
+ pass
+from gettext import gettext as _
+Archivo = None
+# CONSTANTES #
+Directorio = _("Nuevo directorio")
+Hboxx = Gtk.HBox()
+Uri = Gtk.Entry()
+Uri.set_text(os.getcwd())
+Uri.props.secondary_icon_stock = 'gtk-apply'
+Uri.props.secondary_icon_activatable = True
+Estado = False
+entrada = Gtk.Entry()
+entrada.props.secondary_icon_stock = 'gtk-apply'
+entrada.props.secondary_icon_activatable = True
+botons = Gtk.Button(Gtk.STOCK_OK)
+save = utils.Boton(_('Guardar archivo'),'document-save')
+entrada.set_text(_("Para que los cambios se guarden presione la tecla '↵' o el icono √ "))
+###
+
+class Canvas(Gtk.TreeView):
+ def __init__(self):
+
+ self.modelo = None
+ self.treeview_arbol = None
+ self.barra_de_estado = None
+ Gtk.TreeView.__init__(self)
+ try:
+ Home.connect('clicked',self.home)
+ Abrir.connect('clicked',self.open,True)
+ Arriba.connect('clicked',self.back)
+ save.connect('clicked',self.copiar_al_diario)
+# open_from_journal.connect('clicked',self.open_diario)
+ Add.connect('clicked',self.anadir)
+ except:
+ pass
+ Uri.connect('activate',self.change)
+ Uri.connect("icon-press", self.change)
+ self.set_tooltip_text(_('Archivos en el directorio'))
+ self.set_property("rules-hint", True)
+ entrada.connect('icon-press',self.update,entrada)
+ entrada.connect('activate',self.update_e,entrada)
+
+ self.Copiado = None
+ self.modelo = self.construir_lista()
+ self.construir_columnas()
+ self.seleccion = self.get_selection() # treeview.get_selection()
+ self.seleccion.set_mode(Gtk.SelectionMode.SINGLE)
+ self.seleccion.set_select_function(self.archivo_clickeado, self.modelo)
+ self.connect("row-activated", self.doble_click)
+ self.connect('button-release-event', self.menu_click)
+ self.connect('key-release-event', self.atras_button)
+ self.set_model(self.modelo)
+ self.presentado = False
+ self.show_all()
+ self.icon_name = None
+ if Estado:
+ Hboxx.show()
+ else:
+ Hboxx.hide()
+ def update(self,widget,a,b,entrada): # Icono
+ botons.connect('clicked',self.descomprimir_final,entrada.get_text())
+ def update_e(self,widget,entrada): # Enter en la entrada
+ botons.connect('clicked',self.descomprimir_final,entrada.get_text())
+ def compress_file(self,widget,archivo): # Comprime un archivo
+ utils.compress(utils.Archivos,os.getcwd()+"/"+utils.Archivos+".zip")
+ self.set_model(self.construir_lista())
+ def open(self,widget,clickeado=False): # Abrir
+ if not clickeado:
+ try:
+ utils.decompress(utils.Archivos,Hboxx,'/tmp/Compress/Work','Abrir')
+ utils.Archivo_d = Uri.get_text()+"/"+utils.Archivos
+ os.chdir('/tmp/Compress/Work')
+ except:
+ utils.Abrir(Hboxx,entrada)
+ if clickeado:
+ utils.Abrir(Hboxx,entrada)
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ self.set_model(self.construir_lista())
+ def archivo_clickeado(self, seleccion, modelo, archivo, seleccionado, a=None): # Cuando se selecciona
+ iter= modelo.get_iter(archivo)
+ directorio = modelo.get_value(iter,0)
+ utils.Archivos = directorio
+ estado = utils.describe_archivo(os.getcwd()+"/"+utils.Archivos)
+
+ if 'image' in estado:
+ self.icon_name = 'imagen'
+ save.set_tooltip(_('Guardar imagen: '+utils.Archivos+' al diario'))
+ if 'text' in estado:
+ self.icon_name = 'texto'
+ save.set_tooltip(_('Guardar texto: '+utils.Archivos+' al diario'))
+ if 'audio' in estado:
+ self.icon_name = 'audio'
+ save.set_tooltip(_('Guardar audio: '+utils.Archivos+' al diario'))
+
+ if 'video' in estado:
+ self.icon_name = 'video'
+ save.set_tooltip(_('Guardar: '+utils.Archivos+' al diario'))
+ if not 'directory' in estado and not 'no read permission' in estado:
+ save.set_icon_name(self.icon_name)
+ save.show()
+ else:
+ save.hide()
+ return True
+ def anadir(self,widget):
+ Selector = Gtk.FileChooserDialog(_("Seleccione un archivo"),None,Gtk.FileChooserAction.OPEN,(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,Gtk.STOCK_OK, Gtk.ResponseType.OK))
+ Selector.set_default_response(Gtk.ResponseType.CANCEL)
+ if utils.Archivo_d != None:
+ Echo = Selector.run()
+ if Echo == Gtk.ResponseType.OK:
+ File = Selector.get_filename()
+ print 'ARCHIVO'
+ print File
+ utils.compress(File,utils.Archivo_d)
+ print 'AÑADIDO'
+ utils.decompress(utils.Archivo_d,Hboxx)
+ print 'DESCOMPRIMIDO'
+ Selector.destroy()
+ elif Echo == Gtk.ResponseType.CANCEL:
+ Selector.destroy()
+ if utils.Archivo_d == None:
+ self.errores('Copiar_a_nada')
+ os.chdir('/tmp/Compress/Work')
+ self.set_model(self.construir_lista())
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ def open_diario(self,widget): # Abrir un zip desde el diario.
+ chooser = ObjectChooser()
+ resultado = chooser.run()
+ if resultado == Gtk.ResponseType.ACCEPT:
+ Archivo_s = chooser.get_selected_object()
+ Archivo = Archivo_s.get_file_path()
+ try:
+ print Archivo
+ utils.Archivo_d = Archivo
+ utils.decompress(Archivo,Hboxx,'/tmp/Compress/Work','Abrir',True)
+
+ except IOError:
+ Mensaje = _("""Oh..Parece que no selecciono un archivo zip""")
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=Mensaje)
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+ self.set_model(self.construir_lista())
+ Uri.set_text(os.getcwd())
+ def construir_lista(self):
+ store = Gtk.ListStore(str)
+ dirList=os.listdir(os.getcwd())
+ dircontents = []
+ for item in dirList:
+ if item[0] != '.':
+ if os.path.isdir(item):
+ dircontents.append(['/'+item])
+ else:
+ dircontents.append([item])
+
+ dircontents.sort()
+ for act in dircontents:
+ store.append([act[0]])
+ return store
+ def descomprimir_en(self,widget=None):
+ if not self.presentado:
+ label = Gtk.Label(_('Carpeta:'))
+
+ #entrada.set_text('/tmp/Compress/Work')
+ boton = Gtk.Button(Gtk.STOCK_OPEN)
+ botona = Gtk.Button(Gtk.STOCK_CANCEL)
+ botona.set_use_stock(True)
+ botona.connect('clicked',lambda x:Hboxx.hide())
+ boton.set_use_stock(True)
+ boton.connect('clicked',utils.Abrir_Directorio,entrada,utils.Archivos,Estado,Hboxx)
+ Hboxx.pack_start(label,False,False,0)
+ Hboxx.pack_start(entrada,True,True,0)
+ Hboxx.pack_start(boton,False,False,0)
+ botons.set_use_stock(True)
+ Hboxx.pack_start(botons,False,False,0)
+ Hboxx.pack_start(botona,False,False,0)
+
+ Hboxx.show_all()
+ self.presentado = True
+ else:
+ Hboxx.show_all()
+ def descomprimir_final(self,widget,dire):
+ utils.decompress(utils.Archivos,Hboxx,dire,'Descomprimir')
+ Hboxx.hide()
+ os.chdir(dire)
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ self.set_model(self.construir_lista())
+ def descomprimir(self,widget):
+ self.descomprimir_en()
+ Estado = True
+ def construir_columnas(self):
+ columna= Gtk.TreeViewColumn(_('Archivos en el directorio'))
+ celda_de_texto = Gtk.CellRendererText() # para el texto
+ columna.pack_start(celda_de_texto, True)
+ self.append_column (columna)
+ columna.set_attributes(celda_de_texto, text=0)
+ def doble_click(self, widget, row, col): # Clickeado
+ model = widget.get_model()
+ target = model[row][0]
+ Archivo = utils.describe_archivo(os.getcwd()+"/"+utils.Archivos)
+ if target[0] != "/":
+ utils.Archivos = target
+ ventana = Gtk.Window()
+ ventana.set_title(target)
+ ventana.connect('destroy',lambda x: ventana.destroy)
+ if 'image' in Archivo:
+ try:
+ pix = GdkPixbuf.Pixbuf.new_from_file(target)
+ image = Gtk.Image()
+ image.set_from_pixbuf(pix)
+ ventana.add(image)
+ image.show()
+ ventana.show()
+ except IOError:
+ self.ops(_('imagen'))
+ if not 'binary' in Archivo:
+ try:
+ ventana.set_size_request(Gdk.Screen.width()/2,Gdk.Screen.height()/2)
+ texta = Gtk.ScrolledWindow()
+ texs = Gtk.TextBuffer()
+ text = Gtk.TextView()
+ text.set_buffer(texs)
+ texta.add(text)
+ text.set_editable(False)
+ texs.set_text(open(target).read())
+ ventana.add(texta)
+ ventana.show_all()
+ except IOError:
+ self.ops(_('archivo'))
+ else:
+ try:
+ os.chdir(os.getcwd()+target)
+ self.set_model(self.construir_lista())
+ except:
+ self.ops(_('directorio'))
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ def create_columns(self, treeView):
+ rendererText = Gtk.CellRendererText()
+ img = celda_de_imagen = Gtk.CellRendererPixbuf()
+ column = Gtk.TreeViewColumn(_('Archivos en el directorio'))
+ column.set_sort_column_id(0)
+ column.pack_start(rendererText,False)
+ column.set_attributes(rendererText, text=0)
+ self.append_column(column)
+ def close(self,widget):
+ shutil.rmtree('/tmp/Compress/Work')
+ os.mkdir('/tmp/Compress/Work')
+ utils.Archivo_d = None
+ self.set_model(self.construir_lista())
+ def menu_click(self,widget,event):
+ Boton = event.button
+ Tiempo = event.time
+ Menu = Gtk.Menu()
+ Archivo = utils.describe_archivo(os.getcwd()+"/"+utils.Archivos)
+ if Boton == 3:
+ if utils.Archivo_d == None:
+ if 'zip' in Archivo:
+ Abrir = Gtk.MenuItem(_('Abrir zip'))
+ Abrir.connect('activate',self.open)
+ Menu.append(Abrir)
+ else:
+ pass
+ else:
+ Close = Gtk.MenuItem(_('Cerrar zip: %s'%utils.Archivo_d))
+ Close.connect('activate',self.close)
+ Menu.append(Close)
+ Menu.append(Gtk.SeparatorMenuItem())
+ Copy = Gtk.MenuItem(_('Copiar'))
+ Copy.connect('activate',self.copy)
+ if 'zip' in Archivo:
+ Des = Gtk.MenuItem(_('Descomprimir'))
+ Des.connect('activate',self.descomprimir)
+ Cut = Gtk.MenuItem(_('Cortar'))
+ Cut.connect('activate',self.cut)
+ Delete = Gtk.MenuItem(_('Borrar'))
+ Delete.connect('activate',self.sure)
+ CompressFile= Gtk.MenuItem(_('Comprimir este archivo'))
+ CompressFile.connect('activate',self.compress_file,utils.Archivos)
+ Menu.append(CompressFile)
+ try:
+ Menu.append(Des)
+ except:
+ pass
+ Menu.append(Gtk.SeparatorMenuItem())
+ if utils.Archivo_d != None:
+ Copyw = Gtk.MenuItem(_('Copiar al zip'))
+ Copyw.connect('activate',self.copy,True)
+ Menu.append(Copyw)
+ Menu.append(Copy)
+
+ Menu.append(Cut)
+ Back = Gtk.MenuItem(_('Atras'))
+ Back.connect('activate',self.back)
+ if os.listdir('/tmp/Compress/') != ['Work']:
+ Paste = Gtk.MenuItem(_('Pegar'))
+ Paste.connect('activate',self.paste)
+ Menu.append(Paste)
+ Menu.append(Gtk.SeparatorMenuItem())
+ Menu.append(Delete)
+ Menu.append(Back)
+ Menu.show_all()
+ Menu.popup(None, None, None, None,Boton, Tiempo)
+ def atras_button(self,widget,event):
+ Boton = event.keyval
+ if Boton == 65288:
+ self.back()
+ if Boton == 65535: # Solo existe en la 1.5 y en las magallanes
+ self.sure()
+ def delete(self,widget=None):
+ try:
+ try:
+ os.remove(os.getcwd()+"/"+utils.Archivos)
+ except:
+ shutil.rmtree(os.getcwd()+utils.Archivos)
+ except:
+ self.errores('Desconocido')
+
+ self.set_model(self.construir_lista())
+ def cut(self,widget):
+ try:
+ self.Copiado = utils.Archivos
+# os.system('mv '+ os.getcwd()+"/"+utils.Archivos+" "+'/tmp/Compress/'+utils.Archivos)
+ shutil.move(os.getcwd()+"/"+utils.Archivos,'/tmp/Compress/'+utils.Archivos)
+ self.set_model(self.construir_lista())
+ except:
+ self.errores('Cortar')
+ def paste(self,widget):
+ try:
+
+ #os.system('mv /tmp/Compress/'+self.Copiado+" " + os.getcwd()+"/")
+ shutil.move('/tmp/Compress/'+self.Copiado,os.getcwd()+"/")
+ self.set_model(self.construir_lista())
+ except:
+ List = os.listdir('/tmp/Compress')
+ if List == ['Work']:
+ self.errores("Pegar_None")
+ else:
+ self.errores('Pegar')
+ def back(self,widget=None):
+ os.chdir(os.getcwd()+"/..")
+ self.set_model(self.construir_lista())
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ def change(self,widget,a=None,b=None):
+ try:
+ os.chdir(widget.get_text())
+ self.set_model(self.construir_lista())
+ except:
+ self.ops(_('directorio'))
+ def copy(self,widget,W=False):
+ try:
+ self.Copiado = utils.Archivos
+ if not W:
+ try:
+ shutil.copy(os.getcwd()+"/"+utils.Archivos,'/tmp/Compress/')
+ except:
+ shutil.copytree(os.getcwd()+"/"+utils.Archivos,'/tmp/Compress/'+utils.Archivos)
+
+ if W:
+ try:
+ utils.compress("./"+utils.Archivos,utils.Archivo_d)
+ utils.decompress(utils.Archivo_d,Hboxx)
+
+ except:
+ self.errores('Copiar_a_nada')
+
+ except:
+ self.errores('Copiar')
+ def sure(self,widget=None):
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.YES_NO,
+ message_format=_("Seguro que desea borrar el archivo: %s" %utils.Archivos))
+ respuesta = info.run()
+ if respuesta == Gtk.ResponseType.YES:
+ self.delete()
+ info.destroy()
+ else:
+ info.destroy()
+ def ops(self,donde):
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,
+ message_format=_("Error al acceder al "+donde+" razón:\n%s" %self.razon(str(Uri.get_text()),donde)))
+ respuesta = info.run()
+ if respuesta == Gtk.ResponseType.OK:
+ Ant = os.getcwd()
+ os.chdir(Ant)
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ info.destroy()
+ def razon(self,directorio,razon):
+ if not os.path.exists(directorio):
+ return _("El "+razon+" no existe")
+ else:
+ try:
+ open(directorio)
+ except:
+ return _("No tiene acceso a ese "+razon )
+ try:
+ open(directorio+"/")
+ except:
+ return _(directorio+" no es un directorio")
+ def home(self,widget=None):
+ os.chdir('/tmp/Compress/Work')
+ Uri.set_text(os.getcwd())
+ Uri.show()
+ self.set_model(self.construir_lista())
+ def copiar_al_diario(self,widget):
+ descripcion = utils.describe_archivo(utils.Archivos)
+ mime = utils.describe_mime(utils.Archivos)
+ if not 'directory' in descripcion:
+ acopiar = datastore.create()
+ acopiar.metadata['title'] = utils.Archivos
+ acopiar.metadata['mime_type'] = mime
+ acopiar.set_file_path(os.getcwd()+"/"+utils.Archivos)
+ datastore.write(acopiar)
+ acopiar.destroy()
+ def errores(self,Evento=None):
+ if Evento == "Copiar":
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=_("Error al intentar copiar: %s "%utils.Archivos))
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+ if Evento == "Cortar":
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=_("Error al intentar cortar: %s "%utils.Archivos))
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+ if Evento == "Pegar_None":
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=_("Error: No hay nada en el portapapeles" ))
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+ if Evento == "Pegar":
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=_("Error al intentar pegar un archivo" ))
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+ if Evento == 'Copiar_a_nada':
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=_("¡Ups! Parece que aún no abrio ningun archivo"))
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+ if Evento == 'Desconocido':
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=_("Error desconocido"))
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+class Canvas_box(Gtk.EventBox):
+ def __init__(self):
+ Gtk.EventBox.__init__(self)
+
+ vbox = Gtk.VBox(False, 8)
+ xhbox = Gtk.HBox()
+ sw = Gtk.ScrolledWindow()
+ sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
+ sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
+
+ xhbox.pack_start(Uri,True,True,0)
+ hbox = Gtk.HBox()
+ vbox.pack_start(xhbox,False,False,0)
+ vbox.pack_start(hbox,True,True,0)
+ Logo = Gtk.Image()
+ Logo.set_from_file('icons/ceibaljam.svg')
+ hbox.pack_start(sw, True, True, 0)
+ sw.add(Canvas())
+ hx = Gtk.HBox()
+ Logo2 = Gtk.Image()
+ Logo.set_tooltip_text('http://www.ceibaljam.org')
+ Logo2.set_from_file('icons/sugarlabs.svg')
+ Logo2.set_tooltip_text('http://www.wiki.sugarlabs.org')
+ self.add(vbox)
+ vbox.pack_start(Hboxx,False,False,0)
+ if Gdk.Screen.width() >= 1200:
+ vbox.pack_start(hx,False,False,0)
+ hx.pack_start(Logo2,True,True,0)
+ hx.pack_start(Logo,True,True,100)
+ else:
+ Uri.set_size_request(int(Gdk.Screen.width()-157.797),int(45.466))
+ Uri.show()
+ LogoChico = Gtk.Image()
+ LogoChico.set_from_file('icons/ceibaljam_chico.svg')
+
+ LogoChico.show()
+ xhbox.pack_start(LogoChico,False,False,0)
+ self.show_all()
+
+if __name__ == "__main__":
+ a = Gtk.Window()
+ a.add(Canvas_box())
+ a.show_all()
+ a.set_title('COMPRESS CANVAS GTK3')
+
+ a.connect('destroy',lambda x: Gtk.main_quit())
+ a.set_size_request(500,500)
+ Gtk.main()
diff --git a/Probar.py b/Probar.py
new file mode 100644
index 0000000..8e69145
--- /dev/null
+++ b/Probar.py
@@ -0,0 +1,6 @@
+import CompressCanvas as C
+import gtk
+a = gtk.Window()
+a.add(C.Canvas_box())
+a.show_all()
+gtk.main()
diff --git a/activity/Compress.svg b/activity/Compress.svg
new file mode 100644
index 0000000..38b475f
--- /dev/null
+++ b/activity/Compress.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><!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 "#ffffff">
+]><svg height="64px" id="svg4657" inkscape:version="0.47 r22583" sodipodi:docname="Compress.svg" style="" version="1.1" width="64px" 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">
+ <defs id="defs4659" style="">
+ <inkscape:perspective id="perspective4665" inkscape:persp3d-origin="32 : 21.333333 : 1" inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4685" inkscape:persp3d-origin="27.5 : 18.333333 : 1" inkscape:vp_x="0 : 27.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="55 : 27.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4712" inkscape:persp3d-origin="27.941999 : 18.408667 : 1" inkscape:vp_x="0 : 27.613001 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="55.883999 : 27.613001 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4729" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4778" inkscape:persp3d-origin="27.5 : 18.333333 : 1" inkscape:vp_x="0 : 27.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="55 : 27.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4795" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ </defs>
+ <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="22.090679" inkscape:cy="29.963115" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="519" inkscape:window-maximized="1" inkscape:window-width="1024" inkscape:window-x="0" inkscape:window-y="27" inkscape:zoom="3.1536515" pagecolor="#ffffff" showgrid="true" style=""/>
+ <metadata id="metadata4662" style="">
+ <rdf:RDF style="">
+ <cc:Work rdf:about="" style="">
+ <dc:format style="">image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" style=""/>
+ <dc:title style=""/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g id="layer5" inkscape:groupmode="layer" inkscape:label="Capa" style="display:inline">
+ <g display="block" id="activity-journal" style="fill:&fill_color;;stroke:&stroke_color;;display:block" transform="translate(-6.1202847,5.0670211)">
+ <path d="M 45.866,44.669 C 45.866,47.18 44.338,49 41.534,49 H 12.077 V 6 h 29.458 c 2.15,0 4.332,2.154 4.332,4.33 l -10e-4,34.339 0,0 z" id="path4762" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ <line id="line4764" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round" x1="21.341" x2="21.341" y1="6.1209998" y2="48.881001"/>
+ <path d="m 7.384,14.464 c 0,0 2.084,0.695 4.17,0.695 2.086,0 4.173,-0.695 4.173,-0.695" id="path4766" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ <path d="m 7.384,28.021 c 0,0 1.912,0.695 4.345,0.695 2.433,0 3.999,-0.695 3.999,-0.695" id="path4768" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ <path d="m 7.384,41.232 c 0,0 1.736,0.695 4.518,0.695 2.781,0 3.825,-0.695 3.825,-0.695" id="path4770" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ </g>
+ </g>
+ <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" style="display:inline">
+ <g display="block" id="emblem-download-7" style="fill:&fill_color;;stroke:&stroke_color;;display:block" transform="matrix(0,0.38979726,-0.58747715,0,64.887812,29.222093)">
+ <g id="Cursor_5_-5" style="fill:&fill_color;;stroke:&stroke_color;">
+ <g id="g4698-7" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4700-9" style="fill:&fill_color;;stroke:&stroke_color;"/>
+ </g>
+ <g id="g4702-6" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4704-4" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round"/>
+ </g>
+ </g>
+ </g>
+ <g display="block" id="emblem-download-7-0" style="fill:&fill_color;;stroke:&stroke_color;;display:block" transform="matrix(0,0.38979726,-0.58747715,0,64.887812,9.9832824)">
+ <g id="Cursor_5_-5-6" style="fill:&fill_color;;stroke:&stroke_color;">
+ <g id="g4698-7-1" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4700-9-0" style="fill:&fill_color;;stroke:&stroke_color;"/>
+ </g>
+ <g id="g4702-6-8" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4704-4-4" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round"/>
+ </g>
+ </g>
+ </g>
+ <text id="text4828" style="font-size:10px;font-style:normal;font-weight:bold;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono Bold" x="21.562305" xml:space="preserve" y="22.777945"><tspan id="tspan4830" sodipodi:role="line" style="fill:&stroke_color;;stroke:none" x="21.562305" y="22.777945">Z</tspan><tspan id="tspan4832" sodipodi:role="line" style="fill:&stroke_color;;stroke:none" x="21.562305" y="35.277946">I</tspan><tspan id="tspan4834" sodipodi:role="line" style="fill:&stroke_color;;stroke:none" x="21.562305" y="47.777946">P</tspan></text>
+ </g>
+</svg> \ No newline at end of file
diff --git a/activity/activity.info b/activity/activity.info
new file mode 100644
index 0000000..d679918
--- /dev/null
+++ b/activity/activity.info
@@ -0,0 +1,8 @@
+[Activity]
+name= Compress
+activity_version = 14
+show_launcher = 1
+bundle_id = org.CeibalJAM.Compress
+exec = sugar-activity Compress.Compress -s
+icon = Compress
+license = GPLv3+
diff --git a/icons/Abrir.svg b/icons/Abrir.svg
new file mode 100644
index 0000000..4b9a417
--- /dev/null
+++ b/icons/Abrir.svg
@@ -0,0 +1,107 @@
+<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="64px"
+ id="svg8341"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="Abrir.svg"
+ version="1.1"
+ width="64px">
+ <defs
+ id="defs8343">
+ <inkscape:perspective
+ id="perspective8349"
+ inkscape:persp3d-origin="32 : 21.333333 : 1"
+ inkscape:vp_x="0 : 32 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="64 : 32 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective8330"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ bordercolor="#666666"
+ borderopacity="1.0"
+ id="base"
+ inkscape:current-layer="layer1"
+ inkscape:cx="-63.272727"
+ inkscape:cy="32"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:window-height="808"
+ inkscape:window-maximized="1"
+ inkscape:window-width="1200"
+ inkscape:window-x="0"
+ inkscape:window-y="30"
+ inkscape:zoom="2.75"
+ pagecolor="#ffffff"
+ showgrid="true" />
+ <metadata
+ id="metadata8346">
+ <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>
+ <g
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <g
+ id="g3663"
+ style="fill:#ffffff;stroke:#000000;stroke-width:4.35602989;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="matrix(1.3553626,0,0,1.3553626,-0.42751947,4.610779)">
+ <g
+ id="layer1-6"
+ inkscape:label="pixmap"
+ style="fill:#ffffff;stroke:#000000;stroke-width:4.35602989;stroke-miterlimit:4;stroke-dasharray:none;display:inline" />
+ <g
+ id="layer2"
+ inkscape:label="vectors"
+ style="fill:#ffffff;stroke:#000000;stroke-width:4.35602989;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
+ <g
+ id="g1197"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ style="fill:#ffffff;stroke:#000000;stroke-width:19.69499015;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="matrix(0.216083,0,0,0.226386,-1.393233,-2.889517)" />
+ <path
+ d="m 5.6160592,4.6665304 c -0.464977,0 -0.815111,0.2352268 -0.815111,0.726723 l 0,33.0209616 c 0,0.727146 0.487105,1.21156 1.149057,1.21156 l 37.7369538,0 c 0.665802,0 0.930308,-0.452766 0.930308,-1.08656 l 0,-28.9028822 c 0,-0.542965 -0.400287,-0.836558 -0.899058,-0.836558 l -19.109324,0 c -0.337013,0 -0.69668,-0.198426 -0.894481,-0.471287 L 21.112173,5.1284784 c -0.217865,-0.300539 -0.642075,-0.461933 -1.013278,-0.461933 l -14.4828358,-1.5e-5 z"
+ id="path895"
+ sodipodi:nodetypes="ccccccccccccc"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.35602989;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <g
+ id="g891"
+ style="fill:#ffffff;stroke:#000000;stroke-width:23.33133314;stroke-miterlimit:4;stroke-dasharray:none"
+ transform="matrix(0.186703,0,0,0.186703,-21.1073,57.62299)" />
+ <path
+ d="m 4.5318272,21.348802 9.9022098,0 c 0.73882,0 1.3626,-0.32487 1.68054,-0.75244 0.13621,-0.183169 1.26301,-1.50364 1.35235,-1.614968 0.29761,-0.370864 0.76988,-0.647433 1.33671,-0.647433 l 25.701781,0 c 1.00281,0 1.50548,0.551272 1.44347,1.231431 l -1.6875,18.510483 c -0.0984,1.079706 -0.70629,1.258089 -1.50597,1.258089 l -37.7760108,0 c -0.79969,0 -1.36827,-0.552195 -1.44348,-1.23143 l -1.625,-14.675898 c -0.1535,-1.386364 0.94834,-2.077834 2.6209,-2.077834 z"
+ id="rect337"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ sodipodi:nodetypes="czzszssssssss"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.35602989;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/icons/Archivo.svg b/icons/Archivo.svg
new file mode 100644
index 0000000..a724766
--- /dev/null
+++ b/icons/Archivo.svg
@@ -0,0 +1,25 @@
+<?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 "#010101">
+ <!ENTITY fill_color "#FFFFFF">
+ ]>
+
+<svg enable-background="new 0 0 55 55" height="55px" version="1.1"
+ viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+
+ <g display="block" id="activity-write">
+ <g display="inline">
+ <g>
+ <path
+ d="M 43.82,6.088 L 22.876,6.088 L 10.932,18.027 L
+ 10.932,48.914 L 43.819,48.914 L 43.82,6.088 z"
+ fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+ </g>
+ <polyline fill="none" points="10.932,18.027 22.876,18.027 22.876,6.088"
+ stroke="&stroke_color;" stroke-width="3.5"/>
+ </g>
+ </g>
+</svg>
diff --git a/icons/Compress.svg b/icons/Compress.svg
new file mode 100644
index 0000000..38b475f
--- /dev/null
+++ b/icons/Compress.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><!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 "#ffffff">
+]><svg height="64px" id="svg4657" inkscape:version="0.47 r22583" sodipodi:docname="Compress.svg" style="" version="1.1" width="64px" 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">
+ <defs id="defs4659" style="">
+ <inkscape:perspective id="perspective4665" inkscape:persp3d-origin="32 : 21.333333 : 1" inkscape:vp_x="0 : 32 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="64 : 32 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4685" inkscape:persp3d-origin="27.5 : 18.333333 : 1" inkscape:vp_x="0 : 27.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="55 : 27.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4712" inkscape:persp3d-origin="27.941999 : 18.408667 : 1" inkscape:vp_x="0 : 27.613001 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="55.883999 : 27.613001 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4729" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4778" inkscape:persp3d-origin="27.5 : 18.333333 : 1" inkscape:vp_x="0 : 27.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="55 : 27.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ <inkscape:perspective id="perspective4795" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_x="0 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="1 : 0.5 : 1" sodipodi:type="inkscape:persp3d" style=""/>
+ </defs>
+ <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="22.090679" inkscape:cy="29.963115" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="519" inkscape:window-maximized="1" inkscape:window-width="1024" inkscape:window-x="0" inkscape:window-y="27" inkscape:zoom="3.1536515" pagecolor="#ffffff" showgrid="true" style=""/>
+ <metadata id="metadata4662" style="">
+ <rdf:RDF style="">
+ <cc:Work rdf:about="" style="">
+ <dc:format style="">image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" style=""/>
+ <dc:title style=""/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g id="layer5" inkscape:groupmode="layer" inkscape:label="Capa" style="display:inline">
+ <g display="block" id="activity-journal" style="fill:&fill_color;;stroke:&stroke_color;;display:block" transform="translate(-6.1202847,5.0670211)">
+ <path d="M 45.866,44.669 C 45.866,47.18 44.338,49 41.534,49 H 12.077 V 6 h 29.458 c 2.15,0 4.332,2.154 4.332,4.33 l -10e-4,34.339 0,0 z" id="path4762" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ <line id="line4764" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round" x1="21.341" x2="21.341" y1="6.1209998" y2="48.881001"/>
+ <path d="m 7.384,14.464 c 0,0 2.084,0.695 4.17,0.695 2.086,0 4.173,-0.695 4.173,-0.695" id="path4766" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ <path d="m 7.384,28.021 c 0,0 1.912,0.695 4.345,0.695 2.433,0 3.999,-0.695 3.999,-0.695" id="path4768" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ <path d="m 7.384,41.232 c 0,0 1.736,0.695 4.518,0.695 2.781,0 3.825,-0.695 3.825,-0.695" id="path4770" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round;stroke-linejoin:round"/>
+ </g>
+ </g>
+ <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" style="display:inline">
+ <g display="block" id="emblem-download-7" style="fill:&fill_color;;stroke:&stroke_color;;display:block" transform="matrix(0,0.38979726,-0.58747715,0,64.887812,29.222093)">
+ <g id="Cursor_5_-5" style="fill:&fill_color;;stroke:&stroke_color;">
+ <g id="g4698-7" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4700-9" style="fill:&fill_color;;stroke:&stroke_color;"/>
+ </g>
+ <g id="g4702-6" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4704-4" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round"/>
+ </g>
+ </g>
+ </g>
+ <g display="block" id="emblem-download-7-0" style="fill:&fill_color;;stroke:&stroke_color;;display:block" transform="matrix(0,0.38979726,-0.58747715,0,64.887812,9.9832824)">
+ <g id="Cursor_5_-5-6" style="fill:&fill_color;;stroke:&stroke_color;">
+ <g id="g4698-7-1" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4700-9-0" style="fill:&fill_color;;stroke:&stroke_color;"/>
+ </g>
+ <g id="g4702-6-8" style="fill:&fill_color;;stroke:&stroke_color;">
+ <path d="m 45.553,21.607 c -1.548,0 -2.946,0.631 -3.96,1.643 L 33.544,31.3 33.543,7.507 C 33.539,6.079 32.994,4.643 31.903,3.548 29.712,1.363 26.165,1.363 23.981,3.548 22.884,4.644 22.342,6.077 22.339,7.509 L 22.337,31.298 14.29,23.25 c -1.012,-1.015 -2.413,-1.643 -3.96,-1.643 -3.094,-10e-4 -5.598,2.511 -5.6,5.603 -0.001,1.546 0.631,2.952 1.636,3.962 l 15.97,15.972 0,0 h 0 l 5.606,5.606 21.573,-21.579 c 1.01,-1.011 1.638,-2.411 1.641,-3.958 10e-4,-3.098 -2.508,-5.607 -5.603,-5.606 z" id="path4704-4-4" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:3.50000000000000000;stroke-linecap:round"/>
+ </g>
+ </g>
+ </g>
+ <text id="text4828" style="font-size:10px;font-style:normal;font-weight:bold;fill:&stroke_color;;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Andale Mono Bold" x="21.562305" xml:space="preserve" y="22.777945"><tspan id="tspan4830" sodipodi:role="line" style="fill:&stroke_color;;stroke:none" x="21.562305" y="22.777945">Z</tspan><tspan id="tspan4832" sodipodi:role="line" style="fill:&stroke_color;;stroke:none" x="21.562305" y="35.277946">I</tspan><tspan id="tspan4834" sodipodi:role="line" style="fill:&stroke_color;;stroke:none" x="21.562305" y="47.777946">P</tspan></text>
+ </g>
+</svg> \ No newline at end of file
diff --git a/icons/audio.svg b/icons/audio.svg
new file mode 100644
index 0000000..489989d
--- /dev/null
+++ b/icons/audio.svg
@@ -0,0 +1,17 @@
+<?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 "#010101">
+ <!ENTITY fill_color "#666666">
+]><svg enable-background="new 0 0 58.5 55" height="55px" version="1.1" viewBox="0 0 58.5 55" width="58.5px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="transfer-from-audio">
+ <g display="inline">
+ <polygon fill="&fill_color;" points="50.056,32.715 50.056,2 8.433,2 8.433,32.715 1.75,34.542 29.252,52.581 56.75,34.543 " stroke="&stroke_color;" stroke-linejoin="round" stroke-width="3.5"/>
+ </g>
+ <g display="inline">
+ <g>
+ <polygon fill="#ffffff" points="18.435,10.583 32.046,10.583 39.811,18.343 39.811,38.42 18.435,38.42 " stroke="&fill_color;" stroke-width="2.275"/>
+ <polyline fill="none" points="39.811,18.343 32.046,18.343 32.046,10.583 " stroke="&fill_color;" stroke-width="2.275"/>
+ </g>
+ </g>
+ <path d="M29.74,32.428 c-0.332-0.946-2.086-0.697-2.866-0.045c-1.56,1.306-0.275,2.857,1.511,2.131C29.401,34.098,30.072,33.377,29.74,32.428z" display="inline" fill="&fill_color;" stroke="&fill_color;" stroke-width="2.275"/>
+ <line display="inline" fill="none" stroke="&fill_color;" stroke-width="1.4625" x1="30.141" x2="30.141" y1="32.499" y2="24.154"/>
+ <polygon display="inline" fill="&fill_color;" points="34.109,22.899 29.424,25.212 29.424,22.698 34.109,20.383 "/>
+</g></svg>
diff --git a/icons/ceibaljam.png b/icons/ceibaljam.png
new file mode 100644
index 0000000..1ee0139
--- /dev/null
+++ b/icons/ceibaljam.png
Binary files differ
diff --git a/icons/ceibaljam.svg b/icons/ceibaljam.svg
new file mode 100644
index 0000000..4f7c410
--- /dev/null
+++ b/icons/ceibaljam.svg
@@ -0,0 +1,212 @@
+<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="250"
+ height="79"
+ id="svg5091"
+ version="1.1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="ceibaljam.svg">
+ <title
+ id="title5172">Isologotipo</title>
+ <defs
+ id="defs5093">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective5099" />
+ <inkscape:perspective
+ id="perspective5055"
+ 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" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="110.60101"
+ inkscape:cy="48.580963"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer_isologotipo"
+ showgrid="false"
+ inkscape:window-width="1904"
+ inkscape:window-height="636"
+ inkscape:window-x="-9"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata5096">
+ <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>Isologotipo</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Alejandro Rodriguez Juele</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>ceibalJAM</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:identifier>org.ceibaljam.isologotipo</dc:identifier>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="isologotipo"
+ inkscape:groupmode="layer"
+ id="layer_isologotipo"
+ transform="translate(2.6118337e-6,-973.36216)">
+ <g
+ transform="matrix(0.75131837,0,0,-0.75131837,-475.63736,1125.3802)"
+ id="terron">
+ <g
+ transform="translate(704.4243,105.6064)"
+ id="g308">
+ <path
+ id="cuerpo"
+ style="fill:#33b540;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0,0 -0.99,0.003 -1.919,0.004 0,3.6 0.009,14.962 0.011,17.995 0,0.004 10e-4,0.008 10e-4,0.012 l 0,33.828 c 0,0.015 -0.002,0.028 -0.002,0.043 l -0.02,20.567 c -0.011,2.332 -1.907,4.212 -4.227,4.202 -1.126,-0.005 -2.185,-0.446 -2.975,-1.246 -0.791,-0.801 -1.225,-1.861 -1.219,-2.987 0,-0.237 0.005,-6.784 0.009,-12.298 l -33.676,0 c -4.574,0 -8.28,-3.708 -8.28,-8.281 l 0,-4.571 -14.856,-0.014 c -2.332,-0.012 -4.209,-1.908 -4.201,-4.229 0.003,-1.124 0.449,-2.183 1.249,-2.976 0.799,-0.789 1.859,-1.223 2.984,-1.216 0.244,0 9.025,0.006 14.824,0.01 l 0,-19.995 c -0.001,-0.036 -0.01,-0.071 -0.01,-0.107 0,-0.306 0.011,-14.614 0.014,-18.737 C -53.222,0.003 -54.211,0 -54.211,0 c -2.373,-0.046 -4.224,-1.973 -4.18,-4.291 0.048,-2.323 1.974,-4.176 4.296,-4.128 l 6.054,0.008 c 2.371,0.043 4.222,1.968 4.176,4.29 l -0.012,13.85 33.539,0 -0.012,-13.85 c -0.046,-2.322 1.809,-4.247 4.177,-4.29 l 6.055,-0.008 C 2.202,-8.467 4.13,-6.614 4.177,-4.291 4.222,-1.973 2.371,-0.046 0,0" />
+ </g>
+ <g
+ transform="translate(671.1978,150.001)"
+ id="g312">
+ <path
+ id="ojo_izq"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0.222,-1.563 -0.865,-3.009 -2.427,-3.23 -1.559,-0.222 -3.005,0.865 -3.228,2.425 -0.221,1.562 0.864,3.008 2.427,3.228 C -1.666,2.646 -0.221,1.56 0,0" />
+ </g>
+ <g
+ transform="translate(686.0581,152.1084)"
+ id="g316">
+ <path
+ id="ojo_der"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0.222,-1.562 -0.866,-3.007 -2.427,-3.229 -1.562,-0.222 -3.006,0.865 -3.23,2.427 -0.22,1.56 0.867,3.007 2.427,3.227 C -1.667,2.647 -0.222,1.561 0,0" />
+ </g>
+ <g
+ transform="translate(689.3911,140.6904)"
+ id="g320">
+ <path
+ id="boca"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 1.399,-8.942 -9.674,-18.043 -17.648,-12.363 -2.683,1.911 -6.94,7.251 -5.409,10.884 0.539,1.277 1.731,0.486 3.024,-0.169 3.092,-1.571 6.768,-1.776 10.066,-0.782 1.68,0.507 3.115,1.325 4.48,2.42 0.83,0.669 3.097,3.333 4.345,2.126 C -0.168,1.175 0,0.004 0,0" />
+ </g>
+ <g
+ transform="translate(647.6968,191.7734)"
+ id="g324">
+ <path
+ id="pelo_claro"
+ style="fill:#33b540;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 4.563,7.816 18.894,7.876 21.489,-1.564 0.873,-3.173 0.799,-10.005 -2.682,-11.855 -1.222,-0.649 -1.647,0.718 -2.236,2.044 -1.406,3.168 -4.127,5.651 -7.313,6.962 C 7.64,-3.744 6.007,-3.472 4.259,-3.461 3.193,-3.454 -0.246,-4.088 -0.454,-2.362 -0.614,-1.021 -0.004,-0.003 0,0" />
+ </g>
+ <g
+ transform="translate(680.9731,172.3496)"
+ id="g328">
+ <path
+ id="pelo_oscuro"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 C -10.007,8.159 -6.93,28.366 6.946,29.94 11.615,30.47 21.224,28.858 23.06,23.544 23.706,21.679 21.688,21.381 19.688,20.843 14.912,19.562 10.813,16.275 8.261,12.077 6.961,9.939 6.219,7.703 5.813,5.241 5.569,3.741 5.703,-1.25 3.227,-1.158 1.301,-1.088 0.003,-0.002 0,0" />
+ </g>
+ </g>
+ <g
+ transform="matrix(1.7849874,0,0,-1.7849889,-1193.7402,1243.0523)"
+ id="logotipo">
+ <g
+ transform="translate(718.2769,124.5498)"
+ id="g332">
+ <path
+ id="path334"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 0,-1.263 c -0.968,1.024 -2.108,1.534 -3.428,1.534 -1.121,0 -2.071,-0.409 -2.848,-1.23 -0.781,-0.817 -1.169,-1.785 -1.169,-2.895 0,-1.112 0.385,-2.085 1.159,-2.918 0.769,-0.833 1.716,-1.252 2.839,-1.252 1.429,0 2.622,0.568 3.575,1.702 l 0,-1.282 c -1.027,-0.897 -2.208,-1.344 -3.543,-1.344 -1.433,0 -2.624,0.491 -3.572,1.471 -0.951,0.983 -1.423,2.191 -1.423,3.623 0,1.416 0.479,2.615 1.442,3.589 0.963,0.974 2.155,1.463 3.574,1.463 1.323,0 2.455,-0.4 3.394,-1.198" />
+ </g>
+ <g
+ transform="translate(720.8501,121.5215)"
+ id="g336">
+ <path
+ id="path338"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 7.487,0 C 7.362,0.9 6.969,1.665 6.31,2.296 5.594,2.965 4.752,3.299 3.784,3.299 2.803,3.299 1.948,2.976 1.217,2.326 0.488,1.676 0.08,0.9 0,0 m 8.454,-0.929 -8.454,0 c -0.031,-1.195 0.327,-2.173 1.069,-2.93 0.744,-0.756 1.684,-1.137 2.822,-1.137 1.5,0 2.644,0.724 3.427,2.164 L 8.12,-3.294 C 7.189,-5.045 5.735,-5.92 3.756,-5.92 c -1.406,0 -2.552,0.504 -3.439,1.517 -0.856,0.965 -1.287,2.16 -1.287,3.577 0,1.401 0.432,2.582 1.29,3.536 0.902,1.011 2.049,1.517 3.446,1.517 1.433,0 2.589,-0.513 3.462,-1.536 0.832,-0.969 1.24,-2.172 1.226,-3.62" />
+ </g>
+ <path
+ id="path340"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 732.889,115.801 -0.968,0 0,9.746 0.968,0 0,-9.746 z m -0.464,13.851 c 0.24,0 0.444,-0.086 0.614,-0.254 0.167,-0.168 0.252,-0.372 0.252,-0.611 0,-0.24 -0.085,-0.442 -0.252,-0.615 -0.17,-0.167 -0.374,-0.25 -0.614,-0.25 -0.238,0 -0.444,0.083 -0.613,0.25 -0.167,0.173 -0.252,0.375 -0.252,0.615 0,0.239 0.085,0.443 0.252,0.611 0.169,0.168 0.375,0.254 0.613,0.254" />
+ <g
+ transform="translate(741.2251,116.5254)"
+ id="g342">
+ <path
+ id="path344"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 1.153,0 2.091,0.426 2.811,1.271 0.686,0.807 1.033,1.788 1.033,2.94 0,1.098 -0.36,2.052 -1.078,2.868 -0.717,0.811 -1.627,1.216 -2.724,1.216 -1.197,0 -2.146,-0.39 -2.843,-1.166 -0.696,-0.778 -1.044,-1.757 -1.044,-2.94 0,-1.164 0.338,-2.146 1.012,-2.936 C -2.112,0.419 -1.168,0 0,0 m -4.732,-0.725 0,17.395 0.965,0 0,-9.34 c 0.866,1.26 2.124,1.893 3.781,1.893 1.44,0 2.602,-0.474 3.479,-1.422 C 4.372,6.853 4.812,5.656 4.812,4.211 4.812,2.753 4.38,1.537 3.517,0.571 2.609,-0.427 1.428,-0.924 -0.029,-0.924 c -0.751,0 -1.472,0.173 -2.166,0.522 -0.695,0.351 -1.216,0.828 -1.572,1.428 l 0,-1.751 -0.965,0 z" />
+ </g>
+ <g
+ transform="translate(752.145,124.8203)"
+ id="g346">
+ <path
+ id="path348"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c -1.078,0 -1.979,-0.408 -2.691,-1.229 -0.716,-0.818 -1.074,-1.772 -1.074,-2.855 0,-1.152 0.343,-2.133 1.029,-2.939 0.73,-0.846 1.663,-1.272 2.799,-1.272 1.193,0 2.14,0.431 2.841,1.293 0.658,0.792 0.988,1.801 0.988,3.023 0,1.138 -0.36,2.086 -1.074,2.843 C 2.104,-0.379 1.166,0 0,0 m 4.812,0.727 0,-9.747 -0.967,0 0,1.751 C 3.493,-7.869 2.968,-8.346 2.273,-8.697 1.581,-9.046 0.859,-9.219 0.109,-9.219 c -1.459,0 -2.63,0.491 -3.513,1.472 -0.885,0.982 -1.328,2.205 -1.328,3.663 0,1.445 0.439,2.642 1.318,3.59 0.877,0.948 2.036,1.422 3.481,1.422 1.656,0 2.913,-0.633 3.778,-1.893 l 0,1.692 0.967,0 z" />
+ </g>
+ <path
+ id="path350"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 761.073,115.801 -0.967,0 0,17.395 0.967,0 0,-17.395 z" />
+ <g
+ transform="translate(767.4019,121.4551)"
+ id="g352">
+ <path
+ id="path354"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 0,7.096 C 0,7.913 0.14,8.521 0.421,8.924 0.703,9.326 1.135,9.527 1.71,9.527 2.28,9.527 2.709,9.326 2.994,8.924 3.28,8.521 3.423,7.913 3.423,7.096 l 0,-8.198 C 3.423,-2.728 3.05,-3.961 2.305,-4.8 1.559,-5.637 0.466,-6.054 -0.968,-6.054 c -1.12,0 -2.051,0.237 -2.792,0.71 -0.742,0.476 -1.113,1.058 -1.113,1.746 0,0.457 0.147,0.835 0.438,1.127 0.291,0.294 0.671,0.443 1.139,0.443 0.295,0 0.676,-0.123 1.145,-0.363 0.464,-0.241 0.807,-0.363 1.027,-0.363 0.405,0 0.693,0.196 0.866,0.591 C -0.087,-1.767 0,-1.047 0,0" />
+ </g>
+ <g
+ transform="translate(776.8813,121.7607)"
+ id="g356">
+ <path
+ id="path358"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 3.58,0 1.851,5.576 0,0 z m -0.966,-3.142 -0.513,-1.511 c -0.167,-0.503 -0.387,-0.886 -0.664,-1.15 -0.279,-0.264 -0.603,-0.396 -0.971,-0.396 -0.476,0 -0.865,0.156 -1.17,0.469 -0.304,0.312 -0.457,0.706 -0.457,1.179 0,0.192 0.014,0.372 0.042,0.536 0.026,0.163 0.067,0.315 0.122,0.454 l 3.899,10.602 c 0.281,0.765 0.632,1.325 1.053,1.685 0.422,0.355 0.942,0.536 1.561,0.536 0.581,0 1.087,-0.171 1.516,-0.513 C 3.881,8.407 4.211,7.917 4.445,7.269 L 8.24,-3.512 C 8.314,-3.74 8.371,-3.942 8.409,-4.12 8.446,-4.298 8.466,-4.457 8.466,-4.593 8.466,-5.066 8.31,-5.454 7.994,-5.753 7.677,-6.05 7.271,-6.199 6.778,-6.199 c -0.438,0 -0.804,0.137 -1.095,0.411 -0.291,0.273 -0.522,0.695 -0.694,1.259 l -0.42,1.387 -5.535,0 z" />
+ </g>
+ <g
+ transform="translate(785.7632,118.4199)"
+ id="g360">
+ <path
+ id="path362"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 1.83,10.216 c 0.151,0.844 0.409,1.445 0.766,1.806 0.362,0.359 0.879,0.541 1.551,0.541 0.639,0 1.151,-0.17 1.542,-0.504 0.392,-0.337 0.672,-0.844 0.845,-1.525 l 2.276,-8.953 2.128,8.974 c 0.159,0.667 0.432,1.167 0.822,1.504 0.393,0.334 0.897,0.504 1.512,0.504 0.707,0 1.25,-0.192 1.627,-0.574 0.376,-0.38 0.639,-1.012 0.783,-1.897 l 1.667,-10.309 c 0.028,-0.149 0.048,-0.297 0.06,-0.435 0.015,-0.141 0.022,-0.267 0.022,-0.377 0,-0.548 -0.157,-0.985 -0.475,-1.305 -0.313,-0.324 -0.731,-0.484 -1.255,-0.484 -0.479,0 -0.859,0.165 -1.141,0.493 -0.282,0.329 -0.463,0.83 -0.545,1.502 L 12.934,8.13 C 12.104,4.549 11.488,2.017 11.087,0.536 10.686,-0.946 10.374,-1.861 10.155,-2.213 10.02,-2.432 9.838,-2.588 9.616,-2.681 9.392,-2.772 9.097,-2.818 8.726,-2.818 c -0.578,0 -1.015,0.13 -1.316,0.39 -0.304,0.261 -0.532,0.704 -0.691,1.326 L 4.506,8.13 3.333,-0.607 C 3.223,-1.382 3.024,-1.945 2.737,-2.295 2.449,-2.646 2.05,-2.818 1.545,-2.818 c -0.502,0 -0.906,0.16 -1.212,0.484 -0.305,0.32 -0.458,0.757 -0.458,1.305 0,0.13 0.011,0.282 0.033,0.459 0.018,0.175 0.05,0.364 0.092,0.57" />
+ </g>
+ <g
+ transform="translate(808.2749,122.6221)"
+ id="g364">
+ <path
+ id="path366"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0,-0.823 -0.136,-1.436 -0.407,-1.836 -0.271,-0.397 -0.685,-0.596 -1.239,-0.596 -0.55,0 -0.963,0.202 -1.237,0.605 -0.274,0.398 -0.411,1.009 -0.411,1.827 l 0,6.2 c 0,0.806 0.137,1.407 0.411,1.803 0.274,0.399 0.687,0.599 1.237,0.599 0.554,0 0.968,-0.199 1.239,-0.593 C -0.136,7.613 0,7.013 0,6.2 L 0,0 z m -3.479,-5.4 c 0,0.517 0.178,0.954 0.536,1.31 0.357,0.353 0.788,0.532 1.297,0.532 0.506,0 0.939,-0.179 1.295,-0.538 0.357,-0.358 0.538,-0.792 0.538,-1.304 0,-0.511 -0.183,-0.95 -0.542,-1.316 -0.362,-0.362 -0.791,-0.546 -1.291,-0.546 -0.509,0 -0.94,0.18 -1.297,0.543 -0.358,0.361 -0.536,0.8 -0.536,1.319" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/icons/ceibaljam_chico.svg b/icons/ceibaljam_chico.svg
new file mode 100644
index 0000000..58cb0bf
--- /dev/null
+++ b/icons/ceibaljam_chico.svg
@@ -0,0 +1,228 @@
+<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="163.8"
+ height="45.5"
+ id="svg5091"
+ version="1.1"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="ceibaljam_chico.svg">
+ <title
+ id="title5172">Isologotipo</title>
+ <defs
+ id="defs5093">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective5099" />
+ <inkscape:perspective
+ id="perspective5055"
+ 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" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8284271"
+ inkscape:cx="110.60101"
+ inkscape:cy="48.580963"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer_isologotipo"
+ showgrid="false"
+ inkscape:window-width="1022"
+ inkscape:window-height="510"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata5096">
+ <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>Isologotipo</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Alejandro Rodriguez Juele</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>ceibalJAM</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:identifier>org.ceibaljam.isologotipo</dc:identifier>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="isologotipo"
+ inkscape:groupmode="layer"
+ id="layer_isologotipo"
+ transform="translate(2.6118337e-6,-1006.8622)">
+ <g
+ transform="matrix(0.43219167,0,0,-0.43219167,-272.6077,1094.3654)"
+ id="terron">
+ <g
+ transform="translate(704.4243,105.6064)"
+ id="g308">
+ <path
+ id="cuerpo"
+ style="fill:#33b540;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0,0 -0.99,0.003 -1.919,0.004 0,3.6 0.009,14.962 0.011,17.995 0,0.004 10e-4,0.008 10e-4,0.012 l 0,33.828 c 0,0.015 -0.002,0.028 -0.002,0.043 l -0.02,20.567 c -0.011,2.332 -1.907,4.212 -4.227,4.202 -1.126,-0.005 -2.185,-0.446 -2.975,-1.246 -0.791,-0.801 -1.225,-1.861 -1.219,-2.987 0,-0.237 0.005,-6.784 0.009,-12.298 l -33.676,0 c -4.574,0 -8.28,-3.708 -8.28,-8.281 l 0,-4.571 -14.856,-0.014 c -2.332,-0.012 -4.209,-1.908 -4.201,-4.229 0.003,-1.124 0.449,-2.183 1.249,-2.976 0.799,-0.789 1.859,-1.223 2.984,-1.216 0.244,0 9.025,0.006 14.824,0.01 l 0,-19.995 c -0.001,-0.036 -0.01,-0.071 -0.01,-0.107 0,-0.306 0.011,-14.614 0.014,-18.737 C -53.222,0.003 -54.211,0 -54.211,0 c -2.373,-0.046 -4.224,-1.973 -4.18,-4.291 0.048,-2.323 1.974,-4.176 4.296,-4.128 l 6.054,0.008 c 2.371,0.043 4.222,1.968 4.176,4.29 l -0.012,13.85 33.539,0 -0.012,-13.85 c -0.046,-2.322 1.809,-4.247 4.177,-4.29 l 6.055,-0.008 C 2.202,-8.467 4.13,-6.614 4.177,-4.291 4.222,-1.973 2.371,-0.046 0,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(671.1978,150.001)"
+ id="g312">
+ <path
+ id="ojo_izq"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0.222,-1.563 -0.865,-3.009 -2.427,-3.23 -1.559,-0.222 -3.005,0.865 -3.228,2.425 -0.221,1.562 0.864,3.008 2.427,3.228 C -1.666,2.646 -0.221,1.56 0,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(686.0581,152.1084)"
+ id="g316">
+ <path
+ id="ojo_der"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0.222,-1.562 -0.866,-3.007 -2.427,-3.229 -1.562,-0.222 -3.006,0.865 -3.23,2.427 -0.22,1.56 0.867,3.007 2.427,3.227 C -1.667,2.647 -0.222,1.561 0,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(689.3911,140.6904)"
+ id="g320">
+ <path
+ id="boca"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 1.399,-8.942 -9.674,-18.043 -17.648,-12.363 -2.683,1.911 -6.94,7.251 -5.409,10.884 0.539,1.277 1.731,0.486 3.024,-0.169 3.092,-1.571 6.768,-1.776 10.066,-0.782 1.68,0.507 3.115,1.325 4.48,2.42 0.83,0.669 3.097,3.333 4.345,2.126 C -0.168,1.175 0,0.004 0,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(647.6968,191.7734)"
+ id="g324">
+ <path
+ id="pelo_claro"
+ style="fill:#33b540;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 4.563,7.816 18.894,7.876 21.489,-1.564 0.873,-3.173 0.799,-10.005 -2.682,-11.855 -1.222,-0.649 -1.647,0.718 -2.236,2.044 -1.406,3.168 -4.127,5.651 -7.313,6.962 C 7.64,-3.744 6.007,-3.472 4.259,-3.461 3.193,-3.454 -0.246,-4.088 -0.454,-2.362 -0.614,-1.021 -0.004,-0.003 0,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(680.9731,172.3496)"
+ id="g328">
+ <path
+ id="pelo_oscuro"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 C -10.007,8.159 -6.93,28.366 6.946,29.94 11.615,30.47 21.224,28.858 23.06,23.544 23.706,21.679 21.688,21.381 19.688,20.843 14.912,19.562 10.813,16.275 8.261,12.077 6.961,9.939 6.219,7.703 5.813,5.241 5.569,3.741 5.703,-1.25 3.227,-1.158 1.301,-1.088 0.003,-0.002 0,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ transform="matrix(1.2396646,0,0,-1.2396657,-841.62487,1195.3702)"
+ id="logotipo">
+ <g
+ transform="translate(718.2769,124.5498)"
+ id="g332">
+ <path
+ id="path334"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 0,-1.263 c -0.968,1.024 -2.108,1.534 -3.428,1.534 -1.121,0 -2.071,-0.409 -2.848,-1.23 -0.781,-0.817 -1.169,-1.785 -1.169,-2.895 0,-1.112 0.385,-2.085 1.159,-2.918 0.769,-0.833 1.716,-1.252 2.839,-1.252 1.429,0 2.622,0.568 3.575,1.702 l 0,-1.282 c -1.027,-0.897 -2.208,-1.344 -3.543,-1.344 -1.433,0 -2.624,0.491 -3.572,1.471 -0.951,0.983 -1.423,2.191 -1.423,3.623 0,1.416 0.479,2.615 1.442,3.589 0.963,0.974 2.155,1.463 3.574,1.463 1.323,0 2.455,-0.4 3.394,-1.198"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(720.8501,121.5215)"
+ id="g336">
+ <path
+ id="path338"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 7.487,0 C 7.362,0.9 6.969,1.665 6.31,2.296 5.594,2.965 4.752,3.299 3.784,3.299 2.803,3.299 1.948,2.976 1.217,2.326 0.488,1.676 0.08,0.9 0,0 m 8.454,-0.929 -8.454,0 c -0.031,-1.195 0.327,-2.173 1.069,-2.93 0.744,-0.756 1.684,-1.137 2.822,-1.137 1.5,0 2.644,0.724 3.427,2.164 L 8.12,-3.294 C 7.189,-5.045 5.735,-5.92 3.756,-5.92 c -1.406,0 -2.552,0.504 -3.439,1.517 -0.856,0.965 -1.287,2.16 -1.287,3.577 0,1.401 0.432,2.582 1.29,3.536 0.902,1.011 2.049,1.517 3.446,1.517 1.433,0 2.589,-0.513 3.462,-1.536 0.832,-0.969 1.24,-2.172 1.226,-3.62"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ id="path340"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 732.889,115.801 -0.968,0 0,9.746 0.968,0 0,-9.746 z m -0.464,13.851 c 0.24,0 0.444,-0.086 0.614,-0.254 0.167,-0.168 0.252,-0.372 0.252,-0.611 0,-0.24 -0.085,-0.442 -0.252,-0.615 -0.17,-0.167 -0.374,-0.25 -0.614,-0.25 -0.238,0 -0.444,0.083 -0.613,0.25 -0.167,0.173 -0.252,0.375 -0.252,0.615 0,0.239 0.085,0.443 0.252,0.611 0.169,0.168 0.375,0.254 0.613,0.254"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(741.2251,116.5254)"
+ id="g342">
+ <path
+ id="path344"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 1.153,0 2.091,0.426 2.811,1.271 0.686,0.807 1.033,1.788 1.033,2.94 0,1.098 -0.36,2.052 -1.078,2.868 -0.717,0.811 -1.627,1.216 -2.724,1.216 -1.197,0 -2.146,-0.39 -2.843,-1.166 -0.696,-0.778 -1.044,-1.757 -1.044,-2.94 0,-1.164 0.338,-2.146 1.012,-2.936 C -2.112,0.419 -1.168,0 0,0 m -4.732,-0.725 0,17.395 0.965,0 0,-9.34 c 0.866,1.26 2.124,1.893 3.781,1.893 1.44,0 2.602,-0.474 3.479,-1.422 C 4.372,6.853 4.812,5.656 4.812,4.211 4.812,2.753 4.38,1.537 3.517,0.571 2.609,-0.427 1.428,-0.924 -0.029,-0.924 c -0.751,0 -1.472,0.173 -2.166,0.522 -0.695,0.351 -1.216,0.828 -1.572,1.428 l 0,-1.751 -0.965,0 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(752.145,124.8203)"
+ id="g346">
+ <path
+ id="path348"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c -1.078,0 -1.979,-0.408 -2.691,-1.229 -0.716,-0.818 -1.074,-1.772 -1.074,-2.855 0,-1.152 0.343,-2.133 1.029,-2.939 0.73,-0.846 1.663,-1.272 2.799,-1.272 1.193,0 2.14,0.431 2.841,1.293 0.658,0.792 0.988,1.801 0.988,3.023 0,1.138 -0.36,2.086 -1.074,2.843 C 2.104,-0.379 1.166,0 0,0 m 4.812,0.727 0,-9.747 -0.967,0 0,1.751 C 3.493,-7.869 2.968,-8.346 2.273,-8.697 1.581,-9.046 0.859,-9.219 0.109,-9.219 c -1.459,0 -2.63,0.491 -3.513,1.472 -0.885,0.982 -1.328,2.205 -1.328,3.663 0,1.445 0.439,2.642 1.318,3.59 0.877,0.948 2.036,1.422 3.481,1.422 1.656,0 2.913,-0.633 3.778,-1.893 l 0,1.692 0.967,0 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ id="path350"
+ style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 761.073,115.801 -0.967,0 0,17.395 0.967,0 0,-17.395 z"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(767.4019,121.4551)"
+ id="g352">
+ <path
+ id="path354"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 0,7.096 C 0,7.913 0.14,8.521 0.421,8.924 0.703,9.326 1.135,9.527 1.71,9.527 2.28,9.527 2.709,9.326 2.994,8.924 3.28,8.521 3.423,7.913 3.423,7.096 l 0,-8.198 C 3.423,-2.728 3.05,-3.961 2.305,-4.8 1.559,-5.637 0.466,-6.054 -0.968,-6.054 c -1.12,0 -2.051,0.237 -2.792,0.71 -0.742,0.476 -1.113,1.058 -1.113,1.746 0,0.457 0.147,0.835 0.438,1.127 0.291,0.294 0.671,0.443 1.139,0.443 0.295,0 0.676,-0.123 1.145,-0.363 0.464,-0.241 0.807,-0.363 1.027,-0.363 0.405,0 0.693,0.196 0.866,0.591 C -0.087,-1.767 0,-1.047 0,0"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(776.8813,121.7607)"
+ id="g356">
+ <path
+ id="path358"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 3.58,0 1.851,5.576 0,0 z m -0.966,-3.142 -0.513,-1.511 c -0.167,-0.503 -0.387,-0.886 -0.664,-1.15 -0.279,-0.264 -0.603,-0.396 -0.971,-0.396 -0.476,0 -0.865,0.156 -1.17,0.469 -0.304,0.312 -0.457,0.706 -0.457,1.179 0,0.192 0.014,0.372 0.042,0.536 0.026,0.163 0.067,0.315 0.122,0.454 l 3.899,10.602 c 0.281,0.765 0.632,1.325 1.053,1.685 0.422,0.355 0.942,0.536 1.561,0.536 0.581,0 1.087,-0.171 1.516,-0.513 C 3.881,8.407 4.211,7.917 4.445,7.269 L 8.24,-3.512 C 8.314,-3.74 8.371,-3.942 8.409,-4.12 8.446,-4.298 8.466,-4.457 8.466,-4.593 8.466,-5.066 8.31,-5.454 7.994,-5.753 7.677,-6.05 7.271,-6.199 6.778,-6.199 c -0.438,0 -0.804,0.137 -1.095,0.411 -0.291,0.273 -0.522,0.695 -0.694,1.259 l -0.42,1.387 -5.535,0 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(785.7632,118.4199)"
+ id="g360">
+ <path
+ id="path362"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 1.83,10.216 c 0.151,0.844 0.409,1.445 0.766,1.806 0.362,0.359 0.879,0.541 1.551,0.541 0.639,0 1.151,-0.17 1.542,-0.504 0.392,-0.337 0.672,-0.844 0.845,-1.525 l 2.276,-8.953 2.128,8.974 c 0.159,0.667 0.432,1.167 0.822,1.504 0.393,0.334 0.897,0.504 1.512,0.504 0.707,0 1.25,-0.192 1.627,-0.574 0.376,-0.38 0.639,-1.012 0.783,-1.897 l 1.667,-10.309 c 0.028,-0.149 0.048,-0.297 0.06,-0.435 0.015,-0.141 0.022,-0.267 0.022,-0.377 0,-0.548 -0.157,-0.985 -0.475,-1.305 -0.313,-0.324 -0.731,-0.484 -1.255,-0.484 -0.479,0 -0.859,0.165 -1.141,0.493 -0.282,0.329 -0.463,0.83 -0.545,1.502 L 12.934,8.13 C 12.104,4.549 11.488,2.017 11.087,0.536 10.686,-0.946 10.374,-1.861 10.155,-2.213 10.02,-2.432 9.838,-2.588 9.616,-2.681 9.392,-2.772 9.097,-2.818 8.726,-2.818 c -0.578,0 -1.015,0.13 -1.316,0.39 -0.304,0.261 -0.532,0.704 -0.691,1.326 L 4.506,8.13 3.333,-0.607 C 3.223,-1.382 3.024,-1.945 2.737,-2.295 2.449,-2.646 2.05,-2.818 1.545,-2.818 c -0.502,0 -0.906,0.16 -1.212,0.484 -0.305,0.32 -0.458,0.757 -0.458,1.305 0,0.13 0.011,0.282 0.033,0.459 0.018,0.175 0.05,0.364 0.092,0.57"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(808.2749,122.6221)"
+ id="g364">
+ <path
+ id="path366"
+ style="fill:#b92635;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0,-0.823 -0.136,-1.436 -0.407,-1.836 -0.271,-0.397 -0.685,-0.596 -1.239,-0.596 -0.55,0 -0.963,0.202 -1.237,0.605 -0.274,0.398 -0.411,1.009 -0.411,1.827 l 0,6.2 c 0,0.806 0.137,1.407 0.411,1.803 0.274,0.399 0.687,0.599 1.237,0.599 0.554,0 0.968,-0.199 1.239,-0.593 C -0.136,7.613 0,7.013 0,6.2 L 0,0 z m -3.479,-5.4 c 0,0.517 0.178,0.954 0.536,1.31 0.357,0.353 0.788,0.532 1.297,0.532 0.506,0 0.939,-0.179 1.295,-0.538 0.357,-0.358 0.538,-0.792 0.538,-1.304 0,-0.511 -0.183,-0.95 -0.542,-1.316 -0.362,-0.362 -0.791,-0.546 -1.291,-0.546 -0.509,0 -0.94,0.18 -1.297,0.543 -0.358,0.361 -0.536,0.8 -0.536,1.319"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/icons/imagen.svg b/icons/imagen.svg
new file mode 100644
index 0000000..b1b485f
--- /dev/null
+++ b/icons/imagen.svg
@@ -0,0 +1,16 @@
+<?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 "#010101">
+ <!ENTITY fill_color "#666666">
+]><svg enable-background="new 0 0 58.5 55" height="55px" version="1.1" viewBox="0 0 58.5 55" width="58.5px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="transfer-from-image">
+ <g display="inline">
+ <polygon fill="&fill_color;" points="50.056,32.715 50.056,2 8.433,2 8.433,32.715 1.75,34.542 29.252,52.581 56.75,34.543 " stroke="&stroke_color;" stroke-linejoin="round" stroke-width="3.5"/>
+ </g>
+ <g display="inline">
+ <g>
+ <polygon fill="#ffffff" points="43.041,35.189 43.041,21.577 35.281,13.812 15.204,13.812 15.204,35.189 " stroke="&fill_color;" stroke-width="2.275"/>
+ <polyline fill="none" points="35.281,13.812 35.281,21.577 43.041,21.577 " stroke="&fill_color;" stroke-width="2.275"/>
+ </g>
+ </g>
+ <path d="M29.206,21.798c-4.067,0-7.456,4.056-7.456,4.056s3.389,4.076,7.456,4.074 c4.069-0.004,7.458-4.078,7.458-4.078S33.275,21.795,29.206,21.798z M29.206,28.715c-1.575,0-2.852-1.277-2.852-2.853 c0-1.572,1.277-2.852,2.852-2.852c1.573,0,2.85,1.28,2.85,2.852C32.056,27.438,30.779,28.715,29.206,28.715z" display="inline" fill="&fill_color;"/>
+ <circle cx="29.207" cy="25.863" display="inline" fill="&fill_color;" r="1.294"/>
+</g></svg>
diff --git a/icons/open-from-journal.svg b/icons/open-from-journal.svg
new file mode 100644
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/sugarlabs.svg b/icons/sugarlabs.svg
new file mode 100644
index 0000000..86caf0d
--- /dev/null
+++ b/icons/sugarlabs.svg
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+
+<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.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="260.70001"
+ height="56.16"
+ viewBox="0 0 260.70001 56.159999"
+ enable-background="new 0 0 458.555 97.398"
+ xml:space="preserve"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="sugarlabs.svg"><metadata
+ id="metadata47"><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="defs45"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 48.699001 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="458.55499 : 48.699001 : 1"
+ inkscape:persp3d-origin="229.2775 : 32.466001 : 1"
+ id="perspective49" /></defs><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1567"
+ inkscape:window-height="638"
+ id="namedview43"
+ showgrid="false"
+ inkscape:zoom="1"
+ inkscape:cx="408.10999"
+ inkscape:cy="48.699001"
+ inkscape:window-x="161"
+ inkscape:window-y="88"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1" />
+<g
+ id="g3"
+ transform="matrix(0.5663399,0,0,0.5663399,0.99675819,0.00400058)">
+ <g
+ id="g5">
+ <path
+ d="m 21.118,77.072 c -11.052,0 -21.119,-5.5 -21.119,-11.539 0,-3.157 2.303,-5.63 5.244,-5.63 2.022,0 3.719,1.183 5.515,2.435 2.592,1.809 5.529,3.855 10.651,3.855 5.139,0 8.21,-2.647 8.21,-5.209 0,-3.416 -5.271,-5.607 -10.852,-7.927 C 10.968,49.814 2.128,46.139 2.128,37.171 c 0,-10.573 9.933,-16.279 19.28,-16.279 7.89,0 18.895,4.132 18.895,10.86 0,2.526 -1.763,5.244 -5.632,5.244 -2.068,0 -3.558,-1.125 -4.997,-2.212 -1.872,-1.414 -3.994,-3.015 -8.266,-3.015 -1.209,0 -7.242,0.227 -7.242,4.726 0,2.729 4.879,4.613 10.044,6.608 7.772,3.001 17.446,6.739 17.446,16.333 0.002,12.117 -10.646,17.636 -20.538,17.636 l 0,0 z"
+ id="path7"
+ style="fill:#033cd2" />
+ <path
+ d="m 21.41,22.651 c 7.066,0 17.134,3.775 17.134,9.099 0,1.839 -1.259,3.484 -3.873,3.484 -3.677,0 -5.13,-5.227 -13.261,-5.227 -4.84,0 -9.002,2.129 -9.002,6.485 0,9.002 27.491,8.035 27.491,22.941 0,10.746 -9.196,15.877 -18.779,15.877 -10.842,0 -19.359,-5.422 -19.359,-9.779 0,-2.321 1.645,-3.87 3.484,-3.87 3.775,0 6.873,6.291 16.166,6.291 6.195,0 9.97,-3.484 9.97,-6.97 C 31.381,50.916 3.89,51.496 3.89,37.17 3.889,27.685 12.795,22.651 21.41,22.651 m 0,-3.52 c -10.2,0 -21.041,6.323 -21.041,18.04 0,10.142 9.828,14.228 17.724,17.511 4.578,1.903 9.767,4.061 9.767,6.302 0,1.41 -2.297,3.45 -6.45,3.45 -4.569,0 -7.15,-1.801 -9.646,-3.541 -1.939,-1.353 -3.944,-2.75 -6.52,-2.75 -3.928,0 -7.004,3.246 -7.004,7.39 0,7.085 10.691,13.299 22.879,13.299 10.74,0 22.299,-6.069 22.299,-19.396 0,-10.802 -10.733,-14.947 -18.57,-17.974 -3.337,-1.289 -8.921,-3.445 -8.921,-4.968 0,-2.822 4.567,-2.965 5.482,-2.965 3.682,0 5.393,1.292 7.205,2.66 1.593,1.203 3.398,2.566 6.057,2.566 4.284,0 7.393,-2.946 7.393,-7.004 C 42.063,23.625 29.851,19.131 21.41,19.131 l 0,0 z"
+ id="path9"
+ style="fill:#78e600" />
+ </g>
+ <g
+ id="g11">
+ <path
+ d="m 75.714,77.072 c -10.726,0 -22.187,-5.854 -22.187,-22.281 v -27.59 c 0,-3.773 2.418,-6.309 6.02,-6.309 3.602,0 6.021,2.536 6.021,6.309 V 54.5 c 0,7.979 3.224,11.693 10.146,11.693 6.922,0 10.146,-3.715 10.146,-11.693 V 27.201 c 0,-3.773 2.418,-6.309 6.02,-6.309 3.6,0 6.018,2.536 6.018,6.309 v 27.59 c 0,16.427 -11.46,22.281 -22.184,22.281 l 0,0 z"
+ id="path13"
+ style="fill:#033cd2" />
+ <path
+ d="m 91.879,22.651 c 2.613,0 4.259,1.743 4.259,4.549 v 27.59 c 0,15.101 -10.068,20.522 -20.425,20.522 -10.357,0 -20.425,-5.422 -20.425,-20.522 V 27.201 c 0,-2.807 1.646,-4.549 4.26,-4.549 2.613,0 4.259,1.743 4.259,4.549 V 54.5 c 0,8.809 3.872,13.454 11.907,13.454 8.035,0 11.906,-4.646 11.906,-13.454 V 27.201 c 0,-2.807 1.645,-4.55 4.259,-4.55 m 0,-3.52 c -4.581,0 -7.78,3.318 -7.78,8.069 v 27.3 c 0,8.754 -4.239,9.935 -8.386,9.935 -4.147,0 -8.387,-1.181 -8.387,-9.935 V 27.201 c 0,-4.751 -3.199,-8.069 -7.779,-8.069 -4.581,0 -7.78,3.318 -7.78,8.069 V 54.79 c 0,17.727 12.37,24.042 23.945,24.042 11.575,0 23.945,-6.315 23.945,-24.042 V 27.201 c 0.001,-4.751 -3.198,-8.07 -7.778,-8.07 l 0,0 z"
+ id="path15"
+ style="fill:#78e600" />
+ </g>
+ <g
+ id="g17">
+ <path
+ d="m 133.6,97.399 c -8.493,0 -21.509,-4.994 -21.509,-11.149 0,-2.758 1.671,-5.729 5.342,-5.729 2.021,0 3.766,1.074 5.785,2.317 2.804,1.728 5.981,3.683 11.059,3.683 10.827,0 12.215,-9.426 12.273,-13.816 -3.037,2.818 -7.039,4.37 -11.498,4.37 -16.028,0 -24.414,-14.133 -24.414,-28.092 0,-13.959 8.386,-28.09 24.414,-28.09 4.424,0 8.692,1.905 11.688,4.32 0.654,-2.638 2.95,-4.32 6.122,-4.32 2.778,0 5.731,2.077 5.731,5.923 v 44.237 c 0,16.003 -9.811,26.346 -24.993,26.346 l 0,0 z m 1.452,-65.629 c -9.132,0 -12.372,9.271 -12.372,17.212 0,7.941 3.24,17.211 12.372,17.211 9.13,0 12.371,-9.271 12.371,-17.211 0,-7.94 -3.241,-17.212 -12.371,-17.212 l 0,0 z"
+ id="path19"
+ style="fill:#033cd2" />
+ <path
+ d="m 152.862,22.651 c 1.645,0 3.969,1.162 3.969,4.163 v 44.237 c 0,15.294 -9.293,24.587 -23.232,24.587 -8.809,0 -19.747,-5.033 -19.747,-9.389 0,-1.742 0.872,-3.969 3.582,-3.969 3.872,0 7.648,6.001 16.843,6.001 10.843,0 14.037,-8.519 14.037,-15.875 v -4.453 h -0.194 c -2.614,4.453 -7.261,7.358 -13.068,7.358 -14.52,0 -22.651,-12.682 -22.651,-26.331 0,-13.649 8.131,-26.33 22.651,-26.33 5.517,0 10.841,3.388 13.068,6.486 h 0.194 v -2.324 c -0.001,-2.999 2.225,-4.161 4.548,-4.161 m -17.811,45.303 c 10.454,0 14.132,-10.26 14.132,-18.972 0,-8.712 -3.679,-18.973 -14.132,-18.973 -10.455,0 -14.133,10.261 -14.133,18.973 0,8.712 3.678,18.972 14.133,18.972 m 17.811,-48.823 c -3.035,0 -5.485,1.289 -6.859,3.399 -3.083,-1.981 -6.961,-3.399 -10.952,-3.399 -17.182,0 -26.171,15.017 -26.171,29.85 0,14.833 8.99,29.85 26.171,29.85 3.423,0 6.604,-0.83 9.352,-2.385 -0.846,4.075 -3.355,8.315 -10.127,8.315 -4.579,0 -7.53,-1.818 -10.134,-3.422 -2.154,-1.326 -4.188,-2.579 -6.708,-2.579 -4.115,0 -7.102,3.149 -7.102,7.488 0,7.488 13.898,12.908 23.267,12.908 7.882,0 14.584,-2.642 19.383,-7.64 4.821,-5.022 7.37,-12.1 7.37,-20.467 V 26.814 c -0.001,-4.99 -3.859,-7.683 -7.49,-7.683 l 0,0 z m -17.811,45.303 c -10.101,0 -10.613,-12.872 -10.613,-15.453 0,-2.581 0.512,-15.453 10.613,-15.453 10.101,0 10.612,12.873 10.612,15.453 0,2.58 -0.511,15.453 -10.612,15.453 l 0,0 z"
+ id="path21"
+ style="fill:#78e600" />
+ </g>
+ <g
+ id="g23">
+ <path
+ d="m 214.331,77.072 c -2.625,0 -5.279,-1.729 -5.68,-5.044 -3.492,3.314 -7.752,5.044 -12.52,5.044 -16.026,0 -24.411,-14.131 -24.411,-28.091 0,-13.958 8.385,-28.089 24.411,-28.089 4.755,0 8.745,1.484 12.563,4.743 0.52,-3.119 3.091,-4.743 5.636,-4.743 2.776,0 5.727,2.076 5.727,5.923 v 44.334 c 0.001,3.847 -2.95,5.923 -5.726,5.923 l 0,0 z M 196.132,31.768 c -9.132,0 -12.373,9.273 -12.373,17.212 0,7.94 3.241,17.212 12.373,17.212 9.133,0 12.373,-9.272 12.373,-17.212 0,-7.939 -3.24,-17.212 -12.373,-17.212 l 0,0 z"
+ id="path25"
+ style="fill:#033cd2" />
+ <path
+ d="m 214.331,22.651 c 1.645,0 3.967,1.162 3.967,4.163 v 44.334 c 0,3.002 -2.322,4.164 -3.967,4.164 -1.743,0 -3.97,-1.162 -3.97,-4.164 v -3.581 h -0.193 c -3.678,5.228 -8.518,7.745 -14.036,7.745 -14.521,0 -22.651,-12.682 -22.651,-26.331 0,-13.649 8.13,-26.33 22.651,-26.33 5.905,0 10.067,2.516 14.036,6.873 h 0.193 v -2.71 c 0,-3.001 2.227,-4.163 3.97,-4.163 m -18.199,45.303 c 10.454,0 14.133,-10.26 14.133,-18.972 0,-8.712 -3.679,-18.973 -14.133,-18.973 -10.455,0 -14.133,10.261 -14.133,18.973 0,8.712 3.678,18.972 14.133,18.972 m 18.199,-48.823 c -2.479,0 -5.063,1.254 -6.454,3.637 -3.564,-2.488 -7.348,-3.637 -11.745,-3.637 -17.181,0 -26.171,15.017 -26.171,29.85 0,14.833 8.99,29.85 26.171,29.85 4.331,0 8.272,-1.291 11.662,-3.784 1.37,2.479 4.009,3.784 6.538,3.784 3.63,0 7.487,-2.692 7.487,-7.684 V 26.814 c -10e-4,-4.99 -3.858,-7.683 -7.488,-7.683 l 0,0 z m -18.199,45.303 c -10.102,0 -10.613,-12.872 -10.613,-15.453 0,-2.581 0.512,-15.453 10.613,-15.453 10.101,0 10.613,12.873 10.613,15.453 0,2.58 -0.512,15.453 -10.613,15.453 l 0,0 z"
+ id="path27"
+ style="fill:#78e600" />
+ </g>
+ <g
+ id="g29">
+ <path
+ d="m 241.048,77.072 c -3.601,0 -6.02,-2.536 -6.02,-6.311 v -43.56 c 0,-3.774 2.419,-6.309 6.02,-6.309 3.289,0 5.593,2.118 5.965,5.361 2.537,-2.849 6.103,-5.361 10.104,-5.361 3.768,0 6.503,2.572 6.503,6.115 0,2.326 -1.173,5.322 -6.76,6.375 -2.962,0.514 -9.794,2.787 -9.794,12.889 v 24.49 c 0,3.775 -2.419,6.311 -6.018,6.311 l 0,0 z"
+ id="path31"
+ style="fill:#033cd2" />
+ <path
+ d="m 257.116,22.651 c 3,0 4.744,1.936 4.744,4.355 0,2.42 -1.744,3.97 -5.326,4.647 -5.033,0.871 -11.228,4.646 -11.228,14.617 v 24.491 c 0,2.808 -1.646,4.551 -4.259,4.551 -2.615,0 -4.26,-1.743 -4.26,-4.551 v -43.56 c 0,-2.807 1.645,-4.549 4.26,-4.549 2.613,0 4.259,1.743 4.259,4.549 v 4.356 h 0.194 c 1.936,-3.969 6.679,-8.906 11.616,-8.906 m 0,-3.52 c -3.515,0 -6.709,1.664 -9.283,3.875 -1.286,-2.396 -3.728,-3.875 -6.785,-3.875 -4.581,0 -7.779,3.318 -7.779,8.069 v 43.561 c 0,4.752 3.198,8.07 7.779,8.07 4.58,0 7.778,-3.318 7.778,-8.07 v -24.49 c 0,-8.449 5.206,-10.611 8.309,-11.148 0.018,-0.003 0.035,-0.006 0.054,-0.01 7.128,-1.348 8.191,-5.657 8.191,-8.105 0,-4.565 -3.475,-7.877 -8.264,-7.877 l 0,0 z"
+ id="path33"
+ style="fill:#78e600" />
+ </g>
+ <path
+ d="m 283.057,70.761 c 0,2.808 -1.646,4.551 -4.259,4.551 -2.614,0 -4.26,-1.743 -4.26,-4.551 V 4.55 c 0,-2.808 1.646,-4.55 4.26,-4.55 2.613,0 4.259,1.743 4.259,4.55 v 66.211 z"
+ id="path35"
+ style="fill:#969696" />
+ <path
+ d="m 344.138,71.148 c 0,3.002 -2.324,4.164 -3.969,4.164 -1.742,0 -3.969,-1.162 -3.969,-4.164 v -3.581 h -0.193 c -3.68,5.228 -8.52,7.745 -14.037,7.745 -14.52,0 -22.65,-12.682 -22.65,-26.331 0,-13.649 8.131,-26.33 22.65,-26.33 5.906,0 10.067,2.516 14.037,6.873 h 0.193 v -2.71 c 0,-3.001 2.227,-4.163 3.969,-4.163 1.645,0 3.969,1.162 3.969,4.163 V 71.148 z M 321.97,67.954 c 10.455,0 14.133,-10.26 14.133,-18.972 0,-8.712 -3.678,-18.973 -14.133,-18.973 -10.453,0 -14.132,10.261 -14.132,18.973 0,8.712 3.679,18.972 14.132,18.972 z"
+ id="path37"
+ style="fill:#969696" />
+ <path
+ d="m 363.013,4.55 c 0,-2.808 1.646,-4.55 4.26,-4.55 2.614,0 4.26,1.743 4.26,4.55 v 25.07 h 0.192 c 2.227,-3.194 6.97,-6.969 13.745,-6.969 13.941,0 21.975,12.681 21.975,26.33 0,13.649 -8.033,26.331 -21.975,26.331 -6.775,0 -11.324,-2.421 -13.745,-7.068 h -0.192 v 2.518 c 0,2.808 -1.646,4.551 -4.26,4.551 -2.614,0 -4.26,-1.743 -4.26,-4.551 V 4.55 z m 21.781,63.404 c 10.453,0 14.131,-10.26 14.131,-18.972 0,-8.712 -3.678,-18.973 -14.131,-18.973 -10.455,0 -14.135,10.261 -14.135,18.973 0,8.712 3.68,18.972 14.135,18.972 z"
+ id="path39"
+ style="fill:#969696" />
+ <path
+ d="m 440.065,22.651 c 7.066,0 17.135,3.775 17.135,9.099 0,1.839 -1.26,3.484 -3.873,3.484 -3.678,0 -5.13,-5.227 -13.262,-5.227 -4.84,0 -9.002,2.129 -9.002,6.485 0,9.002 27.491,8.035 27.491,22.941 0,10.746 -9.196,15.877 -18.778,15.877 -10.843,0 -19.361,-5.422 -19.361,-9.779 0,-2.321 1.646,-3.87 3.484,-3.87 3.775,0 6.873,6.291 16.166,6.291 6.195,0 9.971,-3.484 9.971,-6.97 0,-10.066 -27.491,-9.486 -27.491,-23.812 0,-9.485 8.905,-14.519 17.52,-14.519 z"
+ id="path41"
+ style="fill:#969696" />
+</g>
+</svg> \ No newline at end of file
diff --git a/icons/texto.svg b/icons/texto.svg
new file mode 100644
index 0000000..f789579
--- /dev/null
+++ b/icons/texto.svg
@@ -0,0 +1,17 @@
+<?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 "#010101">
+ <!ENTITY fill_color "#666666">
+]><svg enable-background="new 0 0 58.5 55" height="55px" version="1.1" viewBox="0 0 58.5 55" width="58.5px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="transfer-from-text">
+ <g display="inline">
+ <polygon fill="&fill_color;" points="50.056,32.715 50.056,2 8.433,2 8.433,32.715 1.75,34.542 29.252,52.581 56.75,34.543 " stroke="&stroke_color;" stroke-linejoin="round" stroke-width="3.5"/>
+ </g>
+ <g display="inline">
+ <g>
+ <polygon fill="#ffffff" points="18.435,10.583 32.046,10.583 39.811,18.343 39.811,38.42 18.435,38.42 " stroke="&fill_color;" stroke-width="2.275"/>
+ <polyline fill="none" points="39.811,18.343 32.046,18.343 32.046,10.583 " stroke="&fill_color;" stroke-width="2.275"/>
+ </g>
+ </g>
+ <line display="inline" fill="none" stroke="&fill_color;" stroke-width="2.275" x1="22.948" x2="35.298" y1="23.688" y2="23.688"/>
+ <line display="inline" fill="none" stroke="&fill_color;" stroke-width="2.275" x1="22.948" x2="35.298" y1="28.238" y2="28.238"/>
+ <line display="inline" fill="none" stroke="&fill_color;" stroke-width="2.275" x1="22.948" x2="35.298" y1="32.787" y2="32.787"/>
+</g></svg>
diff --git a/icons/video.svg b/icons/video.svg
new file mode 100644
index 0000000..ef09227
--- /dev/null
+++ b/icons/video.svg
@@ -0,0 +1,20 @@
+<?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 "#010101">
+ <!ENTITY fill_color "#666666">
+]><svg enable-background="new 0 0 58.5 55" height="55px" version="1.1" viewBox="0 0 58.5 55" width="58.5px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="transfer-from-video">
+ <g display="inline">
+ <polygon fill="&fill_color;" points="50.056,32.715 50.056,2 8.433,2 8.433,32.715 1.75,34.542 29.252,52.581 56.75,34.543 " stroke="&stroke_color;" stroke-linejoin="round" stroke-width="3.5"/>
+ </g>
+ <g display="inline">
+ <g>
+ <polygon fill="#ffffff" points="43.041,35.189 43.041,21.577 35.281,13.812 15.204,13.812 15.204,35.189 " stroke="&fill_color;" stroke-width="2.275"/>
+ <polyline fill="none" points="35.281,13.812 35.281,21.577 43.041,21.577 " stroke="&fill_color;" stroke-width="2.275"/>
+ </g>
+ </g>
+ <path d="M29.207,22.772c-3.092,0-5.668,3.083-5.668,3.083s2.576,3.099,5.668,3.098 c3.092-0.004,5.669-3.102,5.669-3.102S32.299,22.771,29.207,22.772z M29.207,28.031c-1.197,0-2.168-0.972-2.168-2.169 c0-1.195,0.971-2.168,2.168-2.168c1.195,0,2.167,0.973,2.167,2.168C31.374,27.06,30.402,28.031,29.207,28.031z" display="inline" fill="&fill_color;"/>
+ <circle cx="29.207" cy="25.863" display="inline" fill="&fill_color;" r="0.984"/>
+ <circle cx="20.998" cy="25.863" display="inline" fill="&fill_color;" r="0.984"/>
+ <circle cx="18.073" cy="25.863" display="inline" fill="&fill_color;" r="0.984"/>
+ <circle cx="39.847" cy="25.863" display="inline" fill="&fill_color;" r="0.984"/>
+ <circle cx="36.923" cy="25.863" display="inline" fill="&fill_color;" r="0.984"/>
+</g></svg>
diff --git a/locale/en/LC_MESSAGES/org.CeibalJAM.Compress.mo b/locale/en/LC_MESSAGES/org.CeibalJAM.Compress.mo
new file mode 100644
index 0000000..ed4bd44
--- /dev/null
+++ b/locale/en/LC_MESSAGES/org.CeibalJAM.Compress.mo
Binary files differ
diff --git a/locale/en/activity.linfo b/locale/en/activity.linfo
new file mode 100644
index 0000000..94b44e2
--- /dev/null
+++ b/locale/en/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Compress
diff --git a/po/Compress.pot b/po/Compress.pot
new file mode 100644
index 0000000..81fc070
--- /dev/null
+++ b/po/Compress.pot
@@ -0,0 +1,206 @@
+# 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: 2012-12-05 17:35+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Compress"
+msgstr ""
+
+#: CompressCanvas3.py:35 CompressCanvas.py:34
+msgid "Nuevo directorio"
+msgstr ""
+
+#: CompressCanvas3.py:46 CompressCanvas.py:45
+msgid "Guardar archivo"
+msgstr ""
+
+#: CompressCanvas3.py:47 CompressCanvas.py:46
+msgid "Para que los cambios se guarden presione la tecla '↵' o el icono √ "
+msgstr ""
+
+#: CompressCanvas3.py:68 CompressCanvas3.py:224 CompressCanvas3.py:273
+#: CompressCanvas.py:67 CompressCanvas.py:224 CompressCanvas.py:272
+msgid "Archivos en el directorio"
+msgstr ""
+
+#: CompressCanvas3.py:118 CompressCanvas.py:117
+msgid "Guardar imagen: "
+msgstr ""
+
+#: CompressCanvas3.py:121 CompressCanvas.py:120
+msgid "Guardar texto: "
+msgstr ""
+
+#: CompressCanvas3.py:124 CompressCanvas.py:123
+msgid "Guardar audio: "
+msgstr ""
+
+#: CompressCanvas3.py:128 CompressCanvas.py:127
+msgid "Guardar: "
+msgstr ""
+
+#: CompressCanvas3.py:136 CompressCanvas.py:135
+msgid "Seleccione un archivo"
+msgstr ""
+
+#: CompressCanvas3.py:169 CompressCanvas.py:168 utils.py:119 utils3.py:121
+msgid "Oh..Parece que no selecciono un archivo zip"
+msgstr ""
+
+#: CompressCanvas3.py:193 CompressCanvas.py:192
+msgid "Carpeta:"
+msgstr ""
+
+#: CompressCanvas3.py:247 CompressCanvas.py:247
+msgid "imagen"
+msgstr ""
+
+#: CompressCanvas3.py:261 CompressCanvas.py:260
+msgid "archivo"
+msgstr ""
+
+#: CompressCanvas3.py:267 CompressCanvas3.py:382 CompressCanvas.py:266
+#: CompressCanvas.py:381
+msgid "directorio"
+msgstr ""
+
+#: CompressCanvas3.py:291 CompressCanvas.py:290
+msgid "Abrir zip"
+msgstr ""
+
+#: CompressCanvas3.py:297 CompressCanvas.py:296
+#, python-format
+msgid "Cerrar zip: %s"
+msgstr ""
+
+#: CompressCanvas3.py:301 CompressCanvas.py:300
+msgid "Copiar"
+msgstr ""
+
+#: CompressCanvas3.py:304 CompressCanvas.py:303
+msgid "Descomprimir"
+msgstr ""
+
+#: CompressCanvas3.py:306 CompressCanvas.py:305
+msgid "Cortar"
+msgstr ""
+
+#: CompressCanvas3.py:308 CompressCanvas.py:307
+msgid "Borrar"
+msgstr ""
+
+#: CompressCanvas3.py:310 CompressCanvas.py:309
+msgid "Comprimir este archivo"
+msgstr ""
+
+#: CompressCanvas3.py:319 CompressCanvas.py:318
+msgid "Copiar al zip"
+msgstr ""
+
+#: CompressCanvas3.py:325 CompressCanvas.py:324
+msgid "Atras"
+msgstr ""
+
+#: CompressCanvas3.py:328 CompressCanvas.py:327
+msgid "Pegar"
+msgstr ""
+
+#: CompressCanvas3.py:404 CompressCanvas.py:403
+#, python-format
+msgid "Seguro que desea borrar el archivo: %s"
+msgstr ""
+
+#: CompressCanvas3.py:413 CompressCanvas.py:412
+msgid "Error al acceder al "
+msgstr ""
+
+#: CompressCanvas3.py:423 CompressCanvas.py:422
+msgid "El "
+msgstr ""
+
+#: CompressCanvas3.py:428 CompressCanvas.py:427
+msgid "No tiene acceso a ese "
+msgstr ""
+
+#: CompressCanvas3.py:432 CompressCanvas.py:431
+msgid " no es un directorio"
+msgstr ""
+
+#: CompressCanvas3.py:450 CompressCanvas.py:449
+#, python-format
+msgid "Error al intentar copiar: %s "
+msgstr ""
+
+#: CompressCanvas3.py:455 CompressCanvas.py:454
+#, python-format
+msgid "Error al intentar cortar: %s "
+msgstr ""
+
+#: CompressCanvas3.py:460 CompressCanvas.py:459
+msgid "Error: No hay nada en el portapapeles"
+msgstr ""
+
+#: CompressCanvas3.py:465 CompressCanvas.py:464
+msgid "Error al intentar pegar un archivo"
+msgstr ""
+
+#: CompressCanvas3.py:470 CompressCanvas.py:469
+msgid "¡Ups! Parece que aún no abrio ningun archivo"
+msgstr ""
+
+#: CompressCanvas3.py:475 CompressCanvas.py:474
+msgid "Error desconocido"
+msgstr ""
+
+#: Compress.py:30 Compress.py:77
+msgid "Abrir"
+msgstr ""
+
+#: Compress.py:31 Compress.py:78
+msgid "Arriba"
+msgstr ""
+
+#: Compress.py:32 Compress.py:79
+msgid "Directorio Zip"
+msgstr ""
+
+#: Compress.py:34 Compress.py:81
+msgid "Añadir archivo"
+msgstr ""
+
+#: Compress.py:35 Compress.py:82
+msgid "Guardar archivo:"
+msgstr ""
+
+#: Compress.py:45
+msgid "Parar - Gtk3"
+msgstr ""
+
+#: Compress.py:92
+msgid "Parar - Gtk2"
+msgstr ""
+
+#: utils.py:117 utils3.py:119
+msgid ""
+"Ups! Parece que el archivo esta dañado.O no es un zip ..Porfavor intente con "
+"otro"
+msgstr ""
+
+#: utils.py:141 utils3.py:143
+msgid "Archivos con contraseña aún no han sido implementados"
+msgstr ""
diff --git a/po/en.po b/po/en.po
new file mode 100644
index 0000000..0b7a611
--- /dev/null
+++ b/po/en.po
@@ -0,0 +1,208 @@
+# 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.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-05 17:35+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Rafael Cordano <rafael.cordano@gmail.com>\n"
+"Language-Team: The Compress team <>\n"
+"Language: Spanish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Compress"
+msgstr "Compress"
+
+#: CompressCanvas3.py:35 CompressCanvas.py:34
+msgid "Nuevo directorio"
+msgstr "New directory"
+
+#: CompressCanvas3.py:46 CompressCanvas.py:45
+msgid "Guardar archivo"
+msgstr "Save file"
+
+#: CompressCanvas3.py:47 CompressCanvas.py:46
+msgid "Para que los cambios se guarden presione la tecla '↵' o el icono √ "
+msgstr "For the changes be saved press the '↵' key or the √ icon "
+
+#: CompressCanvas3.py:68 CompressCanvas3.py:224 CompressCanvas3.py:273
+#: CompressCanvas.py:67 CompressCanvas.py:224 CompressCanvas.py:272
+msgid "Archivos en el directorio"
+msgstr "Files in the directory"
+
+#: CompressCanvas3.py:118 CompressCanvas.py:117
+msgid "Guardar imagen: "
+msgstr "Save image: "
+
+#: CompressCanvas3.py:121 CompressCanvas.py:120
+msgid "Guardar texto: "
+msgstr "Save text: "
+
+#: CompressCanvas3.py:124 CompressCanvas.py:123
+msgid "Guardar audio: "
+msgstr "Save audio: "
+
+#: CompressCanvas3.py:128 CompressCanvas.py:127
+msgid "Guardar: "
+msgstr "Save: "
+
+#: CompressCanvas3.py:136 CompressCanvas.py:135
+msgid "Seleccione un archivo"
+msgstr "Choose a file"
+
+#: CompressCanvas3.py:169 CompressCanvas.py:168 utils.py:119 utils3.py:121
+msgid "Oh..Parece que no selecciono un archivo zip"
+msgstr "Oh.. Seems you not selected any zip file"
+
+#: CompressCanvas3.py:193 CompressCanvas.py:192
+msgid "Carpeta:"
+msgstr "Directory: "
+
+#: CompressCanvas3.py:247 CompressCanvas.py:247
+msgid "imagen"
+msgstr "image"
+
+#: CompressCanvas3.py:261 CompressCanvas.py:260
+msgid "archivo"
+msgstr "file"
+
+#: CompressCanvas3.py:267 CompressCanvas3.py:382 CompressCanvas.py:266
+#: CompressCanvas.py:381
+msgid "directorio"
+msgstr "directory"
+
+#: CompressCanvas3.py:291 CompressCanvas.py:290
+msgid "Abrir zip"
+msgstr "Open zip"
+
+#: CompressCanvas3.py:297 CompressCanvas.py:296
+#, python-format
+msgid "Cerrar zip: %s"
+msgstr "Close zip: %s"
+
+#: CompressCanvas3.py:301 CompressCanvas.py:300
+msgid "Copiar"
+msgstr "Copy"
+
+#: CompressCanvas3.py:304 CompressCanvas.py:303
+msgid "Descomprimir"
+msgstr "Uncompress"
+
+#: CompressCanvas3.py:306 CompressCanvas.py:305
+msgid "Cortar"
+msgstr "Cut"
+
+#: CompressCanvas3.py:308 CompressCanvas.py:307
+msgid "Borrar"
+msgstr "Delete"
+
+#: CompressCanvas3.py:310 CompressCanvas.py:309
+msgid "Comprimir este archivo"
+msgstr "Compress this file"
+
+#: CompressCanvas3.py:319 CompressCanvas.py:318
+msgid "Copiar al zip"
+msgstr "Copy to zip"
+
+#: CompressCanvas3.py:325 CompressCanvas.py:324
+msgid "Atras"
+msgstr "Back"
+
+#: CompressCanvas3.py:328 CompressCanvas.py:327
+msgid "Pegar"
+msgstr "Paste"
+
+#: CompressCanvas3.py:404 CompressCanvas.py:403
+#, python-format
+msgid "Seguro que desea borrar el archivo: %s"
+msgstr "Are you sure you want to delete this file: %s ?"
+
+#: CompressCanvas3.py:413 CompressCanvas.py:412
+msgid "Error al acceder al "
+msgstr "Error accessing to "
+
+#: CompressCanvas3.py:423 CompressCanvas.py:422
+msgid "El "
+msgstr "The "
+
+#: CompressCanvas3.py:428 CompressCanvas.py:427
+msgid "No tiene acceso a ese "
+msgstr "You have not got access for this"
+
+#: CompressCanvas3.py:432 CompressCanvas.py:431
+msgid " no es un directorio"
+msgstr "It is not a directory"
+
+#: CompressCanvas3.py:450 CompressCanvas.py:449
+#, python-format
+msgid "Error al intentar copiar: %s "
+msgstr "Error when trying copy: %s "
+
+#: CompressCanvas3.py:455 CompressCanvas.py:454
+#, python-format
+msgid "Error al intentar cortar: %s "
+msgstr "Error when trying cut: %s "
+
+#: CompressCanvas3.py:460 CompressCanvas.py:459
+msgid "Error: No hay nada en el portapapeles"
+msgstr "Error: It is not nothing in the clipboard"
+
+#: CompressCanvas3.py:465 CompressCanvas.py:464
+msgid "Error al intentar pegar un archivo"
+msgstr "Error when trying paste a file"
+
+#: CompressCanvas3.py:470 CompressCanvas.py:469
+msgid "¡Ups! Parece que aún no abrio ningun archivo"
+msgstr "Ups! Seems not yet opened any file"
+
+#: CompressCanvas3.py:475 CompressCanvas.py:474
+msgid "Error desconocido"
+msgstr "Unknown error"
+
+#: Compress.py:30 Compress.py:77
+msgid "Abrir"
+msgstr "Open"
+
+#: Compress.py:31 Compress.py:78
+msgid "Arriba"
+msgstr "Up"
+
+#: Compress.py:32 Compress.py:79
+msgid "Directorio Zip"
+msgstr "Zip directory"
+
+#: Compress.py:34 Compress.py:81
+msgid "Añadir archivo"
+msgstr "Add file"
+
+#: Compress.py:35 Compress.py:82
+msgid "Guardar archivo:"
+msgstr "Save files:"
+
+#: Compress.py:45
+msgid "Parar - Gtk3"
+msgstr "Stop - Gtk3"
+
+#: Compress.py:92
+msgid "Parar - Gtk2"
+msgstr "Stop - Gtk2"
+
+#: utils.py:117 utils3.py:119
+msgid ""
+"Ups! Parece que el archivo esta dañado.O no es un zip ..Porfavor intente con "
+"otro"
+msgstr "Ups! seems that the file is spoiled.Or is not a zip file .. Please try with "
+"other"
+
+#: utils.py:141 utils3.py:143
+msgid "Archivos con contraseña aún no han sido implementados"
+msgstr "Files with password have not yet been implemented"
+
+
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..0c39199
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+from sugar.activity import bundlebuilder
+
+bundlebuilder.start()
diff --git a/utils.py b/utils.py
new file mode 100644
index 0000000..316b39d
--- /dev/null
+++ b/utils.py
@@ -0,0 +1,158 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# utils.py
+#
+# Copyright 2012 Rafael Cordano <rafael.cordano@gmail.com>
+# Copyright 2012 Ignacio Rodríguez <nachoel01@gmail.com>
+# Copyright 2012 Ezequiel Pereira <eze2307@gmail.com>
+#
+# 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 2 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 Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+#
+import zipfile,gtk
+import utils,commands
+from sugar.graphics.toolbutton import ToolButton
+import os, shutil
+from gettext import gettext as _
+try:
+ os.mkdir('/tmp/Compress')
+ os.mkdir('/tmp/Compress/Work')
+except:
+ pass
+Archivos = None
+Archivo_d = None
+Dir = False
+DirName = None
+def Descomprimir(Archivo):
+ pass
+
+class Abrir():
+ def __init__(self,box,texto):
+ Ventana = gtk.FileChooserDialog("Abrir..",
+ None,
+ gtk.FILE_CHOOSER_ACTION_OPEN,
+ (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+ gtk.STOCK_OK, gtk.RESPONSE_OK))
+
+ Ventana.set_default_response(gtk.RESPONSE_OK)
+
+ Filtro = gtk.FileFilter()
+ Filtro.set_name("Archivos ZIP")
+ Filtro.add_pattern("*.zip")
+ Ventana.add_filter(Filtro)
+
+ Echo = Ventana.run()
+ if Echo == gtk.RESPONSE_OK:
+ File = Ventana.get_filename()
+ utils.Archivo_d = File
+ try:
+ decompress(File,box)
+ os.chdir('/tmp/Compress/Work')
+ Ventana.destroy()
+ except:
+ Ventana.destroy()
+
+ elif Echo == gtk.RESPONSE_CANCEL:
+ Ventana.destroy()
+
+
+class Abrir_Directorio():
+ def __init__(self,widget,texto,files,estado,box):
+ Ventana = gtk.FileSelection("Abrir..")
+
+ Ventana.set_default_response(gtk.RESPONSE_OK)
+
+ Estado = estado
+ Echo = Ventana.run()
+ if Echo == gtk.RESPONSE_OK:
+ File = Ventana.get_filename()
+ Ventana.destroy()
+ texto.set_text(File)
+ texto.show()
+ estado = False
+ elif Echo == gtk.RESPONSE_CANCEL:
+ box.hide()
+ Ventana.destroy()
+#COPIADO DE JAMEDIA - FLAVIO DANESSE #
+def describe_archivo(archivo):
+ """ Devuelve el tipo de un archivo (imagen, video, texto).
+ -z, --uncompress para ver dentro de los zip."""
+
+ datos = commands.getoutput('file -b %s%s%s' % ("\"", archivo, "\""))
+ datostr = str(datos)
+ final = datostr.lower()
+ return final
+# Esto ya no es parte de jamedia#
+def describe_mime(archivo):
+ datos = commands.getoutput('file --mime-type -b %s%s%s' % ("\"", archivo, "\""))
+ return str(datos)
+
+def Boton(tooltip=None,icon=None,connect=None):
+ if icon != None:
+ Boton = ToolButton(icon)
+ else:
+ Boton = ToolButton('gtk-missing-image')
+ if tooltip != None:
+ Boton.set_tooltip(tooltip)
+ if connect != None:
+ Boton.connect("clicked",connect)
+ return Boton
+def decompress(archivo,box, destino='/tmp/Compress/Work',estado='Abrir',diario=False):
+ Archivod = os.getcwd()+"/"+archivo
+ # PARTE CONFUSA #
+ if not diario:
+ Mensaje = _("""Ups! Parece que el archivo esta dañado.O no es un zip ..Porfavor intente con otro""")
+ else:
+ Mensaje = _("""Oh..Parece que no selecciono un archivo zip""")
+ # SI EL ESTADO ES ABRIR BORRA LOS DIRECTORIOS #
+ if estado == 'Abrir':
+ shutil.rmtree(destino)
+ os.mkdir(destino)
+ else:
+ pass
+ # ACA ABRE #
+ archivo = open(archivo)
+ try:
+ zipped = zipfile.ZipFile(archivo)
+ except zipfile.BadZipfile:
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=Mensaje)
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+ box.hide()
+ try:
+ zipped.extractall(destino)
+ os.chdir(destino)
+
+ except RuntimeError:
+ info = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK,message_format=_("Archivos con contraseña aún no han sido implementados"))
+ a = info.run()
+ if a == gtk.RESPONSE_OK:
+ info.destroy()
+
+def compress(archivos_a_meter, archivo):
+ zipped = zipfile.ZipFile(archivo, mode='a')
+ # VARIOS ARCHIVOS #
+ if os.path.isdir(os.getcwd()+"/"+archivos_a_meter):
+ zipped = directory("./"+archivos_a_meter, zipped)
+ else:
+ zipped.write(archivos_a_meter)
+def directory(dirname, zipped):
+ for x in os.listdir(dirname):
+ zipped.write(dirname+"/"+x)
+ if os.path.isdir(dirname+"/"+x):
+ zipped = directory(dirname+"/"+x, zipped)
+ return zipped
diff --git a/utils3.py b/utils3.py
new file mode 100644
index 0000000..aad326d
--- /dev/null
+++ b/utils3.py
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# utils.py
+#
+# Copyright 2012 Rafael Cordano <rafael.cordano@gmail.com>
+# Copyright 2012 Ignacio Rodríguez <nachoel01@gmail.com>
+# Copyright 2012 Ezequiel Pereira <eze2307@gmail.com>
+#
+# 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 2 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 Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+#
+from gi.repository import Gtk
+import zipfile
+import utils3 as utils
+import commands
+from sugar3.graphics.toolbutton import ToolButton
+import os, shutil
+from gettext import gettext as _
+try:
+ os.mkdir('/tmp/Compress')
+ os.mkdir('/tmp/Compress/Work')
+except:
+ pass
+Archivos = None
+Archivo_d = None
+Dir = False
+DirName = None
+def Descomprimir(Archivo):
+ pass
+
+class Abrir():
+ def __init__(self,box,texto):
+ Ventana = Gtk.FileChooserDialog("Abrir..",
+ None,
+ Gtk.FileChooserAction.OPEN,
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
+ Gtk.STOCK_OK, Gtk.ResponseType.OK))
+
+ Ventana.set_default_response(Gtk.ResponseType.OK)
+
+ Filtro = Gtk.FileFilter()
+ Filtro.set_name("Archivos ZIP")
+ Filtro.add_pattern("*.zip")
+ Ventana.add_filter(Filtro)
+
+ Echo = Ventana.run()
+ if Echo == Gtk.ResponseType.OK:
+ File = Ventana.get_filename()
+ utils.Archivo_d = File
+ try:
+ decompress(File,box)
+ os.chdir('/tmp/Compress/Work')
+ Ventana.destroy()
+ except:
+ Ventana.destroy()
+
+ elif Echo == Gtk.ResponseType.CANCEL:
+ Ventana.destroy()
+
+
+class Abrir_Directorio():
+ def __init__(self,widget,texto,files,estado,box):
+ Ventana = Gtk.FileSelection("Abrir..")
+
+ Ventana.set_default_response(Gtk.ResponseType.OK)
+
+ Estado = estado
+ Echo = Ventana.run()
+ if Echo == Gtk.ResponseType.OK:
+ File = Ventana.get_filename()
+ Ventana.destroy()
+ texto.set_text(File)
+ texto.show()
+ estado = False
+ elif Echo == Gtk.ResponseType.CANCEL:
+ box.hide()
+ Ventana.destroy()
+#COPIADO DE JAMEDIA - FLAVIO DANESSE #
+def describe_archivo(archivo):
+ """ Devuelve el tipo de un archivo (imagen, video, texto).
+ -z, --uncompress para ver dentro de los zip."""
+
+ datos = commands.getoutput('file -b %s%s%s' % ("\"", archivo, "\""))
+ datostr = str(datos)
+ final = datostr.lower()
+ return final
+# Esto ya no es parte de jamedia#
+def describe_mime(archivo):
+ datos = commands.getoutput('file --mime-type -b %s%s%s' % ("\"", archivo, "\""))
+ return str(datos)
+
+def Boton(tooltip=None,icon=None,connect=None):
+ if icon != None:
+ Boton = ToolButton(icon)
+ else:
+ Boton = ToolButton('gtk-missing-image')
+ if tooltip != None:
+ Boton.set_tooltip(tooltip)
+ if connect != None:
+ Boton.connect("clicked",connect)
+ return Boton
+def decompress(archivo,box, destino='/tmp/Compress/Work',estado='Abrir',diario=False):
+ Archivod = os.getcwd()+"/"+archivo
+ # PARTE CONFUSA #
+ if not diario:
+ Mensaje = _("""Ups! Parece que el archivo esta dañado.O no es un zip ..Porfavor intente con otro""")
+ else:
+ Mensaje = _("""Oh..Parece que no selecciono un archivo zip""")
+ # SI EL ESTADO ES ABRIR BORRA LOS DIRECTORIOS #
+ if estado == 'Abrir':
+ shutil.rmtree(destino)
+ os.mkdir(destino)
+ else:
+ pass
+ # ACA ABRE #
+ archivo = open(archivo)
+ try:
+ zipped = zipfile.ZipFile(archivo)
+ except zipfile.BadZipfile:
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=Mensaje)
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+ box.hide()
+ try:
+ zipped.extractall(destino)
+ os.chdir(destino)
+
+ except RuntimeError:
+ info = Gtk.MessageDialog(type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.OK,message_format=_("Archivos con contraseña aún no han sido implementados"))
+ a = info.run()
+ if a == Gtk.ResponseType.OK:
+ info.destroy()
+
+def compress(archivos_a_meter, archivo):
+ zipped = zipfile.ZipFile(archivo, mode='a')
+ # VARIOS ARCHIVOS #
+ if os.path.isdir(os.getcwd()+"/"+archivos_a_meter):
+ zipped = directory("./"+archivos_a_meter, zipped)
+ else:
+ zipped.write(archivos_a_meter)
+def directory(dirname, zipped):
+ for x in os.listdir(dirname):
+ zipped.write(dirname+"/"+x)
+ if os.path.isdir(dirname+"/"+x):
+ zipped = directory(dirname+"/"+x, zipped)
+ return zipped