Programowanie z ncurses (index)


Programowanie z ncurses (7) - używanie menu

ZADANIE 7.1

W katalogu domowym utworzyć podkatalog menu. Utworzyć w nim pliki Makefile i menu.c postaci:


/*
*  menu.c
*
*  Program z HOWTO zmodyfikowany.
*  Przyklad prostego menu.
*/

#include <ncurses.h>

#define XSIZE 35
#define YSIZE 10 

void print_menu(WINDOW *menu_win, int rewers);

char *etykiety[]= {                /* etykiety do menu */
	"Koniec pracy z bazą danych",
	"Pomoc i dodatkowe informacje",
	"Aktualizacja bazy danych",
	"Zapytania do bazy danych",
	"Pisemne raporty (LaTeX, HTML)"
};
/* Obliczenie liczby pozycji w menu */
int liczba= sizeof(etykiety) / sizeof(char *);

int main(void)
{
WINDOW *menu_win;
int startx= 0;   /* polozenie okna menu */
int starty= 0;   /* polozenie okna menu */
int xmax, ymax;   /* rozmiary stdscr */
int rewers= 0;    /* zakres od 0 do liczba-1 (nr etykiety w rewersie) */
int pozycja= -1;  /* zakres od -1 do liczba-1 (-1 gdy nic nie wybrano) */
int c;

initscr();
clear();
noecho();
cbreak();
getmaxyx(stdscr, ymax, xmax);
startx= (xmax - XSIZE) / 2;
starty= (ymax - YSIZE) / 2;
		
menu_win= newwin(YSIZE, XSIZE, starty, startx);
keypad(menu_win, TRUE);
mvprintw(0, 0, "Uzyj kursora do poruszania. Nacisnij ENTER aby wybrac pozycje.");
refresh();
print_menu(menu_win, rewers);
while (pozycja == -1) {
	c= wgetch(menu_win);
	if (c == KEY_UP) { 
		rewers= (rewers + liczba -1) % liczba;
	} else if (c == KEY_DOWN) {
		rewers= (rewers + 1) % liczba;
	} else if (c == '\n') {
		pozycja= rewers;
	} else {
		mvprintw(ymax-1, 0, "Nacisnieto znak = %3d drukowany jako '%c'", c, c);
		refresh();
	}
	print_menu(menu_win, rewers);
}	
mvprintw(ymax-2, 0, "Wybrano pozycje %d z etykieta %s\n", pozycja+1, etykiety[pozycja]);
clrtoeol();
refresh();
delwin(menu_win);
endwin();
return 0;
}


void print_menu(WINDOW *menu_win, int rewers)
{
int x, y, i;	

x= 2;
y= 2;
box(menu_win, 0, 0);       /* ramka na okno */
for (i= 0; i < liczba; ++i) {
	if (rewers == i) {  /* wyswietl te pozycje w rewersie */
		wattron(menu_win, A_REVERSE); 
		mvwprintw(menu_win, y, x, "%s", etykiety[i]);
		wattroff(menu_win, A_REVERSE);
	} else {
		mvwprintw(menu_win, y, x, "%s", etykiety[i]);
	}
	++y;
}
wrefresh(menu_win);
}

Skompilować i uruchomić program.

FUNKCJE



UŻYWANIE BIBLIOTEKI MENU

Aby użyć biblioteki menu, należy do kodu dołączyć nagłówki

#include <curses.h>
#include <menu.h>

Przy scalaniu trzeba dołączyć opcje -lcurses -lmenu.


Programowanie z ncurses (index)