support "guide text" for entries. trivial internal + theme changes :)
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 9 Apr 2012 05:25:27 +0000 (05:25 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 9 Apr 2012 05:25:27 +0000 (05:25 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@69961 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

data/themes/widgets/entry.edc
src/bin/test_entry.c
src/lib/elm_entry.c

index 8ab0268..6fbee9d 100644 (file)
@@ -718,11 +718,34 @@ group { name: "elm/entry/base/default";
          tag:  "preedit" "+ underline=on underline_color=#000";
          tag:  "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF";
       }
+      style { name: "entry_textblock_guide_style";
+         base: "font=Sans font_size=10 color=#00000040 wrap=word text_class=entry left_margin=4 right_margin=4 ellipsis=0.0";
+         tag:  "em" "+ font_style=Oblique";
+         tag:  "hilight" "+ font_weight=Bold";
+      }
    }
    data {
         //         item: context_menu_orientation "horizontal";
    }
    parts {
+      part { name: "elm.guide";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text {
+               style: "entry_textblock_guide_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
       part { name: "elm.text";
          type: TEXTBLOCK;
          mouse_events: 1;
@@ -773,6 +796,18 @@ group { name: "elm/entry/base/default";
          action: STATE_SET "default" 0.0;
          target: "elm.text";
       }
+      program { name: "gdisable";
+         signal: "elm,guide,disabled";
+         source: "elm";
+         action: STATE_SET "hidden" 0.0;
+         target: "elm.guide";
+      }
+      program { name: "genable";
+         signal: "elm,guide,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.guide";
+      }
    }
 }
 
@@ -796,8 +831,31 @@ group { name: "elm/entry/base-mixedwrap/default";
          tag:  "preedit" "+ underline=on underline_color=#000";
          tag:  "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF";
       }
+      style { name: "entry_textblock_guide_style_mixedwrap";
+         base: "font=Sans font_size=10 color=#00000040 wrap=mixed text_class=entry left_margin=4 right_margin=4 ellipsis=0.0";
+         tag:  "em" "+ font_style=Oblique";
+         tag:  "hilight" "+ font_weight=Bold";
+      }
    }
    parts {
+      part { name: "elm.guide";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text {
+               style: "entry_textblock_guide_style_mixedwrap";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
       part { name: "elm.text";
          description { state: "default" 0.0;
             fixed: 1 0;
@@ -838,8 +896,31 @@ group { name: "elm/entry/base-charwrap/default";
          tag:  "preedit" "+ underline=on underline_color=#000";
          tag:  "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF";
       }
+      style { name: "entry_textblock_guide_style_charwrap";
+         base: "font=Sans font_size=10 color=#00000040 wrap=char text_class=entry left_margin=4 right_margin=4 ellipsis=0.0";
+         tag:  "em" "+ font_style=Oblique";
+         tag:  "hilight" "+ font_weight=Bold";
+      }
    }
    parts {
+      part { name: "elm.guide";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text {
+               style: "entry_textblock_guide_style_charwrap";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
       part { name: "elm.text";
          description { state: "default" 0.0;
             fixed: 1 0;
@@ -863,6 +944,24 @@ group { name: "elm/entry/base-charwrap/default";
 group { name: "elm/entry/base-nowrap/default";
    inherit: "elm/entry/base/default";
    parts {
+      part { name: "elm.guide";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text {
+               style: "entry_textblock_guide_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
       part { name: "elm.text";
          description { state: "default" 0.0;
             text {
@@ -902,8 +1001,31 @@ group { name: "elm/entry/base-single/default";
          tag:  "preedit" "+ underline=on underline_color=#000";
          tag:  "preedit_sel" "+ backing=on backing_color=#000 color=#FFFFFF";
       }
+      style { name: "entry_single_textblock_guide_style";
+         base: "font=Sans font_size=10 color=#00000080 wrap=none text_class=entry left_margin=4 right_margin=4 ellipsis=0.0";
+         tag:  "em" "+ font_style=Oblique";
+         tag:  "hilight" "+ font_weight=Bold";
+      }
    }
    parts {
+      part { name: "elm.guide";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text {
+               style: "entry_single_textblock_guide_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
       part { name: "elm.text";
          multiline: 0;
          description { state: "default" 0.0;
@@ -1057,6 +1179,24 @@ group { name: "elm/entry/base-nowrap-noedit/default";
 group { name: "elm/entry/base-password/default";
    inherit: "elm/entry/base/default";
    parts {
+      part { name: "elm.guide";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.text";
+            rel2.to: "elm.text";
+            text {
+               style: "entry_single_textblock_guide_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
       part { name: "elm.text";
          entry_mode: PASSWORD;
          multiline: 0;
index f016179..3d786c6 100644 (file)
@@ -2039,13 +2039,13 @@ test_entry8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    bt = elm_icon_add(win);
    elm_icon_standard_set(bt, "home");
    evas_object_size_hint_min_set(bt, 48, 48);
-   evas_object_color_set(bt, 255, 0, 0, 128);
+   evas_object_color_set(bt, 128, 0, 0, 128);
    evas_object_show(bt);
    elm_object_part_content_set(en3, "icon", bt);
 
    bt = elm_icon_add(win);
    elm_icon_standard_set(bt, "delete");
-   evas_object_color_set(bt, 255, 0, 0, 128);
+   evas_object_color_set(bt, 128, 0, 0, 128);
    evas_object_size_hint_min_set(bt, 48, 48);
    evas_object_show(bt);
    elm_object_part_content_set(en3, "end", bt);
@@ -2074,6 +2074,7 @@ test_entry8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    evas_object_show(rect);
 
    en4 = elm_entry_add(win);
+   elm_object_part_text_set(en4, "guide", "Type in here");
    elm_entry_scrollable_set(en4, EINA_TRUE);
    elm_entry_bounce_set(en4, EINA_TRUE, EINA_TRUE);
    elm_entry_autocapital_type_set(en4, EINA_TRUE);
index 6affc3b..141cd67 100644 (file)
@@ -81,6 +81,7 @@ struct _Widget_Data
    Eina_Bool prediction_allow : 1;
    Eina_Bool input_panel_return_key_disabled : 1;
    Eina_Bool autoreturnkey : 1;
+   Eina_Bool havetext : 1;
    Elm_Cnp_Mode cnp_mode : 2;
 };
 
@@ -379,6 +380,18 @@ _delay_write(void *data)
    return ECORE_CALLBACK_CANCEL;
 }
 
+static void
+_elm_entry_update_guide(Evas_Object *obj, Eina_Bool havetext)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if ((havetext) && (!wd->havetext))
+     edje_object_signal_emit(wd->ent, "elm,guide,disabled", "elm");
+   else if ((!havetext) && (wd->havetext))
+     edje_object_signal_emit(wd->ent, "elm,guide,enabled", "elm");
+   wd->havetext = havetext;
+}
+
 static Elm_Entry_Markup_Filter *
 _filter_new(Elm_Entry_Filter_Cb func, void *data)
 {
@@ -588,6 +601,8 @@ _theme_hook(Evas_Object *obj)
           elm_widget_highlight_in_theme_set(obj, EINA_FALSE);
      }
    _sizing_eval(obj);
+   wd->havetext = !wd->havetext;
+   _elm_entry_update_guide(obj, !wd->havetext);
    evas_event_thaw(evas_object_evas_get(obj));
    evas_event_thaw_eval(evas_object_evas_get(obj));
 }
@@ -1555,6 +1570,7 @@ _entry_changed_common_handling(void *data, const char *event)
 {
    Widget_Data *wd = elm_widget_data_get(data);
    Evas_Coord minh;
+   const char *text;
    if (!wd) return;
    evas_event_freeze(evas_object_evas_get(data));
    wd->changed = EINA_TRUE;
@@ -1579,6 +1595,14 @@ _entry_changed_common_handling(void *data, const char *event)
     * any access to wd after this could be invalid */
    evas_object_smart_callback_call(data, event, NULL);
    _check_enable_return_key(data);
+   text = edje_object_part_text_get(wd->ent, "elm.text");
+   if (text)
+     {
+        if (text[0])
+          _elm_entry_update_guide(data, EINA_TRUE);
+        else
+          _elm_entry_update_guide(data, EINA_FALSE);
+     }
 }
 
 static void
@@ -2181,6 +2205,8 @@ _text_append_idler(void *data)
    evas_event_thaw(evas_object_evas_get(obj));
    evas_event_thaw_eval(evas_object_evas_get(obj));
 
+   _elm_entry_update_guide(obj, EINA_TRUE);
+   
    /* If there's still more to go, renew the idler, else, cleanup */
    if (wd->append_text_position < wd->append_text_len)
      {
@@ -2277,9 +2303,14 @@ _elm_entry_text_set(Evas_Object *obj, const char *item, const char *entry)
    if (!wd) return;
    evas_event_freeze(evas_object_evas_get(obj));
    if (!entry) entry = "";
-   if (item && strcmp(item, "default"))
+   if (item)
      {
-        edje_object_part_text_set(wd->ent, item, entry);
+        if (!strcmp(item, "guide"))
+          edje_object_part_text_set(wd->ent, "elm.guide", entry);
+        else
+          edje_object_part_text_set(wd->ent, item, entry);
+        evas_event_thaw(evas_object_evas_get(obj));
+        evas_event_thaw_eval(evas_object_evas_get(obj));
         return;
      }
 
@@ -2317,6 +2348,10 @@ _elm_entry_text_set(Evas_Object *obj, const char *item, const char *entry)
      {
         edje_object_part_text_set(wd->ent, "elm.text", entry);
      }
+   if ((entry) && (entry[0]))
+     _elm_entry_update_guide(obj, EINA_TRUE);
+   else
+     _elm_entry_update_guide(obj, EINA_FALSE);
    evas_event_thaw(evas_object_evas_get(obj));
    evas_event_thaw_eval(evas_object_evas_get(obj));
 }