Kaynağa Gözat

+ menu usage demo added

florian 22 yıl önce
ebeveyn
işleme
82752eb4c2
1 değiştirilmiş dosya ile 105 ekleme ve 0 silme
  1. 105 0
      packages/extra/ncurses/menu_demo.pp

+ 105 - 0
packages/extra/ncurses/menu_demo.pp

@@ -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.