static void _resize_cb(void *data, Evas *evas, Evas_Object *obj, void *event);\r
static void _event_init(Evas_Object *obj);\r
static void _contracted_state_set(Evas_Object *obj, int contracted);\r
-static void _view_update(Evas_Object *obj);\r
+static void _view_update(Evas_Object *obj, Eina_Bool focused);\r
static void _set_label(Evas_Object *obj, const char* str);\r
static void _change_current_button_state(Evas_Object *obj, Multibuttonentry_Button_State state);\r
static void _change_current_button(Evas_Object *obj, Evas_Object *btn);\r
{\r
Widget_Data *wd = elm_widget_data_get(obj);\r
if (!wd) return;\r
- _view_update(obj);\r
+\r
+ if (!elm_widget_focus_get(obj) && !(elm_widget_disabled_get(obj)))\r
+ {\r
+ _view_update(obj, EINA_FALSE);\r
+ evas_object_smart_callback_call(obj, "unfocused", NULL);\r
+ }\r
+}\r
+\r
+static void\r
+_signal_emit_hook(Evas_Object *obj, const char *emission, const char *source)\r
+{\r
+ Widget_Data *wd = elm_widget_data_get(obj);\r
+ if (!wd) return;\r
+ edje_object_signal_emit(wd->base, emission, source);\r
}\r
\r
static void\r
}\r
\r
static void \r
+_signal_mouse_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)\r
+{\r
+ Widget_Data *wd = elm_widget_data_get(data);\r
+ if(!wd || !wd->base) return;\r
+\r
+ _view_update(data, EINA_TRUE);\r
+ evas_object_smart_callback_call(data, "clicked", NULL);\r
+}\r
+\r
+static void \r
_changed_size_hint_cb(void *data, Evas *evas, Evas_Object *obj, void *event)\r
{\r
Evas_Object *eo = (Evas_Object *)data;\r
wd->w_box = w;\r
wd->h_box = h;\r
\r
- _view_update(data);\r
+ //_view_update(data, EINA_FALSE);\r
}\r
\r
static void\r
Widget_Data *wd = elm_widget_data_get(obj);\r
if (!wd || !wd->base) return;\r
\r
+ if(wd->base)\r
+ {\r
+ edje_object_signal_callback_add(wd->base, "mouse,clicked,1", "*", _signal_mouse_clicked, obj);\r
+ edje_object_signal_callback_add(wd->base, "clicked", "*", _signal_mouse_clicked, obj);\r
+ }\r
+\r
if (wd->box)\r
{\r
evas_object_event_callback_add(wd->box, EVAS_CALLBACK_RESIZE, _resize_cb, obj);\r
w = wd->w_box;\r
\r
// w -= w_rect\r
- if (wd->rect) evas_object_geometry_get (wd->rect, NULL, NULL, &w_tmp, NULL);\r
+ if (wd->rect) evas_object_size_hint_min_get (wd->rect, &w_tmp, NULL);\r
w -= w_tmp;\r
\r
// w -= w_label\r
- if (wd->label) evas_object_geometry_get (wd->label, NULL, NULL, &w_tmp, NULL);\r
+ if (wd->label) evas_object_size_hint_min_get (wd->label, &w_tmp, NULL);\r
w -= w_tmp;\r
\r
- // w -= w_btns \r
+ // w -= w_btns \r
+ Eina_Bool on_contracted = EINA_FALSE; \r
item = NULL;\r
int count = eina_list_count(wd->items);\r
EINA_LIST_FOREACH(wd->items, l, item) \r
elm_box_pack_end(wd->box, wd->end);\r
evas_object_show(wd->end);\r
\r
+ on_contracted = EINA_TRUE;\r
+ wd->contracted = contracted;\r
+ evas_object_smart_callback_call(obj, "contracted,state,changed", wd->contracted);\r
+\r
break;\r
}\r
}\r
}\r
-\r
+ if(on_contracted == EINA_FALSE) // unset contracted mode\r
+ {\r
+ // pack entry\r
+ elm_box_pack_end(wd->box, wd->entry);\r
+ evas_object_show(wd->entry);\r
+ if(elm_widget_focus_get(obj))\r
+ elm_object_focus(wd->entry);\r
+ wd->contracted = 0;\r
+ }\r
}\r
else\r
{\r
// pack entry\r
elm_box_pack_end(wd->box, wd->entry);\r
evas_object_show(wd->entry);\r
- }\r
+ if(elm_widget_focus_get(obj))\r
+ elm_object_focus(wd->entry);\r
\r
- wd->contracted = contracted;\r
- evas_object_smart_callback_call(obj, "contracted,state,changed", wd->contracted);\r
+ wd->contracted = contracted;\r
+ evas_object_smart_callback_call(obj, "contracted,state,changed", wd->contracted);\r
+ }\r
}\r
\r
static void \r
-_view_update(Evas_Object *obj)\r
+_view_update(Evas_Object *obj, Eina_Bool focused)\r
{ \r
Widget_Data *wd = elm_widget_data_get(obj); \r
if (!wd || !wd->box || !wd->entry) return;\r
_contracted_state_set(obj, 1);\r
}\r
\r
+ if (wd->contracted != 1)\r
+ {\r
+ if (wd->guidetext && !eina_list_count (wd->items) && !elm_widget_focus_get(obj) && !focused)\r
+ {\r
+ \r
+ elm_box_unpack(wd->box, wd->guidetext);\r
+ elm_box_unpack(wd->box, wd->entry);\r
+ evas_object_hide(wd->entry);\r
+ elm_box_pack_end(wd->box, wd->guidetext); \r
+ evas_object_show(wd->guidetext);\r
+ }\r
+ else\r
+ {\r
+ elm_box_unpack(wd->box, wd->entry);\r
+ elm_box_unpack(wd->box, wd->guidetext);\r
+ evas_object_hide(wd->guidetext);\r
+ elm_box_pack_end(wd->box, wd->entry);\r
+ evas_object_show(wd->entry);\r
+\r
+ if(elm_widget_focus_get(obj) || focused)\r
+ elm_object_focus(wd->entry);\r
+ }\r
+ }\r
+ \r
+#if 0\r
if (wd->guidetext && (wd->contracted != 1))\r
{\r
if (!eina_list_count (wd->items))\r
{\r
- if (elm_widget_focus_get (obj))\r
+ if (elm_widget_focus_get (obj) || focused)\r
{\r
elm_box_unpack(wd->box, wd->entry);\r
elm_box_unpack(wd->box, wd->guidetext);\r
elm_box_pack_end(wd->box, wd->entry);\r
evas_object_show(wd->entry);\r
\r
+ elm_object_focus(wd->entry);\r
//elm_widget_focus_set(wd->entry, EINA_TRUE); //FIXME\r
}\r
else\r
evas_object_show(wd->entry);\r
}\r
}\r
+#endif\r
}\r
\r
/*\r
}\r
\r
elm_label_label_set(wd->label, str);\r
- _view_update(obj);\r
+ _view_update(obj, EINA_FALSE);\r
}\r
\r
static void\r
}\r
\r
if (wd->guidetext) edje_object_part_text_set (wd->guidetext, "elm.text", str);\r
- _view_update(obj);\r
+ _view_update(obj, EINA_FALSE);\r
}\r
\r
static void\r
break;\r
case MULTIBUTONENTRY_BUTTON_STATE_SELECTED:\r
edje_object_signal_emit(item->button, "focused", "");\r
- evas_object_smart_callback_call(obj, "selected", item);\r
+ evas_object_smart_callback_call(obj, "selected", item); // will be removed!\r
+ evas_object_smart_callback_call(obj, "item,selected", item);\r
break;\r
default:\r
edje_object_signal_emit(item->button, "default", "");\r
{\r
Widget_Data *wd = elm_widget_data_get(data);\r
static char str[MAX_STR];\r
- if (!wd) return;\r
+ Elm_Multibuttonentry_Item *item = NULL;\r
+ if (!wd || wd->contracted) return;\r
\r
strncpy(str, elm_scrolled_entry_entry_get(wd->entry), MAX_STR);\r
str[MAX_STR - 1]= 0;\r
_add_button(data, str);\r
\r
_change_current_button(data, obj);\r
+\r
+ if (wd->current)\r
+ if(item = eina_list_data_get(wd->current))\r
+ evas_object_smart_callback_call(data, "item,clicked", item);\r
}\r
\r
static void\r
{\r
wd->items = eina_list_remove(wd->items, _item);\r
elm_box_unpack(wd->box, _item->button);\r
- evas_object_smart_callback_call(obj, "deleted", _item);\r
+ evas_object_smart_callback_call(obj, "deleted", _item); // will be removed!\r
+ evas_object_smart_callback_call(obj, "item,deleted", _item);\r
_del_button_obj(obj, _item->button);\r
free(_item);\r
if (wd->current == l) \r
Widget_Data *wd = elm_widget_data_get(obj);\r
if (!wd || !wd->box || !wd->entry) return NULL;\r
\r
- if (wd->contracted == 1) return NULL;\r
+ //if (wd->contracted == 1) return NULL;\r
\r
// add button\r
btn = edje_object_add(evas_object_evas_get(obj));\r
_elm_theme_object_set(obj, btn, "multibuttonentry", "btn", elm_widget_style_get(obj));\r
- edje_object_signal_callback_add(btn, "clicked", "elm", _button_clicked, obj);\r
+ edje_object_signal_callback_add(btn, "mouse,clicked,1", "*", _button_clicked, obj);\r
evas_object_size_hint_weight_set(btn, 0.0, 0.0);\r
evas_object_show(btn);\r
\r
{\r
case MULTIBUTONENTRY_POS_START:\r
wd->items = eina_list_prepend(wd->items, item);\r
- _view_update(obj);\r
- elm_box_pack_after(wd->box, btn, wd->label);\r
+ if(wd->label) elm_box_pack_after(wd->box, btn, wd->label);\r
+ else if(wd->rect) elm_box_pack_after(wd->box, btn, wd->rect);\r
+ else elm_box_pack_start(wd->box, btn);\r
+ _view_update(obj, EINA_FALSE);\r
break;\r
case MULTIBUTONENTRY_POS_END:\r
wd->items = eina_list_append(wd->items, item);\r
- _view_update(obj);\r
+ _view_update(obj, EINA_FALSE);\r
elm_box_pack_before(wd->box, btn, wd->entry);\r
break;\r
case MULTIBUTONENTRY_POS_BEFORE:\r
if (reference)\r
{ \r
wd->items = eina_list_prepend_relative(wd->items, item, reference);\r
- _view_update(obj);\r
elm_box_pack_before(wd->box, btn, reference->button);\r
+ _view_update(obj, EINA_FALSE);\r
}\r
else\r
{\r
wd->items = eina_list_append(wd->items, item);\r
- _view_update(obj);\r
+ _view_update(obj, EINA_FALSE);\r
elm_box_pack_before(wd->box, btn, wd->entry);\r
}\r
break;\r
if (reference)\r
{ \r
wd->items = eina_list_append_relative(wd->items, item, reference);\r
- _view_update(obj);\r
elm_box_pack_after(wd->box, btn, reference->button);\r
- }\r
+ _view_update(obj, EINA_FALSE); }\r
else\r
{ \r
wd->items = eina_list_append(wd->items, item);\r
- _view_update(obj);\r
+ _view_update(obj, EINA_FALSE);\r
elm_box_pack_before(wd->box, btn, wd->entry);\r
}\r
break;\r
elm_label_wrap_width_set(label, item->vw - 2*padding_outer - 2*padding_inner ); \r
}\r
\r
- evas_object_smart_callback_call(obj, "added", item);\r
+ evas_object_smart_callback_call(obj, "added", item); // will be removed!\r
+ evas_object_smart_callback_call(obj, "item,added", item);\r
\r
return item;\r
}\r
elm_widget_del_hook_set(obj, _del_hook);\r
elm_widget_theme_hook_set(obj, _theme_hook);\r
elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL);\r
+ elm_widget_signal_emit_hook_set(obj, _signal_emit_hook); \r
\r
wd->base = edje_object_add(e);\r
_elm_theme_object_set(obj, wd->base, "multibuttonentry", "base", "default");\r
Widget_Data *wd = elm_widget_data_get(obj);\r
if (!wd) return;\r
\r
+ if (wd->contracted == 1)\r
+ _contracted_state_set(obj, 0);\r
+ \r
if (wd->items)\r
{\r
Elm_Multibuttonentry_Item *item;\r