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 __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)
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 __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" ]
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()
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()
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()
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 __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)
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"))
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
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)
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
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)
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"))