示例#1
0
class JAMediaEditor(activity.Activity):
    """
    Gtk.Window
        Gtk.VBox
            Menu
            BasePanel - JAMediaPyGiHack
            ToolbarEstado
    """

    __gtype_name__ = 'WindowJAMediaEditor'

    def __init__(self, handle):

        activity.Activity.__init__(self, handle, False)

        self.set_title("JAMediaEditor")
        #self.set_icon_from_file(os.path.join(BASE_PATH, "Iconos",
        #    "JAMediaEditor2.svg"))
        #self.set_resizable(True)
        #self.set_size_request(640, 480)
        self.set_border_width(5)
        #self.set_position(Gtk.WindowPosition.CENTER)

        accel_group = Gtk.AccelGroup()
        self.add_accel_group(accel_group)

        base_widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.menu = Menu(accel_group)
        self.base_panel = BasePanel()
        self.toolbar_estado = ToolbarEstado()
        self.jamediapygihack = JAMediaPyGiHack()

        self.sugar_toolbar = Gtk.Toolbar()
        self.sugar_toolbar.modify_bg(0, Gdk.color_parse("#000000"))
        item = Gtk.ToolItem()
        item.set_expand(True)
        item.add(self.menu)
        self.sugar_toolbar.insert(item, -1)
        self.sugar_toolbar.insert(
            get_separador(draw=False, ancho=0, expand=False), -1)
        boton = StopButton(self)
        self.sugar_toolbar.insert(boton, -1)
        self.sugar_toolbar.insert(
            get_separador(draw=False, ancho=3, expand=False), -1)

        base_widget.pack_start(self.sugar_toolbar, False, False, 0)
        base_widget.pack_start(self.base_panel, True, True, 0)
        base_widget.pack_start(self.jamediapygihack, True, True, 0)
        base_widget.pack_start(self.toolbar_estado, False, False, 0)

        self.set_canvas(base_widget)

        self.show_all()
        self.maximize()

        self.jamediapygihack.hide()

        self.menu.connect('accion_ver', self.__ejecutar_accion_ver)
        self.menu.connect('accion_codigo', self.__ejecutar_accion_codigo)
        self.menu.connect('accion_proyecto', self.__ejecutar_accion_proyecto)
        self.menu.connect('accion_archivo', self.__ejecutar_accion_archivo)
        self.menu.connect('run_jamediapygihack', self.__run_jamediapygihack)
        self.jamediapygihack.connect('salir', self.__run_editor)

        self.base_panel.connect("update", self.__set_toolbar_archivo_and_menu)
        self.base_panel.connect("proyecto_abierto",
            self.__set_toolbar_proyecto_and_menu)
        self.base_panel.connect("ejecucion", self.__set_toolbars_ejecucion)

        self.connect("delete-event", self.__exit)
        '''
        # Cuando se abre el editor con archivo como parámetro.
        if archivos:
            for archivo in archivos:
                if os.path.exists(archivo):
                    if os.path.isfile(archivo):
                        extension = os.path.splitext(
                            os.path.split(archivo)[1])[1]

                        if extension == ".ide":
                            GLib.idle_add(
                                self.base_panel.external_open_proyect,
                                archivo)

                        else:
                            GLib.idle_add(
                                self.base_panel.external_open_file,
                                archivo)
        '''
        print "JAMediaEditor:", os.getpid()

    def __run_editor(self, widget):
        self.jamediapygihack.hide()
        self.sugar_toolbar.show()
        self.base_panel.show()
        self.toolbar_estado.show()

    def __run_jamediapygihack(self, widget):
        self.sugar_toolbar.hide()
        self.base_panel.hide()
        self.toolbar_estado.hide()
        self.jamediapygihack.show()

    def __exit(self, widget=False, event=False):
        Gtk.main_quit()
        sys.exit(0)

    def __ejecutar_accion_codigo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú codigo.
        """
        self.base_panel.set_accion_codigo(widget, accion)

    def __ejecutar_accion_ver(self, widget, accion, valor):
        """
        Cuando se hace click en una opción del menú ver.
        """
        self.base_panel.set_accion_ver(widget, accion, valor)

    def __ejecutar_accion_archivo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú que
        afecta al archivo seleccionado.
        """
        self.base_panel.set_accion_archivo(widget, accion)

    def __ejecutar_accion_proyecto(self, widget, accion):
        """
        Cuando se hace click en una opción del menú proyecto.
        """
        self.base_panel.set_accion_proyecto(widget, accion)

    def __set_toolbar_archivo_and_menu(self, widget, _dict):
        self.menu.update_archivos(_dict)
        self.base_panel.toolbararchivo.update(_dict)
        info = {
            'renglones': _dict['renglones'],
            'caracteres': _dict['caracteres'],
            'archivo': _dict['archivo'],
            }
        self.toolbar_estado.set_info(info)

    def __set_toolbar_proyecto_and_menu(self, widget, valor):
        """
        Activa y desactiva las opciones de proyecto en la toolbar y menú
        correspondiente cuando se abre o se cierra un proyecto.
        """
        self.menu.activar_proyecto(valor)
        self.base_panel.toolbarproyecto.activar_proyecto(valor)
        # Ejecuciones
        self.base_panel.toolbararchivo.activar_ejecucion(False)
        if valor:
            self.base_panel.toolbarproyecto.activar_ejecucion(False)
        else:
            self.base_panel.toolbarproyecto.activar_ejecucion(False)

    def __set_toolbars_ejecucion(self, widget, tipo, valor):
        """
        Cuando se ejecuta un archivo o proyecto, se actualizan las toolbars.
        """
        if not valor:
            self.base_panel.toolbararchivo.activar_ejecucion(False)
            proyecto = self.base_panel.proyecto
            if proyecto:
                self.base_panel.toolbarproyecto.activar_ejecucion(False)

            else:
                self.base_panel.toolbarproyecto.activar_ejecucion(False)

        elif valor:
            if tipo == "proyecto":
                # Se está ejecutando proyecto.
                self.base_panel.toolbararchivo.activar_ejecucion(False)
                self.base_panel.toolbarproyecto.activar_ejecucion(True)

            elif tipo == "archivo":
                # Se está ejecutando archivo.
                self.base_panel.toolbarproyecto.activar_ejecucion(False)
                self.base_panel.toolbararchivo.activar_ejecucion(True)

    def read_file(self, file_path):
        archivo = file_path.replace('file://', '')
        if os.path.exists(archivo):
            if os.path.isfile(archivo):
                extension = os.path.splitext(os.path.split(archivo)[1])[1]
                GLib.idle_add(self.base_panel.external_open_file, archivo)

    def write_file(self, file_path):
        self.__exit()
示例#2
0
class IdeMain(activity.Activity):
    
    def __init__(self, handle):
        
        activity.Activity.__init__(self, handle, False)
        
        accel_group = gtk.AccelGroup()
        self.add_accel_group(accel_group)

        self.menu = Menu(accel_group)
        
        toolbar = ToolbarBox()
        
        item = gtk.ToolItem()
        item.set_expand(True)
        item.add(self.menu)
        toolbar.toolbar.insert(item, -1)
        
        separator = gtk.SeparatorToolItem()
        separator.props.draw = False
        separator.set_expand(True)
        toolbar.toolbar.insert(separator, -1)
        separator.show()
        toolbar.toolbar.insert(StopButton(self), -1)
        
        self.set_toolbar_box(toolbar)
        
        self.updater = False
        self.sourceview = False
        
        self.base_panel = BasePanel()
        self.set_canvas(self.base_panel)
        
        self.show_all()
        
        self.maximize()
        
        self.menu.connect('accion_ver', self.__ejecutar_accion_ver)
        self.menu.connect('accion_codigo', self.__ejecutar_accion_codigo)
        self.menu.connect('accion_proyecto', self.__ejecutar_accion_proyecto)
        self.menu.connect('accion_archivo', self.__ejecutar_accion_archivo)
        
        self.base_panel.connect("update", self.__new_handler)
        
        self.connect("destroy", self.__exit)
        
    def __ejecutar_accion_codigo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú codigo.
        """
        
        self.base_panel.set_accion_codigo(widget, accion)
        
    def __ejecutar_accion_ver(self, widget, accion, valor):
        """
        Cuando se hace click en una opción del menú ver.
        """
        
        self.base_panel.set_accion_ver(widget, accion, valor)
        
    def __ejecutar_accion_archivo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú que
        afecta al archivo seleccionado.
        """
        
        self.base_panel.set_accion_archivo(widget, accion)
        
    def __ejecutar_accion_proyecto(self, widget, accion):
        """
        Cuando se hace click en una opción del menú proyecto.
        """
        
        self.base_panel.set_accion_proyecto(widget, accion)
        
    def __exit(self, widget=None):
        """
        Sale de la aplicación.
        """
        
        sys.exit(0)
        
    def __new_handler(self, widget, sourceview, reset):
        """
        Elimina o reinicia la funcion que
        actualiza las toolbars y menús.
        """
        
        if self.updater and self.updater != None:
            gobject.source_remove(self.updater)
            self.updater = False
            self.sourceview = False
            
        if reset:
            self.sourceview = sourceview
            self.updater = gobject.timeout_add(500, self.__update)

    def __update(self):
        """
        Actualiza las toolbars y menus.
        """
        
        try:
            activar = []
            desactivar = []
            
            ### Si hay un archivo seleccionado.
            if self.sourceview:
                buffer = self.sourceview.get_buffer()
                
                activar.extend(["Guardar Como", "Cerrar", "Numeracion", "Aumentar", "Disminuir", "Formato"])
                
                ### Si hay texto en el archivo seleccionado.
                inicio, fin = buffer.get_bounds()
                buf = buffer.get_text(inicio, fin, 0)
            
                if buf:
                    activar.extend([
                        "Seleccionar Todo", "Identar",
                        "De Identar", "Buscar Texto",
                        "Reemplazar Texto", "Chequear",
                        "Valorar"])
                else:
                    desactivar.extend([
                        "Seleccionar Todo", "Identar",
                        "De Identar", "Buscar Texto",
                        "Reemplazar Texto", "Chequear",
                        "Valorar"])
                    
                ### Si el contenido del archivo != al del buffer.
                archivo = self.sourceview.archivo
                texto = ""
                if archivo:
                    if os.path.exists(archivo):
                        arch = open(archivo, 'r')
                        texto = arch.read()
                        arch.close()
                    
                if texto != buf:
                    activar.append("Guardar")
                    
                else:
                    desactivar.append("Guardar")
                    
                ### Si hay texto seleccionado, se puede copiar y cortar.
                if buffer.get_selection_bounds():
                    activar.extend(["Cortar", "Copiar"])
                    
                else:
                    desactivar.extend(["Cortar", "Copiar"])
                    
                ### Si hay texto en el clipboard, se puede pegar
                clipboard = gtk.clipboard_get(selection="CLIPBOARD")
                texto = clipboard.wait_for_text()
                
                if texto:
                    activar.append("Pegar")
                    
                else:
                    desactivar.append("Pegar")
                    
                ### Si se puede deshacer.
                if buffer.can_undo():
                    activar.append("Deshacer")
                    
                else:
                    desactivar.append("Deshacer")
                    
                ### Si se puede Rehacer.
                if buffer.can_redo():
                    activar.append("Rehacer")
                    
                else:
                    desactivar.append("Rehacer")
                
            else:
                self.base_panel.infonotebook.set_introspeccion(None, "")
                
                desactivar.extend([
                    "Cortar", "Copiar",
                    "Rehacer", "Deshacer",
                    "Guardar", "Cerrar",
                    "Guardar Como", "Pegar",
                    "Seleccionar Todo",
                    #"Ejecutar Archivo",
                    #"Detener Ejecución",
                    "Identar", "De Identar",
                    "Buscar Texto",
                    "Reemplazar Texto",
                    "Chequear", "Valorar",
                    "Numeracion", "Aumentar",
                    "Disminuir", "Formato"])
            
            ### Actualizar las toolbars y el menu.
            self.base_panel.toolbararchivo.update(True, activar)
            self.base_panel.toolbararchivo.update(False, desactivar)
            
            self.menu.update_archivos(True, activar)
            self.menu.update_archivos(False, desactivar)
            
            ### Opciones de Proyecto.
            if self.base_panel.proyecto:
                self.menu.activar_proyecto(True)
                
                self.base_panel.toolbarproyecto.activar(
                    bool(self.base_panel.proyecto),
                    bool(self.base_panel.workpanel.ejecucion))
                    
            else:
                self.menu.activar_proyecto(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Ejecutar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Detener Ejecución"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Editar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Cerrar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Guardar Proyecto"].set_sensitive(False)
            
            ### Ejecución de archivo.
            if self.sourceview:
                self.base_panel.toolbararchivo.dict_archivo["Ejecutar Archivo"].set_sensitive(
                    not bool(self.base_panel.workpanel.ejecucion))
                
                self.base_panel.toolbararchivo.dict_archivo["Detener Ejecución"].set_sensitive(
                    bool(self.base_panel.workpanel.ejecucion))
                    
            else:
                self.base_panel.toolbararchivo.dict_archivo["Ejecutar Archivo"].set_sensitive(False)
                self.base_panel.toolbararchivo.dict_archivo["Detener Ejecución"].set_sensitive(False)
                
        except:
            self.sourceview = False
        
        return True
示例#3
0
class JAMediaEditor(Gtk.Window):
    """
    Gtk.Window
        Gtk.VBox
            Menu
            BasePanel - JAMediaPyGiHack
            ToolbarEstado
    """

    __gtype_name__ = 'WindowJAMediaEditor'

    def __init__(self, archivos=False):

        Gtk.Window.__init__(self)

        self.set_title("JAMediaEditor")

        self.set_icon_from_file(os.path.join(
            BASE_PATH, "Iconos",
            "JAMediaEditor2.svg"))

        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_border_width(5)
        self.set_position(Gtk.WindowPosition.CENTER)

        accel_group = Gtk.AccelGroup()
        self.add_accel_group(accel_group)

        base_widget = Gtk.Box(
            orientation=Gtk.Orientation.VERTICAL)

        from Widgets import Menu
        from BasePanel import BasePanel
        from Toolbars import ToolbarEstado
        from JAMediaPyGiHack.JAMediaPyGiHack import JAMediaPyGiHack

        self.menu = Menu(accel_group)
        self.base_panel = BasePanel()
        self.toolbar_estado = ToolbarEstado()
        self.jamediapygihack = JAMediaPyGiHack()

        base_widget.pack_start(
            self.menu, False, False, 0)
        base_widget.pack_start(
            self.base_panel, True, True, 0)
        base_widget.pack_start(
            self.jamediapygihack, True, True, 0)
        base_widget.pack_start(
            self.toolbar_estado, False, False, 0)

        self.add(base_widget)

        self.show_all()
        self.maximize()

        self.jamediapygihack.hide()

        self.menu.connect('accion_ver',
            self.__ejecutar_accion_ver)
        self.menu.connect('accion_codigo',
            self.__ejecutar_accion_codigo)
        self.menu.connect('accion_proyecto',
            self.__ejecutar_accion_proyecto)
        self.menu.connect('accion_archivo',
            self.__ejecutar_accion_archivo)
        self.menu.connect('run_jamediapygihack',
            self.__run_jamediapygihack)
        self.jamediapygihack.connect('salir',
            self.__run_editor)

        self.base_panel.connect("update",
            self.__set_toolbar_archivo_and_menu)
        self.base_panel.connect("proyecto_abierto",
            self.__set_toolbar_proyecto_and_menu)
        self.base_panel.connect("ejecucion",
            self.__set_toolbars_ejecucion)

        self.connect("delete-event", self.__exit)

        # Cuando se abre el editor con archivo como parámetro.
        if archivos:
            from gi.repository import GLib

            for archivo in archivos:
                if os.path.exists(archivo):
                    if os.path.isfile(archivo):
                        extension = os.path.splitext(
                            os.path.split(archivo)[1])[1]

                        if extension == ".ide":
                            GLib.idle_add(
                                self.base_panel.external_open_proyect,
                                archivo)

                        else:
                            GLib.idle_add(
                                self.base_panel.external_open_file,
                                archivo)

    def __run_editor(self, widget):

        self.jamediapygihack.hide()
        self.menu.show()
        self.base_panel.show()
        self.toolbar_estado.show()

    def __run_jamediapygihack(self, widget):

        self.menu.hide()
        self.base_panel.hide()
        self.toolbar_estado.hide()
        self.jamediapygihack.show()

    def __exit(self, widget=None, event=None):

        Gtk.main_quit()
        import sys
        sys.exit(0)

    def __ejecutar_accion_codigo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú codigo.
        """

        self.base_panel.set_accion_codigo(widget, accion)

    def __ejecutar_accion_ver(self, widget, accion, valor):
        """
        Cuando se hace click en una opción del menú ver.
        """

        self.base_panel.set_accion_ver(widget, accion, valor)

    def __ejecutar_accion_archivo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú que
        afecta al archivo seleccionado.
        """

        self.base_panel.set_accion_archivo(widget, accion)

    def __ejecutar_accion_proyecto(self, widget, accion):
        """
        Cuando se hace click en una opción del menú proyecto.
        """

        self.base_panel.set_accion_proyecto(widget, accion)

    def __set_toolbar_archivo_and_menu(self, widget, dict):

        self.menu.update_archivos(dict)
        self.base_panel.toolbararchivo.update(dict)

        info = {
            'renglones': dict['renglones'],
            'caracteres': dict['caracteres'],
            'archivo': dict['archivo'],
            }

        self.toolbar_estado.set_info(info)

    def __set_toolbar_proyecto_and_menu(self, widget, valor):
        """
        Activa y desactiva las opciones de proyecto en la
        toolbar y menú correspondiente cuando se abre o se
        cierra un proyecto.
        """

        # FIXME: Esta funcion se ejecuta tambien cuando se cambia de lengueta,
        # por este motivo detener_ejecucion() no debe llamarse aquí.
        # self.base_panel.workpanel.detener_ejecucion()

        self.menu.activar_proyecto(valor)
        self.base_panel.toolbarproyecto.activar_proyecto(valor)

        # Ejecuciones
        self.base_panel.toolbararchivo.activar_ejecucion(False)

        if valor:
            self.base_panel.toolbarproyecto.activar_ejecucion(False)

        else:
            self.base_panel.toolbarproyecto.activar_ejecucion(None)

    def __set_toolbars_ejecucion(self, widget, tipo, valor):
        """
        Cuando se ejecuta un archivo o proyecto, se
        actualizan las toolbars correspondientes.
        """

        if not valor:
            self.base_panel.toolbararchivo.activar_ejecucion(False)

            proyecto = self.base_panel.proyecto
            if proyecto:
                self.base_panel.toolbarproyecto.activar_ejecucion(False)

            else:
                self.base_panel.toolbarproyecto.activar_ejecucion(None)

        elif valor:
            if tipo == "proyecto":
                # Se está ejecutando proyecto.
                self.base_panel.toolbararchivo.activar_ejecucion(None)
                self.base_panel.toolbarproyecto.activar_ejecucion(True)

            elif tipo == "archivo":
                # Se está ejecutando archivo.
                self.base_panel.toolbarproyecto.activar_ejecucion(None)
                self.base_panel.toolbararchivo.activar_ejecucion(True)
示例#4
0
class IdeMain(gtk.Window):
    def __init__(self, archivos=False):

        gtk.Window.__init__(self)

        self.set_title("Batovide")
        self.set_icon_from_file(os.path.join(PATH, "Iconos", "bide.svg"))
        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_border_width(5)
        self.set_position(gtk.WIN_POS_CENTER)

        accel_group = gtk.AccelGroup()
        self.add_accel_group(accel_group)

        self.updater = False
        self.sourceview = False

        base_widget = gtk.VBox()

        self.menu = Menu(accel_group)
        self.base_panel = BasePanel()

        base_widget.pack_start(self.menu, False, False, 0)
        base_widget.pack_start(self.base_panel, True, True, 0)

        self.add(base_widget)

        self.show_all()

        self.maximize()

        self.menu.connect('accion_ver', self.__ejecutar_accion_ver)
        self.menu.connect('accion_codigo', self.__ejecutar_accion_codigo)
        self.menu.connect('accion_proyecto', self.__ejecutar_accion_proyecto)
        self.menu.connect('accion_archivo', self.__ejecutar_accion_archivo)

        self.base_panel.connect("update", self.__new_handler)

        self.connect("destroy", self.__exit)

        # Cuando se abre el editor con archivo como parámetro.
        if archivos:
            for archivo in archivos:
                if os.path.exists(archivo):
                    if os.path.isfile(archivo):
                        extension = os.path.splitext(
                            os.path.split(archivo)[1])[1]

                        if extension == ".ide":
                            gobject.idle_add(
                                self.base_panel.external_open_proyect, archivo)

                        else:
                            gobject.idle_add(
                                self.base_panel.external_open_file, archivo)

    def __ejecutar_accion_codigo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú codigo.
        """

        self.base_panel.set_accion_codigo(widget, accion)

    def __ejecutar_accion_ver(self, widget, accion, valor):
        """
        Cuando se hace click en una opción del menú ver.
        """

        self.base_panel.set_accion_ver(widget, accion, valor)

    def __ejecutar_accion_archivo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú que
        afecta al archivo seleccionado.
        """

        self.base_panel.set_accion_archivo(widget, accion)

    def __ejecutar_accion_proyecto(self, widget, accion):
        """
        Cuando se hace click en una opción del menú proyecto.
        """

        self.base_panel.set_accion_proyecto(widget, accion)

    def __exit(self, widget=None):
        """
        Sale de la aplicación.
        """

        sys.exit(0)

    def __new_handler(self, widget, sourceview, reset):
        """
        Elimina o reinicia la funcion que
        actualiza las toolbars y menús.
        """

        if self.updater and self.updater != None:
            gobject.source_remove(self.updater)
            self.updater = False
            self.sourceview = False

        if reset:
            self.sourceview = sourceview
            self.updater = gobject.timeout_add(500, self.__update)

    def __update(self):
        """
        Actualiza las toolbars y menus.
        """

        activar = []
        desactivar = []

        try:
            # Si hay un archivo seleccionado.
            if self.sourceview:
                buffer = self.sourceview.get_buffer()

                activar.extend([
                    "Guardar Como", "Cerrar", "Numeracion", "Aumentar",
                    "Disminuir", "Formato"
                ])

                # Si hay texto en el archivo seleccionado.
                inicio, fin = buffer.get_bounds()
                buf = buffer.get_text(inicio, fin, 0)

                if buf:
                    activar.extend([
                        "Seleccionar Todo",
                        "Identar",
                        "De Identar",
                        "Buscar Texto",
                        "Reemplazar Texto",
                        "Chequear",
                    ])
                else:
                    desactivar.extend([
                        "Seleccionar Todo",
                        "Identar",
                        "De Identar",
                        "Buscar Texto",
                        "Reemplazar Texto",
                        "Chequear",
                    ])

                # Si el contenido del archivo != al del buffer.
                archivo = self.sourceview.archivo
                texto = ""
                if archivo:
                    if os.path.exists(archivo):
                        arch = open(archivo, 'r')
                        texto = arch.read()
                        arch.close()

                if texto != buf:
                    activar.append("Guardar")

                else:
                    desactivar.append("Guardar")

                # Si hay texto seleccionado, se puede copiar y cortar.
                if buffer.get_selection_bounds():
                    activar.extend(["Cortar", "Copiar"])

                else:
                    desactivar.extend(["Cortar", "Copiar"])

                # Si hay texto en el clipboard, se puede pegar
                clipboard = gtk.clipboard_get(selection="CLIPBOARD")
                texto = clipboard.wait_for_text()

                if texto:
                    activar.append("Pegar")

                else:
                    desactivar.append("Pegar")

                # Si se puede deshacer.
                if buffer.can_undo():
                    activar.append("Deshacer")

                else:
                    desactivar.append("Deshacer")

                # Si se puede Rehacer.
                if buffer.can_redo():
                    activar.append("Rehacer")

                else:
                    desactivar.append("Rehacer")

            else:
                self.base_panel.infonotebook.set_introspeccion(None, "")

                desactivar.extend([
                    "Cortar",
                    "Copiar",
                    "Rehacer",
                    "Deshacer",
                    "Guardar",
                    "Cerrar",
                    "Guardar Como",
                    "Pegar",
                    "Seleccionar Todo",
                    #"Ejecutar Archivo",
                    #"Detener Ejecución",
                    "Identar",
                    "De Identar",
                    "Buscar Texto",
                    "Reemplazar Texto",
                    "Chequear",
                    "Numeracion",
                    "Aumentar",
                    "Disminuir",
                    "Formato"
                ])

            # Actualizar las toolbars y el menu.
            self.base_panel.toolbararchivo.update(True, activar)
            self.base_panel.toolbararchivo.update(False, desactivar)

            self.menu.update_archivos(True, activar)
            self.menu.update_archivos(False, desactivar)

            # Opciones de Proyecto.
            if self.base_panel.proyecto:
                self.menu.activar_proyecto(True)

                self.base_panel.toolbarproyecto.activar(
                    bool(self.base_panel.proyecto),
                    bool(self.base_panel.workpanel.ejecucion))

            else:
                self.menu.activar_proyecto(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Ejecutar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Detener Ejecución"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Editar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Cerrar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Guardar Proyecto"].set_sensitive(False)

            # Ejecución de archivo.
            if self.sourceview:
                self.base_panel.toolbararchivo.dict_archivo[
                    "Ejecutar Archivo"].set_sensitive(
                        not bool(self.base_panel.workpanel.ejecucion))

                self.base_panel.toolbararchivo.dict_archivo[
                    "Detener Ejecución"].set_sensitive(
                        bool(self.base_panel.workpanel.ejecucion))

            else:
                self.base_panel.toolbararchivo.dict_archivo[
                    "Ejecutar Archivo"].set_sensitive(False)
                self.base_panel.toolbararchivo.dict_archivo[
                    "Detener Ejecución"].set_sensitive(False)

        except:
            self.sourceview = False

        paginas = self.base_panel.workpanel.notebook_sourceview.get_children()
        if not paginas:
            self.__ejecutar_accion_archivo(None, "Nuevo Archivo")

        return True
示例#5
0
class IdeMain(Gtk.Window):
    
    def __init__(self):
        
        Gtk.Window.__init__(self)
        
        #self.set_title("")
        #self.set_icon_from_file(".png")
        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_border_width(5)
        self.set_position(Gtk.WindowPosition.CENTER)
        
        accel_group = Gtk.AccelGroup()
        self.add_accel_group(accel_group)
        
        self.updater = False
        self.sourceview = False
        
        base_widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        
        self.menu = Menu(accel_group)
        #toolbar = MainToolbar()
        self.base_panel = BasePanel()
        #trytoolbar = TryToolbar()
        
        base_widget.pack_start(self.menu, False, False, 0)
        #base_widget.pack_start(toolbar, False, False, 0)
        base_widget.pack_start(self.base_panel, True, True, 0)
        #base_widget.pack_start(trytoolbar, False, False, 0)
        
        self.add(base_widget)
        
        self.show_all()
        
        self.maximize()

        self.menu.connect('accion_ver', self.__ejecutar_accion_ver)
        self.menu.connect('accion_codigo', self.__ejecutar_accion_codigo)
        self.menu.connect('accion_proyecto', self.__ejecutar_accion_proyecto)
        self.menu.connect('accion_archivo', self.__ejecutar_accion_archivo)
        
        self.base_panel.connect("update", self.__new_handler)
        
        self.connect("destroy", self.__exit)
        
    def __ejecutar_accion_codigo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú codigo.
        """
        
        self.base_panel.set_accion_codigo(widget, accion)
        
    def __ejecutar_accion_ver(self, widget, accion, valor):
        """
        Cuando se hace click en una opción del menú ver.
        """
        
        self.base_panel.set_accion_ver(widget, accion, valor)
        
    def __ejecutar_accion_archivo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú que
        afecta al archivo seleccionado.
        """
        
        self.base_panel.set_accion_archivo(widget, accion)
        
    def __ejecutar_accion_proyecto(self, widget, accion):
        """
        Cuando se hace click en una opción del menú proyecto.
        """
        
        self.base_panel.set_accion_proyecto(widget, accion)
        
    def __exit(self, widget=None):
        """
        Sale de la aplicación.
        """
        
        Gtk.main_quit()
        sys.exit(0)
        
    def __new_handler(self, widget, sourceview, reset):
        """
        Elimina o reinicia la funcion que
        actualiza las toolbars y menús.
        """
        
        if self.updater and self.updater != None:
            GObject.source_remove(self.updater)
            self.updater = False
            self.sourceview = False
            
        if reset:
            self.sourceview = sourceview
            self.updater = GObject.timeout_add(500, self.__update)

    def __update(self):
        """
        Actualiza las toolbars y menus.
        """
        
        try:
            activar = []
            desactivar = []
            
            ### Si hay un archivo seleccionado.
            if self.sourceview:
                buffer = self.sourceview.get_buffer()
                
                activar.extend([
                    "Guardar Como", "Cerrar",
                    "Numeracion", "Aumentar",
                    "Disminuir", "Formato"])
                
                ### Si hay texto en el archivo seleccionado.
                inicio, fin = buffer.get_bounds()
                buf = buffer.get_text(inicio, fin, 0)
            
                if buf:
                    activar.extend([
                        "Seleccionar Todo", "Identar",
                        "De Identar", "Buscar Texto",
                        "Reemplazar Texto", "Chequear",
                        ])
                else:
                    desactivar.extend([
                        "Seleccionar Todo", "Identar",
                        "De Identar", "Buscar Texto",
                        "Reemplazar Texto", "Chequear",
                        ])
                    
                ### Si el contenido del archivo != al del buffer.
                archivo = self.sourceview.archivo
                texto = ""
                if archivo:
                    if os.path.exists(archivo):
                        arch = open(archivo, 'r')
                        texto = arch.read()
                        arch.close()
                    
                if texto != buf:
                    activar.append("Guardar")
                    
                else:
                    desactivar.append("Guardar")
                    
                ### Si hay texto seleccionado, se puede copiar y cortar.
                if buffer.get_selection_bounds():
                    activar.extend(["Cortar", "Copiar"])
                    
                else:
                    desactivar.extend(["Cortar", "Copiar"])
                    
                ### Si hay texto en el clipboard, se puede pegar
                clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
                texto = clipboard.wait_for_text()
                
                if texto:
                    activar.append("Pegar")
                    
                else:
                    desactivar.append("Pegar")
                    
                ### Si se puede deshacer.
                if buffer.can_undo():
                    activar.append("Deshacer")
                    
                else:
                    desactivar.append("Deshacer")
                    
                ### Si se puede Rehacer.
                if buffer.can_redo():
                    activar.append("Rehacer")
                    
                else:
                    desactivar.append("Rehacer")
                
            else:
                self.base_panel.infonotebook.set_introspeccion(None, "")
                
                desactivar.extend([
                    "Cortar", "Copiar",
                    "Rehacer", "Deshacer",
                    "Guardar", "Cerrar",
                    "Guardar Como", "Pegar",
                    "Seleccionar Todo",
                    #"Ejecutar Archivo",
                    #"Detener Ejecución",
                    "Identar", "De Identar",
                    "Buscar Texto",
                    "Reemplazar Texto",
                    "Chequear",
                    "Numeracion", "Aumentar",
                    "Disminuir", "Formato"])
            
            ### Actualizar las toolbars y el menu.
            self.base_panel.toolbararchivo.update(True, activar)
            self.base_panel.toolbararchivo.update(False, desactivar)
            
            self.menu.update_archivos(True, activar)
            self.menu.update_archivos(False, desactivar)
            
            ### Opciones de Proyecto.
            if self.base_panel.proyecto:
                self.menu.activar_proyecto(True)
                
                self.base_panel.toolbarproyecto.activar(
                    bool(self.base_panel.proyecto),
                    bool(self.base_panel.workpanel.ejecucion))
                    
            else:
                self.menu.activar_proyecto(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Ejecutar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Detener Ejecución"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Editar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Cerrar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto["Guardar Proyecto"].set_sensitive(False)
            
            ### Ejecución de archivo.
            if self.sourceview:
                self.base_panel.toolbararchivo.dict_archivo["Ejecutar Archivo"].set_sensitive(
                    not bool(self.base_panel.workpanel.ejecucion))
                
                self.base_panel.toolbararchivo.dict_archivo["Detener Ejecución"].set_sensitive(
                    bool(self.base_panel.workpanel.ejecucion))
                    
            else:
                self.base_panel.toolbararchivo.dict_archivo["Ejecutar Archivo"].set_sensitive(False)
                self.base_panel.toolbararchivo.dict_archivo["Detener Ejecución"].set_sensitive(False)
                
        except:
            self.sourceview = False
        
        paginas = self.base_panel.workpanel.notebook_sourceview.get_children()
        if not paginas:
            self.__ejecutar_accion_archivo(None, "Nuevo Archivo")
            
        return True
示例#6
0
class IdeMain(Gtk.Window):
    def __init__(self):

        Gtk.Window.__init__(self)

        #self.set_title("")
        #self.set_icon_from_file(".png")
        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_border_width(5)
        self.set_position(Gtk.WindowPosition.CENTER)

        accel_group = Gtk.AccelGroup()
        self.add_accel_group(accel_group)

        self.updater = False
        self.sourceview = False

        base_widget = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.menu = Menu(accel_group)
        #toolbar = MainToolbar()
        self.base_panel = BasePanel()
        #trytoolbar = TryToolbar()

        base_widget.pack_start(self.menu, False, False, 0)
        #base_widget.pack_start(toolbar, False, False, 0)
        base_widget.pack_start(self.base_panel, True, True, 0)
        #base_widget.pack_start(trytoolbar, False, False, 0)

        self.add(base_widget)

        self.show_all()

        self.maximize()

        self.menu.connect('accion_ver', self.__ejecutar_accion_ver)
        self.menu.connect('accion_codigo', self.__ejecutar_accion_codigo)
        self.menu.connect('accion_proyecto', self.__ejecutar_accion_proyecto)
        self.menu.connect('accion_archivo', self.__ejecutar_accion_archivo)

        self.base_panel.connect("update", self.__new_handler)

        self.connect("destroy", self.__exit)

    def __ejecutar_accion_codigo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú codigo.
        """

        self.base_panel.set_accion_codigo(widget, accion)

    def __ejecutar_accion_ver(self, widget, accion, valor):
        """
        Cuando se hace click en una opción del menú ver.
        """

        self.base_panel.set_accion_ver(widget, accion, valor)

    def __ejecutar_accion_archivo(self, widget, accion):
        """
        Cuando se hace click en una opción del menú que
        afecta al archivo seleccionado.
        """

        self.base_panel.set_accion_archivo(widget, accion)

    def __ejecutar_accion_proyecto(self, widget, accion):
        """
        Cuando se hace click en una opción del menú proyecto.
        """

        self.base_panel.set_accion_proyecto(widget, accion)

    def __exit(self, widget=None):
        """
        Sale de la aplicación.
        """

        Gtk.main_quit()
        sys.exit(0)

    def __new_handler(self, widget, sourceview, reset):
        """
        Elimina o reinicia la funcion que
        actualiza las toolbars y menús.
        """

        if self.updater and self.updater != None:
            GObject.source_remove(self.updater)
            self.updater = False
            self.sourceview = False

        if reset:
            self.sourceview = sourceview
            self.updater = GObject.timeout_add(500, self.__update)

    def __update(self):
        """
        Actualiza las toolbars y menus.
        """

        try:
            activar = []
            desactivar = []

            ### Si hay un archivo seleccionado.
            if self.sourceview:
                buffer = self.sourceview.get_buffer()

                activar.extend([
                    "Guardar Como", "Cerrar", "Numeracion", "Aumentar",
                    "Disminuir", "Formato"
                ])

                ### Si hay texto en el archivo seleccionado.
                inicio, fin = buffer.get_bounds()
                buf = buffer.get_text(inicio, fin, 0)

                if buf:
                    activar.extend([
                        "Seleccionar Todo",
                        "Identar",
                        "De Identar",
                        "Buscar Texto",
                        "Reemplazar Texto",
                        "Chequear",
                    ])
                else:
                    desactivar.extend([
                        "Seleccionar Todo",
                        "Identar",
                        "De Identar",
                        "Buscar Texto",
                        "Reemplazar Texto",
                        "Chequear",
                    ])

                ### Si el contenido del archivo != al del buffer.
                archivo = self.sourceview.archivo
                texto = ""
                if archivo:
                    if os.path.exists(archivo):
                        arch = open(archivo, 'r')
                        texto = arch.read()
                        arch.close()

                if texto != buf:
                    activar.append("Guardar")

                else:
                    desactivar.append("Guardar")

                ### Si hay texto seleccionado, se puede copiar y cortar.
                if buffer.get_selection_bounds():
                    activar.extend(["Cortar", "Copiar"])

                else:
                    desactivar.extend(["Cortar", "Copiar"])

                ### Si hay texto en el clipboard, se puede pegar
                clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
                texto = clipboard.wait_for_text()

                if texto:
                    activar.append("Pegar")

                else:
                    desactivar.append("Pegar")

                ### Si se puede deshacer.
                if buffer.can_undo():
                    activar.append("Deshacer")

                else:
                    desactivar.append("Deshacer")

                ### Si se puede Rehacer.
                if buffer.can_redo():
                    activar.append("Rehacer")

                else:
                    desactivar.append("Rehacer")

            else:
                self.base_panel.infonotebook.set_introspeccion(None, "")

                desactivar.extend([
                    "Cortar",
                    "Copiar",
                    "Rehacer",
                    "Deshacer",
                    "Guardar",
                    "Cerrar",
                    "Guardar Como",
                    "Pegar",
                    "Seleccionar Todo",
                    #"Ejecutar Archivo",
                    #"Detener Ejecución",
                    "Identar",
                    "De Identar",
                    "Buscar Texto",
                    "Reemplazar Texto",
                    "Chequear",
                    "Numeracion",
                    "Aumentar",
                    "Disminuir",
                    "Formato"
                ])

            ### Actualizar las toolbars y el menu.
            self.base_panel.toolbararchivo.update(True, activar)
            self.base_panel.toolbararchivo.update(False, desactivar)

            self.menu.update_archivos(True, activar)
            self.menu.update_archivos(False, desactivar)

            ### Opciones de Proyecto.
            if self.base_panel.proyecto:
                self.menu.activar_proyecto(True)

                self.base_panel.toolbarproyecto.activar(
                    bool(self.base_panel.proyecto),
                    bool(self.base_panel.workpanel.ejecucion))

            else:
                self.menu.activar_proyecto(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Ejecutar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Detener Ejecución"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Editar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Cerrar Proyecto"].set_sensitive(False)
                self.base_panel.toolbarproyecto.dict_proyecto[
                    "Guardar Proyecto"].set_sensitive(False)

            ### Ejecución de archivo.
            if self.sourceview:
                self.base_panel.toolbararchivo.dict_archivo[
                    "Ejecutar Archivo"].set_sensitive(
                        not bool(self.base_panel.workpanel.ejecucion))

                self.base_panel.toolbararchivo.dict_archivo[
                    "Detener Ejecución"].set_sensitive(
                        bool(self.base_panel.workpanel.ejecucion))

            else:
                self.base_panel.toolbararchivo.dict_archivo[
                    "Ejecutar Archivo"].set_sensitive(False)
                self.base_panel.toolbararchivo.dict_archivo[
                    "Detener Ejecución"].set_sensitive(False)

        except:
            self.sourceview = False

        paginas = self.base_panel.workpanel.notebook_sourceview.get_children()
        if not paginas:
            self.__ejecutar_accion_archivo(None, "Nuevo Archivo")

        return True