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