Páginas (3): 1 2 3   
Shordi   23-04-2023, 13:32
#1
Os presento EditList, un control para editar arrays de diferentes tipos (a diferencia de ListEditor, que sólo edita String). Hace eso... y poco más, pero está chulo.
[Imagen: AclQwZi.png]
Los iconos de esta imagen son los "por defecto" sacados del Stock de gambas. Sin embargo el control permite acceder al panel de iconos de manera que podéis cambiarlos, añadir/ocultar botones, etc. En el ejemplo que os adjunto hay un segundo set de iconos.
[Imagen: y9LV97I.png]

Hasta donde lo he probado funciona con GTK y con Qt sin warnings ni cosas raras.
Aquí os adjunto el lanzamiento inicial, pero las actualizaciones las iré poniendo en gitlab, como siempre

Espero que os sea útil


Saludos
Archivos adjuntos
.gz
EditList-0.0.2.tar.gz (Tamaño: 22.48 KB Descargas: 3)

No podemos regresar
tincho   23-04-2023, 16:08
#2
Lo descargue y empece a usarlo en el proyecto json-config del cual subí un ejemplo en el otro hilo, aqui algo de feedback.
  • Se ve bien pero algo sucede con los iconos así que revisare el tema.
  • Faltaría incluir la Collection como lista ya que si bien están las Integer[], FLoat[] y String[] tambien vendria bien que exista la opción de poner una Collection en vez de estas array. Esto serviría para los "diccionarios" que se usan frecuentemente en los programas. Por ejemplo en un programa uso una lista de tipos mime y que importador utilizar, donde existen varios tipos mime que usan el mismo importador, eso lo gestiona una colección.
  • El heder no me parece útil, porque en el código de creación de controles ya contemplo una etiqueta.
  • Creo que lo mejor seria que .Value fuera un Variant como el Tag, de esta manera se podría poner ahí una lista de cualquier tipo incluso una collection.

[Imagen: 0Itc7UR.png]
Este es con el componente .gb.gui ya que como uso un escritorio GTK el gb.qt se ve mal el tema iconos.
Última modificación: 23-04-2023, 16:13 por tincho.

1 Saludo.
Shordi   23-04-2023, 18:48
#3
Cita:Se ve bien pero algo sucede con los iconos así que revisare el tema.
Ya me cuentas
Cita:Faltaría incluir la Collection como lista ya que si bien están las Integer[], FLoat[] y String[] tambien vendria bien que exista la opción de poner una Collection en vez de estas array. Esto serviría para los "diccionarios" que se usan frecuentemente en los programas. Por ejemplo en un programa uso una lista de tipos mime y que importador utilizar, donde existen varios tipos mime que usan el mismo importador, eso lo gestiona una colección.

Una Collection no es un tipo de datos nativo. No es factible mezclarlo aquí por su propia naturaleza, dado que:
a) No tiene un valor a editar, tiene dos (clave y valor)
b) No tiene un valor a devolver, cada uno de sus valores es un variant que puede contener cualquier cosa, así no se puede saber qué estás editando si texto, si números, etc. y la elección de con qué control se edita se vuelve imposible con EditList que es un editor de tipos simples.

La única solución que se me ocurre sería en un control independiente (¿EditCollection?) donde el Tableview tuviese tres columnas, una para la clave, otra que defina el tipo de valor y  otra para el valor, no sería difícil de programar, pero EditList no sirve para eso.

En el pasado he programado controles que devuelven collection e incluso collection[], véase wgrid y dbsqlTree, pero siempe se ha contado con los tres datos. Por ejemplo, en las bases de datos la clave la da el nombre del campo, el tipo de dato lo da el tipo de campo y el valor da el contenido del campo.
Con Wgrid que admitía distintos orígenes de datos (Array[][], Result, Collection) sólo era fiable con Result porque en las otras opciones se obtenía del primer elemento del source y, hablando de collection, los siguientes elementos pueden contener datos de distinto tipo.


Lo que sí se puede implementar En EditList es el sustituir el TextBox de edición por un ComboBox que contenga una lista de valores entre los que se elija uno. Pero todos los valores han de ser de Texto, lo que tampoco soluciona el tema de las Collection.
 
Cita:El heder no me parece útil, porque en el código de creación de controles ya contemplo una etiqueta.
Puede no serlo para tu programa, pero no siempre será así. Si quieres que desaparezca simplemente no le asignes valor.
 
Cita:Creo que lo mejor seria que .Value fuera un Variant como el Tag, de esta manera se podría poner ahí una lista de cualquier tipo incluso una collection.
Value ya es un Variant de sólo lectura que contiene el tipo de dato adaptado a Values, que es un Variant[]. Pero, de momento, nada de Collection.

Saludos.

He intentado hacer el proyecto traducible para subirlo a la Granja y me ha dado un error raro. He tenido que anular la traducción. Esperaré un par de días para eso. Sin embargo, al traducir he visto que el tooltip de los botones bUp y bDown parace indicar que su propósito es desplazar el elemento dentro de la lista y no el puntero de selección como yo interpreté de la ubicación de dichos botones.
¿Es así?
Si lo es, lo modificaré, pero creo que en tal caso esos botones están mal ubicados (uno en cada extremo con los springs de por medio) desde el punto de vista de la intuición y deberían estar juntos en el centro del panel... o algo así.

Saludos
Última modificación: 23-04-2023, 19:33 por Shordi.

No podemos regresar
tincho   23-04-2023, 23:50
#4
(23-04-2023, 18:48)Shordi escribió: Una Collection no es un tipo de datos nativo. No es factible mezclarlo aquí por su propia naturaleza

ok, si es verdad que no es un tipo nativo, pero ¿Y si tratamos a todo tipo de lista como una Collection? entonces existirán tres columnas siempre, en el caso de:
  • Integer[] la primera sera "1","2"..."n" luego la segunda i,i,...i la tercera sera un valor Integer,Integer,Integer y se editara con un ValueBox
  • Float[] la primera sera "1","2"..."n" luego la segunda f,f,...f la tercera sera un valor Float,Float,Float y se editara con un ValueBox
  • Float[] la primera sera "1","2"..."n" luego la segunda s,s,...s la tercera sera un valor String,String,String y se editara con un TextBox
  • Collection la primera sera "clav-1","clav-2"..."clav-n" luego la segunda s,i...f la tercera sera un valor String,Integer,Float y se editara con un TextBox,ValueBox,ValueBox
Luego si el parámetro inicial que se pasa es una Array[] se restringirá la columna 1 a claves "1", "2", "3" ... "n"  y la columna 2 a el tipo de dato (todos igual) y el valor, la coluna 2 seran todos los valores de la lista.
Si es una collection se restringira a una collection del tipo clave:valor donde clave sera unica y valor sera integer, float, string etc. (los tipos de datos que contemple el estandar JSON salvo ontras listas u colecciones)
Luego:
El método que devuelva la lista tendrá en cuenta lo que esta editando.
El método que edite o agregue los valores en la collection tendrá que tener en cuenta si si el valor es del tipo de la lista, es decir un integer una string etc.

No se pretende un editor de todo tipo de collection solo del caso simple, clave:valor donde valor nunca es un objeto.
(23-04-2023, 18:48)Shordi escribió: Puede no serlo para tu programa, pero no siempre será así. Si quieres que desaparezca simplemente no le asignes valor.

Lo del encabezado no es solo en mi programa, mira por ejemplo el caso de ListBox que no tiene encabezado. Creo que mientras mas cosas le agregues a un control, menos versátil sera.
Ademas si no le asigno el valor igualmente se reserva el espacio del panel que contiene el label, desperdiciando lugar que podria usarse para poner datos.
(23-04-2023, 18:48)Shordi escribió: Value ya es un Variant de sólo lectura que contiene el tipo de dato adaptado a Values, que es un Variant[]. Pero, de momento, nada de Collection.

Quise decir .Values, que la lista que se pasa como parámetro sea un objeto. luego el control decidirá como tratarlo de acuerdo al tipo de objeto.
y luego devolverá el mismo tipo de objeto. pero internamente siempre trabajara con una collection.
(23-04-2023, 18:48)Shordi escribió: he visto que el tooltip de los botones bUp y bDown parace indicar que su propósito es desplazar el elemento dentro de la lista y no el puntero de selección como yo interpreté de la ubicación de dichos botones.
¿Es así?

Si la idea es "mover" el dato de lugar para el puntero tienes las flechas del teclado. Por eso te comentaba antes que la combinación de teclas ctrl+up o ctrl+down podían hacer también el trabajo de botón up y down.
 
(23-04-2023, 18:48)Shordi escribió: Si lo es, lo modificaré, pero creo que en tal caso esos botones están mal ubicados (uno en cada extremo con los springs de por medio) desde el punto de vista de la intuición y deberían estar juntos en el centro del panel... o algo así.
Puede ser que no sea el lugar correcto pero, si te parece, lo probamos luego cuando el control este mas avanzado y al usarlo saltara a la luz donde iría mejor cada botón y si todos deben estar operativos todo el tiempo o solo bajo ciertas circunstancias.

Respecto a las traducciones el error puede deberse a que esta definido en español pero las frases están en inglés lo que es inconsistente. Al iniciar el proyecto no lo verifique y quedo así. Te paso la versión corregida.


[Imagen: ULCuknc.png]

Acá ya esta todo traducido:

[Imagen: opFEtlL.png]
Archivos adjuntos
.gz
EditList-0.0.3.tar.gz (Tamaño: 21.82 KB Descargas: 3)

1 Saludo.
Shordi   24-04-2023, 09:47
#5
Cita:ok, si es verdad que no es un tipo nativo, pero ¿Y si tratamos a todo tipo de lista como una Collection? entonces existirán tres columnas siempre, en el caso de:
  • Integer[] la primera sera "1","2"..."n" luego la segunda i,i,...i la tercera sera un valor Integer,Integer,Integer y se editara con un ValueBox
  • Float[] la primera sera "1","2"..."n" luego la segunda f,f,...f la tercera sera un valor Float,Float,Float y se editara con un ValueBox
  • Float[] la primera sera "1","2"..."n" luego la segunda s,s,...s la tercera sera un valor String,String,String y se editara con un TextBox
  • Collection la primera sera "clav-1","clav-2"..."clav-n" luego la segunda s,i...f la tercera sera un valor String,Integer,Float y se editara con un TextBox,ValueBox,ValueBox
Luego si el parámetro inicial que se pasa es una Array[] se restringirá la columna 1 a claves "1", "2", "3" ... "n"  y la columna 2 a el tipo de dato (todos igual) y el valor, la coluna 2 seran todos los valores de la lista.
Si es una collection se restringira a una collection del tipo clave:valor donde clave sera unica y valor sera integer, float, string etc. (los tipos de datos que contemple el estandar JSON salvo ontras listas u colecciones)
Luego:
El método que devuelva la lista tendrá en cuenta lo que esta editando.
El método que edite o agregue los valores en la collection tendrá que tener en cuenta si si el valor es del tipo de la lista, es decir un integer una string etc.
Buf, buf, tarea de rediseño absoluto... Que ahora mismo no puedo enfrentar. Sorry. De todas formas si EditList no te vale, el esqueleto ya lo tienes, sólo se trata de currarse los métodos y Eventos.
Cita:Lo del encabezado no es solo en mi programa, mira por ejemplo el caso de ListBox que no tiene encabezado. Creo que mientras mas cosas le agregues a un control, menos versátil sera.
Ademas si no le asigno el valor igualmente se reserva el espacio del panel que contiene el label, desperdiciando lugar que podria usarse para poner datos.
Lo de Versátil tiene que ver con el primer párrafo que cito más arriba también. Lo del espacio en el panel no es así. Elimina el texto y desaparece el encabezado y su lugar es reutilizado por la Lista.

Modifico los bUp y bDown y te cuento.

Saludos

No podemos regresar
tincho   24-04-2023, 10:40
#6
(24-04-2023, 09:47)Shordi escribió: Modifico los bUp y bDown y te cuento.

ok, gracias.
(24-04-2023, 09:47)Shordi escribió: Elimina el texto y desaparece el encabezado y su lugar es reutilizado por la Lista.

No funciona como dices, aunque la propiedad Title sea una cadena nula el panel siempre es mostrado.
[Imagen: CW21PR6.png]   [Imagen: YNQlNve.png]

(24-04-2023, 09:47)Shordi escribió: Buf, buf, tarea de rediseño absoluto... Que ahora mismo no puedo enfrentar. Sorry. De todas formas si EditList no te vale, el esqueleto ya lo tienes, sólo se trata de currarse los métodos y Eventos.

ok, me pongo a hacer un control de edición de collections a ver que sale, luego comento como fue.
Última modificación: 24-04-2023, 11:03 por tincho.

1 Saludo.
Shordi   24-04-2023, 11:14
#7
Cita:No funciona como dices, aunque la propiedad Title sea una cadena nula el panel siempre es mostrado.
Será cosa de las librerías gráficas (ahora tengo enlazado gb.gui) o de que no manejas la última versión, porque así se ve en mi máquina simplemente eliminando el texto del title en FMain
[Imagen: xzC2Nor.png]

Como se ve en la imagen he distribuido los iconos según su función. Los de manipulación del orden de la lista encima de un separador y los de edición debajo. Me parece más lógico.

También he actualizado los botones para que muevan los items arriba y abajo según botoncito. Lo tienes en gitlab


Saludos

No podemos regresar
tincho   24-04-2023, 13:29
#8
(24-04-2023, 11:14)Shordi escribió: Será cosa de las librerías gráficas (ahora tengo enlazado gb.gui) o de que no manejas la última versión, porque así se ve en mi máquina simplemente eliminando el texto del title en FMain

También estoy usando gb.gui, Y uso la ultima versión, la 3.18.90 instalada desde las fuentes.
Mira, pongo los contenedores en colores para que veas el efecto.
[Imagen: XxoyyOK.gif]

(24-04-2023, 11:14)Shordi escribió: También he actualizado los botones para que muevan los ítems arriba y abajo según botoncito. Lo tienes en gitlab

Gracias Shordi.
Última modificación: 24-04-2023, 13:32 por tincho.

1 Saludo.
Shordi   24-04-2023, 17:55
#9
Pues en mi máquina:

(Nota del 8 de Mayo: Aquí colgué un video en Youtube que he eliminado porque en mi siguiente respuesta lo subí como un .gif)

Sería de agradecer que alguien más del foro lo probase a ver cómo funciona en otros equipos.


Saludos
Última modificación: 08-05-2023, 08:40 por Shordi.

No podemos regresar
tincho   24-04-2023, 18:01
#10
(24-04-2023, 17:55)Shordi escribió: Pues en mi máquina:

No se ve. Prueba poner un .gif creado con Peek o algún programa similar y luego lo subes con el icono cuadrado de fondo negro y con una letra i.
(24-04-2023, 17:55)Shordi escribió: Sería de agradecer que alguien más del foro lo probase a ver cómo funciona en otros equipos.

Si, seria motivador Big Grin

1 Saludo.
Páginas (3): 1 2 3   
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.