]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Agrego capacidad de scroll a la lista generica, quedo bonite :-)
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 23 May 2004 23:43:43 +0000 (23:43 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 23 May 2004 23:43:43 +0000 (23:43 +0000)
 Para probar ir a Articulos->Consultas

emufs_gui/articulos.c
emufs_gui/lista.c

index f5b937fdd63f27254a5cb2ea7f2945afb24c3121..a70da3fdd106503eaba76b9f3108031aa1539114 100644 (file)
@@ -637,6 +637,8 @@ int art_exportar_xml(const char *filename)
 void art_consultas(char *s)
 {
        /* TEST DE LISTA! */
+       char txt[80];
+       int i;
        t_Lista *lista;
        WINDOW *win, *win1;
 
@@ -647,30 +649,27 @@ void art_consultas(char *s)
        wrefresh(win);
        
        /* Creo la lista */
-       PERR("-- Creando");
        lista = lista_crear(3, win1, COLS-4, LINES-6);
-       PERR("-- Creando DONE");
 
        /* Creo las columnas */
-       PERR("-- Creando Columnas");
        lista_agregar_columna(lista, DATO_INT, 0, 8);
        lista_agregar_columna(lista, DATO_STR, 10, 45);
        lista_agregar_columna(lista, DATO_FLOAT, 60, 10);
-       PERR("-- Creando DONE");
 
        /* Agrego unos datos a ver que pasa */
-       PERR("Agregando Datos");
-       lista_agregar_fila(lista, 1, "Dato uno", 1.32f);
-       lista_agregar_fila(lista, 2, "Dato Algo", 1.332f);
-       lista_agregar_fila(lista, 3, "Dato Copado", 11.32f);
-       lista_agregar_fila(lista, 4, "Esto es de texto", 133.32f);
-       lista_agregar_fila(lista, 5, "Dato", 1.32f);
-       lista_agregar_fila(lista, 6, "Dato uno", 10.32f);
-       lista_agregar_fila(lista, 7, "Dato uno", 11.32f);
-       PERR("Agregando Datos DONE");
+       /* Pongo 100 y rezo */
+       for(i=0; i<100; i++) {
+               sprintf(txt, "Texto del item %d", i);
+               lista_agregar_fila(lista, i, txt, (rand()%100)/100.0f);
+       }
+       curs_set(0);
        lista_ejecutar(lista);
+       curs_set(1);
        wrefresh(win1);
        wrefresh(win);
-       getch();
+       werase(win1);
+       werase(win);
+       wrefresh(win);
+       delwin(win);
 }
 
index c9221403384ecbfab84838fd97f2bb4dff77c2db..1c00052ba95b6440735a2d53a60c489421ce5df5 100644 (file)
@@ -83,21 +83,13 @@ void lista_agregar_fila(t_Lista *lst, ...)
        }
 }
 
-void lista_ejecutar(t_Lista *lst)
+void print_lista(t_Lista *lst, t_Fila *fil, int sel)
 {
        char texto[100];
        char salida[100];
        char format[100];
-
-       t_Fila *fil;
        t_Columna *col;
        int y=0, i;
-
-       fil = lst->primera;
-       if (fil == NULL) {
-               PERR("NO TENGO FILAS :-(");
-       }
-
        while (fil) {
                /* Si no entran mas filas salgo! */
                if (y>lst->h) break;
@@ -121,13 +113,64 @@ void lista_ejecutar(t_Lista *lst)
                                        sprintf(format, "%%%ds", col->width);
                        }
                        sprintf(salida, format, texto);
+                       if (y == sel) {
+                               wattron(lst->win, A_STANDOUT);
+                       }
                        waddstr(lst->win, salida);
+                       if (y == sel) {
+                               wattroff(lst->win, A_STANDOUT);
+                       }
                        i++;
                        col = col->sig;
                }
                fil = fil->sig;
                y++;
        }
-       wrefresh(lst->win);
+}
+
+void lista_ejecutar(t_Lista *lst)
+{
+       int key;
+       t_Fila *fil;
+       int i, offset=0, selected=0;
+
+       fil = lst->primera;
+       if (fil == NULL) {
+               PERR("NO TENGO FILAS :-(");
+       }
+
+       print_lista(lst, fil, selected);
+
+       while ((key = wgetch(lst->win)) != 13) {
+               if ((key == 'a') || (key == 'A')) {                             
+                       /*offset--;*/
+                       selected--;
+                       if (selected < 0) {
+                               selected=0;
+                               offset--;
+                               if (offset < 0) offset = 0;
+                       }
+               } else if ((key == 'z') || (key == 'Z')) {
+                       /*offset++;*/
+                       selected++;
+                       if (selected >= lst->h) {
+                               selected--;
+                               offset++;
+                       }
+               } else {
+                       continue;
+               }
+       
+               fil = lst->primera;
+               i=0;
+               /* Salto a la primer fila a mostrar */
+               while ((fil) && (i<offset)) {
+                       fil = fil->sig;
+                       i++;
+               }
+
+               print_lista(lst, fil, selected);
+               wrefresh(lst->win);
+       }
 }