Ephoto: Load exif viewer on an idler.
This commit is contained in:
parent
258b6f3b26
commit
952a4f3136
|
@ -2,6 +2,16 @@
|
||||||
#ifdef HAVE_LIBEXIF
|
#ifdef HAVE_LIBEXIF
|
||||||
#include <libexif/exif-data.h>
|
#include <libexif/exif-data.h>
|
||||||
|
|
||||||
|
typedef struct _Ephoto_Exif_Animator Ephoto_Exif_Animator;
|
||||||
|
struct _Ephoto_Exif_Animator
|
||||||
|
{
|
||||||
|
Ecore_Idler *todo;
|
||||||
|
Eina_List *todo_items;
|
||||||
|
Evas_Object *parent;
|
||||||
|
int count;
|
||||||
|
int processed;
|
||||||
|
};
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
ephoto_file_has_exif(const char *file)
|
ephoto_file_has_exif(const char *file)
|
||||||
{
|
{
|
||||||
|
@ -45,6 +55,53 @@ ephoto_file_get_exif_data(Ephoto *ephoto EINA_UNUSED, const char *file)
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_exif_items_process(void *data)
|
||||||
|
{
|
||||||
|
Ephoto_Exif_Animator *animator = data;
|
||||||
|
Eina_Hash_Tuple *t;
|
||||||
|
Evas_Object *label, *entry;
|
||||||
|
int i = 0;
|
||||||
|
const char *key, *value;
|
||||||
|
|
||||||
|
if (animator->processed == animator->count)
|
||||||
|
{
|
||||||
|
ecore_idler_del(animator->todo);
|
||||||
|
free(animator);
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
EINA_LIST_FREE(animator->todo_items, t)
|
||||||
|
{
|
||||||
|
if (i > 3)
|
||||||
|
return EINA_TRUE;
|
||||||
|
|
||||||
|
key = t->key;
|
||||||
|
value = t->data;
|
||||||
|
|
||||||
|
label = elm_label_add(animator->parent);
|
||||||
|
elm_object_text_set(label, key);
|
||||||
|
EPHOTO_ALIGN(label, 0.0, 0.5);
|
||||||
|
elm_table_pack(animator->parent, label, 0,
|
||||||
|
animator->processed, 1, 1);
|
||||||
|
evas_object_show(label);
|
||||||
|
|
||||||
|
entry = elm_entry_add(animator->parent);
|
||||||
|
elm_entry_single_line_set(entry, EINA_TRUE);
|
||||||
|
elm_entry_scrollable_set(entry, EINA_TRUE);
|
||||||
|
elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF,
|
||||||
|
ELM_SCROLLER_POLICY_OFF);
|
||||||
|
elm_object_text_set(entry, value);
|
||||||
|
EPHOTO_EXPAND(entry);
|
||||||
|
EPHOTO_FILL(entry);
|
||||||
|
elm_table_pack(animator->parent, entry, 1,
|
||||||
|
animator->processed, 1, 1);
|
||||||
|
evas_object_show(entry);
|
||||||
|
animator->processed++;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_exif_save_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
_exif_save_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||||
void *event_info EINA_UNUSED)
|
void *event_info EINA_UNUSED)
|
||||||
|
@ -60,11 +117,17 @@ ephoto_file_exif_data(Ephoto *ephoto, const char *file)
|
||||||
Eina_Hash *hash = NULL;
|
Eina_Hash *hash = NULL;
|
||||||
Eina_Iterator *it = NULL;
|
Eina_Iterator *it = NULL;
|
||||||
Eina_Hash_Tuple *t = NULL;
|
Eina_Hash_Tuple *t = NULL;
|
||||||
Evas_Object *popup, *box, *scroller, *list, *label, *entry;
|
Evas_Object *popup, *box, *scroller, *list;
|
||||||
const char *key = NULL, *value = NULL;
|
Ephoto_Exif_Animator *animator;
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
hash = ephoto_file_get_exif_data(ephoto, file);
|
hash = ephoto_file_get_exif_data(ephoto, file);
|
||||||
|
if (!hash)
|
||||||
|
return;
|
||||||
|
|
||||||
|
animator = calloc(1, sizeof(Ephoto_Exif_Animator));
|
||||||
|
animator->todo_items = NULL;
|
||||||
|
animator->count = 0;
|
||||||
|
animator->processed = 0;
|
||||||
|
|
||||||
popup = elm_popup_add(ephoto->win);
|
popup = elm_popup_add(ephoto->win);
|
||||||
elm_popup_scrollable_set(popup, EINA_TRUE);
|
elm_popup_scrollable_set(popup, EINA_TRUE);
|
||||||
|
@ -92,31 +155,15 @@ ephoto_file_exif_data(Ephoto *ephoto, const char *file)
|
||||||
elm_object_content_set(scroller, list);
|
elm_object_content_set(scroller, list);
|
||||||
evas_object_show(list);
|
evas_object_show(list);
|
||||||
|
|
||||||
|
animator->parent = list;
|
||||||
|
|
||||||
it = eina_hash_iterator_tuple_new(hash);
|
it = eina_hash_iterator_tuple_new(hash);
|
||||||
EINA_ITERATOR_FOREACH(it, t)
|
EINA_ITERATOR_FOREACH(it, t)
|
||||||
{
|
{
|
||||||
key = t->key;
|
animator->todo_items = eina_list_append(animator->todo_items, t);
|
||||||
value = t->data;
|
animator->count++;
|
||||||
|
|
||||||
label = elm_label_add(list);
|
|
||||||
elm_object_text_set(label, key);
|
|
||||||
EPHOTO_ALIGN(label, 0.0, 0.5);
|
|
||||||
elm_table_pack(list, label, 0, i, 1, 1);
|
|
||||||
evas_object_show(label);
|
|
||||||
|
|
||||||
entry = elm_entry_add(list);
|
|
||||||
elm_entry_single_line_set(entry, EINA_TRUE);
|
|
||||||
elm_entry_scrollable_set(entry, EINA_TRUE);
|
|
||||||
elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF,
|
|
||||||
ELM_SCROLLER_POLICY_OFF);
|
|
||||||
elm_object_text_set(entry, value);
|
|
||||||
EPHOTO_EXPAND(entry);
|
|
||||||
EPHOTO_FILL(entry);
|
|
||||||
elm_table_pack(list, entry, 1, i, 1, 1);
|
|
||||||
evas_object_show(entry);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
animator->todo = ecore_idler_add(_exif_items_process, animator);
|
||||||
eina_iterator_free(it);
|
eina_iterator_free(it);
|
||||||
|
|
||||||
evas_object_data_set(popup, "ephoto", ephoto);
|
evas_object_data_set(popup, "ephoto", ephoto);
|
||||||
|
|
Loading…
Reference in New Issue