summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-10-31 11:46:31 +0000
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-10-31 11:46:31 +0000
commit921e379155158aaf8d5a96d685e7c4714b0994f5 (patch)
tree0c3633b6f774ff54f6e6ec94c1a61940aee89169
parent356d2a6428811c46ac256b06933a1eab135b9a80 (diff)
downloadenlightenment-921e379155158aaf8d5a96d685e7c4714b0994f5.tar.gz
paledit - use new api's to list available cc's
this makes paledit friendlier still things to do: 1. reset a palette (rm the user copy) 2. undo/redo 3. tooltips
-rw-r--r--src/bin/tools/paledit/main.c3
-rw-r--r--src/bin/tools/paledit/palcols.c328
2 files changed, 296 insertions, 35 deletions
diff --git a/src/bin/tools/paledit/main.c b/src/bin/tools/paledit/main.c
index c455a261c7..0ddc07353b 100644
--- a/src/bin/tools/paledit/main.c
+++ b/src/bin/tools/paledit/main.c
@@ -101,6 +101,9 @@ elm_main(int argc, char **argv)
colsel_update(win);
+ Eina_List *ccs = elm_theme_color_class_list(NULL);
+ elm_theme_color_class_list_free(ccs);
+
if (argc > 1)
{
evas_object_data_set(win, "pal_selected_palette", strdup(argv[1]));
diff --git a/src/bin/tools/paledit/palcols.c b/src/bin/tools/paledit/palcols.c
index 08f3a1769e..bdb5dbd21d 100644
--- a/src/bin/tools/paledit/palcols.c
+++ b/src/bin/tools/paledit/palcols.c
@@ -209,10 +209,293 @@ palcols_fill(Evas_Object *win)
}
}
+static void
+_cb_hover_down(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *win = data, *o;
+
+ o = evas_object_data_get(win, "pal_class_hover");
+ elm_hover_dismiss(o);
+}
+
+static void
+_hover_list_enable_disable(Evas_Object *win)
+{
+ Elm_Palette *pal = evas_object_data_get(win, "pal");
+ Elm_Palette_Color *col;
+ Elm_Widget_Item *it;
+ Eina_List *l;
+
+ for (it = elm_genlist_first_item_get(evas_object_data_get(win, "pal_class_list_basic"));
+ it; it = elm_genlist_item_next_get(it))
+ {
+ const char *s = elm_object_item_data_get(it);
+
+ if (s)
+ {
+ EINA_LIST_FOREACH(pal->colors, l, col)
+ {
+ if ((col->name) && (!strcmp(s, col->name)))
+ {
+ elm_object_item_disabled_set(it, EINA_TRUE);
+ break;
+ }
+ }
+ if (!l) elm_object_item_disabled_set(it, EINA_FALSE);
+ }
+ }
+ for (it = elm_genlist_first_item_get(evas_object_data_get(win, "pal_class_list_extended"));
+ it; it = elm_genlist_item_next_get(it))
+ {
+ const char *s = elm_object_item_data_get(it);
+
+ if (s)
+ {
+ EINA_LIST_FOREACH(pal->colors, l, col)
+ {
+ if ((col->name) && (!strcmp(s, col->name)))
+ {
+ elm_object_item_disabled_set(it, EINA_TRUE);
+ break;
+ }
+ }
+ if (!l) elm_object_item_disabled_set(it, EINA_FALSE);
+ }
+ }
+}
+
+static void
+_cb_hover_basic(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *win = data;
+
+ evas_object_show(evas_object_data_get(win, "pal_class_list_basic"));
+ evas_object_hide(evas_object_data_get(win, "pal_class_list_extended"));
+ evas_object_hide(evas_object_data_get(win, "pal_class_label"));
+}
+
+static void
+_cb_hover_extended(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *win = data;
+
+ evas_object_hide(evas_object_data_get(win, "pal_class_list_basic"));
+ evas_object_show(evas_object_data_get(win, "pal_class_list_extended"));
+ evas_object_hide(evas_object_data_get(win, "pal_class_label"));
+}
+
+static void
+_cb_hover_advanced(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *win = data;
+
+ evas_object_hide(evas_object_data_get(win, "pal_class_list_basic"));
+ evas_object_hide(evas_object_data_get(win, "pal_class_list_extended"));
+ evas_object_show(evas_object_data_get(win, "pal_class_label"));
+}
+
+static int
+_cb_class_insert_cc_cmp(const void *pa, const void *pb)
+{
+ const char *cc1 = elm_object_item_data_get(pa);
+ const char *cc2 = elm_object_item_data_get(pb);
+ return strcmp(cc1, cc2);
+}
+
+static char *
+_cb_class_gl_class_label_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
+{
+ return strdup(data);
+}
+
+static void
+_cb_class_gl_cc_sel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+ Evas_Object *win = data;
+ Elm_Object_Item *it = event_info;
+ const char *cc = elm_object_item_data_get(it);
+
+ elm_object_text_set(evas_object_data_get(win, "pal_class_entry"), cc);
+}
+
+static void
+_pal_hover_add(Evas_Object *win, Evas_Object *button)
+{
+ Evas_Object *o, *btn, *hv, *tb, *tlb, *bxh;
+ Elm_Widget_Item *it;
+ Eina_List *ccs, *l;
+ Elm_Genlist_Item_Class *itc;
+ const char *s;
+
+ ccs = elm_theme_color_class_list(NULL);
+
+ hv = o = elm_hover_add(win);
+ elm_object_style_set(o, "popout");
+ elm_hover_parent_set(o, win);
+ elm_hover_target_set(o, button);
+ evas_object_data_set(win, "pal_class_hover", o);
+
+ btn = o = elm_button_add(win);
+ evas_object_size_hint_weight_set(o, 1.0, 0.0);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(o, "clicked", _cb_hover_down, win);
+ elm_object_text_set(o, "Change entries");
+ elm_object_part_content_set(hv, "middle", o);
+ evas_object_show(o);
+
+ o = elm_icon_add(win);
+ elm_icon_standard_set(o, "go-down");
+ elm_object_content_set(btn, o);
+ evas_object_show(o);
+
+
+
+ tb = o = elm_table_add(win);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
+ elm_table_padding_set(o, ELM_SCALE_SIZE(5), ELM_SCALE_SIZE(5));
+ elm_object_part_content_set(hv, "top", o);
+ evas_object_show(o);
+
+ o = evas_object_rectangle_add(evas_object_evas_get(win));
+ evas_object_size_hint_min_set(o, ELM_SCALE_SIZE(240), ELM_SCALE_SIZE(300));
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_table_pack(tb, o, 0, 0, 1, 3);
+
+ tlb = o = elm_toolbar_add(win);
+ elm_toolbar_homogeneous_set(o, EINA_TRUE);
+ it = elm_toolbar_item_append(tlb, NULL, "Basic", _cb_hover_basic, win);
+ elm_toolbar_item_append(tlb, NULL, "Extended", _cb_hover_extended, win);
+ elm_toolbar_item_append(tlb, NULL, "Advanced", _cb_hover_advanced, win);
+ elm_toolbar_item_selected_set(it, EINA_TRUE);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.0);
+ elm_table_pack(tb, o, 0, 0, 1, 1);
+ evas_object_show(o);
+
+ itc = elm_genlist_item_class_new();
+ itc->item_style = "default";
+ itc->func.text_get = _cb_class_gl_class_label_get;
+
+ // Basic tab
+
+ o = elm_genlist_add(win);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_table_pack(tb, o, 0, 1, 1, 1);
+ evas_object_show(o);
+ evas_object_data_set(win, "pal_class_list_basic", o);
+
+ EINA_LIST_FOREACH(ccs, l, s)
+ {
+ if (s[0] == ':')
+ {
+ elm_genlist_item_sorted_insert(o, itc, s,
+ NULL, ELM_GENLIST_ITEM_NONE,
+ _cb_class_insert_cc_cmp,
+ _cb_class_gl_cc_sel, win);
+ }
+ }
+
+ // Extended tab
+
+ o = elm_genlist_add(win);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_table_pack(tb, o, 0, 1, 1, 1);
+ evas_object_data_set(win, "pal_class_list_extended", o);
+
+ EINA_LIST_FOREACH(ccs, l, s)
+ {
+ if (s[0] == '/')
+ {
+ elm_genlist_item_sorted_insert(o, itc, s,
+ NULL, ELM_GENLIST_ITEM_NONE,
+ _cb_class_insert_cc_cmp,
+ _cb_class_gl_cc_sel, win);
+ }
+ }
+
+ // Advanced tab
+
+ o = elm_label_add(win);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_text_set
+ (o, "Adding a custom entry below requires<br>"
+ "knowing which color classes are used by<br>"
+ "theme EDJ files and is intended for<br>"
+ "advanced usage.<br>"
+ "<br>"
+ "You may also use this to remove any entry<br>"
+ "from the above palette."
+ );
+ elm_table_pack(tb, o, 0, 1, 1, 1);
+ evas_object_data_set(win, "pal_class_label", o);
+
+ // Entry + Add + Del
+
+ bxh = o = elm_box_add(win);
+ elm_box_padding_set(o, ELM_SCALE_SIZE(10), 0);
+ elm_box_horizontal_set(o, EINA_TRUE);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_table_pack(tb, o, 0, 2, 1, 1);
+ evas_object_show(o);
+ evas_object_data_set(win, "pal_class_add_del", o);
+
+ o = elm_entry_add(win);
+ elm_entry_single_line_set(o, EINA_TRUE);
+ elm_entry_scrollable_set(o, EINA_TRUE);
+ evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_pack_end(bxh, o);
+ evas_object_show(o);
+ evas_object_data_set(win, "pal_class_entry", o);
+
+ btn = o = elm_button_add(win);
+ evas_object_size_hint_weight_set(o, 0.0, 0.0);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(o, "clicked", _cb_add_click, win);
+ elm_box_pack_end(bxh, o);
+ evas_object_show(o);
+
+ o = elm_icon_add(win);
+ elm_icon_standard_set(o, "add");
+ elm_object_content_set(btn, o);
+ evas_object_show(o);
+
+ btn = o = elm_button_add(win);
+ evas_object_size_hint_weight_set(o, 0.0, 0.0);
+ evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(o, "clicked", _cb_del_click, win);
+ elm_box_pack_end(bxh, o);
+ evas_object_show(o);
+
+ o = elm_icon_add(win);
+ elm_icon_standard_set(o, "sub");
+ elm_object_content_set(btn, o);
+ evas_object_show(o);
+
+ evas_object_data_set(win, "class_cc_list", ccs);
+// elm_theme_color_class_list_free(ccs);
+}
+
+static void
+_cb_modify_click(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *win = data, *o;
+
+ _hover_list_enable_disable(win);
+ o = evas_object_data_get(win, "pal_class_hover");
+ evas_object_show(o);
+}
+
Evas_Object *
palcols_add(Evas_Object *win)
{
- Evas_Object *o, *bxl, *btn, *bxh2;
+ Evas_Object *o, *bxl, *btn, *bxh;
bxl = o = elm_box_add(win);
elm_box_padding_set(o, 0, ELM_SCALE_SIZE(10));
@@ -234,7 +517,7 @@ palcols_add(Evas_Object *win)
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bxl, o);
- bxh2 = o = elm_box_add(win);
+ bxh = o = elm_box_add(win);
elm_box_padding_set(o, ELM_SCALE_SIZE(10), 0);
elm_box_horizontal_set(o, EINA_TRUE);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
@@ -248,12 +531,12 @@ palcols_add(Evas_Object *win)
elm_entry_editable_set(o, EINA_FALSE);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_box_pack_end(bxh2, o);
+ elm_box_pack_end(bxh, o);
evas_object_show(o);
evas_object_data_set(win, "pal_name", o);
o = palimg_add(win);
- elm_box_pack_end(bxh2, o);
+ elm_box_pack_end(bxh, o);
evas_object_show(o);
evas_object_data_set(win, "pal_image", o);
@@ -264,46 +547,21 @@ palcols_add(Evas_Object *win)
evas_object_show(o);
evas_object_data_set(win, "pal_class_list", o);
- bxh2 = o = elm_box_add(win);
- elm_box_padding_set(o, ELM_SCALE_SIZE(10), 0);
- elm_box_horizontal_set(o, EINA_TRUE);
+ btn = o = elm_button_add(win);
+ evas_object_size_hint_weight_set(o, 1.0, 0.0);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(o, "clicked", _cb_modify_click, win);
+ elm_object_text_set(o, "Change entries");
elm_box_pack_end(bxl, o);
evas_object_show(o);
- o = elm_entry_add(win);
- elm_entry_single_line_set(o, EINA_TRUE);
- elm_entry_scrollable_set(o, EINA_TRUE);
- evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
- evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_box_pack_end(bxh2, o);
- evas_object_show(o);
- evas_object_data_set(win, "pal_class_entry", o);
-
- btn = o = elm_button_add(win);
- evas_object_size_hint_weight_set(o, 0.0, 0.0);
- evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(o, "clicked", _cb_add_click, win);
- elm_box_pack_end(bxh2, o);
- evas_object_show(o);
-
o = elm_icon_add(win);
- elm_icon_standard_set(o, "add");
+ elm_icon_standard_set(o, "go-up");
elm_object_content_set(btn, o);
evas_object_show(o);
- btn = o = elm_button_add(win);
- evas_object_size_hint_weight_set(o, 0.0, 0.0);
- evas_object_size_hint_fill_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(o, "clicked", _cb_del_click, win);
- elm_box_pack_end(bxh2, o);
- evas_object_show(o);
-
- o = elm_icon_add(win);
- elm_icon_standard_set(o, "sub");
- elm_object_content_set(btn, o);
- evas_object_show(o);
+ _pal_hover_add(win, btn);
return bxl;
}