rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=58855a11d0cd162435d384ca077e5c7db738fb17

commit 58855a11d0cd162435d384ca077e5c7db738fb17
Author: Andrii Kroitor <[email protected]>
Date:   Fri Jun 10 10:19:19 2016 +0300

    update State after changes in resource manager
---
 src/bin/common/signals.h                   |  1 +
 src/bin/editor/editor_part.c               |  3 ++-
 src/bin/editor/editor_states.c             |  9 +++++---
 src/bin/project_manager/group_manager.c    | 21 +++++++++--------
 src/bin/project_manager/group_manager.h    |  2 +-
 src/bin/project_manager/resource_manager.c |  6 ++---
 src/bin/ui/property/property_group.c       |  6 ++++-
 src/bin/ui/tabs.c                          |  9 +++++---
 src/bin/ui/workspace/group_navigator.c     | 29 +++++++++++++++++++----
 src/bin/ui/workspace/workspace.c           | 37 +++++++++++++++++-------------
 src/bin/ui/workspace/workspace.h           | 12 +++++++---
 11 files changed, 89 insertions(+), 46 deletions(-)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index 858878d..3425e63 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -185,6 +185,7 @@ typedef struct {
 typedef struct {
    const char *part_name;
    const char *state_name;
+   double state_value;
 } Editor_State;
 /**
  * emited when state is added in editor.
diff --git a/src/bin/editor/editor_part.c b/src/bin/editor/editor_part.c
index 9f4f246..a6fa4b6 100644
--- a/src/bin/editor/editor_part.c
+++ b/src/bin/editor/editor_part.c
@@ -1146,7 +1146,8 @@ editor_part_selected_state_set(Evas_Object *edit_object, 
Change *change, Eina_Bo
         if (!_editor_signals_blocked)
           {
              event_info.part_name = eina_stringshare_add(part_name);
-             event_info.state_name = eina_stringshare_printf("%s %.2f", 
state_name, state_val);
+             event_info.state_name = eina_stringshare_add(state_name);
+             event_info.state_value = state_val;
              evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_PART_STATE_SELECTED, &event_info);
              eina_stringshare_del(event_info.part_name);
              eina_stringshare_del(event_info.state_name);
diff --git a/src/bin/editor/editor_states.c b/src/bin/editor/editor_states.c
index 6302087..261cc63 100644
--- a/src/bin/editor/editor_states.c
+++ b/src/bin/editor/editor_states.c
@@ -759,7 +759,8 @@ editor_state_add(Evas_Object *edit_object, Change *change, 
Eina_Bool merge __UNU
 
         _editor_project_changed();
         event_info.part_name = eina_stringshare_add(part_name);
-        event_info.state_name = eina_stringshare_printf("%s %.2f", state_name, 
state_val);
+        event_info.state_name = eina_stringshare_add(state_name);
+        event_info.state_value = state_val;
         if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_STATE_ADDED, (void *)&event_info);
         eina_stringshare_del(event_info.part_name);
         eina_stringshare_del(event_info.state_name);
@@ -801,7 +802,8 @@ editor_state_copy(Evas_Object *edit_object, Change *change, 
Eina_Bool merge __UN
           return false;
         _editor_project_changed();
         event_info.part_name = eina_stringshare_add(part_name);
-        event_info.state_name = eina_stringshare_printf("%s %.2f", state_name, 
state_val);
+        event_info.state_name = eina_stringshare_add(state_name);
+        event_info.state_value = state_val;
         if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_STATE_ADDED, (void *)&event_info);
         eina_stringshare_del(event_info.part_name);
         eina_stringshare_del(event_info.state_name);
@@ -819,7 +821,8 @@ editor_state_del(Evas_Object *edit_object, Change *change, 
Eina_Bool merge __UNU
    assert(edit_object != NULL);
 
    event_info.part_name = eina_stringshare_add(part_name);
-   event_info.state_name = eina_stringshare_printf("%s %.2f", state_name, 
state_val);
+   event_info.state_name = eina_stringshare_add(state_name);
+   event_info.state_value = state_val;
    if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_STATE_DELETED, (void *)&event_info);
    if (change)
      {
diff --git a/src/bin/project_manager/group_manager.c 
b/src/bin/project_manager/group_manager.c
index 15e7daf..1c68073 100644
--- a/src/bin/project_manager/group_manager.c
+++ b/src/bin/project_manager/group_manager.c
@@ -413,24 +413,20 @@ gm_group_used_fonts_get(const char *edj, const char 
*group)
 }
 
 State *
-gm_state_add(Project *pro, Part *part, const char *state_name)
+gm_state_add(Project *pro, Part *part, const char *state_name, double 
state_value)
 {
    Resource *resource, request;
    State *state;
-   Eina_Stringshare *parsed_state_name, *image_name, *name;
-   double val;
+   Eina_Stringshare *image_name, *name;
    Eina_List *tween_list, *l;
 
    assert(pro != NULL);
    assert(part != NULL);
    assert(state_name != NULL);
 
-   state_name_split(state_name, &parsed_state_name, &val);
-
-   state = (State *) resource_add(parsed_state_name, RESOURCE_TYPE_STATE);
-   state->val = val;
+   state = (State *) resource_add(state_name, RESOURCE_TYPE_STATE);
+   state->val = state_value;
    state->part = part;
-   eina_stringshare_del(parsed_state_name);
 
    resource_insert(&part->states, (Resource *)state);
 
@@ -528,7 +524,8 @@ gm_part_add(Project *pro, Group *group, const char 
*part_name)
    Resource *resource, request;
    Part *part;
    Eina_List *states, *l;
-   Eina_Stringshare *state_name, *group_name, *item_name;
+   Eina_Stringshare *state_name, *parsed_state_name, *group_name, *item_name;
+   double val;
 
    assert(pro != NULL);
    assert(group != NULL);
@@ -541,7 +538,11 @@ gm_part_add(Project *pro, Group *group, const char 
*part_name)
    resource_insert(&group->parts, (Resource *)part);
    states = edje_edit_part_states_list_get(group->edit_object, part_name);
    EINA_LIST_FOREACH(states, l, state_name)
-     gm_state_add(pro, part, state_name);
+     {
+        state_name_split(state_name, &parsed_state_name, &val);
+        gm_state_add(pro, part, parsed_state_name, val);
+        eina_stringshare_del(parsed_state_name);
+     }
    edje_edit_string_list_free(states);
 
    if ((part->type == EDJE_PART_TYPE_TABLE) ||
diff --git a/src/bin/project_manager/group_manager.h 
b/src/bin/project_manager/group_manager.h
index df9ba80..3a893f5 100644
--- a/src/bin/project_manager/group_manager.h
+++ b/src/bin/project_manager/group_manager.h
@@ -56,7 +56,7 @@ Eina_List *
 gm_group_used_fonts_get(const char *edj, const char *group);
 
 State *
-gm_state_add(Project *pro, Part *part, const char *state_name);
+gm_state_add(Project *pro, Part *part, const char *state_name, double 
state_value);
 
 Part *
 gm_part_add(Project *pro, Group *group, Eina_Stringshare *part_name);
diff --git a/src/bin/project_manager/resource_manager.c 
b/src/bin/project_manager/resource_manager.c
index f049061..483300a 100644
--- a/src/bin/project_manager/resource_manager.c
+++ b/src/bin/project_manager/resource_manager.c
@@ -113,7 +113,7 @@ resource_cmp(Resource *res1, Resource *res2)
         return 0;
      }
 
-   return strcmp(res1->name, res2->name);
+   return cmp;
 }
 
 Resource *
@@ -204,10 +204,10 @@ resource_remove(Eina_List **list, const Resource *res)
       case RESOURCE_TYPE_TAG:
       case RESOURCE_TYPE_COLORCLASS:
       case RESOURCE_TYPE_ITEM:
-         l_del = eina_list_search_sorted_list(res->used_in, 
(Eina_Compare_Cb)resource_cmp, res);
+         l_del = eina_list_search_sorted_list(*list, 
(Eina_Compare_Cb)resource_cmp, res);
          break;
       case RESOURCE_TYPE_PART:
-         l_del = eina_list_search_unsorted_list(res->used_in, 
(Eina_Compare_Cb)resource_cmp, res);
+         l_del = eina_list_search_unsorted_list(*list, 
(Eina_Compare_Cb)resource_cmp, res);
          break;
       case RESOURCE_TYPE_NONE:
          break;
diff --git a/src/bin/ui/property/property_group.c 
b/src/bin/ui/property/property_group.c
index 57e439a..9459ae1 100644
--- a/src/bin/ui/property/property_group.c
+++ b/src/bin/ui/property/property_group.c
@@ -1431,7 +1431,11 @@ _update_cb(Property_Attribute *pa, Property_Action 
*action)
          property_entry_set(action->control, group_pd.group->name);
          break;
       case ATTRIBUTE_STATE_NAME:
-         property_entry_set(action->control, 
group_pd.part->current_state->name);
+         str_val1 = eina_stringshare_printf("%s %.2f",
+                                            group_pd.part->current_state->name,
+                                            group_pd.part->current_state->val);
+         property_entry_set(action->control, str_val1);
+         eina_stringshare_del(str_val1);
          break;
       case ATTRIBUTE_PROGRAM_NAME:
          property_entry_set(action->control, PROGRAM_ARGS);
diff --git a/src/bin/ui/tabs.c b/src/bin/ui/tabs.c
index 8f52aea..190f599 100644
--- a/src/bin/ui/tabs.c
+++ b/src/bin/ui/tabs.c
@@ -497,7 +497,8 @@ _editor_part_state_selected_cb(void *data __UNUSED__,
    assert(tabs.current_group != NULL);
    assert(tabs.current_workspace != NULL);
 
-   workspace_part_state_select(tabs.current_workspace, 
editor_state->part_name, editor_state->state_name);
+   workspace_part_state_select(tabs.current_workspace, editor_state->part_name,
+                               editor_state->state_name, 
editor_state->state_value);
 }
 
 static void
@@ -623,7 +624,8 @@ _editor_state_added_cb(void *data __UNUSED__,
    assert(tabs.current_group != NULL);
    assert(tabs.current_workspace != NULL);
 
-   workspace_part_state_add(tabs.current_workspace, editor_state->part_name, 
editor_state->state_name);
+   workspace_part_state_add(tabs.current_workspace, editor_state->part_name,
+                               editor_state->state_name, 
editor_state->state_value);
 }
 
 static void
@@ -637,7 +639,8 @@ _editor_state_deleted_cb(void *data __UNUSED__,
    assert(tabs.current_group != NULL);
    assert(tabs.current_workspace != NULL);
 
-   workspace_part_state_del(tabs.current_workspace, editor_state->part_name, 
editor_state->state_name);
+   workspace_part_state_del(tabs.current_workspace, editor_state->part_name,
+                               editor_state->state_name, 
editor_state->state_value);
 }
 
 static void
diff --git a/src/bin/ui/workspace/group_navigator.c 
b/src/bin/ui/workspace/group_navigator.c
index a5efb48..4c6cdcb 100644
--- a/src/bin/ui/workspace/group_navigator.c
+++ b/src/bin/ui/workspace/group_navigator.c
@@ -122,6 +122,24 @@ _resource_label_get(void *data,
 }
 
 static char *
+_state_resource_label_get(void *data,
+                          Evas_Object *obj __UNUSED__,
+                          const char *pr __UNUSED__)
+{
+   char * ret;
+   State *res= data;
+   Eina_Stringshare *label;
+
+   assert(res != NULL);
+   assert(res->name != NULL);
+
+   label = eina_stringshare_printf("%s %.2f", res->name, res->val);
+   ret = strdup(label);
+   eina_stringshare_del(label);
+   return ret;
+}
+
+static char *
 _item_caption_label_get(void *data,
                         Evas_Object *obj __UNUSED__,
                         const char *pr)
@@ -557,7 +575,7 @@ _expanded_cb(void *data,
         EINA_LIST_FOREACH(part->states, l, state)
           {
              /* default state should be listed first */
-             if ((first_item) || (strcmp(state->name, "default 0.00") != 0))
+             if ((first_item) || ((strcmp(state->name, "default") != 0) || 
(state->val != 0)))
                {
                   elm_genlist_item_append(pl->genlist,
                                           (state->part->current_state == 
state) ? pl->itc_state_selected : pl->itc_state,
@@ -758,7 +776,8 @@ _selected_cb(void *data,
         /* enabling or disabling del button */
         if ((itc == pl->itc_item_caption) ||
             (((itc == pl->itc_state) || (itc == pl->itc_state_selected)) &&
-             (!strcmp(((State *)elm_object_item_data_get(glit))->name, 
"default 0.00"))))
+             (!strcmp(((State *)elm_object_item_data_get(glit))->name, 
"default")) &&
+             (((State *)elm_object_item_data_get(glit))->val == 0)))
           elm_object_disabled_set(pl->btn_del, true);
         else
           elm_object_disabled_set(pl->btn_del, false);
@@ -1845,7 +1864,7 @@ _state_del(Part_List *pl,
    state = elm_object_item_data_get(glit);
 
    assert(state != NULL);
-   assert(strcmp(state->name, "default 0.00")); /* default state can't be 
deleted */
+   assert((strcmp(state->name, "default") || (state->val != 0))); /* default 
state can't be deleted */
 
    msg = eina_stringshare_printf(_("deleted state \"%s\" %.2f"), state->name, 
state->val);
    change = change_add(msg);
@@ -2236,11 +2255,11 @@ group_navigator_add(Evas_Object *parent, Group *group)
 
    pl->itc_state = elm_genlist_item_class_new();
    pl->itc_state->item_style = "state";
-   pl->itc_state->func.text_get = _resource_label_get;
+   pl->itc_state->func.text_get = _state_resource_label_get;
 
    pl->itc_state_selected = elm_genlist_item_class_new();
    pl->itc_state_selected->item_style = "state_selected";
-   pl->itc_state_selected->func.text_get = _resource_label_get;
+   pl->itc_state_selected->func.text_get = _state_resource_label_get;
 
    pl->itc_item = elm_genlist_item_class_new();
    pl->itc_item->item_style = "item";
diff --git a/src/bin/ui/workspace/workspace.c b/src/bin/ui/workspace/workspace.c
index c23259a..abd5026 100644
--- a/src/bin/ui/workspace/workspace.c
+++ b/src/bin/ui/workspace/workspace.c
@@ -1392,7 +1392,8 @@ workspace_part_item_del(Evas_Object *obj,
 void
 workspace_part_state_add(Evas_Object *obj,
                          Eina_Stringshare *part_name,
-                         Eina_Stringshare *state_name)
+                         Eina_Stringshare *state_name,
+                         double state_val)
 {
    Part *part;
    Resource request;
@@ -1406,28 +1407,30 @@ workspace_part_state_add(Evas_Object *obj,
    part = (Part *)resource_get(wd->group->parts, &request);
 
    group_navigator_part_select(wd->group_navi, part);
-   state = gm_state_add(ap.project, part, state_name);
+   state = gm_state_add(ap.project, part, state_name, state_val);
    group_navigator_part_state_add(wd->group_navi, part, state);
 }
 
 void
 workspace_part_state_select(Evas_Object *obj,
                             Eina_Stringshare *part_name,
-                            Eina_Stringshare *state_name)
+                            Eina_Stringshare *state_name,
+                            double state_val)
 {
    Part *part;
-   Resource request;
-   State *state;
+   Resource part_request;
+   State *state, request;
    WS_DATA_GET(obj);
    assert(part_name != NULL);
    assert(state_name != NULL);
 
-   request.resource_type = RESOURCE_TYPE_PART;
-   request.name = part_name;
-   part = (Part *)resource_get(wd->group->parts, &request);
+   part_request.resource_type = RESOURCE_TYPE_PART;
+   part_request.name = part_name;
+   part = (Part *)resource_get(wd->group->parts, &part_request);
    request.resource_type = RESOURCE_TYPE_STATE;
    request.name = state_name;
-   state = (State *)resource_get(part->states, &request);
+   request.val = state_val;
+   state = (State *)resource_get(part->states, (Resource *)&request);
 
    groupview_hard_update(wd->normal.content);
    group_navigator_part_state_select(wd->group_navi, state);
@@ -1436,21 +1439,23 @@ workspace_part_state_select(Evas_Object *obj,
 void
 workspace_part_state_del(Evas_Object *obj,
                          Eina_Stringshare *part_name,
-                         Eina_Stringshare *state_name)
+                         Eina_Stringshare *state_name,
+                         double state_val)
 {
    Part *part;
-   Resource request;
-   State *state;
+   Resource part_request;
+   State *state, request;
    WS_DATA_GET(obj);
    assert(part_name != NULL);
    assert(state_name != NULL);
 
-   request.resource_type = RESOURCE_TYPE_PART;
-   request.name = part_name;
-   part = (Part *)resource_get(wd->group->parts, &request);
+   part_request.resource_type = RESOURCE_TYPE_PART;
+   part_request.name = part_name;
+   part = (Part *)resource_get(wd->group->parts, &part_request);
    request.resource_type = RESOURCE_TYPE_STATE;
    request.name = state_name;
-   state = (State *)resource_get(part->states, &request);
+   request.val = state_val;
+   state = (State *)resource_get(part->states, (Resource *)&request);
 
    group_navigator_part_select(wd->group_navi, part);
    group_navigator_part_state_del(wd->group_navi, part, state);
diff --git a/src/bin/ui/workspace/workspace.h b/src/bin/ui/workspace/workspace.h
index 001361e..a350641 100644
--- a/src/bin/ui/workspace/workspace.h
+++ b/src/bin/ui/workspace/workspace.h
@@ -158,13 +158,15 @@ workspace_group_data_add(Evas_Object *obj, 
Eina_Stringshare *group_data_name);
  * @param obj The workspace object.
  * @param part_name name of part
  * @param state_name name of selected part_state
+ * @param state_value value of selected part_state
  *
  * @ingroup Workspace
  */
 void
 workspace_part_state_select(Evas_Object *obj,
                             Eina_Stringshare *part_name,
-                            Eina_Stringshare *state_name);
+                            Eina_Stringshare *state_name,
+                            double state_value);
 /**
  * Add new part state to group_edit and group_navigator.
  * Part should be already added to edit_object.
@@ -172,13 +174,15 @@ workspace_part_state_select(Evas_Object *obj,
  * @param obj The workspace object.
  * @param part_name name of part
  * @param state_name name of added part_state
+ * @param state_value value of added part_state
  *
  * @ingroup Workspace
  */
 void
 workspace_part_state_add(Evas_Object *obj,
                          Eina_Stringshare *part_name,
-                         Eina_Stringshare *state_name);
+                         Eina_Stringshare *state_name,
+                         double state_value);
 
 /**
  * Add new part item to group_edit and group_navigator.
@@ -202,13 +206,15 @@ workspace_part_item_del(Evas_Object *obj,
  * @param obj The workspace object.
  * @param part_name name of part
  * @param state_name name of deleted part_state
+ * @param state_value value of deleted part_state
  *
  * @ingroup Workspace
  */
 void
 workspace_part_state_del(Evas_Object *obj,
                          Eina_Stringshare *part_name,
-                         Eina_Stringshare *state_name);
+                         Eina_Stringshare *state_name,
+                         double state_value);
 
 /**
  * Del part from group_edit and group_navigator.

-- 


Reply via email to