From: Ricardo Markiewicz Date: Fri, 28 May 2004 02:45:31 +0000 (+0000) Subject: * ADDED : Insertar ordenado en widget lista, para usar cuando se hace X-Git-Tag: svn_import_r684~151 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/5a9b2bb828b925aa8082bf117a91cf1e77dd0464 * ADDED : Insertar ordenado en widget lista, para usar cuando se hace una consulta por rando de fecha con filtro de estado, asi queda ordenado por NumFac. --- diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 82be7ba..153b5cb 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -1114,12 +1114,16 @@ void fact_consultas_fechas(char *s) fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, k, &size, &error); */ } - lista_agregar_fila(lista, - fact.numero, - fact.emision, - get_estado(fact.estado), - get_forma_pago(fact.fp) - ); + if (strcmp(estado, "Todos") != 0) { + if (strcmp(estado, fact.estado) == 0) { + lista_agregar_fila_ordenada(lista, + fact.numero, + fact.emision, + get_estado(fact.estado), + get_forma_pago(fact.fp) + ); + } + } } if (datos) free(datos); k_menor = idx->obtener_sig_clave(idx, k_menor); diff --git a/emufs_gui/lista.c b/emufs_gui/lista.c index a3ca282..126007d 100644 --- a/emufs_gui/lista.c +++ b/emufs_gui/lista.c @@ -84,6 +84,75 @@ void lista_agregar_fila(t_Lista *lst, ...) } } +void lista_agregar_fila_ordenada(t_Lista *lst, ...) +{ + int i, fin; + t_Columna *col; + t_Fila *nueva, *pos; + va_list args; + + col = lst->columnas; + nueva = malloc(sizeof(t_Fila)); + nueva->datos = malloc(sizeof(t_Dato)*lst->cant_columnas); + nueva->sig = NULL; + nueva->ant = NULL; + + va_start(args, lst); + /* Para cada columna, leo el dato y lo agrego en la fila */ + i = 0; + while (col) { + fprintf(stderr, "Dato en columnas %d\n", i); + switch (col->tipo) { + case DATO_INT: + nueva->datos[i].i_dato = va_arg(args, int); + break; + case DATO_STR: + strcpy(nueva->datos[i].s_dato, va_arg(args, char *)); + break; + case DATO_FLOAT: + nueva->datos[i].f_dato = va_arg(args, double); + } + i++; + col = col->sig; + } + va_end(args); + + col = lst->columnas; + + /* Agrego la fila ordenada */ + if (lst->primera == NULL) { + lst->primera = nueva; + } else { + pos = lst->primera; + fin = 0; + while ((pos->sig != NULL) && (!fin)) { + switch (col->tipo) { + case DATO_INT: + fin = (pos->datos[0].i_dato >= nueva->datos[0].i_dato); + break; + case DATO_STR: + fin = (strcmp(pos->datos[0].s_dato, nueva->datos[0].s_dato) >= 0); + break; + case DATO_FLOAT: + fin = (pos->datos[0].f_dato >= nueva->datos[0].f_dato); + } + if (!fin) + pos = pos->sig; + } + if (pos->ant == NULL) { + /* Soy el primero */ + nueva->sig = lst->primera; + lst->primera = nueva; + pos->ant = nueva; + } else { + pos->ant->sig = nueva; + nueva->ant = pos->ant; + pos->ant = nueva; + nueva->sig = pos; + } + } +} + void print_lista(t_Lista *lst, t_Fila *fil, int sel) { char texto[100]; diff --git a/emufs_gui/lista.h b/emufs_gui/lista.h index 057d1d4..efa4568 100644 --- a/emufs_gui/lista.h +++ b/emufs_gui/lista.h @@ -74,6 +74,16 @@ void lista_agregar_columna(t_Lista *lst, char *nombre, t_TipoDato tipo, int offs */ void lista_agregar_fila(t_Lista *lst, ...); +/** Agrega una fila a la lista ordenada + * + * La fila se agrega pasando cada parametro en funcion del tipo + * de cada columna. Se deben pasar tantos datos como columnas + * existen. + * + * El orden se define por el primer parametro + */ +void lista_agregar_fila_ordenada(t_Lista *lst, ...); + /** Muestra la lista en pantalla * * \param lst