split up all elm headers. not perfect, but a big start
[framework/uifw/elementary.git] / src / lib / elm_entry.h
1    typedef enum _Elm_Text_Format
2      {
3         ELM_TEXT_FORMAT_PLAIN_UTF8,
4         ELM_TEXT_FORMAT_MARKUP_UTF8
5      } Elm_Text_Format;
6
7    /**
8     * Line wrapping types.
9     */
10    typedef enum _Elm_Wrap_Type
11      {
12         ELM_WRAP_NONE = 0, /**< No wrap - value is zero */
13         ELM_WRAP_CHAR, /**< Char wrap - wrap between characters */
14         ELM_WRAP_WORD, /**< Word wrap - wrap in allowed wrapping points (as defined in the unicode standard) */
15         ELM_WRAP_MIXED, /**< Mixed wrap - Word wrap, and if that fails, char wrap. */
16         ELM_WRAP_LAST
17      } Elm_Wrap_Type;
18
19    typedef enum
20      {
21         ELM_INPUT_PANEL_LAYOUT_NORMAL,          /**< Default layout */
22         ELM_INPUT_PANEL_LAYOUT_NUMBER,          /**< Number layout */
23         ELM_INPUT_PANEL_LAYOUT_EMAIL,           /**< Email layout */
24         ELM_INPUT_PANEL_LAYOUT_URL,             /**< URL layout */
25         ELM_INPUT_PANEL_LAYOUT_PHONENUMBER,     /**< Phone Number layout */
26         ELM_INPUT_PANEL_LAYOUT_IP,              /**< IP layout */
27         ELM_INPUT_PANEL_LAYOUT_MONTH,           /**< Month layout */
28         ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,      /**< Number Only layout */
29         ELM_INPUT_PANEL_LAYOUT_INVALID // XXX: remove this so we can expand
30      } Elm_Input_Panel_Layout;
31
32    typedef enum
33      {
34         ELM_AUTOCAPITAL_TYPE_NONE,
35         ELM_AUTOCAPITAL_TYPE_WORD,
36         ELM_AUTOCAPITAL_TYPE_SENTENCE,
37         ELM_AUTOCAPITAL_TYPE_ALLCHARACTER,
38      } Elm_Autocapital_Type;
39
40    /**
41     * @defgroup Entry Entry
42     *
43     * @image html img/widget/entry/preview-00.png
44     * @image latex img/widget/entry/preview-00.eps width=\textwidth
45     * @image html img/widget/entry/preview-01.png
46     * @image latex img/widget/entry/preview-01.eps width=\textwidth
47     * @image html img/widget/entry/preview-02.png
48     * @image latex img/widget/entry/preview-02.eps width=\textwidth
49     * @image html img/widget/entry/preview-03.png
50     * @image latex img/widget/entry/preview-03.eps width=\textwidth
51     *
52     * An entry is a convenience widget which shows a box that the user can
53     * enter text into. Entries by default don't scroll, so they grow to
54     * accomodate the entire text, resizing the parent window as needed. This
55     * can be changed with the elm_entry_scrollable_set() function.
56     *
57     * They can also be single line or multi line (the default) and when set
58     * to multi line mode they support text wrapping in any of the modes
59     * indicated by #Elm_Wrap_Type.
60     *
61     * Other features include password mode, filtering of inserted text with
62     * elm_entry_text_filter_append() and related functions, inline "items" and
63     * formatted markup text.
64     *
65     * @section entry-markup Formatted text
66     *
67     * The markup tags supported by the Entry are defined by the theme, but
68     * even when writing new themes or extensions it's a good idea to stick to
69     * a sane default, to maintain coherency and avoid application breakages.
70     * Currently defined by the default theme are the following tags:
71     * @li \<br\>: Inserts a line break.
72     * @li \<ps\>: Inserts a paragraph separator. This is preferred over line
73     * breaks.
74     * @li \<tab\>: Inserts a tab.
75     * @li \<em\>...\</em\>: Emphasis. Sets the @em oblique style for the
76     * enclosed text.
77     * @li \<b\>...\</b\>: Sets the @b bold style for the enclosed text.
78     * @li \<link\>...\</link\>: Underlines the enclosed text.
79     * @li \<hilight\>...\</hilight\>: Hilights the enclosed text.
80     *
81     * @section entry-special Special markups
82     *
83     * Besides those used to format text, entries support two special markup
84     * tags used to insert clickable portions of text or items inlined within
85     * the text.
86     *
87     * @subsection entry-anchors Anchors
88     *
89     * Anchors are similar to HTML anchors. Text can be surrounded by \<a\> and
90     * \</a\> tags and an event will be generated when this text is clicked,
91     * like this:
92     *
93     * @code
94     * This text is outside <a href=anc-01>but this one is an anchor</a>
95     * @endcode
96     *
97     * The @c href attribute in the opening tag gives the name that will be
98     * used to identify the anchor and it can be any valid utf8 string.
99     *
100     * When an anchor is clicked, an @c "anchor,clicked" signal is emitted with
101     * an #Elm_Entry_Anchor_Info in the @c event_info parameter for the
102     * callback function. The same applies for "anchor,in" (mouse in), "anchor,out"
103     * (mouse out), "anchor,down" (mouse down), and "anchor,up" (mouse up) events on
104     * an anchor.
105     *
106     * @subsection entry-items Items
107     *
108     * Inlined in the text, any other @c Evas_Object can be inserted by using
109     * \<item\> tags this way:
110     *
111     * @code
112     * <item size=16x16 vsize=full href=emoticon/haha></item>
113     * @endcode
114     *
115     * Just like with anchors, the @c href identifies each item, but these need,
116     * in addition, to indicate their size, which is done using any one of
117     * @c size, @c absize or @c relsize attributes. These attributes take their
118     * value in the WxH format, where W is the width and H the height of the
119     * item.
120     *
121     * @li absize: Absolute pixel size for the item. Whatever value is set will
122     * be the item's size regardless of any scale value the object may have
123     * been set to. The final line height will be adjusted to fit larger items.
124     * @li size: Similar to @c absize, but it's adjusted to the scale value set
125     * for the object.
126     * @li relsize: Size is adjusted for the item to fit within the current
127     * line height.
128     *
129     * Besides their size, items are specificed a @c vsize value that affects
130     * how their final size and position are calculated. The possible values
131     * are:
132     * @li ascent: Item will be placed within the line's baseline and its
133     * ascent. That is, the height between the line where all characters are
134     * positioned and the highest point in the line. For @c size and @c absize
135     * items, the descent value will be added to the total line height to make
136     * them fit. @c relsize items will be adjusted to fit within this space.
137     * @li full: Items will be placed between the descent and ascent, or the
138     * lowest point in the line and its highest.
139     *
140     * The next image shows different configurations of items and how
141     * the previously mentioned options affect their sizes. In all cases,
142     * the green line indicates the ascent, blue for the baseline and red for
143     * the descent.
144     *
145     * @image html entry_item.png
146     * @image latex entry_item.eps width=\textwidth
147     *
148     * And another one to show how size differs from absize. In the first one,
149     * the scale value is set to 1.0, while the second one is using one of 2.0.
150     *
151     * @image html entry_item_scale.png
152     * @image latex entry_item_scale.eps width=\textwidth
153     *
154     * After the size for an item is calculated, the entry will request an
155     * object to place in its space. For this, the functions set with
156     * elm_entry_item_provider_append() and related functions will be called
157     * in order until one of them returns a @c non-NULL value. If no providers
158     * are available, or all of them return @c NULL, then the entry falls back
159     * to one of the internal defaults, provided the name matches with one of
160     * them.
161     *
162     * All of the following are currently supported:
163     *
164     * - emoticon/angry
165     * - emoticon/angry-shout
166     * - emoticon/crazy-laugh
167     * - emoticon/evil-laugh
168     * - emoticon/evil
169     * - emoticon/goggle-smile
170     * - emoticon/grumpy
171     * - emoticon/grumpy-smile
172     * - emoticon/guilty
173     * - emoticon/guilty-smile
174     * - emoticon/haha
175     * - emoticon/half-smile
176     * - emoticon/happy-panting
177     * - emoticon/happy
178     * - emoticon/indifferent
179     * - emoticon/kiss
180     * - emoticon/knowing-grin
181     * - emoticon/laugh
182     * - emoticon/little-bit-sorry
183     * - emoticon/love-lots
184     * - emoticon/love
185     * - emoticon/minimal-smile
186     * - emoticon/not-happy
187     * - emoticon/not-impressed
188     * - emoticon/omg
189     * - emoticon/opensmile
190     * - emoticon/smile
191     * - emoticon/sorry
192     * - emoticon/squint-laugh
193     * - emoticon/surprised
194     * - emoticon/suspicious
195     * - emoticon/tongue-dangling
196     * - emoticon/tongue-poke
197     * - emoticon/uh
198     * - emoticon/unhappy
199     * - emoticon/very-sorry
200     * - emoticon/what
201     * - emoticon/wink
202     * - emoticon/worried
203     * - emoticon/wtf
204     *
205     * Alternatively, an item may reference an image by its path, using
206     * the URI form @c file:///path/to/an/image.png and the entry will then
207     * use that image for the item.
208     *
209     * @section entry-files Loading and saving files
210     *
211     * Entries have convinience functions to load text from a file and save
212     * changes back to it after a short delay. The automatic saving is enabled
213     * by default, but can be disabled with elm_entry_autosave_set() and files
214     * can be loaded directly as plain text or have any markup in them
215     * recognized. See elm_entry_file_set() for more details.
216     *
217     * @section entry-signals Emitted signals
218     *
219     * This widget emits the following signals:
220     *
221     * @li "changed": The text within the entry was changed.
222     * @li "changed,user": The text within the entry was changed because of user interaction.
223     * @li "activated": The enter key was pressed on a single line entry.
224     * @li "press": A mouse button has been pressed on the entry.
225     * @li "longpressed": A mouse button has been pressed and held for a couple
226     * seconds.
227     * @li "clicked": The entry has been clicked (mouse press and release).
228     * @li "clicked,double": The entry has been double clicked.
229     * @li "clicked,triple": The entry has been triple clicked.
230     * @li "focused": The entry has received focus.
231     * @li "unfocused": The entry has lost focus.
232     * @li "selection,paste": A paste of the clipboard contents was requested.
233     * @li "selection,copy": A copy of the selected text into the clipboard was
234     * requested.
235     * @li "selection,cut": A cut of the selected text into the clipboard was
236     * requested.
237     * @li "selection,start": A selection has begun and no previous selection
238     * existed.
239     * @li "selection,changed": The current selection has changed.
240     * @li "selection,cleared": The current selection has been cleared.
241     * @li "cursor,changed": The cursor has changed position.
242     * @li "anchor,clicked": An anchor has been clicked. The event_info
243     * parameter for the callback will be an #Elm_Entry_Anchor_Info.
244     * @li "anchor,in": Mouse cursor has moved into an anchor. The event_info
245     * parameter for the callback will be an #Elm_Entry_Anchor_Info.
246     * @li "anchor,out": Mouse cursor has moved out of an anchor. The event_info
247     * parameter for the callback will be an #Elm_Entry_Anchor_Info.
248     * @li "anchor,up": Mouse button has been unpressed on an anchor. The event_info
249     * parameter for the callback will be an #Elm_Entry_Anchor_Info.
250     * @li "anchor,down": Mouse button has been pressed on an anchor. The event_info
251     * parameter for the callback will be an #Elm_Entry_Anchor_Info.
252     * @li "preedit,changed": The preedit string has changed.
253     * @li "language,changed": Program language changed.
254     *
255     * @section entry-examples
256     *
257     * An overview of the Entry API can be seen in @ref entry_example_01
258     *
259     * @{
260     */
261
262    /**
263     * @typedef Elm_Entry_Anchor_Info
264     *
265     * The info sent in the callback for the "anchor,clicked" signals emitted
266     * by entries.
267     */
268    typedef struct _Elm_Entry_Anchor_Info Elm_Entry_Anchor_Info;
269
270    /**
271     * @struct _Elm_Entry_Anchor_Info
272     *
273     * The info sent in the callback for the "anchor,clicked" signals emitted
274     * by entries.
275     */
276    struct _Elm_Entry_Anchor_Info
277      {
278         const char *name; /**< The name of the anchor, as stated in its href */
279         int         button; /**< The mouse button used to click on it */
280         Evas_Coord  x, /**< Anchor geometry, relative to canvas */
281                     y, /**< Anchor geometry, relative to canvas */
282                     w, /**< Anchor geometry, relative to canvas */
283                     h; /**< Anchor geometry, relative to canvas */
284      };
285
286    /**
287     * @typedef Elm_Entry_Filter_Cb
288     * This callback type is used by entry filters to modify text.
289     * @param data The data specified as the last param when adding the filter
290     * @param entry The entry object
291     * @param text A pointer to the location of the text being filtered. This data can be modified,
292     * but any additional allocations must be managed by the user.
293     * @see elm_entry_text_filter_append
294     * @see elm_entry_text_filter_prepend
295     */
296    typedef void (*Elm_Entry_Filter_Cb)(void *data, Evas_Object *entry, char **text);
297
298    /**
299     * @typedef Elm_Entry_Change_Info
300     * This corresponds to Edje_Entry_Change_Info. Includes information about
301     * a change in the entry.
302     */
303    typedef Edje_Entry_Change_Info Elm_Entry_Change_Info;
304
305
306    /**
307     * This adds an entry to @p parent object.
308     *
309     * By default, entries are:
310     * @li not scrolled
311     * @li multi-line
312     * @li word wrapped
313     * @li autosave is enabled
314     *
315     * @param parent The parent object
316     * @return The new object or NULL if it cannot be created
317     */
318    EAPI Evas_Object *elm_entry_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
319
320    /**
321     * Sets the entry to single line mode.
322     *
323     * In single line mode, entries don't ever wrap when the text reaches the
324     * edge, and instead they keep growing horizontally. Pressing the @c Enter
325     * key will generate an @c "activate" event instead of adding a new line.
326     *
327     * When @p single_line is @c EINA_FALSE, line wrapping takes effect again
328     * and pressing enter will break the text into a different line
329     * without generating any events.
330     *
331     * @param obj The entry object
332     * @param single_line If true, the text in the entry
333     * will be on a single line.
334     */
335    EAPI void         elm_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line) EINA_ARG_NONNULL(1);
336
337    /**
338     * Gets whether the entry is set to be single line.
339     *
340     * @param obj The entry object
341     * @return single_line If true, the text in the entry is set to display
342     * on a single line.
343     *
344     * @see elm_entry_single_line_set()
345     */
346    EAPI Eina_Bool    elm_entry_single_line_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
347
348    /**
349     * Sets the entry to password mode.
350     *
351     * In password mode, entries are implicitly single line and the display of
352     * any text in them is replaced with asterisks (*).
353     *
354     * @param obj The entry object
355     * @param password If true, password mode is enabled.
356     */
357    EAPI void         elm_entry_password_set(Evas_Object *obj, Eina_Bool password) EINA_ARG_NONNULL(1);
358
359    /**
360     * Gets whether the entry is set to password mode.
361     *
362     * @param obj The entry object
363     * @return If true, the entry is set to display all characters
364     * as asterisks (*).
365     *
366     * @see elm_entry_password_set()
367     */
368    EAPI Eina_Bool    elm_entry_password_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
369
370    /**
371     * This sets the text displayed within the entry to @p entry.
372     *
373     * @param obj The entry object
374     * @param entry The text to be displayed
375     *
376     * @deprecated Use elm_object_text_set() instead.
377     * @note Using this function bypasses text filters
378     */
379    EAPI void         elm_entry_entry_set(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
380
381    /**
382     * This returns the text currently shown in object @p entry.
383     * See also elm_entry_entry_set().
384     *
385     * @param obj The entry object
386     * @return The currently displayed text or NULL on failure
387     *
388     * @deprecated Use elm_object_text_get() instead.
389     */
390    EAPI const char  *elm_entry_entry_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
391
392    /**
393     * Appends @p entry to the text of the entry.
394     *
395     * Adds the text in @p entry to the end of any text already present in the
396     * widget.
397     *
398     * The appended text is subject to any filters set for the widget.
399     *
400     * @param obj The entry object
401     * @param entry The text to be displayed
402     *
403     * @see elm_entry_text_filter_append()
404     */
405    EAPI void         elm_entry_entry_append(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
406
407    /**
408     * Gets whether the entry is empty.
409     *
410     * Empty means no text at all. If there are any markup tags, like an item
411     * tag for which no provider finds anything, and no text is displayed, this
412     * function still returns EINA_FALSE.
413     *
414     * @param obj The entry object
415     * @return EINA_TRUE if the entry is empty, EINA_FALSE otherwise.
416     */
417    EAPI Eina_Bool    elm_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
418
419    /**
420     * Gets any selected text within the entry.
421     *
422     * If there's any selected text in the entry, this function returns it as
423     * a string in markup format. NULL is returned if no selection exists or
424     * if an error occurred.
425     *
426     * The returned value points to an internal string and should not be freed
427     * or modified in any way. If the @p entry object is deleted or its
428     * contents are changed, the returned pointer should be considered invalid.
429     *
430     * @param obj The entry object
431     * @return The selected text within the entry or NULL on failure
432     */
433    EAPI const char  *elm_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
434
435    /**
436     * Returns the actual textblock object of the entry.
437     *
438     * This function exposes the internal textblock object that actually
439     * contains and draws the text. This should be used for low-level
440     * manipulations that are otherwise not possible.
441     *
442     * Changing the textblock directly from here will not notify edje/elm to
443     * recalculate the textblock size automatically, so any modifications
444     * done to the textblock returned by this function should be followed by
445     * a call to elm_entry_calc_force().
446     *
447     * The return value is marked as const as an additional warning.
448     * One should not use the returned object with any of the generic evas
449     * functions (geometry_get/resize/move and etc), but only with the textblock
450     * functions; The former will either not work at all, or break the correct
451     * functionality.
452     *
453     * IMPORTANT: Many functions may change (i.e delete and create a new one)
454     * the internal textblock object. Do NOT cache the returned object, and try
455     * not to mix calls on this object with regular elm_entry calls (which may
456     * change the internal textblock object). This applies to all cursors
457     * returned from textblock calls, and all the other derivative values.
458     *
459     * @param obj The entry object
460     * @return The textblock object.
461     */
462    EAPI const Evas_Object *elm_entry_textblock_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
463
464    /**
465     * Forces calculation of the entry size and text layouting.
466     *
467     * This should be used after modifying the textblock object directly. See
468     * elm_entry_textblock_get() for more information.
469     *
470     * @param obj The entry object
471     *
472     * @see elm_entry_textblock_get()
473     */
474    EAPI void elm_entry_calc_force(const Evas_Object *obj) EINA_ARG_NONNULL(1);
475
476    /**
477     * Inserts the given text into the entry at the current cursor position.
478     *
479     * This inserts text at the cursor position as if it was typed
480     * by the user (note that this also allows markup which a user
481     * can't just "type" as it would be converted to escaped text, so this
482     * call can be used to insert things like emoticon items or bold push/pop
483     * tags, other font and color change tags etc.)
484     *
485     * If any selection exists, it will be replaced by the inserted text.
486     *
487     * The inserted text is subject to any filters set for the widget.
488     *
489     * @param obj The entry object
490     * @param entry The text to insert
491     *
492     * @see elm_entry_text_filter_append()
493     */
494    EAPI void         elm_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
495
496    /**
497     * Set the line wrap type to use on multi-line entries.
498     *
499     * Sets the wrap type used by the entry to any of the specified in
500     * #Elm_Wrap_Type. This tells how the text will be implicitly cut into a new
501     * line (without inserting a line break or paragraph separator) when it
502     * reaches the far edge of the widget.
503     *
504     * Note that this only makes sense for multi-line entries. A widget set
505     * to be single line will never wrap.
506     *
507     * @param obj The entry object
508     * @param wrap The wrap mode to use. See #Elm_Wrap_Type for details on them
509     */
510    EAPI void         elm_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
511
512    /**
513     * Gets the wrap mode the entry was set to use.
514     *
515     * @param obj The entry object
516     * @return Wrap type
517     *
518     * @see also elm_entry_line_wrap_set()
519     */
520    EAPI Elm_Wrap_Type elm_entry_line_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
521
522    /**
523     * Sets if the entry is to be editable or not.
524     *
525     * By default, entries are editable and when focused, any text input by the
526     * user will be inserted at the current cursor position. But calling this
527     * function with @p editable as EINA_FALSE will prevent the user from
528     * inputting text into the entry.
529     *
530     * The only way to change the text of a non-editable entry is to use
531     * elm_object_text_set(), elm_entry_entry_insert() and other related
532     * functions.
533     *
534     * @param obj The entry object
535     * @param editable If EINA_TRUE, user input will be inserted in the entry,
536     * if not, the entry is read-only and no user input is allowed.
537     */
538    EAPI void         elm_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
539
540    /**
541     * Gets whether the entry is editable or not.
542     *
543     * @param obj The entry object
544     * @return If true, the entry is editable by the user.
545     * If false, it is not editable by the user
546     *
547     * @see elm_entry_editable_set()
548     */
549    EAPI Eina_Bool    elm_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
550
551    /**
552     * This drops any existing text selection within the entry.
553     *
554     * @param obj The entry object
555     */
556    EAPI void         elm_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);
557
558    /**
559     * This selects all text within the entry.
560     *
561     * @param obj The entry object
562     */
563    EAPI void         elm_entry_select_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
564
565    /**
566     * This moves the cursor one place to the right within the entry.
567     *
568     * @param obj The entry object
569     * @return EINA_TRUE upon success, EINA_FALSE upon failure
570     */
571    EAPI Eina_Bool    elm_entry_cursor_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
572
573    /**
574     * This moves the cursor one place to the left within the entry.
575     *
576     * @param obj The entry object
577     * @return EINA_TRUE upon success, EINA_FALSE upon failure
578     */
579    EAPI Eina_Bool    elm_entry_cursor_prev(Evas_Object *obj) EINA_ARG_NONNULL(1);
580
581    /**
582     * This moves the cursor one line up within the entry.
583     *
584     * @param obj The entry object
585     * @return EINA_TRUE upon success, EINA_FALSE upon failure
586     */
587    EAPI Eina_Bool    elm_entry_cursor_up(Evas_Object *obj) EINA_ARG_NONNULL(1);
588
589    /**
590     * This moves the cursor one line down within the entry.
591     *
592     * @param obj The entry object
593     * @return EINA_TRUE upon success, EINA_FALSE upon failure
594     */
595    EAPI Eina_Bool    elm_entry_cursor_down(Evas_Object *obj) EINA_ARG_NONNULL(1);
596
597    /**
598     * This moves the cursor to the beginning of the entry.
599     *
600     * @param obj The entry object
601     */
602    EAPI void         elm_entry_cursor_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
603
604    /**
605     * This moves the cursor to the end of the entry.
606     *
607     * @param obj The entry object
608     */
609    EAPI void         elm_entry_cursor_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
610
611    /**
612     * This moves the cursor to the beginning of the current line.
613     *
614     * @param obj The entry object
615     */
616    EAPI void         elm_entry_cursor_line_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
617
618    /**
619     * This moves the cursor to the end of the current line.
620     *
621     * @param obj The entry object
622     */
623    EAPI void         elm_entry_cursor_line_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
624
625    /**
626     * This begins a selection within the entry as though
627     * the user were holding down the mouse button to make a selection.
628     *
629     * @param obj The entry object
630     */
631    EAPI void         elm_entry_cursor_selection_begin(Evas_Object *obj) EINA_ARG_NONNULL(1);
632
633    /**
634     * This ends a selection within the entry as though
635     * the user had just released the mouse button while making a selection.
636     *
637     * @param obj The entry object
638     */
639    EAPI void         elm_entry_cursor_selection_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
640
641    /**
642     * Gets whether a format node exists at the current cursor position.
643     *
644     * A format node is anything that defines how the text is rendered. It can
645     * be a visible format node, such as a line break or a paragraph separator,
646     * or an invisible one, such as bold begin or end tag.
647     * This function returns whether any format node exists at the current
648     * cursor position.
649     *
650     * @param obj The entry object
651     * @return EINA_TRUE if the current cursor position contains a format node,
652     * EINA_FALSE otherwise.
653     *
654     * @see elm_entry_cursor_is_visible_format_get()
655     */
656    EAPI Eina_Bool    elm_entry_cursor_is_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
657
658    /**
659     * Gets if the current cursor position holds a visible format node.
660     *
661     * @param obj The entry object
662     * @return EINA_TRUE if the current cursor is a visible format, EINA_FALSE
663     * if it's an invisible one or no format exists.
664     *
665     * @see elm_entry_cursor_is_format_get()
666     */
667    EAPI Eina_Bool    elm_entry_cursor_is_visible_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
668
669    /**
670     * Gets the character pointed by the cursor at its current position.
671     *
672     * This function returns a string with the utf8 character stored at the
673     * current cursor position.
674     * Only the text is returned, any format that may exist will not be part
675     * of the return value.
676     *
677     * @param obj The entry object
678     * @return The text pointed by the cursors.
679     */
680    EAPI const char  *elm_entry_cursor_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
681
682    /**
683     * This function returns the geometry of the cursor.
684     *
685     * It's useful if you want to draw something on the cursor (or where it is),
686     * or for example in the case of scrolled entry where you want to show the
687     * cursor.
688     *
689     * @param obj The entry object
690     * @param x returned geometry
691     * @param y returned geometry
692     * @param w returned geometry
693     * @param h returned geometry
694     * @return EINA_TRUE upon success, EINA_FALSE upon failure
695     */
696    EAPI Eina_Bool    elm_entry_cursor_geometry_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
697
698    /**
699     * Sets the cursor position in the entry to the given value
700     *
701     * The value in @p pos is the index of the character position within the
702     * contents of the string as returned by elm_entry_cursor_pos_get().
703     *
704     * @param obj The entry object
705     * @param pos The position of the cursor
706     */
707    EAPI void         elm_entry_cursor_pos_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
708
709    /**
710     * Retrieves the current position of the cursor in the entry
711     *
712     * @param obj The entry object
713     * @return The cursor position
714     */
715    EAPI int          elm_entry_cursor_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
716
717    /**
718     * This executes a "cut" action on the selected text in the entry.
719     *
720     * @param obj The entry object
721     */
722    EAPI void         elm_entry_selection_cut(Evas_Object *obj) EINA_ARG_NONNULL(1);
723
724    /**
725     * This executes a "copy" action on the selected text in the entry.
726     *
727     * @param obj The entry object
728     */
729    EAPI void         elm_entry_selection_copy(Evas_Object *obj) EINA_ARG_NONNULL(1);
730
731    /**
732     * This executes a "paste" action in the entry.
733     *
734     * @param obj The entry object
735     */
736    EAPI void         elm_entry_selection_paste(Evas_Object *obj) EINA_ARG_NONNULL(1);
737
738    /**
739     * This clears and frees the items in a entry's contextual (longpress)
740     * menu.
741     *
742     * @param obj The entry object
743     *
744     * @see elm_entry_context_menu_item_add()
745     */
746    EAPI void         elm_entry_context_menu_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
747
748    /**
749     * This adds an item to the entry's contextual menu.
750     *
751     * A longpress on an entry will make the contextual menu show up, if this
752     * hasn't been disabled with elm_entry_context_menu_disabled_set().
753     * By default, this menu provides a few options like enabling selection mode,
754     * which is useful on embedded devices that need to be explicit about it,
755     * and when a selection exists it also shows the copy and cut actions.
756     *
757     * With this function, developers can add other options to this menu to
758     * perform any action they deem necessary.
759     *
760     * @param obj The entry object
761     * @param label The item's text label
762     * @param icon_file The item's icon file
763     * @param icon_type The item's icon type
764     * @param func The callback to execute when the item is clicked
765     * @param data The data to associate with the item for related functions
766     */
767    EAPI void         elm_entry_context_menu_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
768
769    /**
770     * This disables the entry's contextual (longpress) menu.
771     *
772     * @param obj The entry object
773     * @param disabled If true, the menu is disabled
774     */
775    EAPI void         elm_entry_context_menu_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
776
777    /**
778     * This returns whether the entry's contextual (longpress) menu is
779     * disabled.
780     *
781     * @param obj The entry object
782     * @return If true, the menu is disabled
783     */
784    EAPI Eina_Bool    elm_entry_context_menu_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
785
786    /**
787     * This appends a custom item provider to the list for that entry
788     *
789     * This appends the given callback. The list is walked from beginning to end
790     * with each function called given the item href string in the text. If the
791     * function returns an object handle other than NULL (it should create an
792     * object to do this), then this object is used to replace that item. If
793     * not the next provider is called until one provides an item object, or the
794     * default provider in entry does.
795     *
796     * @param obj The entry object
797     * @param func The function called to provide the item object
798     * @param data The data passed to @p func
799     *
800     * @see @ref entry-items
801     */
802    EAPI void         elm_entry_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
803
804    /**
805     * This prepends a custom item provider to the list for that entry
806     *
807     * This prepends the given callback. See elm_entry_item_provider_append() for
808     * more information
809     *
810     * @param obj The entry object
811     * @param func The function called to provide the item object
812     * @param data The data passed to @p func
813     */
814    EAPI void         elm_entry_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
815
816    /**
817     * This removes a custom item provider to the list for that entry
818     *
819     * This removes the given callback. See elm_entry_item_provider_append() for
820     * more information
821     *
822     * @param obj The entry object
823     * @param func The function called to provide the item object
824     * @param data The data passed to @p func
825     */
826    EAPI void         elm_entry_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
827
828    /**
829     * Append a filter function for text inserted in the entry
830     *
831     * Append the given callback to the list. This functions will be called
832     * whenever any text is inserted into the entry, with the text to be inserted
833     * as a parameter. The callback function is free to alter the text in any way
834     * it wants, but it must remember to free the given pointer and update it.
835     * If the new text is to be discarded, the function can free it and set its
836     * text parameter to NULL. This will also prevent any following filters from
837     * being called.
838     *
839     * @param obj The entry object
840     * @param func The function to use as text filter
841     * @param data User data to pass to @p func
842     */
843    EAPI void         elm_entry_text_filter_append(Evas_Object *obj, Elm_Entry_Filter_Cb func, void *data) EINA_ARG_NONNULL(1, 2);
844
845    /**
846     * Prepend a filter function for text insdrted in the entry
847     *
848     * Prepend the given callback to the list. See elm_entry_text_filter_append()
849     * for more information
850     *
851     * @param obj The entry object
852     * @param func The function to use as text filter
853     * @param data User data to pass to @p func
854     */
855    EAPI void         elm_entry_text_filter_prepend(Evas_Object *obj, Elm_Entry_Filter_Cb func, void *data) EINA_ARG_NONNULL(1, 2);
856
857    /**
858     * Remove a filter from the list
859     *
860     * Removes the given callback from the filter list. See
861     * elm_entry_text_filter_append() for more information.
862     *
863     * @param obj The entry object
864     * @param func The filter function to remove
865     * @param data The user data passed when adding the function
866     */
867    EAPI void         elm_entry_text_filter_remove(Evas_Object *obj, Elm_Entry_Filter_Cb func, void *data) EINA_ARG_NONNULL(1, 2);
868
869    /**
870     * This converts a markup (HTML-like) string into UTF-8.
871     *
872     * The returned string is a malloc'ed buffer and it should be freed when
873     * not needed anymore.
874     *
875     * @param s The string (in markup) to be converted
876     * @return The converted string (in UTF-8). It should be freed.
877     */
878    EAPI char        *elm_entry_markup_to_utf8(const char *s) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
879
880    /**
881     * This converts a UTF-8 string into markup (HTML-like).
882     *
883     * The returned string is a malloc'ed buffer and it should be freed when
884     * not needed anymore.
885     *
886     * @param s The string (in UTF-8) to be converted
887     * @return The converted string (in markup). It should be freed.
888     */
889    EAPI char        *elm_entry_utf8_to_markup(const char *s) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
890
891    /**
892     * This sets the file (and implicitly loads it) for the text to display and
893     * then edit. All changes are written back to the file after a short delay if
894     * the entry object is set to autosave (which is the default).
895     *
896     * If the entry had any other file set previously, any changes made to it
897     * will be saved if the autosave feature is enabled, otherwise, the file
898     * will be silently discarded and any non-saved changes will be lost.
899     *
900     * @param obj The entry object
901     * @param file The path to the file to load and save
902     * @param format The file format
903     */
904    EAPI void         elm_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format) EINA_ARG_NONNULL(1);
905
906    /**
907     * Gets the file being edited by the entry.
908     *
909     * This function can be used to retrieve any file set on the entry for
910     * edition, along with the format used to load and save it.
911     *
912     * @param obj The entry object
913     * @param file The path to the file to load and save
914     * @param format The file format
915     */
916    EAPI void         elm_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *format) EINA_ARG_NONNULL(1);
917
918    /**
919     * This function writes any changes made to the file set with
920     * elm_entry_file_set()
921     *
922     * @param obj The entry object
923     */
924    EAPI void         elm_entry_file_save(Evas_Object *obj) EINA_ARG_NONNULL(1);
925
926    /**
927     * This sets the entry object to 'autosave' the loaded text file or not.
928     *
929     * @param obj The entry object
930     * @param autosave Autosave the loaded file or not
931     *
932     * @see elm_entry_file_set()
933     */
934    EAPI void         elm_entry_autosave_set(Evas_Object *obj, Eina_Bool autosave) EINA_ARG_NONNULL(1);
935
936    /**
937     * This gets the entry object's 'autosave' status.
938     *
939     * @param obj The entry object
940     * @return Autosave the loaded file or not
941     *
942     * @see elm_entry_file_set()
943     */
944    EAPI Eina_Bool    elm_entry_autosave_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
945
946    /**
947     * Control pasting of text and images for the widget.
948     *
949     * Normally the entry allows both text and images to be pasted.  By setting
950     * textonly to be true, this prevents images from being pasted.
951     *
952     * Note this only changes the behaviour of text.
953     *
954     * @param obj The entry object
955     * @param textonly paste mode - EINA_TRUE is text only, EINA_FALSE is
956     * text+image+other.
957     */
958    EAPI void         elm_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly) EINA_ARG_NONNULL(1);
959
960    /**
961     * Getting elm_entry text paste/drop mode.
962     *
963     * In textonly mode, only text may be pasted or dropped into the widget.
964     *
965     * @param obj The entry object
966     * @return If the widget only accepts text from pastes.
967     */
968    EAPI Eina_Bool    elm_entry_cnp_textonly_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
969
970    /**
971     * Enable or disable scrolling in entry
972     *
973     * Normally the entry is not scrollable unless you enable it with this call.
974     *
975     * @param obj The entry object
976     * @param scroll EINA_TRUE if it is to be scrollable, EINA_FALSE otherwise
977     */
978    EAPI void         elm_entry_scrollable_set(Evas_Object *obj, Eina_Bool scroll);
979
980    /**
981     * Get the scrollable state of the entry
982     *
983     * Normally the entry is not scrollable. This gets the scrollable state
984     * of the entry. See elm_entry_scrollable_set() for more information.
985     *
986     * @param obj The entry object
987     * @return The scrollable state
988     */
989    EAPI Eina_Bool    elm_entry_scrollable_get(const Evas_Object *obj);
990
991    /**
992     * This sets a widget to be displayed to the left of a scrolled entry.
993     *
994     * @param obj The scrolled entry object
995     * @param icon The widget to display on the left side of the scrolled
996     * entry.
997     *
998     * @note A previously set widget will be destroyed.
999     * @note If the object being set does not have minimum size hints set,
1000     * it won't get properly displayed.
1001     *
1002     * @see elm_entry_end_set()
1003     */
1004    EAPI void         elm_entry_icon_set(Evas_Object *obj, Evas_Object *icon);
1005
1006    /**
1007     * Gets the leftmost widget of the scrolled entry. This object is
1008     * owned by the scrolled entry and should not be modified.
1009     *
1010     * @param obj The scrolled entry object
1011     * @return the left widget inside the scroller
1012     */
1013    EAPI Evas_Object *elm_entry_icon_get(const Evas_Object *obj);
1014
1015    /**
1016     * Unset the leftmost widget of the scrolled entry, unparenting and
1017     * returning it.
1018     *
1019     * @param obj The scrolled entry object
1020     * @return the previously set icon sub-object of this entry, on
1021     * success.
1022     *
1023     * @see elm_entry_icon_set()
1024     */
1025    EAPI Evas_Object *elm_entry_icon_unset(Evas_Object *obj);
1026
1027    /**
1028     * Sets the visibility of the left-side widget of the scrolled entry,
1029     * set by elm_entry_icon_set().
1030     *
1031     * @param obj The scrolled entry object
1032     * @param setting EINA_TRUE if the object should be displayed,
1033     * EINA_FALSE if not.
1034     */
1035    EAPI void         elm_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting);
1036
1037    /**
1038     * This sets a widget to be displayed to the end of a scrolled entry.
1039     *
1040     * @param obj The scrolled entry object
1041     * @param end The widget to display on the right side of the scrolled
1042     * entry.
1043     *
1044     * @note A previously set widget will be destroyed.
1045     * @note If the object being set does not have minimum size hints set,
1046     * it won't get properly displayed.
1047     *
1048     * @see elm_entry_icon_set
1049     */
1050    EAPI void         elm_entry_end_set(Evas_Object *obj, Evas_Object *end);
1051
1052    /**
1053     * Gets the endmost widget of the scrolled entry. This object is owned
1054     * by the scrolled entry and should not be modified.
1055     *
1056     * @param obj The scrolled entry object
1057     * @return the right widget inside the scroller
1058     */
1059    EAPI Evas_Object *elm_entry_end_get(const Evas_Object *obj);
1060
1061    /**
1062     * Unset the endmost widget of the scrolled entry, unparenting and
1063     * returning it.
1064     *
1065     * @param obj The scrolled entry object
1066     * @return the previously set icon sub-object of this entry, on
1067     * success.
1068     *
1069     * @see elm_entry_icon_set()
1070     */
1071    EAPI Evas_Object *elm_entry_end_unset(Evas_Object *obj);
1072
1073    /**
1074     * Sets the visibility of the end widget of the scrolled entry, set by
1075     * elm_entry_end_set().
1076     *
1077     * @param obj The scrolled entry object
1078     * @param setting EINA_TRUE if the object should be displayed,
1079     * EINA_FALSE if not.
1080     */
1081    EAPI void         elm_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting);
1082
1083    /**
1084     * This sets the scrolled entry's scrollbar policy (ie. enabling/disabling
1085     * them).
1086     *
1087     * Setting an entry to single-line mode with elm_entry_single_line_set()
1088     * will automatically disable the display of scrollbars when the entry
1089     * moves inside its scroller.
1090     *
1091     * @param obj The scrolled entry object
1092     * @param h The horizontal scrollbar policy to apply
1093     * @param v The vertical scrollbar policy to apply
1094     */
1095    EAPI void         elm_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v);
1096
1097    /**
1098     * This enables/disables bouncing within the entry.
1099     *
1100     * This function sets whether the entry will bounce when scrolling reaches
1101     * the end of the contained entry.
1102     *
1103     * @param obj The scrolled entry object
1104     * @param h The horizontal bounce state
1105     * @param v The vertical bounce state
1106     */
1107    EAPI void         elm_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
1108
1109    /**
1110     * Get the bounce mode
1111     *
1112     * @param obj The Entry object
1113     * @param h_bounce Allow bounce horizontally
1114     * @param v_bounce Allow bounce vertically
1115     */
1116    EAPI void         elm_entry_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
1117
1118    /* pre-made filters for entries */
1119    /**
1120     * @typedef Elm_Entry_Filter_Limit_Size
1121     *
1122     * Data for the elm_entry_filter_limit_size() entry filter.
1123     */
1124    typedef struct _Elm_Entry_Filter_Limit_Size Elm_Entry_Filter_Limit_Size;
1125
1126    /**
1127     * @struct _Elm_Entry_Filter_Limit_Size
1128     *
1129     * Data for the elm_entry_filter_limit_size() entry filter.
1130     */
1131    struct _Elm_Entry_Filter_Limit_Size
1132      {
1133         int max_char_count; /**< The maximum number of characters allowed. */
1134         int max_byte_count; /**< The maximum number of bytes allowed*/
1135      };
1136
1137    /**
1138     * Filter inserted text based on user defined character and byte limits
1139     *
1140     * Add this filter to an entry to limit the characters that it will accept
1141     * based the the contents of the provided #Elm_Entry_Filter_Limit_Size.
1142     * The funtion works on the UTF-8 representation of the string, converting
1143     * it from the set markup, thus not accounting for any format in it.
1144     *
1145     * The user must create an #Elm_Entry_Filter_Limit_Size structure and pass
1146     * it as data when setting the filter. In it, it's possible to set limits
1147     * by character count or bytes (any of them is disabled if 0), and both can
1148     * be set at the same time. In that case, it first checks for characters,
1149     * then bytes.
1150     *
1151     * The function will cut the inserted text in order to allow only the first
1152     * number of characters that are still allowed. The cut is made in
1153     * characters, even when limiting by bytes, in order to always contain
1154     * valid ones and avoid half unicode characters making it in.
1155     *
1156     * This filter, like any others, does not apply when setting the entry text
1157     * directly with elm_object_text_set() (or the deprecated
1158     * elm_entry_entry_set()).
1159     */
1160    EAPI void         elm_entry_filter_limit_size(void *data, Evas_Object *entry, char **text) EINA_ARG_NONNULL(1, 2, 3);
1161
1162    /**
1163     * @typedef Elm_Entry_Filter_Accept_Set
1164     *
1165     * Data for the elm_entry_filter_accept_set() entry filter.
1166     */
1167    typedef struct _Elm_Entry_Filter_Accept_Set Elm_Entry_Filter_Accept_Set;
1168
1169    /**
1170     * @struct _Elm_Entry_Filter_Accept_Set
1171     *
1172     * Data for the elm_entry_filter_accept_set() entry filter.
1173     */
1174    struct _Elm_Entry_Filter_Accept_Set
1175      {
1176         const char *accepted; /**< Set of characters accepted in the entry. */
1177         const char *rejected; /**< Set of characters rejected from the entry. */
1178      };
1179
1180    /**
1181     * Filter inserted text based on accepted or rejected sets of characters
1182     *
1183     * Add this filter to an entry to restrict the set of accepted characters
1184     * based on the sets in the provided #Elm_Entry_Filter_Accept_Set.
1185     * This structure contains both accepted and rejected sets, but they are
1186     * mutually exclusive.
1187     *
1188     * The @c accepted set takes preference, so if it is set, the filter will
1189     * only work based on the accepted characters, ignoring anything in the
1190     * @c rejected value. If @c accepted is @c NULL, then @c rejected is used.
1191     *
1192     * In both cases, the function filters by matching utf8 characters to the
1193     * raw markup text, so it can be used to remove formatting tags.
1194     *
1195     * This filter, like any others, does not apply when setting the entry text
1196     * directly with elm_object_text_set() (or the deprecated
1197     * elm_entry_entry_set()).
1198     */
1199    EAPI void         elm_entry_filter_accept_set(void *data, Evas_Object *entry, char **text) EINA_ARG_NONNULL(1, 3);
1200    /**
1201     * Set the input panel layout of the entry
1202     *
1203     * @param obj The entry object
1204     * @param layout layout type
1205     */
1206    EAPI void elm_entry_input_panel_layout_set(Evas_Object *obj, Elm_Input_Panel_Layout layout) EINA_ARG_NONNULL(1);
1207
1208    /**
1209     * Get the input panel layout of the entry
1210     *
1211     * @param obj The entry object
1212     * @return layout type
1213     *
1214     * @see elm_entry_input_panel_layout_set
1215     */
1216    EAPI Elm_Input_Panel_Layout elm_entry_input_panel_layout_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
1217
1218    /**
1219     * Set the autocapitalization type on the immodule.
1220     *
1221     * @param obj The entry object
1222     * @param autocapital_type The type of autocapitalization
1223     */
1224    EAPI void         elm_entry_autocapital_type_set(Evas_Object *obj, Elm_Autocapital_Type autocapital_type) EINA_ARG_NONNULL(1);
1225
1226    /**
1227     * Retrieve the autocapitalization type on the immodule.
1228     *
1229     * @param obj The entry object
1230     * @return autocapitalization type
1231     */
1232    EAPI Elm_Autocapital_Type elm_entry_autocapital_type_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
1233
1234    /**
1235     * Sets the attribute to show the input panel automatically.
1236     *
1237     * @param obj The entry object
1238     * @param enabled If true, the input panel is appeared when entry is clicked or has a focus
1239     */
1240    EAPI void elm_entry_input_panel_enabled_set(Evas_Object *obj, Eina_Bool enabled) EINA_ARG_NONNULL(1);
1241
1242    /**
1243     * Retrieve the attribute to show the input panel automatically.
1244     *
1245     * @param obj The entry object
1246     * @return EINA_TRUE if input panel will be appeared when the entry is clicked or has a focus, EINA_FALSE otherwise
1247     */
1248    EAPI Eina_Bool elm_entry_input_panel_enabled_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
1249
1250    /**
1251     * @}
1252     */
1253