MULTIBUTONENTRY_BUTTON_STATE_NUM\r
} Multibuttonentry_Button_State;\r
\r
-struct _Multibuttonentry_Item\r
- {\r
+typedef enum _MultiButtonEntry_Closed_Button_Type {\r
+ MULTIBUTTONENTRY_CLOSED_IMAGE,\r
+ MULTIBUTTONENTRY_CLOSED_LABEL\r
+} MultiButtonEntry_Closed_Button_Type;\r
+\r
+struct _Multibuttonentry_Item {\r
Evas_Object *multibuttonentry;\r
Evas_Object *button;\r
Evas_Object *label;\r
};\r
\r
typedef struct _Widget_Data Widget_Data;\r
-struct _Widget_Data\r
- {\r
+struct _Widget_Data {\r
Evas_Object *base;\r
Evas_Object *box;\r
Evas_Object *rect;\r
Evas_Object *guidetext;\r
Evas_Object *end; // used to represent the total number of invisible buttons\r
\r
+ Evas_Object *rectForEnd;\r
+ MultiButtonEntry_Closed_Button_Type end_type;\r
+\r
Eina_List *items;\r
Eina_List *current;\r
-\r
int n_str;\r
\r
Evas_Coord w_box, h_box;\r
if (wd->label) evas_object_del (wd->label);\r
if (wd->guidetext) evas_object_del (wd->guidetext);\r
if (wd->end) evas_object_del (wd->end);\r
+ if (wd->rectForEnd) evas_object_del(wd->rectForEnd);\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
+ 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
if (contracted == 1)\r
{\r
Evas_Coord w=0, w_tmp=0;\r
+ Evas_Coord box_inner_item_width_padding = 0;\r
\r
+ elm_box_padding_get(wd->box, &box_inner_item_width_padding, NULL);\r
// unpack all items and entry\r
+ elm_box_unpack_all(wd->box);\r
EINA_LIST_FOREACH(wd->items, l, item)\r
{\r
if (item)\r
{\r
- elm_box_unpack(wd->box, item->button);\r
evas_object_hide(item->button);\r
item->visible = EINA_FALSE;\r
}\r
}\r
- elm_box_unpack(wd->box, wd->entry);\r
evas_object_hide(wd->entry);\r
\r
\r
// pack buttons only 1line\r
w = wd->w_box;\r
\r
- // w -= w_rect\r
- if (wd->rect) evas_object_size_hint_min_get (wd->rect, &w_tmp, NULL);\r
- w -= w_tmp;\r
+ if (wd->rect)\r
+ {\r
+ elm_box_pack_end(wd->box, wd->rect);\r
+ evas_object_size_hint_min_get(wd->rect, &w_tmp, NULL);\r
+ w -= w_tmp;\r
+ w -= box_inner_item_width_padding;\r
+ }\r
\r
- // w -= w_label\r
- if (wd->label) evas_object_size_hint_min_get (wd->label, &w_tmp, NULL);\r
- w -= w_tmp;\r
+ if (wd->label)\r
+ {\r
+ elm_box_pack_end(wd->box, wd->label);\r
+ evas_object_size_hint_min_get(wd->label, &w_tmp, NULL);\r
+ w -= w_tmp;\r
+ w -= box_inner_item_width_padding;\r
+ }\r
\r
- // w -= w_btns\r
Eina_Bool on_contracted = EINA_FALSE;\r
item = NULL;\r
int count = eina_list_count(wd->items);\r
+ Evas_Coord button_min_width = 0;\r
+ /* Evas_Coord button_min_height = 0; */\r
+ if (wd->end_type == MULTIBUTTONENTRY_CLOSED_IMAGE)\r
+ {\r
+ const char *size_str;\r
+ size_str = edje_object_data_get(wd->end, "closed_button_width");\r
+ if(size_str) button_min_width = (Evas_Coord)atoi(size_str);\r
+ /* it use for later\r
+ size_str = edje_object_data_get(wd->end, "closed_button_height");\r
+ if(size_str) button_min_width = (Evas_Coord)atoi(size_str);\r
+ */\r
+ }\r
+\r
EINA_LIST_FOREACH(wd->items, l, item)\r
{\r
if (item)\r
item->visible = EINA_TRUE;\r
\r
w -= item->vw;\r
+ w -= box_inner_item_width_padding;\r
count--;\r
\r
- if (count > 0)\r
+ if (wd->end_type == MULTIBUTTONENTRY_CLOSED_LABEL)\r
{\r
- snprintf(buf, sizeof(buf), "... + %d", count);\r
- elm_label_label_set(wd->end, buf);\r
- evas_object_size_hint_min_get(wd->end, &w_label_count, NULL);\r
+ if (count > 0)\r
+ {\r
+ snprintf(buf, sizeof(buf), "... + %d", count);\r
+ elm_label_label_set(wd->end, buf);\r
+ evas_object_size_hint_min_get(wd->end, &w_label_count, NULL);\r
+ }\r
+\r
+ if (w < 0 || w < w_label_count)\r
+ {\r
+ elm_box_unpack(wd->box, item->button);\r
+ evas_object_hide(item->button);\r
+ item->visible = EINA_FALSE;\r
+\r
+ count++;\r
+ snprintf(buf, sizeof(buf), "... + %d", count);\r
+ elm_label_label_set(wd->end, buf);\r
+ evas_object_size_hint_min_get(wd->end, &w_label_count, NULL);\r
+\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", (void *)wd->contracted);\r
+ break;\r
+ }\r
}\r
-\r
- if (w < 0 || w < w_label_count)\r
+ else if (wd->end_type == MULTIBUTTONENTRY_CLOSED_IMAGE)\r
{\r
- elm_box_unpack(wd->box, item->button);\r
- evas_object_hide(item->button);\r
- item->visible = EINA_FALSE;\r
-\r
- count++;\r
- snprintf(buf, sizeof(buf), "... + %d", count);\r
- elm_label_label_set(wd->end, buf);\r
- evas_object_size_hint_min_get(wd->end, &w_label_count, NULL);\r
-\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", (void *)wd->contracted);\r
-\r
- break;\r
+ if (w < button_min_width)\r
+ {\r
+ Evas_Coord rectSize;\r
+ Evas_Coord closed_height = 0;\r
+ const char *height_str = edje_object_data_get(wd->base, "closed_height");\r
+ if(height_str) closed_height = (Evas_Coord)atoi(height_str);\r
+ elm_box_unpack(wd->box, item->button);\r
+ evas_object_hide(item->button);\r
+ item->visible = EINA_FALSE;\r
+\r
+ w += item->vw;\r
+ rectSize = w - button_min_width;\r
+ if (!wd->rectForEnd)\r
+ {\r
+ Evas *e = evas_object_evas_get(obj);\r
+ wd->rectForEnd = evas_object_rectangle_add(e);\r
+ evas_object_color_set(wd->rectForEnd, 0, 0, 0, 0);\r
+ elm_widget_sub_object_add(obj, wd->rectForEnd);\r
+ }\r
+ evas_object_size_hint_min_set(wd->rectForEnd, rectSize, closed_height);\r
+ elm_box_pack_end(wd->box, wd->rectForEnd);\r
+ evas_object_show(wd->rectForEnd);\r
+\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", (void *)wd->contracted);\r
+ break;\r
+ }\r
}\r
}\r
}\r
}\r
else\r
{\r
- // unpack last label\r
- elm_box_unpack(wd->box, wd->end);\r
+ // unpack all items and entry\r
+ elm_box_unpack_all(wd->box);\r
+ EINA_LIST_FOREACH(wd->items, l, item)\r
+ {\r
+ if (item)\r
+ {\r
+ evas_object_hide(item->button);\r
+ item->visible = EINA_FALSE;\r
+ }\r
+ }\r
evas_object_hide(wd->end);\r
\r
+ if (wd->rectForEnd) evas_object_hide(wd->rectForEnd);\r
+\r
+ // pack buttons only 1line\r
+\r
+ if (wd->rect) elm_box_pack_end(wd->box, wd->rect);\r
+ if (wd->label) elm_box_pack_end(wd->box, wd->label);\r
+\r
// pack remain btns\r
item = NULL;\r
EINA_LIST_FOREACH(wd->items, l, item)\r
\r
if (!wd->end)\r
{\r
- if (! (wd->end = elm_label_add (obj))) return;\r
- elm_object_style_set(wd->end, "extended/multibuttonentry_default");\r
+ const char *end_type = edje_object_data_get(wd->base, "closed_button_type");\r
+ if (!end_type || !strcmp(end_type, "label"))\r
+ {\r
+ if (! (wd->end = elm_label_add (obj))) return;\r
+ elm_object_style_set(wd->end, "extended/multibuttonentry_default");\r
+ wd->end_type = MULTIBUTTONENTRY_CLOSED_LABEL;\r
+ }\r
+ else\r
+ {\r
+ const char *size_str;\r
+ if (!(wd->end = edje_object_add(evas_object_evas_get(obj)))) return;\r
+ _elm_theme_object_set(obj, wd->end, "multibuttonentry", "closedbutton", elm_widget_style_get(obj));\r
+ Evas_Coord button_min_width = 0;\r
+ Evas_Coord button_min_height = 0;\r
+\r
+ size_str = edje_object_data_get(wd->end, "closed_button_width");\r
+ if(size_str) button_min_width = (Evas_Coord)atoi(size_str);\r
+ size_str = edje_object_data_get(wd->end, "closed_button_height");\r
+ if(size_str) button_min_height = (Evas_Coord)atoi(size_str);\r
+\r
+ wd->end_type = MULTIBUTTONENTRY_CLOSED_IMAGE;\r
+ evas_object_size_hint_min_set(wd->end, button_min_width, button_min_height);\r
+ elm_widget_sub_object_add(obj, wd->end);\r
+ }\r
}\r
}\r
\r
wd->contracted = 0;\r
wd->focused = EINA_FALSE;\r
wd->n_str = 0;\r
+ wd->rectForEnd = NULL;\r
\r
_view_init(obj);\r
_event_init(obj);\r