From 1da5608d7b0a1902a2f2a10c27913c72e8eef27e Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 16 Nov 2012 09:08:14 +0000 Subject: [PATCH] entry - read only mode (noedit) should be supported and use it from file preview too... SVN revision: 79368 --- data/themes/edc/entry.edc | 6 ++ src/bin/e_entry.c | 113 +++++++++++++++++++++++++-------- src/bin/e_entry.h | 2 + src/bin/e_widget_entry.c | 4 +- src/bin/e_widget_filepreview.c | 11 ---- 5 files changed, 97 insertions(+), 39 deletions(-) diff --git a/data/themes/edc/entry.edc b/data/themes/edc/entry.edc index 9c894dbbf..7670382d4 100644 --- a/data/themes/edc/entry.edc +++ b/data/themes/edc/entry.edc @@ -100,6 +100,12 @@ group { name: "e/widgets/entry/text"; action: STATE_SET "default" 0.0; target: "e.text.text"; } +// program { +// signal: "e,state,noedit"; source: "e"; +// } +// program { +// signal: "e,state,edit"; source: "e"; +// } } } diff --git a/src/bin/e_entry.c b/src/bin/e_entry.c index 18caed00f..20893d014 100644 --- a/src/bin/e_entry.c +++ b/src/bin/e_entry.c @@ -11,14 +11,15 @@ struct _E_Entry_Smart_Data E_Menu *popup; Ecore_Event_Handler *selection_handler; - int enabled; - int focused; int min_width; int height; Evas_Coord theme_width; Evas_Coord theme_height; int preedit_start_pos; int preedit_end_pos; + Eina_Bool enabled : 1; + Eina_Bool noedit : 1; + Eina_Bool focused : 1; Eina_Bool password_mode : 1; Eina_Bool have_preedit : 1; }; @@ -241,7 +242,7 @@ e_entry_focus(Evas_Object *entry) edje_object_signal_emit(sd->entry_object, "e,state,focused", "e"); edje_object_part_text_cursor_end_set(sd->entry_object, ENTRY_PART_NAME, EDJE_CURSOR_MAIN); - if (sd->enabled) + if ((sd->enabled) && (!sd->noedit)) edje_object_signal_emit(sd->entry_object, "e,action,show,cursor", "e"); sd->focused = 1; } @@ -318,6 +319,54 @@ e_entry_disable(Evas_Object *entry) sd->enabled = 0; } +/** + * Enables the entry object: the user will be able to type text + * + * @param entry the entry object to enable + */ +EAPI void +e_entry_edit(Evas_Object *entry) +{ + E_Entry_Smart_Data *sd; + + if (evas_object_smart_smart_get(entry) != _e_entry_smart) SMARTERRNR(); + if ((!entry) || (!(sd = evas_object_smart_data_get(entry)))) + return; + if (sd->noedit) + return; + + edje_object_signal_emit(e_scrollframe_edje_object_get(sd->scroll_object), + "e,state,edit", "e"); + edje_object_signal_emit(sd->entry_object, "e,state,edit", "e"); + if (sd->focused) + edje_object_signal_emit(sd->entry_object, "e,action,show,cursor", "e"); + sd->noedit = 1; +} + +/** + * Disables the entry object: the user won't be able to type anymore. Selection + * will still be possible (to copy the text) + * + * @param entry the entry object to disable + */ +EAPI void +e_entry_noedit(Evas_Object *entry) +{ + E_Entry_Smart_Data *sd; + + if (evas_object_smart_smart_get(entry) != _e_entry_smart) SMARTERRNR(); + if ((!entry) || (!(sd = evas_object_smart_data_get(entry)))) + return; + if (!sd->noedit) + return; + + edje_object_signal_emit(e_scrollframe_edje_object_get(sd->scroll_object), + "e,state,noedit", "e"); + edje_object_signal_emit(sd->entry_object, "e,state,noedit", "e"); + edje_object_signal_emit(sd->entry_object, "e,action,hide,cursor", "e"); + sd->noedit = 0; +} + /* Private functions */ @@ -382,20 +431,23 @@ _e_entry_mouse_down_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *o { if (s_enabled) { - mi = e_menu_item_new(sd->popup); - e_menu_item_label_set(mi, _("Delete")); - e_util_menu_item_theme_icon_set(mi, "edit-delete"); - e_menu_item_callback_set(mi, _e_entry_cb_delete, sd); - - mi = e_menu_item_new(sd->popup); - e_menu_item_separator_set(mi, 1); - - if (!s_passwd) + if (!sd->noedit) { mi = e_menu_item_new(sd->popup); - e_menu_item_label_set(mi, _("Cut")); - e_util_menu_item_theme_icon_set(mi, "edit-cut"); - e_menu_item_callback_set(mi, _e_entry_cb_cut, sd); + e_menu_item_label_set(mi, _("Delete")); + e_util_menu_item_theme_icon_set(mi, "edit-delete"); + e_menu_item_callback_set(mi, _e_entry_cb_delete, sd); + + mi = e_menu_item_new(sd->popup); + e_menu_item_separator_set(mi, 1); + + if (!s_passwd) + { + mi = e_menu_item_new(sd->popup); + e_menu_item_label_set(mi, _("Cut")); + e_util_menu_item_theme_icon_set(mi, "edit-cut"); + e_menu_item_callback_set(mi, _e_entry_cb_cut, sd); + } } } if (!s_passwd) @@ -408,10 +460,13 @@ _e_entry_mouse_down_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *o } if (sd->enabled) { - mi = e_menu_item_new(sd->popup); - e_menu_item_label_set(mi, _("Paste")); - e_util_menu_item_theme_icon_set(mi, "edit-paste"); - e_menu_item_callback_set(mi, _e_entry_cb_paste, sd); + if (!sd->noedit) + { + mi = e_menu_item_new(sd->popup); + e_menu_item_label_set(mi, _("Paste")); + e_util_menu_item_theme_icon_set(mi, "edit-paste"); + e_menu_item_callback_set(mi, _e_entry_cb_paste, sd); + } } if (!s_empty) { @@ -505,6 +560,7 @@ _entry_paste_request_signal_cb(void *data, Ecore_X_Window xwin; E_Win *win; E_Container *con; + if (!(win = e_win_evas_object_win_get(data))) { con = e_container_evas_object_container_get(data); @@ -641,6 +697,7 @@ _e_entry_smart_add(Evas_Object *object) evas_object_smart_data_set(object, sd); sd->enabled = 1; + sd->noedit = 0; sd->focused = 0; sd->scroll_object = e_scrollframe_add(evas); @@ -814,9 +871,9 @@ _e_entry_clip_unset(Evas_Object *object) static void _e_entry_cb_menu_post(void *data, E_Menu *m __UNUSED__) { - E_Entry_Smart_Data *sd; + E_Entry_Smart_Data *sd = data; - sd = data; + if (!sd) return; if (!sd->popup) return; e_object_del(E_OBJECT(sd->popup)); sd->popup = NULL; @@ -826,20 +883,21 @@ static void _e_entry_cb_cut(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__) { E_Entry_Smart_Data *sd = data; + if (!sd) return; _e_entry_cb_copy(sd, NULL, NULL); + if ((!sd->enabled) || (sd->noedit)) return; edje_object_part_text_user_insert(sd->entry_object, ENTRY_PART_NAME, ""); } static void _e_entry_cb_copy(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__) { - E_Entry_Smart_Data *sd; + E_Entry_Smart_Data *sd = data; const char *range; Ecore_X_Window xwin; E_Win *win; - sd = data; - + if (!sd) return; range = edje_object_part_text_selection_get(sd->entry_object, ENTRY_PART_NAME); if (range) { @@ -865,7 +923,8 @@ _e_entry_cb_paste(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__) E_Win *win; sd = data; - if (!sd->enabled) return; + if (!sd) return; + if ((!sd->enabled) || (sd->noedit)) return; win = e_win_evas_object_win_get(sd->entry_object); if (win) xwin = win->evas_win; @@ -886,6 +945,7 @@ _e_entry_cb_select_all(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSE E_Entry_Smart_Data *sd; sd = data; + if (!sd) return; edje_object_part_text_select_all(sd->entry_object, ENTRY_PART_NAME); _e_entry_x_selection_update(sd->entry_object); } @@ -896,7 +956,8 @@ _e_entry_cb_delete(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__) E_Entry_Smart_Data *sd; sd = data; + if (!sd) return; + if ((!sd->enabled) || (sd->noedit)) return; edje_object_part_text_user_insert(sd->entry_object, ENTRY_PART_NAME, ""); - } diff --git a/src/bin/e_entry.h b/src/bin/e_entry.h index b737ed58e..9b4a2781d 100644 --- a/src/bin/e_entry.h +++ b/src/bin/e_entry.h @@ -15,6 +15,8 @@ EAPI void e_entry_focus (Evas_Object *entry); EAPI void e_entry_unfocus (Evas_Object *entry); EAPI void e_entry_enable (Evas_Object *entry); EAPI void e_entry_disable (Evas_Object *entry); +EAPI void e_entry_edit (Evas_Object *entry); +EAPI void e_entry_noedit (Evas_Object *entry); #endif #endif diff --git a/src/bin/e_widget_entry.c b/src/bin/e_widget_entry.c index ae05d1920..a0aa1995d 100644 --- a/src/bin/e_widget_entry.c +++ b/src/bin/e_widget_entry.c @@ -169,9 +169,9 @@ e_widget_entry_readonly_set(Evas_Object *entry, int readonly_mode) return; if (readonly_mode) - e_entry_disable(wd->o_entry); + e_entry_noedit(wd->o_entry); else - e_entry_enable(wd->o_entry); + e_entry_edit(wd->o_entry); } /** diff --git a/src/bin/e_widget_filepreview.c b/src/bin/e_widget_filepreview.c index c1aaf42e1..a3e77e1ba 100644 --- a/src/bin/e_widget_filepreview.c +++ b/src/bin/e_widget_filepreview.c @@ -207,20 +207,17 @@ _e_wid_fprev_preview_video_widgets(E_Widget_Data *wd) _e_wid_fprev_clear_widgets(wd); o = e_widget_table_add(evas, 0); - e_widget_disabled_set(o, 1); wd->o_preview_properties_table = o; #define WIDROW(lab, labob, entob, entw) \ do { \ o = e_widget_label_add(evas, lab); \ - e_widget_disabled_set(o, 1); \ wd->labob = o; \ e_widget_table_object_align_append(wd->o_preview_properties_table, \ wd->labob, \ 0, y, 1, 1, 0, 1, 0, 0, 1.0, 0.0); \ o = e_widget_entry_add(evas, &(wd->preview_extra_text), NULL, NULL, NULL); \ e_widget_entry_readonly_set(o, 1); \ - e_widget_disabled_set(o, 1); \ wd->entob = o; \ e_widget_size_min_set(o, entw, -1); \ e_widget_table_object_align_append(wd->o_preview_properties_table, \ @@ -286,20 +283,17 @@ _e_wid_fprev_preview_fs_widgets(E_Widget_Data *wd, Eina_Bool mount_point) _e_wid_fprev_clear_widgets(wd); o = e_widget_table_add(evas, 0); - e_widget_disabled_set(o, 1); wd->o_preview_properties_table = o; #define WIDROW(lab, labob, entob, entw) \ do { \ o = e_widget_label_add(evas, lab); \ - e_widget_disabled_set(o, 1); \ wd->labob = o; \ e_widget_table_object_align_append(wd->o_preview_properties_table, \ wd->labob, \ 0, y, 1, 1, 0, 1, 0, 0, 1.0, 0.0); \ o = e_widget_entry_add(evas, &(wd->preview_extra_text), NULL, NULL, NULL); \ e_widget_entry_readonly_set(o, 1); \ - e_widget_disabled_set(o, 1); \ wd->entob = o; \ e_widget_size_min_set(o, entw, -1); \ e_widget_table_object_align_append(wd->o_preview_properties_table, \ @@ -345,7 +339,6 @@ _e_wid_fprev_preview_file_widgets(E_Widget_Data *wd, Eina_Bool dir, Eina_Bool tx _e_wid_fprev_clear_widgets(wd); o = e_widget_table_add(evas, 0); - e_widget_disabled_set(o, 1); wd->o_preview_preview_table = o; e_widget_size_min_set(o, 32, 32); @@ -354,7 +347,6 @@ _e_wid_fprev_preview_file_widgets(E_Widget_Data *wd, Eina_Bool dir, Eina_Bool tx 0, 1, 0.5); o = e_widget_table_add(evas, 0); - e_widget_disabled_set(o, 1); wd->o_preview_properties_table = o; wd->is_dir = dir; wd->is_txt = txt; @@ -737,7 +729,6 @@ _e_wid_fprev_preview_reset(E_Widget_Data *wd) if (wd->is_dir || wd->is_txt) return; o = e_widget_preview_add(evas_object_evas_get(wd->obj), wd->w, wd->h); wd->prev_is_txt = wd->prev_is_fm = EINA_FALSE; - e_widget_disabled_set(o, 1); wd->o_preview_preview = o; evas_object_smart_callback_add(o, "preview_update", _e_wid_fprev_preview_update, wd); @@ -979,7 +970,6 @@ e_widget_filepreview_add(Evas *evas, int w, int h, int horiz) wd->w = w, wd->h = h; o = e_widget_list_add(evas, 0, horiz); - e_widget_disabled_set(o, 1); wd->o_preview_list = o; e_widget_resize_object_set(obj, o); e_widget_sub_object_add(obj, o); @@ -999,7 +989,6 @@ e_widget_filepreview_add(Evas *evas, int w, int h, int horiz) evas_object_show(wd->o_preview_time_entry); evas_object_show(wd->o_preview_properties_table); evas_object_show(wd->o_preview_list); - e_widget_disabled_set(obj, 1); return obj; }