#include <stdlib.h>
+#include <curses.h>
#include <menu.h>
#include <signal.h>
#include <panel.h>
#include "form.h"
#include "articulos.h"
-static void finish(int sig);
-
-typedef struct _my_menu_ {
- MENU *menu;
- ITEM *items[5];
- WINDOW *win;
-} MyMENU;
+#define CTRLD 4
-void editar_articulo(WINDOW *win, t_Articulo *articulo);
+static void finish(int sig);
-MyMENU *build_mymenu(WINDOW *win);
-void free_mymenu(MyMENU *);
+int main_menu();
+void menu_articulos();
int main(int argc, char *argv[])
{
- /* initialize your non-curses data structures here */
- int c;
- WINDOW *mainwin;
- MyMENU *menu;
-
-
+ int c, fin=0;
if (argc != 2) {
printf("Modo de uso : %s archivo_de_articulos.xml\n", argv[0]);
return 1;
/* Inicio Curses */
signal(SIGINT, finish); /* arrange interrupts to terminate */
- mainwin = initscr(); /* initialize the curses library */
- menu = build_mymenu(mainwin);
+ initscr(); /* initialize the curses library */
+ keypad(stdscr, TRUE); /* enable keyboard mapping */
+ nonl(); /* tell curses not to do NL->CR/NL on output */
+ cbreak(); /* take input chars one at a time, no wait for \n */
+ noecho(); /* don't echo input */
/* Verifico un tamaño minimo de consola */
if ((LINES < 25) || (COLS < 80)) {
- delwin(mainwin);
endwin();
printf("El tamaño de la consola debe ser de por lo menos 80x25!\n");
return 1;
}
- keypad(stdscr, TRUE); /* enable keyboard mapping */
- nonl(); /* tell curses not to do NL->CR/NL on output */
- cbreak(); /* take input chars one at a time, no wait for \n */
- noecho(); /* don't echo input */
+ art_cargar(argv[1]);
/* Si se soporta color, los inicializo */
if (has_colors()) {
start_color();
/* Simple color assignment, often all we need. */
- init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK);
+ init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); /* COLOR_PAIR(1) */
init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK);
init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK);
init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK);
init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK);
init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK);
}
-
+
/* Ventana, caracter para linea vertical, caracter para linea horizontal*/
- box(mainwin, ACS_VLINE, ACS_HLINE);
+ box(stdscr, ACS_VLINE, ACS_HLINE);
/* Ventana, Y, X, Texto */
- mvwaddstr(mainwin, 1, 1, "EMUFS");
+ mvwaddstr(stdscr, 1, 1, "EMUFS");
attron(COLOR_PAIR(2));
- mvwaddstr(mainwin, LINES-2, 1, "Presiones <F1> para salir");
+ mvwaddstr(stdscr, LINES-2, 1, "EMUFS (c) The EMUFS Team - Bajo Licencia GNU/GPL");
attroff(COLOR_PAIR(2));
- wrefresh(mainwin);
+ wrefresh(stdscr);
+
+ while ((c = main_menu()) != -1) {
+ switch (c) {
+ case 0:
+ menu_articulos();
+ break;
+ // case 1:
+ // case 2:
+ // case 3:
+ case 4:
+ fin = 1;
+ break;
+ }
+ if (fin == 1) break;
+ }
+
+ endwin();
+
+ art_liberar(NULL);
+
+ MD_Listar();
+ return 0;
+}
+
+void menu_articulos()
+{
+ WINDOW *menu_win;
+ MENU *menu;
+ ITEM **items;
+ int c, salir;
+ char *opciones[] = {
+ "Alta",
+ "Baja",
+ "Modificacion",
+ "Volver"
+ };
+
+ items = (ITEM **)calloc(5, sizeof(ITEM *));
+
+ items[0] = new_item(opciones[0], "Crear un nuevo articulo.");
+ set_item_userptr(items[0], art_agregar);
+ items[1] = new_item(opciones[1], "Eliminar un articulo existente.");
+ set_item_userptr(items[1], art_eliminar);
+ items[2] = new_item(opciones[2], "Modificar un articulo existente.");
+ set_item_userptr(items[2], art_modificar);
+ items[3] = new_item(opciones[3], "Volver al menu anterior.");
+ items[4] = NULL;
- post_menu(menu->menu);
- wrefresh(menu->win);
+ menu = new_menu((ITEM **)items);
+ menu_win = newwin(8, 68, 3, 1);
+ keypad(menu_win, TRUE);
+ set_menu_mark(menu, " > ");
+ set_menu_win(menu, menu_win);
+ set_menu_sub(menu, derwin(menu_win, 5, 66, 3, 1));
+
+ box(menu_win, 0, 0);
+ mvwaddch(menu_win, 2, 0, ACS_LTEE);
+ mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
+ mvwaddch(menu_win, 2, 67, ACS_RTEE);
+ wattron(menu_win, COLOR_PAIR(COLOR_RED));
+ mvwaddstr(menu_win, 1, 1, "Menu Articulos");
+ wattroff(menu_win, COLOR_PAIR(COLOR_RED));
+ post_menu(menu);
+ wrefresh(menu_win);
- refresh();
- while((c = getch()) != KEY_F(1)) {
+ curs_set(0);
+ salir = 0;
+ while((!salir) && (c = getch()) != KEY_F(3)) {
switch(c) {
case KEY_DOWN:
- menu_driver(menu->menu, REQ_DOWN_ITEM);
+ menu_driver(menu, REQ_DOWN_ITEM);
break;
case KEY_UP:
- menu_driver(menu->menu, REQ_UP_ITEM);
-// break;
-// case 10:
- /*ITEM *cur;
+ menu_driver(menu, REQ_UP_ITEM);
+ break;
+ case 13:
+ case 10: {
+ ITEM *cur;
void (*p)(char *);
- cur = current_item(my_menu);
- p = item_userptr(cur);
- p((char *)item_name(cur));
- pos_menu_cursor(my_menu);
- */
+ cur = current_item(menu);
+ if (strcmp(item_name(cur), opciones[3]) == 0) {
+ salir = 1;
+ } else {
+ p = item_userptr(cur);
+ unpost_menu(menu);
+ refresh();
+ p((char *)item_name(cur));
+ post_menu(menu);
+ box(menu_win,0,0);
+ mvwaddch(menu_win, 2, 0, ACS_LTEE);
+ mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
+ mvwaddch(menu_win, 2, 67, ACS_RTEE);
+ wrefresh(menu_win);
+ }
+ pos_menu_cursor(menu);
+ }
}
- wrefresh(menu->win);
+ wrefresh(menu_win);
}
+ curs_set(1);
- unpost_menu(menu->menu);
- free_mymenu(menu);
- delwin(mainwin);
- endwin();
-
- MD_Listar();
- return 0;
+ unpost_menu(menu);
+ delwin(menu_win);
+ free_item(items[0]);
+ free_item(items[1]);
+ free_item(items[2]);
+ free_item(items[3]);
+ free_menu(menu);
}
-MyMENU *build_mymenu(WINDOW *win)
+int main_menu()
{
WINDOW *menu_win;
- MyMENU *tmp = (MyMENU *)malloc(sizeof(MyMENU));
- if (tmp == NULL) return NULL;
+ MENU *menu;
+ ITEM **items;
+ int c, salir, opcion;
+ char *opciones[] = {
+ "Articulos",
+ "Facturas",
+ "Ver Registros",
+ "Ver Bloques",
+ "Salir"
+ };
- tmp->items[0] = new_item("Artículos", "Alta,baja,consulta y modificación de artículos.");
- tmp->items[1] = new_item("Facturas", "Alta,baja,consulta y modificación de facturas.");
- tmp->items[2] = new_item("Ver Registros", "Ver registros de un archivo.");
- tmp->items[3] = new_item("Ver Bloques", "Ver bloques de un archivo.");
- tmp->items[4] = NULL;
+ items = (ITEM **)calloc(5, sizeof(ITEM *));
- tmp->menu = new_menu(tmp->items);
-
- tmp->win = menu_win = derwin(win, 8, 68, 3, 1);
+ items[0] = new_item(opciones[0], "Alta,baja,consulta y modificacion de articulos.");
+ items[1] = new_item(opciones[1], "Alta,baja,consulta y modificacion de facturas.");
+ items[2] = new_item(opciones[2], "Ver registros de un archivo.");
+ items[3] = new_item(opciones[3], "Ver bloques de un archivo.");
+ items[4] = new_item(opciones[4], "Salir del sistema.");
+ items[5] = NULL;
+
+ menu = new_menu((ITEM **)items);
+ menu_win = newwin(9, 68, 3, 1);
keypad(menu_win, TRUE);
- set_menu_mark(tmp->menu, " > ");
- set_menu_win(tmp->menu, menu_win);
- set_menu_sub(tmp->menu, derwin(menu_win, 8, 68, 3, 1));
+ set_menu_mark(menu, " > ");
+ set_menu_win(menu, menu_win);
+ set_menu_sub(menu, derwin(menu_win, 6, 66, 3, 1));
box(menu_win, 0, 0);
mvwaddch(menu_win, 2, 0, ACS_LTEE);
- mvwhline(menu_win, 2, 1, ACS_HLINE, 68);
- mvwaddch(menu_win, 2, 68, ACS_RTEE);
- return tmp;
-}
+ mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
+ mvwaddch(menu_win, 2, 67, ACS_RTEE);
+ wattron(menu_win, COLOR_PAIR(COLOR_RED));
+ mvwaddstr(menu_win, 1, 1, "Menu Principal");
+ wattroff(menu_win, COLOR_PAIR(COLOR_RED));
+ post_menu(menu);
+ wrefresh(menu_win);
-void free_mymenu(MyMENU *menu)
-{
- delwin(menu->win);
- free_item(menu->items[0]);
- free_item(menu->items[1]);
- free_item(menu->items[2]);
- free_item(menu->items[3]);
- free_menu(menu->menu);
- free(menu);
-}
+ curs_set(0);
+ opcion = -1;
+ salir = 0;
+ while((!salir) && (c = getch()) != KEY_F(1)) {
+ switch(c) {
+ case KEY_DOWN:
+ menu_driver(menu, REQ_DOWN_ITEM);
+ break;
+ case KEY_UP:
+ menu_driver(menu, REQ_UP_ITEM);
+ break;
+ case 13:
+ case 10: {
+ ITEM *cur;
+ int i;
-void editar_articulo(WINDOW *win, t_Articulo *articulo)
-{
- t_Form *form;
- form = form_crear(win);
- form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero);
- form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc);
- form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion);
- form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia);
- form_agregar_widget(form, INPUT, "PVU", 30, articulo->pvu);
- form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin);
-
- form_ejecutar(form, 10, 10);
-
- form_destruir(form);
+ cur = current_item(menu);
+ for(i=0; i<5; ++i) {
+ if (strcmp(item_name(cur), opciones[i]) == 0)
+ opcion = i;
+ }
+ pos_menu_cursor(menu);
+ salir = 1;
+ }
+ }
+ wrefresh(menu_win);
+ }
+ curs_set(1);
+
+ unpost_menu(menu);
+ werase(menu_win);
+ wrefresh(menu_win);
+ delwin(menu_win);
+ free_item(items[0]);
+ free_item(items[1]);
+ free_item(items[2]);
+ free_item(items[3]);
+ free_menu(menu);
+
+ return opcion;
}
+
static void finish(int sig)
{
endwin();