Opened 13 years ago
Last modified 13 years ago
#1443 accepted enhancement
Interfaz gráfica para editar configuraciones
Reported by: | Pedro Gea | Owned by: | Jorge |
---|---|---|---|
Priority: | high | Milestone: | Mantainance |
Component: | Interface | Version: | 3.1 |
Severity: | critical | Keywords: | |
Cc: | Víctor de Buen Remiro |
Description
Se solicita la implementación de una función que interacciones con Tcl/Tk (del modo similar a como hace TclTabulateSet
por ejemplo) y que permita la edición visual de un conjunto de opciones o variables de configuración.
Un ejemplo claro de esta necesidad es el nameblock TolConfigManager, cuya estructura en forma de nameblock conteniendo variables u otros nameblocks podría implementarse en forma de árbol.
Se está pensando en algo parecido al editor de configuraciones de las estimaciones o previsiones de la GUI de MMS, que podría completarse con la mencionada estructura arbórea y que podría incorporar también de algún modo las descripciones de las variables de configuración.
Change History (7)
comment:1 Changed 13 years ago by
Cc: | Víctor de Buen Remiro added |
---|---|
Status: | new → accepted |
comment:2 Changed 13 years ago by
El _.autodoc.
es mejor dejarlo para lo que es: describir el dato miembro.
Pero sí podemos usar otro prefijo como _.autochec.
que contendría una instancia de una clase específicamente diseñada para hacer el chequeo.
La idea sería disponer en la StdLib
de una batería de clases para el chequeo de opciones en el entorno gráfico que definieran todas las características tanto gráficas como referentes al tipo de datos o restricciones que debe cumplir el valor de la opción. Todas estas clases partirían de una clase abstracta raíz que podría tener este aspecto:
////////////////////////////////////////////////////////////////////////////// Class @OptCheck ////////////////////////////////////////////////////////////////////////////// { Text _.desc; Text _.autodoc.graph.control = "Returns the graphic control used in the interface: " "CheckBox, TextLine, TextBox, DropDown, Calendar, ..."; Text graph.control(Real void); Text _.autodoc.help = "Returns brief instructions about how to fill the field."; Text help(Real void); Text _.autodoc.isValid = "Returns true if submitted field is valid for this field."; Real isValid(Text field) };
Para chequear un valor booleano podríamos tener esta herencia:
////////////////////////////////////////////////////////////////////////////// Class @OptCheck.Boolean : @OptCheck ////////////////////////////////////////////////////////////////////////////// { Text graph.control(Real void) { "CheckBox" }; Text help(Real void) { _.desc+"\n"+ "Turn on/off the field." }; Real isValid(Text field) { Real x = TextToReal(field); If(IsUnknown(x),False,Or(x==0,x==1)) } };
Y para chequear una etiqueta de texto entre un conjunto de opciones esta otra:
////////////////////////////////////////////////////////////////////////////// Class @OptCheck.Boolean : @OptCheck ////////////////////////////////////////////////////////////////////////////// { Text graph.control(Real void) { "CheckBox" }; Text help(Real void) { _.desc+"\n"+ "Turn on/off the field." }; Real isValid(Text field) { Real x = TextToReal(field); If(IsUnknown(x),False,Or(x==0,x==1)) } };
Este sería un ejemplo sencillo de configuración
NameBlock config = [[ Real useRemoteUrl = True; @OptCheck.Boolean _.autoCheck.useRemoteUrl = [[ Text _.desc = "If true system will use remote URL´s" ]]; Text downloadMethod = "tcl.uri"; @OptCheck.Select.Simple _.autoCheck.downloadMethod = [[ Text _.desc = "Method used to download remote URL´s", Set _.options = [[ "tcl:uri","tcl:curl","sys:wget" ]] ]] ]];
Desde el interfaz habría que llamar a los diferentes métodos
Real ok.01 = config::_.autoCheck.useRemoteUrl::isValid("0"); Real ok.02 = config::_.autoCheck.useRemoteUrl::isValid("1"); Real ok.03 = Not(config::_.autoCheck.useRemoteUrl::isValid("0.5")); Real ok.04 = Not(config::_.autoCheck.useRemoteUrl::isValid("")); Real ok.05 = Not(config::_.autoCheck.useRemoteUrl::isValid("hello")); Real ok.06 = config::_.autoCheck.downloadMethod::isValid("tcl:uri"); Real ok.07 = config::_.autoCheck.downloadMethod::isValid("tcl:curl"); Real ok.08 = config::_.autoCheck.downloadMethod::isValid("sys:wget"); Real ok.09 = Not(config::_.autoCheck.downloadMethod::isValid("sys.wget")); Real ok.10 = Not(config::_.autoCheck.downloadMethod::isValid(""));
comment:3 Changed 13 years ago by
comment:4 Changed 13 years ago by
Se pueden ver dos ejemplos de uso en: tolp/OfficialTolArchiveNetwork/GuiTools/test/ContainerEditor
Los campos de un NameBlock pueden editarse según el tipo de dato. Además se sugiere un campo _.autodoc.xxx que indique el método de validación del campo lo cual puede ayudar a construir un interfaz más específica.