summaryrefslogtreecommitdiff
path: root/src/lib/efl/interfaces/efl_model.eo
blob: 27997285484679fb500b1300cfe5ecaf3a283777 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
struct Efl.Model.Property_Event {
     changed_properties: array<string>; [[List of changed properties]]
     invalidated_properties: array<string>; [[Removed properties identified by name]]
}

interface Efl.Model ()
{
   eo_prefix: efl_model;
      methods {
         @property properties {
            get {
               [[Get properties from model.

                 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 also \@ref EFL_MODEL_EVENT_PROPERTIES_CHANGE.

                 @since 1.14
               ]]
         }
         values {
               properties: const(array<string>); [[array of current properties]]
            }
        }
        property_set {
           [[Set a property value of a given property name.

             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 @.property_get, \@ref EFL_MODEL_EVENT_PROPERTIES_CHANGE

             @since 1.14
            ]]
           params {
               @in property: string; [[Property name]]
               @in value: const(generic_value)*; [[New value]]
               @inout promise: promise<generic_value>; [[Promise returning the recorded value or error]]
           }
        }
        property_get {
           [[Retrieve the value of a given property name.

             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 @.properties.get, \@ref EFL_MODEL_EVENT_PROPERTIES_CHANGE

             @since 1.14
           ]]
           params {
               @in property: string; [[Property name]]
           }
           return: promise<generic_value>; [[Promise of the value that was got]]
        }
        children_slice_get {
               [[Get children slice OR full range.

                 children_slice_get behaves in two different ways, it may
                 provide the slice if both $start AND $count are non-zero
                 OR full range otherwise.

                 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.

                 See @.children_count_get

                 @since 1.14
               ]]
            params {
                @in start: uint; [[Range begin - start from here. If start and
                               count are 0 slice is ignored.]]
                @in count: uint; [[Range size. If count and start are 0 slice is
                               ignored.]]
            }
            return: promise<accessor<Efl.Object> >; [[Promise of the children]]
         }
         children_count_get {
                [[Get children count.

                  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 also @.children_slice_get.

                  @since 1.14
                ]]
            return: promise<uint>;
         }
         child_add {
            [[Add a new child.

              Add a new child, possibly dummy, depending on the implementation,
              of a internal keeping. When the child is effectively
              added the event \@ref EFL_MODEL_EVENT_CHILD_ADD is then raised
              and the new child is kept along with other children.

              @since 1.14
            ]]
            return: Efl.Object;
         }
         child_del {
            [[Remove a child.

              Remove a child of a internal keeping. When the child is effectively
              removed the event \@ref EFL_MODEL_EVENT_CHILD_REMOVED is then
              raised to give a chance for listeners to perform any cleanup
              and/or update references.

              @since 1.14
            ]]
            params {
               @in child: Efl.Object; [[Child to be removed]]
            }
         }
      }

   events {
      properties,changed: Efl.Model.Property_Event; [[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.]]
   }
}