diff options
Diffstat (limited to 'apps/gui/skin_engine/skin_parser.c')
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 75 |
1 files changed, 52 insertions, 23 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 25734954e5..0eb966198d 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -937,7 +937,8 @@ static const struct touchaction touchactions[] = { | |||
937 | {"mute", ACTION_TOUCH_MUTE }, | 937 | {"mute", ACTION_TOUCH_MUTE }, |
938 | 938 | ||
939 | /* generic settings changers */ | 939 | /* generic settings changers */ |
940 | {"setting_inc", ACTION_SETTINGS_INC}, {"setting_dec", ACTION_SETTINGS_DEC}, | 940 | {"setting_inc", ACTION_SETTINGS_INC}, {"setting_dec", ACTION_SETTINGS_DEC}, |
941 | {"setting_set", ACTION_SETTINGS_SET}, | ||
941 | 942 | ||
942 | /* WPS specific actions */ | 943 | /* WPS specific actions */ |
943 | {"browse", ACTION_WPS_BROWSE }, | 944 | {"browse", ACTION_WPS_BROWSE }, |
@@ -952,6 +953,7 @@ static const struct touchaction touchactions[] = { | |||
952 | {"presets", ACTION_FM_PRESET}, | 953 | {"presets", ACTION_FM_PRESET}, |
953 | #endif | 954 | #endif |
954 | }; | 955 | }; |
956 | bool cfg_string_to_int(int setting_id, int* out, const char* str); | ||
955 | 957 | ||
956 | static int parse_touchregion(struct skin_element *element, | 958 | static int parse_touchregion(struct skin_element *element, |
957 | struct wps_token *token, | 959 | struct wps_token *token, |
@@ -966,26 +968,9 @@ static int parse_touchregion(struct skin_element *element, | |||
966 | const char vol_string[] = "volume"; | 968 | const char vol_string[] = "volume"; |
967 | char temp[20]; | 969 | char temp[20]; |
968 | 970 | ||
969 | /* format: %T(x,y,width,height,action) | 971 | /* format: %T([label,], x,y,width,height,action[, ...]) |
970 | * if action starts with & the area must be held to happen | 972 | * if action starts with & the area must be held to happen |
971 | * action is one of: | 973 | */ |
972 | * play - play/pause playback | ||
973 | * stop - stop playback, exit the wps | ||
974 | * prev - prev track | ||
975 | * next - next track | ||
976 | * ffwd - seek forward | ||
977 | * rwd - seek backwards | ||
978 | * menu - go back to the main menu | ||
979 | * browse - go back to the file/db browser | ||
980 | * shuffle - toggle shuffle mode | ||
981 | * repmode - cycle the repeat mode | ||
982 | * quickscreen - go into the quickscreen | ||
983 | * contextmenu - open the context menu | ||
984 | * playlist - go into the playlist | ||
985 | * pitch - go into the pitchscreen | ||
986 | * volup - increase volume by one step | ||
987 | * voldown - decrease volume by one step | ||
988 | */ | ||
989 | 974 | ||
990 | 975 | ||
991 | region = (struct touchregion*)skin_buffer_alloc(sizeof(struct touchregion)); | 976 | region = (struct touchregion*)skin_buffer_alloc(sizeof(struct touchregion)); |
@@ -1018,7 +1003,7 @@ static int parse_touchregion(struct skin_element *element, | |||
1018 | region->wvp = curr_vp; | 1003 | region->wvp = curr_vp; |
1019 | region->armed = false; | 1004 | region->armed = false; |
1020 | region->reverse_bar = false; | 1005 | region->reverse_bar = false; |
1021 | region->data = NULL; | 1006 | region->value = 0; |
1022 | region->last_press = 0xffff; | 1007 | region->last_press = 0xffff; |
1023 | action = element->params[p++].data.text; | 1008 | action = element->params[p++].data.text; |
1024 | 1009 | ||
@@ -1055,7 +1040,8 @@ static int parse_touchregion(struct skin_element *element, | |||
1055 | { | 1040 | { |
1056 | region->action = touchactions[i].action; | 1041 | region->action = touchactions[i].action; |
1057 | if (region->action == ACTION_SETTINGS_INC || | 1042 | if (region->action == ACTION_SETTINGS_INC || |
1058 | region->action == ACTION_SETTINGS_DEC) | 1043 | region->action == ACTION_SETTINGS_DEC || |
1044 | region->action == ACTION_SETTINGS_SET) | ||
1059 | { | 1045 | { |
1060 | if (element->params_count < p+1) | 1046 | if (element->params_count < p+1) |
1061 | { | 1047 | { |
@@ -1072,7 +1058,50 @@ static int parse_touchregion(struct skin_element *element, | |||
1072 | break; | 1058 | break; |
1073 | if (j==nb_settings) | 1059 | if (j==nb_settings) |
1074 | return WPS_ERROR_INVALID_PARAM; | 1060 | return WPS_ERROR_INVALID_PARAM; |
1075 | region->data = (void*)&settings[j]; | 1061 | region->setting_data.setting = (void*)&settings[j]; |
1062 | if (region->action == ACTION_SETTINGS_SET) | ||
1063 | { | ||
1064 | char* text; | ||
1065 | int temp; | ||
1066 | struct touchsetting *setting = | ||
1067 | ®ion->setting_data; | ||
1068 | if (element->params_count < p+2) | ||
1069 | return WPS_ERROR_INVALID_PARAM; | ||
1070 | text = element->params[p+1].data.text; | ||
1071 | switch (settings[j].flags&F_T_MASK) | ||
1072 | { | ||
1073 | case F_T_CUSTOM: | ||
1074 | setting->value.text = text; | ||
1075 | break; | ||
1076 | case F_T_INT: | ||
1077 | case F_T_UINT: | ||
1078 | if (settings[j].cfg_vals == NULL) | ||
1079 | { | ||
1080 | setting->value.number = atoi(text); | ||
1081 | } | ||
1082 | else if (cfg_string_to_int(j, &temp, text)) | ||
1083 | { | ||
1084 | if (settings[j].flags&F_TABLE_SETTING) | ||
1085 | setting->value.number = | ||
1086 | settings[j].table_setting->values[temp]; | ||
1087 | else | ||
1088 | setting->value.number = temp; | ||
1089 | } | ||
1090 | else | ||
1091 | return WPS_ERROR_INVALID_PARAM; | ||
1092 | break; | ||
1093 | case F_T_BOOL: | ||
1094 | if (cfg_string_to_int(j, &temp, text)) | ||
1095 | { | ||
1096 | setting->value.number = temp; | ||
1097 | } | ||
1098 | else | ||
1099 | return WPS_ERROR_INVALID_PARAM; | ||
1100 | break; | ||
1101 | default: | ||
1102 | return WPS_ERROR_INVALID_PARAM; | ||
1103 | } | ||
1104 | } | ||
1076 | } | 1105 | } |
1077 | } | 1106 | } |
1078 | break; | 1107 | break; |