From 3f9973797bd5e6552493d2c2c4e1b94b23f9a636 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Wed, 14 Apr 2004 06:25:35 +0000 Subject: [PATCH] * Si se esta en "Ver registro" y se presiona "e" se abre la ventana para editar los datos de ese registro :-) ... claro que no guarda nada, porque ahora recien voy a editar los tipo1,2,3 para agregarle un modificar_registro que solo llama a borrar y luego a agregar. --- emufs_gui/articulos.c | 27 +++++++++++++++++++++++++-- emufs_gui/gui.c | 2 +- emufs_gui/registros.c | 23 ++++++++++++++++++++--- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index 422bbb7..20c960e 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -163,12 +163,12 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero) if (lst == NULL) lst = lst_articulos; if (lst == NULL) return NULL; - nodo = lst->primero; while (nodo) { if (n == nodo->numero) { art = (t_Articulo *)malloc(sizeof(t_Articulo)); /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */ + error = 0; tmp = lst->fp->leer_registro(lst->fp, nodo->num_reg, &size, &error); if (error) { @@ -210,12 +210,35 @@ void art_modificar(char *s) t_Form *form; t_Articulo *articulo; char num[11]; + void *tmp; + int error; + EMUFS_REG_SIZE size; win = newwin(8, COLS-2, 13, 1); box(win, 0, 0); wrefresh(win); - articulo = art_form_buscar(win); + if (s == NULL) { + articulo = art_form_buscar(win); + } else { + /* Leo el registro directamente */ + articulo = (t_Articulo *)malloc(sizeof(t_Articulo)); + /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */ + error = 0; + tmp = lst_articulos->fp->leer_registro(lst_articulos->fp, atoi(s), &size, &error); + if (error) { + free(articulo); + articulo = NULL; + } else { + if (procesar_leer_articulo(articulo, tmp, size, lst_articulos) != 1) { + free(articulo); + free(tmp); + articulo = NULL; + } else { + free(tmp); + } + } + } if (articulo != NULL) { form = form_crear(win); diff --git a/emufs_gui/gui.c b/emufs_gui/gui.c index ccc9311..79ea648 100644 --- a/emufs_gui/gui.c +++ b/emufs_gui/gui.c @@ -199,7 +199,7 @@ void menu_articulos() p = item_userptr(cur); unpost_menu(menu); refresh(); - p((char *)item_name(cur)); + p(NULL); /* Paso NULL para que ejecute la accion por defecto */ post_menu(menu); box(menu_win,0,0); mvwaddch(menu_win, 2, 0, ACS_LTEE); diff --git a/emufs_gui/registros.c b/emufs_gui/registros.c index bb8194c..2ec0871 100644 --- a/emufs_gui/registros.c +++ b/emufs_gui/registros.c @@ -1,6 +1,7 @@ #include "registros.h" #include "idx.h" +#include "articulos.h" /* Se encarga de reemplazar los \0 un caracter visual, y segurar un \0 al final */ static char *procesar_registro_articulo(char *ptr, EMUFS_REG_SIZE *size); @@ -17,7 +18,8 @@ void ver_registros(WINDOW *padre, int w, int h) int scroll, actual_ancho; int max_scroll, c; EMUFS_REG_ID ant_indice, total_indice; /* Indice de registro que tengo en ANT */ - char *data[3]; + char *data[3]; /* Registros a mostrar en pantalla */ + char codigo[50]; /* Variable para guardar el codigo actual para mandar a modificar */ EMUFS *fp; int error; fp = emufs_abrir("articulos"); @@ -86,11 +88,26 @@ void ver_registros(WINDOW *padre, int w, int h) scroll = 0; while ((c=getch()) != 13) { switch (c) { - case 'a': + case 'e': /* Quiero editar !!! */ + sprintf(codigo, "%lu", ant_indice+1); + fprintf(stderr, "%s", codigo); + art_modificar(codigo); + /* Tengo que re-pintar algunas cosas */ + box(actual[0], 0, 0); + box(sig[0], 0, 0); + box(ant[0], 0, 0); + mvwaddstr(actual[0], 0, w/6-3, "Actual"); + mvwaddstr(ant[0], 0, w/6-4, "Anterior"); + mvwaddstr(sig[0], 0, w/6-4, "Siguiente"); + wrefresh(actual[0]); + wrefresh(sig[0]); + wrefresh(ant[0]); + break; + case 'a': /* Scroll */ scroll--; if (scroll < 0) scroll = 0; break; - case 'z': + case 'z': /* Scroll */ scroll++; if (scroll > max_scroll) scroll = max_scroll; case 'k': /* Desplano los registros a derecha! */ -- 2.43.0