minor actions cleanup:
- CONTEXT_MAINMENU is not actually needed, use CONTEXT_TREE which does the same actions
- (gigabeat) use vol+/- in the lists to control volume (every list!) (FS#6982 in a better way)


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13062 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/action.h b/apps/action.h
index 7f476a8..2902372 100644
--- a/apps/action.h
+++ b/apps/action.h
@@ -44,7 +44,7 @@
     CONTEXT_WPS = 1,
     CONTEXT_TREE = 2, 
     CONTEXT_RECORD = 3,
-    CONTEXT_MAINMENU = 4,
+    CONTEXT_MAINMENU = 4, /* uses CONTEXT_TREE and ACTION_TREE_* */
     CONTEXT_ID3DB = 5,
     /* Add new contexts here, no need to explicitly define a value for them */    
     CONTEXT_LIST,
@@ -123,6 +123,10 @@
     /* list and tree page up/down */    
     ACTION_LISTTREE_PGUP,/* optional */
     ACTION_LISTTREE_PGDOWN,/* optional */
+#ifdef HAVE_VOLUME_IN_LIST
+    ACTION_LIST_VOLUP,
+    ACTION_LIST_VOLDOWN,
+#endif
     
     /* tree */ 
     ACTION_TREE_ROOT_INIT,
@@ -152,13 +156,13 @@
     ACTION_REC_F3,
     
     /* main menu */
+    /* These are not strictly actions, but must be here
+       so they dont conflict with real actions in the menu code */
     ACTION_REQUEST_MENUITEM,
     ACTION_EXIT_MENUITEM,
     ACTION_EXIT_AFTER_THIS_MENUITEM, /* if a menu returns this the menu will exit
                                         once the subitem returns */
     ACTION_ENTER_MENUITEM,
-    ACTION_MENU_WPS,
-    ACTION_MENU_STOP,
     
     /* id3db */
     
diff --git a/apps/gui/list.c b/apps/gui/list.c
index 7f25903..52cbee2 100644
--- a/apps/gui/list.c
+++ b/apps/gui/list.c
@@ -33,6 +33,7 @@
 #include "statusbar.h"
 #include "textarea.h"
 #include "lang.h"
+#include "sound.h"
 
 #ifdef HAVE_LCD_CHARCELLS
 #define SCROLL_LIMIT 1
@@ -924,6 +925,21 @@
 
     switch(button)
     {
+#ifdef HAVE_VOLUME_IN_LIST
+        case ACTION_LIST_VOLUP:
+            global_settings.volume += 2; 
+            /* up two because the falthrough brings it down one */
+        case ACTION_LIST_VOLDOWN:
+            global_settings.volume--;
+            
+            if (global_settings.volume < sound_min(SOUND_VOLUME))
+                global_settings.volume = sound_min(SOUND_VOLUME);
+            if (global_settings.volume > sound_max(SOUND_VOLUME))
+                global_settings.volume = sound_max(SOUND_VOLUME);
+            sound_set_volume(global_settings.volume);
+            settings_save();
+            return button;
+#endif
         case ACTION_STD_PREV:
         case ACTION_STD_PREVREPEAT:
             gui_synclist_select_previous(lists);
diff --git a/apps/keymaps/keymap-av300.c b/apps/keymaps/keymap-av300.c
index 22e1fcc..f390b84 100644
--- a/apps/keymaps/keymap-av300.c
+++ b/apps/keymaps/keymap-av300.c
@@ -236,6 +236,7 @@
         case CONTEXT_BOOKMARKSCREEN:
             return button_context_bmark;
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_tree_scroll_lr;
             /* else fall through to CUSTOM|1 */
@@ -254,7 +255,6 @@
 
         case CONTEXT_STD:
         case CONTEXT_LIST:
-        case CONTEXT_MAINMENU:
         default:
             return button_context_standard;
     }
diff --git a/apps/keymaps/keymap-e200.c b/apps/keymaps/keymap-e200.c
index b67a7a4..6bbad1a 100644
--- a/apps/keymaps/keymap-e200.c
+++ b/apps/keymaps/keymap-e200.c
@@ -48,11 +48,6 @@
     LAST_ITEM_IN_LIST
 }; /* button_context_standard */
 
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,        BUTTON_UP,       BUTTON_NONE },
-    
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_menu */
 
 static const struct button_mapping button_context_wps[]  = {
     { ACTION_WPS_PLAY,     BUTTON_UP|BUTTON_REL,        BUTTON_UP },
@@ -237,8 +232,6 @@
     {
         case CONTEXT_STD:
             return button_context_standard;
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
             
         case CONTEXT_WPS:
             return button_context_wps;
@@ -246,6 +239,7 @@
         case CONTEXT_LIST:
             return button_context_list;
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_listtree_scroll_without_combo;
             else 
diff --git a/apps/keymaps/keymap-gigabeat.c b/apps/keymaps/keymap-gigabeat.c
index 90fe30d..56fb8de 100644
--- a/apps/keymaps/keymap-gigabeat.c
+++ b/apps/keymaps/keymap-gigabeat.c
@@ -104,6 +104,13 @@
     { ACTION_LISTTREE_PGDOWN,       BUTTON_POWER|BUTTON_DOWN,                  BUTTON_POWER },
     { ACTION_LISTTREE_PGDOWN,       BUTTON_DOWN|BUTTON_REL,                 BUTTON_POWER|BUTTON_DOWN },
     { ACTION_LISTTREE_PGDOWN,       BUTTON_POWER|BUTTON_DOWN|BUTTON_REPEAT,    BUTTON_NONE },
+#ifdef HAVE_VOLUME_IN_LIST
+    { ACTION_LIST_VOLUP,         BUTTON_VOL_UP|BUTTON_REPEAT,        BUTTON_NONE },
+    { ACTION_LIST_VOLUP,         BUTTON_VOL_UP,                      BUTTON_NONE },
+    { ACTION_LIST_VOLDOWN,       BUTTON_VOL_DOWN,                    BUTTON_NONE },
+    { ACTION_LIST_VOLDOWN,       BUTTON_VOL_DOWN|BUTTON_REPEAT,      BUTTON_NONE },
+#endif
+    
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
 }; /* button_context_list */
 
@@ -116,15 +123,6 @@
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
 }; /* button_context_tree */
 
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,    BUTTON_POWER|BUTTON_REL,    BUTTON_POWER },
-    { ACTION_MENU_STOP,   BUTTON_A,                   BUTTON_NONE },
-    { ACTION_MENU_STOP,   BUTTON_A|BUTTON_REL,        BUTTON_A },
-    { ACTION_MENU_STOP,   BUTTON_A|BUTTON_REPEAT,     BUTTON_NONE },
-
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_tree */
-
 static const struct button_mapping button_context_listtree_scroll_with_combo[]  = {
     { ACTION_NONE,              BUTTON_POWER,                              BUTTON_NONE },
     { ACTION_TREE_PGLEFT,       BUTTON_POWER|BUTTON_LEFT,                  BUTTON_POWER },
@@ -271,13 +269,12 @@
     {
         case CONTEXT_STD:
             return button_context_standard;
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
         case CONTEXT_WPS:
             return button_context_wps;
 
         case CONTEXT_LIST:
             return button_context_list;
+        case CONTEXT_MAINMENU:
         case CONTEXT_TREE:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_listtree_scroll_without_combo;
diff --git a/apps/keymaps/keymap-h10.c b/apps/keymaps/keymap-h10.c
index c0e5614..be3dc74 100644
--- a/apps/keymaps/keymap-h10.c
+++ b/apps/keymaps/keymap-h10.c
@@ -62,12 +62,6 @@
     LAST_ITEM_IN_LIST
 }; /* remote_button_context_standard */
 
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,        BUTTON_PLAY,       BUTTON_NONE },
-    
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_menu */
-
 static const struct button_mapping button_context_wps[]  = {
     { ACTION_WPS_PLAY,     BUTTON_PLAY|BUTTON_REL,   BUTTON_PLAY },
     { ACTION_WPS_STOP,     BUTTON_PLAY|BUTTON_REPEAT,BUTTON_PLAY },
@@ -358,8 +352,6 @@
     {
         case CONTEXT_STD:
             return button_context_standard;
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
             
         case CONTEXT_WPS:
             return button_context_wps;
@@ -367,6 +359,7 @@
         case CONTEXT_LIST:
             return button_context_list;
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_listtree_scroll_without_combo;
             else 
diff --git a/apps/keymaps/keymap-h1x0_h3x0.c b/apps/keymaps/keymap-h1x0_h3x0.c
index 2640e8c..b31ce6e 100644
--- a/apps/keymaps/keymap-h1x0_h3x0.c
+++ b/apps/keymaps/keymap-h1x0_h3x0.c
@@ -65,13 +65,6 @@
     LAST_ITEM_IN_LIST
 }; /* button_context_standard */
 
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,            BUTTON_ON,       BUTTON_NONE },
-    { ACTION_MENU_STOP,           BUTTON_OFF,       BUTTON_NONE },
-    
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_menu */
-
 static const struct button_mapping button_context_wps[]  = {
     { ACTION_WPS_PLAY,          BUTTON_ON|BUTTON_REL,           BUTTON_ON },
     { ACTION_WPS_SKIPNEXT,      BUTTON_RIGHT|BUTTON_REL,        BUTTON_RIGHT },
@@ -721,17 +714,11 @@
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
 };
 
-static const struct button_mapping button_context_menu_remote[] = {
-    { ACTION_MENU_WPS,      BUTTON_RC_ON,         BUTTON_NONE },
-
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST|CONTEXT_REMOTE)
-};
 
 /* the actual used tables */
 static const struct button_mapping 
         *remote_btn_ctxt_std = 0, 
         *remote_btn_ctxt_wps = 0,
-        *remote_btn_ctxt_menu = button_context_menu_remote,
         *remote_btn_ctxt_list = 0,
         *remote_btn_ctxt_tree = 0,
         *remote_btn_ctxt_listtree_scroll_w_cmb = 0,
@@ -880,8 +867,6 @@
     {
         case CONTEXT_STD:
             return remote_btn_ctxt_std;
-        case CONTEXT_MAINMENU:
-            return remote_btn_ctxt_menu;
         case CONTEXT_WPS: /* common for all remotes */
             return button_context_wps_remotescommon;
 
@@ -891,6 +876,7 @@
         case CONTEXT_LIST:
             return remote_btn_ctxt_list;
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return remote_btn_ctxt_listtree_scroll_wo_cmb;
             else 
@@ -929,14 +915,13 @@
     {
         case CONTEXT_STD:
             return button_context_standard;
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
         case CONTEXT_WPS:
             return button_context_wps;
             
         case CONTEXT_LIST:
             return button_context_list;
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_listtree_scroll_without_combo;
             else 
diff --git a/apps/keymaps/keymap-ipod.c b/apps/keymaps/keymap-ipod.c
index 8b08f0c..4e0fc1b 100644
--- a/apps/keymaps/keymap-ipod.c
+++ b/apps/keymaps/keymap-ipod.c
@@ -60,12 +60,6 @@
     
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
 }; /* button_context_tree */
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,          BUTTON_PLAY|BUTTON_REL,      BUTTON_PLAY },
-    { ACTION_MENU_STOP,         BUTTON_PLAY|BUTTON_REPEAT,   BUTTON_PLAY },
-    
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_menu */
 
 static const struct button_mapping button_context_tree_scroll_lr[]  = {
     { ACTION_NONE,              BUTTON_LEFT,                BUTTON_NONE },
@@ -190,6 +184,7 @@
             return button_context_wps;
             
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_tree_scroll_lr;
             /* else fall through to CUSTOM|CONTEXT_TREE */
@@ -198,8 +193,6 @@
             
         case CONTEXT_LIST:
             return button_context_standard;
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
             
         case CONTEXT_SETTINGS_EQ:
         case CONTEXT_SETTINGS_COLOURCHOOSER:
diff --git a/apps/keymaps/keymap-ondio.c b/apps/keymaps/keymap-ondio.c
index 17b7fe4..506444e 100644
--- a/apps/keymaps/keymap-ondio.c
+++ b/apps/keymaps/keymap-ondio.c
@@ -88,12 +88,6 @@
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
 }; /* button_context_listtree */
 
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,    BUTTON_MENU|BUTTON_REL,       BUTTON_MENU },
-    
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_menu */
-
 static const struct button_mapping button_context_tree_scroll_lr[]  = {
     { ACTION_NONE,              BUTTON_LEFT,                BUTTON_NONE },
     { ACTION_STD_CANCEL,        BUTTON_LEFT|BUTTON_REL,     BUTTON_LEFT },
@@ -205,6 +199,7 @@
         case CONTEXT_PITCHSCREEN:
             return button_context_pitchscreen;
         case CONTEXT_TREE:     
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_tree_scroll_lr;
             /* else fall through to CUSTOM|CONTEXT_TREE */
@@ -218,8 +213,6 @@
         case CONTEXT_FM:
             return button_context_radio;
 #endif
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
         case CONTEXT_LIST:
         default:
             return button_context_standard;
diff --git a/apps/keymaps/keymap-player.c b/apps/keymaps/keymap-player.c
index af28bc9..1c0536d 100644
--- a/apps/keymaps/keymap-player.c
+++ b/apps/keymaps/keymap-player.c
@@ -79,12 +79,6 @@
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
 }; /* button_context_listtree */
 
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,      BUTTON_ON,     BUTTON_NONE },
-    
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_menu */
-
 static const struct button_mapping button_context_yesno[]  = {
     { ACTION_YESNO_ACCEPT,  BUTTON_PLAY,   BUTTON_NONE },
 
@@ -157,11 +151,10 @@
             return button_context_yesno;
 
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             return button_context_tree;
         case CONTEXT_BOOKMARKSCREEN:
             return button_context_bmark;
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
         case CONTEXT_STD:
         case CONTEXT_LIST:
         default:
diff --git a/apps/keymaps/keymap-recorder.c b/apps/keymaps/keymap-recorder.c
index fc781af..6f9aff6 100644
--- a/apps/keymaps/keymap-recorder.c
+++ b/apps/keymaps/keymap-recorder.c
@@ -112,12 +112,6 @@
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
 }; /* button_context_listtree */
 
-static const struct button_mapping button_context_menu[]  = {
-    { ACTION_MENU_WPS,              BUTTON_ON|BUTTON_REL,                   BUTTON_ON },
-    { ACTION_MENU_STOP,             BUTTON_OFF,                             BUTTON_NONE },
-    { ACTION_NONE,                  BUTTON_ON,                              BUTTON_NONE },
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_listtree */
 
 static const struct button_mapping button_context_tree_scroll_lr[]  = {
     { ACTION_NONE,              BUTTON_LEFT,                BUTTON_NONE },
@@ -290,6 +284,7 @@
         case CONTEXT_BOOKMARKSCREEN:
             return button_context_bmark;
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_tree_scroll_lr;
             /* else fall through to CUSTOM|1 */
@@ -306,8 +301,6 @@
         case CONTEXT_FM:
             return button_context_radio;
 
-        case CONTEXT_MAINMENU:
-            return button_context_menu;
         case CONTEXT_STD:
         case CONTEXT_LIST:
         default:
diff --git a/apps/keymaps/keymap-x5.c b/apps/keymaps/keymap-x5.c
index 1c88244..b637e1d 100644
--- a/apps/keymaps/keymap-x5.c
+++ b/apps/keymaps/keymap-x5.c
@@ -131,13 +131,6 @@
     LAST_ITEM_IN_LIST
 }; /* button_context_keyboard_h100remote */
 
-/** Main Menu Context Menu **/
-static const struct button_mapping button_context_mainmenu[] = {
-    { ACTION_NONE,     BUTTON_POWER,                  BUTTON_NONE },
-    { ACTION_MENU_WPS, BUTTON_PLAY,                   BUTTON_NONE },
-    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
-}; /* button_context_mainmenu */
-
 static const struct button_mapping remote_button_context_mainmenu[] = {
     { ACTION_STD_CANCEL,  BUTTON_RC_VOL_DOWN,         BUTTON_NONE },
     { ACTION_STD_OK,      BUTTON_RC_VOL_UP,           BUTTON_NONE },
@@ -412,8 +405,6 @@
         case CONTEXT_KEYBOARD:
             return button_context_keyboard;
 
-        case CONTEXT_MAINMENU:
-            return button_context_mainmenu;
 
         case CONTEXT_PITCHSCREEN:
             return button_context_pitchscreen;
@@ -435,6 +426,7 @@
             return button_context_settings_time;
 
         case CONTEXT_TREE:
+        case CONTEXT_MAINMENU:
             if (global_settings.hold_lr_for_scroll_in_list)
                 return button_context_tree_scroll_lr;
             /* else fall through to CONTEXT_TREE|CONTEXT_CUSTOM */
diff --git a/apps/menu.c b/apps/menu.c
index 5722d1f..b1ba9ea 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -468,12 +468,12 @@
         {
             talk_menu_item(menu, &lists);
         }
-        else if (action == ACTION_MENU_WPS)
+        else if (action == ACTION_TREE_WPS)
         {
             ret = GO_TO_PREVIOUS_MUSIC;
             done = true;
         }
-        else if (action == ACTION_MENU_STOP)
+        else if (action == ACTION_TREE_STOP)
         {
             if (audio_status() && !global_settings.party_mode)
             {
diff --git a/firmware/export/config-gigabeat.h b/firmware/export/config-gigabeat.h
index fd97264..588c92d 100644
--- a/firmware/export/config-gigabeat.h
+++ b/firmware/export/config-gigabeat.h
@@ -23,6 +23,9 @@
 /* define this if you would like tagcache to build on this target */
 #define HAVE_TAGCACHE
 
+/* define this if the target has volume keys which can be used in the lists */
+#define HAVE_VOLUME_IN_LIST
+
 /* LCD dimensions */
 #define LCD_WIDTH  240
 #define LCD_HEIGHT 320