Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
- index 2c76616..4773c0e 100644
- --- a/apps/gui/skin_engine/skin_parser.c
- +++ b/apps/gui/skin_engine/skin_parser.c
- @@ -1330,6 +1330,9 @@ static int skin_element_callback(struct skin_element* element, void* data)
- case SKIN_TOKEN_ALIGN_LANGDIRECTION:
- follow_lang_direction = 2;
- break;
- + case SKIN_TOKEN_VOICE:
- + token->value.data = current_tick;
- + break;
- case SKIN_TOKEN_LOGICAL_IF:
- function = parse_logical_if;
- break;
- diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
- index 0c18848..a602725 100644
- --- a/apps/gui/skin_engine/skin_render.c
- +++ b/apps/gui/skin_engine/skin_render.c
- @@ -46,6 +46,8 @@
- #include "playlist.h"
- #include "root_menu.h"
- #include "misc.h"
- +#include "talk.h"
- +#include "lang.h"
- #define MAX_LINE 1024
- @@ -78,6 +80,44 @@ static void skin_render_playlistviewer(struct playlistviewer* viewer,
- unsigned long refresh_type);
- #endif
- +static void skin_do_talking_tags(struct gui_wps *gwps, struct skin_draw_info *info,
- + struct skin_element *element)
- +{
- + int i, val;
- + char buf[128];
- + const char* out;
- + struct wps_token *token;
- + for (i=0; i<element->params_count; i++)
- + {
- + struct skin_tag_parameter *param = &element->params[i];
- + switch (param->type)
- + {
- + case DEFAULT:
- + if (i==0)
- + talk_shutup();
- + else
- + talk_id(VOICE_PAUSE, true);
- + break;
- + case STRING:
- + talk_spell(param->data.text, true);
- + break;
- + case CODE:
- + val = TOKEN_VALUE_ONLY;
- + token = param->data.code->data;
- + out = get_token_value(gwps, token, 0,
- + buf, sizeof buf, &val);
- + if (val != -1 || token->type == SKIN_TOKEN_VOLUME)
- + talk_number(val, true);
- + else
- + talk_spell(out, true);
- + break;
- + default:
- + break;
- + }
- + }
- +
- +}
- +
- static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info,
- struct skin_element *element, struct viewport* vp)
- {
- @@ -89,6 +129,14 @@ static bool do_non_text_tags(struct gui_wps *gwps, struct skin_draw_info *info,
- bool do_refresh = (element->tag->flags & info->refresh_type) > 0;
- switch (token->type)
- {
- + case SKIN_TOKEN_VOICE:
- + if (TIME_AFTER(current_tick, token->value.data+HZ))
- + {
- + printf("%d %d\n", current_tick, token->value.data);
- + skin_do_talking_tags(gwps, info, element);
- + }
- + token->value.data = current_tick;
- + break;
- #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1))
- case SKIN_TOKEN_VIEWPORT_FGCOLOUR:
- {
- diff --git a/lib/skin_parser/tag_table.c b/lib/skin_parser/tag_table.c
- index 9c0b51d..4418ff1 100644
- --- a/lib/skin_parser/tag_table.c
- +++ b/lib/skin_parser/tag_table.c
- @@ -191,6 +191,9 @@ static const struct tag_info legal_tags[] =
- { SKIN_TOKEN_UIVIEWPORT_LOAD, "Vi" , "sIIiii", 0 },
- { SKIN_TOKEN_VIEWPORT_LOAD, "V" , "IIiii", 0 },
- + { SKIN_TOKEN_VOICE, "Vx", "|[sT][sT][sT][sT][sT][sT][sT][sT]",
- + SKIN_REFRESH_STATIC|NOBREAK },
- +
- { SKIN_TOKEN_IMAGE_BACKDROP, "X" , "f", SKIN_REFRESH_STATIC|NOBREAK },
- { SKIN_TOKEN_SETTING, "St" , "S", SKIN_REFRESH_DYNAMIC },
- diff --git a/lib/skin_parser/tag_table.h b/lib/skin_parser/tag_table.h
- index f16709d..670ca98 100644
- --- a/lib/skin_parser/tag_table.h
- +++ b/lib/skin_parser/tag_table.h
- @@ -210,6 +210,8 @@ enum skin_token_type {
- SKIN_TOKEN_LOAD_FONT,
- + SKIN_TOKEN_VOICE,
- +
- /* buttons */
- SKIN_TOKEN_BUTTON_VOLUME,
- SKIN_TOKEN_LASTTOUCH,
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement