A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 380 lines 19 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2009 Bob Cousins 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21 22/* Button Code Definitions for the Mini2440 target 23 * based on Toshiba Gigabeat F keymap 24 */ 25#include <stdio.h> 26#include <string.h> 27#include <stdlib.h> 28 29#include "config.h" 30#include "action.h" 31#include "button.h" 32#include "settings.h" 33 34/* 35 * The format of the list is as follows 36 * { Action Code, Button code, Prereq button code } 37 * if there's no need to check the previous button's value, use BUTTON_NONE 38 * Insert LAST_ITEM_IN_LIST at the end of each mapping 39 */ 40 41/* CONTEXT_CUSTOM's used in this file... 42 43CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions) 44CONTEXT_CUSTOM|CONTEXT_SETTINGS = the direction keys for the eq/col picker screens 45 i.e where up/down is inc/dec 46 CONTEXT_SETTINGS = up/down is prev/next, l/r is inc/dec 47 48*/ 49 50 51static const struct button_mapping button_context_standard[] = { 52 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 53 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 54 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 55 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 56 57 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, 58 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, 59 60 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT }, 61 62 { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, 63 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 64 65 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 66 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, 67 68 LAST_ITEM_IN_LIST 69}; /* button_context_standard */ 70 71 72static const struct button_mapping button_context_wps[] = { 73 { ACTION_WPS_PLAY, BUTTON_A|BUTTON_REL, BUTTON_A }, 74 { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, 75 76 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 77 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 78 79 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 80 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 81 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 82 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 83 84 { ACTION_WPS_ABSETB_NEXTDIR,BUTTON_A|BUTTON_RIGHT, BUTTON_NONE }, 85 { ACTION_WPS_ABSETA_PREVDIR,BUTTON_A|BUTTON_LEFT, BUTTON_NONE }, 86 { ACTION_WPS_ABRESET, BUTTON_A|BUTTON_SELECT, BUTTON_NONE }, 87 88 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 89 { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, 90 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 91 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 92 { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 93 { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, 94 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 95 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 96 97 { ACTION_WPS_PITCHSCREEN, BUTTON_A|BUTTON_UP, BUTTON_A }, 98 { ACTION_WPS_VIEW_PLAYLIST, BUTTON_A|BUTTON_DOWN, BUTTON_NONE }, 99 100 { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, 101 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 102 { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 103 104 { ACTION_WPS_HOTKEY, BUTTON_A|BUTTON_MENU, BUTTON_NONE }, 105 { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 106 107 LAST_ITEM_IN_LIST 108}; /* button_context_wps */ 109 110static const struct button_mapping button_context_list[] = { 111 { ACTION_LISTTREE_PGUP, BUTTON_A|BUTTON_UP, BUTTON_NONE }, 112 { ACTION_LISTTREE_PGUP, BUTTON_A|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 113 { ACTION_LISTTREE_PGDOWN, BUTTON_A|BUTTON_DOWN, BUTTON_NONE }, 114 { ACTION_LISTTREE_PGDOWN, BUTTON_A|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 115#ifdef HAVE_VOLUME_IN_LIST 116 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 117 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 118 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 119 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 120#endif 121 122 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 123}; /* button_context_list */ 124 125static const struct button_mapping button_context_tree[] = { 126 { ACTION_TREE_WPS, BUTTON_A|BUTTON_REL, BUTTON_A }, 127 { ACTION_TREE_STOP, BUTTON_POWER, BUTTON_NONE }, 128 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, 129 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE }, 130 { ACTION_TREE_HOTKEY, BUTTON_A|BUTTON_MENU, BUTTON_NONE }, 131 132 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) 133}; /* button_context_tree */ 134 135static const struct button_mapping button_context_listtree_scroll_with_combo[] = { 136 { ACTION_NONE, BUTTON_A, BUTTON_NONE }, 137 { ACTION_TREE_PGLEFT, BUTTON_A|BUTTON_LEFT, BUTTON_NONE }, 138 { ACTION_TREE_ROOT_INIT, BUTTON_A|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_A|BUTTON_LEFT }, 139 { ACTION_TREE_PGLEFT, BUTTON_A|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 140 { ACTION_TREE_PGRIGHT, BUTTON_A|BUTTON_RIGHT, BUTTON_NONE }, 141 { ACTION_TREE_PGRIGHT, BUTTON_A|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 142 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 143}; 144 145static const struct button_mapping button_context_listtree_scroll_without_combo[] = { 146 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, 147 { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 148 { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, 149 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 150 { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, 151 { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 152 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 153 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 154}; 155 156static const struct button_mapping button_context_settings[] = { 157 { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, 158 { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 159 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, 160 { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 161 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, 162 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 163 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 164 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 165 166 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 167}; /* button_context_settings */ 168 169static const struct button_mapping button_context_settings_right_is_inc[] = { 170 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, 171 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 172 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, 173 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 174 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 175 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 176 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 177 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 178 179 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 180}; /* button_context_settingsgraphical */ 181 182static const struct button_mapping button_context_yesno[] = { 183 { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE }, 184 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 185}; /* button_context_settings_yesno */ 186 187static const struct button_mapping button_context_colorchooser[] = { 188 { ACTION_STD_OK, BUTTON_A|BUTTON_REL, BUTTON_NONE }, 189 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 190}; /* button_context_colorchooser */ 191 192static const struct button_mapping button_context_eq[] = { 193 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, 194 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 195}; /* button_context_eq */ 196 197/** Bookmark Screen **/ 198static const struct button_mapping button_context_bmark[] = { 199 { ACTION_BMS_DELETE, BUTTON_A, BUTTON_NONE }, 200 201 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 202}; /* button_context_bmark */ 203 204static const struct button_mapping button_context_time[] = { 205 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, 206 { ACTION_STD_OK, BUTTON_A, BUTTON_NONE }, 207 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), 208}; /* button_context_time */ 209 210static const struct button_mapping button_context_quickscreen[] = { 211 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, 212 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 213 { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, 214 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 215 { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, 216 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 217 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 218 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 219 { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, 220 221 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 222}; /* button_context_quickscreen */ 223 224static const struct button_mapping button_context_pitchscreen[] = { 225 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, 226 { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 227 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, 228 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 229 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, 230 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, 231 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 232 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, 233 { ACTION_PS_TOGGLE_MODE, BUTTON_MENU, BUTTON_NONE }, 234 { ACTION_PS_RESET, BUTTON_A, BUTTON_NONE }, 235 { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE }, 236 { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 237 { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 238 239 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 240}; /* button_context_pitchcreen */ 241 242static const struct button_mapping button_context_keyboard[] = { 243 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, 244 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 245 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 246 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 247 { ACTION_KBD_CURSOR_LEFT, BUTTON_A|BUTTON_LEFT, BUTTON_NONE }, 248 { ACTION_KBD_CURSOR_LEFT, BUTTON_A|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 249 { ACTION_KBD_CURSOR_RIGHT, BUTTON_A|BUTTON_RIGHT, BUTTON_NONE }, 250 { ACTION_KBD_CURSOR_RIGHT, BUTTON_A|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 251 { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE }, 252 { ACTION_KBD_PAGE_FLIP, BUTTON_A|BUTTON_MENU, BUTTON_NONE }, 253 { ACTION_KBD_DONE, BUTTON_A|BUTTON_REL, BUTTON_A }, 254 { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, 255 { ACTION_KBD_BACKSPACE, BUTTON_MENU, BUTTON_NONE }, 256 { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, 257 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, 258 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 259 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, 260 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 261 { ACTION_KBD_MORSE_INPUT, BUTTON_A|BUTTON_POWER, BUTTON_NONE }, 262 { ACTION_KBD_MORSE_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, 263 264 LAST_ITEM_IN_LIST 265}; /* button_context_keyboard */ 266 267#ifdef HAVE_MINI2440_REMOTE 268/***************************************************************************** 269 * Remote control mappings 270 *****************************************************************************/ 271 272static const struct button_mapping remote_button_context_standard[] = { 273 { ACTION_STD_PREV, BUTTON_RC_VOL_UP, BUTTON_NONE }, 274 { ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 275 { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 276 { ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 277 { ACTION_STD_CANCEL, BUTTON_RC_REW, BUTTON_NONE }, 278 { ACTION_STD_OK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, 279 { ACTION_STD_CONTEXT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF }, 280 { ACTION_STD_MENU, BUTTON_RC_DSP, BUTTON_NONE }, 281 282 LAST_ITEM_IN_LIST 283}; 284 285static const struct button_mapping remote_button_context_wps[] = { 286 { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, 287 288 { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, 289 { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW }, 290 291 { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 292 { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 293 { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT }, 294 { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT }, 295 296 { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 297 { ACTION_WPS_MENU, BUTTON_RC_DSP, BUTTON_NONE }, 298 299 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 300 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 301 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 302 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, 303 304 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 305}; 306 307static const struct button_mapping remote_button_context_tree[] = { 308 { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, 309 { ACTION_TREE_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 310 { ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 311 312 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 313}; 314 315static const struct button_mapping* get_context_mapping_remote( int context ) 316{ 317 context ^= CONTEXT_REMOTE; 318 319 switch (context) 320 { 321 case CONTEXT_WPS: 322 return remote_button_context_wps; 323 case CONTEXT_MAINMENU: 324 case CONTEXT_TREE: 325 return remote_button_context_tree; 326 } 327 return remote_button_context_standard; 328} 329#endif 330 331const struct button_mapping* target_get_context_mapping(int context) 332{ 333#ifdef HAVE_MINI2440_REMOTE 334 if (context&CONTEXT_REMOTE) 335 return get_context_mapping_remote(context); 336#endif 337 switch (context) 338 { 339 case CONTEXT_STD: 340 return button_context_standard; 341 case CONTEXT_WPS: 342 return button_context_wps; 343 344 case CONTEXT_LIST: 345 return button_context_list; 346 case CONTEXT_MAINMENU: 347 case CONTEXT_TREE: 348 if (global_settings.hold_lr_for_scroll_in_list) 349 return button_context_listtree_scroll_without_combo; 350 else 351 return button_context_listtree_scroll_with_combo; 352 case CONTEXT_CUSTOM|CONTEXT_TREE: 353 return button_context_tree; 354 355 case CONTEXT_SETTINGS: 356 return button_context_settings; 357 case CONTEXT_CUSTOM|CONTEXT_SETTINGS: 358 return button_context_settings_right_is_inc; 359 360 case CONTEXT_SETTINGS_COLOURCHOOSER: 361 return button_context_colorchooser; 362 case CONTEXT_SETTINGS_EQ: 363 return button_context_eq; 364 365 case CONTEXT_SETTINGS_TIME: 366 return button_context_time; 367 368 case CONTEXT_YESNOSCREEN: 369 return button_context_yesno; 370 case CONTEXT_BOOKMARKSCREEN: 371 return button_context_bmark; 372 case CONTEXT_QUICKSCREEN: 373 return button_context_quickscreen; 374 case CONTEXT_PITCHSCREEN: 375 return button_context_pitchscreen; 376 case CONTEXT_KEYBOARD: 377 return button_context_keyboard; 378 } 379 return button_context_standard; 380}