efl/legacy/elementary/src/lib/elm_prefs_common.h

320 lines
12 KiB
C

/**
* @addtogroup Elm_Prefs
*
* @{
*/
/**
* @brief Add a new prefs widget
*
* @param parent The parent widget to hold the new one
* @return The new object or @c NULL, on errors
*
* @since 1.8
*/
EAPI Evas_Object *elm_prefs_add(Evas_Object *parent);
/* API for prefs interface modules, from now on */
typedef struct _Elm_Prefs_Item_Spec_Void Elm_Prefs_Item_Spec_Void;
struct _Elm_Prefs_Item_Spec_Void
{
int:0; //Trick for removing warning (warning: empty struct has size 0 in C, size 1 in C++)
};
typedef struct _Elm_Prefs_Item_Spec_Bool Elm_Prefs_Item_Spec_Bool;
struct _Elm_Prefs_Item_Spec_Bool
{
Eina_Bool def;
};
typedef struct _Elm_Prefs_Item_Spec_Int Elm_Prefs_Item_Spec_Int;
struct _Elm_Prefs_Item_Spec_Int
{
int def, min, max;
};
typedef struct _Elm_Prefs_Item_Spec_Float Elm_Prefs_Item_Spec_Float;
struct _Elm_Prefs_Item_Spec_Float
{
float def, min, max;
};
typedef struct _Elm_Prefs_Item_Spec_String Elm_Prefs_Item_Spec_String;
struct _Elm_Prefs_Item_Spec_String
{
const char *def;
const char *placeholder;
const char *accept;
const char *deny;
struct
{
int min, max;
} length;
};
typedef struct _Elm_Prefs_Item_Spec_Date Elm_Prefs_Item_Spec_Date;
struct _Elm_Prefs_Item_Spec_Date
{
struct
{
unsigned char d; /* day*/
unsigned char m; /* month*/
unsigned short y; /* year */
} def;
struct
{
unsigned char d; /* day*/
unsigned char m; /* month*/
unsigned short y; /* year */
} min;
struct
{
unsigned char d; /* day*/
unsigned char m; /* month*/
unsigned short y; /* year */
} max;
};
typedef struct _Elm_Prefs_Item_Spec_Page Elm_Prefs_Item_Spec_Page;
struct _Elm_Prefs_Item_Spec_Page
{
const char *source;
};
typedef union _Elm_Prefs_Item_Spec Elm_Prefs_Item_Spec;
union _Elm_Prefs_Item_Spec
{
Elm_Prefs_Item_Spec_Void v;
Elm_Prefs_Item_Spec_Bool b;
Elm_Prefs_Item_Spec_Int i;
Elm_Prefs_Item_Spec_Float f;
Elm_Prefs_Item_Spec_String s;
Elm_Prefs_Item_Spec_Date d;
Elm_Prefs_Item_Spec_Page p;
};
typedef struct _Elm_Prefs_Item_Iface Elm_Prefs_Item_Iface;
typedef void (*Elm_Prefs_Item_Changed_Cb)(Evas_Object *it_obj); /**< Elementary prefs' item widget changed function signature */
/**
* @struct _Elm_Prefs_Item_Iface
*
* @brief Interface between items of the @ref elm-prefs-widget widget
* and the real widgets implementing them.
*
* This structure defines the interface between the
* @ref elm-prefs-widget widget's items (all item types in Elementary prefs
* collections but the @c PAGE one) and Elementary widgets
* implementing them. @c add() is the only mandatory function an
* item widget has to implement.
*
* @note For items of type @c PAGE, refer to #Elm_Prefs_Page_Iface.
*
* @since 1.8
*/
struct _Elm_Prefs_Item_Iface
{
#define ELM_PREFS_ITEM_IFACE_ABI_VERSION (1)
unsigned int abi_version; /**< always use:
* - #ELM_PREFS_ITEM_IFACE_ABI_VERSION to declare.
* - elm_prefs_widget_iface_abi_version_get() to check.
*/
const Elm_Prefs_Item_Type *types; /**< types of prefs items supported by the widget, #ELM_PREFS_TYPE_UNKNOWN terminated */
Evas_Object * (*add)(const Elm_Prefs_Item_Iface * iface,
Evas_Object * prefs,
const Elm_Prefs_Item_Type type,
const Elm_Prefs_Item_Spec spec,
Elm_Prefs_Item_Changed_Cb it_changed_cb); /**< Function to instantiate the item widget. It must return the widget handle, which should be the @c obj argument on the functions which follow. That object argument, by the way, should always have their respective #Elm_Prefs_Item_Node handle accessible via a @c "prefs_item" Evas object data value. The return value of the following functions should be @c EINA_TRUE, on success or @c EINA_FALSE, otherwise. */
Eina_Bool (*value_set)(Evas_Object *obj,
Eina_Value *value); /**< Function to set the value on the item widget. Note that for items of type #ELM_PREFS_TYPE_SEPARATOR, this function has a special meaning of making the separator widget a @b horizontal one */
Eina_Bool (*value_get)(Evas_Object *obj,
Eina_Value *value); /**< Function to set the value on the item widget. Note that for items of type #ELM_PREFS_TYPE_SEPARATOR, this function has a special meaning of making the separator widget a @b vertical one */
Eina_Bool (*value_validate)(Evas_Object *obj); /** < Function to validate the value from the item widget before saving it. The return value of the following function should be @c EINA_TRUE, if the value conforms with the expected or @c EINA_FALSE, otherwise. */
Eina_Bool (*label_set)(Evas_Object *obj,
const char *label); /**< function to set a label on the item widget */
Eina_Bool (*icon_set)(Evas_Object *obj,
const char *icon); /**< function to set an icon on the item widget */
Eina_Bool (*editable_set)(Evas_Object *obj,
Eina_Bool val); /**< function to set an item widget as editable or not */
Eina_Bool (*editable_get)(Evas_Object *obj); /**< function to retrieve whether an item widget is editable or not */
Eina_Bool (*expand_want)(Evas_Object *obj); /**< function to get whether the item implementation needs to be expanded in the page's longitudinal axis or not */
};
typedef struct _Elm_Prefs_Item_Iface_Info Elm_Prefs_Item_Iface_Info;
/**
* Convenience struct used to mass-register widgets implementing
* prefs @b items interfaces.
*
* To be used with elm_prefs_item_iface_register() and
* elm_prefs_item_iface_unregister().
*/
struct _Elm_Prefs_Item_Iface_Info
{
const char *widget_name; /**< The name of the widget implementing the interface, to be exposed on the prefs collections language. */
const Elm_Prefs_Item_Iface *info; /**< The type interface's implementation. */
};
/**
* Mass-register widgets implementing prefs @b items interfaces.
*
* @param array An array of #Elm_Prefs_Iface_Info structs, @c NULL
* terminated.
*
* This will register all item interfaces declared on @a array in
* Elementary, so that the prefs widget will recognize them on @c .epc
* files @c 'widget:' (item) declarations.
*
* @see elm_prefs_item_iface_unregister()
*
* @since 1.8
*/
EAPI void elm_prefs_item_iface_register(const Elm_Prefs_Item_Iface_Info *array);
/**
* Mass-unregister widgets implementing prefs @b items interfaces.
*
* @param array An array of #Elm_Prefs_Iface_Info structs, @c NULL
* terminated.
*
* This will unregister all item interfaces declared on @a array in
* Elementary, given they had been previously registered.
*
* @see elm_prefs_item_iface_register() for more details
*
* @since 1.8
*/
EAPI void elm_prefs_item_iface_unregister(const Elm_Prefs_Item_Iface_Info *array);
EAPI Eina_Bool elm_prefs_item_widget_common_add(Evas_Object *prefs,
Evas_Object *obj);
typedef struct _Elm_Prefs_Page_Iface Elm_Prefs_Page_Iface;
/**
* @struct _Elm_Prefs_Page_Iface
*
* @brief Interface between pages of the @ref elm-prefs-widget widget
* and the real widgets implementing them.
*
* This structure defines the interface between the
* @ref elm-prefs-widget widget's pages and Elementary widgets
* implementing them.
*
* It is @b mandatory that the following functions be implemented, at
* least, for a page widget:
*
* - #Elm_Prefs_Page_Iface::add
* - #Elm_Prefs_Page_Iface::item_pack
* - #Elm_Prefs_Page_Iface::item_unpack
* - #Elm_Prefs_Page_Iface::item_pack_before
* - #Elm_Prefs_Page_Iface::item_pack_after
*
* @note For regular, non-page prefs items, refer to #Elm_Prefs_Item_Iface.
*
* @since 1.8
*/
struct _Elm_Prefs_Page_Iface
{
#define ELM_PREFS_PAGE_IFACE_ABI_VERSION (1)
unsigned int abi_version; /**< always use:
* - #ELM_PREFS_PAGE_IFACE_ABI_VERSION to declare.
* - elm_prefs_widget_iface_abi_version_get() to check.
*/
Evas_Object * (*add)(const Elm_Prefs_Page_Iface * iface,
Evas_Object * prefs); /**< Function to instantiate the page widget. It must return the widget handle, which should be the @c obj argument on the functions which follow. That object argument, by the way, should always have their respective #Elm_Prefs_Page_Node handle accessible via a @c "prefs_page" Evas object data value. The return value of the following functions should be @c EINA_TRUE, on success or @c EINA_FALSE, otherwise. */
Eina_Bool (*title_set)(Evas_Object *obj,
const char *title); /**< function to set a title on the page widget */
Eina_Bool (*sub_title_set)(Evas_Object *obj,
const char *sub_title); /**< function to set a sub-title on the page widget */
Eina_Bool (*icon_set)(Evas_Object *obj,
const char *icon); /**< function to set an icon on the page widget */
Eina_Bool (*item_pack)(Evas_Object *obj,
Evas_Object *it,
const Elm_Prefs_Item_Type type,
const Elm_Prefs_Item_Iface *iface); /**< function to pack an item (widget) on the page widget */
Eina_Bool (*item_unpack)(Evas_Object *obj,
Evas_Object *it); /**< function to unpack an item (widget) on the page widget */
Eina_Bool (*item_pack_before)(Evas_Object *obj,
Evas_Object *it,
Evas_Object *it_before,
const Elm_Prefs_Item_Type type,
const Elm_Prefs_Item_Iface *iface); /**< function to pack an item (widget) on the page widget, before a pre-existing, referential, packed one */
Eina_Bool (*item_pack_after)(Evas_Object *obj,
Evas_Object *it,
Evas_Object *it_after, /**< function to pack an item (widget) on the page widget, after a pre-existing, referential, packed one */
const Elm_Prefs_Item_Type type,
const Elm_Prefs_Item_Iface *iface);
};
typedef struct _Elm_Prefs_Page_Iface_Info Elm_Prefs_Page_Iface_Info;
/**
* Convenience struct used to mass-register widgets implementing
* prefs @b pages interfaces.
*
* To be used with elm_prefs_page_iface_register() and
* elm_prefs_page_iface_unregister().
*/
struct _Elm_Prefs_Page_Iface_Info
{
const char *widget_name; /**< The name of the widget implementing the interface, to be exposed on the prefs collections language. */
const Elm_Prefs_Page_Iface *info; /**< The interface's implementation. */
};
/**
* Mass-register widgets implementing prefs @b pages interfaces.
*
* @param array An array of #Elm_Prefs_Iface_Info structs, @c NULL
* terminated.
*
* This will register all page interfaces declared on @a array in
* Elementary, so that the prefs widget will recognize them on @c .epc
* files @c 'widget:' (page) declarations.
*
* @see elm_prefs_page_iface_unregister()
*
* @since 1.8
*/
EAPI void elm_prefs_page_iface_register(const Elm_Prefs_Page_Iface_Info *array);
/**
* Mass-unregister widgets implementing prefs @b pages interfaces.
*
* @param array An array of #Elm_Prefs_Iface_Info structs, @c NULL
* terminated.
*
* This will unregister all page interfaces declared on @a array in
* Elementary, given they had been previously registered.
*
* @see elm_prefs_page_iface_register() for more details
*
* @since 1.8
*/
EAPI void elm_prefs_page_iface_unregister(const Elm_Prefs_Page_Iface_Info *array);
/**
* @}
*/