/** * @defgroup Edje_External_Part_Group Edje Use of External Parts * * @brief Functions to manipulate parts of type EXTERNAL. * * Edje supports parts of type EXTERNAL, which will call plugins defined by the user * to create and manipulate the object that's allocated in that part. * * Parts of type external may carry extra properties that have meanings defined * by the external plugin. For instance, it may be a string that defines a button * label and setting this property will change that label on the fly. * * @ingroup Edje_External_Group * * @{ */ /** * @brief Get the object created by this external part. * * Parts of type external creates the part object using information * provided by external plugins. It's somehow like "swallow" * (edje_object_part_swallow()), but it's all set automatically. * * This function returns the part created by such external plugins and * being currently managed by this Edje. * * @note Almost all swallow rules apply: you should not move, resize, * hide, show, set the color or clipper of such part. It's a bit * more restrictive as one must @b never delete this object! * * @param obj A valid Evas_Object handle * @param part The part name * @return The externally created object, or NULL if there is none or * part is not an external. */ EAPI Evas_Object *edje_object_part_external_object_get (const Evas_Object *obj, const char *part); /** * @brief Set the parameter for the external part. * * Parts of type external may carry extra properties that have * meanings defined by the external plugin. For instance, it may be a * string that defines a button label and setting this property will * change that label on the fly. * * @note external parts have parameters set when they change * states. Those parameters will never be changed by this * function. The interpretation of how state_set parameters and * param_set will interact is up to the external plugin. * * @note this function will not check if parameter value is valid * using #Edje_External_Param_Info minimum, maximum, valid * choices and others. However these should be checked by the * underlying implementation provided by the external * plugin. This is done for performance reasons. * * @param obj A valid Evas_Object handle * @param part The part name * @param param the parameter details, including its name, type and * actual value. This pointer should be valid, and the * parameter must exist in * #Edje_External_Type::parameters_info, with the exact type, * otherwise the operation will fail and @c EINA_FALSE will be * returned. * * @return @c EINA_TRUE if everything went fine, @c EINA_FALSE on errors. */ EAPI Eina_Bool edje_object_part_external_param_set (Evas_Object *obj, const char *part, const Edje_External_Param *param); /** * @brief Get the parameter for the external part. * * Parts of type external may carry extra properties that have * meanings defined by the external plugin. For instance, it may be a * string that defines a button label. This property can be modified by * state parameters, by explicit calls to * edje_object_part_external_param_set() or getting the actual object * with edje_object_part_external_object_get() and calling native * functions. * * This function asks the external plugin what is the current value, * independent on how it was set. * * @param obj A valid Evas_Object handle * @param part The part name * @param param the parameter details. It is used as both input and * output variable. This pointer should be valid, and the * parameter must exist in * #Edje_External_Type::parameters_info, with the exact type, * otherwise the operation will fail and @c EINA_FALSE will be * returned. * * @return @c EINA_TRUE if everything went fine and @p param members * are filled with information, @c EINA_FALSE on errors and @p * param member values are not set or valid. */ EAPI Eina_Bool edje_object_part_external_param_get (const Evas_Object *obj, const char *part, Edje_External_Param *param); /** * @brief Get an object contained in an part of type EXTERNAL * * The @p content string must not be NULL. Its actual value depends on the * code providing the EXTERNAL. * * @param obj The Edje object * @param part The name of the part holding the EXTERNAL * @param content A string identifying which content from the EXTERNAL to get */ EAPI Evas_Object *edje_object_part_external_content_get (const Evas_Object *obj, const char *part, const char *content); /** * Facility to query the type of the given parameter of the given part. * * @param obj A valid Evas_Object handle * @param part The part name * @param param the parameter name to use. * * @return @c EDJE_EXTERNAL_PARAM_TYPE_MAX on errors, or another value * from #Edje_External_Param_Type on success. */ EAPI Edje_External_Param_Type edje_object_part_external_param_type_get (const Evas_Object *obj, const char *part, const char *param); /** * @} */ /** * @ingroup Edje_Object_Geometry_Group * * @{ */ /** * @brief Get the minimum size specified -- as an EDC property -- for a * given Edje object * * @param obj A handle to an Edje object * @param minw Pointer to a variable where to store the minimum width * @param minh Pointer to a variable where to store the minimum height * * This function retrieves the @p obj object's minimum size values, * as declared in its EDC group definition. Minimum size of * groups have the following syntax * @code * collections { * group { * name: "a_group"; * min: 100 100; * } * } * @endcode * * where one declares a minimum size of 100 pixels both for width and * height. Those are (hint) values which should be respected when the * given object/group is to be controlled by a given container object * (e.g. an Edje object being "swallowed" into a given @c SWALLOW * typed part, as in edje_object_part_swallow()). Check the complete * @ref edcref "syntax reference" for EDC files. * * @note If the @c min EDC property was not declared for @p obj, this * call will return the value 0, for each axis. * * @note On failure, this function will make all non-@c NULL size * pointers' pointed variables be set to zero. * * @see edje_object_size_max_get() */ EAPI void edje_object_size_min_get (const Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh); /** * @brief Edje will automatically update the size hints on itself. * * @param obj A handle to an Edje object. * @param update Wether or not update the size hints. * * By default edje doesn't set size hints on itself. With this function * call, it will do so if update is true. Be carefully, it cost a lot to * trigger this feature as it will recalc the object every time it make * sense to be sure that's its minimal size hint is always accurate. */ EAPI void edje_object_update_hints_set(Evas_Object *obj, Eina_Bool update); /** * @brief Wether or not Edje will update size hints on itself. * * @param obj A handle to an Edje object. * @return @c true if does, @c false if it doesn't. */ EAPI Eina_Bool edje_object_update_hints_get(Evas_Object *obj); /** * @brief Get the maximum size specified -- as an EDC property -- for a * given Edje object * * @param obj A handle to an Edje object * @param maxw Pointer to a variable where to store the maximum width * @param maxh Pointer to a variable where to store the maximum height * * This function retrieves the @p obj object's maximum size values, * as declared in its EDC group definition. Maximum size of * groups have the following syntax * @code * collections { * group { * name: "a_group"; * max: 100 100; * } * } * @endcode * * where one declares a maximum size of 100 pixels both for width and * height. Those are (hint) values which should be respected when the * given object/group is to be controlled by a given container object * (e.g. an Edje object being "swallowed" into a given @c SWALLOW * typed part, as in edje_object_part_swallow()). Check the complete * @ref edcref "syntax reference" for EDC files. * * @note If the @c max EDC property was not declared for @p obj, this * call will return the maximum size a given Edje object may have, for * each axis. * * @note On failure, this function will make all non-@c NULL size * pointers' pointed variables be set to zero. * * @see edje_object_size_min_get() */ EAPI void edje_object_size_max_get (const Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh); /** * @brief Force a Size/Geometry calculation. * * @param obj A valid Evas_Object handle * * Forces the object @p obj to recalculation layout regardless of * freeze/thaw. */ EAPI void edje_object_calc_force (Evas_Object *obj); /** * @brief Calculate the minimum required size for a given Edje object. * * @param obj A handle to an Edje object * @param minw Pointer to a variable where to store the minimum * required width * @param minh Pointer to a variable where to store the minimum * required height * * This call works exactly as edje_object_size_min_restricted_calc(), * with the last two arguments set to 0. Please refer to its * documentation, then. */ EAPI void edje_object_size_min_calc (Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh); /** * Calculate the geometry of the region, relative to a given Edje * object's area, occupied by all parts in the object * * @param obj A handle to an Edje object * @param x A pointer to a variable where to store the parts region's * x coordinate * @param y A pointer to a variable where to store the parts region's * y coordinate * @param w A pointer to a variable where to store the parts region's * width * @param h A pointer to a variable where to store the parts region's * height * * This function gets the geometry of the rectangle equal to the area * required to group all parts in @p obj's group/collection. The @p x * and @p y coordinates are relative to the top left corner of the * whole @p obj object's area. Parts placed out of the group's * boundaries will also be taken in account, so that @p x and @p y * may be negative. * * @note Use @c NULL pointers on the geometry components you're not * interested in: they'll be ignored by the function. * * @note On failure, this function will make all non-@c NULL geometry * pointers' pointed variables be set to zero. */ EAPI Eina_Bool edje_object_parts_extends_calc (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); /** * @brief Calculate the minimum required size for a given Edje object. * * @param obj A handle to an Edje object * @param minw Pointer to a variable where to store the minimum * required width * @param minh Pointer to a variable where to store the minimum * required height * @param restrictedw Do not allow object's calculated (minimum) width * to be less than this value * @param restrictedh Do not allow object's calculated (minimum) * height to be less than this value * * This call will trigger an internal recalculation of all parts of * the @p obj object, in order to return its minimum required * dimensions for width and height. The user might choose to @b impose * those minimum sizes, making the resulting calculation to get to values * equal or bigger than @p restrictedw and @p restrictedh, for width and * height, respectively. * * @note At the end of this call, @p obj @b won't be automatically * resized to new dimensions, but just return the calculated * sizes. The caller is the one up to change its geometry or not. * * @warning Be advised that invisible parts in @p obj @b will be taken * into account in this calculation. */ EAPI void edje_object_size_min_restricted_calc(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh, Evas_Coord restrictedw, Evas_Coord restrictedh); /** * @} */ /** * @ingroup Edje_Object_Scale * * @{ */ /** * @brief Set the scaling factor for a given Edje object. * * @param obj A handle to an Edje object * @param scale The scaling factor (the default value is @c 0.0, * meaning individual scaling @b not set) * * This function sets an @b individual scaling factor on the @a obj * Edje object. This property (or Edje's global scaling factor, when * applicable), will affect this object's part sizes. If @p scale is * not zero, than the individual scaling will @b override any global * scaling set, for the object @p obj's parts. Put it back to zero to * get the effects of the global scaling again. * * @warning Only parts which, at EDC level, had the @c "scale" * property set to @c 1, will be affected by this function. Check the * complete @ref edcref "syntax reference" for EDC files. * * @see edje_object_scale_get() * @see edje_scale_get() for more details */ EAPI Eina_Bool edje_object_scale_set (Evas_Object *obj, double scale); /** * @brief Get a given Edje object's scaling factor. * * @param obj A handle to an Edje object * * This function returns the @c individual scaling factor set on the * @a obj Edje object. * * @see edje_object_scale_set() for more details * */ EAPI double edje_object_scale_get (const Evas_Object *obj); /** * @} */ /** * @ingroup Edje_Object_Part * * @{ */ /** * @brief Check if an Edje part exists in a given Edje object's group * definition. * * @param obj A handle to an Edje object * @param part The part's name to check for existence in @p obj's * group * @return @c EINA_TRUE, if the Edje part exists in @p obj's group or * @c EINA_FALSE, otherwise (and on errors) * * This function returns if a given part exists in the Edje group * bound to object @p obj (with edje_object_file_set()). * * This call is useful, for example, when one could expect or not a * given GUI element, depending on the @b theme applied to @p obj. */ EAPI Eina_Bool edje_object_part_exists (const Evas_Object *obj, const char *part); /** * @brief Get a handle to the Evas object implementing a given Edje * part, in an Edje object. * * @param obj A handle to an Edje object * @param part The Edje part's name * @return A pointer to the Evas object implementing the given part, * or @c NULL on failure (e.g. the given part doesn't exist) * * This function gets a pointer of the Evas object corresponding to a * given part in the @p obj object's group. * * You should @b never modify the state of the returned object (with * @c evas_object_move() or @c evas_object_hide() for example), * because it's meant to be managed by Edje, solely. You are safe to * query information about its current state (with @c * evas_object_visible_get() or @c evas_object_color_get() for * example), though. */ EAPI const Evas_Object *edje_object_part_object_get (const Evas_Object *obj, const char *part); /** * @brief Retrieve the geometry of a given Edje part, in a given Edje * object's group definition, relative to the object's area * * @param obj A handle to an Edje object * @param part The Edje part's name * @param x A pointer to a variable where to store the part's x * coordinate * @param y A pointer to a variable where to store the part's y * coordinate * @param w A pointer to a variable where to store the part's width * @param h A pointer to a variable where to store the part's height * * This function gets the geometry of an Edje part within its * group. The @p x and @p y coordinates are relative to the top left * corner of the whole @p obj object's area. * * @note Use @c NULL pointers on the geometry components you're not * interested in: they'll be ignored by the function. * * @note On failure, this function will make all non-@c NULL geometry * pointers' pointed variables be set to zero. */ EAPI Eina_Bool edje_object_part_geometry_get (const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); /** * @brief Retrieve a list all accessibility part names * * @param obj A valid Evas_Object handle * @return A list all accessibility part names on @p obj * @since 1.7.0 */ EAPI Eina_List *edje_object_access_part_list_get (const Evas_Object *obj); /** * @} */ /** * @ingroup Edje_Part_Text * * @{ */ /** * @brief Set the object text callback. * * @param obj A valid Evas_Object handle * @param func The callback function to handle the text change * @param data The data associated to the callback function. * * This function sets the callback to be called when the text changes. */ EAPI void edje_object_text_change_cb_set (Evas_Object *obj, Edje_Text_Change_Cb func, void *data); /** * @brief Sets the text for an object part * * @param obj A valid Evas Object handle * @param part The part name * @param text The text string * * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise */ EAPI Eina_Bool edje_object_part_text_set (Evas_Object *obj, const char *part, const char *text); /** * @brief Sets the text for an object part, but converts HTML escapes to UTF8 * * This converts the given string @p text to UTF8 assuming it contains HTML * style escapes like "&" and "©" etc. IF the part is of type TEXT, * as opposed to TEXTBLOCK. * * @param obj A valid Evas Object handle * @param part The part name * @param text The text string * * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise * * @since 1.2 */ EAPI Eina_Bool edje_object_part_text_escaped_set (Evas_Object *obj, const char *part, const char *text); /** * @brief Return the text of the object part. * * @param obj A valid Evas_Object handle * @param part The part name * * @return The text string * * This function returns the text associated to the object part. * * @see edje_object_part_text_set(). */ EAPI const char *edje_object_part_text_get (const Evas_Object *obj, const char *part); /** * @brief Set the style of the * * @param obj A valid Evas_Object handle * @param part The part name * @param style The style to set (textblock conventions). * * This function sets the style associated with the textblock part. * * @since 1.2.0 */ EAPI void edje_object_part_text_style_user_push(Evas_Object *obj, const char *part, const char *style); /** * @brief Return the text of the object part. * * @param obj A valid Evas_Object handle * @param part The part name * * @return The text string * * This function returns the style associated with the textblock part. * * @since 1.2.0 */ EAPI const char *edje_object_part_text_style_user_peek(const Evas_Object *obj, const char *part); /** * @brief Delete the top style form the user style stack. * * @param obj A valid Evas_Object handle * @param part The part name * * @since 1.2.0 */ EAPI void edje_object_part_text_style_user_pop(Evas_Object *obj, const char *part); /** * @brief Sets the raw (non escaped) text for an object part. * * @param obj A valid Evas Object handle * @param part The part name * @param text_to_escape The text string * * This funciton will not do escape for you if it is a TEXTBLOCK part, that is, * if text contain tags, these tags will not be interpreted/parsed by TEXTBLOCK. * * @see edje_object_part_text_unescaped_get(). */ EAPI Eina_Bool edje_object_part_text_unescaped_set (Evas_Object *obj, const char *part, const char *text_to_escape); /** * @brief Returns the text of the object part, without escaping. * * @param obj A valid Evas_Object handle * @param part The part name * @return The @b allocated text string without escaping, or NULL on * problems. * * This function is the counterpart of * edje_object_part_text_unescaped_set(). Please notice that the * result is newly allocated memory and should be released with free() * when done. * * @see edje_object_part_text_unescaped_set(). */ EAPI char *edje_object_part_text_unescaped_get (const Evas_Object *obj, const char *part); /** * @brief Insert text for an object part. * * @param obj A valid Evas Object handle * @param part The part name * @param text The text string * * This function inserts the text for an object part just before the * cursor position. * */ EAPI void edje_object_part_text_insert (Evas_Object *obj, const char *part, const char *text); /** * @brief Insert text for an object part. * * @param obj A valid Evas Object handle * @param part The part name * @param text The text string * * This function inserts the text for an object part at the end; It does not * move the cursor. * * @since 1.1 */ EAPI void edje_object_part_text_append(Evas_Object *obj, const char *part, const char *text); /** * @brief Return a list of char anchor names. * * @param obj A valid Evas_Object handle * @param part The part name * * @return The list of anchors (const char *), do not modify! * * This function returns a list of char anchor names. * */ EAPI const Eina_List *edje_object_part_text_anchor_list_get (const Evas_Object *obj, const char *part); /** * @brief Return a list of Evas_Textblock_Rectangle anchor rectangles. * * @param obj A valid Evas_Object handle * @param part The part name * @param anchor The anchor name * * @return The list of anchor rects (const Evas_Textblock_Rectangle * *), do not modify! Geometry is relative to entry part. * * This function return a list of Evas_Textblock_Rectangle anchor * rectangles. * */ EAPI const Eina_List *edje_object_part_text_anchor_geometry_get (const Evas_Object *obj, const char *part, const char *anchor); /** * @brief Return a list of char item names. * * @param obj A valid Evas_Object handle * @param part The part name * * @return The list of items (const char *), do not modify! * * This function returns a list of char item names. * */ EAPI const Eina_List *edje_object_part_text_item_list_get (const Evas_Object *obj, const char *part); /** * @brief Return item geometry. * * @param obj A valid Evas_Object handle * @param part The part name * @param item The item name * @param cx Item x return (relative to entry part) * @param cy Item y return (relative to entry part) * @param cw Item width return * @param ch Item height return * * @return 1 if item exists, 0 if not * * This function return a list of Evas_Textblock_Rectangle item * rectangles. * */ EAPI Eina_Bool edje_object_part_text_item_geometry_get (const Evas_Object *obj, const char *part, const char *item, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch); /** * @brief This function inserts text as if the user has inserted it. * * This means it actually registers as a change and emits signals, triggers * callbacks as appropriate. * * @param obj A valid Evas_Object handle * @param part The part name * @param text The text string * @since 1.2.0 */ EAPI void edje_object_part_text_user_insert (const Evas_Object *obj, const char *part, const char *text); /** * @} */ /** * @ingroup Edje_Text_Selection * * @{ */ /** * @brief Return the selection text of the object part. * * @param obj A valid Evas_Object handle * @param part The part name * @return The text string * * This function returns selection text of the object part. * * @see edje_object_part_text_select_all() * @see edje_object_part_text_select_none() */ EAPI const char *edje_object_part_text_selection_get (const Evas_Object *obj, const char *part); /** * @brief Set the selection to be none. * * @param obj A valid Evas_Object handle * @param part The part name * * This function sets the selection text to be none. */ EAPI void edje_object_part_text_select_none (const Evas_Object *obj, const char *part); /** * @brief Set the selection to be everything. * * @param obj A valid Evas_Object handle * @param part The part name * * This function selects all text of the object of the part. */ EAPI void edje_object_part_text_select_all (const Evas_Object *obj, const char *part); /** * @brief Enables selection if the entry is an EXPLICIT selection mode * type. * * @param obj A valid Evas_Object handle * @param part The part name * @param allow EINA_TRUE to enable, EINA_FALSE otherwise * * The default is to @b not allow selection. This function only affects user * selection, functions such as edje_object_part_text_select_all() and * edje_object_part_text_select_none() are not affected. */ EAPI void edje_object_part_text_select_allow_set (const Evas_Object *obj, const char *part, Eina_Bool allow); /** * @brief Aborts any selection action on a part. * * @param obj A valid Evas_Object handle * @param part The part name */ EAPI void edje_object_part_text_select_abort (const Evas_Object *obj, const char *part); /** * @brief Starts selecting at current cursor position * * @param obj A valid Evas_Object handle * @param part The part name */ EAPI void edje_object_part_text_select_begin (const Evas_Object *obj, const char *part); /** * @brief Extends the current selection to the current cursor position * * @param obj A valid Evas_Object handle * @param part The part name */ EAPI void edje_object_part_text_select_extend (const Evas_Object *obj, const char *part); /** * @} */ /** * @ingroup Edje_Text_Cursor * * @{ */ /** * @brief Advances the cursor to the next cursor position. * @see evas_textblock_cursor_char_next * * @param obj A valid Evas_Object handle * @param part The part name * @param cur The edje cursor to advance */ EAPI Eina_Bool edje_object_part_text_cursor_next (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Moves the cursor to the previous char * @see evas_textblock_cursor_char_prev * * @param obj A valid Evas_Object handle * @param part The part name * @param cur the edje cursor to work on */ EAPI Eina_Bool edje_object_part_text_cursor_prev (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Move the cursor to the char above the current cursor position. * * @param obj A valid Evas_Object handle * @param part The part name * @param cur the edje cursor to work on */ EAPI Eina_Bool edje_object_part_text_cursor_up (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Moves the cursor to the char below the current cursor position. * * @param obj A valid Evas_Object handle * @param part The part name * @param cur the edje cursor to work on */ EAPI Eina_Bool edje_object_part_text_cursor_down (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Moves the cursor to the beginning of the text part * @see evas_textblock_cursor_paragraph_first * * @param obj A valid Evas_Object handle * @param part The part name * @param cur the edje cursor to work on */ EAPI void edje_object_part_text_cursor_begin_set (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Moves the cursor to the end of the text part. * @see evas_textblock_cursor_paragraph_last * * @param obj A valid Evas_Object handle * @param part The part name * @param cur the edje cursor to work on */ EAPI void edje_object_part_text_cursor_end_set (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Copy the cursor to another cursor. * * @param obj A valid Evas_Object handle * @param part The part name * @param src the cursor to copy from * @param dst the cursor to copy to */ EAPI void edje_object_part_text_cursor_copy (Evas_Object *obj, const char *part, Edje_Cursor src, Edje_Cursor dst); /** * @brief Move the cursor to the beginning of the line. * @see evas_textblock_cursor_line_char_first * * @param obj A valid Evas_Object handle * @param part The part name * @param cur the edje cursor to work on */ EAPI void edje_object_part_text_cursor_line_begin_set (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Move the cursor to the end of the line. * @see evas_textblock_cursor_line_char_last * * @param obj A valid Evas_Object handle * @param part The part name * @param cur the edje cursor to work on */ EAPI void edje_object_part_text_cursor_line_end_set (Evas_Object *obj, const char *part, Edje_Cursor cur); /** * Position the given cursor to a X,Y position. * * This is frequently used with the user cursor. * * @param obj An Edje object. * @param part The part containing the object. * @param cur The cursor to adjust. * @param x X Coordinate. * @param y Y Coordinate. * @return True on success, false on error. */ EAPI Eina_Bool edje_object_part_text_cursor_coord_set (Evas_Object *obj, const char *part, Edje_Cursor cur, Evas_Coord x, Evas_Coord y); /** * @brief Returns whether the cursor points to a format. * @see evas_textblock_cursor_is_format * * @param obj A valid Evas_Object handle * @param part The part name * @param cur The cursor to adjust. * @return EINA_TRUE if it's true, EINA_FALSE otherwise. */ EAPI Eina_Bool edje_object_part_text_cursor_is_format_get (const Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Return true if the cursor points to a visible format * For example \\t, \\n, item and etc. * @see evas_textblock_cursor_format_is_visible_get * * @param obj A valid Evas_Object handle * @param part The part name * @param cur The cursor to adjust. */ EAPI Eina_Bool edje_object_part_text_cursor_is_visible_format_get(const Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Returns the content (char) at the cursor position. * @see evas_textblock_cursor_content_get * * You must free the return (if not NULL) after you are done with it. * * @param obj A valid Evas_Object handle * @param part The part name * @param cur The cursor to use * @return The character string pointed to (may be a multi-byte utf8 sequence) terminated by a nul byte. */ EAPI char *edje_object_part_text_cursor_content_get (const Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Sets the cursor position to the given value * * @param obj A valid Evas_Object handle * @param part The part name * @param cur The cursor to move * @param pos the position of the cursor * @since 1.1.0 */ EAPI void edje_object_part_text_cursor_pos_set (Evas_Object *obj, const char *part, Edje_Cursor cur, int pos); /** * @brief Retrieves the current position of the cursor * * @param obj A valid Evas_Object handle * @param part The part name * @param cur The cursor to get the position * @return The cursor position * @since 1.1.0 */ EAPI int edje_object_part_text_cursor_pos_get (const Evas_Object *obj, const char *part, Edje_Cursor cur); /** * @brief Returns the cursor geometry of the part relative to the edje * object. * * @param obj A valid Evas_Object handle * @param part The part name * @param x Cursor X position * @param y Cursor Y position * @param w Cursor width * @param h Cursor height * */ EAPI void edje_object_part_text_cursor_geometry_get (const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); /** * @} */ /** * @ingroup Edje_Text_Entry * * @{ */ /** * @brief Set the RTL orientation for this object. * * @param obj A handle to an Edje object. * @param rtl new value of flag EINA_TRUE/EINA_FALSE * @since 1.1.0 */ EAPI void edje_object_mirrored_set (Evas_Object *obj, Eina_Bool rtl); /** * @brief Get the RTL orientation for this object. * * You can RTL orientation explicitly with edje_object_mirrored_set. * * @param obj A handle to an Edje object. * @return @c EINA_TRUE if the flag is set or @c EINA_FALSE if not. * @since 1.1.0 */ EAPI Eina_Bool edje_object_mirrored_get (const Evas_Object *obj); /** * @brief Set the function that provides item objects for named items in an edje entry text * * @param obj A valid Evas Object handle * @param func The function to call (or NULL to disable) to get item objects * @param data The data pointer to pass to the @p func callback * * Item objects may be deleted any time by Edje, and will be deleted when the * Edje object is deleted (or file is set to a new file). */ EAPI void edje_object_item_provider_set (Evas_Object *obj, Edje_Item_Provider_Cb func, void *data); /** * @brief Reset the input method context if needed. * * This can be necessary in the case where modifying the buffer would confuse on-going input method behavior * * @param obj A valid Evas_Object handle * @param part The part name * @since 1.2.0 */ EAPI void edje_object_part_text_imf_context_reset (const Evas_Object *obj, const char *part); /** * @brief Get the input method context in entry. * * If ecore_imf was not available when edje was compiled, this function returns NULL * otherwise, the returned pointer is an Ecore_IMF * * * @param obj A valid Evas_Object handle * @param part The part name * * @return The input method context (Ecore_IMF_Context *) in entry * @since 1.2.0 */ EAPI void *edje_object_part_text_imf_context_get (const Evas_Object *obj, const char *part); /** * @brief Set the layout of the input panel. * * The layout of the input panel or virtual keyboard can make it easier or * harder to enter content. This allows you to hint what kind of input you * are expecting to enter and thus have the input panel automatically * come up with the right mode. * * @param obj A valid Evas_Object handle * @param part The part name * @param layout layout type * @since 1.1 */ EAPI void edje_object_part_text_input_panel_layout_set (Evas_Object *obj, const char *part, Edje_Input_Panel_Layout layout); /** * @brief Get the layout of the input panel. * * @param obj A valid Evas_Object handle * @param part The part name * * @return Layout type of the input panel * * @see edje_object_part_text_input_panel_layout_set * @since 1.1 */ EAPI Edje_Input_Panel_Layout edje_object_part_text_input_panel_layout_get (const Evas_Object *obj, const char *part); /** * @brief Set the layout variation of the input panel. * * The layout variation of the input panel or virtual keyboard can make it easier or * harder to enter content. This allows you to hint what kind of input you * are expecting to enter and thus have the input panel automatically * come up with the right mode. * * @param obj A valid Evas_Object handle * @param part The part name * @param variation layout variation type * @since 1.8 */ EAPI void edje_object_part_text_input_panel_layout_variation_set(Evas_Object *obj, const char *part, int variation); /** * @brief Get the layout variation of the input panel. * * @param obj A valid Evas_Object handle * @param part The part name * * @return Layout variation type of the input panel * * @see edje_object_part_text_input_panel_layout_variation_set * @since 1.8 */ EAPI int edje_object_part_text_input_panel_layout_variation_get(const Evas_Object *obj, const char *part); /** * @brief Set the autocapitalization type on the immodule. * * @param obj A valid Evas_Object handle * @param part The part name * @param autocapital_type The type of autocapitalization * @since 1.1.0 */ EAPI void edje_object_part_text_autocapital_type_set (Evas_Object *obj, const char *part, Edje_Text_Autocapital_Type autocapital_type); /** * @brief Retrieves the autocapitalization type * * @param obj A valid Evas_Object handle * @param part The part name * @return The autocapitalization type * @since 1.1.0 */ EAPI Edje_Text_Autocapital_Type edje_object_part_text_autocapital_type_get (const Evas_Object *obj, const char *part); /** * @brief Set whether the prediction is allowed or not. * * @param obj A valid Evas_Object handle * @param part The part name * @param prediction If true, the prediction feature is allowed. * @since 1.2.0 */ EAPI void edje_object_part_text_prediction_allow_set (Evas_Object *obj, const char *part, Eina_Bool prediction); /** * @brief Get whether the prediction is allowed or not. * * @param obj A valid Evas_Object handle * @param part The part name * @return EINA_TRUE if prediction feature is allowed. * @since 1.2.0 */ EAPI Eina_Bool edje_object_part_text_prediction_allow_get (const Evas_Object *obj, const char *part); /** * @brief Sets the attribute to show the input panel automatically. * * @param obj A valid Evas_Object handle * @param part The part name * @param enabled If true, the input panel is appeared when entry is clicked or has a focus * @since 1.1.0 */ EAPI void edje_object_part_text_input_panel_enabled_set (Evas_Object *obj, const char *part, Eina_Bool enabled); /** * @brief Retrieve the attribute to show the input panel automatically. * @see edje_object_part_text_input_panel_enabled_set * * @param obj A valid Evas_Object handle * @param part The part name * @return EINA_TRUE if it supports or EINA_FALSE otherwise * @since 1.1.0 */ EAPI Eina_Bool edje_object_part_text_input_panel_enabled_get (const Evas_Object *obj, const char *part); /** * @brief Show the input panel (virtual keyboard) based on the input panel property such as layout, autocapital types, and so on. * * Note that input panel is shown or hidden automatically according to the focus state. * This API can be used in the case of manually controlling by using edje_object_part_text_input_panel_enabled_set. * * @param obj A valid Evas_Object handle * @param part The part name * @since 1.2.0 */ EAPI void edje_object_part_text_input_panel_show(const Evas_Object *obj, const char *part); /** * @brief Hide the input panel (virtual keyboard). * @see edje_object_part_text_input_panel_show * * Note that input panel is shown or hidden automatically according to the focus state. * This API can be used in the case of manually controlling by using edje_object_part_text_input_panel_enabled_set. * * @param obj A valid Evas_Object handle * @param part The part name * @since 1.2.0 */ EAPI void edje_object_part_text_input_panel_hide(const Evas_Object *obj, const char *part); /** * Set the language mode of the input panel. * * This API can be used if you want to show the Alphabet keyboard. * * @param obj A valid Evas_Object handle * @param part The part name * @param lang the language to be set to the input panel. * @since 1.2.0 */ EAPI void edje_object_part_text_input_panel_language_set(Evas_Object *obj, const char *part, Edje_Input_Panel_Lang lang); /** * Get the language mode of the input panel. * * See @ref edje_object_part_text_input_panel_language_set for more details. * * @param obj A valid Evas_Object handle * @param part The part name * @return input panel language type * @since 1.2.0 */ EAPI Edje_Input_Panel_Lang edje_object_part_text_input_panel_language_get(const Evas_Object *obj, const char *part); /** * Set the input panel-specific data to deliver to the input panel. * * This API is used by applications to deliver specific data to the input panel. * The data format MUST be negotiated by both application and the input panel. * The size and format of data are defined by the input panel. * * @param obj A valid Evas_Object handle * @param part The part name * @param data The specific data to be set to the input panel. * @param len the length of data, in bytes, to send to the input panel * @since 1.2.0 */ EAPI void edje_object_part_text_input_panel_imdata_set(Evas_Object *obj, const char *part, const void *data, int len); /** * Get the specific data of the current active input panel. * * @param obj A valid Evas_Object handle * @param part The part name * @param data The specific data to be got from the input panel * @param len The length of data * @since 1.2.0 */ EAPI void edje_object_part_text_input_panel_imdata_get(const Evas_Object *obj, const char *part, void *data, int *len); /** * Set the "return" key type. This type is used to set string or icon on the "return" key of the input panel. * * An input panel displays the string or icon associated with this type * * @param obj A valid Evas_Object handle * @param part The part name * @param return_key_type The type of "return" key on the input panel * @since 1.2.0 */ EAPI void edje_object_part_text_input_panel_return_key_type_set(Evas_Object *obj, const char *part, Edje_Input_Panel_Return_Key_Type return_key_type); /** * Get the "return" key type. * * @see edje_object_part_text_input_panel_return_key_type_set() for more details * * @param obj A valid Evas_Object handle * @param part The part name * @return The type of "return" key on the input panel * @since 1.2.0 */ EAPI Edje_Input_Panel_Return_Key_Type edje_object_part_text_input_panel_return_key_type_get(const Evas_Object *obj, const char *part); /** * Set the return key on the input panel to be disabled. * * @param obj A valid Evas_Object handle * @param part The part name * @param disabled The state * @since 1.2.0 */ EAPI void edje_object_part_text_input_panel_return_key_disabled_set(Evas_Object *obj, const char *part, Eina_Bool disabled); /** * Get whether the return key on the input panel should be disabled or not. * * @param obj A valid Evas_Object handle * @param part The part name * @return EINA_TRUE if it should be disabled * @since 1.2.0 */ EAPI Eina_Bool edje_object_part_text_input_panel_return_key_disabled_get(const Evas_Object *obj, const char *part); /** * Add a filter function for newly inserted text. * * Whenever text is inserted (not the same as set) into the given @p part, * the list of filter functions will be called to decide if and how the new * text will be accepted. * There are three types of filters, EDJE_TEXT_FILTER_TEXT, * EDJE_TEXT_FILTER_FORMAT and EDJE_TEXT_FILTER_MARKUP. * The text parameter in the @p func filter can be modified by the user and * it's up to him to free the one passed if he's to change the pointer. If * doing so, the newly set text should be malloc'ed, as once all the filters * are called Edje will free it. * If the text is to be rejected, freeing it and setting the pointer to NULL * will make Edje break out of the filter cycle and reject the inserted * text. * * @warning This function will be deprecated because of difficulty in use. * The type(format, text, or markup) of text should be always * checked in the filter function for correct filtering. * Please use edje_object_text_markup_filter_callback_add() instead. There * is no need to check the type of text in the filter function * because the text is always markup. * @warning If you use this function with * edje_object_text_markup_filter_callback_add() together, all * Edje_Text_Filter_Cb functions and Edje_Markup_Filter_Cb functions * will be executed, and then filtered text will be inserted. * * @see edje_object_text_insert_filter_callback_del * @see edje_object_text_insert_filter_callback_del_full * @see edje_object_text_markup_filter_callback_add * * @param obj A valid Evas_Object handle * @param part The part name * @param func The callback function that will act as filter * @param data User provided data to pass to the filter function */ EAPI void edje_object_text_insert_filter_callback_add (Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data); /** * Delete a function from the filter list. * * Delete the given @p func filter from the list in @p part. Returns * the user data pointer given when added. * * @see edje_object_text_insert_filter_callback_add * @see edje_object_text_insert_filter_callback_del_full * * @param obj A valid Evas_Object handle * @param part The part name * @param func The function callback to remove * * @return The user data pointer if successful, or NULL otherwise */ EAPI void *edje_object_text_insert_filter_callback_del (Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func); /** * Delete a function and matching user data from the filter list. * * Delete the given @p func filter and @p data user data from the list * in @p part. * Returns the user data pointer given when added. * * @see edje_object_text_insert_filter_callback_add * @see edje_object_text_insert_filter_callback_del * * @param obj A valid Evas_Object handle * @param part The part name * @param func The function callback to remove * @param data The data passed to the callback function * * @return The same data pointer if successful, or NULL otherwise */ EAPI void *edje_object_text_insert_filter_callback_del_full (Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data); /** * Add a markup filter function for newly inserted text. * * Whenever text is inserted (not the same as set) into the given @p part, * the list of markup filter functions will be called to decide if and how * the new text will be accepted. * The text parameter in the @p func filter is always markup. It can be * modified by the user and it's up to him to free the one passed if he's to * change the pointer. If doing so, the newly set text should be malloc'ed, * as once all the filters are called Edje will free it. * If the text is to be rejected, freeing it and setting the pointer to NULL * will make Edje break out of the filter cycle and reject the inserted * text. * This function is different from edje_object_text_insert_filter_callback_add() * in that the text parameter in the @p fucn filter is always markup. * * @warning If you use this function with * edje_object_text_insert_filter_callback_add() togehter, all * Edje_Text_Filter_Cb functions and Edje_Markup_Filter_Cb functions * will be executed, and then filtered text will be inserted. * * @see edje_object_text_markup_filter_callback_del * @see edje_object_text_markup_filter_callback_del_full * @see edje_object_text_insert_filter_callback_add * * @param obj A valid Evas_Object handle * @param part The part name * @param func The callback function that will act as markup filter * @param data User provided data to pass to the filter function * @since 1.2.0 */ EAPI void edje_object_text_markup_filter_callback_add(Evas_Object *obj, const char *part, Edje_Markup_Filter_Cb func, void *data); /** * Delete a function from the markup filter list. * * Delete the given @p func filter from the list in @p part. Returns * the user data pointer given when added. * * @see edje_object_text_markup_filter_callback_add * @see edje_object_text_markup_filter_callback_del_full * * @param obj A valid Evas_Object handle * @param part The part name * @param func The function callback to remove * * @return The user data pointer if successful, or NULL otherwise * @since 1.2.0 */ EAPI void *edje_object_text_markup_filter_callback_del(Evas_Object *obj, const char *part, Edje_Markup_Filter_Cb func); /** * Delete a function and matching user data from the markup filter list. * * Delete the given @p func filter and @p data user data from the list * in @p part. * Returns the user data pointer given when added. * * @see edje_object_text_markup_filter_callback_add * @see edje_object_text_markup_filter_callback_del * * @param obj A valid Evas_Object handle * @param part The part name * @param func The function callback to remove * @param data The data passed to the callback function * * @return The same data pointer if successful, or NULL otherwise * @since 1.2.0 */ EAPI void *edje_object_text_markup_filter_callback_del_full(Evas_Object *obj, const char *part, Edje_Markup_Filter_Cb func, void *data); /** * @} */ /** * @ingroup Edje_Part_Swallow * * @{ */ /** * @brief Set the object minimum size. * * @param obj A valid Evas_Object handle * @param minw The minimum width * @param minh The minimum height * * This sets the minimum size restriction for the object. */ EAPI void edje_extern_object_min_size_set (Evas_Object *obj, Evas_Coord minw, Evas_Coord minh); /** * @brief Set the object maximum size. * * @param obj A valid Evas_Object handle * @param maxw The maximum width * @param maxh The maximum height * * This sets the maximum size restriction for the object. */ EAPI void edje_extern_object_max_size_set (Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh); /** * @brief Set the object aspect size. * * @param obj A valid Evas_Object handle * @param aspect The aspect control axes * @param aw The aspect radio width * @param ah The aspect ratio height * * This sets the desired aspect ratio to keep an object that will be * swallowed by Edje. The width and height define a preferred size * ASPECT and the object may be scaled to be larger or smaller, but * retaining the relative scale of both aspect width and height. */ EAPI void edje_extern_object_aspect_set (Evas_Object *obj, Edje_Aspect_Control aspect, Evas_Coord aw, Evas_Coord ah); /** * @brief "Swallows" an object into one of the Edje object @c SWALLOW * parts. * * @param obj A valid Edje object handle * @param part The swallow part's name * @param obj_swallow The object to occupy that part * * Swallowing an object into an Edje object is, for a given part of * type @c SWALLOW in the EDC group which gave life to @a obj, to set * an external object to be controlled by @a obj, being displayed * exactly over that part's region inside the whole Edje object's * viewport. * * From this point on, @a obj will have total control over @a * obj_swallow's geometry and visibility. For instance, if @a obj is * visible, as in @c evas_object_show(), the swallowed object will be * visible too -- if the given @c SWALLOW part it's in is also * visible. Other actions on @a obj will also reflect on the swallowed * object as well (e.g. resizing, moving, raising/lowering, etc.). * * Finally, all internal changes to @a part, specifically, will * reflect on the displaying of @a obj_swallow, for example state * changes leading to different visibility states, geometries, * positions, etc. * * If an object has already been swallowed into this part, then it * will first be unswallowed (as in edje_object_part_unswallow()) * before the new object is swallowed. * * @note @a obj @b won't delete the swallowed object once it is * deleted -- @a obj_swallow will get to an unparented state again. * * For more details on EDC @c SWALLOW parts, see @ref edcref "syntax * reference". */ EAPI Eina_Bool edje_object_part_swallow (Evas_Object *obj, const char *part, Evas_Object *obj_swallow); /** * @brief Unswallow an object. * * @param obj A valid Evas_Object handle * @param obj_swallow The swallowed object * * Causes the edje to regurgitate a previously swallowed object. :) * * @note @p obj_swallow will @b not be deleted or hidden. * @note @p obj_swallow may appear shown on the evas depending on its state when * it got unswallowed. Make sure you delete it or hide it if you do not want it to. */ EAPI void edje_object_part_unswallow (Evas_Object *obj, Evas_Object *obj_swallow); /** * @brief Get the object currently swallowed by a part. * * @param obj A valid Evas_Object handle * @param part The part name * @return The swallowed object, or NULL if there is none. */ EAPI Evas_Object *edje_object_part_swallow_get (const Evas_Object *obj, const char *part); /** * @} */ /** * @ingroup Edje_Part_Drag * * @{ */ /** * @brief Determine dragable directions. * * @param obj A valid Evas_Object handle * @param part The part name * * The dragable directions are defined in the EDC file, inside the @c dragable * section, by the attributes @c x and @c y. See the @ref edcref for more * information. * * @return #EDJE_DRAG_DIR_NONE: Not dragable\n * #EDJE_DRAG_DIR_X: Dragable in X direction\n * #EDJE_DRAG_DIR_Y: Dragable in Y direction\n * #EDJE_DRAG_DIR_XY: Dragable in X & Y directions */ EAPI Edje_Drag_Dir edje_object_part_drag_dir_get (const Evas_Object *obj, const char *part); /** * @brief Set the dragable object location. * * @param obj A valid Evas_Object handle * @param part The part name * @param dx The x value * @param dy The y value * * Places the dragable object at the given location. * * Values for @p dx and @p dy are real numbers that range from 0 to 1, * representing the relative position to the dragable area on that axis. * * This value means, for the vertical axis, that 0.0 will be at the top if the * first parameter of @c y in the dragable part theme is 1, and at bottom if it * is -1. * * For the horizontal axis, 0.0 means left if the first parameter of @c x in the * dragable part theme is 1, and right if it is -1. * * @see edje_object_part_drag_value_get() */ EAPI Eina_Bool edje_object_part_drag_value_set (Evas_Object *obj, const char *part, double dx, double dy); /** * @brief Get the dragable object location. * * @param obj A valid Evas_Object handle * @param part The part name * @param dx The X value pointer * @param dy The Y value pointer * * Values for @p dx and @p dy are real numbers that range from 0 to 1, * representing the relative position to the dragable area on that axis. * * @see edje_object_part_drag_value_set() * * Gets the drag location values. */ EAPI Eina_Bool edje_object_part_drag_value_get (const Evas_Object *obj, const char *part, double *dx, double *dy); /** * @brief Set the dragable object size. * * @param obj A valid Evas_Object handle * @param part The part name * @param dw The drag width * @param dh The drag height * * Values for @p dw and @p dh are real numbers that range from 0 to 1, * representing the relative size of the dragable area on that axis. * * Sets the size of the dragable object. * * @see edje_object_part_drag_size_get() */ EAPI Eina_Bool edje_object_part_drag_size_set (Evas_Object *obj, const char *part, double dw, double dh); /** * @brief Get the dragable object size. * * @param obj A valid Evas_Object handle * @param part The part name * @param dw The drag width pointer * @param dh The drag height pointer * * Gets the dragable object size. * * @see edje_object_part_drag_size_set() */ EAPI Eina_Bool edje_object_part_drag_size_get (const Evas_Object *obj, const char *part, double *dw, double *dh); /** * @brief Sets the drag step increment. * * @param obj A valid Evas_Object handle * @param part The part name * @param dx The x step amount * @param dy The y step amount * * Sets the x,y step increments for a dragable object. * * Values for @p dx and @p dy are real numbers that range from 0 to 1, * representing the relative size of the dragable area on that axis by which the * part will be moved. * * @see edje_object_part_drag_step_get() */ EAPI Eina_Bool edje_object_part_drag_step_set (Evas_Object *obj, const char *part, double dx, double dy); /** * @brief Gets the drag step increment values. * * @param obj A valid Evas_Object handle * @param part The part * @param dx The x step increment pointer * @param dy The y step increment pointer * * Gets the x and y step increments for the dragable object. * * * @see edje_object_part_drag_step_set() */ EAPI Eina_Bool edje_object_part_drag_step_get (const Evas_Object *obj, const char *part, double *dx, double *dy); /** * @brief Sets the page step increments. * * @param obj A valid Evas_Object handle * @param part The part name * @param dx The x page step increment * @param dy The y page step increment * * Sets the x,y page step increment values. * * Values for @p dx and @p dy are real numbers that range from 0 to 1, * representing the relative size of the dragable area on that axis by which the * part will be moved. * * @see edje_object_part_drag_page_get() */ EAPI Eina_Bool edje_object_part_drag_page_set (Evas_Object *obj, const char *part, double dx, double dy); /** * @brief Gets the page step increments. * * @param obj A valid Evas_Object handle * @param part The part name * @param dx The dx page increment pointer * @param dy The dy page increment pointer * * Gets the x,y page step increments for the dragable object. * * @see edje_object_part_drag_page_set() */ EAPI Eina_Bool edje_object_part_drag_page_get (const Evas_Object *obj, const char *part, double *dx, double *dy); /** * @brief Steps the dragable x,y steps. * * @param obj A valid Evas_Object handle * @param part The part name * @param dx The x step * @param dy The y step * * Steps x,y where the step increment is the amount set by * edje_object_part_drag_step_set. * * Values for @p dx and @p dy are real numbers that range from 0 to 1. * * @see edje_object_part_drag_page() */ EAPI Eina_Bool edje_object_part_drag_step (Evas_Object *obj, const char *part, double dx, double dy); /** * @brief Pages x,y steps. * * @param obj A valid Evas_Object handle * @param part The part name * @param dx The x step * @param dy The y step * * Pages x,y where the increment is defined by * edje_object_part_drag_page_set. * * Values for @p dx and @p dy are real numbers that range from 0 to 1. * * @warning Paging is bugged! * * @see edje_object_part_drag_step() */ EAPI Eina_Bool edje_object_part_drag_page (Evas_Object *obj, const char *part, double dx, double dy); /** * @} */ /** * @ingroup Edje_Object_File * * @{ */ /** * @brief Retrive an EDC data field's value from a given Edje * object's group. * * @param obj A handle to an Edje object * @param key The data field's key string * @return The data's value string. Must not be freed. * * This function fetches an EDC data field's value, which is declared * on the objects building EDC file, under its group. EDC data * blocks are most commonly used to pass arbitrary parameters from an * application's theme to its code. * * They look like the following: * * @code * collections { * group { * name: "a_group"; * data { * item: "key1" "value1"; * item: "key2" "value2"; * } * } * } * @endcode * * EDC data fields always hold @b strings as values, hence the return * type of this function. Check the complete @ref edcref "syntax reference" * for EDC files. * * @warning Do not confuse this call with edje_file_data_get(), which * queries for a @b global EDC data field on an EDC declaration file. * * @see edje_object_file_set() */ EAPI const char *edje_object_data_get (const Evas_Object *obj, const char *key); /** * @brief Sets the @b EDJ file (and group within it) to load an Edje * object's contents from * * @param obj A handle to an Edje object * @param file The path to the EDJ file to load @p from * @param group The name of the group, in @p file, which implements an * Edje object * @return @c EINA_TRUE, on success or @c EINA_FALSE, on errors (check * edje_object_load_error_get() after this call to get errors causes) * * Edje expects EDJ files, which are theming objects' descriptions and * resources packed together in an EET file, to read Edje object * definitions from. They usually are created with the @c .edj * extension. EDJ files, in turn, are assembled from @b textual object * description files, where one describes Edje objects declaratively * -- the EDC files (see @ref edcref "the syntax" for those files). * * Those description files were designed so that many Edje object * definitions -- also called @b groups (or collections) -- could be * packed together in the same EDJ file, so that a whole * application's theme could be packed in one file only. This is the * reason for the @p group argument. * * Use this function after you instantiate a new Edje object, so that * you can "give him life", telling where to get its contents from. * * @see edje_object_add() * @see edje_object_file_get() */ EAPI Eina_Bool edje_object_file_set (Evas_Object *obj, const char *file, const char *group); /** * @brief Get the file and group name that a given Edje object is bound to * * @param obj A handle to an Edje object * @param file A pointer to a variable whero to store the file's * path * @param group A pointer to a variable where to store the group * name in * * This gets the EDJ file's path, with the respective group set for * the given Edje object. If @a obj is either not an Edje file, or has * not had its file/group set previously, by edje_object_file_set(), * then both @p file and @p group will be set to @c NULL, indicating * an error. * * @see edje_object_file_set() * * @note Use @c NULL pointers on the file/group components you're not * interested in: they'll be ignored by the function. */ EAPI void edje_object_file_get (const Evas_Object *obj, const char **file, const char **group); /** * @brief Gets the (last) file loading error for a given Edje object * * @param obj A handlet to an Edje object * * @return The Edje loading error, one of: * - #EDJE_LOAD_ERROR_NONE * - #EDJE_LOAD_ERROR_GENERIC * - #EDJE_LOAD_ERROR_DOES_NOT_EXIST * - #EDJE_LOAD_ERROR_PERMISSION_DENIED * - #EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED * - #EDJE_LOAD_ERROR_CORRUPT_FILE * - #EDJE_LOAD_ERROR_UNKNOWN_FORMAT * - #EDJE_LOAD_ERROR_INCOMPATIBLE_FILE * - #EDJE_LOAD_ERROR_UNKNOWN_COLLECTION * - #EDJE_LOAD_ERROR_RECURSIVE_REFERENCE * * This function is meant to be used after an Edje EDJ file * loading, what takes place with the edje_object_file_set() * function. If that function does not return @c EINA_TRUE, one should * check for the reason of failure with this one. * * @see edje_load_error_str() */ EAPI Edje_Load_Error edje_object_load_error_get (const Evas_Object *obj); /** * @} */ /** * @ingroup Edje_Object_Animation * * @{ */ /** * @brief Set the Edje object to playing or paused states. * * @param obj A handle to an Edje object. * @param play Object state (@c EINA_TRUE to playing, * @c EINA_FALSE to paused). * * This function sets the Edje object @a obj to playing or paused * states, depending on the parameter @a play. This has no effect if * the object was already at that state. * * @see edje_object_play_get(). * */ EAPI void edje_object_play_set (Evas_Object *obj, Eina_Bool play); /** * @brief Get the Edje object's state. * * @param obj A handle to an Edje object. * @return @c EINA_FALSE if the object is not connected, its @c delete_me flag * is set, or it is at paused state; @c EINA_TRUE if the object is at playing * state. * * This function tells if an Edje object is playing or not. This state * is set by edje_object_play_set(). * * @see edje_object_play_set(). * */ EAPI Eina_Bool edje_object_play_get (const Evas_Object *obj); /** * @brief Set the object's animation state. * * @param obj A handle to an Edje object. * @param on The animation state. @c EINA_TRUE to starts or * @c EINA_FALSE to stops. * * This function starts or stops an Edje object's animation. The * information if it's stopped can be retrieved by * edje_object_animation_get(). * * @see edje_object_animation_get() * */ EAPI void edje_object_animation_set (Evas_Object *obj, Eina_Bool on); /** * @brief Get the Edje object's animation state. * * @param obj A handle to an Edje object. * @return @c EINA_FALSE on error or if object is not animated; * @c EINA_TRUE if animated. * * This function returns if the animation is stopped or not. The * animation state is set by edje_object_animation_set(). * * @see edje_object_animation_set(). * */ EAPI Eina_Bool edje_object_animation_get (const Evas_Object *obj); /** * @brief Freezes the Edje object. * * @param obj A handle to an Edje object. * @return The frozen state or 0 on Error * * This function puts all changes on hold. Successive freezes will * nest, requiring an equal number of thaws. * * @see edje_object_thaw() */ EAPI int edje_object_freeze (Evas_Object *obj); /** * @brief Thaws the Edje object. * * @param obj A handle to an Edje object. * @return The frozen state or 0 if the object is not frozen or on error. * * This function thaws the given Edje object. * * @note: If sucessives freezes were done, an equal number of * thaws will be required. * * @see edje_object_freeze() */ EAPI int edje_object_thaw (Evas_Object *obj); /** * @brief Returns the state of the Edje part. * * @param obj A valid Evas_Object handle * @param part The part name * @param val_ret * * @return The part state:\n * "default" for the default state\n * "" for other states */ EAPI const char *edje_object_part_state_get (const Evas_Object *obj, const char *part, double *val_ret); /** * @} */ /** * @ingroup Edje_Object_Color_Class * * @{ */ /** * @brief Sets the object color class. * * @param obj A valid Evas_Object handle * @param color_class * @param r Object Red value * @param g Object Green value * @param b Object Blue value * @param a Object Alpha value * @param r2 Outline Red value * @param g2 Outline Green value * @param b2 Outline Blue value * @param a2 Outline Alpha value * @param r3 Shadow Red value * @param g3 Shadow Green value * @param b3 Shadow Blue value * @param a3 Shadow Alpha value * * This function sets the color values for an object level color * class. This will cause all edje parts in the specified object that * have the specified color class to have their colors multiplied by * these values. * * The first color is the object, the second is the text outline, and * the third is the text shadow. (Note that the second two only apply * to text parts). * * Setting color emits a signal "color_class,set" with source being * the given color. * * @note unlike Evas, Edje colors are @b not pre-multiplied. That is, * half-transparent white is 255 255 255 128. */ EAPI Eina_Bool edje_object_color_class_set (Evas_Object *obj, const char *color_class, int r, int g, int b, int a, int r2, int g2, int b2, int a2, int r3, int g3, int b3, int a3); /** * @brief Gets the object color class. * * @param o A valid Evas_Object handle * @param color_class * @param r Object Red value * @param g Object Green value * @param b Object Blue value * @param a Object Alpha value * @param r2 Outline Red value * @param g2 Outline Green value * @param b2 Outline Blue value * @param a2 Outline Alpha value * @param r3 Shadow Red value * @param g3 Shadow Green value * @param b3 Shadow Blue value * @param a3 Shadow Alpha value * * @return EINA_TRUE if found or EINA_FALSE if not found and all * values are zeroed. * * This function gets the color values for an object level color * class. If no explicit object color is set, then global values will * be used. * * The first color is the object, the second is the text outline, and * the third is the text shadow. (Note that the second two only apply * to text parts). * * @note unlike Evas, Edje colors are @b not pre-multiplied. That is, * half-transparent white is 255 255 255 128. */ EAPI Eina_Bool edje_object_color_class_get (const Evas_Object *o, const char *color_class, int *r, int *g, int *b, int *a, int *r2, int *g2, int *b2, int *a2, int *r3, int *g3, int *b3, int *a3); /** * @brief Delete the object color class. * * @param obj The edje object's reference. * @param color_class The color class to be deleted. * * This function deletes any values at the object level for the * specified object and color class. * @note Deleting the color class will revert it to the values * defined by edje_color_class_set() or the color class * defined in the theme file. * * Deleting the color class will emit the signal "color_class,del" * for the given Edje object. */ EAPI void edje_object_color_class_del (Evas_Object *obj, const char *color_class); /** * @} */ /** * @ingroup Edje_Part_Box * * @{ */ /** * @brief Appends an object to the box. * * @param obj A valid Evas_Object handle * @param part The part name * @param child The object to append * * @return @c EINA_TRUE: Successfully added.\n * @c EINA_FALSE: An error occurred. * * Appends child to the box indicated by part. * * @see edje_object_part_box_prepend() * @see edje_object_part_box_insert_before() * @see edje_object_part_box_insert_at() */ EAPI Eina_Bool edje_object_part_box_append (Evas_Object *obj, const char *part, Evas_Object *child); /** * @brief Prepends an object to the box. * * @param obj A valid Evas_Object handle * @param part The part name * @param child The object to prepend * * @return @c EINA_TRUE: Successfully added.\n * @c EINA_FALSE: An error occurred. * * Prepends child to the box indicated by part. * * @see edje_object_part_box_append() * @see edje_object_part_box_insert_before() * @see edje_object_part_box_insert_at() */ EAPI Eina_Bool edje_object_part_box_prepend (Evas_Object *obj, const char *part, Evas_Object *child); /** * @brief Adds an object to the box. * * @param obj A valid Evas_Object handle * @param part The part name * @param child The object to insert * @param reference The object to be used as reference * * @return @c EINA_TRUE: Successfully added.\n * @c EINA_FALSE: An error occurred. * * Inserts child in the box given by part, in the position marked by * reference. * * @see edje_object_part_box_append() * @see edje_object_part_box_prepend() * @see edje_object_part_box_insert_at() */ EAPI Eina_Bool edje_object_part_box_insert_before (Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference); /** * @brief Inserts an object to the box. * * @param obj A valid Evas_Object handle * @param part The part name * @param child The object to insert * @param pos The position where to insert child * * @return @c EINA_TRUE: Successfully added.\n * @c EINA_FALSE: An error occurred. * * Adds child to the box indicated by part, in the position given by * pos. * * @see edje_object_part_box_append() * @see edje_object_part_box_prepend() * @see edje_object_part_box_insert_before() */ EAPI Eina_Bool edje_object_part_box_insert_at (Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos); /** * @brief Removes an object from the box. * * @param obj A valid Evas_Object handle * @param part The part name * @param child The object to remove * * @return Pointer to the object removed, or @c NULL. * * Removes child from the box indicated by part. * * @see edje_object_part_box_remove_at() * @see edje_object_part_box_remove_all() */ EAPI Evas_Object *edje_object_part_box_remove (Evas_Object *obj, const char *part, Evas_Object *child); /** * @brief Removes an object from the box. * * @param obj A valid Evas_Object handle * @param part The part name * @param pos The position index of the object (starts counting from 0) * * @return Pointer to the object removed, or @c NULL. * * Removes from the box indicated by part, the object in the position * pos. * * @see edje_object_part_box_remove() * @see edje_object_part_box_remove_all() */ EAPI Evas_Object *edje_object_part_box_remove_at (Evas_Object *obj, const char *part, unsigned int pos); /** * @brief Removes all elements from the box. * * @param obj A valid Evas_Object handle * @param part The part name * @param clear Delete objects on removal * * @return 1: Successfully cleared.\n * 0: An error occurred. * * Removes all the external objects from the box indicated by part. * Elements created from the theme will not be removed. * * @see edje_object_part_box_remove() * @see edje_object_part_box_remove_at() */ EAPI Eina_Bool edje_object_part_box_remove_all (Evas_Object *obj, const char *part, Eina_Bool clear); /** * @} */ /** * @ingroup Edje_Part_Table * * @{ */ /** * @brief Retrieve a child from a table * * @param obj A valid Evas_Object handle * @param part The part name * @param col The column of the child to get * @param row The row of the child to get * @return The child Evas_Object */ EAPI Evas_Object *edje_object_part_table_child_get (const Evas_Object *obj, const char *part, unsigned int col, unsigned int row); /** * @brief Packs an object into the table. * * @param obj A valid Evas_Object handle * @param part The part name * @param child_obj The object to pack in * @param col The column to place it in * @param row The row to place it in * @param colspan Columns the child will take * @param rowspan Rows the child will take * * @return @c EINA_TRUE object was added, @c EINA_FALSE on failure * * Packs an object into the table indicated by part. */ EAPI Eina_Bool edje_object_part_table_pack (Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan); /** * @brief Removes an object from the table. * * @param obj A valid Evas_Object handle * @param part The part name * @param child_obj The object to pack in * * @return @c EINA_TRUE object removed, @c EINA_FALSE on failure * * Removes an object from the table indicated by part. */ EAPI Eina_Bool edje_object_part_table_unpack (Evas_Object *obj, const char *part, Evas_Object *child_obj); /** * @brief Gets the number of columns and rows the table has. * * @param obj A valid Evas_Object handle * @param part The part name * @param cols Pointer where to store number of columns (can be NULL) * @param rows Pointer where to store number of rows (can be NULL) * * @return @c EINA_TRUE get some data, @c EINA_FALSE on failure * * Retrieves the size of the table in number of columns and rows. */ EAPI Eina_Bool edje_object_part_table_col_row_size_get (const Evas_Object *obj, const char *part, int *cols, int *rows); /** * @brief Removes all object from the table. * * @param obj A valid Evas_Object handle * @param part The part name * @param clear If set, will delete subobjs on remove * * @return @c EINA_TRUE clear the table, @c EINA_FALSE on failure * * Removes all object from the table indicated by part, except the * internal ones set from the theme. */ EAPI Eina_Bool edje_object_part_table_clear (Evas_Object *obj, const char *part, Eina_Bool clear); /** * @} */ /** * @ingroup Edje_Object_Text_Class * * @{ */ /** * @brief Sets Edje text class. * * @param obj A valid Evas_Object handle * @param text_class The text class name * @param font Font name * @param size Font Size * * @return @c EINA_TRUE, on success or @c EINA_FALSE, on error * * This function sets the text class for the Edje. * */ EAPI Eina_Bool edje_object_text_class_set (Evas_Object *obj, const char *text_class, const char *font, Evas_Font_Size size); /** * @} */ /** * @ingroup Edje_Perspective * * @{ */ /** * Set the given perspective object on this Edje object. * * @param obj The Edje object on the perspective will be set. * @param ps The perspective object that will be used. * * Make the given perspective object be the default perspective for this Edje * object. * * There can be only one perspective object per Edje object, and if a * previous one was set, it will be removed and the new perspective object * will be used. * * An Edje perspective will only affect a part if it doesn't point to another * part to be used as perspective. * * @see edje_object_perspective_new() * @see edje_object_perspective_get() * @see edje_perspective_set() */ EAPI void edje_object_perspective_set (Evas_Object *obj, Edje_Perspective *ps); /** * Get the current perspective used on this Edje object. * * @param obj the given Edje object. * @return The perspective object being used on this Edje object. Or @c NULL * if there was none, and on errors. * * @see edje_object_perspective_set() */ EAPI const Edje_Perspective *edje_object_perspective_get (const Evas_Object *obj); /** * @} */ /** * @ingroup Edje_Object_Group * * @{ */ /** * @brief Instantiate a new Edje object * * @param evas A valid Evas handle, the canvas to place the new object * in * @return A handle to the new object created or @c NULL, on errors. * * This function creates a new Edje smart object, returning its @c * Evas_Object handle. An Edje object is useless without a (source) * file set to it, so you'd most probably call edje_object_file_set() * afterwards, like in: * @code * Evas_Object *edje; * * edje = edje_object_add(canvas); * if (!edje) * { * fprintf(stderr, "could not create edje object!\n"); * return NULL; * } * * if (!edje_object_file_set(edje, "theme.edj", "group_name")) * { * int err = edje_object_load_error_get(edje); * const char *errmsg = edje_load_error_str(err); * fprintf(stderr, "could not load 'group_name' from theme.edj: %s", * errmsg); * * evas_object_del(edje); * return NULL; * } * * @endcode * * @note You can get a callback every time edje re-calculates the object * (either due to animation or some kind of signal or input). This is called * in-line just after the recalculation has occurred. It is a good idea not * to go and delete or alter the object inside this callbacks, simply make * a note that the recalculation has taken place and then do something about * it outside the callback. to register a callback use code like: * * @code * evas_object_smart_callback_add(edje_obj, "recalc", my_cb, my_cb_data); * @endcode * * @see evas_object_smart_callback_add() * * @note Before creating the first Edje object in your code, remember * to initialize the library, with edje_init(), or unexpected behavior * might occur. */ EAPI Evas_Object *edje_object_add (Evas *evas); /** * @brief Preload the images on the Edje Object in the background. * * @param obj A handle to an Edje object * @param cancel @c EINA_FALSE will add it the preloading work queue, * @c EINA_TRUE will remove it (if it was issued before). * @return @c EINA_FASLE if obj was not a valid Edje object * otherwise @c EINA_TRUE * * This function requests the preload of all data images (on the given * object) in the background. The work is queued before being processed * (because there might be other pending requests of this type). * It emits a signal "preload,done" when finished. * * @note Use @c EINA_TRUE on scenarios where you don't need * the image data preloaded anymore. */ EAPI Eina_Bool edje_object_preload (Evas_Object *obj, Eina_Bool cancel); /** * @} */ /** * @ingroup Edje_Object_Communication_Interface_Signal * * @{ */ /** * @brief Add a callback for an arriving Edje signal, emitted by * a given Edje object. * * @param obj A handle to an Edje object * @param emission The signal's "emission" string * @param source The signal's "source" string * @param func The callback function to be executed when the signal is * emitted. * @param data A pointer to data to pass in to @p func. * * Edje signals are one of the communication interfaces between * @b code and a given Edje object's @b theme. With signals, one can * communicate two string values at a time, which are: * - "emission" value: the name of the signal, in general * - "source" value: a name for the signal's context, in general * * Though there are those common uses for the two strings, one is free * to use them however they like. * * This function adds a callback function to a signal emitted by @a obj, to * be issued every time an EDC program like the following * @code * program { * name: "emit_example"; * action: SIGNAL_EMIT "a_signal" "a_source"; * } * @endcode * is run, if @p emission and @p source are given those same values, * here. * * Signal callback registration is powerful, in the way that @b blobs * may be used to match multiple signals at once. All the @c * "*?[\" set of @c fnmatch() operators can be used, both for @p * emission and @p source. * * Edje has @b internal signals it will emit, automatically, on * various actions taking place on group parts. For example, the mouse * cursor being moved, pressed, released, etc., over a given part's * area, all generate individual signals. * * By using something like * @code * edje_object_signal_callback_add(obj, "mouse,down,*", "button.*", * signal_cb, NULL); * @endcode * being @c "button.*" the pattern for the names of parts implementing * buttons on an interface, you'd be registering for notifications on * events of mouse buttons being pressed down on either of those parts * (those events all have the @c "mouse,down," common prefix on their * names, with a suffix giving the button number). The actual emission * and source strings of an event will be passed in as the @a emission * and @a source parameters of the callback function (e.g. @c * "mouse,down,2" and @c "button.close"), for each of those events. * * @note See @ref edcref "the syntax" for EDC files * @see edje_object_signal_emit() on how to emits Edje signals from * code to a an object * @see edje_object_signal_callback_del_full() */ EAPI void edje_object_signal_callback_add (Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data); /** * @brief Remove a signal-triggered callback from an object. * * @param obj A valid Evas_Object handle. * @param emission The emission string. * @param source The source string. * @param func The callback function. * @return The data pointer * * This function removes a callback, previously attached to the * emittion of a signal, from the object @a obj. The parameters @a * emission, @a source and @a func must match exactly those passed to * a previous call to edje_object_signal_callback_add(). The data * pointer that was passed to this call will be returned. * * @see edje_object_signal_callback_add(). * @see edje_object_signal_callback_del_full(). * */ EAPI void *edje_object_signal_callback_del (Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func); /** * @brief Unregister/delete a callback set for an arriving Edje * signal, emitted by a given Edje object. * * @param obj A handle to an Edje object * @param emission The signal's "emission" string * @param source The signal's "source" string * @param func The callback function passed on the callback's * registration * @param data The pointer given to be passed as data to @p func * @return @p data, on success or @c NULL, on errors (or if @p data * had this value) * * This function removes a callback, previously attached to the * emittion of a signal, from the object @a obj. The parameters * @a emission, @a source, @a func and @a data must match exactly those * passed to a previous call to edje_object_signal_callback_add(). The * data pointer that was passed to this call will be returned. * * @see edje_object_signal_callback_add(). * @see edje_object_signal_callback_del(). * */ EAPI void *edje_object_signal_callback_del_full(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data); /** * @brief Send/emit an Edje signal to a given Edje object * * @param obj A handle to an Edje object * @param emission The signal's "emission" string * @param source The signal's "source" string * * This function sends a signal to the object @a obj. An Edje program, * at @p obj's EDC specification level, can respond to a signal by * having declared matching @c 'signal' and @c 'source' fields on its * block (see @ref edcref "the syntax" for EDC files). * * As an example, * @code * edje_object_signal_emit(obj, "a_signal", ""); * @endcode * would trigger a program which had an EDC declaration block like * @code * program { * name: "a_program"; * signal: "a_signal"; * source: ""; * action: ... * } * @endcode * * @see edje_object_signal_callback_add() for more on Edje signals. */ EAPI void edje_object_signal_emit (Evas_Object *obj, const char *emission, const char *source); /** * @} */ /** * @ingroup Edje_Object_Communication_Interface_Message * * @{ */ /** * @brief Send an (Edje) message to a given Edje object * * @param obj A handle to an Edje object * @param type The type of message to send to @p obj * @param id A identification number for the message to be sent * @param msg The message's body, a struct depending on @p type * * This function sends an Edje message to @p obj and to all of its * child objects, if it has any (swallowed objects are one kind of * child object). @p type and @p msg @b must be matched accordingly, * as documented in #Edje_Message_Type. * * The @p id argument as a form of code and theme defining a common * interface on message communication. One should define the same IDs * on both code and EDC declaration (see @ref edcref "the syntax" for * EDC files), to individualize messages (binding them to a given * context). * * The function to handle messages arriving @b from @b obj is set with * edje_object_message_handler_set(). */ EAPI void edje_object_message_send (Evas_Object *obj, Edje_Message_Type type, int id, void *msg); /** * @brief Set an Edje message handler function for a given Edje object. * * @param obj A handle to an Edje object * @param func The function to handle messages @b coming from @p obj * @param data Auxiliary data to be passed to @p func * * For scriptable programs on an Edje object's defining EDC file which * send messages with the @c send_message() primitive, one can attach * handler functions, to be called in the code which creates * that object (see @ref edcref "the syntax" for EDC files). * * This function associates a message handler function and the * attached data pointer to the object @p obj. * * @see edje_object_message_send() */ EAPI void edje_object_message_handler_set (Evas_Object *obj, Edje_Message_Handler_Cb func, void *data); /** * @brief Process an object's message queue. * * @param obj A handle to an Edje object. * * This function goes through the object message queue processing the * pending messages for @b this specific Edje object. Normally they'd * be processed only at idle time. * */ EAPI void edje_object_message_signal_process (Evas_Object *obj); /** * @} */