menu_driver: Menü sisteminin dolap beygiri

Yukarıdaki örnekte gördüğünüz gibi menu_driver menüyü güncellemede önemli bir rol oynamaktadır. Aldığı çeşitli seçenekleri ve neler yaptığını anlamak oldukça önemlidir. Yukarıda açıklandığı üzere menu_driver())'ın ikinci parametresi bir menü gezinti isteği, yazılabilir bir karakter veya KEY_MOUSE anahtarı olabilir. Değişik gezinti isteklerini parçalara ayırıp inceleyelim.

REQ_LEFT_ITEM ve REQ_RIGHT_ITEM
Bir menü bir öğe için birden fazla sütun ile gösterilebilir. menu_format() işlevi kullanılarak bu gerçeklenebilir. Çok sütunlu bir menü gösterildiği zaman yukarıdaki istekler menü sürücüsünün o anki seçimin sağa ya da sola hareket etmesini sağlar.

REQ_UP_ITEM ve REQ_DOWN_ITEM
Yukarıdaki örnekte bu seçenekleri görmüştünüz. Bu istekler verildiğinde menu_driver'ın o anki seçimi yukarı veya aşağı kaydırmasını sağlar.

REQ_SCR_* seçenekleri
REQ_SCR_ULINE, REQ_SCR_DLINE, REQ_SCR_DPAGE ve REQ_SCR_UPAGE seçenekleri kaydırma ile ilgili seçeneklerdir. Eğer menüdeki tüm öğeler alt pencere menüsünde gösterilemiyorsa o zaman menü kaydırılabilirdir. Bu istekler menu_driver'a verilerek sırasıyla kaydırmanın yukarı, aşağı, bir sayfa aşağı veya yukarı yapılması sağlanabilir.

REQ_FIRST_ITEM, REQ_LAST_ITEM, REQ_NEXT_ITEM ve REQ_PREV_ITEM
Bu istekler kendilerini açıklar niteliktedir (Sırayla ilk, son, sonraki, önceki).

>REQ_TOGGLE_ITEM
Bu istek verildiğinde o anki seçim değiştirilir. Bu seçenek çok değerli menülerde kullanılmalıdır. Bu isteği kullanabilmek için O_ONEVALUE değeri etkisizleştirilmelidir. Bu seçenek set_menu_opts() ile etkin veya etkisiz yapılabilir.

Örüntü İstekleri
Her menünün kullanıcın girdiği karakterlere en yakın olan ascii karakter karşılığını bulmak için bir örüntü önbelleği bulunmaktadır. menu_driver'a ascii karakterler verildiği zaman örüntü önbelleğine alınır. Aynı zamanda listedeki örüntüye en yakın olan eşleşmeyi de bulmaya çalışır ve o anki seçimi o öğeye hareket ettirir. REQ_CLEAR_PATTERN isteği örüntü belleğini siler. REQ_BACK_PATTERN isteği örüntü belleğindeki bir önceki karakteri siler. Örüntünün birden fazla öğe ile eşlemesi halinde eşleşen öğeler REQ_NEXT_MATCH ve REQ_PREV_MATCH ile seçim üzerinden sonraki veya öncekine hareket sağlanabilir.

Fare İstekleri
KEY_MOUSE istekleri durumunda farenin konumuna göre bir davranış sergilenir. Gösterilecek davranış kılavuz sayfalarında açıklanmıştır:

    Eğer  ikinci  parametre  KEY_MOUSE  özel  karakteri  ise bununla
    ilişkili fare  olayı,  yukarıda  önceden  tanımlanmış  isteklere
    çevrilir.  Sadece  kullanıcı  penceresindeki  (örn. menü görüntü
    alanı  veya  dekor  penceresi)   tıklamalar   işlenir.   Menünün
    görüntülenebilir alanı üzerine tıklanırsa REQ_SCR_ULINE üretilir,
    eğer  çift  tıklarsanız  REQ_SCR_UPAGE  üretilir ve eğer üç kere
    tıklarsanız  REQ_FIRST_ITEM  üretilir.  Eğer  menü   görüntüleme
    alanı aşağısına tıklanırsa REQ_SCR_DLINE üretilir, eğer iki kere
    tıklanırsa  REQ_SCR_DPAGE  üretilir  ve  eğer üç kere tıklanırsa
    REQ_LAST_ITEM   üretilir.   Eğer   menü   görüntüleme   alanının
    içerisinde bir öğeye tıklanırsa  menü imleci bu öğeye konumlanır.

Yukarıdaki isteklerin her biri takip eden satırlarda değişik örneklerle gerekli oldukça açıklanacaktır.