From 50dc2c9443e0c55e68b84373e0eb39411682f424 Mon Sep 17 00:00:00 2001 From: Cristian Garcia Date: Thu, 18 Jul 2013 23:32:56 +0000 Subject: Agregando GMenu para mayor compatibilad con Gnome, esto implico cambiar casi totalmente el archivo que contiene la ventana 'CristianEdit.py' --- diff --git a/CristianEdit.py b/CristianEdit.py index 7fc4f63..51df23f 100755 --- a/CristianEdit.py +++ b/CristianEdit.py @@ -23,6 +23,8 @@ import os from gi.repository import Gtk from gi.repository import Gdk +from gi.repository import Gio +from gi.repository import GObject from CristianEdit.CristianEdit import CristianEdit from CristianEdit.objetos import DialogoCerrar @@ -41,13 +43,12 @@ context.add_provider_for_screen( Gtk.STYLE_PROVIDER_PRIORITY_USER) -class Ventana(Gtk.Window): +class Ventana(Gtk.ApplicationWindow): - def __init__(self, direcciones): - - super(Ventana, self).__init__() + def __init__(self, aplicacion, direcciones): - self.set_title('CristianEdit') + Gtk.Window.__init__(self, title='CristianEdit', application=aplicacion) + self.set_icon_from_file(os.path.join(os.path.dirname(__file__), 'Iconos/CristianEdit.svg')) @@ -64,6 +65,7 @@ class Ventana(Gtk.Window): self.realize() self.cristianedit.setup_init(direcciones) + aplicacion.connect('accion', self.cristianedit.set_accion) self.connect('delete-event', self.salir) self.cristianedit.connect('cerrar', self.salir) @@ -81,11 +83,7 @@ class Ventana(Gtk.Window): self.cristianedit.guardar_configuracion() for buffer in buffers: - if buffers.index(buffer) == buffers.index(buffers[-1]): - if_cerrar = True - - else: - if_cerrar = False + if_cerrar = buffers.index(buffer) == buffers.index(buffers[-1]) if buffer.get_modified(): @@ -120,12 +118,76 @@ class Ventana(Gtk.Window): if if_cerrar: Gtk.main_quit() - else: - if if_cerrar: - Gtk.main_quit() + elif not buffer.get_modified() and if_cerrar: + sys.exit(0) -if __name__ == '__main__': +class Aplicacion(Gtk.Application): + """Clase basada en el ejemplo 'Gmenu.py'""" + + __gsignals__ = { + 'accion': (GObject.SIGNAL_RUN_FIRST, + None, (str,)), + } + + def __init__(self, direcciones): + + Gtk.Application.__init__(self) + + self.direcciones = direcciones + + def do_activate(self): + + win = Ventana(self, self.direcciones) + win.show_all() + + def do_startup (self): + + # Inicia la aplicación + Gtk.Application.do_startup(self) + + # Crear el menú + menu = Gio.Menu() + + menu.set_label('Hola') + + # Agregar los items del menú + menu.append("Nuevo", "app.Nuevo") + menu.append("Abrir", "app.Abrir") + menu.append("Guardar", "app.Guardar") + menu.append("Guardar como", "app.Guardar como") + menu.append("Salir", "app.Salir") + + # Establecer el menú a la aplicación + self.set_app_menu(menu) + + # Crear acciones para los items del menú + nuevo = Gio.SimpleAction.new("Nuevo", None) + abrir = Gio.SimpleAction.new('Abrir', None) + guardar = Gio.SimpleAction.new('Guardar', None) + guardar_como = Gio.SimpleAction.new('Guardar como', None) + salir = Gio.SimpleAction.new("Salir", None) + + # Conectar las acciones a funciones + nuevo.connect("activate", self.emit_accion) + abrir.connect("activate", self.emit_accion) + guardar.connect("activate", self.emit_accion) + guardar_como.connect("activate", self.emit_accion) + salir.connect("activate", self.emit_accion) + + # Agregando los items a la aplicación + self.add_action(nuevo) + self.add_action(abrir) + self.add_action(guardar) + self.add_action(guardar_como) + self.add_action(salir) + + def emit_accion(self, widget, parametro): + + self.emit('accion', widget.get_name()) + +if __name__ == '__main__': + if len(sys.argv) >= 2: lista = sys.argv[1:] @@ -138,5 +200,6 @@ if __name__ == '__main__': if os.path.exists(lugar): direcciones.append(os.path.realpath(lugar)) - Ventana(direcciones) - Gtk.main() + app = Aplicacion(direcciones) + exit_status = app.run(sys.argv) + sys.exit(exit_status) diff --git a/CristianEdit/CristianEdit.py b/CristianEdit/CristianEdit.py index 4f409c6..d958725 100644 --- a/CristianEdit/CristianEdit.py +++ b/CristianEdit/CristianEdit.py @@ -252,6 +252,9 @@ class CristianEdit(Gtk.Plug): elif accion == 'Acerca de': Creditos(self.get_toplevel()) + + elif accion == 'Salir': + self.emit('cerrar') def abrir(self, widget=None, direccion=None): """Abrir uno o varios archivo/s.""" -- cgit v0.9.1