summaryrefslogtreecommitdiff
path: root/legacy/elementary/src/lib/elm_prefs_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'legacy/elementary/src/lib/elm_prefs_data.h')
-rw-r--r--legacy/elementary/src/lib/elm_prefs_data.h298
1 files changed, 298 insertions, 0 deletions
diff --git a/legacy/elementary/src/lib/elm_prefs_data.h b/legacy/elementary/src/lib/elm_prefs_data.h
new file mode 100644
index 0000000000..bf3b8af2c8
--- /dev/null
+++ b/legacy/elementary/src/lib/elm_prefs_data.h
@@ -0,0 +1,298 @@
+/**
+ * @defgroup Elm_Prefs Elementary Prefs
+ * @ingroup Elementary
+ *
+ * Elementary provides a prefs (for "preferences") infrastructure, which
+ * consists of two sets of APIs:
+ * - prefs data and
+ * - prefs view.
+ *
+ * @section elm-prefs-data Prefs Data
+ *
+ * Prefs data are simple key/value storage handles. One is able to
+ * set/get their values, which are @c Eina_Value blobs
+ * (i.e. dynamically typed). You may also control the version of this
+ * data set, for updating purposes. Finally, you may register
+ * callbacks on changes on these data.
+ *
+ * The main user of prefs data is the prefs @b widget. After its
+ * creation, it's bound to a given prefs data handle (if not, if gets
+ * its values from its definition file, which may have defaults). An
+ * elm prefs widget has its visuals defined by an @c .epb file, which
+ * is a compiled form of a @c .edc counterpart -- a textual definition
+ * much like Edje @c .edc files. On these files, one defines the
+ * values (items) a prefs widget hold, which translate to other
+ * Elementary widgets. In other words, it does the mapping between UI
+ * widgets into prefs data values, and it keeps the synchrony between
+ * its child widgets' states and their corresponding prefs data
+ * values.
+ *
+ * @{
+ */
+
+/**
+ * Types of events a given prefs data handle may issue.
+ *
+ * @see elm_prefs_data_event_callback_add()
+ *
+ * @since 1.8
+ */
+typedef enum {
+ ELM_PREFS_DATA_EVENT_GROUP_AUTOSAVED, /** The group of values has been automatically saved (event info is the group's name (key)) */
+ ELM_PREFS_DATA_EVENT_ITEM_CHANGED, /** A given item (prefs data value) has been changed (event info is an #Elm_Prefs_Data_Event_Changed pointer) */
+ ELM_PREFS_DATA_EVENT_LAST /** sentinel value, don't use it */
+} Elm_Prefs_Data_Event_Type;
+
+/**
+ * @typedef Elm_Prefs_Data
+ *
+ * An Elm Prefs Data handle.
+ *
+ * @since 1.8
+ */
+typedef struct _Elm_Prefs_Data Elm_Prefs_Data;
+
+typedef void (*Elm_Prefs_Data_Event_Cb)(void *cb_data,
+ Elm_Prefs_Data_Event_Type type,
+ Elm_Prefs_Data *prefs_data,
+ void *event_info);
+
+/**
+ * @typedef Elm_Prefs_Data_Event_Changed
+ *
+ * An Elm Prefs #ELM_PREFS_DATA_EVENT_ITEM_CHANGED event info data
+ * blob.
+ *
+ * @since 1.8
+ */
+typedef struct _Elm_Prefs_Data_Event_Changed
+{
+ const char *key; /** key of the data value which changed */
+ const Eina_Value *value; /** the value, itself, to be used as a @b read-only Eina_Value (it can be @c NULL, if the data was deleted) */
+} Elm_Prefs_Data_Event_Changed;
+
+/**
+ * Create a new prefs data handle.
+ *
+ * @param data_file The (user) file where to read data from
+ * @param key The key where the data is stored under
+ * @param mode The mode of access to the given file
+ * @return A new prefs data handle
+ *
+ * If @a data_file is @c NULL,
+ * efreet_config_home_get()/<appname>/preferences.cfg will be used, by
+ * default. If @a key is @c NULL, it is considered a default key --
+ * "main".
+ *
+ * If @a mode is @c EET_FILE_MODE_READ, autosave will be always false
+ * for this elm_prefs_data handle. If @a mode is
+ * @c EET_FILE_MODE_WRITE, than @a data_file @b won't be read, but just
+ * written to.
+ *
+ * @note An elm prefs data handle starts with a reference count of @b
+ * 1 (see elm_prefs_data_ref()). Use elm_prefs_data_unref() to delete
+ * it.
+ *
+ * @since 1.8
+ */
+EAPI Elm_Prefs_Data *elm_prefs_data_new(const char *data_file,
+ const char *key,
+ Eet_File_Mode mode);
+
+/**
+ * Set the version field of a given prefs data handle.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @param version The version number
+ * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
+ *
+ * @see elm_prefs_data_version_get()
+ *
+ * @since 1.8
+ */
+EAPI Eina_Bool elm_prefs_data_version_set(Elm_Prefs_Data *prefs_data,
+ unsigned int version);
+
+/**
+ * Get the version field of a given prefs data handle.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @return The version of @a prefs_data or -1, on errors.
+ *
+ * @see elm_prefs_data_version_set()
+ *
+ * @since 1.8
+ */
+EAPI unsigned int elm_prefs_data_version_get(const Elm_Prefs_Data *prefs_data);
+
+/**
+ * Increment reference count on a given prefs data handle.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @return The same prefs data handle, @a prefs_data
+ *
+ * This increments the reference count of @a by 1. Use this to pass
+ * the handle safely to contexts other than the creation one, for
+ * example. Only when the reference count on a prefs data handle
+ * reaches @b 0 (see elm_prefs_data_unref()) will it be deleted.
+ *
+ * @since 1.8
+ */
+EAPI Elm_Prefs_Data *elm_prefs_data_ref(Elm_Prefs_Data *prefs_data);
+
+/**
+ * Decrement reference count on a given prefs data handle.
+ *
+ * @param prefs_data A valid prefs data handle
+ *
+ * This decrements the reference count of @a by 1. When the reference
+ * count on @a reach @b 0, it will it be deleted.
+ *
+ * @see elm_prefs_data_ref() for more details.
+ *
+ * @since 1.8
+ */
+EAPI void elm_prefs_data_unref(Elm_Prefs_Data *prefs_data);
+
+/**
+ * Set (or delete) one value of a given prefs data handle.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @param path The (unique) name (key) of the given value
+ * @param type The item type to which the value is to be associated
+ * @param value The value, itself. It must be a valid @c Eina_Value
+ * handle, bound to a given type and value or @c NULL. On
+ * the second case, the call will actually @b delete the
+ * given key from @a prefs_data.
+ * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
+ *
+ * A prefs data handle holds a list of key/value entries. This will
+ * set one of @a's values, by name. The value itself may be any valid
+ * and filled up @c Eina_Value handle.
+ *
+ * @since 1.8
+ */
+EAPI Eina_Bool elm_prefs_data_value_set(Elm_Prefs_Data *prefs_data,
+ const char *path,
+ const Elm_Prefs_Item_Type type,
+ const Eina_Value *value);
+
+/**
+ * Get one value of a given prefs data handle (by key).
+ *
+ * @param prefs_data A valid prefs data handle
+ * @param path The (unique) name (key) of the given value
+ * @param type The item type associated with the value
+ * @param value A valid @c Eina_Value handle, where to store the
+ * value, itself.
+ * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
+ *
+ * This will retrieve one of @a's values, by name. The value itself
+ * will be written to @a value, which will be overriden.
+ *
+ * @since 1.8
+ */
+EAPI Eina_Bool elm_prefs_data_value_get(const Elm_Prefs_Data *prefs_data,
+ const char *path,
+ Elm_Prefs_Item_Type *type,
+ Eina_Value *value);
+
+/**
+ * Register a callback for one of the prefs data events.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @param type The type of event to register to
+ * @param cb The callback function to issue on this event
+ * @param cb_data The data pointer to pass to @a cb on this event
+ * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
+ *
+ * @see #Elm_Prefs_Data_Event_Type for more details on the events.
+ * @see elm_prefs_data_event_callback_del()
+ *
+ * @since 1.8
+ */
+EAPI Eina_Bool elm_prefs_data_event_callback_add(Elm_Prefs_Data *prefs_data,
+ Elm_Prefs_Data_Event_Type type,
+ Elm_Prefs_Data_Event_Cb cb,
+ const void *cb_data);
+/**
+ * Unregister a callback for one of the prefs data events.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @param type The type of event to unregister
+ * @param cb The callback function being used to this event
+ * @param cb_data The data pointer being passed to @a cb on this event
+ * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise
+ *
+ * @see #Elm_Prefs_Data_Event_Type for more details on the events.
+ * @see elm_prefs_data_event_callback_add()
+ *
+ * @note If a same event callback (with matching type, callback
+ * function and data pointers) was added more than once on
+ * @a prefs_data, them same number of matching calls of this type have to
+ * issued to delete all them.
+ *
+ * @since 1.8
+ */
+EAPI Eina_Bool elm_prefs_data_event_callback_del(Elm_Prefs_Data *prefs_data,
+ Elm_Prefs_Data_Event_Type type,
+ Elm_Prefs_Data_Event_Cb cb,
+ const void *cb_data);
+
+/**
+ * Set whether a given elm prefs data handle should save its values
+ * back automatically on changes.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @param autosave @c EINA_TRUE to save automatically, @c EINA_FALSE otherwise.
+ *
+ * If @a autosave is @c EINA_TRUE, every call to
+ * elm_prefs_data_value_set() will implicitly issue elm_prefs_data_save() too.
+ *
+ * @warning This call will do nothing if @a prefs_data was created
+ * with mode EET_FILE_MODE_READ -- auto saving will be always disabled
+ * in this mode, as it can't write back.
+ *
+ * @see elm_prefs_data_autosave_get()
+ *
+ * @since 1.8
+ */
+EAPI void elm_prefs_data_autosave_set(Elm_Prefs_Data *prefs_data,
+ Eina_Bool autosave);
+
+/**
+ * Get whether a given elm prefs data handle is saving its values
+ * back automatically on changes.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @return @c EINA_TRUE if @a prefs_data is saving automatically,
+ * @c EINA_FALSE otherwise.
+ *
+ * @see elm_prefs_data_autosave_set()
+ *
+ * @since 1.8
+ */
+EAPI Eina_Bool elm_prefs_data_autosave_get(const Elm_Prefs_Data *prefs_data);
+
+/**
+ * Save, manually, a given elm prefs data handle data back, on the given
+ * file and key.
+ *
+ * @param prefs_data A valid prefs data handle
+ * @param file The file (path) to save to (@c NULL means same file as
+ * it was opened with)
+ * @param key The under which to save values (@c NULL means the same
+ * key as it was opened with)
+ * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
+ *
+ * @see elm_prefs_data_autosave_set()
+ *
+ * @since 1.8
+ */
+EAPI Eina_Bool elm_prefs_data_save(const Elm_Prefs_Data *prefs_data,
+ const char *file,
+ const char *key);
+
+/**
+ * @}
+ */