* @defgroup Photo Photo
*
* For displaying the photo of a person (contact). Simple yet
- * with a very specific purpose.
- *
+ * with a very specific purpose.
+ *
* Signals that you can add callbacks for are:
*
* - clicked: This is called when a user has clicked the photo
if (!wd) return;
_elm_widget_mirrored_reload(obj);
_mirrored_set(wd->frm, elm_widget_mirrored_get(obj));
- _elm_theme_object_set(obj, wd->frm, "photo", "base",
+ _elm_theme_object_set(obj, wd->frm, "photo", "base",
elm_widget_style_get(obj));
edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->img);
- edje_object_scale_set(wd->frm, elm_widget_scale_get(obj) *
+ edje_object_scale_set(wd->frm, elm_widget_scale_get(obj) *
_elm_config->scale);
_sizing_eval(obj);
}
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
if (!wd) return;
- if (wd->size > 0)
+ if (wd->size > 0)
{
double scale = 0.0;
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- if (wd->fill)
+ if (wd->fill)
{
Edje_Message_Int_Set *msg;
Evas_Object *icon = _els_smart_icon_object_get(wd->img);
Evas_Object *icon;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "photo");
elm_widget_type_set(obj, "photo");
elm_widget_sub_object_add(parent, obj);
_els_smart_icon_fill_inside_set(wd->img, 0);
_els_smart_icon_scale_size_set(wd->img, 0);
wd->fill = EINA_FALSE;
- _els_smart_icon_scale_set(wd->img,
+ _els_smart_icon_scale_set(wd->img,
elm_widget_scale_get(obj) * _elm_config->scale);
evas_object_event_callback_add(wd->img, EVAS_CALLBACK_MOUSE_UP,
- _mouse_up, obj);
+ _mouse_up, obj);
evas_object_event_callback_add(wd->img, EVAS_CALLBACK_MOUSE_DOWN,
- _mouse_down, obj);
+ _mouse_down, obj);
evas_object_repeat_events_set(wd->img, 1);
edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->img);
evas_object_show(wd->img);
icon = _els_smart_icon_object_get(wd->img);
evas_object_event_callback_add(icon, EVAS_CALLBACK_MOVE,
- _icon_move_resize, obj);
+ _icon_move_resize, obj);
evas_object_event_callback_add(icon, EVAS_CALLBACK_RESIZE,
- _icon_move_resize, obj);
+ _icon_move_resize, obj);
_mirrored_set(obj, elm_widget_mirrored_get(obj));
_sizing_eval(obj);
* and zooming and panning as well as fitting logic. It is entirely focused
* on jpeg images, and takes advantage of properties of the jpeg format (via
* evas loader features in the jpeg loader).
- *
+ *
* Signals that you can add callbacks for are:
*
* clicked - This is called when a user has clicked the photo without dragging
* around.
- *
+ *
* press - This is called when a user has pressed down on the photo.
- *
+ *
* longpressed - This is called when a user has pressed down on the photo for
* a long time without dragging around.
- *
+ *
* clicked,double - This is called when a user has double-clicked the photo.
- *
+ *
* load - Photo load begins.
- *
+ *
* loaded - This is called when the image file load is complete for the first
* view (low resolution blurry version).
*
* load,details - Photo detailed data load begins.
- *
+ *
* loaded,details - This is called when the image file load is complete for the
* detailed image data (full resolution needed).
*
* zoom,start - Zoom animation started.
- *
+ *
* zoom,stop - Zoom animation stopped.
- *
+ *
* zoom,change - Zoom changed when using an auto zoom mode.
- *
+ *
* scroll - the content has been scrolled (moved)
*
* scroll,anim,start - scrolling animation has started
* scroll,drag,start - dragging the contents around has started
*
* scroll,drag,stop - dragging the contents around has stopped
- *
+ *
* ---
- *
+ *
* TODO (maybe - optional future stuff):
- *
+ *
* 1. wrap photo in theme edje so u can have styling around photo (like white
* photo bordering).
* 2. exif handling
{
Widget_Data *wd;
Evas_Object *img;
- struct
+ struct
{
int x, y, w, h;
} src, out;
double zoom;
Elm_Photocam_Zoom_Mode mode;
const char *file;
-
+
Ecore_Job *calc_job;
Ecore_Timer *scr_timer;
Ecore_Timer *long_timer;
Ecore_Animator *zoom_animator;
double t_start, t_end;
- struct
+ struct
{
int imw, imh;
int w, h;
int ow, oh, nw, nh;
- struct
+ struct
{
double x, y;
} spos;
} size;
struct
{
- Eina_Bool show : 1;
- Evas_Coord x, y ,w ,h;
+ Eina_Bool show : 1;
+ Evas_Coord x, y ,w ,h;
} show;
int tsize;
Evas_Object *img; // low res version of image (scale down == 8)
if (wd->show.show)
{
- wd->show.show = EINA_FALSE;
- elm_smart_scroller_child_region_show(wd->scr, wd->show.x, wd->show.y, wd->show.w, wd->show.h);
+ wd->show.show = EINA_FALSE;
+ elm_smart_scroller_child_region_show(wd->scr, wd->show.x, wd->show.y, wd->show.w, wd->show.h);
}
}
for (x = 0; x < g->gw; x++)
{
int tn, xx, yy, ww, hh;
-
+
tn = (y * g->gw) + x;
xx = g->grid[tn].out.x;
yy = g->grid[tn].out.y;
for (x = 0; x < g->gw; x++)
{
int tn;
-
+
tn = (y * g->gw) + x;
evas_object_del(g->grid[tn].img);
if (g->grid[tn].want)
Widget_Data *wd = elm_widget_data_get(obj);
int x, y;
Grid *g;
-
+
if (!wd) return NULL;
g = calloc(1, sizeof(Grid));
-
+
g->zoom = grid_zoom_calc(wd->zoom);
g->tsize = wd->tsize;
g->iw = wd->size.imw;
g->ih = wd->size.imh;
-
+
g->w = g->iw / g->zoom;
g->h = g->ih / g->zoom;
if (g->zoom >= 8) return NULL;
for (x = 0; x < g->gw; x++)
{
int tn;
-
+
tn = (y * g->gw) + x;
g->grid[tn].src.x = x * g->tsize;
if (x == (g->gw - 1))
g->grid[tn].src.h = g->h - ((g->gh - 1) * g->tsize);
else
g->grid[tn].src.h = g->tsize;
-
+
g->grid[tn].out.x = g->grid[tn].src.x;
g->grid[tn].out.y = g->grid[tn].src.y;
g->grid[tn].out.w = g->grid[tn].src.w;
g->grid[tn].out.h = g->grid[tn].src.h;
-
+
g->grid[tn].wd = wd;
- g->grid[tn].img =
- evas_object_image_add(evas_object_evas_get(obj));
+ g->grid[tn].img =
+ evas_object_image_add(evas_object_evas_get(obj));
evas_object_image_scale_hint_set
- (g->grid[tn].img, EVAS_IMAGE_SCALE_HINT_DYNAMIC);
+ (g->grid[tn].img, EVAS_IMAGE_SCALE_HINT_DYNAMIC);
evas_object_pass_events_set(g->grid[tn].img, EINA_TRUE);
- evas_object_smart_member_add(g->grid[tn].img,
+ evas_object_smart_member_add(g->grid[tn].img,
wd->pan_smart);
elm_widget_sub_object_add(obj, g->grid[tn].img);
evas_object_image_filled_set(g->grid[tn].img, 1);
- evas_object_event_callback_add(g->grid[tn].img,
+ evas_object_event_callback_add(g->grid[tn].img,
EVAS_CALLBACK_IMAGE_PRELOADED,
- _tile_preloaded,
+ _tile_preloaded,
&(g->grid[tn]));
}
}
{
int tn, xx, yy, ww, hh;
Eina_Bool visible = EINA_FALSE;
-
+
tn = (y * g->gw) + x;
xx = g->grid[tn].out.x;
yy = g->grid[tn].out.y;
yy = (gh * yy) / g->h;
hh = ((gh * (ty + hh)) / g->h) - yy;
}
- if (ELM_RECTS_INTERSECT(xx - wd->pan_x + ox,
+ if (ELM_RECTS_INTERSECT(xx - wd->pan_x + ox,
yy - wd->pan_y + oy,
ww, hh,
cvx, cvy, cvw, cvh))
g->grid[tn].src.y,
g->grid[tn].src.w,
g->grid[tn].src.h);
- evas_object_image_file_set(g->grid[tn].img, wd->file, NULL);
+ evas_object_image_file_set(g->grid[tn].img, wd->file, NULL);
evas_object_image_preload(g->grid[tn].img, 0);
wd->preload_num++;
if (wd->preload_num == 1)
for (x = 0; x < g->gw; x++)
{
int tn;
-
+
tn = (y * g->gw) + x;
evas_object_image_smooth_scale_set(g->grid[tn].img, (!wd->nosmooth));
}
_grid_raise(Grid *g)
{
int x, y;
-
+
for (y = 0; y < g->gh; y++)
{
for (x = 0; x < g->gw; x++)
{
int tn;
-
+
tn = (y * g->gw) + x;
evas_object_raise(g->grid[tn].img);
}
{
Eina_List *l, *l_next;
Grid *g;
-
+
EINA_LIST_FOREACH_SAFE(wd->grids, l, l_next, g)
{
if (g->dead)
_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Widget_Data *wd = elm_widget_data_get(data);
-// Evas_Event_Mouse_Move *ev = event_info;
+ // Evas_Event_Mouse_Move *ev = event_info;
if (!wd) return;
}
if (wd->long_timer) ecore_timer_del(wd->long_timer);
wd->long_timer = ecore_timer_add(_elm_config->longpress_timeout, _long_press, data);
}
-
+
static void
_mouse_up(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
evas_object_smart_callback_call(data, "clicked", NULL);
wd->on_hold = EINA_FALSE;
}
-
+
static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_NULL;
static void
if (!wd) return;
if (elm_widget_focus_get(obj))
{
- edje_object_signal_emit(wd->obj, "elm,action,focus", "elm");
- evas_object_focus_set(wd->obj, EINA_TRUE);
+ edje_object_signal_emit(wd->obj, "elm,action,focus", "elm");
+ evas_object_focus_set(wd->obj, EINA_TRUE);
}
else
{
- edje_object_signal_emit(wd->obj, "elm,action,unfocus", "elm");
- evas_object_focus_set(wd->obj, EINA_FALSE);
+ edje_object_signal_emit(wd->obj, "elm,action,unfocus", "elm");
+ evas_object_focus_set(wd->obj, EINA_FALSE);
}
}
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
elm_smart_scroller_object_theme_set(obj, wd->scr, "photocam", "base", elm_widget_style_get(obj));
-// edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
+ // edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
_sizing_eval(obj);
}
/*
-static void
-_show_region_hook(void *data, Evas_Object *obj)
-{
+ static void
+ _show_region_hook(void *data, Evas_Object *obj)
+ {
Widget_Data *wd = elm_widget_data_get(data);
Evas_Coord x, y, w, h;
if (!wd) return;
elm_widget_show_region_get(obj, &x, &y, &w, &h);
elm_smart_scroller_child_region_show(wd->scr, x, y, w, h);
-}
-*/
+ }
+ */
static void
_sizing_eval(Evas_Object *obj)
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
if (!wd) return;
-// evas_object_size_hint_min_get(wd->scr, &minw, &minh);
+ // evas_object_size_hint_min_get(wd->scr, &minw, &minh);
evas_object_size_hint_max_get(wd->scr, &maxw, &maxh);
-// minw = -1;
-// minh = -1;
-// if (wd->mode != ELM_LIST_LIMIT) minw = -1;
+ // minw = -1;
+ // minh = -1;
+ // if (wd->mode != ELM_LIST_LIMIT) minw = -1;
evas_object_size_hint_min_set(obj, minw, minh);
evas_object_size_hint_max_set(obj, maxw, maxh);
}
evas_object_smart_callback_call(data, "scroll", NULL);
}
-static Eina_Bool
+static Eina_Bool
_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__,
- Evas_Callback_Type type, void *event_info)
+ Evas_Callback_Type type, void *event_info)
{
double zoom;
if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
elm_smart_scroller_page_size_get(wd->scr, &page_x, &page_y);
elm_smart_scroller_child_viewport_size_get(wd->scr, &v_w, &v_h);
- if ((!strcmp(ev->keyname, "Left")) ||
+ if ((!strcmp(ev->keyname, "Left")) ||
(!strcmp(ev->keyname, "KP_Left")))
{
x -= step_x;
}
- else if ((!strcmp(ev->keyname, "Right")) ||
+ else if ((!strcmp(ev->keyname, "Right")) ||
(!strcmp(ev->keyname, "KP_Right")))
{
x += step_x;
}
- else if ((!strcmp(ev->keyname, "Up")) ||
+ else if ((!strcmp(ev->keyname, "Up")) ||
(!strcmp(ev->keyname, "KP_Up")))
{
y -= step_y;
}
- else if ((!strcmp(ev->keyname, "Down")) ||
+ else if ((!strcmp(ev->keyname, "Down")) ||
(!strcmp(ev->keyname, "KP_Down")))
{
y += step_y;
}
- else if ((!strcmp(ev->keyname, "Prior")) ||
+ else if ((!strcmp(ev->keyname, "Prior")) ||
(!strcmp(ev->keyname, "KP_Prior")))
{
if (page_y < 0)
- y -= -(page_y * v_h) / 100;
+ y -= -(page_y * v_h) / 100;
else
- y -= page_y;
+ y -= page_y;
}
- else if ((!strcmp(ev->keyname, "Next")) ||
+ else if ((!strcmp(ev->keyname, "Next")) ||
(!strcmp(ev->keyname, "KP_Next")))
{
if (page_y < 0)
- y += -(page_y * v_h) / 100;
+ y += -(page_y * v_h) / 100;
else
- y += page_y;
+ y += page_y;
}
else if ((!strcmp(ev->keyname, "KP_Add")))
{
elm_photocam_zoom_mode_set(obj, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
elm_photocam_zoom_set(obj, zoom);
return EINA_TRUE;
- }
+ }
else if ((!strcmp(ev->keyname, "KP_Subtract")))
{
zoom = elm_photocam_zoom_get(obj);
Eina_Bool bounce = _elm_config->thumbscroll_bounce_enable;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "photocam");
elm_widget_type_set(obj, "photocam");
elm_widget_sub_object_add(parent, obj);
evas_object_smart_callback_add(wd->scr, "drag,start", _scr_drag_start, obj);
evas_object_smart_callback_add(wd->scr, "drag,stop", _scr_drag_stop, obj);
evas_object_smart_callback_add(wd->scr, "scroll", _scr_scroll, obj);
-
+
elm_smart_scroller_bounce_allow_set(wd->scr, bounce, bounce);
wd->obj = obj;
evas_object_smart_callback_add(obj, "scroll-hold-off", _hold_off, obj);
evas_object_smart_callback_add(obj, "scroll-freeze-on", _freeze_on, obj);
evas_object_smart_callback_add(obj, "scroll-freeze-off", _freeze_off, obj);
-
+
if (!smart)
{
- static Evas_Smart_Class sc;
-
- evas_object_smart_clipped_smart_set(&_pan_sc);
- sc = _pan_sc;
- sc.name = "elm_photocam_pan";
- sc.version = EVAS_SMART_CLASS_VERSION;
- sc.add = _pan_add;
- sc.del = _pan_del;
- sc.resize = _pan_resize;
- sc.move = _pan_move;
- sc.calculate = _pan_calculate;
- smart = evas_smart_class_new(&sc);
+ static Evas_Smart_Class sc;
+
+ evas_object_smart_clipped_smart_set(&_pan_sc);
+ sc = _pan_sc;
+ sc.name = "elm_photocam_pan";
+ sc.version = EVAS_SMART_CLASS_VERSION;
+ sc.add = _pan_add;
+ sc.del = _pan_del;
+ sc.resize = _pan_resize;
+ sc.move = _pan_move;
+ sc.calculate = _pan_calculate;
+ smart = evas_smart_class_new(&sc);
}
if (smart)
{
- wd->pan_smart = evas_object_smart_add(e, smart);
- wd->pan = evas_object_smart_data_get(wd->pan_smart);
- wd->pan->wd = wd;
+ wd->pan_smart = evas_object_smart_add(e, smart);
+ wd->pan = evas_object_smart_data_get(wd->pan_smart);
+ wd->pan->wd = wd;
}
elm_smart_scroller_extern_pan_set(wd->scr, wd->pan_smart,
- _pan_set, _pan_get, _pan_max_get,
+ _pan_set, _pan_get, _pan_max_get,
_pan_min_get, _pan_child_size_get);
wd->zoom = 1;
wd->mode = ELM_PHOTOCAM_ZOOM_MODE_MANUAL;
-
+
wd->tsize = 512;
-
+
wd->img = evas_object_image_add(e);
evas_object_image_scale_hint_set(wd->img, EVAS_IMAGE_SCALE_HINT_DYNAMIC);
evas_object_event_callback_add(wd->img, EVAS_CALLBACK_MOUSE_DOWN,
evas_object_image_filled_set(wd->img, 1);
evas_object_event_callback_add(wd->img, EVAS_CALLBACK_IMAGE_PRELOADED,
_main_preloaded, obj);
-
- edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr),
+
+ edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr),
&minw, &minh);
evas_object_size_hint_min_set(obj, minw, minh);
if (!wd) return EVAS_LOAD_ERROR_GENERIC;
if (!eina_stringshare_replace(&wd->file, file)) return EVAS_LOAD_ERROR_NONE;
grid_clearall(obj);
-
+
evas_object_hide(wd->img);
evas_object_image_smooth_scale_set(wd->img, (wd->nosmooth == 0));
evas_object_image_file_set(wd->img, NULL, NULL);
* Returns the path of the current image file
*
* @param obj The photocam object
- * @return Returns the path
+ * @return Returns the path
*
* @ingroup Photocam
*/
* (that is 2x2 photo pixels will display as 1 on-screen pixel). 4:1 will be
* 4x4 photo pixels as 1 screen pixel, and so on. The @p zoom parameter must
* be greater than 0. It is usggested to stick to powers of 2. (1, 2, 4, 8,
- * 16, 32, etc.).
+ * 16, 32, etc.).
*
* @param obj The photocam object
* @param zoom The zoom level to set
free(g);
}
}
- done:
+done:
wd->t_start = ecore_loop_time_get();
wd->t_end = wd->t_start + _elm_config->zoom_friction;
if ((wd->size.w > 0) && (wd->size.h > 0))
/**
* Get the current area of the image that is currently shown
- *
- * This gets the region
- *
+ *
+ * This gets the region
+ *
*/
EAPI void
elm_photocam_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h)
}
else
{
- if (x) *x = 0;
- if (w) *w = 0;
+ if (x) *x = 0;
+ if (w) *w = 0;
}
if (wd->size.h > 0)
}
else
{
- if (y) *y = 0;
- if (h) *h = 0;
+ if (y) *y = 0;
+ if (h) *h = 0;
}
}
rh = (w * wd->size.h) / wd->size.imh;
if (rw < 1) rw = 1;
if (rh < 1) rh = 1;
- if ((rx + rw) > wd->size.w) rx = wd->size.w - rw;
+ if ((rx + rw) > wd->size.w) rx = wd->size.w - rw;
if ((ry + rh) > wd->size.h) ry = wd->size.h - rh;
if (wd->zoom_animator)
{
rh = (w * wd->size.h) / wd->size.imh;
if (rw < 1) rw = 1;
if (rh < 1) rh = 1;
- if ((rx + rw) > wd->size.w) rx = wd->size.w - rw;
+ if ((rx + rw) > wd->size.w) rx = wd->size.w - rw;
if ((ry + rh) > wd->size.h) ry = wd->size.h - rh;
if (wd->zoom_animator)
{
wd->zoom_animator = NULL;
zoom_do(obj, 1.0);
evas_object_smart_callback_call(obj, "zoom,stop", NULL);
- }
+ }
elm_smart_scroller_region_bring_in(wd->scr, rx, ry, rw, rh);
}
/**
* Set the paused state for photocam
- *
+ *
* This sets the paused state to on (1) or off (0) for photocam. The default
* is on. This will stop zooming using animation ch change zoom levels and
* change instantly. This will stop any existing animations that are running.
- *
+ *
* @param obj The photocam object
* @param paused The pause state to set
*
/**
* Get the paused state for photocam
- *
+ *
* This gets the current paused state for the photocam object.
- *
+ *
* @param obj The photocam object
* @return The current paused state
*
/**
* Get the internal low-res image used for photocam
- *
+ *
* This gets the internal image object inside photocam. Do not modify it. It
* is for inspection only, and hooking callbacks to. Nothing else. It may be
* deleted at any time as well.
_elm_theme_object_set(obj, wd->progressbar, "progressbar", "horizontal", elm_widget_style_get(obj));
else
_elm_theme_object_set(obj, wd->progressbar, "progressbar", "vertical", elm_widget_style_get(obj));
-
+
if (wd->icon)
{
- edje_object_part_swallow(wd->progressbar, "elm.swallow.content", wd->icon);
- edje_object_signal_emit(wd->progressbar, "elm,state,icon,visible", "elm");
+ edje_object_part_swallow(wd->progressbar, "elm.swallow.content", wd->icon);
+ edje_object_signal_emit(wd->progressbar, "elm,state,icon,visible", "elm");
}
if (wd->label)
{
edje_object_signal_emit(wd->progressbar, "elm,state,text,visible", "elm");
}
if (wd->pulse)
- edje_object_signal_emit(wd->progressbar, "elm,state,pulse", "elm");
+ edje_object_signal_emit(wd->progressbar, "elm,state,pulse", "elm");
else
- edje_object_signal_emit(wd->progressbar, "elm,state,fraction", "elm");
+ edje_object_signal_emit(wd->progressbar, "elm,state,fraction", "elm");
if (wd->pulse_state)
- edje_object_signal_emit(wd->progressbar, "elm,state,pulse,start", "elm");
-
+ edje_object_signal_emit(wd->progressbar, "elm,state,pulse,start", "elm");
+
if ((wd->units) && (!wd->pulse))
- edje_object_signal_emit(wd->progressbar, "elm,state,units,visible", "elm");
-
+ edje_object_signal_emit(wd->progressbar, "elm,state,units,visible", "elm");
+
if (wd->horizontal)
evas_object_size_hint_min_set(wd->spacer, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale, 1);
else
edje_object_part_swallow(wd->progressbar, "elm.swallow.bar", wd->spacer);
if (wd->inverted)
- edje_object_signal_emit(wd->progressbar, "elm,state,inverted,on", "elm");
-
+ edje_object_signal_emit(wd->progressbar, "elm,state,inverted,on", "elm");
+
_units_set(obj);
edje_object_message_signal_process(wd->progressbar);
edje_object_scale_set(wd->progressbar, elm_widget_scale_get(obj) * _elm_config->scale);
if (!wd) return;
if (sub == wd->icon)
{
- edje_object_signal_emit(wd->progressbar, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del_full
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
- wd->icon = NULL;
- edje_object_message_signal_process(wd->progressbar);
- _sizing_eval(obj);
+ edje_object_signal_emit(wd->progressbar, "elm,state,icon,hidden", "elm");
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
+ wd->icon = NULL;
+ edje_object_message_signal_process(wd->progressbar);
+ _sizing_eval(obj);
}
}
pos = wd->val;
rtl = elm_widget_mirrored_get(obj);
if ((!rtl && wd->inverted) || (rtl &&
- ((!wd->horizontal && wd->inverted) ||
- (wd->horizontal && !wd->inverted)))) pos = MAX_RATIO_LVL - pos;
+ ((!wd->horizontal && wd->inverted) ||
+ (wd->horizontal && !wd->inverted)))) pos = MAX_RATIO_LVL - pos;
edje_object_part_drag_value_set(wd->progressbar, "elm.cur.progressbar", pos, pos);
}
Widget_Data *wd;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "progressbar");
elm_widget_type_set(obj, "progressbar");
elm_widget_sub_object_add(parent, obj);
eina_stringshare_replace(&wd->label, label);
if (label)
{
- edje_object_signal_emit(wd->progressbar, "elm,state,text,visible", "elm");
- edje_object_message_signal_process(wd->progressbar);
+ edje_object_signal_emit(wd->progressbar, "elm,state,text,visible", "elm");
+ edje_object_message_signal_process(wd->progressbar);
}
else
{
- edje_object_signal_emit(wd->progressbar, "elm,state,text,hidden", "elm");
- edje_object_message_signal_process(wd->progressbar);
+ edje_object_signal_emit(wd->progressbar, "elm,state,text,hidden", "elm");
+ edje_object_message_signal_process(wd->progressbar);
}
edje_object_part_text_set(wd->progressbar, "elm.text", label);
_sizing_eval(obj);
wd->icon = icon;
if (icon)
{
- elm_widget_sub_object_add(obj, icon);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- edje_object_part_swallow(wd->progressbar, "elm.swallow.content", icon);
- edje_object_signal_emit(wd->progressbar, "elm,state,icon,visible", "elm");
- edje_object_message_signal_process(wd->progressbar);
+ elm_widget_sub_object_add(obj, icon);
+ evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ edje_object_part_swallow(wd->progressbar, "elm.swallow.content", icon);
+ edje_object_signal_emit(wd->progressbar, "elm,state,icon,visible", "elm");
+ edje_object_message_signal_process(wd->progressbar);
}
_sizing_eval(obj);
}
eina_stringshare_replace(&wd->units, units);
if (units)
{
- edje_object_signal_emit(wd->progressbar, "elm,state,units,visible", "elm");
- edje_object_message_signal_process(wd->progressbar);
+ edje_object_signal_emit(wd->progressbar, "elm,state,units,visible", "elm");
+ edje_object_message_signal_process(wd->progressbar);
}
else
{
- edje_object_signal_emit(wd->progressbar, "elm,state,units,hidden", "elm");
- edje_object_message_signal_process(wd->progressbar);
+ edje_object_signal_emit(wd->progressbar, "elm,state,units,hidden", "elm");
+ edje_object_message_signal_process(wd->progressbar);
}
_units_set(obj);
_sizing_eval(obj);
if (!wd) return;
if (elm_widget_focus_get(obj))
{
- edje_object_signal_emit(wd->radio, "elm,action,focus", "elm");
- evas_object_focus_set(wd->radio, EINA_TRUE);
+ edje_object_signal_emit(wd->radio, "elm,action,focus", "elm");
+ evas_object_focus_set(wd->radio, EINA_TRUE);
}
else
{
- edje_object_signal_emit(wd->radio, "elm,action,unfocus", "elm");
- evas_object_focus_set(wd->radio, EINA_FALSE);
+ edje_object_signal_emit(wd->radio, "elm,action,unfocus", "elm");
+ evas_object_focus_set(wd->radio, EINA_FALSE);
}
}
if (!wd) return;
if (sub == wd->icon)
{
- edje_object_signal_emit(wd->radio, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del_full
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
- wd->icon = NULL;
- _sizing_eval(obj);
+ edje_object_signal_emit(wd->radio, "elm,state,icon,hidden", "elm");
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
+ wd->icon = NULL;
+ _sizing_eval(obj);
}
}
if (!wd) return;
if ((state != wd->state) && (!elm_widget_disabled_get(obj)))
{
- wd->state = state;
- if (wd->state)
- edje_object_signal_emit(wd->radio, "elm,state,radio,on", "elm");
- else
- edje_object_signal_emit(wd->radio, "elm,state,radio,off", "elm");
+ wd->state = state;
+ if (wd->state)
+ edje_object_signal_emit(wd->radio, "elm,state,radio,on", "elm");
+ else
+ edje_object_signal_emit(wd->radio, "elm,state,radio,off", "elm");
}
}
Eina_Bool disabled = EINA_FALSE;
EINA_LIST_FOREACH(wd->group->radios, l, child)
{
- Widget_Data *wd2 = elm_widget_data_get(child);
+ Widget_Data *wd2 = elm_widget_data_get(child);
if (wd2->state) selected = child;
- if (wd2->value == wd->group->value)
+ if (wd2->value == wd->group->value)
{
_state_set(child, 1);
if (!wd2->state) disabled = EINA_TRUE;
}
- else _state_set(child, 0);
+ else _state_set(child, 0);
}
if ((disabled) && (selected)) _state_set(selected, 1);
}
}
/**
- * Add a new radio to the parent
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Radio
- */
+ * Add a new radio to the parent
+ *
+ * @param parent The parent object
+ * @return The new object or NULL if it cannot be created
+ *
+ * @ingroup Radio
+ */
EAPI Evas_Object *
elm_radio_add(Evas_Object *parent)
{
Widget_Data *wd;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "radio");
elm_widget_type_set(obj, "radio");
elm_widget_sub_object_add(parent, obj);
eina_stringshare_replace(&wd->label, label);
if (label)
{
- edje_object_signal_emit(wd->radio, "elm,state,text,visible", "elm");
- edje_object_message_signal_process(wd->radio);
+ edje_object_signal_emit(wd->radio, "elm,state,text,visible", "elm");
+ edje_object_message_signal_process(wd->radio);
}
else
{
- edje_object_signal_emit(wd->radio, "elm,state,text,hidden", "elm");
- edje_object_message_signal_process(wd->radio);
+ edje_object_signal_emit(wd->radio, "elm,state,text,hidden", "elm");
+ edje_object_message_signal_process(wd->radio);
}
edje_object_part_text_set(wd->radio, "elm.text", label);
_sizing_eval(obj);
wd->icon = icon;
if (icon)
{
- elm_widget_sub_object_add(obj, icon);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- edje_object_part_swallow(wd->radio, "elm.swallow.content", icon);
- edje_object_signal_emit(wd->radio, "elm,state,icon,visible", "elm");
- edje_object_message_signal_process(wd->radio);
+ elm_widget_sub_object_add(obj, icon);
+ evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ edje_object_part_swallow(wd->radio, "elm.swallow.content", icon);
+ edje_object_signal_emit(wd->radio, "elm,state,icon,visible", "elm");
+ edje_object_message_signal_process(wd->radio);
}
_sizing_eval(obj);
}
if (!wd) return;
if (!wd2)
{
- if (eina_list_count(wd->group->radios) == 1)
- return;
- wd->group->radios = eina_list_remove(wd->group->radios, obj);
- wd->group = calloc(1, sizeof(Group));
- wd->group->radios = eina_list_append(wd->group->radios, obj);
+ if (eina_list_count(wd->group->radios) == 1)
+ return;
+ wd->group->radios = eina_list_remove(wd->group->radios, obj);
+ wd->group = calloc(1, sizeof(Group));
+ wd->group->radios = eina_list_append(wd->group->radios, obj);
}
else if (wd->group == wd2->group) return;
else
{
- wd->group->radios = eina_list_remove(wd->group->radios, obj);
- if (!wd->group->radios) free(wd->group);
- wd->group = wd2->group;
- wd->group->radios = eina_list_append(wd->group->radios, obj);
+ wd->group->radios = eina_list_remove(wd->group->radios, obj);
+ if (!wd->group->radios) free(wd->group);
+ wd->group = wd2->group;
+ wd->group->radios = eina_list_append(wd->group->radios, obj);
}
if (wd->value == wd->group->value) _state_set(obj, 1);
else _state_set(obj, 0);
if (!wd) return;
if (valuep)
{
- wd->group->valuep = valuep;
- if (*(wd->group->valuep) != wd->group->value)
- {
- wd->group->value = *(wd->group->valuep);
- _state_set_all(wd);
- }
+ wd->group->valuep = valuep;
+ if (*(wd->group->valuep) != wd->group->value)
+ {
+ wd->group->value = *(wd->group->valuep);
+ _state_set_all(wd);
+ }
}
else
{
- wd->group->valuep = NULL;
+ wd->group->valuep = NULL;
}
}
}
else if ((!strcmp(ev->keyname, "Prior")) || (!strcmp(ev->keyname, "KP_Prior")))
{
- if (page_y < 0)
- y -= -(page_y * v_h) / 100;
- else
- y -= page_y;
+ if (page_y < 0)
+ y -= -(page_y * v_h) / 100;
+ else
+ y -= page_y;
}
else if ((!strcmp(ev->keyname, "Next")) || (!strcmp(ev->keyname, "KP_Next")))
{
- if (page_y < 0)
- y += -(page_y * v_h) / 100;
- else
- y += page_y;
+ if (page_y < 0)
+ y += -(page_y * v_h) / 100;
+ else
+ y += page_y;
}
else return EINA_FALSE;
const char *str;
_mirrored_set(obj, elm_widget_mirrored_get(obj));
- elm_smart_scroller_object_theme_set(obj, wd->scr,
+ elm_smart_scroller_object_theme_set(obj, wd->scr,
wd->widget_name, wd->widget_base,
elm_widget_style_get(obj));
-// edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
+ // edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale);
edj = elm_smart_scroller_edje_object_get(wd->scr);
str = edje_object_data_get(edj, "focus_highlight");
if ((str) && (!strcmp(str, "on")))
/* Try Focus cycle in subitem */
if ((elm_widget_can_focus_get(cur)) || (elm_widget_child_can_focus_get(cur)))
- return elm_widget_focus_next_get(cur, dir, next);
+ return elm_widget_focus_next_get(cur, dir, next);
/* Return */
*next = (Evas_Object *)obj;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
edje_object_signal_emit(elm_smart_scroller_edje_object_get(wd->scr),
- emission, source);
+ emission, source);
}
static void
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
edje_object_signal_callback_add(elm_smart_scroller_edje_object_get(wd->scr),
- emission, source, func_cb, data);
+ emission, source, func_cb, data);
}
static void
{
Widget_Data *wd = elm_widget_data_get(obj);
edje_object_signal_callback_del_full(
- elm_smart_scroller_edje_object_get(wd->scr), emission, source,
- func_cb, data);
+ elm_smart_scroller_edje_object_get(wd->scr), emission, source,
+ func_cb, data);
}
static void
if (!wd) return;
if (sub == wd->content)
{
- elm_widget_on_show_region_hook_set(wd->content, NULL, NULL);
- evas_object_event_callback_del_full (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- wd->content = NULL;
- _sizing_eval(obj);
+ elm_widget_on_show_region_hook_set(wd->content, NULL, NULL);
+ evas_object_event_callback_del_full (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ wd->content = NULL;
+ _sizing_eval(obj);
}
else if (sub == wd->scr)
wd->scr = NULL;
Evas_Coord minw, minh;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "scroller");
elm_widget_type_set(obj, "scroller");
elm_widget_sub_object_add(parent, obj);
wd->widget_name = eina_stringshare_add("scroller");
wd->widget_base = eina_stringshare_add("base");
-
+
wd->scr = elm_smart_scroller_add(e);
elm_smart_scroller_widget_set(wd->scr, obj);
_theme_hook(obj);
elm_widget_resize_object_set(obj, wd->scr);
evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
+ _changed_size_hints, obj);
edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh);
evas_object_size_hint_min_set(obj, minw, minh);
wd->content = content;
if (content)
{
- elm_widget_on_show_region_hook_set(content, _show_region_hook, obj);
- elm_widget_sub_object_add(obj, content);
+ elm_widget_on_show_region_hook_set(content, _show_region_hook, obj);
+ elm_widget_sub_object_add(obj, content);
if (wd->scr)
elm_smart_scroller_child_set(wd->scr, content);
- evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
+ evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
}
_sizing_eval(obj);
}
/**
* Set custom theme elements for the scroller
- *
+ *
* @param obj The scroller object
* @param widget The widget name to use (default is "scroller")
* @param base The base name to use (default is "base")
Widget_Data *wd = elm_widget_data_get(obj);
const Elm_Scroller_Policy map[3] =
{
- ELM_SMART_SCROLLER_POLICY_AUTO,
- ELM_SMART_SCROLLER_POLICY_ON,
- ELM_SMART_SCROLLER_POLICY_OFF
+ ELM_SMART_SCROLLER_POLICY_AUTO,
+ ELM_SMART_SCROLLER_POLICY_ON,
+ ELM_SMART_SCROLLER_POLICY_OFF
};
if ((!wd) || (!wd->scr)) return;
if ((policy_h >= 3) || (policy_v >= 3)) return;
*
* This enables or disabled event propagation from the scroller content to
* the scroller and its parent. By default event propagation is disabled.
- *
+ *
* @param obj The scroller object
* @param propagation If propagation is enabled or not
*
/**
* Get event propagation for a scroller
*
- * This gets the event propagation for a scroller. See
+ * This gets the event propagation for a scroller. See
* elm_scroller_propagate_events_set() for more information
- *
+ *
* @param obj The scroller object
* @return The propagation state
*
Widget_Data *wd;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "separator");
wd->horizontal = EINA_FALSE;
elm_widget_type_set(obj, "separator");
if (!wd) return;
if (elm_widget_focus_get(obj))
{
- edje_object_signal_emit(wd->slider, "elm,action,focus", "elm");
- evas_object_focus_set(wd->slider, EINA_TRUE);
+ edje_object_signal_emit(wd->slider, "elm,action,focus", "elm");
+ evas_object_focus_set(wd->slider, EINA_TRUE);
}
else
{
- edje_object_signal_emit(wd->slider, "elm,action,unfocus", "elm");
- evas_object_focus_set(wd->slider, EINA_FALSE);
+ edje_object_signal_emit(wd->slider, "elm,action,unfocus", "elm");
+ evas_object_focus_set(wd->slider, EINA_FALSE);
}
}
edje_object_part_text_set(wd->slider, "elm.text", wd->label);
edje_object_signal_emit(wd->slider, "elm,state,text,visible", "elm");
}
-
+
if (wd->units)
edje_object_signal_emit(wd->slider, "elm,state,units,visible", "elm");
-
+
if (wd->horizontal)
evas_object_size_hint_min_set(wd->spacer, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale, 1);
else
evas_object_size_hint_min_set(wd->spacer, 1, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale);
-
+
if (wd->inverted)
- edje_object_signal_emit(wd->slider, "elm,state,inverted,on", "elm");
-
+ edje_object_signal_emit(wd->slider, "elm,state,inverted,on", "elm");
+
edje_object_part_swallow(wd->slider, "elm.swallow.bar", wd->spacer);
_units_set(obj);
_indicator_set(obj);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (elm_widget_disabled_get(obj))
- edje_object_signal_emit(wd->slider, "elm,state,disabled", "elm");
+ edje_object_signal_emit(wd->slider, "elm,state,disabled", "elm");
else
- edje_object_signal_emit(wd->slider, "elm,state,enabled", "elm");
+ edje_object_signal_emit(wd->slider, "elm,state,enabled", "elm");
}
static void
_sizing_eval(Evas_Object *obj)
-{
+{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
if (!wd) return;
if (!wd) return;
if (sub == wd->icon)
{
- edje_object_signal_emit(wd->slider, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del_full
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
- wd->icon = NULL;
- edje_object_message_signal_process(wd->slider);
- _sizing_eval(obj);
+ edje_object_signal_emit(wd->slider, "elm,state,icon,hidden", "elm");
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
+ wd->icon = NULL;
+ edje_object_message_signal_process(wd->slider);
+ _sizing_eval(obj);
}
if (sub == wd->end)
{
double posx = 0.0, posy = 0.0, pos = 0.0, val;
if (!wd) return;
edje_object_part_drag_value_get(wd->slider, "elm.dragable.slider",
- &posx, &posy);
+ &posx, &posy);
if (wd->horizontal) pos = posx;
else pos = posy;
rtl = elm_widget_mirrored_get(obj);
if ((!rtl && wd->inverted) || (rtl &&
- ((!wd->horizontal && wd->inverted) ||
- (wd->horizontal && !wd->inverted)))) pos = 1.0 - pos;
+ ((!wd->horizontal && wd->inverted) ||
+ (wd->horizontal && !wd->inverted)))) pos = 1.0 - pos;
val = (pos * (wd->val_max - wd->val_min)) + wd->val_min;
if (val != wd->val)
{
- wd->val = val;
- evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
- if (wd->delay) ecore_timer_del(wd->delay);
- wd->delay = ecore_timer_add(0.2, _delay_change, obj);
+ wd->val = val;
+ evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
+ if (wd->delay) ecore_timer_del(wd->delay);
+ wd->delay = ecore_timer_add(0.2, _delay_change, obj);
}
}
rtl = elm_widget_mirrored_get(obj);
if ((!rtl && wd->inverted) || (rtl &&
- ((!wd->horizontal && wd->inverted) ||
- (wd->horizontal && !wd->inverted)))) pos = 1.0 - pos;
+ ((!wd->horizontal && wd->inverted) ||
+ (wd->horizontal && !wd->inverted)))) pos = 1.0 - pos;
edje_object_part_drag_value_set(wd->slider, "elm.dragable.slider", pos, pos);
}
if (!wd) return;
if (wd->units)
{
- char buf[1024];
+ char buf[1024];
- snprintf(buf, sizeof(buf), wd->units, wd->val);
- edje_object_part_text_set(wd->slider, "elm.units", buf);
+ snprintf(buf, sizeof(buf), wd->units, wd->val);
+ edje_object_part_text_set(wd->slider, "elm.units", buf);
}
else
edje_object_part_text_set(wd->slider, "elm.units", NULL);
if (!wd) return;
if (wd->indicator_format_func)
{
- const char *buf;
- buf = wd->indicator_format_func(wd->val);
- edje_object_part_text_set(wd->slider, "elm.dragable.slider:elm.indicator", buf);
+ const char *buf;
+ buf = wd->indicator_format_func(wd->val);
+ edje_object_part_text_set(wd->slider, "elm.dragable.slider:elm.indicator", buf);
}
else if (wd->indicator)
{
- char buf[1024];
- snprintf(buf, sizeof(buf), wd->indicator, wd->val);
- edje_object_part_text_set(wd->slider, "elm.dragable.slider:elm.indicator", buf);
+ char buf[1024];
+ snprintf(buf, sizeof(buf), wd->indicator, wd->val);
+ edje_object_part_text_set(wd->slider, "elm.dragable.slider:elm.indicator", buf);
}
else
edje_object_part_text_set(wd->slider, "elm.dragable.slider:elm.indicator", NULL);
Evas_Event_Mouse_Down *ev = event_info;
Evas_Coord x, y, w, h;
double button_x, button_y;
-
+
evas_object_geometry_get(wd->spacer, &x, &y, &w, &h);
edje_object_part_drag_value_get(wd->slider, "elm.dragable.slider", &button_x, &button_y);
if (wd->horizontal)
if (button_x > 1) button_x = 1;
if (button_x < 0) button_x = 0;
}
- else
+ else
{
button_y = ((double)ev->output.y - (double)y) / (double)h;
if (button_y > 1) button_y = 1;
}
edje_object_part_drag_value_set(wd->slider, "elm.dragable.slider", button_x, button_y);
evas_event_feed_mouse_cancel(e, 0, NULL);
- evas_event_feed_mouse_down(e, 1, EVAS_BUTTON_NONE, 0, NULL);
+ evas_event_feed_mouse_down(e, 1, EVAS_BUTTON_NONE, 0, NULL);
}
/**
Widget_Data *wd;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "slider");
elm_widget_type_set(obj, "slider");
elm_widget_sub_object_add(parent, obj);
edje_object_signal_callback_add(wd->slider, "drag,stop", "*", _drag_stop, obj);
edje_object_signal_callback_add(wd->slider, "drag,step", "*", _drag_step, obj);
edje_object_signal_callback_add(wd->slider, "drag,page", "*", _drag_stop, obj);
-// edje_object_signal_callback_add(wd->slider, "drag,set", "*", _drag_stop, obj);
+ // edje_object_signal_callback_add(wd->slider, "drag,set", "*", _drag_stop, obj);
edje_object_part_drag_value_set(wd->slider, "elm.dragable.slider", 0.0, 0.0);
wd->spacer = evas_object_rectangle_add(e);
eina_stringshare_replace(&wd->label, label);
if (label)
{
- edje_object_signal_emit(wd->slider, "elm,state,text,visible", "elm");
- edje_object_message_signal_process(wd->slider);
+ edje_object_signal_emit(wd->slider, "elm,state,text,visible", "elm");
+ edje_object_message_signal_process(wd->slider);
}
else
{
- edje_object_signal_emit(wd->slider, "elm,state,text,hidden", "elm");
- edje_object_message_signal_process(wd->slider);
+ edje_object_signal_emit(wd->slider, "elm,state,text,hidden", "elm");
+ edje_object_message_signal_process(wd->slider);
}
edje_object_part_text_set(wd->slider, "elm.text", label);
_sizing_eval(obj);
wd->icon = icon;
if (icon)
{
- elm_widget_sub_object_add(obj, icon);
- evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- edje_object_part_swallow(wd->slider, "elm.swallow.icon", icon);
- edje_object_signal_emit(wd->slider, "elm,state,icon,visible", "elm");
- edje_object_message_signal_process(wd->slider);
+ elm_widget_sub_object_add(obj, icon);
+ evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ edje_object_part_swallow(wd->slider, "elm.swallow.icon", icon);
+ edje_object_signal_emit(wd->slider, "elm,state,icon,visible", "elm");
+ edje_object_message_signal_process(wd->slider);
}
_sizing_eval(obj);
}
if (!wd) return NULL;
if (wd->icon)
{
- elm_widget_sub_object_del(obj, wd->icon);
- ret = wd->icon;
- edje_object_part_unswallow(wd->slider, wd->icon);
- edje_object_signal_emit(wd->slider, "elm,state,icon,hidden", "elm");
- wd->icon = NULL;
- _sizing_eval(obj);
+ elm_widget_sub_object_del(obj, wd->icon);
+ ret = wd->icon;
+ edje_object_part_unswallow(wd->slider, wd->icon);
+ edje_object_signal_emit(wd->slider, "elm,state,icon,hidden", "elm");
+ wd->icon = NULL;
+ _sizing_eval(obj);
}
return ret;
}
else
evas_object_size_hint_min_set(wd->spacer, 1, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale);
if (wd->indicator_show)
- edje_object_signal_emit(wd->slider, "elm,state,val,show", "elm");
+ edje_object_signal_emit(wd->slider, "elm,state,val,show", "elm");
else
- edje_object_signal_emit(wd->slider, "elm,state,val,hide", "elm");
+ edje_object_signal_emit(wd->slider, "elm,state,val,hide", "elm");
edje_object_part_swallow(wd->slider, "elm.swallow.bar", wd->spacer);
_sizing_eval(obj);
}
eina_stringshare_replace(&wd->units, units);
if (units)
{
- edje_object_signal_emit(wd->slider, "elm,state,units,visible", "elm");
- edje_object_message_signal_process(wd->slider);
+ edje_object_signal_emit(wd->slider, "elm,state,units,visible", "elm");
+ edje_object_message_signal_process(wd->slider);
}
else
{
- edje_object_signal_emit(wd->slider, "elm,state,units,hidden", "elm");
- edje_object_message_signal_process(wd->slider);
+ edje_object_signal_emit(wd->slider, "elm,state,units,hidden", "elm");
+ edje_object_message_signal_process(wd->slider);
}
_units_set(obj);
_sizing_eval(obj);
wd->end = end;
if (end)
{
- elm_widget_sub_object_add(obj, end);
- evas_object_event_callback_add(end, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, obj);
- edje_object_part_swallow(wd->slider, "elm.swallow.end", end);
- edje_object_signal_emit(wd->slider, "elm,state,end,visible", "elm");
- edje_object_message_signal_process(wd->slider);
+ elm_widget_sub_object_add(obj, end);
+ evas_object_event_callback_add(end, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ edje_object_part_swallow(wd->slider, "elm.swallow.end", end);
+ edje_object_signal_emit(wd->slider, "elm,state,end,visible", "elm");
+ edje_object_message_signal_process(wd->slider);
}
_sizing_eval(obj);
}
if (!wd) return NULL;
if (wd->end)
{
- elm_widget_sub_object_del(obj, wd->end);
- ret = wd->end;
- edje_object_part_unswallow(wd->slider, wd->end);
- edje_object_signal_emit(wd->slider, "elm,state,end,hidden", "elm");
- wd->end = NULL;
- _sizing_eval(obj);
+ elm_widget_sub_object_del(obj, wd->end);
+ ret = wd->end;
+ edje_object_part_unswallow(wd->slider, wd->end);
+ edje_object_signal_emit(wd->slider, "elm,state,end,hidden", "elm");
+ wd->end = NULL;
+ _sizing_eval(obj);
}
return ret;
}
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (show) {
- wd->indicator_show = EINA_TRUE;
- edje_object_signal_emit(wd->slider, "elm,state,val,show", "elm");
+ wd->indicator_show = EINA_TRUE;
+ edje_object_signal_emit(wd->slider, "elm,state,val,show", "elm");
}
else {
- wd->indicator_show = EINA_FALSE;
- edje_object_signal_emit(wd->slider, "elm,state,val,hide", "elm");
+ wd->indicator_show = EINA_FALSE;
+ edje_object_signal_emit(wd->slider, "elm,state,val,hide", "elm");
}
}
Eina_Bool loop:1;
struct {
- const char *current;
- Eina_List *list; //list of const char *
+ const char *current;
+ Eina_List *list; //list of const char *
} layout;
};
elm_widget_stringlist_free(wd->transitions);
if (wd->timer) ecore_timer_del(wd->timer);
EINA_LIST_FREE(wd->layout.list, layout)
- eina_stringshare_del(layout);
+ eina_stringshare_del(layout);
free(wd);
}
if (!wd) return;
if (elm_widget_focus_get(obj))
{
- edje_object_signal_emit(wd->slideshow, "elm,action,focus", "elm");
- evas_object_focus_set(wd->slideshow, EINA_TRUE);
+ edje_object_signal_emit(wd->slideshow, "elm,action,focus", "elm");
+ evas_object_focus_set(wd->slideshow, EINA_TRUE);
}
else
{
- edje_object_signal_emit(wd->slideshow, "elm,action,unfocus", "elm");
- evas_object_focus_set(wd->slideshow, EINA_FALSE);
+ edje_object_signal_emit(wd->slideshow, "elm,action,unfocus", "elm");
+ evas_object_focus_set(wd->slideshow, EINA_FALSE);
}
}
static Elm_Slideshow_Item* _item_prev_get(Elm_Slideshow_Item* item)
{
- Widget_Data *wd = elm_widget_data_get(item->base.widget);
- Elm_Slideshow_Item* prev = eina_list_data_get(eina_list_prev(item->l));
- if((!prev) && (wd->loop))
- prev = eina_list_data_get(eina_list_last(item->l));
- return prev;
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
+ Elm_Slideshow_Item* prev = eina_list_data_get(eina_list_prev(item->l));
+ if((!prev) && (wd->loop))
+ prev = eina_list_data_get(eina_list_last(item->l));
+ return prev;
}
static Elm_Slideshow_Item* _item_next_get(Elm_Slideshow_Item* item)
{
- Widget_Data *wd = elm_widget_data_get(item->base.widget);
- Elm_Slideshow_Item* next = eina_list_data_get(eina_list_next(item->l));
- if((!next) && (wd->loop))
- next = eina_list_data_get(wd->items);
- return next;
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
+ Elm_Slideshow_Item* next = eina_list_data_get(eina_list_next(item->l));
+ if((!next) && (wd->loop))
+ next = eina_list_data_get(wd->items);
+ return next;
}
static void
_end(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
{
- Elm_Slideshow_Item *item;
- Widget_Data *wd = elm_widget_data_get(data);
- if (!wd) return;
+ Elm_Slideshow_Item *item;
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
- item = wd->previous;
- if(item)
- {
- edje_object_part_unswallow(NULL, item->base.view);
- evas_object_hide(item->base.view);
- wd->previous = NULL;
- }
+ item = wd->previous;
+ if(item)
+ {
+ edje_object_part_unswallow(NULL, item->base.view);
+ evas_object_hide(item->base.view);
+ wd->previous = NULL;
+ }
- item = wd->current;
- if ((!item) || (!item->base.view)) return;
+ item = wd->current;
+ if ((!item) || (!item->base.view)) return;
- _item_realize(item);
- edje_object_part_unswallow(NULL, item->base.view);
- evas_object_show(item->base.view);
+ _item_realize(item);
+ edje_object_part_unswallow(NULL, item->base.view);
+ evas_object_show(item->base.view);
- edje_object_signal_emit(wd->slideshow, "anim,end", "slideshow");
- edje_object_part_swallow(wd->slideshow, "elm.swallow.1", item->base.view);
+ edje_object_signal_emit(wd->slideshow, "anim,end", "slideshow");
+ edje_object_part_swallow(wd->slideshow, "elm.swallow.1", item->base.view);
}
Widget_Data *wd;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "slideshow");
elm_widget_type_set(obj, "slideshow");
elm_widget_sub_object_add(parent, obj);
wd->layout.list = elm_widget_stringlist_get(edje_object_data_get(wd->slideshow, "layouts"));
if (eina_list_count(wd->layout.list) > 0)
- wd->layout.current = eina_list_data_get(wd->layout.list);
+ wd->layout.current = eina_list_data_get(wd->layout.list);
edje_object_signal_callback_add(wd->slideshow, "end", "slideshow", _end, obj);
if (wd->timer) ecore_timer_del(wd->timer);
if (wd->timeout > 0.0)
- wd->timer = ecore_timer_add(wd->timeout, _timer_cb, item->base.widget);
+ wd->timer = ecore_timer_add(wd->timeout, _timer_cb, item->base.widget);
_item_realize(next);
edje_object_part_swallow(wd->slideshow, "elm.swallow.2", next->base.view);
evas_object_show(next->base.view);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
-
+
if (wd->current)
- next = _item_next_get(wd->current);
+ next = _item_next_get(wd->current);
if ((!next) || (next == wd->current)) return;
if (wd->timer) ecore_timer_del(wd->timer);
if (wd->timeout > 0.0)
- wd->timer = ecore_timer_add(wd->timeout, _timer_cb, obj);
+ wd->timer = ecore_timer_add(wd->timeout, _timer_cb, obj);
_item_realize(next);
if (wd->timer) ecore_timer_del(wd->timer);
if (wd->timeout > 0.0)
- wd->timer = ecore_timer_add(wd->timeout, _timer_cb, obj);
+ wd->timer = ecore_timer_add(wd->timeout, _timer_cb, obj);
_item_realize(prev);
EAPI void
elm_slideshow_clear(Evas_Object *obj)
{
- Elm_Slideshow_Item *item;
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- wd->previous = NULL;
- wd->current = NULL;
- EINA_LIST_FREE(wd->items_built, item)
- {
- if (item->itc->func.del)
- item->itc->func.del((void*)item->base.data, item->base.view);
- evas_object_del(item->base.view);
- item->base.view = NULL;
- }
-
- EINA_LIST_FREE(wd->items, item)
- {
- elm_widget_item_del(item);
- }
+ Elm_Slideshow_Item *item;
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ wd->previous = NULL;
+ wd->current = NULL;
+ EINA_LIST_FREE(wd->items_built, item)
+ {
+ if (item->itc->func.del)
+ item->itc->func.del((void*)item->base.data, item->base.view);
+ evas_object_del(item->base.view);
+ item->base.view = NULL;
+ }
+
+ EINA_LIST_FREE(wd->items, item)
+ {
+ elm_widget_item_del(item);
+ }
}
elm_slideshow_item_del(Elm_Slideshow_Item *item)
{
ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(item);
- Widget_Data *wd = elm_widget_data_get(item->base.widget);
- if (!wd) return;
- if (wd->previous == item) wd->previous = NULL;
- if (wd->current == item)
- {
- Eina_List *l = eina_list_data_find_list(wd->items, item);
- Eina_List *l2 = eina_list_next(l);
- wd->current = NULL;
- if (!l2)
- l2 = eina_list_nth_list(wd->items, eina_list_count(wd->items) - 1);
- if (l2)
- elm_slideshow_show(eina_list_data_get(l2));
- }
-
- wd->items = eina_list_remove_list(wd->items, item->l);
- wd->items_built = eina_list_remove_list(wd->items_built, item->l_built);
-
- if ((item->base.view) && (item->itc->func.del))
- item->itc->func.del((void*)item->base.data, item->base.view);
- if (item->base.view)
- evas_object_del(item->base.view);
- free(item);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
+ if (!wd) return;
+ if (wd->previous == item) wd->previous = NULL;
+ if (wd->current == item)
+ {
+ Eina_List *l = eina_list_data_find_list(wd->items, item);
+ Eina_List *l2 = eina_list_next(l);
+ wd->current = NULL;
+ if (!l2)
+ l2 = eina_list_nth_list(wd->items, eina_list_count(wd->items) - 1);
+ if (l2)
+ elm_slideshow_show(eina_list_data_get(l2));
+ }
+
+ wd->items = eina_list_remove_list(wd->items, item->l);
+ wd->items_built = eina_list_remove_list(wd->items_built, item->l_built);
+
+ if ((item->base.view) && (item->itc->func.del))
+ item->itc->func.del((void*)item->base.data, item->base.view);
+ if (item->base.view)
+ evas_object_del(item->base.view);
+ free(item);
}
/**
if (!wd) return;
if (elm_widget_focus_get(obj))
{
- edje_object_signal_emit(wd->spinner, "elm,action,focus", "elm");
- evas_object_focus_set(wd->spinner, EINA_TRUE);
+ edje_object_signal_emit(wd->spinner, "elm,action,focus", "elm");
+ evas_object_focus_set(wd->spinner, EINA_TRUE);
}
else
{
- edje_object_signal_emit(wd->spinner, "elm,action,unfocus", "elm");
- evas_object_focus_set(wd->spinner, EINA_FALSE);
+ edje_object_signal_emit(wd->spinner, "elm,action,unfocus", "elm");
+ evas_object_focus_set(wd->spinner, EINA_FALSE);
}
}
const char *start = strchr(wd->label, '%');
while (start)
{
- /* handle %% */
- if (start[1] != '%')
- break;
- else
- start = strchr(start + 2, '%');
+ /* handle %% */
+ if (start[1] != '%')
+ break;
+ else
+ start = strchr(start + 2, '%');
}
if (start)
{
- const char *itr, *end = NULL;
- for (itr = start + 1; *itr != '\0'; itr++)
- {
- /* allowing '%d' is quite dangerous, remove it? */
- if ((*itr == 'd') || (*itr == 'f'))
- {
- end = itr + 1;
- break;
- }
- }
-
- if ((end) && ((size_t)(end - start + 1) < sizeof(fmt)))
- {
- memcpy(fmt, start, end - start);
- fmt[end - start] = '\0';
- }
+ const char *itr, *end = NULL;
+ for (itr = start + 1; *itr != '\0'; itr++)
+ {
+ /* allowing '%d' is quite dangerous, remove it? */
+ if ((*itr == 'd') || (*itr == 'f'))
+ {
+ end = itr + 1;
+ break;
+ }
+ }
+
+ if ((end) && ((size_t)(end - start + 1) < sizeof(fmt)))
+ {
+ memcpy(fmt, start, end - start);
+ fmt[end - start] = '\0';
+ }
}
}
snprintf(buf, sizeof(buf), fmt, wd->val);
if (wd->entry_visible) _entry_show(wd);
}
-static Eina_Bool
+static Eina_Bool
_value_set(Evas_Object *obj, double delta)
{
Widget_Data *wd = elm_widget_data_get(obj);
}
/*
-static void
-_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
+ static void
+ _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info)
+ {
_sizing_eval(data);
-}
-*/
+ }
+ */
static void
_val_set(Evas_Object *obj)
pos = ((wd->val - wd->val_min) / (wd->val_max - wd->val_min));
if (pos < 0.0) pos = 0.0;
else if (pos > 1.0) pos = 1.0;
- edje_object_part_drag_value_set(wd->spinner, "elm.dragable.slider",
+ edje_object_part_drag_value_set(wd->spinner, "elm.dragable.slider",
pos, pos);
}
if (!wd) return;
if (wd->entry_visible) return;
edje_object_part_drag_value_get(wd->spinner, "elm.dragable.slider",
- &pos, NULL);
+ &pos, NULL);
offset = wd->step;
delta = (pos - wd->drag_start_pos) * offset;
/* If we are on rtl mode, change the delta to be negative on such changes */
double pos;
if (!wd) return;
edje_object_part_drag_value_get(wd->spinner, "elm.dragable.slider",
- &pos, NULL);
+ &pos, NULL);
wd->drag_start_pos = pos;
}
const char *str;
char *end;
double val;
-
+
if (!wd) return;
_hide_entry(obj);
str = elm_entry_entry_get(wd->ent);
else
{
wd->orig_val = wd->val;
- edje_object_signal_emit(wd->spinner, "elm,state,active", "elm");
+ edje_object_signal_emit(wd->spinner, "elm,state,active", "elm");
_entry_show(wd);
elm_entry_select_all(wd->ent);
- elm_widget_focus_set(wd->ent, 1);
+ elm_widget_focus_set(wd->ent, 1);
wd->entry_visible = 1;
}
}
|| !strcmp(ev->keyname, "Up") || !strcmp(ev->keyname, "KP_Up"))
_val_inc_stop(obj);
else if (!strcmp(ev->keyname, "Left") || !strcmp(ev->keyname, "KP_Left")
- || !strcmp(ev->keyname, "Down") || !strcmp(ev->keyname, "KP_Down"))
+ || !strcmp(ev->keyname, "Down") || !strcmp(ev->keyname, "KP_Down"))
_val_dec_stop(obj);
else return EINA_FALSE;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
- return EINA_FALSE;
+ return EINA_FALSE;
}
/**
Widget_Data *wd;
ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
-
+
ELM_SET_WIDTYPE(widtype, "spinner");
elm_widget_type_set(obj, "spinner");
elm_widget_sub_object_add(parent, obj);
_elm_theme_object_set(obj, wd->spinner, "spinner", "base", "default");
elm_widget_resize_object_set(obj, wd->spinner);
edje_object_signal_callback_add(wd->spinner, "drag", "*", _drag, obj);
- edje_object_signal_callback_add(wd->spinner, "drag,start", "*",
+ edje_object_signal_callback_add(wd->spinner, "drag,start", "*",
_drag_start, obj);
- edje_object_signal_callback_add(wd->spinner, "drag,stop", "*",
+ edje_object_signal_callback_add(wd->spinner, "drag,stop", "*",
_drag_stop, obj);
- edje_object_signal_callback_add(wd->spinner, "drag,step", "*",
+ edje_object_signal_callback_add(wd->spinner, "drag,step", "*",
_drag_stop, obj);
- edje_object_signal_callback_add(wd->spinner, "drag,page", "*",
+ edje_object_signal_callback_add(wd->spinner, "drag,page", "*",
_drag_stop, obj);
- edje_object_signal_callback_add(wd->spinner, "elm,action,increment,start",
+ edje_object_signal_callback_add(wd->spinner, "elm,action,increment,start",
"*", _button_inc_start, obj);
- edje_object_signal_callback_add(wd->spinner, "elm,action,increment,stop",
+ edje_object_signal_callback_add(wd->spinner, "elm,action,increment,stop",
"*", _button_inc_stop, obj);
- edje_object_signal_callback_add(wd->spinner, "elm,action,decrement,start",
+ edje_object_signal_callback_add(wd->spinner, "elm,action,decrement,start",
"*", _button_dec_start, obj);
- edje_object_signal_callback_add(wd->spinner, "elm,action,decrement,stop",
+ edje_object_signal_callback_add(wd->spinner, "elm,action,decrement,stop",
"*", _button_dec_stop, obj);
- edje_object_part_drag_value_set(wd->spinner, "elm.dragable.slider",
+ edje_object_part_drag_value_set(wd->spinner, "elm.dragable.slider",
0.0, 0.0);
wd->ent = elm_entry_add(obj);
elm_entry_single_line_set(wd->ent, 1);
evas_object_smart_callback_add(wd->ent, "activated", _entry_activated, obj);
edje_object_part_swallow(wd->spinner, "elm.swallow.entry", wd->ent);
- edje_object_signal_callback_add(wd->spinner, "elm,action,entry,toggle",
+ edje_object_signal_callback_add(wd->spinner, "elm,action,entry,toggle",
"*", _toggle_entry, obj);
_mirrored_set(obj, elm_widget_mirrored_get(obj));
EAPI void
elm_spinner_special_value_add(Evas_Object *obj, double value, const char *label)
{
- Elm_Spinner_Special_Value *sv;
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
+ Elm_Spinner_Special_Value *sv;
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
- sv = calloc(1, sizeof(*sv));
- if (!sv) return;
- sv->value = value;
- sv->label = eina_stringshare_add(label);
+ sv = calloc(1, sizeof(*sv));
+ if (!sv) return;
+ sv->value = value;
+ sv->label = eina_stringshare_add(label);
- wd->special_values = eina_list_append(wd->special_values, sv);
- _write_label(obj);
+ wd->special_values = eina_list_append(wd->special_values, sv);
+ _write_label(obj);
}
/**
#include "elm_priv.h"
#ifndef EFL_HAVE_THREADS
-# error "No thread support. Required."
+# error "No thread support. Required."
#endif
#ifdef EFL_HAVE_POSIX_THREADS
struct _Elm_Store_Filesystem
{
- Elm_Store base;
- EINA_MAGIC;
- const char *dir;
+ Elm_Store base;
+ EINA_MAGIC;
+ const char *dir;
};
struct _Elm_Store_Item_Filesystem
{
- Elm_Store_Item base;
- const char *path;
+ Elm_Store_Item base;
+ const char *path;
};
static Elm_Genlist_Item_Class _store_item_class;
static void
_store_cache_trim(Elm_Store *st)
{
- while ((st->realized ) &&
- (((int)eina_list_count(st->realized) - st->realized_count)
+ while ((st->realized ) &&
+ (((int)eina_list_count(st->realized) - st->realized_count)
> st->cache_max))
- {
- Elm_Store_Item *sti = st->realized->data;
- if (sti->realized)
- {
- st->realized = eina_list_remove_list(st->realized, st->realized);
- sti->realized = EINA_FALSE;
- }
- LKL(sti->lock);
- if (!sti->fetched)
- {
- LKU(sti->lock);
- if (sti->fetch_th)
- {
- ecore_thread_cancel(sti->fetch_th);
- sti->fetch_th = NULL;
- }
- LKL(sti->lock);
- }
- sti->fetched = EINA_FALSE;
- LKU(sti->lock);
- if (st->cb.unfetch.func)
- st->cb.unfetch.func(st->cb.unfetch.data, sti);
- LKL(sti->lock);
- sti->data = NULL;
- LKU(sti->lock);
- }
-}
-
-static void
+ {
+ Elm_Store_Item *sti = st->realized->data;
+ if (sti->realized)
+ {
+ st->realized = eina_list_remove_list(st->realized, st->realized);
+ sti->realized = EINA_FALSE;
+ }
+ LKL(sti->lock);
+ if (!sti->fetched)
+ {
+ LKU(sti->lock);
+ if (sti->fetch_th)
+ {
+ ecore_thread_cancel(sti->fetch_th);
+ sti->fetch_th = NULL;
+ }
+ LKL(sti->lock);
+ }
+ sti->fetched = EINA_FALSE;
+ LKU(sti->lock);
+ if (st->cb.unfetch.func)
+ st->cb.unfetch.func(st->cb.unfetch.data, sti);
+ LKL(sti->lock);
+ sti->data = NULL;
+ LKU(sti->lock);
+ }
+}
+
+static void
_store_genlist_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
- Elm_Store *st = data;
- st->genlist = NULL;
- if (st->list_th)
- {
- ecore_thread_cancel(st->list_th);
- st->list_th = NULL;
- }
- eina_list_free(st->realized);
- while (st->items)
- {
- Elm_Store_Item *sti = (Elm_Store_Item *)st->items;
- if (sti->eval_job) ecore_job_del(sti->eval_job);
- if (sti->fetch_th)
- {
- ecore_thread_cancel(sti->fetch_th);
- sti->fetch_th = NULL;
- }
- if (sti->store->item.free) sti->store->item.free(sti);
- if (sti->data)
- {
- if (st->cb.unfetch.func)
- st->cb.unfetch.func(st->cb.unfetch.data, sti);
- sti->data = NULL;
- }
- LKD(sti->lock);
- free(sti);
- }
- // FIXME: kill threads and more
+ Elm_Store *st = data;
+ st->genlist = NULL;
+ if (st->list_th)
+ {
+ ecore_thread_cancel(st->list_th);
+ st->list_th = NULL;
+ }
+ eina_list_free(st->realized);
+ while (st->items)
+ {
+ Elm_Store_Item *sti = (Elm_Store_Item *)st->items;
+ if (sti->eval_job) ecore_job_del(sti->eval_job);
+ if (sti->fetch_th)
+ {
+ ecore_thread_cancel(sti->fetch_th);
+ sti->fetch_th = NULL;
+ }
+ if (sti->store->item.free) sti->store->item.free(sti);
+ if (sti->data)
+ {
+ if (st->cb.unfetch.func)
+ st->cb.unfetch.func(st->cb.unfetch.data, sti);
+ sti->data = NULL;
+ }
+ LKD(sti->lock);
+ free(sti);
+ }
+ // FIXME: kill threads and more
}
////// **** WARNING ***********************************************************
static void
_store_filesystem_fetch_do(void *data, Ecore_Thread *th __UNUSED__)
{
- Elm_Store_Item *sti = data;
- LKL(sti->lock);
- if (sti->data)
- {
- LKU(sti->lock);
- return;
- }
- if (!sti->fetched)
- {
- LKU(sti->lock);
- if (sti->store->cb.fetch.func)
- sti->store->cb.fetch.func(sti->store->cb.fetch.data, sti);
- LKL(sti->lock);
- sti->fetched = EINA_TRUE;
- }
- LKU(sti->lock);
+ Elm_Store_Item *sti = data;
+ LKL(sti->lock);
+ if (sti->data)
+ {
+ LKU(sti->lock);
+ return;
+ }
+ if (!sti->fetched)
+ {
+ LKU(sti->lock);
+ if (sti->store->cb.fetch.func)
+ sti->store->cb.fetch.func(sti->store->cb.fetch.data, sti);
+ LKL(sti->lock);
+ sti->fetched = EINA_TRUE;
+ }
+ LKU(sti->lock);
}
// ************************************************************************
//// * End of separate thread function. *
static void
_store_filesystem_fetch_end(void *data, Ecore_Thread *th)
{
- Elm_Store_Item *sti = data;
- LKL(sti->lock);
- if (sti->data) elm_genlist_item_update(sti->item);
- LKU(sti->lock);
- if (th == sti->fetch_th) sti->fetch_th = NULL;
+ Elm_Store_Item *sti = data;
+ LKL(sti->lock);
+ if (sti->data) elm_genlist_item_update(sti->item);
+ LKU(sti->lock);
+ if (th == sti->fetch_th) sti->fetch_th = NULL;
}
/* TODO: refactor lock part into core? this does not depend on filesystm part */
static void
_store_filesystem_fetch_cancel(void *data, Ecore_Thread *th)
{
- Elm_Store_Item *sti = data;
- LKL(sti->lock);
- if (th == sti->fetch_th) sti->fetch_th = NULL;
- if (sti->data) elm_genlist_item_update(sti->item);
- LKU(sti->lock);
+ Elm_Store_Item *sti = data;
+ LKL(sti->lock);
+ if (th == sti->fetch_th) sti->fetch_th = NULL;
+ if (sti->data) elm_genlist_item_update(sti->item);
+ LKU(sti->lock);
}
static void
_store_item_eval(void *data)
{
- Elm_Store_Item *sti = data;
- sti->eval_job = NULL;
- if (sti->live == sti->was_live) return;
- sti->was_live = sti->live;
- if (sti->live)
- {
- _store_cache_trim(sti->store);
- if (sti->realized)
- sti->store->realized = eina_list_remove(sti->store->realized, sti);
- sti->store->realized = eina_list_append(sti->store->realized, sti);
- sti->realized = EINA_TRUE;
- if ((sti->store->fetch_thread) && (!sti->fetch_th))
- sti->fetch_th = ecore_thread_run(_store_filesystem_fetch_do,
- _store_filesystem_fetch_end,
- _store_filesystem_fetch_cancel,
- sti);
- else if ((!sti->store->fetch_thread))
- {
- _store_filesystem_fetch_do(sti, NULL);
- _store_filesystem_fetch_end(sti, NULL);
- }
- }
- else
- {
- if (sti->fetch_th)
- {
- ecore_thread_cancel(sti->fetch_th);
- sti->fetch_th = NULL;
- }
- _store_cache_trim(sti->store);
- }
+ Elm_Store_Item *sti = data;
+ sti->eval_job = NULL;
+ if (sti->live == sti->was_live) return;
+ sti->was_live = sti->live;
+ if (sti->live)
+ {
+ _store_cache_trim(sti->store);
+ if (sti->realized)
+ sti->store->realized = eina_list_remove(sti->store->realized, sti);
+ sti->store->realized = eina_list_append(sti->store->realized, sti);
+ sti->realized = EINA_TRUE;
+ if ((sti->store->fetch_thread) && (!sti->fetch_th))
+ sti->fetch_th = ecore_thread_run(_store_filesystem_fetch_do,
+ _store_filesystem_fetch_end,
+ _store_filesystem_fetch_cancel,
+ sti);
+ else if ((!sti->store->fetch_thread))
+ {
+ _store_filesystem_fetch_do(sti, NULL);
+ _store_filesystem_fetch_end(sti, NULL);
+ }
+ }
+ else
+ {
+ if (sti->fetch_th)
+ {
+ ecore_thread_cancel(sti->fetch_th);
+ sti->fetch_th = NULL;
+ }
+ _store_cache_trim(sti->store);
+ }
}
static void
_store_genlist_item_realized(void *data, Evas_Object *obj __UNUSED__, void *event_info)
{
- Elm_Store *st = data;
- Elm_Genlist_Item *gli = event_info;
- Elm_Store_Item *sti = elm_genlist_item_data_get(gli);
- if (!sti) return;
- st->realized_count++;
- sti->live = EINA_TRUE;
- if (sti->eval_job) ecore_job_del(sti->eval_job);
- sti->eval_job = ecore_job_add(_store_item_eval, sti);
+ Elm_Store *st = data;
+ Elm_Genlist_Item *gli = event_info;
+ Elm_Store_Item *sti = elm_genlist_item_data_get(gli);
+ if (!sti) return;
+ st->realized_count++;
+ sti->live = EINA_TRUE;
+ if (sti->eval_job) ecore_job_del(sti->eval_job);
+ sti->eval_job = ecore_job_add(_store_item_eval, sti);
}
static void
_store_genlist_item_unrealized(void *data, Evas_Object *obj __UNUSED__, void *event_info)
{
- Elm_Store *st = data;
- Elm_Genlist_Item *gli = event_info;
- Elm_Store_Item *sti = elm_genlist_item_data_get(gli);
- if (!sti) return;
- st->realized_count--;
- sti->live = EINA_FALSE;
- if (sti->eval_job) ecore_job_del(sti->eval_job);
- sti->eval_job = ecore_job_add(_store_item_eval, sti);
+ Elm_Store *st = data;
+ Elm_Genlist_Item *gli = event_info;
+ Elm_Store_Item *sti = elm_genlist_item_data_get(gli);
+ if (!sti) return;
+ st->realized_count--;
+ sti->live = EINA_FALSE;
+ if (sti->eval_job) ecore_job_del(sti->eval_job);
+ sti->eval_job = ecore_job_add(_store_item_eval, sti);
}
static const Elm_Store_Item_Mapping *
_store_item_mapping_find(Elm_Store_Item *sti, const char *part)
{
- const Elm_Store_Item_Mapping *m;
-
- for (m = sti->mapping; m; m ++)
- {
- if (m->type == ELM_STORE_ITEM_MAPPING_NONE) break;
- if (!strcmp(part, m->part)) return m;
- }
- return NULL;
+ const Elm_Store_Item_Mapping *m;
+
+ for (m = sti->mapping; m; m ++)
+ {
+ if (m->type == ELM_STORE_ITEM_MAPPING_NONE) break;
+ if (!strcmp(part, m->part)) return m;
+ }
+ return NULL;
}
static char *
_store_item_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part)
{
- Elm_Store_Item *sti = data;
- const char *s = "";
- LKL(sti->lock);
- if (sti->data)
- {
- const Elm_Store_Item_Mapping *m = _store_item_mapping_find(sti, part);
- if (m)
- {
- switch (m->type)
- {
- case ELM_STORE_ITEM_MAPPING_LABEL:
- s = *(char **)(((unsigned char *)sti->data) + m->offset);
- break;
- case ELM_STORE_ITEM_MAPPING_CUSTOM:
- if (m->details.custom.func)
- s = m->details.custom.func(sti->data, sti, part);
- break;
- default:
- break;
- }
- }
- }
- LKU(sti->lock);
- return strdup(s);
+ Elm_Store_Item *sti = data;
+ const char *s = "";
+ LKL(sti->lock);
+ if (sti->data)
+ {
+ const Elm_Store_Item_Mapping *m = _store_item_mapping_find(sti, part);
+ if (m)
+ {
+ switch (m->type)
+ {
+ case ELM_STORE_ITEM_MAPPING_LABEL:
+ s = *(char **)(((unsigned char *)sti->data) + m->offset);
+ break;
+ case ELM_STORE_ITEM_MAPPING_CUSTOM:
+ if (m->details.custom.func)
+ s = m->details.custom.func(sti->data, sti, part);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ LKU(sti->lock);
+ return strdup(s);
}
static Evas_Object *
_store_item_icon_get(void *data, Evas_Object *obj, const char *part)
{
- Elm_Store_Item *sti = data;
- LKL(sti->lock);
- if (sti->data)
- {
- const Elm_Store_Item_Mapping *m = _store_item_mapping_find(sti, part);
- if (m)
- {
- Evas_Object *ic = NULL;
- const char *s = NULL;
-
- switch (m->type)
- {
- case ELM_STORE_ITEM_MAPPING_ICON:
- ic = elm_icon_add(obj);
- s = *(char **)(((unsigned char *)sti->data) + m->offset);
- elm_icon_order_lookup_set(ic, m->details.icon.lookup_order);
- evas_object_size_hint_aspect_set(ic,
- EVAS_ASPECT_CONTROL_VERTICAL,
- m->details.icon.w,
- m->details.icon.h);
- elm_icon_smooth_set(ic, m->details.icon.smooth);
- elm_icon_no_scale_set(ic, m->details.icon.no_scale);
- elm_icon_scale_set(ic,
- m->details.icon.scale_up,
- m->details.icon.scale_down);
- if (s)
- {
- if (m->details.icon.standard_name)
- elm_icon_standard_set(ic, s);
- else
- elm_icon_file_set(ic, s, NULL);
- }
- break;
- case ELM_STORE_ITEM_MAPPING_PHOTO:
- ic = elm_icon_add(obj);
- s = *(char **)(((unsigned char *)sti->data) + m->offset);
- elm_photo_size_set(ic, m->details.photo.size);
- if (s)
- elm_photo_file_set(ic, s);
- break;
- case ELM_STORE_ITEM_MAPPING_CUSTOM:
- if (m->details.custom.func)
- ic = m->details.custom.func(sti->data, sti, part);
- break;
- default:
- break;
- }
- LKU(sti->lock);
- return ic;
- }
- }
- LKU(sti->lock);
- return NULL;
+ Elm_Store_Item *sti = data;
+ LKL(sti->lock);
+ if (sti->data)
+ {
+ const Elm_Store_Item_Mapping *m = _store_item_mapping_find(sti, part);
+ if (m)
+ {
+ Evas_Object *ic = NULL;
+ const char *s = NULL;
+
+ switch (m->type)
+ {
+ case ELM_STORE_ITEM_MAPPING_ICON:
+ ic = elm_icon_add(obj);
+ s = *(char **)(((unsigned char *)sti->data) + m->offset);
+ elm_icon_order_lookup_set(ic, m->details.icon.lookup_order);
+ evas_object_size_hint_aspect_set(ic,
+ EVAS_ASPECT_CONTROL_VERTICAL,
+ m->details.icon.w,
+ m->details.icon.h);
+ elm_icon_smooth_set(ic, m->details.icon.smooth);
+ elm_icon_no_scale_set(ic, m->details.icon.no_scale);
+ elm_icon_scale_set(ic,
+ m->details.icon.scale_up,
+ m->details.icon.scale_down);
+ if (s)
+ {
+ if (m->details.icon.standard_name)
+ elm_icon_standard_set(ic, s);
+ else
+ elm_icon_file_set(ic, s, NULL);
+ }
+ break;
+ case ELM_STORE_ITEM_MAPPING_PHOTO:
+ ic = elm_icon_add(obj);
+ s = *(char **)(((unsigned char *)sti->data) + m->offset);
+ elm_photo_size_set(ic, m->details.photo.size);
+ if (s)
+ elm_photo_file_set(ic, s);
+ break;
+ case ELM_STORE_ITEM_MAPPING_CUSTOM:
+ if (m->details.custom.func)
+ ic = m->details.custom.func(sti->data, sti, part);
+ break;
+ default:
+ break;
+ }
+ LKU(sti->lock);
+ return ic;
+ }
+ }
+ LKU(sti->lock);
+ return NULL;
}
static void
static int
_store_filesystem_sort_cb(void *d1, void *d2)
{
- Elm_Store_Item_Info *info1 = d1, *info2 = d2;
- if ((!info1->sort_id) || (!info2->sort_id)) return 0;
- return strcoll(info1->sort_id, info2->sort_id);
+ Elm_Store_Item_Info *info1 = d1, *info2 = d2;
+ if ((!info1->sort_id) || (!info2->sort_id)) return 0;
+ return strcoll(info1->sort_id, info2->sort_id);
}
static void
_store_filesystem_list_do(void *data, Ecore_Thread *th __UNUSED__)
{
- Elm_Store_Filesystem *st = data;
- Eina_Iterator *it;
- const Eina_File_Direct_Info *finf;
- Eina_List *sorted = NULL;
- Elm_Store_Item_Info_Filesystem *info;
-
- // FIXME: need a way to abstract the open, list, feed items from list
- // and maybe get initial sortable key vals etc.
- it = eina_file_stat_ls(st->dir);
- if (!it) return;
- EINA_ITERATOR_FOREACH(it, finf)
- {
- Eina_Bool ok;
- size_t pathsz = finf->path_length + 1;
-
- info = calloc(1, sizeof(Elm_Store_Item_Info_Filesystem) + pathsz);
- if (!info) continue;
- info->path = ((char *)info) + sizeof(Elm_Store_Item_Info_Filesystem);
- memcpy(info->path, finf->path, pathsz);
- ok = EINA_TRUE;
- if (st->base.cb.list.func)
- ok = st->base.cb.list.func(st->base.cb.list.data, &info->base);
- if (ok)
- {
- if (!st->base.sorted) ecore_thread_feedback(th, info);
- else sorted = eina_list_append(sorted, info);
- }
- else
- {
- if (info->base.sort_id) free(info->base.sort_id);
- free(info);
- }
- if (ecore_thread_check(th)) break;
- }
- eina_iterator_free(it);
- if (sorted)
- {
- sorted = eina_list_sort(sorted, 0,
- EINA_COMPARE_CB(_store_filesystem_sort_cb));
- EINA_LIST_FREE(sorted, info)
- {
- if (!ecore_thread_check(th)) ecore_thread_feedback(th, info);
- }
- }
+ Elm_Store_Filesystem *st = data;
+ Eina_Iterator *it;
+ const Eina_File_Direct_Info *finf;
+ Eina_List *sorted = NULL;
+ Elm_Store_Item_Info_Filesystem *info;
+
+ // FIXME: need a way to abstract the open, list, feed items from list
+ // and maybe get initial sortable key vals etc.
+ it = eina_file_stat_ls(st->dir);
+ if (!it) return;
+ EINA_ITERATOR_FOREACH(it, finf)
+ {
+ Eina_Bool ok;
+ size_t pathsz = finf->path_length + 1;
+
+ info = calloc(1, sizeof(Elm_Store_Item_Info_Filesystem) + pathsz);
+ if (!info) continue;
+ info->path = ((char *)info) + sizeof(Elm_Store_Item_Info_Filesystem);
+ memcpy(info->path, finf->path, pathsz);
+ ok = EINA_TRUE;
+ if (st->base.cb.list.func)
+ ok = st->base.cb.list.func(st->base.cb.list.data, &info->base);
+ if (ok)
+ {
+ if (!st->base.sorted) ecore_thread_feedback(th, info);
+ else sorted = eina_list_append(sorted, info);
+ }
+ else
+ {
+ if (info->base.sort_id) free(info->base.sort_id);
+ free(info);
+ }
+ if (ecore_thread_check(th)) break;
+ }
+ eina_iterator_free(it);
+ if (sorted)
+ {
+ sorted = eina_list_sort(sorted, 0,
+ EINA_COMPARE_CB(_store_filesystem_sort_cb));
+ EINA_LIST_FREE(sorted, info)
+ {
+ if (!ecore_thread_check(th)) ecore_thread_feedback(th, info);
+ }
+ }
}
// ************************************************************************
//// * End of separate thread function. *
static void
_store_filesystem_list_end(void *data, Ecore_Thread *th)
{
- Elm_Store *st = data;
- if (th == st->list_th) st->list_th = NULL;
+ Elm_Store *st = data;
+ if (th == st->list_th) st->list_th = NULL;
}
static void
_store_filesystem_list_cancel(void *data, Ecore_Thread *th)
{
- Elm_Store *st = data;
- if (th == st->list_th) st->list_th = NULL;
+ Elm_Store *st = data;
+ if (th == st->list_th) st->list_th = NULL;
}
static void
_store_filesystem_list_update(void *data, Ecore_Thread *th __UNUSED__, void *msg)
{
- Elm_Store *st = data;
- Elm_Store_Item_Filesystem *sti;
- Elm_Genlist_Item_Class *itc;
- Elm_Store_Item_Info_Filesystem *info = msg;
-
- sti = calloc(1, sizeof(Elm_Store_Item_Filesystem));
- if (!sti) goto done;
- LKI(sti->base.lock);
- EINA_MAGIC_SET(&(sti->base), ELM_STORE_ITEM_MAGIC);
- sti->base.store = st;
- sti->base.data = info->base.data;
- sti->base.mapping = info->base.mapping;
- sti->path = eina_stringshare_add(info->path);
-
- itc = info->base.item_class;
- if (!itc) itc = &_store_item_class;
- else
- {
- itc->func.label_get = _store_item_label_get;
- itc->func.icon_get = _store_item_icon_get;
- itc->func.state_get = NULL; // FIXME: support state gets later
- itc->func.del = _store_item_del;
- }
-
- // FIXME: handle being a parent (tree)
- sti->base.item = elm_genlist_item_append(st->genlist, itc,
- sti/* item data */,
- NULL/* parent */,
- ELM_GENLIST_ITEM_NONE,
- NULL/* func */,
- NULL/* func data */);
- st->items = eina_inlist_append(st->items, (Eina_Inlist *)sti);
+ Elm_Store *st = data;
+ Elm_Store_Item_Filesystem *sti;
+ Elm_Genlist_Item_Class *itc;
+ Elm_Store_Item_Info_Filesystem *info = msg;
+
+ sti = calloc(1, sizeof(Elm_Store_Item_Filesystem));
+ if (!sti) goto done;
+ LKI(sti->base.lock);
+ EINA_MAGIC_SET(&(sti->base), ELM_STORE_ITEM_MAGIC);
+ sti->base.store = st;
+ sti->base.data = info->base.data;
+ sti->base.mapping = info->base.mapping;
+ sti->path = eina_stringshare_add(info->path);
+
+ itc = info->base.item_class;
+ if (!itc) itc = &_store_item_class;
+ else
+ {
+ itc->func.label_get = _store_item_label_get;
+ itc->func.icon_get = _store_item_icon_get;
+ itc->func.state_get = NULL; // FIXME: support state gets later
+ itc->func.del = _store_item_del;
+ }
+
+ // FIXME: handle being a parent (tree)
+ sti->base.item = elm_genlist_item_append(st->genlist, itc,
+ sti/* item data */,
+ NULL/* parent */,
+ ELM_GENLIST_ITEM_NONE,
+ NULL/* func */,
+ NULL/* func data */);
+ st->items = eina_inlist_append(st->items, (Eina_Inlist *)sti);
done:
- if (info->base.sort_id) free(info->base.sort_id);
- free(info);
+ if (info->base.sort_id) free(info->base.sort_id);
+ free(info);
}
// public api calls
static Elm_Store *
_elm_store_new(size_t size)
{
- Elm_Store *st = calloc(1, size);
- EINA_SAFETY_ON_NULL_RETURN_VAL(st, NULL);
-
- // TODO: BEGIN - move to elm_store_init()
- eina_magic_string_set(ELM_STORE_MAGIC, "Elm_Store");
- eina_magic_string_set(ELM_STORE_FILESYSTEM_MAGIC, "Elm_Store_Filesystem");
- eina_magic_string_set(ELM_STORE_ITEM_MAGIC, "Elm_Store_Item");
- // setup default item class (always the same) if list cb doesnt provide one
- _store_item_class.item_style = "default";
- _store_item_class.func.label_get = _store_item_label_get;
- _store_item_class.func.icon_get = _store_item_icon_get;
- _store_item_class.func.state_get = NULL; // FIXME: support state gets later
- _store_item_class.func.del = _store_item_del;
- // TODO: END - move to elm_store_init()
-
- EINA_MAGIC_SET(st, ELM_STORE_MAGIC);
- st->cache_max = 128;
- st->fetch_thread = EINA_TRUE;
- return st;
+ Elm_Store *st = calloc(1, size);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(st, NULL);
+
+ // TODO: BEGIN - move to elm_store_init()
+ eina_magic_string_set(ELM_STORE_MAGIC, "Elm_Store");
+ eina_magic_string_set(ELM_STORE_FILESYSTEM_MAGIC, "Elm_Store_Filesystem");
+ eina_magic_string_set(ELM_STORE_ITEM_MAGIC, "Elm_Store_Item");
+ // setup default item class (always the same) if list cb doesnt provide one
+ _store_item_class.item_style = "default";
+ _store_item_class.func.label_get = _store_item_label_get;
+ _store_item_class.func.icon_get = _store_item_icon_get;
+ _store_item_class.func.state_get = NULL; // FIXME: support state gets later
+ _store_item_class.func.del = _store_item_del;
+ // TODO: END - move to elm_store_init()
+
+ EINA_MAGIC_SET(st, ELM_STORE_MAGIC);
+ st->cache_max = 128;
+ st->fetch_thread = EINA_TRUE;
+ return st;
}
#define elm_store_new(type) (type*)_elm_store_new(sizeof(type))
static void
_elm_store_filesystem_free(Elm_Store *store)
{
- Elm_Store_Filesystem *st = (Elm_Store_Filesystem *)store;
- eina_stringshare_del(st->dir);
+ Elm_Store_Filesystem *st = (Elm_Store_Filesystem *)store;
+ eina_stringshare_del(st->dir);
}
static void
EAPI Elm_Store *
elm_store_filesystem_new(void)
{
- Elm_Store_Filesystem *st = elm_store_new(Elm_Store_Filesystem);
- EINA_SAFETY_ON_NULL_RETURN_VAL(st, NULL);
+ Elm_Store_Filesystem *st = elm_store_new(Elm_Store_Filesystem);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(st, NULL);
- EINA_MAGIC_SET(st, ELM_STORE_FILESYSTEM_MAGIC);
- st->base.free = _elm_store_filesystem_free;
- st->base.item.free = _elm_store_filesystem_item_free;
+ EINA_MAGIC_SET(st, ELM_STORE_FILESYSTEM_MAGIC);
+ st->base.free = _elm_store_filesystem_free;
+ st->base.item.free = _elm_store_filesystem_item_free;
- return &st->base;
+ return &st->base;
}
EAPI void
elm_store_free(Elm_Store *st)
{
- void (*item_free)(Elm_Store_Item *);
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- if (st->list_th)
- {
- ecore_thread_cancel(st->list_th);
- st->list_th = NULL;
- }
- eina_list_free(st->realized);
- item_free = st->item.free;
- while (st->items)
- {
- Elm_Store_Item *sti = (Elm_Store_Item *)st->items;
- if (sti->eval_job) ecore_job_del(sti->eval_job);
- if (sti->fetch_th)
- {
- ecore_thread_cancel(sti->fetch_th);
- sti->fetch_th = NULL;
- }
- if (item_free) item_free(sti);
- if (sti->data)
- {
- if (st->cb.unfetch.func)
- st->cb.unfetch.func(st->cb.unfetch.data, sti);
- sti->data = NULL;
- }
- LKD(sti->lock);
- free(sti);
- }
- if (st->genlist)
- {
- evas_object_event_callback_del_full(st->genlist, EVAS_CALLBACK_DEL, _store_genlist_del, st);
- evas_object_smart_callback_del(st->genlist, "realized", _store_genlist_item_realized);
- evas_object_smart_callback_del(st->genlist, "unrealized", _store_genlist_item_unrealized);
- elm_genlist_clear(st->genlist);
- st->genlist = NULL;
- }
- if (st->free) st->free(st);
- free(st);
+ void (*item_free)(Elm_Store_Item *);
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ if (st->list_th)
+ {
+ ecore_thread_cancel(st->list_th);
+ st->list_th = NULL;
+ }
+ eina_list_free(st->realized);
+ item_free = st->item.free;
+ while (st->items)
+ {
+ Elm_Store_Item *sti = (Elm_Store_Item *)st->items;
+ if (sti->eval_job) ecore_job_del(sti->eval_job);
+ if (sti->fetch_th)
+ {
+ ecore_thread_cancel(sti->fetch_th);
+ sti->fetch_th = NULL;
+ }
+ if (item_free) item_free(sti);
+ if (sti->data)
+ {
+ if (st->cb.unfetch.func)
+ st->cb.unfetch.func(st->cb.unfetch.data, sti);
+ sti->data = NULL;
+ }
+ LKD(sti->lock);
+ free(sti);
+ }
+ if (st->genlist)
+ {
+ evas_object_event_callback_del_full(st->genlist, EVAS_CALLBACK_DEL, _store_genlist_del, st);
+ evas_object_smart_callback_del(st->genlist, "realized", _store_genlist_item_realized);
+ evas_object_smart_callback_del(st->genlist, "unrealized", _store_genlist_item_unrealized);
+ elm_genlist_clear(st->genlist);
+ st->genlist = NULL;
+ }
+ if (st->free) st->free(st);
+ free(st);
}
EAPI void
elm_store_target_genlist_set(Elm_Store *st, Evas_Object *obj)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- if (st->genlist == obj) return;
- if (st->genlist)
- {
- evas_object_event_callback_del_full(st->genlist, EVAS_CALLBACK_DEL, _store_genlist_del, st);
- evas_object_smart_callback_del(st->genlist, "realized", _store_genlist_item_realized);
- evas_object_smart_callback_del(st->genlist, "unrealized", _store_genlist_item_unrealized);
- elm_genlist_clear(st->genlist);
- }
- st->genlist = obj;
- if (!st->genlist) return;
- evas_object_smart_callback_add(st->genlist, "realized", _store_genlist_item_realized, st);
- evas_object_smart_callback_add(st->genlist, "unrealized", _store_genlist_item_unrealized, st);
- evas_object_event_callback_add(st->genlist, EVAS_CALLBACK_DEL, _store_genlist_del, st);
- elm_genlist_clear(st->genlist);
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ if (st->genlist == obj) return;
+ if (st->genlist)
+ {
+ evas_object_event_callback_del_full(st->genlist, EVAS_CALLBACK_DEL, _store_genlist_del, st);
+ evas_object_smart_callback_del(st->genlist, "realized", _store_genlist_item_realized);
+ evas_object_smart_callback_del(st->genlist, "unrealized", _store_genlist_item_unrealized);
+ elm_genlist_clear(st->genlist);
+ }
+ st->genlist = obj;
+ if (!st->genlist) return;
+ evas_object_smart_callback_add(st->genlist, "realized", _store_genlist_item_realized, st);
+ evas_object_smart_callback_add(st->genlist, "unrealized", _store_genlist_item_unrealized, st);
+ evas_object_event_callback_add(st->genlist, EVAS_CALLBACK_DEL, _store_genlist_del, st);
+ elm_genlist_clear(st->genlist);
}
EAPI void
elm_store_filesystem_directory_set(Elm_Store *store, const char *dir)
{
Elm_Store_Filesystem *st = (Elm_Store_Filesystem *)store;
- if (!EINA_MAGIC_CHECK(store, ELM_STORE_MAGIC)) return;
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return;
- if (store->list_th)
- {
- ecore_thread_cancel(store->list_th);
- store->list_th = NULL;
- }
- if (!eina_stringshare_replace(&st->dir, dir)) return;
- store->list_th = ecore_thread_feedback_run(_store_filesystem_list_do,
- _store_filesystem_list_update,
- _store_filesystem_list_end,
- _store_filesystem_list_cancel,
- st, EINA_TRUE);
+ if (!EINA_MAGIC_CHECK(store, ELM_STORE_MAGIC)) return;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return;
+ if (store->list_th)
+ {
+ ecore_thread_cancel(store->list_th);
+ store->list_th = NULL;
+ }
+ if (!eina_stringshare_replace(&st->dir, dir)) return;
+ store->list_th = ecore_thread_feedback_run(_store_filesystem_list_do,
+ _store_filesystem_list_update,
+ _store_filesystem_list_end,
+ _store_filesystem_list_cancel,
+ st, EINA_TRUE);
}
EAPI const char *
elm_store_filesystem_directory_get(const Elm_Store *store)
{
- const Elm_Store_Filesystem *st = (const Elm_Store_Filesystem *)store;
- if (!EINA_MAGIC_CHECK(store, ELM_STORE_MAGIC)) return NULL;
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return NULL;
- return st->dir;
+ const Elm_Store_Filesystem *st = (const Elm_Store_Filesystem *)store;
+ if (!EINA_MAGIC_CHECK(store, ELM_STORE_MAGIC)) return NULL;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return NULL;
+ return st->dir;
}
EAPI void
elm_store_cache_set(Elm_Store *st, int max)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- if (max < 0) max = 0;
- st->cache_max = max;
- _store_cache_trim(st);
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ if (max < 0) max = 0;
+ st->cache_max = max;
+ _store_cache_trim(st);
}
EAPI int
elm_store_cache_get(const Elm_Store *st)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return 0;
- return st->cache_max;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return 0;
+ return st->cache_max;
}
EAPI void
elm_store_list_func_set(Elm_Store *st, Elm_Store_Item_List_Cb func, const void *data)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- st->cb.list.func = func;
- st->cb.list.data = (void *)data;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ st->cb.list.func = func;
+ st->cb.list.data = (void *)data;
}
EAPI void
elm_store_fetch_func_set(Elm_Store *st, Elm_Store_Item_Fetch_Cb func, const void *data)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- st->cb.fetch.func = func;
- st->cb.fetch.data = (void *)data;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ st->cb.fetch.func = func;
+ st->cb.fetch.data = (void *)data;
}
EAPI void
elm_store_fetch_thread_set(Elm_Store *st, Eina_Bool use_thread)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- st->fetch_thread = !!use_thread;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ st->fetch_thread = !!use_thread;
}
EAPI Eina_Bool
elm_store_fetch_thread_get(const Elm_Store *st)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return EINA_FALSE;
- return st->fetch_thread;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return EINA_FALSE;
+ return st->fetch_thread;
}
EAPI void
elm_store_unfetch_func_set(Elm_Store *st, Elm_Store_Item_Unfetch_Cb func, const void *data)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- st->cb.unfetch.func = func;
- st->cb.unfetch.data = (void *)data;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ st->cb.unfetch.func = func;
+ st->cb.unfetch.data = (void *)data;
}
EAPI void
elm_store_sorted_set(Elm_Store *st, Eina_Bool sorted)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
- st->sorted = sorted;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return;
+ st->sorted = sorted;
}
EAPI Eina_Bool
elm_store_sorted_get(const Elm_Store *st)
{
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return EINA_FALSE;
- return st->sorted;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_MAGIC)) return EINA_FALSE;
+ return st->sorted;
}
EAPI void
elm_store_item_data_set(Elm_Store_Item *sti, void *data)
{
- if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return;
- LKL(sti->lock);
- sti->data = data;
- LKU(sti->lock);
+ if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return;
+ LKL(sti->lock);
+ sti->data = data;
+ LKU(sti->lock);
}
EAPI void *
elm_store_item_data_get(Elm_Store_Item *sti)
{
- if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
- void *d;
- LKL(sti->lock);
- d = sti->data;
- LKU(sti->lock);
- return d;
+ if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
+ void *d;
+ LKL(sti->lock);
+ d = sti->data;
+ LKU(sti->lock);
+ return d;
}
EAPI const Elm_Store *
elm_store_item_store_get(const Elm_Store_Item *sti)
{
- if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
- // dont need lock
- return sti->store;
+ if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
+ // dont need lock
+ return sti->store;
}
EAPI const Elm_Genlist_Item *
elm_store_item_genlist_item_get(const Elm_Store_Item *sti)
{
- if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
- // dont need lock
- return sti->item;
+ if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
+ // dont need lock
+ return sti->item;
}
EAPI const char *
elm_store_item_filesystem_path_get(const Elm_Store_Item *item)
{
- Elm_Store_Item_Filesystem *sti = (Elm_Store_Item_Filesystem *)item;
- Elm_Store_Filesystem *st;
- if (!EINA_MAGIC_CHECK(item, ELM_STORE_ITEM_MAGIC)) return NULL;
- if (!EINA_MAGIC_CHECK(item->store, ELM_STORE_MAGIC)) return NULL;
- /* ensure we're dealing with filesystem item */
- st = (Elm_Store_Filesystem *)item->store;
- if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return NULL;
- // dont need lock
- return sti->path;
+ Elm_Store_Item_Filesystem *sti = (Elm_Store_Item_Filesystem *)item;
+ Elm_Store_Filesystem *st;
+ if (!EINA_MAGIC_CHECK(item, ELM_STORE_ITEM_MAGIC)) return NULL;
+ if (!EINA_MAGIC_CHECK(item->store, ELM_STORE_MAGIC)) return NULL;
+ /* ensure we're dealing with filesystem item */
+ st = (Elm_Store_Filesystem *)item->store;
+ if (!EINA_MAGIC_CHECK(st, ELM_STORE_FILESYSTEM_MAGIC)) return NULL;
+ // dont need lock
+ return sti->path;
}