From f4a316693fea7a5e753c2af7706ff39ecf51a605 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Sun, 23 May 2004 23:43:43 +0000 Subject: [PATCH] * Agrego capacidad de scroll a la lista generica, quedo bonite :-) Para probar ir a Articulos->Consultas --- emufs_gui/articulos.c | 27 +++++++++---------- emufs_gui/lista.c | 63 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 66 insertions(+), 24 deletions(-) diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index f5b937f..a70da3f 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -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); } diff --git a/emufs_gui/lista.c b/emufs_gui/lista.c index c922140..1c00052 100644 --- a/emufs_gui/lista.c +++ b/emufs_gui/lista.c @@ -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) && (isig; + i++; + } + + print_lista(lst, fil, selected); + wrefresh(lst->win); + } } -- 2.43.0