diff libmenu/menu_cmdlist.c @ 17945:98f4e3704a76

Allow 6 ways (up/down/left/right/ok/cancel) navigation.
author albeu
date Sat, 25 Mar 2006 17:32:10 +0000
parents 931bdbc37ee0
children 6927fabaef92
line wrap: on
line diff
--- a/libmenu/menu_cmdlist.c	Sat Mar 25 13:39:47 2006 +0000
+++ b/libmenu/menu_cmdlist.c	Sat Mar 25 17:32:10 2006 +0000
@@ -27,6 +27,8 @@
 
   char* ok;
   char* cancel;
+  char* left;
+  char* right;
 };
 
 struct menu_priv_s {
@@ -47,6 +49,12 @@
 
 static void read_cmd(menu_t* menu,int cmd) {
   switch(cmd) {
+  case MENU_CMD_RIGHT:
+    if(mpriv->p.current->right) {
+      mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->right);
+      if(c) mp_input_queue_cmd(c);
+      break;
+    } // fallback on ok if right is not defined
   case MENU_CMD_OK: {
     if(mpriv->p.current->ok) {
       mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->ok);
@@ -54,6 +62,12 @@
 	mp_input_queue_cmd(c);
     }
    } break;
+  case MENU_CMD_LEFT:
+    if(mpriv->p.current->left) {
+      mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->left);
+      if(c) mp_input_queue_cmd(c);
+      break;
+    } // fallback on cancel if left is not defined
   case MENU_CMD_CANCEL:
     if(mpriv->p.current->cancel) {
       mp_cmd_t* c = mp_input_parse_cmd(mpriv->p.current->cancel);
@@ -84,7 +98,7 @@
 }
 
 static int parse_args(menu_t* menu,char* args) {
-  char *element,*body, **attribs, *name, *ok, *cancel;
+  char *element,*body, **attribs, *name;
   list_entry_t* m = NULL;
   int r;
   ASX_Parser_t* parser = asx_parser_new();
@@ -110,12 +124,12 @@
       asx_free_attribs(attribs);
       continue;
     }
-    ok = asx_get_attrib("ok",attribs);
-    cancel = asx_get_attrib("cancel",attribs);
     m = calloc(1,sizeof(struct list_entry_s));
     m->p.txt = name;
-    m->ok = ok;
-    m->cancel = cancel;
+    m->ok = asx_get_attrib("ok",attribs);
+    m->cancel = asx_get_attrib("cancel",attribs);
+    m->left = asx_get_attrib("left",attribs);
+    m->right = asx_get_attrib("right",attribs);
     menu_list_add_entry(menu,m);
 
     free(element);