La idea de este cuadro es añadir ajustes por canales, aunque podreis utilizarlo dentro de vuestros canales siempre q necesiteis un cuadro de opciones.
En este caso se trata de un cuadro para Kodi y PLEX, pero la idea seria adaptarlo al resto de las plataformas.
Y despues de esta introduccion vamos a ver en q consiste y como utilizarlo:
SettingWindow:
Esta clase deriva de xbmcgui.WindowXMLDialogy permite crear un cuadro de dialogo con controles del tipo: Radio Button (bool), Cuadro de texto (text), Lista (list) y Etiquetas informativas (label).
Tambien podemos personalizar el cuadro añadiendole un titulo (caption).
Metodo constructor:
SettingWindow(listado_controles, dict_values, title, callback, item)
- Parametros:
- listado_controles: (list) Lista de controles a incluir en la ventana, segun el siguiente esquema:
Si no se incluye el listado_controles, se intenta obtener del xml del canal desde donde se hace la llamada.
Código: Seleccionar todo
(opcional)list_controls= [ {'id': "nameControl1", 'type': "bool", # bool, text, list, label 'label': "Control 1: tipo RadioButton", 'color': '0xFFee66CC', # color del texto en formato ARGB hexadecimal 'default': True, 'enabled': True, 'visible': True }, {'id': "nameControl2", 'type': "text", # bool, text, list, label 'label': "Control 2: tipo Cuadro de texto", 'color': '0xFFee66CC', 'default': "Valor por defecto", 'hidden': False, # only for type = text Indica si hay que ocultar el texto (para passwords) 'enabled': True, 'visible': True }, {'id': "nameControl3", 'type': "list", # bool, text, list, label 'label': "Control 3: tipo Lista", 'color': '0xFFee66CC', 'default': 0, # Indice del valor por defecto en lvalues 'enabled': True, 'visible': True, 'lvalues':["item1", "item2", "item3", "item4"], # only for type = list }, {'id': "nameControl4", 'type': "label", # bool, text, list, label 'label': "Control 4: tipo Etiqueta", 'color': '0xFFee66CC', 'enabled': True, 'visible': True }]
Los campos 'label', 'default' y 'lvalues' pueden ser un numero precedido de '@'. En cuyo caso se buscara el literal en el archivo string.xml del idioma seleccionado.Código: Seleccionar todo
El formato de los controles en el xml es: <?xml version="1.0" encoding="UTF-8" ?> <channel> ... ... <settings> <id>nameControl1</id> <type>bool</type> <label>Control 1: tipo RadioButton</label> <default>false</default> <enabled>true</enabled> <visible>true</visible> <color>0xFFee66CC</color> </settings> <settings> <id>nameControl2</id> <type>text</type> <label>Control 2: tipo Cuadro de texto</label> <default>Valor por defecto</default> <hidden>true</hidden> <enabled>true</enabled> <visible>true</visible> <color>0xFFee66CC</color> </settings> <settings> <id>nameControl3</id> <type>list</type> <label>Control 3: tipo Lista</label> <default>0</default> <enabled>true</enabled> <color>0xFFee66CC</color> <visible>true</visible> <lvalues>item1</lvalues> <lvalues>item2</lvalues> <lvalues>item3</lvalues> <lvalues>item4</lvalues> </settings> <settings> <id>nameControl4</id> <type>label</type> <label>Control 4: tipo Etiqueta</label> <enabled>true</enabled> <visible>true</visible> <color>0xFFee66CC</color> </settings> ... </channel>
Los campos 'enabled' y 'visible' admiten los comparadores eq(), gt() e it() y su funcionamiento se describe en: http://kodi.wiki/view/Add-on_settings#Different_types - dict_values: (dict) Diccionario que representa el par (id: valor) de cada control de la lista.
Si algun control de la lista no esta incluido en este diccionario se le asignara el valor por defecto.Código: Seleccionar todo
dict_values={"nameControl1": False, "nameControl2": "Esto es un ejemplo"}
- (opcional) title: (str) Titulo de la ventana de configuracion. Se puede localizar mediante un numero precedido de '@'
- (opcional) callback (str) Nombre de la funcion, del canal desde el que se realiza la llamada, que sera invocada al pulsar
el boton aceptar de la ventana. A esta funcion se le pasara como parametros el objeto 'item' y el dicionario 'dict_values'
- Si se especifica 'callback' se devolvera lo que devuelva esta funcion. Si no devolvera None
Modos de uso:
- platformtools.show_channel_settings(): Así tal cual, sin pasar ningún argumento, la ventana detecta de que canal se ha hecho la llamada,
y lee los ajustes del XML y carga los controles, cuando le das a Aceptar los vuelve a guardar. - return platformtools.show_channel_settings(list_controls=list_controls, dict_values=dict_values, callback='cb', ítem=ítem):
Así abre la ventana con los controles pasados y los valores de dict_values, si no se pasa dict_values, carga los valores por defecto de los controles, cuando le das a aceptar, llama a la función 'cb' del canal desde donde se ha llamado, pasando como parámetros, el ítem y el dict_values. Esta llamada devolvera lo que devuelva la funcion callback(item,dict_values). El siguiente codigo es un ejemplo de funcion callback que nos ayudara a recuperar los valores seleccionados en el cuadro:Código: Seleccionar todo
def cb(ítem,dict_values): for v in dict_values: # Hacemos algun tratamiento a los valores devueltos .......... return dict_values
Actualizaciones
- v2.0: Gracias a divardr por todo su trabajo en esta version
- Añadido parametro 'color' en todos los controles para fijar el color de la etiqueta.
Los parametros 'enabled' y 'visible' ahora admiten las funciones condicionales eq(), gt(), it() y sus negaciones de modo similar a los descritos en http://kodi.wiki/view/Add-on_settings#Different_types - Se ha incluido el parametro 'hidden' en los controles de texto para ocultar las contraseñas.
- Los valores guardados por los controles del tipo lista pasan a ser el indice de la lista en lugar de su valor como hasta ahora (esto facilita el uso de listas localizadas al idioma por defecto).
- Se incluye la posibilidad de añadir etiquetas @XXXXX que seran sustituidas por los literales incluidos en el archivo string.xml del idioma utilizado.
- Tambien se puede utilizar #X para referirse al indice del elemento por defecto en los controle tipo lista.
- El tamaño de la ventana varia en funcion del numero de controles añadidos.
- Se añade un nuevo metodo show_settings que muestra un cuadro de dialogo personalizado y guarda los datos al cerrarlo.
- Se añaden metodos para llamar a los cuadro de dialogo propios de xbmcgui.
- Añadido parametro 'color' en todos los controles para fijar el color de la etiqueta.