Evas_Object *obj;
const char *label;
Evas_Object *content;
- void (*func) (void *data, Evas_Object * obj, void *event_info);
+ void (*func) (void *data, Evas_Object *obj, void *event_info);
const void *data;
Eina_Bool disabled:1;
Eina_Bool separator:1;
Arrow_Direction last_arrow_dir;
Evas_Coord max_width_size;
Evas_Coord max_height_size;
- unsigned int expand_cnt;
Eina_Bool scroller_disabled:1;
Eina_Bool horizontal:1;
};
static const char *widtype = NULL;
-
-static void _del_hook(Evas_Object * obj);
-
-static void _del_pre_hook(Evas_Object * obj);
-
-static void _theme_hook(Evas_Object * obj);
-
-static void _sizing_eval(Evas_Object * obj);
-
-static void _hover_clicked_cb(void *data, Evas_Object * obj, void *event_info);
-
-static void _parent_resize(void *data, Evas * e, Evas_Object * obj,
- void *event_info);
-static void _ctxpopup_show(void *data, Evas * e, Evas_Object * obj,
- void *event_info);
-static void _ctxpopup_hide(void *data, Evas * e, Evas_Object * obj,
- void *event_info);
-static void _ctxpopup_move(void *data, Evas * e, Evas_Object * obj,
- void *event_info);
-static void _ctxpopup_scroller_resize(void *data, Evas * e, Evas_Object * obj,
- void *event_info);
-static void _item_obj_create(Elm_Ctxpopup_Item * item);
-
-static void _item_sizing_eval(Elm_Ctxpopup_Item * item);
-
-static void _ctxpopup_item_select(void *data, Evas_Object * obj,
- const char *emission, const char *source);
-static void _separator_obj_add(Evas_Object * obj);
-
-static void _separator_obj_del(Widget_Data * wd,
- Elm_Ctxpopup_Item * remove_item);
-static void _changed_size_hints(void *data, Evas * e, Evas_Object * obj,
- void *event_info);
-static Arrow_Direction _calc_best_geometry(Widget_Data * wd,
- Evas_Coord_Rectangle * rect);
-static void _arrow_obj_add(Evas_Object * obj, const char *group_name);
-
-static void _update_arrow_obj(Evas_Object * obj, Arrow_Direction arrow_dir);
-
-static Evas_Coord _adjust_arrow_pos_x(Widget_Data * wd);
-
-static Evas_Coord _adjust_arrow_pos_y(Widget_Data * wd);
-
-static void _scale_shrinked_set(Elm_Ctxpopup_Item * item);
-
-static void _item_scale_shrinked_set(Widget_Data * wd,
- Elm_Ctxpopup_Item * add_item);
-static void _item_scale_normal_set(Widget_Data * wd);
-
-static void _shift_geometry_by_arrow(Evas_Object * arrow,
- Arrow_Direction arrow_dir,
- Evas_Coord_Rectangle * rect);
+static void _del_hook(Evas_Object *obj);
+static void _del_pre_hook(Evas_Object *obj);
+static void _theme_hook(Evas_Object *obj);
+static void _sizing_eval(Evas_Object *obj);
+static void _hover_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _ctxpopup_show(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _ctxpopup_hide(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _ctxpopup_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _ctxpopup_scroller_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _item_obj_create(Elm_Ctxpopup_Item *item);
+static void _item_sizing_eval(Elm_Ctxpopup_Item *item);
+static void _ctxpopup_item_select(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _separator_obj_add(Evas_Object *obj);
+static void _separator_obj_del(Widget_Data *wd, Elm_Ctxpopup_Item *remove_item);
+static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static Arrow_Direction _calc_best_geometry(Widget_Data *wd, Evas_Coord_Rectangle *rect);
+static void _arrow_obj_add(Evas_Object *obj, const char *group_name);
+static void _update_arrow_obj(Evas_Object *obj, Arrow_Direction arrow_dir);
+static Evas_Coord _adjust_arrow_pos_x(Widget_Data *wd);
+static Evas_Coord _adjust_arrow_pos_y(Widget_Data *wd);
+static void _shift_geometry_by_arrow(Evas_Object *arrow, Arrow_Direction arrow_dir, Evas_Coord_Rectangle *rect);
static void
-_changed_size_hints(void *data, Evas * e, Evas_Object * obj, void *event_info)
+_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_sizing_eval(data);
}
static void
-_separator_obj_del(Widget_Data * wd, Elm_Ctxpopup_Item * remove_item)
+_separator_obj_del(Widget_Data *wd, Elm_Ctxpopup_Item *remove_item)
{
Eina_List *elist, *cur_list, *prev_list;
}
static void
-_separator_obj_add(Evas_Object * obj)
+_separator_obj_add(Evas_Object *obj)
{
Elm_Ctxpopup_Item *item;
}
static void
-_scale_shrinked_set(Elm_Ctxpopup_Item * item)
+_scale_shrinked_set(Elm_Ctxpopup_Item *item)
{
if (!item)
return;
edje_object_signal_emit(item->obj, "elm,state,shrinked_disabled", "elm");
}
-static void
-_item_scale_normal_set(Widget_Data * wd)
-{
- int item_count;
-
- Eina_List *elist;
- Elm_Ctxpopup_Item *item;
-
- if (!wd)
- return;
-
- item_count = eina_list_count(wd->items);
- item_count -= item_count / 2;
-
- if (item_count != wd->expand_cnt)
- return;
-
- EINA_LIST_FOREACH(wd->items, elist, item)
- {
- if (!item->disabled)
- edje_object_signal_emit(item->obj, "elm,state,enabled", "elm");
- else
- edje_object_signal_emit(item->obj, "elm,state,disabled", "elm");
- }
-}
-
-static void
-_item_scale_shrinked_set(Widget_Data * wd, Elm_Ctxpopup_Item * add_item)
-{
- int item_count;
-
- Eina_List *elist;
-
- Elm_Ctxpopup_Item *item;
-
- if (!wd)
- return;
- if (wd->horizontal)
- return;
- item_count = eina_list_count(wd->items);
- item_count -= (item_count / 2);
-
- if (item_count > (wd->expand_cnt + 1))
- {
- _scale_shrinked_set(add_item);
- }
- else if (item_count == (wd->expand_cnt + 1))
- {
- EINA_LIST_FOREACH(wd->items, elist, item)
- {
- _scale_shrinked_set(item);
- }
- }
-}
static void
-_item_sizing_eval(Elm_Ctxpopup_Item * item)
+_item_sizing_eval(Elm_Ctxpopup_Item *item)
{
Evas_Coord min_w = -1, min_h = -1, max_w = -1, max_h = -1;
}while(0)
static Arrow_Direction
-_calc_best_geometry(Widget_Data * wd, Evas_Coord_Rectangle * rect)
+_calc_best_geometry(Widget_Data *wd, Evas_Coord_Rectangle *rect)
{
Evas_Coord x, y;
-
Evas_Coord parent_x, parent_y, parent_w, parent_h;
-
Evas_Coord box_w, box_h;
-
Arrow_Direction arrow_dir;
-
Evas_Coord x1, x2;
-
Evas_Coord y1, y2;
int available_direction[4] = { 1, 1, 1, 1 };
int idx = 0;
-
Evas_Coord orig_box_w;
-
Evas_Coord finger_size;
-
- Evas_Coord arrow_size_w;
-
- Evas_Coord arrow_size_h;
+ Evas_Coord arrow_size_w, arrow_size_h;
if ((!wd) || (!rect))
return arrow_dir;
_adjust_arrow_pos_x(Widget_Data * wd)
{
Evas_Coord parent_x, parent_w;
-
Evas_Coord arrow_x;
-
Evas_Coord arrow_size;
-
Evas_Coord half_arrow_size;
- if (!wd)
- return 0;
+ if (!wd ) return 0;
edje_object_size_max_get(wd->arrow, &arrow_size, NULL);
half_arrow_size = (arrow_size * 0.5);
}
static Evas_Coord
-_adjust_arrow_pos_y(Widget_Data * wd)
+_adjust_arrow_pos_y(Widget_Data *wd)
{
Evas_Coord parent_y, parent_h;
-
Evas_Coord arrow_y;
-
Evas_Coord arrow_size;
-
Evas_Coord half_arrow_size;
- if (!wd)
- return 0;
+ if (!wd) return 0;
edje_object_size_max_get(wd->arrow, &arrow_size, NULL);
half_arrow_size = (arrow_size * 0.5);
arrow_y = wd->y;
if (arrow_y - half_arrow_size < parent_y)
- {
arrow_y = (parent_y + half_arrow_size);
- }
else if (wd->y + half_arrow_size > WORLD_PARENT_H)
- {
arrow_y = (WORLD_PARENT_H - half_arrow_size);
- }
return arrow_y;
}
static void
-_update_arrow_obj(Evas_Object * obj, Arrow_Direction arrow_dir)
+_update_arrow_obj(Evas_Object *obj, Arrow_Direction arrow_dir)
{
Evas_Coord arrow_x, arrow_y;
}
static void
-_sizing_eval(Evas_Object * obj)
+_sizing_eval(Evas_Object *obj)
{
Widget_Data *wd;
Eina_List *elist;
evas_object_move(wd->location, rect.x, rect.y);
evas_object_resize(wd->location, rect.w, rect.h);
- evas_object_move(wd->hover, rect.x, rect.y);
- evas_object_resize(wd->hover, rect.w, rect.h);
+// evas_object_move(wd->hover, rect.x, rect.y);
+ // evas_object_resize(wd->hover, rect.w, rect.h);
}
static void
}
static void
-_del_pre_hook(Evas_Object * obj)
+_del_pre_hook(Evas_Object *obj)
{
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
- if (!wd)
- return;
+ if (!wd) return;
evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_RESIZE,
_parent_resize, obj);
}
static void
-_del_hook(Evas_Object * obj)
+_del_hook(Evas_Object *obj)
{
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
- if (!wd)
- return;
+ if (!wd) return;
elm_ctxpopup_clear(obj);
free(wd);
}
static void
-_theme_hook(Evas_Object * obj)
+_theme_hook(Evas_Object *obj)
{
Eina_List *elist, *elist_child, *elist_temp;
-
Elm_Ctxpopup_Item *item;
int item_count;
if (item->disabled)
{
- if (item_count > wd->expand_cnt)
- edje_object_signal_emit(item->obj,
- "elm,state,shrinked_disabled",
- "elm");
- else
edje_object_signal_emit(item->obj, "elm,state,disabled",
"elm");
}
else
{
- if (item_count > wd->expand_cnt)
- edje_object_signal_emit(item->obj, "elm,state,shrinked",
- "elm");
- else
edje_object_signal_emit(item->obj, "elm,state,enabled",
"elm");
}
}
static void
-_hover_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+_hover_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
evas_object_hide(data);
evas_object_smart_callback_call(data, "ctxpopup,hide", NULL);
}
static void
-_parent_resize(void *data, Evas * e, Evas_Object * obj, void *event_info)
+_parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_sizing_eval(data);
}
static void
-_ctxpopup_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
+_ctxpopup_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = (Widget_Data *) data;
- if (!wd)
- return;
- if (eina_list_count(wd->items) < 1)
- return;
+ if (!wd) return;
+ if (eina_list_count(wd->items) < 1) return;
evas_object_show(wd->arrow);
evas_object_show(wd->hover);
}
static void
-_ctxpopup_hide(void *data, Evas * e, Evas_Object * obj, void *event_info)
+_ctxpopup_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Widget_Data *wd = (Widget_Data *) data;
- if (!wd)
- return;
+ if (!wd) return;
evas_object_hide(wd->arrow);
evas_object_hide(wd->hover);
}
static void
-_ctxpopup_scroller_resize(void *data, Evas * e, Evas_Object * obj,
+_ctxpopup_scroller_resize(void *data, Evas *e, Evas_Object *obj,
void *event_info)
{
_sizing_eval(data);
}
static void
-_ctxpopup_move(void *data, Evas * e, Evas_Object * obj, void *event_info)
+_ctxpopup_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Coord x, y, w, h;
}
static void
-_ctxpopup_item_select(void *data, Evas_Object * obj, const char *emission,
+_ctxpopup_item_select(void *data, Evas_Object *obj, const char *emission,
const char *source)
{
Elm_Ctxpopup_Item *item = (Elm_Ctxpopup_Item *) data;
}
static void
-_arrow_obj_add(Evas_Object * obj, const char *group_name)
+_arrow_obj_add(Evas_Object *obj, const char *group_name)
{
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
}
static void
-_item_obj_create(Elm_Ctxpopup_Item * item)
+_item_obj_create(Elm_Ctxpopup_Item *item)
{
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(item->ctxpopup);
* @ingroup Ctxpopup
*/
EAPI Evas_Object *
-elm_ctxpopup_item_icon_get(Elm_Ctxpopup_Item * item)
+elm_ctxpopup_item_icon_get(Elm_Ctxpopup_Item *item)
{
if (!item)
return NULL;
* @ingroup Ctxpopup
*/
EAPI void
-elm_ctxpopup_scroller_disabled_set(Evas_Object * obj, Eina_Bool disabled)
+elm_ctxpopup_scroller_disabled_set(Evas_Object *obj, Eina_Bool disabled)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
*
*/
EAPI const char *
-elm_ctxpopup_item_label_get(Elm_Ctxpopup_Item * item)
+elm_ctxpopup_item_label_get(Elm_Ctxpopup_Item *item)
{
if (!item)
return NULL;
* @ingroup Ctxpopup
*/
EAPI Evas_Object *
-elm_ctxpopup_add(Evas_Object * parent)
+elm_ctxpopup_add(Evas_Object *parent)
{
Evas_Object *obj;
-
Evas *e;
-
Widget_Data *wd;
wd = ELM_NEW(Widget_Data);
wd->parent = parent;
wd->last_arrow_dir = NONE_ARROW;
//make it flexible?
- wd->expand_cnt = 4;
wd->max_width_size = 460;
wd->max_height_size = 360;
* @ingroup Ctxpopup
*/
EAPI void
-elm_ctxpopup_clear(Evas_Object * obj)
+elm_ctxpopup_clear(Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Eina_List *elist;
-
Elm_Ctxpopup_Item *item;
-
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
if (!wd)
* @ingroup Ctxpopup
*/
EAPI void
-elm_ctxpopup_horizontal_set(Evas_Object * obj, Eina_Bool horizontal)
+elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal)
{
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);
* @ingroup Ctxpopup
*/
EAPI Eina_Bool
-elm_ctxpopup_horizontal_get(Evas_Object * obj)
+elm_ctxpopup_horizontal_get(Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
* @ingroup Ctxpopup
*/
EAPI void
-elm_ctxpopup_item_icon_set(Elm_Ctxpopup_Item * item, Evas_Object * icon)
+elm_ctxpopup_item_icon_set(Elm_Ctxpopup_Item *item, Evas_Object *icon)
{
Widget_Data *wd;
* @ingroup Ctxpopup
*/
EAPI void
-elm_ctxpopup_item_label_set(Elm_Ctxpopup_Item * item, const char *label)
+elm_ctxpopup_item_label_set(Elm_Ctxpopup_Item *item, const char *label)
{
if ((!item) || (!label))
return;
* @ingroup Ctxpopup
*/
EAPI Elm_Ctxpopup_Item *
-elm_ctxpopup_icon_add(Evas_Object * obj, Evas_Object * icon,
- void (*func) (void *data, Evas_Object * obj,
+elm_ctxpopup_icon_add(Evas_Object *obj, Evas_Object *icon,
+ void (*func) (void *data, Evas_Object *obj,
void *event_info), const void *data)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
_item_obj_create(item);
wd->items = eina_list_append(wd->items, item);
elm_ctxpopup_item_icon_set(item, icon);
- _item_scale_shrinked_set(wd, item);
elm_box_pack_end(wd->box, item->obj);
_sizing_eval(obj);
return item;
* @ingroup Ctxpopup
*/
EAPI Elm_Ctxpopup_Item *
-elm_ctxpopup_label_add(Evas_Object * obj, const char *label,
- void (*func) (void *data, Evas_Object * obj,
+elm_ctxpopup_label_add(Evas_Object *obj, const char *label,
+ void (*func) (void *data, Evas_Object *obj,
void *event_info), const void *data)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
_item_obj_create(item);
wd->items = eina_list_append(wd->items, item);
elm_ctxpopup_item_label_set(item, label);
- _item_scale_shrinked_set(wd, item);
elm_box_pack_end(wd->box, item->obj);
_sizing_eval(obj);
return item;
* @ingroup Ctxpopup
*/
EAPI void
-elm_ctxpopup_item_del(Elm_Ctxpopup_Item * item)
+elm_ctxpopup_item_del(Elm_Ctxpopup_Item *item)
{
Widget_Data *wd;
wd->items = eina_list_remove(wd->items, item);
}
free(item);
- _item_scale_normal_set(wd);
if (eina_list_count(wd->items) < 1)
{
evas_object_hide(wd->arrow);
* @ingroup Ctxpopup
*/
EAPI void
-elm_ctxpopup_item_disabled_set(Elm_Ctxpopup_Item * item, Eina_Bool disabled)
+elm_ctxpopup_item_disabled_set(Elm_Ctxpopup_Item *item, Eina_Bool disabled)
{
Widget_Data *wd;
- int item_count;
-
if (!item)
return;
if (disabled == item->disabled)
return;
wd = (Widget_Data *) elm_widget_data_get(item->ctxpopup);
- item_count = eina_list_count(wd->items);
- item_count -= item_count / 2;
if (disabled)
- {
- if (item_count > wd->expand_cnt)
- edje_object_signal_emit(item->obj, "elm,state,shrinked_disabled",
- "elm");
- else
edje_object_signal_emit(item->obj, "elm,state,disabled", "elm");
- }
else
- {
- if (item_count > wd->expand_cnt)
- edje_object_signal_emit(item->obj, "elm,state,shrinked", "elm");
- else
edje_object_signal_emit(item->obj, "elm,state,enabled", "elm");
- }
edje_object_message_signal_process(item->obj);
item->disabled = disabled;