davemds pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=dfcf6d960f9d65ddafad6457309b0c6c1a383ff6

commit dfcf6d960f9d65ddafad6457309b0c6c1a383ff6
Author: Dave Andreoli <d...@gurumeditation.it>
Date:   Sun Aug 13 00:19:20 2017 +0200

    pkit gadget: a new help "mode" that show the icon meanings
---
 src/modules/packagekit/e_mod_packagekit.c | 148 +++++++++++++++++++++++++++---
 src/modules/packagekit/e_mod_packagekit.h |   1 +
 2 files changed, 138 insertions(+), 11 deletions(-)

diff --git a/src/modules/packagekit/e_mod_packagekit.c 
b/src/modules/packagekit/e_mod_packagekit.c
index 13dbf4279..90268f892 100644
--- a/src/modules/packagekit/e_mod_packagekit.c
+++ b/src/modules/packagekit/e_mod_packagekit.c
@@ -63,6 +63,111 @@ _update_button_cb(void *data, Evas_Object *obj EINA_UNUSED,
    packagekit_create_transaction_and_exec(inst->ctxt, 
packagekit_refresh_cache);
 }
 
+static char *
+_help_gl_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
+{
+   PackageKit_Package_Info info = (PackageKit_Package_Info)data;
+
+   if (strcmp(part, "elm.text"))
+      return NULL;
+
+   switch (info)
+     {
+        case PK_INFO_ENUM_LOW:
+          return strdup(_("Low priority update"));
+        case PK_INFO_ENUM_ENHANCEMENT:
+          return strdup(_("Enhancement update"));
+        case PK_INFO_ENUM_NORMAL:
+          return strdup(_("Normal update"));
+        case PK_INFO_ENUM_BUGFIX:
+          return strdup(_("Bugfix update"));
+        case PK_INFO_ENUM_IMPORTANT:
+          return strdup(_("High priority update"));
+        case PK_INFO_ENUM_SECURITY:
+          return strdup(_("Security update"));
+        default:
+          return NULL;
+     }
+}
+
+static Evas_Object *
+_help_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+   PackageKit_Package_Info info = (PackageKit_Package_Info)data;
+   const char *emblem_name;
+   Evas_Object *icon;
+
+   if (strcmp(part, "elm.swallow.icon"))
+      return NULL;
+
+   switch (info)
+     {
+        case PK_INFO_ENUM_LOW:
+          emblem_name = "e/modules/packagekit/icon/low"; break;
+        case PK_INFO_ENUM_ENHANCEMENT:
+          emblem_name = "e/modules/packagekit/icon/enhancement"; break;
+        case PK_INFO_ENUM_NORMAL:
+          emblem_name = "e/modules/packagekit/icon/normal"; break;
+        case PK_INFO_ENUM_BUGFIX:
+          emblem_name = "e/modules/packagekit/icon/bugfix"; break;
+        case PK_INFO_ENUM_IMPORTANT:
+          emblem_name = "e/modules/packagekit/icon/important"; break;
+        case PK_INFO_ENUM_SECURITY:
+          emblem_name = "e/modules/packagekit/icon/security"; break;
+        default:
+          return NULL; break;
+     }
+
+   icon = edje_object_add(evas_object_evas_get(obj));
+   e_theme_edje_object_set(icon, "base/theme/modules/packagekit", emblem_name);
+
+   return icon;
+}
+
+static void
+_help_button_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                void *event EINA_UNUSED)
+{
+   E_PackageKit_Instance *inst = data;
+   Elm_Genlist_Item_Class *help_itc;
+   char buf[1024];
+   long i;
+
+   if (inst->popup_help_mode)
+     {
+        inst->popup_help_mode = EINA_FALSE;
+        packagekit_popup_update(inst, EINA_TRUE);
+        return;
+     }
+   inst->popup_help_mode = EINA_TRUE;
+
+   // special item class for help items
+   help_itc = elm_genlist_item_class_new();
+   help_itc->item_style = "default";
+   help_itc->func.text_get = _help_gl_text_get;
+   help_itc->func.content_get = _help_gl_content_get;
+
+   // repopulate the genlist
+   elm_genlist_clear(inst->popup_genlist);
+   for (i = PK_INFO_ENUM_LOW; i <= PK_INFO_ENUM_SECURITY; i++)
+     {
+        Elm_Genlist_Item *it;
+        it = elm_genlist_item_append(inst->popup_genlist, help_itc, (void*)i,
+                                     NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+        elm_genlist_item_select_mode_set(it, 
ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+     }
+
+   elm_genlist_item_class_free(help_itc);
+
+   // update title label
+   if (inst->ctxt->v_maj != -1)
+     snprintf(buf, sizeof(buf), "PackageKit version: %d.%d.%d",
+              inst->ctxt->v_maj, inst->ctxt->v_min, inst->ctxt->v_mic);
+   else
+     snprintf(buf, sizeof(buf), _("Unknow PackageKit version"));
+   elm_object_text_set(inst->popup_label, buf);
+}
+
 static void
 _install_button_cb(void *data, Evas_Object *obj EINA_UNUSED,
                    void *event EINA_UNUSED)
@@ -122,8 +227,11 @@ packagekit_popup_update(E_PackageKit_Instance *inst, 
Eina_Bool rebuild_list)
    char buf[1024];
    Eina_List *l;
 
+   if (inst->popup_help_mode)
+     inst->popup_help_mode = EINA_FALSE;
+
    if (rebuild_list)
-      elm_genlist_clear(inst->popup_genlist);
+     elm_genlist_clear(inst->popup_genlist);
 
    if (ctxt->error)
      {
@@ -329,7 +437,7 @@ _genlist_selunsel_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
 void
 packagekit_popup_new(E_PackageKit_Instance *inst)
 {
-   Evas_Object *table, *bt, *ic, *lb, *li, *pb, *fr, *size_rect;
+   Evas_Object *table, *bt, *ic, *lb, *li, *pb, *fr, *bx, *size_rect;
 
    inst->popup = e_gadcon_popup_new(inst->gcc, EINA_FALSE);
 
@@ -337,11 +445,19 @@ packagekit_popup_new(E_PackageKit_Instance *inst)
    table = elm_table_add(e_comp->elm);
    evas_object_show(table);
 
+   // horiz box for title and buttons
+   bx = elm_box_add(table);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   evas_object_size_hint_expand_set(bx, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_fill_set(bx, EVAS_HINT_FILL, 0.0);
+   elm_table_pack(table, bx, 0, 0, 1, 1);
+   evas_object_show(bx);
+
    // title label
    lb = inst->popup_label = elm_label_add(table);
    evas_object_size_hint_expand_set(lb, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(lb, 0.0, 0.5);
-   elm_table_pack(table, lb, 0, 0, 1, 1);
+   elm_box_pack_end(bx, lb);
    evas_object_show(lb);
 
    // refresh button
@@ -350,24 +466,34 @@ packagekit_popup_new(E_PackageKit_Instance *inst)
                                      16 * elm_config_scale_get());
    elm_icon_standard_set(ic, "view-refresh");
    bt = elm_button_add(table);
-   evas_object_size_hint_align_set(bt, 1.0, 0.5);
    elm_object_content_set(bt, ic);
    evas_object_smart_callback_add(bt, "clicked", _update_button_cb, inst);
-   elm_table_pack(table, bt, 1, 0, 1, 1);
+   elm_box_pack_end(bx, bt);
+   evas_object_show(bt);
+
+   // help button
+   ic = elm_icon_add(table);
+   evas_object_size_hint_min_set(ic, 16 * elm_config_scale_get(), 
+                                     16 * elm_config_scale_get());
+   elm_icon_standard_set(ic, "help-contents");
+   bt = elm_button_add(table);
+   elm_object_content_set(bt, ic);
+   evas_object_smart_callback_add(bt, "clicked", _help_button_cb, inst);
+   elm_box_pack_end(bx, bt);
    evas_object_show(bt);
 
    // central area (sizer)
    size_rect = evas_object_rectangle_add(e_comp->evas);
    evas_object_size_hint_min_set(size_rect, 300 * elm_config_scale_get(),
                                             300 * elm_config_scale_get());
-   elm_table_pack(table, size_rect, 0, 1, 2, 1);
+   elm_table_pack(table, size_rect, 0, 1, 1, 1);
 
    // central area (error label)
    lb = inst->popup_error_label = elm_entry_add(table);
    elm_entry_editable_set(lb, EINA_FALSE);
    E_EXPAND(lb);
    E_FILL(lb);
-   elm_table_pack(table, lb, 0, 1, 2, 1);
+   elm_table_pack(table, lb, 0, 1, 1, 1);
    evas_object_show(lb);
 
    // central area (genlist)
@@ -392,7 +518,7 @@ packagekit_popup_new(E_PackageKit_Instance *inst)
    E_FILL(li);
    evas_object_smart_callback_add(li, "selected", _genlist_selunsel_cb, inst);
    evas_object_smart_callback_add(li, "unselected", _genlist_selunsel_cb, 
inst);
-   elm_table_pack(table, li, 0, 1, 2, 1);
+   elm_table_pack(table, li, 0, 1, 1, 1);
    evas_object_show(li);
 
    // central area (progress bar) (inside a padding frame)
@@ -400,7 +526,7 @@ packagekit_popup_new(E_PackageKit_Instance *inst)
    elm_object_style_set(fr, "pad_large");
    E_EXPAND(fr);
    E_FILL(fr);
-   elm_table_pack(table, fr, 0, 1, 2, 1);
+   elm_table_pack(table, fr, 0, 1, 1, 1);
    evas_object_show(fr);
 
    pb = inst->popup_progressbar = elm_progressbar_add(table);
@@ -412,7 +538,7 @@ packagekit_popup_new(E_PackageKit_Instance *inst)
    bt = inst->popup_install_button = elm_button_add(table);
    evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, 0.0);
    evas_object_smart_callback_add(bt, "clicked", _install_button_cb, inst);
-   elm_table_pack(table, bt, 0, 2, 2, 1);
+   elm_table_pack(table, bt, 0, 2, 1, 1);
    evas_object_show(bt);
 
    // run package manager button
@@ -420,7 +546,7 @@ packagekit_popup_new(E_PackageKit_Instance *inst)
    evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, 0.0);
    elm_object_text_set(bt, _("Run the package manager"));
    evas_object_smart_callback_add(bt, "clicked", _run_button_cb, inst);
-   elm_table_pack(table, bt, 0, 3, 2, 1);
+   elm_table_pack(table, bt, 0, 3, 1, 1);
    evas_object_show(bt);
 
    // setup and show the popup
diff --git a/src/modules/packagekit/e_mod_packagekit.h 
b/src/modules/packagekit/e_mod_packagekit.h
index b4a443ac5..846136301 100644
--- a/src/modules/packagekit/e_mod_packagekit.h
+++ b/src/modules/packagekit/e_mod_packagekit.h
@@ -84,6 +84,7 @@ typedef struct _E_PackageKit_Instance
    Evas_Object *popup_progressbar;
    Evas_Object *popup_genlist;
    Elm_Genlist_Item_Class *popup_genlist_itc;
+   Eina_Bool popup_help_mode;
 } E_PackageKit_Instance;
 
 typedef struct _E_PackageKit_Package

-- 


Reply via email to