Example #1
0
    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))

        vbox = gtk.VBox()
        self.visor = VideoVisor()
        self.progress = ProgressPlayer()
        self.playercontrols = PlayerControls()

        vbox.pack_start(self.visor, True, True, 0)
        vbox.pack_start(self.progress, False, False, 0)
        vbox.pack_start(self.playercontrols, False, False, 0)

        self.pack1(vbox, resize=True, shrink=True)

        self.playerlist = PlayerList()
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.show_all()

        self.player = False

        self.visor.connect("ocultar_controles", self.__ocultar_controles)
        self.progress.connect("user-set-value", self.__user_set_progress)
        self.playercontrols.volumen.connect("volumen", self.__set_volumen)
        self.playerlist.lista.connect("nueva-seleccion",
                                      self.__cargar_reproducir)
        self.playerlist.connect("accion", self.__accion_menu)
        self.playercontrols.connect("accion-controls", self.__accion_controls)
        self.playerlist.balance.connect("balance-valor", self.__accion_balance)
Example #2
0
    def __init__(self):

        gtk.EventBox.__init__(self)

        self.set_border_width(2)
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))

        vbox = gtk.VBox()
        self.playerlist = PlayerList()
        vbox.pack_start(self.playerlist, True, True, 0)

        self.playercontrols = PlayerControls()
        vbox.pack_end(self.playercontrols, False, False)

        self.add(vbox)
        self.show_all()

        self.player = False
        self.datos = False

        self.playercontrols.volumen.connect("volumen", self.__set_volumen)
        self.playerlist.lista.connect("nueva-seleccion",
            self.__cargar_reproducir)
        self.playerlist.connect("accion", self.__accion_menu)
        self.playercontrols.connect("accion-controls", self.__accion_controls)
        self.connect("show", self.__show)
        self.connect("hide", self.__hide)
Example #3
0
    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(0, get_colors("window"))

        self.tareas_pendientes = []

        self.playerlist = PlayerList()
        self.playerlist.set_mime_types(["audio/*", "video/*"])
        self.scrolltareas = ScrollTareas()

        self.pack1(self.playerlist, resize=False, shrink=True)
        self.pack2(self.scrolltareas, resize=True, shrink=True)

        self.show_all()

        self.playerlist.connect(
            "accion", self.__re_emit_accion_list)
        self.playerlist.connect(
            "nueva-seleccion", self.__selecction_file)
        self.scrolltareas.connect(
            'accion-tarea', self.__accion_tareas)
        self.scrolltareas.connect("tareas", self.__info_num_tareas)
Example #4
0
    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))

        vbox = gtk.VBox()
        self.visor = VideoVisor()
        self.progress = ProgressPlayer()
        self.playercontrols = PlayerControls()

        vbox.pack_start(self.visor, True, True, 0)
        vbox.pack_start(self.progress, False, False, 0)
        vbox.pack_start(self.playercontrols, False, False, 0)

        self.pack1(vbox, resize=True, shrink=True)

        self.playerlist = PlayerList()
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.show_all()

        self.player = False

        self.visor.connect("ocultar_controles", self.__ocultar_controles)
        self.progress.connect("user-set-value", self.__user_set_progress)
        self.playercontrols.volumen.connect("volumen", self.__set_volumen)
        self.playerlist.lista.connect("nueva-seleccion", self.__cargar_reproducir)
        self.playerlist.connect("accion", self.__accion_menu)
        self.playercontrols.connect("accion-controls", self.__accion_controls)
        self.playerlist.balance.connect("balance-valor", self.__accion_balance)
Example #5
0
    def __init__(self, dataDict):
        """
        Gather all provided data from the passed in dictionary, filling in the gaps when necessary
        :param dataDict:  dictionary of server data
        """
        if "Status" in dataDict.keys():
            self.__status = dataDict["Status"]
        else:
            self.__status = "Unknown Status"
        if "IP" in dataDict.keys():
            self.__ip = dataDict["IP"]
        else:
            self.__ip = "Unknown IP"
        if "Name" in dataDict.keys():
            self.__name = dataDict["Name"]
        else:
            self.__name = "Unknown Server"
        if "Game" in dataDict.keys():
            self.__game = dataDict["Game"]
        else:
            self.__game = "Unknown Game"
        if "Game Type" in dataDict.keys():
            self.__gameType = dataDict["Game Type"]
        else:
            self.__gameType = ""
        if "Map" in dataDict.keys():
            self.__map = dataDict["Map"]
        else:
            self.__map = "Unknown Map"
        if "Population" in dataDict.keys():
            self.__population = dataDict["Population"]
        else:
            self.__population = "?/?"
        if "Player List" in dataDict.keys():
            self.__playerList = PlayerList(dataDict["Player List"])
        else:
            self.__playerList = PlayerList("SKIP")

        self.__admins = [
            "Baron voŋ Moorland", "Raysparks", "Sir Boring", "Herbanator",
            "Jalen♡", "The Flying Flail", "Rosy", "ZedHead", "SomeDuke", "J",
            "Beständig", "bone", "flask", "『Sushiki』", "Walkin", "Eggplant",
            "Tez", "[FOR] Reason", "Goog", "ducksauce", "P", "Thaedius",
            "Marlop", "ムgòn Đominus"
        ]
Example #6
0
class OjosCompuestos(Gtk.HPaned):

    def __init__(self, pantalla):

        GObject.GObject.__init__(self)

        print "Corriendo Ojos Compuestos . . ."

        self.override_background_color(Gtk.StateType.NORMAL, color_parser("#ffffff"))

        self.player = False
        self.pantalla = pantalla
        self.playerlist = PlayerList()

        self.pack1(self.pantalla, resize=True, shrink=True)
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.playerlist.connect("nueva-seleccion", self.__play_item)

        self.connect("realize", self.__load_imagenes)
        self.show_all()

    def __load_imagenes(self, widget):
        GLib.idle_add(self.__run)

    def __run(self):
        self.player = ImagePlayer(self.pantalla)
        dirpath = os.path.join(BASE_PATH, "Imagenes")
        elementos = []
        for path in sorted(os.listdir(dirpath)):
            elementos.append([path, os.path.join(dirpath, path)])
        self.playerlist.lista.agregar_items(elementos)
        dialog = Dialog(parent=self.get_toplevel(),
            text="Presiona Escape Cuando Desees Salir")
        dialog.run()
        return False

    def __play_item(self, widget, path):
        if path:
            self.player.load(path)

    def salir(self):
        self.player.stop()
Example #7
0
    def __init__(self, pantalla):

        gtk.HPaned.__init__(self)

        print "Corriendo Ojos Compuestos . . ."

        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#ffffff"))

        self.player = False
        self.pantalla = pantalla
        self.playerlist = PlayerList()

        self.pack1(self.pantalla, resize=True, shrink=True)
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.playerlist.connect("nueva-seleccion", self.__play_item)

        self.connect("realize", self.__load_imagenes)
        self.show_all()
Example #8
0
class OjosCompuestos(gtk.HPaned):

    def __init__(self, pantalla):

        gtk.HPaned.__init__(self)

        print "Corriendo Ojos Compuestos . . ."

        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#ffffff"))

        self.player = False
        self.pantalla = pantalla
        self.playerlist = PlayerList()

        self.pack1(self.pantalla, resize=True, shrink=True)
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.playerlist.connect("nueva-seleccion", self.__play_item)

        self.connect("realize", self.__load_imagenes)
        self.show_all()

    def __load_imagenes(self, widget):
        gobject.idle_add(self.__run)

    def __run(self):
        self.player = ImagePlayer(self.pantalla)
        dirpath = os.path.join(BASE_PATH, "Imagenes")
        elementos = []
        for path in sorted(os.listdir(dirpath)):
            elementos.append([path, os.path.join(dirpath, path)])
        self.playerlist.lista.agregar_items(elementos)
        dialog = Dialog(parent=self.get_toplevel(),
            text="Presiona Escape Cuando Desees Salir")
        dialog.run()
        return False

    def __play_item(self, widget, path):
        if path:
            self.player.load(path)

    def salir(self):
        self.player.stop()
Example #9
0
    def __init__(self, pantalla):

        GObject.GObject.__init__(self)

        print "Corriendo Ojos Compuestos . . ."

        self.override_background_color(Gtk.StateType.NORMAL,
                                       color_parser("#ffffff"))

        self.player = False
        self.pantalla = pantalla
        self.playerlist = PlayerList()

        self.pack1(self.pantalla, resize=True, shrink=True)
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.playerlist.connect("nueva-seleccion", self.__play_item)

        self.connect("realize", self.__load_imagenes)
        self.show_all()
Example #10
0
    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(0, get_colors("window"))

        self.tareas_pendientes = []

        self.playerlist = PlayerList()
        self.playerlist.set_mime_types(["audio/*", "video/*"])
        self.scrolltareas = ScrollTareas()

        self.pack1(self.playerlist, resize=False, shrink=True)
        self.pack2(self.scrolltareas, resize=True, shrink=True)

        self.show_all()

        self.playerlist.connect("accion", self.__re_emit_accion_list)
        self.playerlist.connect("nueva-seleccion", self.__selecction_file)
        self.scrolltareas.connect('accion-tarea', self.__accion_tareas)
        self.scrolltareas.connect("tareas", self.__info_num_tareas)
Example #11
0
    def __init__(self, pantalla):

        GObject.GObject.__init__(self)

        print "Corriendo Ojos Compuestos . . ."

        self.override_background_color(Gtk.StateType.NORMAL, color_parser("#ffffff"))

        self.player = False
        self.pantalla = pantalla
        self.playerlist = PlayerList()

        self.pack1(self.pantalla, resize=True, shrink=True)
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.playerlist.connect("nueva-seleccion", self.__play_item)

        self.connect("realize", self.__load_imagenes)
        self.show_all()
Example #12
0
class VideoPanel(gtk.HPaned):

    __gsignals__ = {"playing": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])}

    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))

        vbox = gtk.VBox()
        self.visor = VideoVisor()
        self.progress = ProgressPlayer()
        self.playercontrols = PlayerControls()

        vbox.pack_start(self.visor, True, True, 0)
        vbox.pack_start(self.progress, False, False, 0)
        vbox.pack_start(self.playercontrols, False, False, 0)

        self.pack1(vbox, resize=True, shrink=True)

        self.playerlist = PlayerList()
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.show_all()

        self.player = False

        self.visor.connect("ocultar_controles", self.__ocultar_controles)
        self.progress.connect("user-set-value", self.__user_set_progress)
        self.playercontrols.volumen.connect("volumen", self.__set_volumen)
        self.playerlist.lista.connect("nueva-seleccion", self.__cargar_reproducir)
        self.playerlist.connect("accion", self.__accion_menu)
        self.playercontrols.connect("accion-controls", self.__accion_controls)
        self.playerlist.balance.connect("balance-valor", self.__accion_balance)

    def __ocultar_controles(self, widget, valor):
        if valor:
            self.set_border_width(0)
            self.get_toplevel().set_border_width(0)
            self.get_toplevel().toolbar.hide()
            self.progress.hide()
            self.playercontrols.hide()
            self.playerlist.hide()
        else:
            self.get_toplevel().set_border_width(2)
            self.set_border_width(2)
            self.get_toplevel().toolbar.show()
            self.progress.show()
            self.playercontrols.show()
            self.playerlist.show()

    def __update_balance(self):
        config = {}
        if self.player:
            config = self.player.get_balance()
        self.playerlist.balance.set_balance(
            brillo=config.get("brillo", 50.0),
            contraste=config.get("contraste", 50.0),
            saturacion=config.get("saturacion", 50.0),
            hue=config.get("hue", 50.0),
            gamma=config.get("gamma", 10.0),
        )
        return False

    def __accion_balance(self, widget, valor, prop):
        if prop == "saturacion":
            self.player.set_balance(saturacion=valor)
        elif prop == "contraste":
            self.player.set_balance(contraste=valor)
        elif prop == "brillo":
            self.player.set_balance(brillo=valor)
        elif prop == "hue":
            self.player.set_balance(hue=valor)
        elif prop == "gamma":
            self.player.set_balance(gamma=valor)

    def __accion_controls(self, widget, accion):
        if accion == "atras":
            self.playerlist.lista.seleccionar_anterior()
        elif accion == "siguiente":
            self.playerlist.lista.seleccionar_siguiente()
        elif accion == "stop":
            if self.player:
                self.player.stop()
        elif accion == "pausa-play":
            if self.player:
                self.player.pause_play()
        elif accion == "Izquierda" or accion == "Derecha":
            if self.player:
                self.player.rotar(accion)
        elif accion == "showlist":
            if widget.lista.get_active():
                self.playerlist.show()
            else:
                self.playerlist.hide()
        elif accion == "showcontrols":
            if widget.controls.get_active():
                self.visor.set_activo(False)
            else:
                self.visor.set_activo(True)

    def __set_volumen(self, widget, valor):
        if self.player:
            self.player.set_volumen(valor)

    def __accion_menu(self, playerlist, lista, accion, _iter):
        if lista and accion and _iter:
            uri = lista.get_model().get_value(_iter, 2)
            if accion == "Quitar" or accion == "Borrar":
                dialog = gtk.Dialog(
                    parent=self.get_toplevel(),
                    title="Alerta",
                    buttons=("Si", gtk.RESPONSE_ACCEPT, "No", gtk.RESPONSE_CANCEL),
                )
                dialog.set_border_width(15)
                dialog.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
                texto = uri
                if len(texto) > 30:
                    texto = " . . . " + str(texto[len(texto) - 30 : -1])
                label = gtk.Label("¿%s:  %s?" % (accion, texto))
                label.show()
                dialog.vbox.pack_start(label, True, True, 5)
                if dialog.run() == gtk.RESPONSE_ACCEPT:
                    self.stop()
                    path = lista.get_model().get_path(_iter)
                    path = (path[0],)
                    lista.get_model().remove(_iter)
                    self.__reselect(lista, path)
                    if accion == "Quitar":
                        pass
                    elif accion == "Borrar":
                        if os.path.isfile(uri):
                            borrar(uri)
                dialog.destroy()
            elif accion == "Subtitulos":
                dialog = gtk.FileChooserDialog(
                    title="Cargar Subtitulos",
                    parent=self.get_toplevel(),
                    action=gtk.FILE_CHOOSER_ACTION_OPEN,
                    buttons=("Abrir", gtk.RESPONSE_ACCEPT, "Salir", gtk.RESPONSE_CANCEL),
                )
                dialog.set_border_width(15)
                dialog.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
                dialog.set_current_folder_uri("file://%s" % os.path.dirname(uri))
                dialog.set_select_multiple(False)
                filtro = gtk.FileFilter()
                filtro.set_name("text")
                filtro.add_mime_type("text/*")
                dialog.add_filter(filtro)
                if dialog.run() == gtk.RESPONSE_ACCEPT:
                    self.player.player.set_property("suburi", "file://" + dialog.get_filename())
                    self.player.player.set_property("subtitle-font-desc", "sans bold 18")
                dialog.destroy()

    def __reselect(self, lista, path):
        try:
            if path[0] > -1:
                lista.get_selection().select_iter(lista.get_model().get_iter(path))
            else:
                lista.seleccionar_primero()
        except:
            lista.seleccionar_primero()

    def __cargar_reproducir(self, widget, uri):
        widget.set_sensitive(False)
        volumen = 1.0
        if self.player:
            volumen = float("{:.1f}".format(self.playercontrols.volumen.get_value() * 10))
        self.stop()

        xid = self.visor.get_property("window").xid
        self.player = JAMediaReproductor()

        self.player.connect("endfile", self.__endfile)
        self.player.connect("estado", self.__state_changed)
        self.player.connect("newposicion", self.progress.update_progress)
        self.player.connect("video", self.playerlist.set_video)
        self.player.connect("video", self.playercontrols.set_video)

        self.player.load(uri, xid)
        thread = threading.Thread(target=self.player.play)
        thread.start()
        self.player.set_volumen(volumen)
        self.playercontrols.volumen.set_value(volumen / 10)
        widget.set_sensitive(True)

    def __endfile(self, widget=None, senial=None):
        self.playercontrols.set_paused()
        self.playerlist.lista.seleccionar_siguiente()

    def __state_changed(self, widget=None, valor=None):
        if "playing" in valor:
            self.playercontrols.set_playing()
            self.emit("playing")
            gobject.idle_add(self.__update_balance)
        elif "paused" in valor or "None" in valor:
            self.playercontrols.set_paused()
            gobject.idle_add(self.__update_balance)
        else:
            print "Estado del Reproductor desconocido:", valor
        self.playercontrols.set_sensitive(True)

    def __user_set_progress(self, widget, valor):
        if self.player:
            self.player.set_position(valor)

    def stop(self):
        if self.player:
            self.player.disconnect_by_func(self.__endfile)
            self.player.disconnect_by_func(self.__state_changed)
            self.player.disconnect_by_func(self.progress.update_progress)
            self.player.disconnect_by_func(self.playerlist.set_video)
            self.player.disconnect_by_func(self.playercontrols.set_video)
            self.player.stop()
            del (self.player)
            self.player = False
        self.progress.update_progress(None, 0.0)
        self.playerlist.set_video(False, False)
        self.playercontrols.set_video(False, False)
        self.playercontrols.set_paused()
        self.playercontrols.set_sensitive(False)
        self.visor.modify_bg(gtk.STATE_NORMAL, get_colors("drawingplayer"))
Example #13
0
class WidgetConvert(gtk.HPaned):

    __gsignals__ = {
        "accion-list":
        (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE,
         (gobject.TYPE_PYOBJECT, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
        "in-run":
        (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN, )),
        "pendientes":
        (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, ))
    }

    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(0, get_colors("window"))

        self.tareas_pendientes = []

        self.playerlist = PlayerList()
        self.playerlist.set_mime_types(["audio/*", "video/*"])
        self.scrolltareas = ScrollTareas()

        self.pack1(self.playerlist, resize=False, shrink=True)
        self.pack2(self.scrolltareas, resize=True, shrink=True)

        self.show_all()

        self.playerlist.connect("accion", self.__re_emit_accion_list)
        self.playerlist.connect("nueva-seleccion", self.__selecction_file)
        self.scrolltareas.connect('accion-tarea', self.__accion_tareas)
        self.scrolltareas.connect("tareas", self.__info_num_tareas)

    def __info_num_tareas(self, widget, num):
        self.__emit_pendientes("Archivos a Procesar: %s" % num)

    def __accion_tareas(self, widget, widgetarchivo, accion):
        """
        Cuando el usuario ejecuta una acción en la botonera derecha.
        """

        if accion == "Ejecutar Tarea en Archivo":
            self.tareas_pendientes = [widgetarchivo]
            gobject.idle_add(self.__run_stack_tareas)

        elif accion == "Ejecutar Tareas en la Lista":
            self.tareas_pendientes = []
            for tarea in self.scrolltareas.vbox.get_children():
                tarea.hide()
                self.tareas_pendientes.append(tarea)

            gobject.idle_add(self.__run_stack_tareas)

        elif accion == "Copiar Tarea a Toda la Lista":
            self.get_toplevel().set_sensitive(False)
            for filepath in self.playerlist.get_items_paths():
                self.__selecction_file(False, filepath)

            self.scrolltareas.copy_tarea(widgetarchivo.get_tareas())
            self.__emit_pendientes("Archivos a Procesar: %s" %
                                   len(self.scrolltareas.vbox.get_children()))
            self.get_toplevel().set_sensitive(True)

        else:
            # Al recibir end, continúa
            gobject.idle_add(self.__run_stack_tareas)

    def __run_stack_tareas(self):
        if PR:
            print "WidgetConvert", "__run_stack_tareas"

        if not self.tareas_pendientes:
            self.emit("in-run", False)
            widgetarchivo = self.scrolltareas.vbox.get_children()[0]
            widgetarchivo.salir()
            self.playerlist.select_valor(widgetarchivo.path_origen)
            self.playerlist.set_sensitive(True)

            for tarea in self.scrolltareas.vbox.get_children():
                tarea.show()

            gobject.timeout_add(6, self.__emit_pendientes,
                                "No Hay Tareas Pendientes.")

        else:
            widgetarchivo = self.tareas_pendientes[0]
            widgetarchivo.salir()
            self.tareas_pendientes.remove(widgetarchivo)
            self.emit("in-run", True)
            self.playerlist.select_valor(widgetarchivo.path_origen)
            self.playerlist.set_sensitive(False)

            for tarea in self.scrolltareas.vbox.get_children():
                tarea.hide()

            gobject.timeout_add(
                6, self.__emit_pendientes, "Archivos Pendientes: %s" %
                str(len(self.tareas_pendientes) + 1))

            widgetarchivo.show()
            widgetarchivo.play()

        return False

    def __emit_pendientes(self, info):
        self.emit("pendientes", info)
        return False

    def __selecction_file(self, widget, path):
        """
        Cuando el usuario selecciona un archivo en la lista.
        """
        if not path:
            return

        if not os.path.exists(path):
            return

        self.scrolltareas.crear_tarea(path)
        self.__emit_pendientes("Archivos a Procesar: %s" %
                               len(self.scrolltareas.vbox.get_children()))

    def __re_emit_accion_list(self, widget, lista, accion, _iter):
        """
        Cuando el usuario selecciona opciones en el menu emergente de
        la lista de archivos.
        """
        if accion == "limpiar":
            self.reset()

        else:
            self.emit("accion-list", lista, accion, _iter)

    def reset(self):
        """
        Limpia la lista de archivos y el widget de tareas.
        """
        self.tareas_pendientes = []
        self.scrolltareas.limpiar()
        self.playerlist.limpiar()

    def quitar(self, path):
        """
        Quita el Widget de tareas de un archivo en particular.
        """
        for widgetarchivo in self.scrolltareas.vbox.get_children():
            if widgetarchivo.path_origen == path:
                self.scrolltareas.vbox.remove(widgetarchivo)
                widgetarchivo.destroy()
                break
Example #14
0
class WidgetConvert(gtk.HPaned):

    __gsignals__ = {
    "accion-list": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,
        gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
    "in-run": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, (gobject.TYPE_BOOLEAN, )),
    "pendientes": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, (gobject.TYPE_STRING, ))}

    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(0, get_colors("window"))

        self.tareas_pendientes = []

        self.playerlist = PlayerList()
        self.playerlist.set_mime_types(["audio/*", "video/*"])
        self.scrolltareas = ScrollTareas()

        self.pack1(self.playerlist, resize=False, shrink=True)
        self.pack2(self.scrolltareas, resize=True, shrink=True)

        self.show_all()

        self.playerlist.connect("accion", self.__re_emit_accion_list)
        self.playerlist.connect("nueva-seleccion", self.__selecction_file)
        self.scrolltareas.connect('accion-tarea', self.__accion_tareas)
        self.scrolltareas.connect("tareas", self.__info_num_tareas)

    def __info_num_tareas(self, widget, num):
        self.__emit_pendientes("Archivos a Procesar: %s" % num)

    def __accion_tareas(self, widget, widgetarchivo, accion):
        """
        Cuando el usuario ejecuta una acción en la botonera derecha.
        """

        if accion == "Ejecutar Tarea en Archivo":
            self.tareas_pendientes = [widgetarchivo]
            gobject.idle_add(self.__run_stack_tareas)

        elif accion == "Ejecutar Tareas en la Lista":
            self.tareas_pendientes = []
            for tarea in self.scrolltareas.vbox.get_children():
                tarea.hide()
                self.tareas_pendientes.append(tarea)

            gobject.idle_add(self.__run_stack_tareas)

        elif accion == "Copiar Tarea a Toda la Lista":
            self.get_toplevel().set_sensitive(False)
            for filepath in self.playerlist.get_items_paths():
                self.__selecction_file(False, filepath)

            self.scrolltareas.copy_tarea(widgetarchivo.get_tareas())
            self.__emit_pendientes("Archivos a Procesar: %s" % len(
                self.scrolltareas.vbox.get_children()))
            self.get_toplevel().set_sensitive(True)

        else:
            # Al recibir end, continúa
            gobject.idle_add(self.__run_stack_tareas)

    def __run_stack_tareas(self):
        if PR:
            print "WidgetConvert", "__run_stack_tareas"

        if not self.tareas_pendientes:
            self.emit("in-run", False)
            widgetarchivo = self.scrolltareas.vbox.get_children()[0]
            widgetarchivo.salir()
            self.playerlist.select_valor(widgetarchivo.path_origen)
            self.playerlist.set_sensitive(True)

            for tarea in self.scrolltareas.vbox.get_children():
                tarea.show()

            gobject.timeout_add(6, self.__emit_pendientes,
                "No Hay Tareas Pendientes.")

        else:
            widgetarchivo = self.tareas_pendientes[0]
            widgetarchivo.salir()
            self.tareas_pendientes.remove(widgetarchivo)
            self.emit("in-run", True)
            self.playerlist.select_valor(widgetarchivo.path_origen)
            self.playerlist.set_sensitive(False)

            for tarea in self.scrolltareas.vbox.get_children():
                tarea.hide()

            gobject.timeout_add(6, self.__emit_pendientes,
                "Archivos Pendientes: %s" % str(len(
                self.tareas_pendientes) + 1))

            widgetarchivo.show()
            widgetarchivo.play()

        return False

    def __emit_pendientes(self, info):
        self.emit("pendientes", info)
        return False

    def __selecction_file(self, widget, path):
        """
        Cuando el usuario selecciona un archivo en la lista.
        """
        if not path:
            return

        if not os.path.exists(path):
            return

        self.scrolltareas.crear_tarea(path)
        self.__emit_pendientes("Archivos a Procesar: %s" % len(
            self.scrolltareas.vbox.get_children()))

    def __re_emit_accion_list(self, widget, lista, accion, _iter):
        """
        Cuando el usuario selecciona opciones en el menu emergente de
        la lista de archivos.
        """
        if accion == "limpiar":
            self.reset()

        else:
            self.emit("accion-list", lista, accion, _iter)

    def reset(self):
        """
        Limpia la lista de archivos y el widget de tareas.
        """
        self.tareas_pendientes = []
        self.scrolltareas.limpiar()
        self.playerlist.limpiar()

    def quitar(self, path):
        """
        Quita el Widget de tareas de un archivo en particular.
        """
        for widgetarchivo in self.scrolltareas.vbox.get_children():
            if widgetarchivo.path_origen == path:
                self.scrolltareas.vbox.remove(widgetarchivo)
                widgetarchivo.destroy()
                break
    def __init__(self, playerName = None, threadedNet = True):
        dcFileNames = ['direct.dc', 'tagger.dc']
        
        ClientRepository.__init__(self, dcFileNames = dcFileNames,
                                  connectMethod = self.CM_NET,
                                  threadedNet = threadedNet)

        base.transitions.FadeModelName = 'models/fade'
        
        # Need at least 32 bits to receive big picture packets.
        self.setTcpHeaderSize(4)

        # Allow some time for other processes.  This also allows time
        # each frame for the network thread to run.
        base.setSleep(0.01)

        # If we're using OpenGL, we can enable shaders.  (DirectX
        # shader support is still kind of spotty, even for simple
        # shaders like these.)
        if base.pipe and base.pipe.getInterfaceName() == 'OpenGL':
            Globals.EnableShaders = True

        self.gotMusic = False
        self.__getMusic()
        
        # For the browse button.
        self.posterDefaultDir = Filename.getHomeDirectory().toOsSpecific()

        # Load a fun font to be the default text font.
        labelFont = loader.loadFont('models/amsterdam.ttf', okMissing = True)
        if labelFont:
            # Make a fuzzy halo behind the font so it looks kind of
            # airbrushy
            labelFont.setOutline(VBase4(0, 0, 0, 1), 2.0, 0.9)
            TextNode.setDefaultFont(labelFont)

        base.disableMouse()
        if base.mouseWatcher:
            mb = ModifierButtons()
            mb.addButton(KeyboardButton.control())
            base.mouseWatcher.node().setModifierButtons(mb)
            base.buttonThrowers[0].node().setModifierButtons(mb)
        taskMgr.setupTaskChain('loadPoster', numThreads = 4,
                               threadPriority = TPLow)
        #taskMgr.setupTaskChain('net', numThreads = 1, threadPriority = TPLow, frameSync = True)

        # Set up a text property called "tag" that renders using the
        # tag font, in white, with a shadow.  This is used for
        # rendering the art-painting awards at the end of the round.
        tpMgr = TextPropertiesManager.getGlobalPtr()
        tp = TextProperties()
        tagFont = loader.loadFont('models/one8seven.ttf', okMissing = True)
        if tagFont:
            tp.setFont(tagFont)
        tp.setTextColor(1, 1, 1, 1)
        tp.setShadow(0.05, 0.05)
        tp.setTextScale(1.5)
        tpMgr.setProperties('tag', tp)

        # If we're running from the web, get the gameInfo block from
        # the HTML tokens.
        self.gameInfo = None
        if base.appRunner:
            gameInfoName = base.appRunner.getToken('gameInfo')
            if gameInfoName:
                self.gameInfo = base.appRunner.evalScript(gameInfoName, needsResponse = True)

            # Expose the changePoster() method.
            base.appRunner.main.changePoster = self.changePoster

        print "self.gameInfo = %s" % (self.gameInfo)

        # Also be prepared to update the web form with the table of
        # players and the local player's score.
        self.playerTable = None
        self.scoreTable = None
        if base.appRunner and base.appRunner.dom:
            self.playerTable = base.appRunner.dom.document.getElementById('playerTable')
            self.scoreTable = base.appRunner.dom.document.getElementById('scoreTable')
        print "self.playerTable = %s, scoreTable = %s" % (self.playerTable, self.scoreTable)

        self.playerList = PlayerList(self.playerTable)
        self.onscreenScoreLeft = None

        # When we join a game, we'll prefer to join *this* game.
        self.nextGameId = 0
        self.chooseGameTask = None
        self.allGames = []

        # No game, no avatar (yet).
        self.robot = None
        self.game = None
        self.player = None
        self.av = None
        self.avCell = None
        self.paintThing = None

        self.keyMap = {}
        for key in Globals.ControlKeys:
            self.keyMap[key] = False

        self.dlnp = render.attachNewNode(DirectionalLight('dlnp'))
        self.dlnp.node().setColor((0.8, 0.8, 0.8, 1))
        render.setLight(self.dlnp)
        self.alnp = render.attachNewNode(AmbientLight('alnp'))
        self.alnp.node().setColor((0.2, 0.2, 0.2, 1))
        render.setLight(self.alnp)

        if base.camera:
            self.dlnp.reparentTo(base.camera)

        # Set up the poster FSM to switch the poster modes.
        self.posterFSM = PosterFSM(base.appRunner)

        # A node to hold all avatars.
        self.avRoot = render.attachNewNode('avRoot')

        # The root of the maze.
        self.mazeRoot = render.attachNewNode('maze')
        if Globals.EnableShaders:
            #self.mazeRoot.setShaderAuto()
            s = loader.loadShader('models/nopaint_normal.sha')
            self.mazeRoot.setShader(s)
            self.mazeRoot.setShaderInput('alight0', self.alnp)
            self.mazeRoot.setShaderInput('dlight0', self.dlnp)

        # Initial poster data.
        self.posterData = ('', 0)
        cvar = ConfigVariableFilename('tag-poster', '')
        filename = cvar.getValue()
        if filename:
            self.readTagPoster(filename)

        # Choose a bright paint color.
        h = random.random()
        s = random.random() * 0.3 + 0.7
        v = random.random() * 0.3 + 0.7
        self.playerColor = self.hsv2rgb(h, s, v)

        # Get the player's name.
        name = playerName
        if not name:
            name = getattr(self.gameInfo, 'name', None)
        if not name:
            name = base.config.GetString('player-name', '')
            
        if name:
            # Use the provided name.
            self.playerName = name
            self.startConnect()

        else:
            # Prompt the user.

            # Start with the wall model in the background.
            wall = loader.loadModel('models/wall')
            wall.reparentTo(base.camera)
            wall.setPos(0, 5, -2.5)
            wall.setScale(10)
            if Globals.EnableShaders:
                wall.setShaderAuto()
            self.nameWall = wall

            c = self.playerColor
            self.nameLabel = DirectLabel(
                text = 'Enter your street name:',
                text_align = TextNode.ALeft,
                text_fg = (c[0], c[1], c[2], 1),
                text_shadow = (0, 0, 0, 1),
                pos = (-0.9, 0, 0.45),
                relief = None,
                scale = 0.2)
            tagFont = loader.loadFont('models/one8seven.ttf')

            cardModel = loader.loadModel('models/nametag_card')
            cardTex = cardModel.findTexture('*')
            self.nameEntry = DirectEntry(
                pos = (-0.9, 0, 0.1),
                focus = True,
                relief = DGG.TEXTUREBORDER,
                frameColor = (c[0], c[1], c[2], 0.6),
                frameTexture = cardTex,
                borderWidth = (0.2, 0.2),
                pad = (0.0, -0.2),
                borderUvWidth = (0.1, 0.1),
                text_font = tagFont,
                width = 12, scale = 0.15,
                command = self.enteredName)

            self.nameButton = DirectButton(
                text = 'Enter game',
                frameColor = (c[0], c[1], c[2], 1),
                scale = 0.15,
                pos = (0, 0, -0.5),
                relief = DGG.RAISED,
                borderWidth = (0.05, 0.05),
                pad = (0.8, 0.3),
                command = self.enteredName)
Example #16
0
class ServerInfo:

    def __init__(self, dataDict):
        """
        Gather all provided data from the passed in dictionary, filling in the gaps when necessary
        :param dataDict:  dictionary of server data
        """
        if "Status" in dataDict.keys():
            self.__status = dataDict["Status"]
        else:
            self.__status = "Unknown Status"
        if "IP" in dataDict.keys():
            self.__ip = dataDict["IP"]
        else:
            self.__ip = "Unknown IP"
        if "Name" in dataDict.keys():
            self.__name = dataDict["Name"]
        else:
            self.__name = "Unknown Server"
        if "Game" in dataDict.keys():
            self.__game = dataDict["Game"]
        else:
            self.__game = "Unknown Game"
        if "Game Type" in dataDict.keys():
            self.__gameType = dataDict["Game Type"]
        else:
            self.__gameType = ""
        if "Map" in dataDict.keys():
            self.__map = dataDict["Map"]
        else:
            self.__map = "Unknown Map"
        if "Population" in dataDict.keys():
            self.__population = dataDict["Population"]
        else:
            self.__population = "?/?"
        if "Player List" in dataDict.keys():
            self.__playerList = PlayerList(dataDict["Player List"])
        else:
            self.__playerList = PlayerList("SKIP")

        self.__admins = [
            "Baron voŋ Moorland",
            "Raysparks",
            "Sir Boring",
            "Herbanator",
            "Jalen♡",
            "The Flying Flail",
            "Rosy",
            "ZedHead",
            "SomeDuke",
            "J",
            "Beständig",
            "bone",
            "flask",
            "『Sushiki』",
            "Walkin",
            "Eggplant",
            "Tez",
            "[FOR] Reason",
            "Goog",
            "ducksauce",
            "P",
            "Thaedius",
            "Marlop",
            "ムgòn Đominus"
        ]


    def getStatus(self):
        return self.__status

    def getIP(self):
        return self.__ip

    def getName(self):
        return self.__name

    def getGame(self):
        return self.__game

    def getGameType(self):
        return self.__gameType

    def getMap(self):
        return self.__map

    def getPopulation(self):
        return self.__population

    def getPlayerList(self):
        return self.__playerList


    def __str__(self):
        """
        Gather server name, map, population, gameType, and playerList and return it in a formatted string
        :return:  Formatted string of server info
        """
        return self.__formatInfo()

    def isInServer(self, player):
        """
        Check the server for a specific player
        :param player  The player to check the server for
        :return        True if player is currently connected to server, False if not currently connected
        """
        if "•҉" in player:  # remove the moorlands flowery from name
            floweryPosition = player.find("҉")
            strippedPlayer = player[:floweryPosition] + player[floweryPosition + 1:]
            return self.__playerList.checkFor(strippedPlayer)
        if "❊" in player:  # remove mordhau flowery from name
            floweryPosition = player.find("❊")
            strippedPlayer = player[:floweryPosition] + player[floweryPosition + 1:]
            return self.__playerList.checkFor(strippedPlayer)

    def isAdminInServer(self):
        """
        Check the server for an administrator
        :return  True if an admin is currently connected, False if none are currently connected
        """
        for admin in self.__admins:
            if self.__playerList.checkFor(admin):
                return True
        return False

    def __getCurrentPlayers(self):
        """
        Get the number of players currently on the server
        :return  int of current players
        """
        currentPlayers = self.__population.split("/")[0]
        return int(currentPlayers)

    def __getMaxPlayers(self):
        """
        Get the maximum number of players the server supports
        :return  int of maximum players allowed on the server
        """
        playerCountRaw = self.__population
        maxPlayers = playerCountRaw.split("/")[1]
        return int(maxPlayers)

    def __formatInfo(self):
        """
        Format all the retrieved server info into a response for BirbBot
        :return String     the formatted server info response that BirbBot will present
        """
        if self.__status == "Offline":
            return "**" + str(self.__name) + "** appears to be offline!"
        formattedInfo = ("**" + str(self.__name) + "** is playing **"
                         + str(self.__gameType) + str(self.__map) + "** with a population of **"
                         + "(" + str(self.__population) + ")**")
        formattedInfo += "\n" + str(self.__playerList)
        return formattedInfo
Example #17
0
class RadioPanel(gtk.EventBox):

    __gsignals__ = {
    "playing": (gobject.SIGNAL_RUN_LAST,
        gobject.TYPE_NONE, [])}

    def __init__(self):

        gtk.EventBox.__init__(self)

        self.set_border_width(2)
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))

        vbox = gtk.VBox()
        self.playerlist = PlayerList()
        vbox.pack_start(self.playerlist, True, True, 0)

        self.playercontrols = PlayerControls()
        vbox.pack_end(self.playercontrols, False, False)

        self.add(vbox)
        self.show_all()

        self.player = False
        self.datos = False

        self.playercontrols.volumen.connect("volumen", self.__set_volumen)
        self.playerlist.lista.connect("nueva-seleccion",
            self.__cargar_reproducir)
        self.playerlist.connect("accion", self.__accion_menu)
        self.playercontrols.connect("accion-controls", self.__accion_controls)
        self.connect("show", self.__show)
        self.connect("hide", self.__hide)
        #gobject.timeout_add(5000, self.__check_ip)

    def __show(self, widget):
        win = self.get_toplevel()
        screen = win.get_screen()
        w, h = win.get_size()
        ww, hh = (screen.get_width(), screen.get_height())
        if w == ww and h == hh:
            self.datos = ["fullscreen", w, h]
        elif w == ww and h != hh:
            self.datos = ["maximizado", w, h]
        else:
            self.datos = ["unfullscreen", w, h]
        win.unmaximize()
        win.unfullscreen()
        win.set_resizable(False)
        self.get_toplevel().set_size_request(320, 335)

    def __hide(self, widget):
        if self.datos:
            estado, w, h = self.datos
            win = self.get_toplevel()
            win.set_resizable(True)
            if estado == "fullscreen":
                win.fullscreen()
            elif estado == "maximizado":
                win.maximize()
            elif estado == "unfullscreen":
                self.get_toplevel().resize(w, h)

    def __accion_controls(self, widget, accion):
        if accion == "atras":
            self.playerlist.lista.seleccionar_anterior()
        elif accion == "siguiente":
            self.playerlist.lista.seleccionar_siguiente()
        elif accion == "stop":
            if self.player:
                self.player.stop()
        elif accion == "pausa-play":
            if self.player:
                self.player.pause_play()
        elif accion == "showlist":
            if widget.lista.get_active():
                self.playerlist.show()
                self.get_toplevel().toolbar.show()
                self.get_toplevel().set_size_request(320, 335)
            else:
                self.playerlist.hide()
                self.get_toplevel().toolbar.hide()
                x, y, w, h = self.playercontrols.get_allocation()
                self.get_toplevel().set_size_request(w, h+5)

    def __set_volumen(self, widget, valor):
        if self.player:
            self.player.set_volumen(valor)

    def __accion_menu(self, playerlist, lista, accion, _iter):
        print accion
        '''
        if lista and accion and _iter:
            uri = lista.get_model().get_value(_iter, 2)
            if accion == "Quitar" or accion == "Borrar":
                dialog = gtk.Dialog(parent=self.get_toplevel(),
                    title="Alerta",
                    buttons=("Si", gtk.RESPONSE_ACCEPT,
                    "No", gtk.RESPONSE_CANCEL))
                dialog.set_border_width(15)
                dialog.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
                texto = uri
                if len(texto) > 30:
                    texto = " . . . " + str(texto[len(texto) - 30:-1])
                label = gtk.Label("¿%s:  %s?" % (accion, texto))
                label.show()
                dialog.vbox.pack_start(label, True, True, 5)
                if dialog.run() == gtk.RESPONSE_ACCEPT:
                    self.stop()
                    path = lista.get_model().get_path(_iter)
                    path = (path[0], )
                    lista.get_model().remove(_iter)
                    self.__reselect(lista, path)
                    if accion == "Quitar":
                        pass
                    elif accion == "Borrar":
                        if os.path.isfile(uri):
                            borrar(uri)
                dialog.destroy()
            elif accion == "Subtitulos":
                dialog = gtk.FileChooserDialog(
                    title="Cargar Subtitulos", parent=self.get_toplevel(),
                    action=gtk.FILE_CHOOSER_ACTION_OPEN,
                    buttons=("Abrir", gtk.RESPONSE_ACCEPT,
                    "Salir", gtk.RESPONSE_CANCEL))
                dialog.set_border_width(15)
                dialog.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
                dialog.set_current_folder_uri("file://%s" % os.path.dirname(uri))
                dialog.set_select_multiple(False)
                filtro = gtk.FileFilter()
                filtro.set_name("text")
                filtro.add_mime_type("text/*")
                dialog.add_filter(filtro)
                if dialog.run() == gtk.RESPONSE_ACCEPT:
                    self.player.player.set_property(
                        "suburi", "file://" + dialog.get_filename())
                    self.player.player.set_property(
                        "subtitle-font-desc", "sans bold 18")
                dialog.destroy()
        '''
    def __reselect(self, lista, path):
        try:
            if path[0] > -1:
                lista.get_selection().select_iter(
                    lista.get_model().get_iter(path))
            else:
                lista.seleccionar_primero()
        except:
            lista.seleccionar_primero()

    def __cargar_reproducir(self, widget, uri):
        widget.set_sensitive(False)
        volumen = 1.0
        if self.player:
            volumen = float("{:.1f}".format(
                self.playercontrols.volumen.get_value() * 10))
        self.stop()

        if get_ip():
            xid = "" #self.visor.get_property('window').xid
            self.player = JAMediaReproductor()

            self.player.connect("endfile", self.__endfile)
            self.player.connect("estado", self.__state_changed)

            self.player.load(uri, xid)
            thread = threading.Thread(target=self.player.play)
            thread.start()
            self.player.set_volumen(volumen)
            self.playercontrols.volumen.set_value(volumen / 10)
        else:
            print "No hay conexión a Internet"
        widget.set_sensitive(True)

    def __endfile(self, widget=None, senial=None):
        self.playercontrols.set_paused()
        self.playerlist.lista.seleccionar_siguiente()

    def __state_changed(self, widget=None, valor=None):
        if "playing" in valor:
            self.playercontrols.set_playing()
            self.emit("playing")
        elif "paused" in valor or "None" in valor:
            self.playercontrols.set_paused()
        else:
            print "Estado del Reproductor desconocido:", valor
        self.playercontrols.set_sensitive(True)

    def __user_set_progress(self, widget, valor):
        if self.player:
            self.player.set_position(valor)

    def stop(self):
        if self.player:
            self.player.disconnect_by_func(self.__endfile)
            self.player.disconnect_by_func(self.__state_changed)
            self.player.stop()
            del(self.player)
            self.player = False
        self.playercontrols.set_paused()
        self.playercontrols.set_sensitive(False)
Example #18
0
class VideoPanel(gtk.HPaned):

    __gsignals__ = {
        "playing": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
    }

    def __init__(self):

        gtk.HPaned.__init__(self)

        self.set_border_width(2)
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))

        vbox = gtk.VBox()
        self.visor = VideoVisor()
        self.progress = ProgressPlayer()
        self.playercontrols = PlayerControls()

        vbox.pack_start(self.visor, True, True, 0)
        vbox.pack_start(self.progress, False, False, 0)
        vbox.pack_start(self.playercontrols, False, False, 0)

        self.pack1(vbox, resize=True, shrink=True)

        self.playerlist = PlayerList()
        self.pack2(self.playerlist, resize=False, shrink=False)

        self.show_all()

        self.player = False

        self.visor.connect("ocultar_controles", self.__ocultar_controles)
        self.progress.connect("user-set-value", self.__user_set_progress)
        self.playercontrols.volumen.connect("volumen", self.__set_volumen)
        self.playerlist.lista.connect("nueva-seleccion",
                                      self.__cargar_reproducir)
        self.playerlist.connect("accion", self.__accion_menu)
        self.playercontrols.connect("accion-controls", self.__accion_controls)
        self.playerlist.balance.connect("balance-valor", self.__accion_balance)

    def __ocultar_controles(self, widget, valor):
        if valor:
            self.set_border_width(0)
            self.get_toplevel().set_border_width(0)
            self.get_toplevel().toolbar.hide()
            self.progress.hide()
            self.playercontrols.hide()
            self.playerlist.hide()
        else:
            self.get_toplevel().set_border_width(2)
            self.set_border_width(2)
            self.get_toplevel().toolbar.show()
            self.progress.show()
            self.playercontrols.show()
            self.playerlist.show()

    def __update_balance(self):
        config = {}
        if self.player:
            config = self.player.get_balance()
        self.playerlist.balance.set_balance(
            brillo=config.get('brillo', 50.0),
            contraste=config.get('contraste', 50.0),
            saturacion=config.get('saturacion', 50.0),
            hue=config.get('hue', 50.0),
            gamma=config.get('gamma', 10.0))
        return False

    def __accion_balance(self, widget, valor, prop):
        if prop == "saturacion":
            self.player.set_balance(saturacion=valor)
        elif prop == "contraste":
            self.player.set_balance(contraste=valor)
        elif prop == "brillo":
            self.player.set_balance(brillo=valor)
        elif prop == "hue":
            self.player.set_balance(hue=valor)
        elif prop == "gamma":
            self.player.set_balance(gamma=valor)

    def __accion_controls(self, widget, accion):
        if accion == "atras":
            self.playerlist.lista.seleccionar_anterior()
        elif accion == "siguiente":
            self.playerlist.lista.seleccionar_siguiente()
        elif accion == "stop":
            if self.player:
                self.player.stop()
        elif accion == "pausa-play":
            if self.player:
                self.player.pause_play()
        elif accion == "Izquierda" or accion == "Derecha":
            if self.player:
                self.player.rotar(accion)
        elif accion == "showlist":
            if widget.lista.get_active():
                self.playerlist.show()
            else:
                self.playerlist.hide()
        elif accion == "showcontrols":
            if widget.controls.get_active():
                self.visor.set_activo(False)
            else:
                self.visor.set_activo(True)

    def __set_volumen(self, widget, valor):
        if self.player:
            self.player.set_volumen(valor)

    def __accion_menu(self, playerlist, lista, accion, _iter):
        if lista and accion and _iter:
            uri = lista.get_model().get_value(_iter, 2)
            if accion == "Quitar" or accion == "Borrar":
                dialog = gtk.Dialog(parent=self.get_toplevel(),
                                    title="Alerta",
                                    buttons=("Si", gtk.RESPONSE_ACCEPT, "No",
                                             gtk.RESPONSE_CANCEL))
                dialog.set_border_width(15)
                dialog.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
                texto = uri
                if len(texto) > 30:
                    texto = " . . . " + str(texto[len(texto) - 30:-1])
                label = gtk.Label("¿%s:  %s?" % (accion, texto))
                label.show()
                dialog.vbox.pack_start(label, True, True, 5)
                if dialog.run() == gtk.RESPONSE_ACCEPT:
                    self.stop()
                    path = lista.get_model().get_path(_iter)
                    path = (path[0], )
                    lista.get_model().remove(_iter)
                    self.__reselect(lista, path)
                    if accion == "Quitar":
                        pass
                    elif accion == "Borrar":
                        if os.path.isfile(uri):
                            borrar(uri)
                dialog.destroy()
            elif accion == "Subtitulos":
                dialog = gtk.FileChooserDialog(
                    title="Cargar Subtitulos",
                    parent=self.get_toplevel(),
                    action=gtk.FILE_CHOOSER_ACTION_OPEN,
                    buttons=("Abrir", gtk.RESPONSE_ACCEPT, "Salir",
                             gtk.RESPONSE_CANCEL))
                dialog.set_border_width(15)
                dialog.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
                dialog.set_current_folder_uri("file://%s" %
                                              os.path.dirname(uri))
                dialog.set_select_multiple(False)
                filtro = gtk.FileFilter()
                filtro.set_name("text")
                filtro.add_mime_type("text/*")
                dialog.add_filter(filtro)
                if dialog.run() == gtk.RESPONSE_ACCEPT:
                    self.player.player.set_property(
                        "suburi", "file://" + dialog.get_filename())
                    self.player.player.set_property("subtitle-font-desc",
                                                    "sans bold 18")
                dialog.destroy()

    def __reselect(self, lista, path):
        try:
            if path[0] > -1:
                lista.get_selection().select_iter(
                    lista.get_model().get_iter(path))
            else:
                lista.seleccionar_primero()
        except:
            lista.seleccionar_primero()

    def __cargar_reproducir(self, widget, uri):
        widget.set_sensitive(False)
        volumen = 1.0
        if self.player:
            volumen = float("{:.1f}".format(
                self.playercontrols.volumen.get_value() * 10))
        self.stop()

        xid = self.visor.get_property('window').xid
        self.player = JAMediaReproductor()

        self.player.connect("endfile", self.__endfile)
        self.player.connect("estado", self.__state_changed)
        self.player.connect("newposicion", self.progress.update_progress)
        self.player.connect("video", self.playerlist.set_video)
        self.player.connect("video", self.playercontrols.set_video)

        self.player.load(uri, xid)
        thread = threading.Thread(target=self.player.play)
        thread.start()
        self.player.set_volumen(volumen)
        self.playercontrols.volumen.set_value(volumen / 10)
        widget.set_sensitive(True)

    def __endfile(self, widget=None, senial=None):
        self.playercontrols.set_paused()
        self.playerlist.lista.seleccionar_siguiente()

    def __state_changed(self, widget=None, valor=None):
        if "playing" in valor:
            self.playercontrols.set_playing()
            self.emit("playing")
            gobject.idle_add(self.__update_balance)
        elif "paused" in valor or "None" in valor:
            self.playercontrols.set_paused()
            gobject.idle_add(self.__update_balance)
        else:
            print "Estado del Reproductor desconocido:", valor
        self.playercontrols.set_sensitive(True)

    def __user_set_progress(self, widget, valor):
        if self.player:
            self.player.set_position(valor)

    def stop(self):
        if self.player:
            self.player.disconnect_by_func(self.__endfile)
            self.player.disconnect_by_func(self.__state_changed)
            self.player.disconnect_by_func(self.progress.update_progress)
            self.player.disconnect_by_func(self.playerlist.set_video)
            self.player.disconnect_by_func(self.playercontrols.set_video)
            self.player.stop()
            del (self.player)
            self.player = False
        self.progress.update_progress(None, 0.0)
        self.playerlist.set_video(False, False)
        self.playercontrols.set_video(False, False)
        self.playercontrols.set_paused()
        self.playercontrols.set_sensitive(False)
        self.visor.modify_bg(gtk.STATE_NORMAL, get_colors("drawingplayer"))