1 #ifndef ELM_WIDGET_ENTRY_H 2 #define ELM_WIDGET_ENTRY_H 3 4 #include "elm_interface_scrollable.h" 5 #include "elm_widget_layout.h" 6 #include "elm_entry_eo.h" 7 8 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR 9 * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT 10 * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK 11 * IT AT RUNTIME. 12 */ 13 14 /** 15 * @addtogroup Widget 16 * @{ 17 * 18 * @section elm-entry-class The Elementary Entry Class 19 * 20 * Elementary, besides having the @ref Entry widget, exposes its 21 * foundation -- the Elementary Entry Class -- in order to create 22 * other widgets which are a entry with some more logic on top. 23 */ 24 25 typedef struct _Mod_Api Mod_Api; 26 27 /** 28 * Base widget smart data extended with entry instance data. 29 */ 30 typedef struct _Elm_Entry_Data Elm_Entry_Data; 31 struct _Elm_Entry_Data 32 { 33 Evas_Object *hit_rect, *entry_edje, *scr_edje; 34 35 Evas_Object *hoversel; 36 Evas_Object *mgf_bg; 37 Evas_Object *mgf_clip; 38 Evas_Object *mgf_proxy; 39 Evas_Object *start_handler; 40 Evas_Object *end_handler; 41 Ecore_Job *deferred_recalc_job; 42 Ecore_Timer *longpress_timer; 43 Ecore_Timer *delay_write; 44 /* for deferred appending */ 45 Ecore_Idler *append_text_idler; 46 char *append_text_left; 47 char *prediction_hint; 48 int append_text_position; 49 int append_text_len; 50 /* Only for clipboard */ 51 const char *cut_sel; 52 const char *text; 53 const char *file; 54 Elm_Text_Format format; 55 Evas_Coord last_w, ent_mw, ent_mh; 56 Evas_Coord downx, downy; 57 Evas_Coord ox, oy; 58 Eina_List *items; /** context menu item list */ 59 Eina_List *item_providers; 60 Eina_List *markup_filters; 61 Ecore_Job *hov_deljob; 62 Mod_Api *api; // module api if supplied 63 int cursor_pos; 64 Elm_Scroller_Policy policy_h, policy_v; 65 Elm_Wrap_Type line_wrap; 66 Elm_Input_Panel_Layout input_panel_layout; 67 Elm_Autocapital_Type autocapital_type; 68 Elm_Input_Panel_Lang input_panel_lang; 69 Elm_Input_Panel_Return_Key_Type input_panel_return_key_type; 70 Elm_Input_Hints input_hints; 71 Edje_Cursor sel_handler_cursor; 72 void *input_panel_imdata; 73 Eina_List *edje_signals; 74 int input_panel_imdata_len; 75 int input_panel_layout_variation; 76 int validators; 77 struct 78 { 79 Evas_Object *hover_parent; /**< hover parent object. entry is a hover parent object by default */ 80 Evas_Object *pop; /**< hidden icon for hover target */ 81 Evas_Object *hover; /**< hover object */ 82 const char *hover_style; /**< style of a hover object */ 83 } anchor_hover; 84 85 Elm_Cnp_Mode cnp_mode; 86 Elm_Sel_Format drop_format; 87 88 Eina_Bool input_panel_return_key_disabled : 1; 89 Eina_Bool drag_selection_asked : 1; 90 Eina_Bool sel_handler_disabled : 1; 91 Eina_Bool start_handler_down : 1; 92 Eina_Bool start_handler_shown : 1; 93 Eina_Bool end_handler_down : 1; 94 Eina_Bool end_handler_shown : 1; 95 Eina_Bool input_panel_enable : 1; 96 Eina_Bool prediction_allow : 1; 97 Eina_Bool selection_asked : 1; 98 Eina_Bool auto_return_key : 1; 99 Eina_Bool have_selection : 1; 100 Eina_Bool deferred_cur : 1; 101 Eina_Bool context_menu : 1; 102 Eina_Bool long_pressed : 1; 103 Eina_Bool cur_changed : 1; 104 Eina_Bool single_line : 1; 105 Eina_Bool can_write : 1; 106 Eina_Bool auto_save : 1; 107 Eina_Bool password : 1; 108 Eina_Bool editable : 1; 109 Eina_Bool disabled : 1; 110 Eina_Bool h_bounce : 1; 111 Eina_Bool v_bounce : 1; 112 Eina_Bool has_text : 1; 113 Eina_Bool use_down : 1; 114 Eina_Bool sel_mode : 1; 115 Eina_Bool sel_allow : 1; 116 Eina_Bool changed : 1; 117 Eina_Bool scroll : 1; 118 Eina_Bool input_panel_show_on_demand : 1; 119 Eina_Bool file_setting : 1; 120 }; 121 122 typedef struct _Elm_Entry_Item_Provider Elm_Entry_Item_Provider; 123 typedef struct _Elm_Entry_Markup_Filter Elm_Entry_Markup_Filter; 124 125 struct _Elm_Entry_Context_Menu_Item 126 { 127 Evas_Object *obj; 128 const char *label; 129 const char *icon_file; 130 const char *icon_group; 131 Elm_Icon_Type icon_type; 132 Evas_Smart_Cb func; 133 void *data; 134 }; 135 136 struct _Elm_Entry_Item_Provider 137 { 138 Evas_Object *(*func)(void *data, Evas_Object * entry, const char *item); 139 void *data; 140 }; 141 142 struct _Elm_Entry_Markup_Filter 143 { 144 Elm_Entry_Filter_Cb func; 145 void *data; 146 void *orig_data; 147 }; 148 149 typedef enum _Length_Unit 150 { 151 LENGTH_UNIT_CHAR, 152 LENGTH_UNIT_BYTE, 153 LENGTH_UNIT_LAST 154 } Length_Unit; 155 156 /** 157 * @} 158 */ 159 160 #define ELM_ENTRY_DATA_GET(o, sd) \ 161 Elm_Entry_Data * sd = efl_data_scope_get(o, ELM_ENTRY_CLASS) 162 163 #define ELM_ENTRY_DATA_GET_OR_RETURN(o, ptr) \ 164 ELM_ENTRY_DATA_GET(o, ptr); \ 165 if (EINA_UNLIKELY(!ptr)) \ 166 { \ 167 ERR("No widget data for object %p (%s)", \ 168 o, evas_object_type_get(o)); \ 169 return; \ 170 } 171 172 #define ELM_ENTRY_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ 173 ELM_ENTRY_DATA_GET(o, ptr); \ 174 if (EINA_UNLIKELY(!ptr)) \ 175 { \ 176 ERR("No widget data for object %p (%s)", \ 177 o, evas_object_type_get(o)); \ 178 return val; \ 179 } 180 181 #define ELM_ENTRY_CHECK(obj) \ 182 if (EINA_UNLIKELY(!efl_isa((obj), ELM_ENTRY_CLASS))) \ 183 return 184 185 #endif 186