Faydalı Kullanıcı Göstericisi
Önceki Menü Kütüphanesi Sonraki
Faydalı Kullanıcı Göstericisi
Menüdeki her öğeye bir kullanıcı göstericisi atayabiliriz. Panellerdeki kullanıcı göstericisi ile aynı şekilde çalışmaktadır. Menü sistemi tarafından kullanılmazlar. Bunlar içerisine istediğiniz herhangi bir şeyi koyabilirsiniz. Ben genelde menü seçeneği seçildiğinde çalışacak işlevi (seçilen ve muhtemelen kullanıcının <ENTER>'ladığı) tutmak için kullanırım.
Örnek 12.24. Menü Kullanıcı Göstericilerinin Kullanımı
#include <curses.h>
#include <menu.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#define CTRLD   4

char *choices[] = {
  "Choice 1",
  "Choice 2",
  "Choice 3",
  "Choice 4",
  "Choice 5",
  "Choice 6",
  "Choice 7",
  "Exit",
};
void func(char *name);

int main()
{ ITEM **my_items;
  int c;
  MENU *my_menu;
  int n_choices, i;
  ITEM *cur_item;

  /* Curses Kipi İlklendir */
  initscr();
  start_color();
  cbreak();
  noecho();
  keypad(stdscr, TRUE);
  init_pair(1, COLOR_RED, COLOR_BLACK);
  init_pair(2, COLOR_GREEN, COLOR_BLACK);
  init_pair(3, COLOR_MAGENTA, COLOR_BLACK);

  /* Öğeleri İlklendir */
  n_choices = ARRAY_SIZE(choices);
  my_items = (ITEM **)calloc(n_choices + 1, sizeof(ITEM *));
  for(i = 0; i < n_choices; ++i)
  { my_items[i] = new_item(choices[i], choices[i]);
    /* Set the user pointer */
    set_item_userptr(my_items[i], func);
  }
  my_items[n_choices] = (ITEM *)NULL;

  /* Menüyü oluştur */
  my_menu = new_menu((ITEM **)my_items);

  /* Menüyü ekrana yaz */
  mvprintw(LINES - 3, 0,
    "Seçili öğeyi görmek için <ENTER>'a basın");
  mvprintw(LINES - 2, 0,
    "Hareket etmek için Yukarı ve Aşağı ok tuşlarını kullanın "
    "(Çıkmak için F1)");
  post_menu(my_menu);
  refresh();

  while((c = getch()) != KEY_F(1))
  { switch(c)
    { case KEY_DOWN:
        menu_driver(my_menu, REQ_DOWN_ITEM);
        break;
      case KEY_UP:
        menu_driver(my_menu, REQ_UP_ITEM);
        break;
      case 10: /* Enter */
      { ITEM *cur;
        void (*p)(char *);

        cur = current_item(my_menu);
        p = item_userptr(cur);
        p((char *)item_name(cur));
        pos_menu_cursor(my_menu);
        break;
      }
      break;
    }
  }
  unpost_menu(my_menu);
  for(i = 0; i < n_choices; ++i)
    free_item(my_items[i]);
  free_menu(my_menu);
  endwin();
}

void func(char *name)
{ move(20, 0);
  clrtoeol();
  mvprintw(20, 0, "Seçili öge: %s", name);
}
Önceki Üst Ana Başlık Sonraki
Menü Seçenekleri Başlangıç Form Kütüphanesi
Bir Linux Kitaplığı Sayfası