/* * need to be called when * view orientation * view item size * a feed has been added OR remove to/from an item * has changed */ void news_item_refresh(News_Item *ni, int changed_order, int changed_content, int changed_state) { Evas_Object *box; News_Item_View_Mode mode; box = ni->view.box; e_box_freeze(box); if (changed_order) { Evas_Object *o; while ((o = e_box_pack_object_first(box))) { e_box_unpack(o); evas_object_hide(o); } } if (!eina_list_count(ni->config->feed_refs)) mode = NEWS_ITEM_VIEW_MODE_ONE; else mode = ni->config->view_mode; switch (mode) { case NEWS_ITEM_VIEW_MODE_ONE: _item_refresh_mode_one(ni, changed_order, changed_state); break; case NEWS_ITEM_VIEW_MODE_FEED: _item_refresh_mode_feed(ni, 0, 0, changed_order, changed_content, changed_state); break; case NEWS_ITEM_VIEW_MODE_FEED_UNREAD: _item_refresh_mode_feed(ni, 0, 1, changed_order, changed_content, changed_state); case NEWS_ITEM_VIEW_MODE_FEED_IMPORTANT: _item_refresh_mode_feed(ni, 1, 0, changed_order, changed_content, changed_state); break; case NEWS_ITEM_VIEW_MODE_FEED_IMPORTANT_UNREAD: _item_refresh_mode_feed(ni, 1, 1, changed_order, changed_content, changed_state); break; } e_box_thaw(box); /* resize the gadcon */ if (changed_order && ni->gcc->client_class) ni->gcc->client_class->func.orient(ni->gcc, ni->gcc->gadcon->orient); }
static void fill_gui_list(app_t *app) { int i, j, last, n_items, last_evas, c; Evas_List *itr; float p; j = 0; i = app->current - 2; last_evas = app->n_evas_items; last = app->current + last_evas - 2; n_items = evas_list_count(app->items); if (n_items < 1) return; e_box_freeze(app->e_box); /* if required, fill head with empty items */ for (; i < 0; i++, j++) _set_item_text(app, j, ""); /* if required, fill tail with empty items */ for (; last > n_items; last--, last_evas--) _set_item_text(app, last_evas - 1, ""); itr = evas_list_nth_list(app->items, i); for (; i < last; i++, j++, itr = evas_list_next(itr)) { char *text; text = evas_list_data(itr); _set_item_text(app, j, text); } e_box_thaw(app->e_box); /* dim arrows */ p = ((float)(app->current + 1)) / ((float)n_items); c = 255 * p; evas_object_color_set(app->arrow_up, c, c, c, c); p = (float)app->current / ((float)n_items); c = 255 * (1.0 - p); evas_object_color_set(app->arrow_down, c, c, c, c); }
static void destroy_gui_list(app_t *app) { if (!app->evas_items) return; e_box_freeze(app->e_box); while (app->n_evas_items > 0) { Evas_Object *obj; app->n_evas_items--; obj = app->evas_items[app->n_evas_items]; e_box_unpack(obj); evas_object_del(obj); } e_box_thaw(app->e_box); free(app->evas_items); app->evas_items = NULL; evas_object_event_callback_del(app->arrow_up, EVAS_CALLBACK_MOUSE_DOWN, mouse_down_arrow_up); evas_object_event_callback_del(app->arrow_up, EVAS_CALLBACK_MOUSE_UP, mouse_up_arrow_up); evas_object_event_callback_del(app->arrow_down, EVAS_CALLBACK_MOUSE_DOWN, mouse_down_arrow_down); evas_object_event_callback_del(app->arrow_down, EVAS_CALLBACK_MOUSE_UP, mouse_up_arrow_down); }
static void setup_gui_list(app_t *app) { Evas_Object *obj; int item_w, item_h, box_w, box_h, i, n_items; destroy_gui_list(app); obj = _new_list_item(app, NULL); edje_object_size_min_calc(obj, &item_w, &item_h); evas_object_del(obj); app->item_height = item_h; e_box_freeze(app->e_box); evas_object_geometry_get(app->e_box, &app->box_x, &app->box_y, &box_w, &box_h); app->box_y -= item_h; evas_object_move(app->e_box, app->box_x, app->box_y); n_items = box_h / item_h + 3; app->n_evas_items = n_items; app->evas_items = malloc(n_items * sizeof(Evas_Object *)); for (i = 0; i < n_items; i++) { Evas_Object *obj; obj = _new_list_item(app, ""); app->evas_items[i] = obj; e_box_pack_end(app->e_box, obj); edje_object_size_min_calc(obj, &item_w, &item_h); e_box_pack_options_set(obj, 1, 1, 1, 0, 0.0, 0.5, item_w, item_h, 9999, item_h); evas_object_show(obj); } e_box_align_set(app->e_box, 0.0, 1.0); app->arrow_down = edje_object_part_object_get(app->edje_main, "arrow_down"); app->arrow_up = edje_object_part_object_get(app->edje_main, "arrow_up"); evas_object_event_callback_add(app->arrow_up, EVAS_CALLBACK_MOUSE_DOWN, mouse_down_arrow_up, app); evas_object_event_callback_add(app->arrow_up, EVAS_CALLBACK_MOUSE_UP, mouse_up_arrow_up, app); evas_object_event_callback_add(app->arrow_down, EVAS_CALLBACK_MOUSE_DOWN, mouse_down_arrow_down, app); evas_object_event_callback_add(app->arrow_down, EVAS_CALLBACK_MOUSE_UP, mouse_up_arrow_down, app); fill_gui_list(app); e_box_thaw(app->e_box); }