/* * [Guida NCURSES](https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/intro.html) * Product Manager * * Controllare se file esiste * Listare prodotti con prezzo da file * Aggiungere prodotto con prezzo a file * Listare copie vendute di prodotto da file * Aggiungere copie venduto di prodotto a file * Cambiare nome dei file con interagisce * Calcolare la somma delle entrate dati i file */ #include #include #include #include // Prototipi int runMainMenu(); void warning(char *string); WINDOW *create_newwin(int height, int width, int starty, int startx); void destroy_win(WINDOW *local_win); void print_menu(WINDOW *menu_win, int y, int x, int highlight); void word_wrap_print(WINDOW *win, int start_y, int start_x, int max_width, const char *str); int getCount(); void changeFile(); int checkIfFileExists(); // Globali char productPricesFileLocation[64]="./productPricesSetting.txt"; char countFileLocation[64]="./count.txt"; FILE *productPrices; FILE *count; char *mainMenu[] = { "Segna vendita", "Vedi vendite", "Vedi prodotti", "Gestisci prodotti", "Opzioni", "Exit" }; int n_mainMenu = sizeof(mainMenu) / sizeof(char *); // Funzioni int main(){ initscr(); //initialize options noecho(); curs_set(0); raw(); refresh(); int running = 0; while(running != 6){ running = runMainMenu(); switch(running) { case 5: warning("Questa รจ una stringa molto lunga . . . Ma anche un test, che ti devo dire, ci proviamo a fare cose che non sono mai state fatte, oltretutto che divertimento ci sarebbe senza esperienze nuove?"); break; case 6: break; } } endwin(); return 0; } int runMainMenu(){ WINDOW *mainWin; int startx, starty, width, height; height = LINES / 2; width = COLS / 2; starty = 0; startx = 0; mainWin = create_newwin(height, width, starty, startx); int highlight = 1; int choice = 0; int c; keypad(mainWin, TRUE); mvwprintw(mainWin, 2, 2, "Usa le FRECCETTE ed INVIO per scegliere un'opzione!"); mvwprintw(mainWin, 3, 2, "In alternativa ci sono J e K con SPAZIO!"); refresh(); print_menu(mainWin, 6, width / 2 - 10, highlight); while(1) { c = wgetch(mainWin); switch(c) { case KEY_UP: case 'k': if(highlight == 1) highlight = n_mainMenu; else --highlight; break; case KEY_DOWN: case 'j': if(highlight == n_mainMenu) highlight = 1; else ++highlight; break; case 10: case 32: choice = highlight; break; default: mvprintw(LINES - 2, 1, "Il tasto '%c' non e' un tasto valido . . .", c); refresh(); break; } print_menu(mainWin, 6, width / 2 - 10, highlight); if(choice != 0) /* User did a choice come out of the infinite loop */ break; } mvprintw( LINES - 2 , 1, "Avvio opzione '%s' . . . ", mainMenu[choice - 1]); clrtoeol(); refresh(); destroy_win(mainWin); return choice; } void warning(char *string){ WINDOW *warningWin; int startx, starty, width, height; height = LINES / 2 - 2; width = COLS / 2; starty = LINES / 2; startx = 0; warningWin = create_newwin(height, width, starty, startx); mvwprintw(warningWin, 2, 2, "ATTENZIONE! E' avvenuto un errore . . . "); word_wrap_print(warningWin, 4, 3, width - 5, string); wrefresh(warningWin); getch(); destroy_win(warningWin); } WINDOW *create_newwin(int height, int width, int starty, int startx) { WINDOW *local_win; local_win = newwin(height, width, starty, startx); box(local_win, 0 , 0); wrefresh(local_win); return local_win; } void destroy_win(WINDOW *local_win) { wborder(local_win, ':', ':', '.', '.', '+', '+', '+', '+'); wrefresh(local_win); delwin(local_win); } void print_menu(WINDOW *menu_win, int y, int x, int highlight) { int i; box(menu_win, 0, 0); for(i = 0; i < n_mainMenu; ++i) { if(highlight == i + 1) /* High light the present choice */ { wattron(menu_win, A_REVERSE); mvwprintw(menu_win, y, x, "%s", mainMenu[i]); wattroff(menu_win, A_REVERSE); } else mvwprintw(menu_win, y, x, "%s", mainMenu[i]); ++y; } wrefresh(menu_win); } void word_wrap_print(WINDOW *win, int start_y, int start_x, int max_width, const char *str) { int y = start_y; int x = start_x; int line_length = 0; int word_length = 0; const char *word_start = str; while (*str) { // Trova la prossima parola if (*str != ' ' && *str != '\n' && *str != '\t') { str++; continue; } // Calcola lunghezza parola corrente word_length = str - word_start; // Gestione wrap if (line_length + word_length > max_width) { y++; x = start_x; line_length = 0; } // Stampa parola for (int i = 0; i < word_length; i++) { mvwaddch(win, y, x++, word_start[i]); } line_length += word_length; // Gestione spazi if (*str == ' ' || *str == '\t') { if (line_length < max_width) { mvwaddch(win, y, x++, ' '); line_length++; } else { y++; x = start_x; line_length = 0; } } else if (*str == '\n') { y++; x = start_x; line_length = 0; } word_start = ++str; } // Stampa ultima parola word_length = strlen(word_start); if (line_length + word_length > max_width) { y++; x = start_x; } mvwprintw(win, y, x, "%s", word_start); } int checkIfFileExists(){ return 0; } void changeFile(){ } int getCount(){ return 0; }