예제 #1
0
/*
 * 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);
}
예제 #2
0
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);
}
예제 #3
0
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);
}
예제 #4
0
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);
}