Combos work now, fix popup placement, move burn image gui stuff into its own file.

This commit is contained in:
Jaime Thomas
2008-12-21 03:52:57 +00:00
parent 9db32952a6
commit 6101e38169
11 changed files with 138 additions and 277 deletions

View File

@ -1,6 +1,36 @@
/* vim: set sw=3 ts=3 sts=3 expandtab: */
#include "ecdb.h"
static void
_widget_focus_handle(void *data, Evas_Object *o, const char *emission,
const char *source)
{
static char *old_source;
const char *name;
Evas_Object *eo;
name = data;
// Some widgets aren't named (such as when in combo), so check
if (!name)
return;
if ((old_source) && (strcmp(old_source, source)))
{
eo = evas_object_name_find(ecore_evas_get(em->main_win_ee), old_source);
edje_object_signal_emit(eo, "ecdb,focus,out", "ecdb");
FREE(old_source);
old_source = strdup(name);
}
else if (!old_source)
{
old_source = strdup(name);
}
// Send focus to the freshly clicked widget
eo = evas_object_name_find(ecore_evas_get(em->main_win_ee), name);
evas_object_focus_set(eo, 1);
}
Evas_Object *
ecdb_widget_add(Evas_Object *parent, const char *name)
{
@ -8,6 +38,9 @@ ecdb_widget_add(Evas_Object *parent, const char *name)
int x, y, w, h;
o = edje_object_add(evas_object_evas_get(parent));
edje_object_signal_callback_add(o, "mouse,down,*", "*",
_widget_focus_handle,
(void *)name);
if (name)
{
@ -123,7 +156,7 @@ ecdb_check_states_set(Evas_Object *c, const char *ystate, const char *nstate)
}
void
ecdb_check_state_set(Evas_Object *c, int state)
ecdb_check_checked_set(Evas_Object *c, int state)
{
Check_Data *cd;
@ -307,6 +340,14 @@ _entry_markup_to_text(const char *mkup)
return str;
}
static void
_entry_click_cb_call(void *data, Evas_Object *obj, const char *emission,
const char *source)
{
evas_object_focus_set(obj, 1);
evas_object_smart_callback_call(obj, "clicked", NULL);
}
Evas_Object *
ecdb_entry_add(Evas_Object *parent, const char *name)
{
@ -316,6 +357,8 @@ ecdb_entry_add(Evas_Object *parent, const char *name)
edje_object_file_set(e, em->theme_path, "ecdb/entry");
em->dnd_candidates = eina_list_append(em->dnd_candidates, e);
evas_object_data_set(e, "dnd_call_func", ecdb_dnd_entry_dnd_set);
edje_object_signal_callback_add(e, "clicked", "ecdb", _entry_click_cb_call,
e);
return e;
}
@ -345,7 +388,8 @@ struct _Combo_Data
int selected;
const char *name;
const char *header;
Evas_Object * (*create_header)(Evas_Object *, const char *name,
void *data;
Evas_Object * (*create_header)(Evas_Object *, const char *name, void *data,
Evas_Object *, int);
};
@ -387,7 +431,7 @@ _combo_best_location(Evas_Object *c)
ecore_evas_geometry_get(em->main_win_ee, NULL, NULL, &ww, &wh);
evas_object_geometry_get(c, &x, &y, &w, &h);
if ((h) > (wh - y - h))
if ((y + h) > (wh - y - h))
{
return "top";
}
@ -455,7 +499,8 @@ _combo_clicked(void *data, Evas_Object *obj, void *event_info)
cd->selected = i;
if (cd->create_header)
header = cd->create_header(data, "ecdb.header.swallow", swallow, i);
header = cd->create_header(data, "ecdb.header.swallow", cd->data,
swallow, i);
edje_object_signal_emit(data, "ecdb,combo,header,swallow", "ecdb");
ecdb_combo_collapse(data);
}
@ -563,6 +608,9 @@ ecdb_combo_expand(Evas_Object *c)
cd = evas_object_data_get(c, "cd");
if (cd->count == 0)
return;
edje_object_signal_emit(c, "ecdb,combo,active", "ecdb");
evas_object_move(cd->back, 0, 0);
@ -635,7 +683,7 @@ ecdb_combo_collapse(Evas_Object *c)
void
ecdb_combo_header_create_set(Evas_Object *c, Evas_Object * (*func)
(Evas_Object *c, const char *name,
Evas_Object *clicked, int idx))
void *data, Evas_Object *clicked, int idx))
{
Combo_Data *cd;
@ -653,6 +701,15 @@ ecdb_combo_selected_get(Evas_Object *c)
return cd->selected;
}
void
ecdb_combo_data_set(Evas_Object *c, void *data)
{
Combo_Data *cd;
cd = evas_object_data_get(c, "cd");
cd->data = data;
}
/******************************* Label ***************************************/
Evas_Object *