5e76aeb54560b6f39e109b2b0d244b33c68c2956
[framework/uifw/elementary.git] / src / lib / elm_general.h
1 /**
2  * @defgroup General General
3  *
4  * @brief General Elementary API. Functions that don't relate to
5  * Elementary objects specifically.
6  *
7  * Here are documented functions which init/shutdown the library,
8  * that apply to generic Elementary objects, that deal with
9  * configuration, et cetera.
10  *
11  * @ref general_functions_example_page "This" example contemplates
12  * some of these functions.
13  */
14
15 /**
16  * @addtogroup General
17  * @{
18  */
19
20 /**
21  * Defines couple of standard Evas_Object layers to be used
22  * with evas_object_layer_set().
23  *
24  * @note whenever extending with new values, try to keep some padding
25  *       to siblings so there is room for further extensions.
26  */
27 typedef enum _Elm_Object_Layer
28 {
29    ELM_OBJECT_LAYER_BACKGROUND = EVAS_LAYER_MIN + 64, /**< where to place backgrounds */
30    ELM_OBJECT_LAYER_DEFAULT = 0, /**< Evas_Object default layer (and thus for Elementary) */
31    ELM_OBJECT_LAYER_FOCUS = EVAS_LAYER_MAX - 128, /**< where focus object visualization is */
32    ELM_OBJECT_LAYER_TOOLTIP = EVAS_LAYER_MAX - 64, /**< where to show tooltips */
33    ELM_OBJECT_LAYER_CURSOR = EVAS_LAYER_MAX - 32, /**< where to show cursors */
34    ELM_OBJECT_LAYER_LAST /**< last layer known by Elementary */
35 } Elm_Object_Layer;
36
37 /**************************************************************************/
38 EAPI extern int ELM_ECORE_EVENT_ETHUMB_CONNECT;
39
40 /**
41  * Emitted when the application has reconfigured elementary settings due
42  * to an external configuration tool asking it to.
43  */
44 EAPI extern int ELM_EVENT_CONFIG_ALL_CHANGED;
45
46 /**
47  * Emitted when any Elementary's policy value is changed.
48  */
49 EAPI extern int ELM_EVENT_POLICY_CHANGED;
50
51 /**
52  * @typedef Elm_Event_Policy_Changed
53  *
54  * Data on the event when an Elementary policy has changed
55  */
56 typedef struct _Elm_Event_Policy_Changed Elm_Event_Policy_Changed;
57
58 /**
59  * @struct _Elm_Event_Policy_Changed
60  *
61  * Data on the event when an Elementary policy has changed
62  */
63 struct _Elm_Event_Policy_Changed
64 {
65    unsigned int policy; /**< the policy identifier */
66    int          new_value; /**< value the policy had before the change */
67    int          old_value; /**< new value the policy got */
68 };
69
70 /**
71  * Policy identifiers.
72  */
73 typedef enum _Elm_Policy
74 {
75    ELM_POLICY_QUIT, /**< under which circumstances the application
76                      * should quit automatically. @see
77                      * Elm_Policy_Quit.
78                      */
79    ELM_POLICY_LAST
80 } Elm_Policy; /**< Elementary policy identifiers/groups enumeration.  @see elm_policy_set() */
81
82 typedef enum _Elm_Policy_Quit
83 {
84    ELM_POLICY_QUIT_NONE = 0, /**< never quit the application
85                               * automatically */
86    ELM_POLICY_QUIT_LAST_WINDOW_CLOSED /**< quit when the
87                                        * application's last
88                                        * window is closed */
89 } Elm_Policy_Quit; /**< Possible values for the #ELM_POLICY_QUIT policy */
90
91 typedef enum _Elm_Focus_Direction
92 {
93    ELM_FOCUS_PREVIOUS,
94    ELM_FOCUS_NEXT
95 } Elm_Focus_Direction;
96
97 /**
98  * @typedef Elm_Object_Item
99  * An Elementary Object item handle.
100  * @ingroup General
101  */
102 typedef struct _Elm_Object_Item Elm_Object_Item;
103
104 typedef Eina_Bool             (*Elm_Event_Cb)(void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); /**< Function prototype definition for callbacks on input events happening on Elementary widgets. @a data will receive the user data pointer passed to elm_object_event_callback_add(). @a src will be a pointer to the widget on which the input event took place. @a type will get the type of this event and @a event_info, the struct with details on this event. */
105
106 #ifndef ELM_LIB_QUICKLAUNCH
107 #define ELM_MAIN() int main(int argc, char **argv) {elm_init(argc, argv); return elm_main(argc, argv); } /**< macro to be used after the elm_main() function */
108 #else
109 #define ELM_MAIN() int main(int argc, char **argv) {return elm_quicklaunch_fallback(argc, argv); } /**< macro to be used after the elm_main() function */
110 #endif
111
112 /**************************************************************************/
113 /* General calls */
114
115 /**
116  * Initialize Elementary
117  *
118  * @param[in] argc System's argument count value
119  * @param[in] argv System's pointer to array of argument strings
120  * @return The init counter value.
121  *
122  * This function initializes Elementary and increments a counter of
123  * the number of calls to it. It returns the new counter's value.
124  *
125  * @warning This call is exported only for use by the @c ELM_MAIN()
126  * macro. There is no need to use this if you use this macro (which
127  * is highly advisable). An elm_main() should contain the entry
128  * point code for your application, having the same prototype as
129  * elm_init(), and @b not being static (putting the @c EAPI symbol
130  * in front of its type declaration is advisable). The @c
131  * ELM_MAIN() call should be placed just after it.
132  *
133  * Example:
134  * @dontinclude bg_example_01.c
135  * @skip static void
136  * @until ELM_MAIN
137  *
138  * See the full @ref bg_example_01_c "example".
139  *
140  * @see elm_shutdown().
141  * @ingroup General
142  */
143 EAPI int       elm_init(int argc, char **argv);
144
145 /**
146  * Shut down Elementary
147  *
148  * @return The init counter value.
149  *
150  * This should be called at the end of your application, just
151  * before it ceases to do any more processing. This will clean up
152  * any permanent resources your application may have allocated via
153  * Elementary that would otherwise persist.
154  *
155  * @see elm_init() for an example
156  *
157  * @ingroup General
158  */
159 EAPI int       elm_shutdown(void);
160
161 /**
162  * Run Elementary's main loop
163  *
164  * This call should be issued just after all initialization is
165  * completed. This function will not return until elm_exit() is
166  * called. It will keep looping, running the main
167  * (event/processing) loop for Elementary.
168  *
169  * @see elm_init() for an example
170  *
171  * @ingroup General
172  */
173 EAPI void      elm_run(void);
174
175 /**
176  * Exit Elementary's main loop
177  *
178  * If this call is issued, it will flag the main loop to cease
179  * processing and return back to its parent function (usually your
180  * elm_main() function).
181  *
182  * @see elm_init() for an example. There, just after a request to
183  * close the window comes, the main loop will be left.
184  *
185  * @note By using the appropriate #ELM_POLICY_QUIT on your Elementary
186  * applications, you'll be able to get this function called automatically for you.
187  *
188  * @ingroup General
189  */
190 EAPI void      elm_exit(void);
191
192 /**
193  * Exposed symbol used only by macros and should not be used by apps
194  */
195 EAPI void      elm_quicklaunch_mode_set(Eina_Bool ql_on);
196
197 /**
198  * Exposed symbol used only by macros and should not be used by apps
199  */
200 EAPI Eina_Bool elm_quicklaunch_mode_get(void);
201
202 /**
203  * Exposed symbol used only by macros and should not be used by apps
204  */
205 EAPI int       elm_quicklaunch_init(int argc, char **argv);
206
207 /**
208  * Exposed symbol used only by macros and should not be used by apps
209  */
210 EAPI int       elm_quicklaunch_sub_init(int argc, char **argv);
211
212 /**
213  * Exposed symbol used only by macros and should not be used by apps
214  */
215 EAPI int       elm_quicklaunch_sub_shutdown(void);
216
217 /**
218  * Exposed symbol used only by macros and should not be used by apps
219  */
220 EAPI int       elm_quicklaunch_shutdown(void);
221
222 /**
223  * Exposed symbol used only by macros and should not be used by apps
224  */
225 EAPI void      elm_quicklaunch_seed(void);
226
227 /**
228  * Exposed symbol used only by macros and should not be used by apps
229  */
230 EAPI Eina_Bool elm_quicklaunch_prepare(int argc, char **argv);
231
232 /**
233  * Exposed symbol used only by macros and should not be used by apps
234  */
235 EAPI Eina_Bool elm_quicklaunch_fork(int argc, char **argv, char *cwd, void (postfork_func) (void *data), void *postfork_data);
236
237 /**
238  * Exposed symbol used only by macros and should not be used by apps
239  */
240 EAPI void      elm_quicklaunch_cleanup(void);
241
242 /**
243  * Exposed symbol used only by macros and should not be used by apps
244  */
245 EAPI int       elm_quicklaunch_fallback(int argc, char **argv);
246
247 /**
248  * Exposed symbol used only by macros and should not be used by apps
249  */
250 EAPI char     *elm_quicklaunch_exe_path_get(const char *exe);
251
252 /**
253  * Set a new policy's value (for a given policy group/identifier).
254  *
255  * @param policy policy identifier, as in @ref Elm_Policy.
256  * @param value policy value, which depends on the identifier
257  *
258  * @return @c EINA_TRUE on success or @c EINA_FALSE, on error.
259  *
260  * Elementary policies define applications' behavior,
261  * somehow. These behaviors are divided in policy groups (see
262  * #Elm_Policy enumeration). This call will emit the Ecore event
263  * #ELM_EVENT_POLICY_CHANGED, which can be hooked at with
264  * handlers. An #Elm_Event_Policy_Changed struct will be passed,
265  * then.
266  *
267  * @note Currently, we have only one policy identifier/group
268  * (#ELM_POLICY_QUIT), which has two possible values.
269  *
270  * @ingroup General
271  */
272 EAPI Eina_Bool elm_policy_set(unsigned int policy, int value);
273
274 /**
275  * Gets the policy value for given policy identifier.
276  *
277  * @param policy policy identifier, as in #Elm_Policy.
278  * @return The currently set policy value, for that
279  * identifier. Will be @c 0 if @p policy passed is invalid.
280  *
281  * @ingroup General
282  */
283 EAPI int       elm_policy_get(unsigned int policy);
284
285 /**
286  * Change the language of the current application
287  *
288  * The @p lang passed must be the full name of the locale to use, for
289  * example "en_US.utf8" or "es_ES@euro".
290  *
291  * Changing language with this function will make Elementary run through
292  * all its widgets, translating strings set with
293  * elm_object_domain_translatable_text_part_set(). This way, an entire
294  * UI can have its language changed without having to restart the program.
295  *
296  * For more complex cases, like having formatted strings that need
297  * translation, widgets will also emit a "language,changed" signal that
298  * the user can listen to to manually translate the text.
299  *
300  * @param lang Language to set, must be the full name of the locale
301  *
302  * @ingroup General
303  */
304 EAPI void      elm_language_set(const char *lang);
305
306 /**
307  * Set the text for an objects' part, marking it as translatable.
308  *
309  * The string to set as @p text must be the original one. Do not pass the
310  * return of @c gettext() here. Elementary will translate the string
311  * internally and set it on the object using elm_object_part_text_set(),
312  * also storing the original string so that it can be automatically
313  * translated when the language is changed with elm_language_set().
314  *
315  * The @p domain will be stored along to find the translation in the
316  * correct catalog. It can be NULL, in which case it will use whatever
317  * domain was set by the application with @c textdomain(). This is useful
318  * in case you are building a library on top of Elementary that will have
319  * its own translatable strings, that should not be mixed with those of
320  * programs using the library.
321  *
322  * @param obj The object containing the text part
323  * @param part The name of the part to set
324  * @param domain The translation domain to use
325  * @param text The original, non-translated text to set
326  *
327  * @ingroup General
328  */
329 EAPI void      elm_object_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text);
330
331 #define elm_object_domain_translatable_text_set(obj, domain, text) elm_object_domain_translatable_text_part_set((obj), NULL, (domain), (text))
332
333 #define elm_object_translatable_text_set(obj, text)                elm_object_domain_translatable_text_part_set((obj), NULL, NULL, (text))
334
335 /**
336  * Gets the original string set as translatable for an object
337  *
338  * When setting translated strings, the function elm_object_part_text_get()
339  * will return the translation returned by @c gettext(). To get the
340  * original string use this function.
341  *
342  * @param obj The object
343  * @param part The name of the part that was set
344  *
345  * @return The original, untranslated string
346  *
347  * @ingroup General
348  */
349 EAPI const char *elm_object_translatable_text_part_get(const Evas_Object *obj, const char *part);
350
351 #define elm_object_translatable_text_get(obj) elm_object_translatable_text_part_get((obj), NULL)
352
353 /**
354  * @}
355  */