Elm: Added XXX to the sources. I'm against it, but raster asked nicely...
[framework/uifw/elementary.git] / src / lib / elc_ctxpopup.h
1 /**
2  * @defgroup Ctxpopup Ctxpopup
3  *
4  * @image html img/widget/ctxpopup/preview-00.png
5  * @image latex img/widget/ctxpopup/preview-00.eps
6  *
7  * @brief Context popup widget.
8  *
9  * A ctxpopup is a widget that, when shown, pops up a list of items.
10  * It automatically chooses an area inside its parent object's view
11  * (set via elm_ctxpopup_add() and elm_ctxpopup_hover_parent_set()) to
12  * optimally fit into it. In the default theme, it will also point an
13  * arrow to it's top left position at the time one shows it. Ctxpopup
14  * items have a label and/or an icon. It is intended for a small
15  * number of items (hence the use of list, not genlist).
16  *
17  * @note Ctxpopup is a specialization of @ref Hover.
18  *
19  * Signals that you can add callbacks for are:
20  * "dismissed" - the ctxpopup was dismissed
21  *
22  * Default content parts of the ctxpopup widget that you can use for are:
23  * @li "default" - A content of the ctxpopup
24  *
25  * Default content parts of the ctxpopup items that you can use for are:
26  * @li "icon" - An icon in the title area
27  *
28  * Default text parts of the ctxpopup items that you can use for are:
29  * @li "default" - Title label in the title area
30  *
31  * Supported elm_object common APIs.
32  * @li elm_object_part_content_set
33  * @li elm_object_part_content_get
34  * @li elm_object_part_content_unset
35  *
36  * Supported elm_object_item common APIs.
37  * @li elm_object_item_disabled_set
38  * @li elm_object_item_disabled_get
39  * @li elm_object_item_part_text_set
40  * @li elm_object_item_part_text_get
41  * @li elm_object_item_part_content_set
42  * @li elm_object_item_part_content_get
43  * @li elm_object_item_signal_emit
44  *
45  * @ref tutorial_ctxpopup shows the usage of a good deal of the API.
46  * @{
47  */
48
49 /* XXX: Kinda internal, but relevant for the theme: use elm_scroller and not els_scroller. */
50
51 typedef enum
52 {
53    ELM_CTXPOPUP_DIRECTION_DOWN, /**< ctxpopup show appear below clicked area */
54    ELM_CTXPOPUP_DIRECTION_RIGHT, /**< ctxpopup show appear to the right of the clicked area */
55    ELM_CTXPOPUP_DIRECTION_LEFT, /**< ctxpopup show appear to the left of the clicked area */
56    ELM_CTXPOPUP_DIRECTION_UP, /**< ctxpopup show appear above the clicked area */
57    ELM_CTXPOPUP_DIRECTION_UNKNOWN, /**< ctxpopup does not determine it's direction yet*/
58 } Elm_Ctxpopup_Direction; /**< Direction in which to show the popup */
59
60 /**
61  * @brief Add a new Ctxpopup object to the parent.
62  *
63  * @param parent Parent object
64  * @return New object or @c NULL, if it cannot be created
65  *
66  * @ingroup Ctxpopup
67  */
68 EAPI Evas_Object                 *elm_ctxpopup_add(Evas_Object *parent);
69
70 /**
71  * @brief Set the Ctxpopup's parent
72  *
73  * @param obj The ctxpopup object
74  * @param parent The parent to use
75  *
76  * Set the parent object.
77  *
78  * @note elm_ctxpopup_add() will automatically call this function
79  * with its @c parent argument.
80  *
81  * @see elm_ctxpopup_add()
82  * @see elm_hover_parent_set()
83  *
84  * @ingroup Ctxpopup
85  */
86 EAPI void                         elm_ctxpopup_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
87
88 /**
89  * @brief Get the Ctxpopup's parent
90  *
91  * @param obj The ctxpopup object
92  *
93  * @see elm_ctxpopup_hover_parent_set() for more information
94  *
95  * @ingroup Ctxpopup
96  */
97 EAPI Evas_Object                 *elm_ctxpopup_hover_parent_get(const Evas_Object *obj);
98
99 /**
100  * @brief Clear all items in the given ctxpopup object.
101  *
102  * @param obj Ctxpopup object
103  *
104  * @ingroup Ctxpopup
105  */
106 EAPI void                         elm_ctxpopup_clear(Evas_Object *obj);
107
108 /**
109  * @brief Change the ctxpopup's orientation to horizontal or vertical.
110  *
111  * @param obj Ctxpopup object
112  * @param horizontal @c EINA_TRUE for horizontal mode, @c EINA_FALSE for vertical
113  *
114  * @ingroup Ctxpopup
115  */
116 EAPI void                         elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal);
117
118 /**
119  * @brief Get the value of current ctxpopup object's orientation.
120  *
121  * @param obj Ctxpopup object
122  * @return @c EINA_TRUE for horizontal mode, @c EINA_FALSE for vertical mode (or errors)
123  *
124  * @see elm_ctxpopup_horizontal_set()
125  *
126  * @ingroup Ctxpopup
127  */
128 EAPI Eina_Bool                    elm_ctxpopup_horizontal_get(const Evas_Object *obj);
129
130 /**
131  * @brief Add a new item to a ctxpopup object.
132  *
133  * @param obj Ctxpopup object
134  * @param icon Icon to be set on new item
135  * @param label The Label of the new item
136  * @param func Convenience function called when item selected
137  * @param data Data passed to @p func
138  * @return A handle to the item added or @c NULL, on errors
139  *
140  * @warning Ctxpopup can't hold both an item list and a content at the same
141  * time. When an item is added, any previous content will be removed.
142  *
143  * @see elm_object_content_set()
144  *
145  * @ingroup Ctxpopup
146  */
147 EAPI Elm_Object_Item             *elm_ctxpopup_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data);
148
149 /**
150  * @brief Set the direction priority of a ctxpopup.
151  *
152  * @param obj Ctxpopup object
153  * @param first 1st priority of direction
154  * @param second 2nd priority of direction
155  * @param third 3th priority of direction
156  * @param fourth 4th priority of direction
157  *
158  * This functions gives a chance to user to set the priority of ctxpopup
159  * showing direction. This doesn't guarantee the ctxpopup will appear in the
160  * requested direction.
161  *
162  * @see Elm_Ctxpopup_Direction
163  *
164  * @ingroup Ctxpopup
165  */
166 EAPI void                         elm_ctxpopup_direction_priority_set(Evas_Object *obj, Elm_Ctxpopup_Direction first, Elm_Ctxpopup_Direction second, Elm_Ctxpopup_Direction third, Elm_Ctxpopup_Direction fourth);
167
168 /**
169  * @brief Get the direction priority of a ctxpopup.
170  *
171  * @param obj Ctxpopup object
172  * @param first 1st priority of direction to be returned
173  * @param second 2nd priority of direction to be returned
174  * @param third 3th priority of direction to be returned
175  * @param fourth 4th priority of direction to be returned
176  *
177  * @see elm_ctxpopup_direction_priority_set() for more information.
178  *
179  * @ingroup Ctxpopup
180  */
181 EAPI void                         elm_ctxpopup_direction_priority_get(Evas_Object *obj, Elm_Ctxpopup_Direction *first, Elm_Ctxpopup_Direction *second, Elm_Ctxpopup_Direction *third, Elm_Ctxpopup_Direction *fourth);
182
183 /**
184  * @brief Get the current direction of a ctxpopup.
185  *
186  * @param obj Ctxpopup object
187  * @return current direction of a ctxpopup
188  *
189  * @warning Once the ctxpopup showed up, the direction would be determined
190  *
191  * @ingroup Ctxpopup
192  */
193 EAPI Elm_Ctxpopup_Direction       elm_ctxpopup_direction_get(const Evas_Object *obj);
194
195 /**
196  * @}
197  */