/**
* @brief This function provides textual representation of the value carried by UI element
- * which is expressed in percents.
+ * formatted accordingly to the "value_format" ATSPI attribute. Supported formats are:
+ * "percent" (default), "number" and "text".
*/
-char* reading_composer_percent_value_description_get(ReadingComposerData *data);
+char* reading_composer_value_text_get(ReadingComposerData *data);
#endif
#define ESAL(buf, txt)\
eina_strbuf_append_length(buf, txt, strlen(txt))
+#define ESAF(buf, ...)\
+ SUPPRESS_FORMAT_ERROR(eina_strbuf_append_printf(buf, __VA_ARGS__))
+
#define SCREEN_READER_SAFE_FREE(_h, _fn) do { _fn((void*)_h); _h = NULL; } while (0)
#define MAX_ACCURACY 3
*/
Eina_Bool cycle_detection_check_if_in_cycle(cycle_detection_data *data, const void *key);
+typedef enum {
+ ACCESSIBLE_VALUE_FORMAT_PERCENT = 1 << 0,
+ ACCESSIBLE_VALUE_FORMAT_NUMBER = 1 << 1,
+ ACCESSIBLE_VALUE_FORMAT_TEXT = 1 << 2
+} Value_Format;
+Value_Format get_value_format(GHashTable *hash_table);
+
enum Reading_Info {
ACCESSIBLE_READING_INFO_TYPE_NAME = 1 << 0,
ACCESSIBLE_READING_INFO_TYPE_ROLE = 1 << 1,
char* text_to_speak = NULL;
ReadingComposerData *rcd = reading_composer_data_get(obj);
- text_to_speak = reading_composer_percent_value_description_get(rcd);
+ text_to_speak = reading_composer_value_text_get(rcd);
reading_composer_data_free(rcd);
tw_speak(text_to_speak, EINA_TRUE);
free(text_to_speak);
DEBUG("VALUE:%f", rm->value);
DEBUG("VALUE MAX:%f", rm->upper);
DEBUG("VALUE MIN:%f", rm->lower);
+ DEBUG("VALUE TEXT:%s", rm->value_text);
DEBUG("STATES:");
DEBUG("------------------------");
DEBUG("END");
SUPPRESS_FORMAT_ERROR(eina_strbuf_append_printf(buf, _("IDS_GCTS_OPT_P1SS_PERCENT_TTS"), buf_percent));
}
-TIZEN_PROD_STATIC void add_slider_state(Eina_Strbuf *buf, AtspiAccessibleReadingMaterial *rm)
+TIZEN_PROD_STATIC void add_value_text(Eina_Strbuf *buf, AtspiAccessibleReadingMaterial *rm)
{
- add_percent_value_string(buf, get_percent_value_from_rm(rm));
+ Value_Format value_format = get_value_format(rm->attributes);
+ switch (value_format) {
+ default:
+ case ACCESSIBLE_VALUE_FORMAT_PERCENT:
+ add_percent_value_string(buf, get_percent_value_from_rm(rm));
+ break;
+ case ACCESSIBLE_VALUE_FORMAT_NUMBER:
+ ESAF(buf, "%g", rm->value);
+ break;
+ case ACCESSIBLE_VALUE_FORMAT_TEXT:
+ ESAL(buf, rm->value_text);
+ }
}
TIZEN_PROD_STATIC
g_free(rm->text_interface_name);
g_free(rm->localized_role_name);
g_free(rm->description);
+ g_free(rm->value_text);
g_free(rm);
}
break;
}
case ATSPI_ROLE_SLIDER: {
- add_slider_state(buf, rm);
+ add_value_text(buf, rm);
break;
}
default:
return reading_composer_extended_description_get_recursive(data, 0, 1);
}
-char* reading_composer_percent_value_description_get(ReadingComposerData *data) {
- Eina_Strbuf *buf = NULL;
- AtspiAccessibleReadingMaterial *rm;
+char* reading_composer_value_text_get(ReadingComposerData *data)
+{
+ AtspiAccessibleReadingMaterial *rm = data;
if (!data)
return NULL;
- rm = data;
-
- buf = eina_strbuf_new();
- if (!buf) {
- ERROR("CRITICAL: Memory allocation failed!");
- return NULL;
- }
-
- add_percent_value_string(buf, get_percent_value_from_rm(rm));
+ Eina_Strbuf *buf = eina_strbuf_new();
+ add_value_text(buf, rm);
- char *percent_value_description = eina_strbuf_string_steal(buf);
- eina_strbuf_free(buf);
- return percent_value_description;
+ return eina_strbuf_release(buf);
}
ReadingComposerData* reading_composer_data_get(AtspiAccessible *obj)
static char *spi_on_value_changed_get_text(SpiData *spi, AtspiEvent *event)
{
char *text_to_read = NULL;
-
spi->currently_focused = event->source;
-
- AtspiValue *value_interface = atspi_accessible_get_value_iface(spi->currently_focused);
-
- if (value_interface) {
- char *name = atspi_accessible_get_name(spi->currently_focused, NULL);
- DEBUG("VALUE CHANGED WIDGET: %s", name);
- g_free(name);
-
- double current_temp_value = (double)atspi_value_get_current_value(value_interface, NULL);
- //FIXME : This IDS value is not supported.
- /*if (abs(current_temp_value - atspi_value_get_maximum_value(value_interface, NULL)) < EPS) {
- DEBUG("MAX VALUE REACHED");
- if (asprintf(&text_to_read, "%.2f %s", current_temp_value, _("IDS_REACHED_MAX_VAL")) < 0) {
- ERROR(MEMORY_ERROR);
- g_object_unref(value_interface);
- return NULL;
- }
- } else if (abs(current_temp_value - atspi_value_get_minimum_value(value_interface, NULL)) < EPS) {
- DEBUG("MIN VALUE REACHED");
- if (asprintf(&text_to_read, "%.2f %s", current_temp_value, _("IDS_REACHED_MIN_VAL")) < 0) {
- ERROR(MEMORY_ERROR);
- g_object_unref(value_interface);
- return NULL;
- }
- } else {*/
- if (asprintf(&text_to_read, "%.2f", current_temp_value) < 0) {
- ERROR(MEMORY_ERROR);
- g_object_unref(value_interface);
- return NULL;
- }
- //}
- g_object_unref(value_interface);
- }
-
+ ReadingComposerData *rcd = reading_composer_data_get(spi->currently_focused);
+ text_to_read = reading_composer_value_text_get(rcd);
+ reading_composer_data_free(rcd);
return text_to_read;
}
DEBUG("END");
}
-
return EINA_FALSE;
}
+Value_Format get_value_format(GHashTable *hash_table)
+{
+ Value_Format value_format = ACCESSIBLE_VALUE_FORMAT_PERCENT;
+ if (hash_table) {
+ const gchar *value_format_str = NULL;
+ value_format_str = g_hash_table_lookup(hash_table, "value_format");
+ if (value_format_str) {
+ if (!g_strcmp0(value_format_str, "number")) {
+ value_format = ACCESSIBLE_VALUE_FORMAT_NUMBER;
+ } else if (!g_strcmp0(value_format_str, "text")) {
+ value_format = ACCESSIBLE_VALUE_FORMAT_TEXT;
+ }
+ }
+ }
+ return value_format;
+}
+
unsigned short int get_object_reading_info_type_attributes(AtspiAccessible *obj)
{
unsigned short int attribute = 0;