forked from enlightenment/ephoto
Ephoto: Load exif viewer on an idler.
This commit is contained in:
parent
258b6f3b26
commit
952a4f3136
|
@ -2,6 +2,16 @@
|
|||
#ifdef HAVE_LIBEXIF
|
||||
#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
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
_exif_save_cb(void *data, Evas_Object *obj 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_Iterator *it = NULL;
|
||||
Eina_Hash_Tuple *t = NULL;
|
||||
Evas_Object *popup, *box, *scroller, *list, *label, *entry;
|
||||
const char *key = NULL, *value = NULL;
|
||||
int i = 0;
|
||||
Evas_Object *popup, *box, *scroller, *list;
|
||||
Ephoto_Exif_Animator *animator;
|
||||
|
||||
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);
|
||||
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);
|
||||
evas_object_show(list);
|
||||
|
||||
animator->parent = list;
|
||||
|
||||
it = eina_hash_iterator_tuple_new(hash);
|
||||
EINA_ITERATOR_FOREACH(it, t)
|
||||
{
|
||||
key = t->key;
|
||||
value = t->data;
|
||||
|
||||
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_items = eina_list_append(animator->todo_items, t);
|
||||
animator->count++;
|
||||
}
|
||||
animator->todo = ecore_idler_add(_exif_items_process, animator);
|
||||
eina_iterator_free(it);
|
||||
|
||||
evas_object_data_set(popup, "ephoto", ephoto);
|
||||
|
|
Loading…
Reference in New Issue