~~Title: Efl.Ui.View_Model~~ ====== Efl.Ui.View_Model (class) ====== ===== Description ===== %%Efl model providing helpers for custom properties used when linking a model to a view and you need to generate/adapt values for display.%% %%There is two ways to use this class, you can either inherit from it and have a custom constructor for example. Or you can just instantiate it and manually define your property on it via callbacks.%% {{page>:develop:api-include:efl:ui:view_model:description&nouser&nolink&nodate}} ===== Inheritance ===== => [[:develop:api:efl:composite_model|Efl.Composite_Model]] //(class)// => [[:develop:api:efl:loop_model|Efl.Loop_Model]] //(class)// => [[:develop:api:efl:loop_consumer|Efl.Loop_Consumer]] //(class)// => [[:develop:api:efl:object|Efl.Object]] //(class)// ++++ Full hierarchy | * [[:develop:api:efl:composite_model|Efl.Composite_Model]] //(class)// * [[:develop:api:efl:loop_model|Efl.Loop_Model]] //(class)// * [[:develop:api:efl:loop_consumer|Efl.Loop_Consumer]] //(class)// * [[:develop:api:efl:object|Efl.Object]] //(class)// * [[:develop:api:efl:model|Efl.Model]] //(interface)// * [[:develop:api:efl:ui:view|Efl.Ui.View]] //(interface)// ++++ ===== Members ===== **[[:develop:api:efl:ui:view_model:property:children_bind|children_bind]]** //**(get, set)**//\\ > %%Define if we will intercept all children object reference and bind them through the ViewModel with the same property logic as this one. Be careful of recursivity.%% Eina_Bool efl_ui_view_model_children_bind_get(const Eo *obj); void efl_ui_view_model_children_bind_set(Eo *obj, Eina_Bool enable); \\ **[[:develop:api:efl:ui:view_model:method:children_slice_get|children_slice_get]]**// [Overridden from [[:develop:api:efl:model|Efl.Model]]]//\\ > %%Get children slice OR full range.%% Eina_Future *efl_model_children_slice_get(Eo *obj, unsigned int start, unsigned int count); \\ **[[:develop:api:efl:ui:view_model:method:constructor|constructor]]**// [Overridden from [[:develop:api:efl:object|Efl.Object]]]//\\ > %%Implement this method to provide optional initialization code for your object.%% Efl_Object *efl_constructor(Eo *obj); \\ **[[:develop:api:efl:ui:view_model:method:destructor|destructor]]**// [Overridden from [[:develop:api:efl:object|Efl.Object]]]//\\ > %%Implement this method to provide deinitialization code for your object if you need it.%% void efl_destructor(Eo *obj); \\ **[[:develop:api:efl:ui:view_model:method:finalize|finalize]]**// [Overridden from [[:develop:api:efl:object|Efl.Object]]]//\\ > %%Implement this method to finish the initialization of your object after all (if any) user-provided configuration methods have been executed.%% Efl_Object *efl_finalize(Eo *obj); \\ **[[:develop:api:efl:ui:view_model:property:properties|properties]]** //**(get)**//// [Overridden from [[:develop:api:efl:model|Efl.Model]]]//\\ > Eina_Iterator *efl_model_properties_get(const Eo *obj); \\ **[[:develop:api:efl:ui:view_model:property:property|property]]** //**(get, set)**//// [Overridden from [[:develop:api:efl:model|Efl.Model]]]//\\ > Eina_Value *efl_model_property_get(const Eo *obj, const char *property); Eina_Future *efl_model_property_set(Eo *obj, const char *property, Eina_Value *value); \\ **[[:develop:api:efl:ui:view_model:method:property_bind|property_bind]]**\\ > %%Automatically update the field for the event %%[[:develop:api:efl:model:event:properties,changed|Efl.Model.properties,changed]]%% to include property that are impacted with change in a property from the composited model.%% void efl_ui_view_model_property_bind(Eo *obj, const char *source, const char *destination); \\ **[[:develop:api:efl:ui:view_model:method:property_logic_add|property_logic_add]]**\\ > %%Add callbacks that will be triggered when someone ask for the specified property name when getting or setting a property.%% Eina_Error efl_ui_view_model_property_logic_add(Eo *obj, const char *property, EflUiViewModelPropertyGet get, EflUiViewModelPropertySet set, Eina_Iterator *binded); \\ **[[:develop:api:efl:ui:view_model:method:property_logic_del|property_logic_del]]**\\ > %%Delete previously added callbacks that were triggered when someone asked for the specified property name when getting or setting a property.%% Eina_Error efl_ui_view_model_property_logic_del(Eo *obj, const char *property); \\ **[[:develop:api:efl:ui:view_model:method:property_string_add|property_string_add]]**\\ > %%Adds a synthetic string property, generated from a %%''definition''%% string and other properties in the model.%% Eina_Error efl_ui_view_model_property_string_add(Eo *obj, const char *name, const char *definition, const char *not_ready, const char *on_error); \\ **[[:develop:api:efl:ui:view_model:method:property_string_del|property_string_del]]**\\ > %%Delete a synthetic property previously defined by %%[[:develop:api:efl:ui:view_model:method:property_string_add|Efl.Ui.View_Model.property_string_add]]%%.%% Eina_Error efl_ui_view_model_property_string_del(Eo *obj, const char *name); \\ **[[:develop:api:efl:ui:view_model:method:property_unbind|property_unbind]]**\\ > %%Stop automatically updating the field for the event %%[[:develop:api:efl:model:event:properties,changed|Efl.Model.properties,changed]]%% to include property that are impacted with change in a property from the composited model.%% void efl_ui_view_model_property_unbind(Eo *obj, const char *source, const char *destination); \\ ==== Inherited ==== ^ [[:develop:api:efl:composite_model|Efl.Composite_Model]] ^^^ | | **[[:develop:api:efl:composite_model:method:child_add|child_add]]** | %%Add a new child.%% | | | **[[:develop:api:efl:composite_model:method:child_del|child_del]]** | %%Remove a child.%% | | | **[[:develop:api:efl:composite_model:property:children_count|children_count]]** //**(get)**// | | | | **[[:develop:api:efl:composite_model:property:index|index]]** //**(get, set)**// | %%Position of this object in the parent model.%% | | | **[[:develop:api:efl:composite_model:method:invalidate|invalidate]]** | %%Implement this method to perform special actions when your object loses its parent, if you need to.%% | | | **[[:develop:api:efl:composite_model:property:model|model]]** //**(get, set)**// | %%Model that is/will be%% | ^ [[:develop:api:efl:loop_consumer|Efl.Loop_Consumer]] ^^^ | | **[[:develop:api:efl:loop_consumer:method:future_rejected|future_rejected]]** | %%Creates a new future that is already rejected to a specified error using the %%[[:develop:api:efl:loop_consumer:property:loop|Efl.Loop_Consumer.loop.get]]%%.%% | | | **[[:develop:api:efl:loop_consumer:method:future_resolved|future_resolved]]** | %%Creates a new future that is already resolved to a value.%% | | | **[[:develop:api:efl:loop_consumer:property:loop|loop]]** //**(get)**// | | | | **[[:develop:api:efl:loop_consumer:property:parent|parent]]** //**(get, set)**// | %%The parent of an object.%% | | | **[[:develop:api:efl:loop_consumer:method:promise_new|promise_new]]** | %%Create a new promise with the scheduler coming from the loop provided by this object.%% | ^ [[:develop:api:efl:loop_model|Efl.Loop_Model]] ^^^ | | **[[:develop:api:efl:loop_model:method:property_ready_get|property_ready_get]]** | %%Get a future value when it changes to something that is not error:EAGAIN%% | | | **[[:develop:api:efl:loop_model:method:volatile_make|volatile_make]]** | %%To be called when a Child model is created by %%[[:develop:api:efl:model:method:children_slice_get|Efl.Model.children_slice_get]]%% by the one creating the child object.%% | ^ [[:develop:api:efl:object|Efl.Object]] ^^^ | | **[[:develop:api:efl:object:property:allow_parent_unref|allow_parent_unref]]** //**(get, set)**// | %%Allow an object to be deleted by unref even if it has a parent.%% | | | **[[:develop:api:efl:object:method:children_iterator_new|children_iterator_new]]** | %%Get an iterator on all children.%% | | | **[[:develop:api:efl:object:property:comment|comment]]** //**(get, set)**// | %%A human readable comment for the object.%% | | | **[[:develop:api:efl:object:method:composite_attach|composite_attach]]** | %%Make an object a composite object of another.%% | | | **[[:develop:api:efl:object:method:composite_detach|composite_detach]]** | %%Detach a composite object from another object.%% | | | **[[:develop:api:efl:object:method:composite_part_is|composite_part_is]]** | %%Check if an object is part of a composite object.%% | | | **[[:develop:api:efl:object:method:debug_name_override|debug_name_override]]** | %%Build a read-only name for this object used for debugging.%% | | | **[[:develop:api:efl:object:method:event_callback_forwarder_del|event_callback_forwarder_del]]** | %%Remove an event callback forwarder for a specified event and object.%% | | | **[[:develop:api:efl:object:method:event_callback_forwarder_priority_add|event_callback_forwarder_priority_add]]** | %%Add an event callback forwarder that will make this object emit an event whenever another object (%%''source''%%) emits it. The event is said to be forwarded from %%''source''%% to this object.%% | | | **[[:develop:api:efl:object:method:event_callback_stop|event_callback_stop]]** | %%Stop the current callback call.%% | | | **[[:develop:api:efl:object:method:event_freeze|event_freeze]]** | %%Freeze events of this object.%% | | | **[[:develop:api:efl:object:property:event_freeze_count|event_freeze_count]]** //**(get)**// | | | ''static'' | **[[:develop:api:efl:object:method:event_global_freeze|event_global_freeze]]** | %%Globally freeze events for ALL EFL OBJECTS.%% | | ''static'' | **[[:develop:api:efl:object:property:event_global_freeze_count|event_global_freeze_count]]** //**(get)**// | | | ''static'' | **[[:develop:api:efl:object:method:event_global_thaw|event_global_thaw]]** | %%Globally thaw events for ALL EFL OBJECTS.%% | | | **[[:develop:api:efl:object:method:event_thaw|event_thaw]]** | %%Thaw events of object.%% | | | **[[:develop:api:efl:object:property:finalized|finalized]]** //**(get)**// | | | | **[[:develop:api:efl:object:property:invalidated|invalidated]]** //**(get)**// | | | | **[[:develop:api:efl:object:property:invalidating|invalidating]]** //**(get)**// | | | | **[[:develop:api:efl:object:property:name|name]]** //**(get, set)**// | %%The name of the object.%% | | | **[[:develop:api:efl:object:method:name_find|name_find]]** | %%Find a child object with the given name and return it.%% | | | **[[:develop:api:efl:object:method:provider_find|provider_find]]** | %%Searches upwards in the object tree for a provider which knows the given class/interface.%% | | | **[[:develop:api:efl:object:method:provider_register|provider_register]]** | %%Will register a manager of a specific class to be answered by %%[[:develop:api:efl:object:method:provider_find|Efl.Object.provider_find]]%%.%% | | | **[[:develop:api:efl:object:method:provider_unregister|provider_unregister]]** | %%Will unregister a manager of a specific class that was previously registered and answered by %%[[:develop:api:efl:object:method:provider_find|Efl.Object.provider_find]]%%.%% | ===== Events ===== ==== Inherited ==== ^ [[:develop:api:efl:model|Efl.Model]] ^^^ | | **[[:develop:api:efl:model:event:child_added|child,added]]** | %%Event dispatched when new child is added.%% | | | **[[:develop:api:efl:model:event:child_removed|child,removed]]** | %%Event dispatched when child is removed.%% | | | **[[:develop:api:efl:model:event:children_count_changed|children,count,changed]]** | %%Event dispatched when children count is finished.%% | | | **[[:develop:api:efl:model:event:properties_changed|properties,changed]]** | %%Event dispatched when properties list is available.%% | ^ [[:develop:api:efl:object|Efl.Object]] ^^^ | | **[[:develop:api:efl:object:event:del|del]]** | %%Object is being deleted. See %%[[:develop:api:efl:object:method:destructor|Efl.Object.destructor]]%%.%% | | | **[[:develop:api:efl:object:event:destruct|destruct]]** | %%Object has been fully destroyed. It can not be used beyond this point. This event should only serve to clean up any reference you keep to the object.%% | | | **[[:develop:api:efl:object:event:invalidate|invalidate]]** | %%Object is being invalidated and losing its parent. See %%[[:develop:api:efl:object:method:invalidate|Efl.Object.invalidate]]%%.%% | | | **[[:develop:api:efl:object:event:noref|noref]]** | %%Object has lost its last reference, only parent relationship is keeping it alive. Advanced usage.%% | | | **[[:develop:api:efl:object:event:ownership_shared|ownership,shared]]** | %%Object has acquired a second reference. It has multiple owners now. Triggered whenever increasing the refcount from one to two, it will not trigger by further increasing the refcount beyond two.%% | | | **[[:develop:api:efl:object:event:ownership_unique|ownership,unique]]** | %%Object has lost a reference and only one is left. It has just one owner now. Triggered whenever the refcount goes from two to one.%% | ^ [[:develop:api:efl:ui:view|Efl.Ui.View]] ^^^ | | **[[:develop:api:efl:ui:view:event:model_changed|model,changed]]** | %%Event dispatched when a new model is set.%% |