elementary - added elm_object_item_translatable_part_text_set() elm_object_item_trans...
authorChunEon Park <hermet@hermet.pe.kr>
Tue, 12 Feb 2013 10:38:33 +0000 (10:38 +0000)
committerChunEon Park <hermet@hermet.pe.kr>
Tue, 12 Feb 2013 10:38:33 +0000 (10:38 +0000)
SVN revision: 83852

legacy/elementary/ChangeLog
legacy/elementary/NEWS
legacy/elementary/src/lib/elm_main.c
legacy/elementary/src/lib/elm_object_item.h
legacy/elementary/src/lib/elm_widget.c
legacy/elementary/src/lib/elm_widget.h

index 02955fa..0a69ebc 100644 (file)
 2013-02-13  ChunEon Park (Hermet)
 
         * Ctxpopup will be dismissed when elm language is changed.
+
+2013-02-13  ChunEon Park (Hermet)
+
+        * added APIs - elm_object_item_translatable_part_text_set(), elm_object_item_translatable_part_text_get().
index 3a48153..d5f1098 100644 (file)
@@ -34,6 +34,7 @@ Additions:
    * Add elm_index smart callback - "language,changed".
    * Add smart callback signals of a scroller. "vbar,drag", "vbar,press", "vbar,unpress", "hbar,drag", "hbar,press", "hbar,unpress".
    * Add elm_glview, elm_gengrid smart callback - "language,changed".
+   * Add APIs - elm_object_item_translatable_part_text_set(), elm_object_item_translatable_part_text_get().
 
 Improvements:
 
index 05492a7..1e5d02f 100644 (file)
@@ -1517,6 +1517,19 @@ elm_object_item_part_text_get(const Elm_Object_Item *it, const char *part)
 }
 
 EAPI void
+elm_object_item_domain_translatable_part_text_set(Elm_Object_Item *it, const char *part, const char *domain, const char *text)
+{
+   _elm_widget_item_domain_translatable_part_text_set((Elm_Widget_Item *)it, part, domain, text);
+}
+
+EAPI const char *
+elm_object_item_translatable_part_text_get(const Elm_Object_Item *it, const char *part)
+{
+   return _elm_widget_item_translatable_part_text_get((Elm_Widget_Item *)it, part);
+}
+
+
+EAPI void
 elm_object_access_info_set(Evas_Object *obj, const char *txt)
 {
    elm_widget_access_info_set(obj, txt);
index 43491d1..a01648a 100644 (file)
@@ -99,6 +99,55 @@ EAPI const char                  *elm_object_item_part_text_get(const Elm_Object
 #define elm_object_item_text_get(it) elm_object_item_part_text_get((it), NULL)
 
 /**
+ * Set the text for an object item's part, marking it as translatable.
+ *
+ * The string to set as @p text must be the original one. Do not pass the
+ * return of @c gettext() here. Elementary will translate the string
+ * internally and set it on the object item using
+ * elm_object_item_part_text_set(), also storing the original string so that it
+ * can be automatically translated when the language is changed with
+ * elm_language_set(). The @p domain will be stored along to find the
+ * translation in the correct catalog. It can be NULL, in which case it will use
+ * whatever domain was set by the application with @c textdomain(). This is
+ * useful in case you are building a library on top of Elementary that will have
+ * its own translatable strings, that should not be mixed with those of programs
+ * using the library.
+ *
+ * @param it The object item containing the text part
+ * @param part The name of the part to set
+ * @param domain The translation domain to use
+ * @param text The original, non-translated text to set
+ *
+ * @ingroup General
+ * @since 1.8
+ */
+EAPI void      elm_object_item_domain_translatable_part_text_set(Elm_Object_Item *it, const char *part, const char *domain, const char *text);
+
+#define elm_object_item_domain_translatable_text_set(it, domain, text) elm_object_item_domain_translatable_part_text_set((it), NULL, (domain), (text))
+
+#define elm_object_item_translatable_text_set(it, text) elm_object_item_domain_translatable_part_text_set((it), NULL, NULL, (text))
+
+/**
+ * Gets the original string set as translatable for an object item.
+ *
+ * When setting translated strings, the function elm_object_item_part_text_get()
+ * will return the translation returned by @c gettext(). To get the original
+ * string use this function.
+ *
+ * @param it The object item.
+ * @param part The name of the part that was set
+ *
+ * @return The original, untranslated string
+ *
+ * @ingroup General
+ * @since 1.8
+ */
+EAPI const char *elm_object_item_translatable_part_text_get(const Elm_Object_Item *it, const char *part);
+
+#define elm_object_item_translatable_text_get(it) elm_object_item_translatable_part_text_get((it), NULL)
+
+
+/**
  * Set the text to read out when in accessibility mode
  *
  * @param it The object item which is to be described
index f3b2012..bbae69c 100644 (file)
@@ -4484,6 +4484,8 @@ _elm_widget_item_new(Evas_Object *widget,
 EAPI void
 _elm_widget_item_free(Elm_Widget_Item *item)
 {
+   Elm_Translate_String_Data *ts;
+
    ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
 
    if (item->del_func)
@@ -4495,6 +4497,14 @@ _elm_widget_item_free(Elm_Widget_Item *item)
    if (item->access_info)
      eina_stringshare_del(item->access_info);
 
+   EINA_LIST_FREE (item->translate_strings, ts)
+     {
+        eina_stringshare_del(ts->id);
+        eina_stringshare_del(ts->domain);
+        eina_stringshare_del(ts->string);
+        free(ts);
+     }
+
    EINA_MAGIC_SET(item, EINA_MAGIC_NONE);
    free(item);
 }
@@ -4684,6 +4694,86 @@ _elm_widget_item_disable_hook_set(Elm_Widget_Item *item,
    item->disable_func = func;
 }
 
+EAPI void
+_elm_widget_item_domain_translatable_part_text_set(Elm_Widget_Item *item,
+                                                   const char *part,
+                                                   const char *domain,
+                                                   const char *label)
+{
+   const char *str;
+   Eina_List *l;
+   Elm_Translate_String_Data *ts = NULL;
+
+   ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+
+   str = eina_stringshare_add(part);
+   EINA_LIST_FOREACH(item->translate_strings, l, ts)
+     {
+        if (ts->id == str) break;
+        else ts = NULL;
+     }
+
+   if (!ts && !label)
+     eina_stringshare_del(str);
+   else if (!ts)
+     {
+        ts = malloc(sizeof(Elm_Translate_String_Data));
+        if (!ts) return;
+
+        ts->id = str;
+        ts->domain = eina_stringshare_add(domain);
+        ts->string = eina_stringshare_add(label);
+        item->translate_strings = eina_list_append(item->translate_strings, ts);
+     }
+   else
+     {
+        if (label)
+          {
+             eina_stringshare_replace(&ts->domain, domain);
+             eina_stringshare_replace(&ts->string, label);
+          }
+        else
+          {
+             item->translate_strings = eina_list_remove_list(
+                item->translate_strings, l);
+             eina_stringshare_del(ts->id);
+             eina_stringshare_del(ts->domain);
+             eina_stringshare_del(ts->string);
+             free(ts);
+          }
+        eina_stringshare_del(str);
+     }
+
+#ifdef HAVE_GETTEXT
+   if (label && label[0])
+     label = dgettext(domain, label);
+#endif
+   _elm_widget_item_part_text_set(item, part, label);
+}
+
+EAPI const char *
+_elm_widget_item_translatable_part_text_get(const Elm_Widget_Item *item,
+                                            const char *part)
+{
+   const char *str;
+   Eina_List *l;
+   Elm_Translate_String_Data *ts;
+   const char *ret = NULL;
+
+   ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, NULL);
+
+   str = eina_stringshare_add(part);
+   EINA_LIST_FOREACH(item->translate_strings, l, ts)
+     if (ts->id == str)
+       {
+          ret = ts->string;
+          break;
+       }
+   eina_stringshare_del(str);
+
+   return ret;
+}
+
 typedef struct _Elm_Widget_Item_Tooltip Elm_Widget_Item_Tooltip;
 
 struct _Elm_Widget_Item_Tooltip
index ed335e6..ff62222 100644 (file)
@@ -555,6 +555,7 @@ struct _Elm_Widget_Item
    Evas_Object                   *access_obj;
    const char                    *access_info;
    Eina_List                     *access_order;
+   Eina_List                     *translate_strings;
 
    Eina_Bool                      disabled : 1;
 };
@@ -730,6 +731,8 @@ EAPI void             _elm_widget_item_disabled_set(Elm_Widget_Item *item, Eina_
 EAPI Eina_Bool        _elm_widget_item_disabled_get(const Elm_Widget_Item *item);
 EAPI void             _elm_widget_item_disable_hook_set(Elm_Widget_Item *item, Elm_Widget_Disable_Cb func);
 EAPI void             _elm_widget_item_del_pre_hook_set(Elm_Widget_Item *item, Elm_Widget_Del_Pre_Cb func);
+EAPI void             _elm_widget_item_domain_translatable_part_text_set(Elm_Widget_Item *item, const char *part, const char *domain, const char *label);
+EAPI const char *     _elm_widget_item_translatable_part_text_get(const Elm_Widget_Item *item, const char *part);
 
 /**
  * Function to operate on a given widget's scrollabe children when necessary.