forked from enlightenment/efl
323 lines
12 KiB
Plaintext
323 lines
12 KiB
Plaintext
/*
|
|
* type Efl_Model_Load_Status: enum _Efl_Model_Load_Status
|
|
* {
|
|
* EFL_MODEL_LOAD_STATUS_ERROR = 0, /*@ Error in Load Model *
|
|
* EFL_MODEL_LOAD_STATUS_LOADING_PROPERTIES = (1 << 0), /*@ properties load in progress *
|
|
* EFL_MODEL_LOAD_STATUS_LOADING_CHILDREN = (1 << 1), /*@ children load in progress *
|
|
* EFL_MODEL_LOAD_STATUS_LOADING = (1 << 0) | (1 << 1), /*@ children and properties load in progress *
|
|
*
|
|
* EFL_MODEL_LOAD_STATUS_LOADED_PROPERTIES = (1 << 2), /*@ Model as ready to fetch properties *
|
|
* EFL_MODEL_LOAD_STATUS_LOADED_CHILDREN = (1 << 3), /*@ Model as ready to fetch children *
|
|
* EFL_MODEL_LOAD_STATUS_LOADED = (1 << 2) | (1 << 3), /*@ Model as ready to fetch properties and children *
|
|
*
|
|
* EFL_MODEL_LOAD_STATUS_UNLOADING = (1 << 4), /*@ Model Unload in progress *
|
|
* EFL_MODEL_LOAD_STATUS_UNLOADED = (1 << 5) /*@ Model Unloaded *
|
|
* }
|
|
*
|
|
*
|
|
* type Efl_Model_Property_Event: struct _Efl_Model_Property_Event
|
|
* {
|
|
* changed_properties: Eina_Array* <const(char)*>; /*@ List of changed properties *
|
|
* invalidated_properties: Eina_Array* <const(char)*>; /*@ Removed properties identified by name *
|
|
* }
|
|
*/
|
|
|
|
interface Efl.Model.Base ()
|
|
{
|
|
legacy_prefix: null;
|
|
eo_prefix: efl_model;
|
|
properties {
|
|
load_status {
|
|
get {
|
|
/*@
|
|
Get a load emodel current status.
|
|
|
|
@return: @c Efl_Model_Load_Status
|
|
|
|
By convention this means get the current model status.
|
|
Possible values are defined Efl_Model_Load_Status enumerator.
|
|
|
|
@see Efl_Model_Load_Status
|
|
@see efl_model_load
|
|
|
|
@since 1.14 */
|
|
return: Efl_Model_Load_Status;
|
|
}
|
|
}
|
|
properties {
|
|
get {
|
|
/*@
|
|
Get properties from model.
|
|
|
|
@return: @c Efl_Model_Load_Status
|
|
|
|
properties_get is due to provide callers a way the fetch the current
|
|
properties implemented/used by the model.
|
|
The event EFL_MODEL_EVENT_PROPERTIES_CHANGE will be raised to notify listeners
|
|
of any modifications in the properties.
|
|
|
|
@see EFL_MODEL_EVENT_PROPERTIES_CHANGE
|
|
@since 1.14 */
|
|
|
|
return: Efl_Model_Load_Status;
|
|
}
|
|
values {
|
|
const(array<const(char*)>*) properties; /*@ array of current properties */
|
|
}
|
|
}
|
|
property {
|
|
set {
|
|
/*@
|
|
Set a property value of a given property name.
|
|
|
|
@return: @c EINA_TRUE, on success, @c EINA_FALSE in readonly property or error
|
|
|
|
The caller must ensure to call at least efl_model_prop_list before being
|
|
able to see/set properties.
|
|
This function sets a new property value into given property name. Once
|
|
the operation is completed the concrete implementation should raise
|
|
EFL_MODEL_EVENT_PROPERTIES_CHANGE event in order to notify listeners of the
|
|
new value of the property.
|
|
|
|
If the model doesn't have the property then there are two possibilities,
|
|
either raise an error or create the new property in model
|
|
|
|
@see efl_model_property_get
|
|
@see EFL_MODEL_EVENT_PROPERTIES_CHANGE
|
|
@since 1.14 */
|
|
|
|
return: Efl_Model_Load_Status;
|
|
}
|
|
get {
|
|
/*@
|
|
Retrieve the value of a given property name.
|
|
|
|
@return: @c Load Status, on success, @c EFL_MODEL_LOAD_STATUS_ERROR otherwise
|
|
|
|
property_get will only be available when load status is equal to
|
|
EFL_MODEL_LOAD_STATUS_LOADED.
|
|
|
|
At this point the caller is free to get values from properties.
|
|
The event EFL_MODEL_EVENT_PROPERTIES_CHANGE may be raised to notify
|
|
listeners of the property/value.
|
|
|
|
@see efl_model_properties_get
|
|
@see EFL_MODEL_EVENT_PROPERTIES_CHANGE
|
|
|
|
@since 1.14 */
|
|
return: Efl_Model_Load_Status;
|
|
}
|
|
keys {
|
|
const(char)* property; /*@ Property name */
|
|
}
|
|
values {
|
|
const(Eina_Value)* value; /*@ New value */
|
|
}
|
|
}
|
|
children_slice {
|
|
get {
|
|
/*@
|
|
Get children slice OR full range.
|
|
|
|
@return: @c Efl_Model_Load_Status. See below for more info.
|
|
|
|
Before being able to get the children list the model status must be
|
|
on loaded status (EFL_MODEL_LOAD_STATUS_LOADED).
|
|
However there may be circunstancies where the model could be
|
|
in a different state, in such cases it is advisable
|
|
to simply return: its current state, which will be
|
|
of course, different than @c EFL_MODEL_LOAD_STATUS_LOADED_CHILDREN.
|
|
When children accessor is return:ed as NULL one should then
|
|
test the current load status return:ed by @children_slice_get
|
|
in order to check against an empty list or real error.
|
|
|
|
children_slice_get behaves in two different ways, it may provide
|
|
the slice if both @c start AND @c count are non-zero OR full range otherwise.
|
|
|
|
The return:ed Eina_Accessor must be freed when it is no longer needed and
|
|
eo_unref() must be invoked for children if caller wants a copy.
|
|
|
|
Since 'slice' is a range, for example if we have 20 childs a slice could be
|
|
the range from 3(start) to 4(count), see:
|
|
child 0 [no]
|
|
child 1 [no]
|
|
child 2 [yes]
|
|
child 3 [yes]
|
|
child 4 [yes]
|
|
child 5 [yes]
|
|
child 6 [no]
|
|
child 7 [no]
|
|
|
|
Optionally the user can call children_count_get to know
|
|
the number of children so a valid range can be known in advance.
|
|
|
|
Below are examples of both usage types: slices and full ranges.
|
|
@code
|
|
|
|
// Returns full list
|
|
eo_do(obj, efl_model_children_slice_get(0, 0, &children_accessor));
|
|
|
|
// Returns 5 items, counting from item #5
|
|
eo_do(obj, efl_model_children_slice_get(5, 5, &children_accessor));
|
|
|
|
@endcode
|
|
|
|
@see efl_model_children_get
|
|
@see efl_model_children_count_get
|
|
@see efl_model_load
|
|
@see efl_model_load_status_get
|
|
@since 1.14 */
|
|
|
|
return: Efl_Model_Load_Status;
|
|
}
|
|
keys {
|
|
unsigned start; /*@ Range begin - start from here. If start and count are 0 slice is ignored.*/
|
|
unsigned count; /*@ Range size. If count and start are 0 slice is ignored.*/
|
|
}
|
|
values {
|
|
accessor<list*>* children_accessor;
|
|
}
|
|
}
|
|
children_count {
|
|
get {
|
|
/*@
|
|
Get children count.
|
|
|
|
@return: @c EINA_TRUE, on success, @c EINA_FALSE otherwise
|
|
|
|
When efl_model_load is completed efl_model_coildren_count_get can be use
|
|
to get the number of children. children_count_get can also be used
|
|
before calling children_slice_get so a valid range is known.
|
|
Event EFL_MODEL_CHILDREN_COUNT_CHANGED is emitted when count is finished.
|
|
|
|
@see efl_model_children_get
|
|
@see efl_model_children_slice_get
|
|
@see efl_model_load
|
|
@see efl_model_load_status_get
|
|
@since 1.14 */
|
|
|
|
return: Efl_Model_Load_Status;
|
|
}
|
|
values {
|
|
unsigned children_count;
|
|
}
|
|
}
|
|
}
|
|
methods {
|
|
load {
|
|
/*@
|
|
Load emodel.
|
|
|
|
By convention this means loading data from an external source and populating
|
|
the models properties and children with it. For example in the case of file
|
|
system backed model, this means opening the relevant files and reading the
|
|
data from them(creating the properties and children from it).
|
|
the model emit EFL_MODEL_EVENT_LOAD_STATUS after end with Efl_Model_Load_Status
|
|
@warning This convention should be followed, but no guarantees of behaviour
|
|
by user defined types can be given.
|
|
|
|
Alternatively is possible to use properties_load to load only properties
|
|
and children_load to load only children. If efl_model_load is called then
|
|
calling properties_load and/or children_load is not necessary.
|
|
|
|
@see Efl_Model_Load_Status
|
|
@see efl_model_properties_load
|
|
@see efl_model_children_load
|
|
@see efl_model_unload
|
|
@see efl_model_load_status_get
|
|
|
|
@since 1.14 */
|
|
}
|
|
unload {
|
|
/*@
|
|
Unload emodel.
|
|
|
|
By convention this means releasing data received/read from an external source. For
|
|
example of a database backed model this might mean releasing the iterator for
|
|
the currently loaded data or deleting a temporary table.
|
|
the model emit EFL_MODEL_EVENT_LOAD_STATUS after end with model load status
|
|
@warning This convention should be followed, but no guarantees of behaviour
|
|
by user defined types can be given.
|
|
|
|
@see Efl_Model_Load_Status
|
|
@see efl_model_load
|
|
@see efl_model_load_status_get
|
|
|
|
@since 1.14 */
|
|
}
|
|
properties_load {
|
|
/*@
|
|
Properties emodel load.
|
|
|
|
By convention this means loading data from an external source and populating
|
|
the models properties only. This method is a subset of efl_model_load, meaning that
|
|
it won't load children, it is a hint.
|
|
For loadind both properties and children use efl_model_load
|
|
instead.
|
|
|
|
@see efl_model_load
|
|
|
|
@since 1.14 */
|
|
}
|
|
children_load {
|
|
/*@
|
|
Children emodel load.
|
|
|
|
By convention this means loading data from an external source and populating
|
|
the models children only. This method is a subset of efl_model_load, meaning that
|
|
it won't load properties. For loadind both properties and children use efl_model_load
|
|
instead.
|
|
|
|
@see efl_model_load
|
|
|
|
@since 1.14 */
|
|
}
|
|
child_add {
|
|
/*@
|
|
Add a new child.
|
|
|
|
@return: @c Emodel* on success, @c NULL otherwise
|
|
|
|
Add a new child, possibly dummy, depending on the implementation,
|
|
of a internal keeping. When the child is effectively
|
|
added the event EFL_MODEL_EVENT_CHILD_ADD is then raised and the new child
|
|
is kept along with other children.
|
|
|
|
@see EFL_MODEL_EVENT_CHILD_ADD
|
|
@see load_status_get
|
|
|
|
@since 1.14 */
|
|
|
|
return: Eo *;
|
|
}
|
|
child_del {
|
|
/*@
|
|
Remove a child.
|
|
|
|
@return: @c Efl_Model_Load_Status on success, @c EFL_MODEL_LOAD_STATUS_ERROR otherwise.
|
|
|
|
Remove a child of a internal keeping. When the child is effectively
|
|
removed the event EFL_MODEL_EVENT_CHILD_REMOVED is then raised to give a
|
|
chance for listeners to perform any cleanup and/or update references.
|
|
|
|
@see EFL_MODEL_EVENT_CHILD_REMOVED
|
|
@since 1.14 */
|
|
|
|
return: Efl_Model_Load_Status;
|
|
|
|
params {
|
|
@in Eo* child; /*@ Child to be removed */
|
|
}
|
|
}
|
|
}
|
|
|
|
events {
|
|
load,status: Efl_Model_Load_Status; /*@ Event dispatch when load status changes */
|
|
properties,changed: Efl_Model_Properties_Evt; /*@ Event dispatched when properties list is available. */
|
|
child,added; /*@ Event dispatched when new child is added. */
|
|
child,removed; /*@ Event dispatched when child is removed. */
|
|
children,count,changed; /*@ Event dispatched when children count is finished. */
|
|
}
|
|
}
|
|
|