Example #1
0
class WorkPanel(Gtk.Paned):

    __gtype_name__ = 'JAMediaEditorWorkPanel'

    __gsignals__ = {
        'new_select': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE,
                       (GObject.TYPE_PYOBJECT, GObject.TYPE_STRING)),
        'ejecucion': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE,
                      (GObject.TYPE_STRING, GObject.TYPE_BOOLEAN)),
        'update':
        (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_PYOBJECT, ))
    }

    def __init__(self):

        Gtk.Paned.__init__(self, orientation=Gtk.Orientation.VERTICAL)

        self.notebook_sourceview = Notebook_SourceView()
        self.terminal = Terminal()

        # Terminal en ejecución.
        self.ejecucion = False
        # Tipo: proyecto o archivo.
        self.ejecucion_activa = False

        self.pack1(self.notebook_sourceview, resize=True, shrink=False)
        self.pack2(self.terminal, resize=False, shrink=True)

        self.show_all()
        self.terminal.set_size_request(-1, 170)

        self.notebook_sourceview.connect('new_select',
                                         self.__re_emit_new_select)
        self.notebook_sourceview.connect('update', self.__re_emit_update)
        self.terminal.connect("ejecucion", self.__set_ejecucion)
        self.terminal.connect("reset", self.detener_ejecucion)
        GLib.idle_add(self.terminal.hide)

    def __re_emit_update(self, widget, _dict):
        # Emite una señal con el estado general del archivo.
        self.emit("update", _dict)

    def __set_ejecucion(self, widget, terminal):
        # Cuando se ejecuta un archivo o un proyecto.
        self.ejecucion = terminal
        self.terminal.set_sensitive(False)

    def __re_emit_new_select(self, widget, view, tipo):
        """
        Recibe nombre y contenido de archivo seleccionado
        en Notebook_SourceView y los envia BasePanel.
        """
        self.emit('new_select', view, tipo)

    def get_default_path(self):
        # Devuelve el Directorio del archivo seleccionado en sourceview.
        return self.notebook_sourceview.get_default_path()

    def set_linea(self, index, texto):
        """
        Recibe la linea seleccionada en instrospeccion y
        y la pasa a notebook_sourceview para seleccionarla.
        """
        self.notebook_sourceview.set_linea(index, texto)

    def abrir_archivo(self, archivo):
        self.notebook_sourceview.abrir_archivo(archivo)

    def guardar_archivo(self):
        self.notebook_sourceview.guardar_archivo()

    def guardar_archivo_como(self):
        self.notebook_sourceview.guardar_archivo_como()

    def ejecutar(self, archivo=None):
        """
        Ejecuta un archivo. Si no se pasa archivo,
        ejecuta el seleccionado en notebooksourceview.
        """
        if not archivo or archivo == None:
            # Cuando se ejecuta el archivo seleccionado.
            pagina = self.notebook_sourceview.get_current_page()
            view = self.notebook_sourceview.get_children(
            )[pagina].get_children()[0]
            archivo = view.archivo
            # Si el archivo tiene cambios sin guardar o nunca se guardó.
            if not archivo or archivo == None or \
                view.get_buffer().get_modified():
                dialog = DialogoAlertaSinGuardar(
                    parent_window=self.get_toplevel())
                respuesta = dialog.run()
                dialog.destroy()
                if respuesta == Gtk.ResponseType.ACCEPT:
                    self.guardar_archivo()
                elif respuesta == Gtk.ResponseType.CANCEL:
                    return
                elif respuesta == Gtk.ResponseType.CLOSE:
                    return
                archivo = view.archivo
            self.ejecucion_activa = "archivo"
            self.emit("ejecucion", self.ejecucion_activa, True)
        else:
            # Cuando se ejecuta el main de proyecto.
            source = None
            for view in self.get_archivos_de_proyecto(
                    self.get_parent().get_parent().proyecto["path"]):
                if view.archivo == archivo:
                    source = view
                    break
            if source:
                if source.get_buffer().get_modified():
                    dialog = DialogoAlertaSinGuardar(
                        parent_window=self.get_toplevel())
                    respuesta = dialog.run()
                    dialog.destroy()
                    if respuesta == Gtk.ResponseType.ACCEPT:
                        source.guardar()
                    elif respuesta == Gtk.ResponseType.CANCEL:
                        return
                    elif respuesta == Gtk.ResponseType.CLOSE:
                        return
            self.ejecucion_activa = "proyecto"
            self.emit("ejecucion", self.ejecucion_activa, True)
        if archivo:
            self.terminal.ejecutar(archivo)

    def detener_ejecucion(self,
                          widget=None,
                          notebook=None,
                          terminal=None,
                          pag_indice=None):
        if self.ejecucion:
            self.ejecucion.set_interprete()
            self.ejecucion = False
            self.terminal.set_sensitive(True)
            self.emit("ejecucion", self.ejecucion_activa, False)
            self.ejecucion_activa = False

    def set_accion_codigo(self, accion):
        # Ejecuta acciones sobre el código del archivo seleccionado.
        self.notebook_sourceview.set_accion(accion)

    def set_accion_archivos(self, accion):
        # Ejecuta acciones sobre el archivo seleccionado.
        self.notebook_sourceview.set_accion(accion)

    def set_accion_ver(self, accion, valor):
        # Ejecuta acciones sobre el archivo seleccionado.
        if accion == "Panel inferior":
            if not valor:
                self.terminal.hide()
            else:
                self.terminal.show()
        elif accion == "Numeracion":
            self.notebook_sourceview.set_accion(accion, valor)

    def get_archivos_de_proyecto(self, proyecto_path):
        """
        Devuelve sourceview de todos los archivos abiertos
        de un proyecto según proyecto_path.
        """
        return self.notebook_sourceview.get_archivos_de_proyecto(proyecto_path)

    def remove_proyect(self, proyecto_path):
        # Cuando se elimina el proyecto desde la vista de estructura.
        self.notebook_sourceview.remove_proyect(proyecto_path)
Example #2
0
class WorkPanel(Gtk.Paned):

    __gtype_name__ = 'JAMediaEditorWorkPanel'

    __gsignals__ = {
    'new_select': (GObject.SIGNAL_RUN_LAST,
        GObject.TYPE_NONE, (GObject.TYPE_PYOBJECT,
        GObject.TYPE_STRING)),
    'ejecucion': (GObject.SIGNAL_RUN_LAST,
        GObject.TYPE_NONE, (GObject.TYPE_STRING,
        GObject.TYPE_BOOLEAN)),
    'update': (GObject.SIGNAL_RUN_LAST,
        GObject.TYPE_NONE, (GObject.TYPE_PYOBJECT,))}

    def __init__(self):

        Gtk.Paned.__init__(self, orientation=Gtk.Orientation.VERTICAL)

        self.notebook_sourceview = Notebook_SourceView()
        self.terminal = Terminal()

        # Terminal en ejecución.
        self.ejecucion = False
        # Tipo: proyecto o archivo.
        self.ejecucion_activa = False

        self.pack1(self.notebook_sourceview, resize=True, shrink=False)
        self.pack2(self.terminal, resize=False, shrink=True)

        self.show_all()
        self.terminal.set_size_request(-1, 170)

        self.notebook_sourceview.connect('new_select',
            self.__re_emit_new_select)
        self.notebook_sourceview.connect('update', self.__re_emit_update)
        self.terminal.connect("ejecucion", self.__set_ejecucion)
        self.terminal.connect("reset", self.detener_ejecucion)
        GLib.idle_add(self.terminal.hide)

    def __re_emit_update(self, widget, _dict):
        # Emite una señal con el estado general del archivo.
        self.emit("update", _dict)

    def __set_ejecucion(self, widget, terminal):
        # Cuando se ejecuta un archivo o un proyecto.
        self.ejecucion = terminal
        self.terminal.set_sensitive(False)

    def __re_emit_new_select(self, widget, view, tipo):
        """
        Recibe nombre y contenido de archivo seleccionado
        en Notebook_SourceView y los envia BasePanel.
        """
        self.emit('new_select', view, tipo)

    def get_default_path(self):
        # Devuelve el Directorio del archivo seleccionado en sourceview.
        return self.notebook_sourceview.get_default_path()

    def set_linea(self, index, texto):
        """
        Recibe la linea seleccionada en instrospeccion y
        y la pasa a notebook_sourceview para seleccionarla.
        """
        self.notebook_sourceview.set_linea(index, texto)

    def abrir_archivo(self, archivo):
        self.notebook_sourceview.abrir_archivo(archivo)

    def guardar_archivo(self):
        self.notebook_sourceview.guardar_archivo()

    def guardar_archivo_como(self):
        self.notebook_sourceview.guardar_archivo_como()

    def ejecutar(self, archivo=None):
        """
        Ejecuta un archivo. Si no se pasa archivo,
        ejecuta el seleccionado en notebooksourceview.
        """
        if not archivo or archivo == None:
            # Cuando se ejecuta el archivo seleccionado.
            pagina = self.notebook_sourceview.get_current_page()
            view = self.notebook_sourceview.get_children()[
                pagina].get_children()[0]
            archivo = view.archivo
            # Si el archivo tiene cambios sin guardar o nunca se guardó.
            if not archivo or archivo == None or \
                view.get_buffer().get_modified():
                dialog = DialogoAlertaSinGuardar(
                    parent_window=self.get_toplevel())
                respuesta = dialog.run()
                dialog.destroy()
                if respuesta == Gtk.ResponseType.ACCEPT:
                    self.guardar_archivo()
                elif respuesta == Gtk.ResponseType.CANCEL:
                    return
                elif respuesta == Gtk.ResponseType.CLOSE:
                    return
                archivo = view.archivo
            self.ejecucion_activa = "archivo"
            self.emit("ejecucion", self.ejecucion_activa, True)
        else:
            # Cuando se ejecuta el main de proyecto.
            source = None
            for view in self.get_archivos_de_proyecto(
                self.get_parent().get_parent().proyecto["path"]):
                if view.archivo == archivo:
                    source = view
                    break
            if source:
                if source.get_buffer().get_modified():
                    dialog = DialogoAlertaSinGuardar(
                        parent_window=self.get_toplevel())
                    respuesta = dialog.run()
                    dialog.destroy()
                    if respuesta == Gtk.ResponseType.ACCEPT:
                        source.guardar()
                    elif respuesta == Gtk.ResponseType.CANCEL:
                        return
                    elif respuesta == Gtk.ResponseType.CLOSE:
                        return
            self.ejecucion_activa = "proyecto"
            self.emit("ejecucion", self.ejecucion_activa, True)
        if archivo:
            self.terminal.ejecutar(archivo)

    def detener_ejecucion(self, widget=None, notebook=None,
        terminal=None, pag_indice=None):
        if self.ejecucion:
            self.ejecucion.set_interprete()
            self.ejecucion = False
            self.terminal.set_sensitive(True)
            self.emit("ejecucion", self.ejecucion_activa, False)
            self.ejecucion_activa = False

    def set_accion_codigo(self, accion):
        # Ejecuta acciones sobre el código del archivo seleccionado.
        self.notebook_sourceview.set_accion(accion)

    def set_accion_archivos(self, accion):
        # Ejecuta acciones sobre el archivo seleccionado.
        self.notebook_sourceview.set_accion(accion)

    def set_accion_ver(self, accion, valor):
        # Ejecuta acciones sobre el archivo seleccionado.
        if accion == "Panel inferior":
            if not valor:
                self.terminal.hide()
            else:
                self.terminal.show()
        elif accion == "Numeracion":
            self.notebook_sourceview.set_accion(accion, valor)

    def get_archivos_de_proyecto(self, proyecto_path):
        """
        Devuelve sourceview de todos los archivos abiertos
        de un proyecto según proyecto_path.
        """
        return self.notebook_sourceview.get_archivos_de_proyecto(proyecto_path)

    def remove_proyect(self, proyecto_path):
        # Cuando se elimina el proyecto desde la vista de estructura.
        self.notebook_sourceview.remove_proyect(proyecto_path)