mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 06:59:33 +01:00 
			
		
		
		
	+ menu usage demo added
This commit is contained in:
		
							parent
							
								
									df04e18dd3
								
							
						
					
					
						commit
						82752eb4c2
					
				
							
								
								
									
										105
									
								
								packages/extra/ncurses/menu_demo.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								packages/extra/ncurses/menu_demo.pp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
			
		||||
uses
 | 
			
		||||
  ncurses,menu;
 | 
			
		||||
 | 
			
		||||
const
 | 
			
		||||
  choices : array[0..5] of pchar = (
 | 
			
		||||
                        'Choice 1',
 | 
			
		||||
                        'Choice 2',
 | 
			
		||||
                        'Choice 3',
 | 
			
		||||
                        'Choice 4',
 | 
			
		||||
                        'Exit',
 | 
			
		||||
                        nil
 | 
			
		||||
                  );
 | 
			
		||||
procedure print_in_middle(win : PWINDOW;starty,startx,width : longint;_string : pchar;color : chtype);
 | 
			
		||||
  var
 | 
			
		||||
    length,x,y : longint;
 | 
			
		||||
    temp : single;
 | 
			
		||||
  begin
 | 
			
		||||
	if win=nil then
 | 
			
		||||
          win:=stdscr;
 | 
			
		||||
	getyx(win, y, x);
 | 
			
		||||
	if startx <> 0 then
 | 
			
		||||
	  x := startx;
 | 
			
		||||
	if starty <> 0 then
 | 
			
		||||
		y := starty;
 | 
			
		||||
	if width=0 then
 | 
			
		||||
          width := 80;
 | 
			
		||||
 | 
			
		||||
	length := strlen(_string);
 | 
			
		||||
	temp := (width - length)/ 2;
 | 
			
		||||
	x := startx + round(temp);
 | 
			
		||||
	wattron(win, color);
 | 
			
		||||
	mvwprintw(win, y, x, '%s', [_string]);
 | 
			
		||||
	wattroff(win, color);
 | 
			
		||||
	refresh;
 | 
			
		||||
  end;
 | 
			
		||||
 | 
			
		||||
var
 | 
			
		||||
  my_items : ppitem;
 | 
			
		||||
  c : longint;
 | 
			
		||||
  my_menu : pmenu;
 | 
			
		||||
  my_menu_win : pwindow;
 | 
			
		||||
  i,n_choices : longint;
 | 
			
		||||
  
 | 
			
		||||
begin
 | 
			
		||||
	{ Initialize curses }
 | 
			
		||||
	initscr;
 | 
			
		||||
	start_color;
 | 
			
		||||
        cbreak;
 | 
			
		||||
        noecho;
 | 
			
		||||
	keypad(stdscr, 1);
 | 
			
		||||
	init_pair(1, COLOR_RED, COLOR_BLACK);
 | 
			
		||||
 | 
			
		||||
	{ Create items }
 | 
			
		||||
        n_choices := high(choices);
 | 
			
		||||
        getmem(my_items,n_choices*sizeof(pitem));
 | 
			
		||||
        for i:=0 to n_choices-1 do
 | 
			
		||||
          my_items[i] := new_item(choices[i], choices[i]);
 | 
			
		||||
 | 
			
		||||
	{ Create menu }
 | 
			
		||||
        my_menu := new_menu(ppitem(my_items));
 | 
			
		||||
 | 
			
		||||
	{ Create the window to be associated with the menu }
 | 
			
		||||
        my_menu_win := newwin(10, 40, 4, 4);
 | 
			
		||||
        keypad(my_menu_win, 1);
 | 
			
		||||
     
 | 
			
		||||
	{ Set main window and sub window }
 | 
			
		||||
        set_menu_win(my_menu, my_menu_win);
 | 
			
		||||
        set_menu_sub(my_menu, derwin(my_menu_win, 6, 38, 3, 1));
 | 
			
		||||
 | 
			
		||||
	{ Set menu mark to the string ' * ' }
 | 
			
		||||
        set_menu_mark(my_menu, ' * ');
 | 
			
		||||
 | 
			
		||||
	{ Print a border around the main window and print a title }
 | 
			
		||||
        box(my_menu_win, 0, 0);
 | 
			
		||||
	print_in_middle(my_menu_win, 1, 0, 40, 'My Menu', COLOR_PAIR(1));
 | 
			
		||||
	mvwaddch(my_menu_win, 2, 0, ACS_LTEE);
 | 
			
		||||
	mvwhline(my_menu_win, 2, 1, ACS_HLINE, 38);
 | 
			
		||||
	mvwaddch(my_menu_win, 2, 39, ACS_RTEE);
 | 
			
		||||
	mvprintw(LINES - 2, 0, 'F1 to exit',[]);
 | 
			
		||||
	refresh();
 | 
			
		||||
        
 | 
			
		||||
	{ Post the menu }
 | 
			
		||||
	post_menu(my_menu);
 | 
			
		||||
	wrefresh(my_menu_win);
 | 
			
		||||
 | 
			
		||||
        c:=wgetch(my_menu_win);
 | 
			
		||||
	while(c<> KEY_F(1)) do
 | 
			
		||||
	  begin
 | 
			
		||||
	    case c of
 | 
			
		||||
	      KEY_DOWN:
 | 
			
		||||
		menu_driver(my_menu, REQ_DOWN_ITEM);
 | 
			
		||||
              KEY_UP:
 | 
			
		||||
	        menu_driver(my_menu, REQ_UP_ITEM);
 | 
			
		||||
	    end;
 | 
			
		||||
            wrefresh(my_menu_win);
 | 
			
		||||
            c:=wgetch(my_menu_win);
 | 
			
		||||
	  end;	
 | 
			
		||||
 | 
			
		||||
	{ Unpost and free all the memory taken up }
 | 
			
		||||
        unpost_menu(my_menu);
 | 
			
		||||
        free_menu(my_menu);
 | 
			
		||||
        for i:=0 to n_choices-1 do
 | 
			
		||||
          free_item(my_items[i]);
 | 
			
		||||
	endwin();
 | 
			
		||||
end.
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user