summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2017-11-20 20:15:54 -0200
committerFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2017-11-20 20:15:54 -0200
commitbf4841350e92b8332611e660c3a1d8b5c5997f2f (patch)
tree06a84e80aa5b0d2b134f8c608d595de6fb27ba67
parent575bb4762948e0cb3535088fbc129250fbcab15d (diff)
downloadefl-bf4841350e92b8332611e660c3a1d8b5c5997f2f.tar.gz
elementary: Change Efl_Ui_List_Item to use index by offset of its node
-rw-r--r--src/lib/elementary/efl_ui_list.c6
-rw-r--r--src/lib/elementary/efl_ui_list_private.h2
-rw-r--r--src/lib/elementary/efl_ui_list_segarray.c21
-rw-r--r--src/lib/elementary/efl_ui_list_types.eot3
4 files changed, 24 insertions, 8 deletions
diff --git a/src/lib/elementary/efl_ui_list.c b/src/lib/elementary/efl_ui_list.c
index 4addef1d99..2512ce70e1 100644
--- a/src/lib/elementary/efl_ui_list.c
+++ b/src/lib/elementary/efl_ui_list.c
@@ -468,7 +468,7 @@ _layout_unrealize(Efl_Ui_List_Data *pd, Efl_Ui_List_Item *item)
evt.child = item->item.children;
evt.layout = item->item.layout;
- evt.index = item->item.index;
+ evt.index = efl_ui_list_item_index_get(item);
efl_event_callback_call(item->list, EFL_UI_LIST_EVENT_ITEM_UNREALIZED, &evt);
efl_ui_view_model_set(item->item.layout, NULL);
@@ -1485,7 +1485,7 @@ _efl_ui_list_efl_ui_list_model_realize(Eo *obj, Efl_Ui_List_Data *pd, Efl_Ui_Lis
evt.child = item->children;
evt.layout = item->layout;
- evt.index = item->index;
+ evt.index = efl_ui_list_item_index_get(item);
efl_event_callback_call(obj, EFL_UI_LIST_EVENT_ITEM_REALIZED, &evt);
evas_object_show(item->layout);
@@ -1504,7 +1504,7 @@ _efl_ui_list_efl_ui_list_model_unrealize(Eo *obj, Efl_Ui_List_Data *pd, Efl_Ui_L
evt.child = item->children;
evt.layout = item->layout;
- evt.index = item->index;
+ evt.index = efl_ui_list_item_index_get(item);
efl_event_callback_call(obj, EFL_UI_LIST_EVENT_ITEM_UNREALIZED, &evt);
efl_ui_view_model_set(item->layout, NULL);
diff --git a/src/lib/elementary/efl_ui_list_private.h b/src/lib/elementary/efl_ui_list_private.h
index 7c4d2541ea..b34fc04499 100644
--- a/src/lib/elementary/efl_ui_list_private.h
+++ b/src/lib/elementary/efl_ui_list_private.h
@@ -29,6 +29,8 @@ struct _Efl_Ui_List_Item
Eina_Bool longpressed : 1;
};
+int efl_ui_list_item_index_get(Efl_Ui_List_Item const* item);
+
typedef struct _Efl_Ui_List_Data Efl_Ui_List_Data;
#include "efl_ui_list_segarray.h"
diff --git a/src/lib/elementary/efl_ui_list_segarray.c b/src/lib/elementary/efl_ui_list_segarray.c
index 1768815ae1..029850e9fb 100644
--- a/src/lib/elementary/efl_ui_list_segarray.c
+++ b/src/lib/elementary/efl_ui_list_segarray.c
@@ -89,14 +89,20 @@ void efl_ui_list_segarray_setup(Efl_Ui_List_SegArray* segarray, //int member_siz
segarray->array_initial_size = initial_step_size;
}
-static Efl_Ui_List_Item* _create_item(Efl_Model* model, unsigned int index)
+static Efl_Ui_List_Item* _create_item(Efl_Model* model, Efl_Ui_List_SegArray_Node* node, unsigned int off_index)
{
Efl_Ui_List_Item* item = calloc(1, sizeof(Efl_Ui_List_Item));
item->item.children = model;
- item->item.index = index;
+ item->item.index_offset = off_index;
+ item->item.tree_node = node;
return item;
}
+/* void efl_ui_list_segarray_insert(Efl_Ui_List* segarray, int index, Efl_Ui_List_Item* item) */
+/* { */
+
+/* } */
+
void efl_ui_list_segarray_insert_accessor(Efl_Ui_List_SegArray* segarray, int first, Eina_Accessor* accessor)
{
int i;
@@ -114,7 +120,7 @@ void efl_ui_list_segarray_insert_accessor(Efl_Ui_List_SegArray* segarray, int fi
if(node)
{
assert(node->length < node->max);
- node->pointers[node->length] = _create_item(children, first + i);
+ node->pointers[node->length] = _create_item(children, node, i);
node->length++;
segarray->count++;
}
@@ -122,7 +128,7 @@ void efl_ui_list_segarray_insert_accessor(Efl_Ui_List_SegArray* segarray, int fi
{
DBG("no node to add item for index %d!", i + first);
node = _alloc_node(segarray, i + first, segarray->array_initial_size);
- node->pointers[0] = _create_item(children, first + i);
+ node->pointers[0] = _create_item(children, node, i);
node->length++;
segarray->count++;
}
@@ -312,3 +318,10 @@ Eina_Accessor* efl_ui_list_segarray_node_accessor_get(Efl_Ui_List_SegArray* sega
_efl_ui_list_segarray_node_accessor_setup(acc, segarray);
return &acc->vtable;
}
+
+int efl_ui_list_item_index_get(Efl_Ui_List_Item const* item)
+{
+ Efl_Ui_List_SegArray_Node* node = item->item.tree_node;
+ return item->item.index_offset + node->first;
+}
+
diff --git a/src/lib/elementary/efl_ui_list_types.eot b/src/lib/elementary/efl_ui_list_types.eot
index cd45bbaf37..a0997c8db4 100644
--- a/src/lib/elementary/efl_ui_list_types.eot
+++ b/src/lib/elementary/efl_ui_list_types.eot
@@ -1,7 +1,8 @@
struct Efl.Ui.List.LayoutItem {
layout: Efl.Ui.Layout;
children: Efl.Model;
- index: int;
+ index_offset: int;
+ tree_node: void_ptr;
min: Eina.Size2D;
size: Eina.Size2D;
pos: Eina.Position2D;