* default
*/
- typedef struct _Buttonpicker_Item Elm_Buttonpicker_Item;
- EINA_DEPRECATED EAPI Evas_Object *elm_buttonpicker_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_buttonpicker_next(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_buttonpicker_prev(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Buttonpicker_Item *elm_buttonpicker_item_append(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data);
- EINA_DEPRECATED EAPI Elm_Buttonpicker_Item *elm_buttonpicker_item_prepend(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data);
- EINA_DEPRECATED EAPI const Eina_List *elm_buttonpicker_items_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Buttonpicker_Item *elm_buttonpicker_first_item_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Buttonpicker_Item *elm_buttonpicker_last_item_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Buttonpicker_Item *elm_buttonpicker_selected_item_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_buttonpicker_item_selected_set(Elm_Buttonpicker_Item *item);
- EINA_DEPRECATED EAPI void elm_buttonpicker_item_del(Elm_Buttonpicker_Item *item);
- EINA_DEPRECATED EAPI const char *elm_buttonpicker_item_label_get(Elm_Buttonpicker_Item *item);
- EINA_DEPRECATED EAPI void elm_buttonpicker_item_label_set(Elm_Buttonpicker_Item *item, const char *label);
- EINA_DEPRECATED EAPI Elm_Buttonpicker_Item *elm_buttonpicker_item_prev(Elm_Buttonpicker_Item *item);
- EINA_DEPRECATED EAPI Elm_Buttonpicker_Item *elm_buttonpicker_item_next(Elm_Buttonpicker_Item *item);
- /* smart callback called:
- * "changed" - when buttonpicker selected item is changed
- * "overflowed" - when buttonpicker item is changed to first item from last item
- * "underflowed" - when buttonpicker item is changed to last item from first item.
- */
- /* available styles:
- * default
- */
-
EAPI Evas_Object *elm_timepicker_add(Evas_Object *parent);
EAPI void elm_timepicker_time_set(Evas_Object *obj, int hrs, int min, int sec);
EAPI void elm_timepicker_time_get(Evas_Object *obj, int *hrs, int *min, int *sec);
* default
*/
- EINA_DEPRECATED EAPI Evas_Object *elm_timepicker3_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_timepicker3_time_set(Evas_Object *obj, int hrs, int min, int sec);
- EINA_DEPRECATED EAPI void elm_timepicker3_time_get(Evas_Object *obj, int *hrs, int *min, int *sec);
- EINA_DEPRECATED EAPI void elm_timepicker3_show_am_pm_set(Evas_Object *obj, Eina_Bool am_pm);
- EINA_DEPRECATED EAPI void elm_timepicker3_show_seconds_set(Evas_Object *obj, Eina_Bool seconds);
- /* smart callback called:
- * "changed" - when timepicker3 selected item is changed
- */
- /* available styles:
- * default
- */
-
EAPI Evas_Object *elm_datepicker_add(Evas_Object *parent);
EAPI void elm_datepicker_date_set(Evas_Object *obj, int year, int month, int day);
EAPI void elm_datepicker_date_get(Evas_Object *obj, int *year, int *month, int *day);
* default
*/
- EINA_DEPRECATED EAPI Evas_Object *elm_datepicker2_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_datepicker2_date_set(Evas_Object *obj, int year, int month, int day);
- EINA_DEPRECATED EAPI void elm_datepicker2_date_get(Evas_Object *obj, int *year, int *month, int *day);
- EINA_DEPRECATED EAPI void elm_datepicker2_date_min_set(Evas_Object *obj, int year, int month, int day); // Not implemented
- EINA_DEPRECATED EAPI void elm_datepicker2_date_min_get(Evas_Object *obj, int *year, int *month, int *day);
- EINA_DEPRECATED EAPI void elm_datepicker2_date_max_set(Evas_Object *obj, int year, int month, int day); // Not implemented
- EINA_DEPRECATED EAPI void elm_datepicker2_date_max_get(Evas_Object *obj, int *year, int *month, int *day);
- EINA_DEPRECATED EAPI void elm_datepicker2_date_format_set(Evas_Object *obj, const char *fmt);
- EINA_DEPRECATED EAPI const char *elm_datepicker2_date_format_get(Evas_Object *obj);
- /* smart callback called:
- * "changed" - when datepicker selected item is changed
- */
- /* available styles:
- * default
- */
-
- EINA_DEPRECATED EAPI Evas_Object *elm_datepicker3_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_datepicker3_date_set(Evas_Object *obj, int year, int month, int day);
- EINA_DEPRECATED EAPI void elm_datepicker3_date_get(Evas_Object *obj, int *year, int *month, int *day);
- EINA_DEPRECATED EAPI void elm_datepicker3_date_min_set(Evas_Object *obj, int year, int month, int day); // Not implemented
- EINA_DEPRECATED EAPI void elm_datepicker3_date_min_get(Evas_Object *obj, int *year, int *month, int *day);
- EINA_DEPRECATED EAPI void elm_datepicker3_date_max_set(Evas_Object *obj, int year, int month, int day); // Not implemented
- EINA_DEPRECATED EAPI void elm_datepicker3_date_max_get(Evas_Object *obj, int *year, int *month, int *day);
- EINA_DEPRECATED EAPI void elm_datepicker3_date_format_set(Evas_Object *obj, const char *fmt);
- EINA_DEPRECATED EAPI const char *elm_datepicker3_date_format_get(Evas_Object *obj);
- /* smart callback called:
- * "changed" - when datepicker3 selected item is changed
- */
- /* available styles:
- * default
- */
-
/* datefield */
typedef enum _Elm_Datefield_Layout
{
EAPI void elm_actionsheet_button_add(Evas_Object *obj, const Elm_Actionsheet_Button_Type type, const char *title, void (*button_clicked_cb) (void *data, Evas_Object *obj, void *event_info), void *event_info);
EAPI int elm_actionsheet_button_title_get(Evas_Object *obj, const int index, char **title);
- /* Toolbar 2 */
- typedef struct _Elm_Toolbar2_Item Elm_Toolbar2_Item;
- EINA_DEPRECATED EAPI Evas_Object *elm_toolbar2_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_toolbar2_icon_size_set(Evas_Object *obj, int icon_size);
- EINA_DEPRECATED EAPI int elm_toolbar2_icon_size_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Toolbar2_Item *elm_toolbar2_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data);
- EINA_DEPRECATED EAPI Evas_Object *elm_toolbar2_item_icon_get(Elm_Toolbar2_Item *item);
- EINA_DEPRECATED EAPI void elm_toolbar2_item_del(Elm_Toolbar2_Item *it);
- EINA_DEPRECATED EAPI void elm_toolbar2_item_del_cb_set(Elm_Toolbar2_Item *it, void (*func)(void *data, Evas_Object *obj, void *event_info));
- EINA_DEPRECATED EAPI void elm_toolbar2_scrollable_set(Evas_Object *obj, Eina_Bool scrollable);
- EINA_DEPRECATED EAPI void elm_toolbar2_homogenous_set(Evas_Object *obj, Eina_Bool homogenous);
- EINA_DEPRECATED EAPI void elm_toolbar2_align_set(Evas_Object *obj, double align);
-
/* colorpicker */
EAPI Evas_Object *elm_colorpicker_add(Evas_Object *parent);
EAPI void elm_colorpicker_color_set(Evas_Object *obj, int r, int g , int b);
* "indicator,position" - when a button reaches to the special position like "left", "right" and "center".
*/
- /* zoomcontrols */
- EINA_DEPRECATED EAPI Evas_Object *elm_zoomcontrols_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_zoomcontrols_range_set(Evas_Object *obj, int range);
- /* smart callbacks called:
- * "up_clicked" - when up button of zoomcontrols is clicked
- * "down_clicked" - when down button of zoomcontrols is clicked
- */
-
- /* viewflipper */
- typedef enum _Elm_Viewflipper_Policy
- {
- ERROR_0 = -1, //can not find wanted value
- SUCCESS =0,
- FLIP_RANGE_X =30,
- ERROR_1 =1001, //confrim parameter is layout or not
- ERROR_2 , //confrim memory check
- ERROR_3 , //data is empty
- ERROR_4 , //check the range
- ERROR_5 , //Non need operation
- ERROR_6 , //waiting gui
- ERROR_7 , //timer second is not setup or can not time setup
- DIR_LEFT ,
- DIR_RIGHT ,
- EACH_LAST
- } Elm_Viewflipper_Policy;
- EINA_DEPRECATED EAPI int elm_viewflipper_isFlipbutton();
- EINA_DEPRECATED EAPI int elm_viewflipper_isAutoStart();
- EINA_DEPRECATED EAPI int elm_viewflipper_isValidPos(int pos);
- EINA_DEPRECATED EAPI int elm_viewflipper_addChild(Evas_Object * child_layout);
- EINA_DEPRECATED EAPI int elm_viewflipper_removeChild(Evas_Object * child_layout);
- EINA_DEPRECATED EAPI int elm_viewflipper_removeChildAt(int pos);
- EINA_DEPRECATED EAPI int elm_viewflipper_getPositionChild(Evas_Object * child_layout);
- EINA_DEPRECATED EAPI Evas_Object *elm_viewflipper_getChildAt(int pos);
- EINA_DEPRECATED EAPI int elm_viewflipper_getCountChild();
- EINA_DEPRECATED EAPI int elm_viewflipper_setDisplayedChild(int pos);
- EINA_DEPRECATED EAPI int elm_viewflipper_setNowView();
- EINA_DEPRECATED EAPI int elm_viewflipper_setNextView();
- EINA_DEPRECATED EAPI int elm_viewflipper_setPreviousView();
- EINA_DEPRECATED EAPI int elm_viewflipper_setFlipInterval(int milliseconds);
- EINA_DEPRECATED EAPI int elm_viewflipper_setFlipbutton(int showbutton);
- EINA_DEPRECATED EAPI int elm_viewflipper_startAutoFlippingWithOption(int drection,int pos);
- EINA_DEPRECATED EAPI int elm_viewflipper_startAutoFlipping();
- EINA_DEPRECATED EAPI int elm_viewflipper_stopAutoFlipping();
-
/* gallery */
struct _Elm_Gallery_Item
{
EAPI void elm_slidingdrawer_max_drag_value_set(Evas_Object *obj, double dw, double dh);
EAPI void elm_slidingdrawer_drag_value_set(Evas_Object *obj, double dx, double dy);
- /* wipercontrol*/
- EINA_DEPRECATED EAPI Evas_Object *elm_wipercontrol_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_wipercontrol_below_content_set (Evas_Object *obj, Evas_Object *content);
- EINA_DEPRECATED EAPI void elm_wipercontrol_above_content_set (Evas_Object *obj, Evas_Object *content);
-
- /* AnalogClock */
- EINA_DEPRECATED EAPI Evas_Object *elm_analogclock_add(Evas_Object *parent);
-
- /* ratingbar */
- EINA_DEPRECATED EAPI Evas_Object *elm_ratingbar_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_ratingbar_rating_set(Evas_Object *obj, int rating);
- EINA_DEPRECATED EAPI int elm_ratingbar_rating_get(Evas_Object *obj);
- /* smart callback called:
- * "changed" - when a rating is changed
- */
- /* available styles:
- * default
- */
-
/* multibuttonentry */
typedef struct _Multibuttonentry_Item Elm_Multibuttonentry_Item;
EAPI Evas_Object *elm_multibuttonentry_add(Evas_Object *parent);
* default
*/
- /* chronometer */
- EINA_DEPRECATED EAPI Evas_Object *elm_chronometer_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_chronometer_start(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_chronometer_stop(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_chronometer_time_set(Evas_Object *obj, int hrs, int min, int sec);
- EINA_DEPRECATED EAPI void elm_chronometer_time_get(const Evas_Object *obj, int *hrs, int *min, int *sec);
- EINA_DEPRECATED EAPI void elm_chronometer_format_set(Evas_Object *obj, Eina_Bool format);
- EINA_DEPRECATED EAPI void elm_chronometer_format_get(Evas_Object *obj, Eina_Bool *format);
-
/* dialoguegroup */
typedef struct _Dialogue_Item Dialogue_Item;
EAPI void elm_autocompleteview_match_func_set(Evas_Object *obj, elmautocompleteview_matchfunction func, void *data);
EAPI void elm_autocompleteview_text_update(Evas_Object *obj, char *text);
- /* coverflow */
- typedef struct _Coverflow_Item Elm_Coverflow_Item;
- typedef struct _Coverflow_Item_Class
- {
- void (*CoverflowItemGenFunc)(void* data, Evas_Object* obj);
- void (*CoverflowItemDelFunc)(void* data, Evas_Object* obj);
- } Elm_Coverflow_Item_Class;
-
- EINA_DEPRECATED EAPI Evas_Object *elm_coverflow_add( Evas_Object* parent );
- EINA_DEPRECATED EAPI Elm_Coverflow_Item* elm_coverflow_item_append( Evas_Object* obj, Elm_Coverflow_Item_Class* cic, void* data, void (*func)(void* data, Evas_Object* obj, void* event_info ), void* func_data );
- EINA_DEPRECATED EAPI void elm_coverflow_clear( Evas_Object* obj );
-
- /* Cabinet */
- typedef struct _Cabinet_Item Elm_Cabinet_Item;
- EINA_DEPRECATED EAPI Evas_Object *elm_cabinet_add(Evas_Object *parent);
- EINA_DEPRECATED EAPI void elm_cabinet_next(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_cabinet_prev(Evas_Object *obj);
- EINA_DEPRECATED EAPI Eina_Bool elm_cabinet_bounce_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_cabinet_bounce_set(Evas_Object *obj, Eina_Bool bounce);
- EINA_DEPRECATED EAPI Elm_Cabinet_Item *elm_cabinet_item_append(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data);
- EINA_DEPRECATED EAPI Elm_Cabinet_Item *elm_cabinet_item_prepend(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data);
- EINA_DEPRECATED EAPI const Eina_List *elm_cabinet_items_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Cabinet_Item *elm_cabinet_first_item_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Cabinet_Item *elm_cabinet_last_item_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI Elm_Cabinet_Item *elm_cabinet_selected_item_get(Evas_Object *obj);
- EINA_DEPRECATED EAPI void elm_cabinet_item_selected_set(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI void elm_cabinet_item_del(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI const char *elm_cabinet_item_label_get(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI void elm_cabinet_item_label_set(Elm_Cabinet_Item *item, const char *label);
- EINA_DEPRECATED EAPI const char *elm_cabinet_item_sub_info_get(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI void elm_cabinet_item_sub_info_set(Elm_Cabinet_Item *item, const char *sub_info);
- EINA_DEPRECATED EAPI Elm_Cabinet_Item *elm_cabinet_item_prev(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI Elm_Cabinet_Item *elm_cabinet_item_next(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI void *elm_cabinet_item_data_get(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI void elm_cabinet_item_data_set(Elm_Cabinet_Item *item, void *data);
- EINA_DEPRECATED EAPI Eina_Bool elm_cabinet_item_del_btn_disabled_get(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI void elm_cabinet_item_del_btn_disabled_set(Elm_Cabinet_Item *item, Eina_Bool disabled);
- EINA_DEPRECATED EAPI Eina_Bool elm_cabinet_item_sub_info_disabled_get(Elm_Cabinet_Item *item);
- EINA_DEPRECATED EAPI void elm_cabinet_item_sub_info_disabled_set(Elm_Cabinet_Item *item, Eina_Bool disabled);
-
/* Dayselector */
typedef enum
{
elm_bubble.c \
elm_photo.c \
elm_toolbar.c \
-elm_toolbar2.c \
elm_searchbar.c \
elm_list.c \
elm_carousel.c \
elm_mapbuf.c \
elm_picker.c \
elm_discpicker.c \
-elm_buttonpicker.c \
elm_timepicker.c \
-elm_timepicker3.c \
elm_datepicker.c \
-elm_datepicker2.c \
-elm_datepicker3.c \
elm_thumb.c \
elm_config.c \
elm_titlebar.c \
elm_actionslider.c \
elm_hor_scroller.c \
elm_autocompleteview.c \
-elm_zoomcontrols.c \
elm_controlbar.c \
-elm_viewflipper.c \
elm_gallery.c \
elm_slidingdrawer.c \
elm_wipercontrol.c \
-elm_analogclock.c \
-elm_ratingbar.c \
-elm_chronometer.c \
elm_dialoguegroup.c \
-elm_coverflow.c \
-elm_cabinet.c \
elm_dayselector.c \
elm_cnp_helper.c \
elm_cbhm_helper.c \
+++ /dev/null
-#include <Elementary.h>
-#include "elm_priv.h"
-
-/**
- * @defgroup Buttonpicker Buttonpicker
- * @ingroup Elementary
- *
- * This is a buttonpicker.
- */
-
-
-#define LONGPRESS_START_INTERVAL (0.7)
-#define UPDATE_INTERVAL (0.1)
-
-
-
-struct _Buttonpicker_Item {
- Evas_Object *buttonpicker;
- const char *label;
- void (*func)(void *data, Evas_Object *obj, void *event_info);
- void *data;
- int walking;
- int delete_me : 1;
-};
-
-typedef struct _Widget_Data Widget_Data;
-
-struct _Widget_Data {
- Evas_Object *base;
- Eina_List *items;
- Eina_List *current;
- int item_num;
- unsigned char ani_lock;
-
- Ecore_Timer *top_timer;
- bool top_pressed;
- bool top_count;
-
- Ecore_Timer *bottom_timer;
- bool bottom_pressed;
- bool bottom_count;
-};
-
-
-
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _update_buttonpicker(Evas_Object *obj);
-static void _changed(Evas_Object *obj);
-static void _item_del(Elm_Buttonpicker_Item *item);
-
-
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (wd->items) {
- Elm_Buttonpicker_Item *item;
- EINA_LIST_FREE(wd->items, item) {
- if (item->label)
- eina_stringshare_del(item->label);
- free(item);
- }
- }
- free(wd);
-}
-
-static void
-_theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _elm_theme_object_set(obj, wd->base, "buttonpicker", "base", elm_widget_style_get(obj));
- _update_buttonpicker(obj);
- _sizing_eval(obj);
-}
-
-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;
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- evas_object_size_hint_min_set(obj, minw, minh);
- evas_object_size_hint_max_set(obj, maxw, maxh);
-}
-
-static void
-_update_buttonpicker(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- const char *label = NULL;
- Elm_Buttonpicker_Item *item;
-
- if (!wd) return;
- if (wd->current) {
- item = eina_list_data_get(wd->current);
- if (item && item->label)
- label = item->label;
- }
-
- if (label)
- edje_object_part_text_set(wd->base, "elm.text", label);
-
- _sizing_eval(obj);
-}
-
-static void
-_set_next(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd || !wd->current || !wd->items) return;
- if (eina_list_count(wd->items) <= 1) return;
- wd->current = eina_list_next(wd->current);
- if (!wd->current) {
- wd->current = wd->items;
- evas_object_smart_callback_call(obj, "overflowed", eina_list_data_get(wd->current));
- }
- _update_buttonpicker(obj);
- _changed(obj);
-}
-
-static void
-_top_timer_del(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if(wd->top_timer){
- ecore_timer_del(wd->top_timer);
- wd->top_timer = NULL;
- }
- wd->top_count = FALSE;
-}
-
-static int
-_top_timer_cb(void *data)
-{
- Evas_Object *obj = (Evas_Object *)data;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return 0;
-
- if (wd->top_pressed == FALSE) {
- _top_timer_del(obj);
- return 0;
- }
-
- if(wd->top_count == FALSE){ // set the timer interval again
- wd->top_count = TRUE;
- ecore_timer_interval_set(wd->top_timer, UPDATE_INTERVAL);
- }else{
- _set_next(obj);
- }
-
- return 1;
-}
-
-static void
-_top_down(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- if (!wd) return;
-
- wd->top_pressed = TRUE;
- edje_object_signal_emit(obj, "elm,bg,top,pressed", "elm.bg.top");
- _top_timer_del(data);
- wd->top_timer = ecore_timer_add(LONGPRESS_START_INTERVAL, (void *)_top_timer_cb, data);
-}
-
-static void
-_top_up(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- if (!wd ) return;
-
- wd->top_pressed = FALSE;
- edje_object_signal_emit(obj, "elm,bg,top,released", "elm.bg.top");
- _top_timer_del(data);
- _set_next(data);
-}
-
-
-static void
-_set_prev(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd || !wd->current || !wd->items) return;
- if (eina_list_count(wd->items) <= 1) return;
- if (wd->current == wd->items) {
- wd->current = eina_list_last(wd->items);
- evas_object_smart_callback_call(obj, "underflowed", eina_list_data_get(wd->current));
- } else {
- wd->current = eina_list_prev(wd->current);
- }
- _update_buttonpicker(obj);
- _changed(obj);
-}
-
-static void
-_bottom_timer_del(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if(wd->bottom_timer){
- ecore_timer_del(wd->bottom_timer);
- wd->bottom_timer = NULL;
- }
- wd->bottom_count = FALSE;
-}
-
-static int
-_bottom_timer_cb(void *data)
-{
- Evas_Object *obj = (Evas_Object *)data;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return 0;
-
- if (wd->bottom_pressed == FALSE) {
- _bottom_timer_del(obj);
- return 0;
- }
-
- if(wd->bottom_count == FALSE){ // set the timer interval again
- wd->bottom_count = TRUE;
- ecore_timer_interval_set(wd->bottom_timer, UPDATE_INTERVAL);
- }else{
- _set_prev(obj);
- }
-
- return 1;
-}
-
-static void
-_bottom_down(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- if (!wd) return;
-
- wd->bottom_pressed = TRUE;
- edje_object_signal_emit(obj, "elm,bg,bottom,pressed", "elm.bg.bottom");
- _bottom_timer_del(data);
- wd->bottom_timer = ecore_timer_add(LONGPRESS_START_INTERVAL, (void *)_bottom_timer_cb, data);
-}
-
-static void
-_bottom_up(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- if (!wd) return;
-
- wd->bottom_pressed = FALSE;
- edje_object_signal_emit(obj, "elm,bg,bottom,released", "elm.bg.bottom");
- _bottom_timer_del(data);
- _set_prev(data);
-}
-
-static void
-_changed(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- Elm_Buttonpicker_Item *item;
- if (!wd || !wd->current) return;
-
- item = eina_list_data_get(wd->current);
- if (!item) return;
-
- item->walking++;
-
- if (item->func)
- item->func(item->data, obj, item);
- if (!item->delete_me)
- evas_object_smart_callback_call(obj, "changed", eina_list_data_get(wd->current));
-
- item->walking--;
-
- if (!item->walking && item->delete_me)
- _item_del(item);
-}
-
-static void
-_item_del(Elm_Buttonpicker_Item *item)
-{
- Eina_List *l;
- Elm_Buttonpicker_Item *_item;
- Widget_Data *wd;
-
- wd = elm_widget_data_get(item->buttonpicker);
- if (!wd) return;
-
- EINA_LIST_FOREACH(wd->items, l, _item) {
- if (_item == item) {
- if (wd->current == l)
- wd->current = eina_list_prev(wd->current);
- wd->items = eina_list_remove(wd->items, _item);
- if (!wd->current)
- wd->current = wd->items;
- _update_buttonpicker(item->buttonpicker);
- free(_item);
- break;
- }
- }
-}
-
-/**
- * Add a new buttonpicker to the parent
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Buttonpicker
- */
-EAPI Evas_Object *
-elm_buttonpicker_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- elm_widget_type_set(obj, "buttonpicker");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
-
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
-
- wd->base = edje_object_add(e);
- _elm_theme_object_set(obj, wd->base, "buttonpicker", "base", "default");
- elm_widget_resize_object_set(obj, wd->base);
-
- wd->top_pressed = FALSE;
- wd->top_count = FALSE;
- wd->bottom_pressed = FALSE;
- wd->bottom_count = FALSE;
-
- edje_object_signal_callback_add(wd->base, "mouse,down,1", "elm.bg.top", _top_down, obj);
- edje_object_signal_callback_add(wd->base, "mouse,up,1", "elm.bg.top", _top_up, obj);
- edje_object_signal_callback_add(wd->base, "mouse,down,1", "elm.bg.bottom", _bottom_down, obj);
- edje_object_signal_callback_add(wd->base, "mouse,up,1", "elm.bg.bottom", _bottom_up, obj);
-
- _sizing_eval(obj);
- return obj;
-}
-
-/**
- * Select next item of buttonpicker
- *
- * @param obj The buttonpicker object
- *
- * @ingroup Buttonpicker
- */
-EAPI void
-elm_buttonpicker_next(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _top_up(obj, wd->base, "mouse,up,1", "elm.bg.top");
-}
-
-/**
- * Select previous item of buttonpicker
- *
- * @param obj The buttonpicker object
- *
- * @ingroup Buttonpicker
- */
-EAPI void
-elm_buttonpicker_prev(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _bottom_up(obj, wd->base, "mouse,up,1", "elm.bg.bottom");
-}
-
-/**
- * Append item to the end of buttonpicker
- *
- * @param obj The buttonpicker object
- * @param label The label of new item
- * @param func Convenience function called when item selected
- * @param data Data passed to @p func above
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Buttonpicker
- */
-EAPI Elm_Buttonpicker_Item *
-elm_buttonpicker_item_append(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data)
-{
- Elm_Buttonpicker_Item *item;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- item = ELM_NEW(Elm_Buttonpicker_Item);
- if (item) {
- if (label)
- item->label = eina_stringshare_add(label);
- item->func = func;
- item->data = data;
- item->buttonpicker = obj;
- wd->items = eina_list_append(wd->items, item);
- if (!wd->current) {
- wd->current = wd->items;
- _update_buttonpicker(obj);
- }
- }
- return item;
-}
-
-/**
- * Prepend item at start of buttonpicker
- *
- * @param obj The buttonpicker object
- * @param label The label of new item
- * @param func Convenience function called when item selected
- * @param data Data passed to @p func above
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Buttonpicker
- */
-EAPI Elm_Buttonpicker_Item *
-elm_buttonpicker_item_prepend(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data)
-{
- Elm_Buttonpicker_Item *item;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- item = ELM_NEW(Elm_Buttonpicker_Item);
- if (item) {
- if (label)
- item->label = eina_stringshare_add(label);
- item->func = func;
- item->data = data;
- item->buttonpicker = obj;
- wd->items = eina_list_prepend(wd->items, item);
- if (!wd->current) {
- wd->current = wd->items;
- _update_buttonpicker(obj);
- }
- }
- return item;
-}
-
-/**
- * Get a list of items in the buttonpicker
- *
- * @param obj The buttonpicker object
- * @return The list of items, or NULL if none
- *
- * @ingroup Buttonpicker
- */
-EAPI const Eina_List *
-elm_buttonpicker_items_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- return wd->items;
-}
-
-/**
- * Get the first item in the buttonpicker
- *
- * @param obj The buttonpicker object
- * @return The first item, or NULL if none
- *
- * @ingroup Buttonpicker
- */
-EAPI Elm_Buttonpicker_Item *
-elm_buttonpicker_first_item_get(Evas_Object *obj)
-{
- Widget_Data *wd;
-
- if (!obj) return NULL;
- wd = elm_widget_data_get(obj);
- if (!wd || !wd->items) return NULL;
- return eina_list_data_get(wd->items);
-}
-
-/**
- * Get the last item in the buttonpicker
- *
- * @param obj The buttonpicker object
- * @return The last item, or NULL if none
- *
- * @ingroup Buttonpicker
- */
-EAPI Elm_Buttonpicker_Item *
-elm_buttonpicker_last_item_get(Evas_Object *obj)
-{
- Widget_Data *wd;
- if (!obj) return NULL;
- wd = elm_widget_data_get(obj);
- if (!wd || !wd->items) return NULL;
- return eina_list_data_get(eina_list_last(wd->items));
-}
-
-/**
- * Get the selected item in the buttonpicker
- *
- * @param obj The buttonpicker object
- * @return The selected item, or NULL if none
- *
- * @ingroup Buttonpicker
- */
-EAPI Elm_Buttonpicker_Item *
-elm_buttonpicker_selected_item_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd || !wd->current) return NULL;
- return eina_list_data_get(wd->current);
-}
-
-/**
- * Set the selected state of an item
- *
- * @param item The item
- *
- * @ingroup Buttonpicker
- */
-EAPI void
-elm_buttonpicker_item_selected_set(Elm_Buttonpicker_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Buttonpicker_Item *_item;
-
- if (!item) return;
- wd = elm_widget_data_get(item->buttonpicker);
- if (!wd) return;
-
- EINA_LIST_FOREACH(wd->items, l, _item) {
- if (_item == item) {
- wd->current = l;
- _update_buttonpicker(item->buttonpicker);
- }
- }
-}
-
-/**
- * Delete a given item
- *
- * @param item The item
- *
- * @ingroup Buttonpicker
- */
-EAPI void
-elm_buttonpicker_item_del(Elm_Buttonpicker_Item *item)
-{
- if (!item) return;
- if (item->walking > 0)
- item->delete_me = EINA_TRUE;
- else
- _item_del(item);
-}
-
-/**
- * Get the label of a given item
- *
- * @param item The item
- * @return The label of a given item, or NULL if none
- *
- * @ingroup Buttonpicker
- */
-EAPI const char *
-elm_buttonpicker_item_label_get(Elm_Buttonpicker_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Buttonpicker_Item *_item;
-
- if (!item) return NULL;
- wd = elm_widget_data_get(item->buttonpicker);
- if (!wd || !wd->items) return NULL;
-
- EINA_LIST_FOREACH(wd->items, l, _item)
- if (_item == item)
- return item->label;
-
- return NULL;
-}
-
-/**
- * Set the label of a given item
- *
- * @param item The item
- * @param label The text label string in UTF-8
- *
- * @ingroup Buttonpicker
- */
-EAPI void
-elm_buttonpicker_item_label_set(Elm_Buttonpicker_Item *item, const char *label)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Buttonpicker_Item *_item;
-
- if (!item || !label) return;
- wd = elm_widget_data_get(item->buttonpicker);
- if (!wd || !wd->items) return;
-
- EINA_LIST_FOREACH(wd->items, l, _item)
- if (_item == item) {
- eina_stringshare_del(item->label);
- item->label = eina_stringshare_add(label);
- _update_buttonpicker(item->buttonpicker);
- }
-}
-
-/**
- * Get the previous item in the buttonpicker
- *
- * @param item The item
- * @return The item before the item @p item
- *
- * @ingroup Buttonpicker
- */
-EAPI Elm_Buttonpicker_Item *
-elm_buttonpicker_item_prev(Elm_Buttonpicker_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Buttonpicker_Item *_item;
-
- if (!item) return NULL;
- wd = elm_widget_data_get(item->buttonpicker);
- if (!wd || !wd->items) return NULL;
-
- EINA_LIST_FOREACH(wd->items, l, _item)
- if (_item == item) {
- l = eina_list_prev(l);
- if (!l) return NULL;
- return eina_list_data_get(l);
- }
- return NULL;
-}
-
-/**
- * Get the next item in the buttonpicker
- *
- * @param item The item
- * @return The item after the item @p item
- *
- * @ingroup Buttonpicker
- */
-EAPI Elm_Buttonpicker_Item *
-elm_buttonpicker_item_next(Elm_Buttonpicker_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Buttonpicker_Item *_item;
-
- if (!item) return NULL;
- wd = elm_widget_data_get(item->buttonpicker);
- if (!wd || !wd->items) return NULL;
-
- EINA_LIST_FOREACH(wd->items, l, _item)
- if (_item == item) {
- l = eina_list_next(l);
- if (!l) return NULL;
- return eina_list_data_get(l);
- }
- return NULL;
-}
+++ /dev/null
-#include <Elementary.h>
-#include <math.h>
-#include "elm_priv.h"
-
-#define CELL_ITEM_NUMS (9)
-#define PI (3.141592)
-#define RADIAN_STEP (PI/14)
-#define MOUSE_MOVE_SAMPLE (5)
-#define SCALE_DOWN_FACTOR (0.25)
-#define VISIBLE_CONTENT_NUMS (2)
-#define DEF_ITEM_HEIGHT (74)
-#define FRAME_RATE (0.03)
-#define V_MIN (50)
-#define ITEM_DEL_MOVE_DISTANCE (30)
-
-//#define SCALE_DOWN_FACTOR (0.125)
-
-/**
- * @defgroup Cabinet Cabinet
- * @ingroup Elementary
- *
- * This is a cabinet.
- */
-struct _Cabinet_Item {
- Evas_Object *cabinet;
- const char *label;
- const char *sub_info;
- void (*func)(void *data, Evas_Object *obj, void *event_info);
- void *data;
- void *priv_data;
- int btn_disabled : 1;
- int info_disabled : 1;
-};
-
-typedef struct _Widget_Data Widget_Data;
-struct _Widget_Data {
- Evas_Object *base;
- Evas_Object *clip;
- Evas_Object *cover;
-
- Eina_List *its;
- Eina_List *cur;
- Eina_List *cells;
- Evas_Coord x, y, w, h;
- double rad_step, rad_gap, rad_tmp;
- double v;
- Evas_Coord d, item_d, item_h;
- int item_cnt;
-
- unsigned int prev_evt_t;
- Evas_Coord prev_evt_y;
- Evas_Coord_Point down_point;
- Elm_Animator *ani;
- Ecore_Timer *scroll_ani;
-
- int bounce_enable : 1;
- int bounce_flag : 1;
- int item_del_flag : 1;
- int dragged : 1;
-};
-
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _mouse_init(Evas_Object *obj);
-
-static void _mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
-
-static Eina_List *_cells_add(Evas_Object *obj);
-static void _cells_del(Evas_Object *obj);
-static void _cells_update(Evas_Object *obj);
-static double _rad_next_get(Widget_Data *wd, double rad, Evas_Coord_Rectangle *pos);
-static void _items_reorder(Evas_Object *obj);
-
-static void _ani_stop_all(Evas_Object *obj);
-static void _ani_bounce_cb(void *data, Elm_Animator *animator, double frame);
-static void _ani_bounce_done_cb(void *data);
-static void _bounce(Evas_Object *obj);
-static Eina_Bool _ani_scroll_cb(void *data);
-static void _scroll(Evas_Object *obj);
-static void _ani_item_del_cb(void *data, Elm_Animator *animator, double frame);
-static void _ani_item_del_done_cb(void *data);
-static void _item_del(Evas_Object *obj, Evas_Object *item);
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- Elm_Cabinet_Item *it;
-
- if (!wd) return;
-
- _ani_stop_all(obj);
- if (wd->its) {
- EINA_LIST_FREE(wd->its, it) {
- if (it->label) eina_stringshare_del(it->label);
- free(it);
- }
- }
- free(wd);
-}
-
-static void
-_theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _elm_theme_object_set(obj, wd->base, "cabinet", "base", elm_widget_style_get(obj));
- _sizing_eval(obj);
-}
-
-static void
-_sizing_eval(Evas_Object *obj)
-{
- int it_cnt;
- Widget_Data *wd = elm_widget_data_get(obj);
- Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
-
- if (!wd) return;
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- evas_object_size_hint_min_set(obj, minw, minh);
- evas_object_size_hint_max_set(obj, maxw, maxh);
-
- evas_object_geometry_get(obj, &wd->x, &wd->y, &wd->w, &wd->h);
- wd->item_h = DEF_ITEM_HEIGHT * elm_scale_get();
- if (!wd->h) return;
-
- wd->rad_step = asin((double)wd->item_h / wd->h);
- if (!wd->rad_step) return;
- it_cnt = (PI / 2) / wd->rad_step;
- if (wd->item_cnt != it_cnt) {
- _cells_del(obj);
- wd->item_cnt = it_cnt;
- wd->cells = _cells_add(obj);
- _cells_update(obj);
- }
-
- wd->item_d = (Evas_Coord) (2 * wd->h * (sin(wd->rad_step / 2)));
- _cells_update(obj);
-}
-
-static void
-_mouse_init(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- evas_object_event_callback_add(wd->base, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, obj);
- evas_object_event_callback_add(wd->base, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, obj);
- evas_object_event_callback_add(wd->base, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, obj);
-}
-
-static void
-_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Event_Mouse_Down *ev = event_info;
-
- if (!wd || wd->item_del_flag) return;
-
- if (wd->ani) {
- elm_animator_del(wd->ani);
- wd->ani = NULL;
- }
-
- if (wd->scroll_ani) {
- ecore_timer_del(wd->scroll_ani);
- wd->scroll_ani = NULL;
- }
-
- wd->d = 0;
- wd->prev_evt_t = ev->timestamp;
- wd->prev_evt_y = ev->canvas.y;
-
- wd->dragged = 0;
- wd->down_point.x = ev->canvas.x;
- wd->down_point.y = ev->canvas.y;
-}
-
-static void
-_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- unsigned int t;
- Evas_Coord d;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Event_Mouse_Up *ev = event_info;
-
- if (!wd || wd->item_del_flag) return;
-
- t = ev->timestamp - wd->prev_evt_t;
- d = ev->canvas.y - wd->prev_evt_y;
-
- if (wd->bounce_flag || t <= 0) {
- _bounce(data);
- } else {
- wd->d = -d;
- wd->v = (double)(wd->d) / (double)t * 1000;
- if (wd->v < V_MIN && wd->v > -V_MIN)
- wd->v = wd->v < 0 ? V_MIN : -V_MIN;
- _scroll(data);
- }
- wd->prev_evt_t = 0;
- wd->prev_evt_y = 0;
-}
-
-static void
-_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Event_Mouse_Move *ev = event_info;
- unsigned int t;
- Evas_Coord d;
- Evas_Coord x, y, distance;
- static int sample = MOUSE_MOVE_SAMPLE;
-
- if (!wd) return;
-
- if (!wd->dragged) {
- x = ev->cur.canvas.x - wd->down_point.x;
- y = ev->cur.canvas.y - wd->down_point.y;
- distance = (x * x) + (y * y);
- if (distance >= (elm_finger_size_get() >> 1)) wd->dragged = 1;
- }
-
- if (sample) {
- sample--;
- return;
- }
- sample = MOUSE_MOVE_SAMPLE;
-
- if (wd->item_del_flag || !ev->timestamp) return;
-
- if (wd->prev_evt_t) {
- t = ev->timestamp - wd->prev_evt_t;
- d = ev->cur.canvas.y - wd->prev_evt_y;
- wd->d -= d;
- _items_reorder(data);
- wd->rad_gap = wd->rad_step * ((double)wd->d / (double)wd->item_d);
- _cells_update(data);
- }
- wd->prev_evt_t = ev->timestamp;
- wd->prev_evt_y = ev->cur.canvas.y;
-}
-
-static void
-_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- _sizing_eval(data);
-}
-
-static void
-_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- _sizing_eval(data);
-}
-
-static void
-_item_del_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- if (!wd || wd->item_del_flag || wd->dragged) return;
- _ani_stop_all(data);
- _item_del(data, obj);
-
-}
-
-static void
-_item_sel_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- Elm_Cabinet_Item *it;
-
- if (!wd) return;
- if (wd->dragged) return;
-
- it = evas_object_data_get(obj, "item");
- if (it && it->func) {
- it->func(it->data, it->cabinet, it);
- }
-}
-
-static Eina_List *
-_cells_add(Evas_Object *obj)
-{
- int i;
- Evas *e;
- Eina_List *cells = NULL;
- Evas_Object *eo;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- e = evas_object_evas_get(obj);
- for (i = 0; i < wd->item_cnt; i++) {
- eo = edje_object_add(e);
- _elm_theme_object_set(obj, eo, "cabinet/item", "base", elm_widget_style_get(obj));
- edje_object_signal_callback_add(eo, "elm,action,del", "*", _item_del_cb, obj);
- edje_object_signal_callback_add(eo, "elm,action,clicked", "*", _item_sel_cb, obj);
- cells = eina_list_append(cells, eo);
- elm_widget_sub_object_add(obj, eo);
- evas_object_smart_member_add(eo, obj);
- evas_object_clip_set(eo, wd->clip);
- evas_object_stack_below(eo, wd->base);
- }
- return cells;
-}
-
-static void
-_cells_del(Evas_Object *obj)
-{
- Evas_Object *eo;
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd || !wd->cells) return;
- EINA_LIST_FREE(wd->cells, eo) evas_object_del(eo);
-}
-
-static void
-_cells_update(Evas_Object *obj)
-{
- int color;
- double rad;
- Eina_List *l, *data;
- Evas_Object *eo;
- Elm_Cabinet_Item *it;
- Widget_Data *wd = elm_widget_data_get(obj);
- Evas_Coord_Rectangle pos = {0, };
-
- if (!wd || !wd->cells) return;
- data = wd->cur;
- rad = wd->rad_gap;
-
- EINA_LIST_REVERSE_FOREACH(wd->cells, l, eo) {
- rad = _rad_next_get(wd, rad, &pos);
- evas_object_move(eo, pos.x, pos.y);
- evas_object_resize(eo, pos.w, wd->item_h);
-
- if (wd->h - wd->item_h) color = 255 * ((double)pos.y / (wd->h - wd->item_h));
- else color = 255;
- evas_object_color_set(eo, color, color, color, 255);
-
- if (data) {
- it = eina_list_data_get(data);
- edje_object_part_text_set(eo, "elm.label", it->label);
- edje_object_part_text_set(eo, "elm.info_label", it->info_disabled ? NULL : it->sub_info);
- edje_object_signal_emit(eo, it->btn_disabled ? "info_disable" : "info_enable", "elm");
- data = eina_list_next(data);
- evas_object_show(eo);
- evas_object_data_set(eo, "item", it);
- } else {
- evas_object_hide(eo);
- evas_object_data_set(eo, "item", NULL);
- }
- }
-}
-
-static double
-_rad_next_get(Widget_Data *wd, double rad, Evas_Coord_Rectangle *pos)
-{
- if (rad >= 0) pos->w = wd->w * (cos(rad / 2));
- else pos->w = wd->w;
- rad += wd->rad_step;
- pos->y = (wd->h * (1 - sin(rad))) + wd->y;
- pos->x = wd->x + ((wd->w - pos->w) >> 1);
- return rad;
-}
-
-static void
-_items_reorder(Evas_Object *obj)
-{
- Eina_List *l;
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if ((wd->d > 0 && wd->cur == wd->its)
- || (wd->d < 0 && wd->cur == eina_list_last(wd->its))) {
- if (wd->bounce_enable)
- wd->bounce_flag = 1;
- else
- wd->d = 0;
- return;
- }
- wd->bounce_flag = 0;
-
- l = wd->cur;
- if (wd->d > 0) {
- do {
- if (l) l = eina_list_prev(l);
- wd->d -= wd->item_d;
- } while (wd->d > 0);
- } else if (wd->d <= -wd->item_d) {
- do {
- l = eina_list_next(l);
- if (!l) break;
- wd->d += wd->item_d;
- } while (wd->d <= -wd->item_d);
- wd->d = 0;
- }
-
- if (l) wd->cur = l;
- return;
-}
-
-
-static void
-_ani_stop_all(Evas_Object *obj)
-{
- Widget_Data *wd;
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (wd->ani) {
- elm_animator_del(wd->ani);
- wd->ani = NULL;
- }
-
- if (wd->scroll_ani) {
- ecore_timer_del(wd->scroll_ani);
- wd->scroll_ani = NULL;
- }
-}
-
-static void
-_ani_bounce_cb(void *data, Elm_Animator *animator, double frame)
-{
- Widget_Data *wd;
- wd = elm_widget_data_get(data);
- if (!wd) return;
-
- wd->rad_gap = wd->rad_tmp * (1 - frame);
- _cells_update(data);
-}
-
-static void
-_ani_bounce_done_cb(void *data)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- wd->item_del_flag = 0;
- wd->rad_gap = 0;
- if (wd->ani) {
- elm_animator_del(wd->ani);
- wd->ani = NULL;
- }
-
- if (wd->cur)
- evas_object_smart_callback_call(data, "changed", wd->cur ? eina_list_data_get(wd->cur) : NULL);
-}
-
-static void
-_bounce(Evas_Object *obj)
-{
- double dur;
- Widget_Data *wd;
- wd = elm_widget_data_get(obj);
- if (!wd || !wd->d) {
- wd->item_del_flag = 0;
- return;
- }
-
- if (wd->item_del_flag) dur = 0.2;
- else dur = 0.5;
-
- wd->d = 0;
- wd->rad_tmp = wd->rad_gap;
- if (wd->ani) elm_animator_del(wd->ani);
- wd->ani = elm_animator_add(obj);
- elm_animator_curve_style_set(wd->ani, ELM_ANIMATOR_CURVE_OUT);
- elm_animator_duration_set(wd->ani, dur);
- elm_animator_operation_callback_set(wd->ani, _ani_bounce_cb, obj);
- elm_animator_completion_callback_set(wd->ani, _ani_bounce_done_cb, obj);
- elm_animator_animate(wd->ani);
-}
-
-static Eina_Bool
-_ani_scroll_cb(void *data)
-{
- Widget_Data *wd;
- Evas_Coord d;
- wd = elm_widget_data_get(data);
- if (!wd) return 0;
-
- d = wd->v * FRAME_RATE;
- wd->d += d;
-
- if (wd->v > (V_MIN >> 1) || wd->v < (-V_MIN >> 1)) {
- if (wd->cur == eina_list_last(wd->its) || wd->cur == wd->its)
- wd->v *= 0.5;
- else
- wd->v *= 0.9;
- } else {
- wd->scroll_ani = NULL;
- _bounce(data);
- return 0;
- }
-
- _items_reorder(data);
- wd->rad_gap = wd->rad_step * ((double)wd->d / (double)wd->item_d);
- _cells_update(data);
-
- return 1;
-}
-
-static void
-_scroll(Evas_Object *obj)
-{
- Widget_Data *wd;
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
-
- if (wd->ani) {
- elm_animator_del(wd->ani);
- wd->ani = NULL;
- }
-
- if (wd->scroll_ani) ecore_timer_del(wd->scroll_ani);
- wd->scroll_ani = ecore_timer_add(FRAME_RATE, _ani_scroll_cb, obj);
-}
-
-static void
-_ani_item_del_cb(void *data, Elm_Animator *animator, double frame)
-{
- Evas_Object *it = data;
- int color;
- Evas_Coord x, y;
- x = (Evas_Coord)evas_object_data_get(it, "X");
- y = (Evas_Coord)evas_object_data_get(it, "Y");
-
- if (frame == 1) {
- evas_object_color_set(it, 255, 255, 255, 255);
- } else {
- y -= ITEM_DEL_MOVE_DISTANCE * elm_scale_get() * frame;
- evas_object_move(it, x, y);
- color = 255 * (1 - frame);
- evas_object_color_set(it, color, color, color, color);
- }
-}
-
-static void
-_ani_item_del_done_cb(void *data)
-{
- Evas_Object *obj;
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *it, *_it;
- it = data;
- if (!it) return;
- obj = it->cabinet;
- wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (wd->ani) {
- elm_animator_del(wd->ani);
- wd->ani = NULL;
- }
-
- EINA_LIST_FOREACH(wd->its, l, _it) {
- if (_it == it) {
- wd->its = eina_list_remove_list(wd->its, l);
- if (wd->cur == l) {
- wd->cur = eina_list_prev(l);
- if (!wd->cur) wd->cur = wd->its;
- }
- evas_object_smart_callback_call(obj, "item,deleted", _it);
- free(_it);
- break;
- }
- }
-
- _cells_update(obj);
- if (wd->cur == NULL) {
- evas_object_smart_callback_call(obj, "item,deleted,all", NULL);
- } else {
- _bounce(obj);
- }
-}
-
-static void
-_item_del(Evas_Object *obj, Evas_Object *item)
-{
- Evas_Coord x, y;
- Widget_Data *wd;
- Elm_Cabinet_Item *it;
- wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- it = evas_object_data_get(item, "item");
- if (!it) return;
- wd->item_del_flag = 1;
-
- evas_object_geometry_get(item, &x, &y, NULL, NULL);
- evas_object_data_set(item, "X", (void *)x);
- evas_object_data_set(item, "Y", (void *)y);
-
- wd->ani = elm_animator_add(obj);
- elm_animator_curve_style_set(wd->ani, ELM_ANIMATOR_CURVE_OUT);
- elm_animator_duration_set(wd->ani, 0.5);
-
- elm_animator_operation_callback_set(wd->ani, _ani_item_del_cb, item);
- elm_animator_completion_callback_set(wd->ani, _ani_item_del_done_cb, it);
- elm_animator_animate(wd->ani);
-}
-
-/**
- * Add a new cabinet to the parent
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Cabinet
- */
-EAPI Evas_Object *
-elm_cabinet_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- elm_widget_type_set(obj, "cabinet");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
-
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
-
- wd->clip = evas_object_rectangle_add(e);
- elm_widget_resize_object_set(obj, wd->clip);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize_cb, obj);
- evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move_cb, obj);
-
- wd->base = edje_object_add(e);
- _elm_theme_object_set(obj, wd->base, "cabinet", "base", "default");
- elm_widget_hover_object_set(obj, wd->base);
- evas_object_clip_set(wd->base, wd->clip);
- evas_object_smart_member_add(wd->base, obj);
- evas_object_show(wd->base);
-
- _mouse_init(obj);
- _sizing_eval(obj);
- return obj;
-}
-
-EAPI Eina_Bool
-elm_cabinet_bounce_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return EINA_FALSE;
- return wd->bounce_enable ? EINA_TRUE : EINA_FALSE;
-}
-
-EAPI void
-elm_cabinet_bounce_set(Evas_Object *obj, Eina_Bool bounce)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- wd->bounce_enable = bounce ? 1 : 0;
-}
-
-/**
- * Select next item of cabinet
- *
- * @param obj The cabinet object
- *
- * @ingroup Cabinet
- */
-EAPI void
-elm_cabinet_next(Evas_Object *obj)
-{
-}
-
-/**
- * Select previous item of cabinet
- *
- * @param obj The cabinet object
- *
- * @ingroup Cabinet
- */
-EAPI void
-elm_cabinet_prev(Evas_Object *obj)
-{
-}
-
-/**
- * Append item to the end of cabinet
- *
- * @param obj The cabinet object
- * @param label The label of new item
- * @param func Convenience function called when item selected
- * @param data Data passed to @p func above
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Cabinet
- */
-EAPI Elm_Cabinet_Item *
-elm_cabinet_item_append(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data)
-{
- Elm_Cabinet_Item *item;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- item = ELM_NEW(Elm_Cabinet_Item);
- if (item) {
- if (label) item->label = eina_stringshare_add(label);
- item->func = func;
- item->data = data;
- item->cabinet = obj;
- wd->its = eina_list_append(wd->its, item);
- if (!wd->cur) {
- wd->cur = wd->its;
- }
- _sizing_eval(obj);
- }
- return item;
-}
-
-/**
- * Prepend item at start of cabinet
- *
- * @param obj The cabinet object
- * @param label The label of new item
- * @param func Convenience function called when item selected
- * @param data Data passed to @p func above
- * @return A handle to the item added or NULL if not possible
- *
- * @ingroup Cabinet
- */
-EAPI Elm_Cabinet_Item *
-elm_cabinet_item_prepend(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data)
-{
- Elm_Cabinet_Item *item;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
-
- item = ELM_NEW(Elm_Cabinet_Item);
- if (item) {
- if (label) item->label = eina_stringshare_add(label);
- item->func = func;
- item->data = data;
- item->cabinet = obj;
- wd->its = eina_list_prepend(wd->its, item);
- if (!wd->cur) wd->cur = wd->its;
- _sizing_eval(obj);
- }
- return item;
-}
-
-/**
- * Get a list of items in the cabinet
- *
- * @param obj The cabinet object
- * @return The list of items, or NULL if none
- *
- * @ingroup Cabinet
- */
-EAPI const Eina_List *
-elm_cabinet_items_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- return wd->its;
-}
-
-/**
- * Get the first item in the cabinet
- *
- * @param obj The cabinet object
- * @return The first item, or NULL if none
- *
- * @ingroup Cabinet
- */
-EAPI Elm_Cabinet_Item *
-elm_cabinet_first_item_get(Evas_Object *obj)
-{
- Widget_Data *wd;
- if (!obj) return NULL;
- wd = elm_widget_data_get(obj);
- if (!wd || !wd->its) return NULL;
- return eina_list_data_get(wd->its);
-}
-
-/**
- * Get the last item in the cabinet
- *
- * @param obj The cabinet object
- * @return The last item, or NULL if none
- *
- * @ingroup Cabinet
- */
-EAPI Elm_Cabinet_Item *
-elm_cabinet_last_item_get(Evas_Object *obj)
-{
- Widget_Data *wd;
- if (!obj) return NULL;
- wd = elm_widget_data_get(obj);
- if (!wd || !wd->its) return NULL;
- return eina_list_data_get(eina_list_last(wd->its));
-}
-
-/**
- * Get the selected item in the cabinet
- *
- * @param obj The cabinet object
- * @return The selected item, or NULL if none
- *
- * @ingroup Cabinet
- */
-EAPI Elm_Cabinet_Item *
-elm_cabinet_selected_item_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd || !wd->cur) return NULL;
- return eina_list_data_get(wd->cur);
-}
-
-/**
- * Set the selected state of an item
- *
- * @param item The item
- *
- * @ingroup Cabinet
- */
-EAPI void
-elm_cabinet_item_selected_set(Elm_Cabinet_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item) return;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd) return;
-
- EINA_LIST_FOREACH(wd->its, l, _item) {
- if (_item == item) {
- ;
- //TODO: NOT YET
- }
- }
-}
-
-/**
- * Delete a given item
- *
- * @param item The item
- *
- * @ingroup Cabinet
- */
-EAPI void
-elm_cabinet_item_del(Elm_Cabinet_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item) return;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd) return;
-
- EINA_LIST_FOREACH(wd->its, l, _item) {
- if (_item == item) {
- wd->its = eina_list_remove_list(wd->its, l);
- if (wd->cur == l)
- wd->cur = wd->its;
- free(_item);
- break;
- }
- }
-}
-
-/**
- * Get the label of a given item
- *
- * @param item The item
- * @return The label of a given item, or NULL if none
- *
- * @ingroup Cabinet
- */
-EAPI const char *
-elm_cabinet_item_label_get(Elm_Cabinet_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item) return NULL;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd || !wd->its) return NULL;
-
- EINA_LIST_FOREACH(wd->its, l, _item)
- if (_item == item)
- return item->label;
-
- return NULL;
-}
-
-/**
- * Set the label of a given item
- *
- * @param item The item
- * @param label The text label string in UTF-8
- *
- * @ingroup Cabinet
- */
-EAPI void
-elm_cabinet_item_label_set(Elm_Cabinet_Item *item, const char *label)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item || !label) return;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd || !wd->its) return;
-
- EINA_LIST_FOREACH(wd->its, l, _item)
- if (_item == item) {
- eina_stringshare_del(item->label);
- item->label = eina_stringshare_add(label);
- }
-}
-
-/**
- * Get the sub info of a given item
- *
- * @param item The item
- * @return The label of a given item, or NULL if none
- *
- * @ingroup Cabinet
- */
-EAPI const char *
-elm_cabinet_item_sub_info_get(Elm_Cabinet_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item) return NULL;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd || !wd->its) return NULL;
-
- EINA_LIST_FOREACH(wd->its, l, _item)
- if (_item == item)
- return item->sub_info;
-
- return NULL;
-}
-
-/**
- * Set the sub info of a given item
- *
- * @param item The item
- * @param label The text label string in UTF-8
- *
- * @ingroup Cabinet
- */
-EAPI void
-elm_cabinet_item_sub_info_set(Elm_Cabinet_Item *item, const char *sub_info)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item || !sub_info) return;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd || !wd->its) return;
-
- EINA_LIST_FOREACH(wd->its, l, _item)
- if (_item == item) {
- eina_stringshare_del(item->sub_info);
- item->sub_info = eina_stringshare_add(sub_info);
- }
-}
-
-/**
- * Get the previous item in the cabinet
- *
- * @param item The item
- * @return The item before the item @p item
- *
- * @ingroup Cabinet
- */
-EAPI Elm_Cabinet_Item *
-elm_cabinet_item_prev(Elm_Cabinet_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item) return NULL;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd || !wd->its) return NULL;
-
- EINA_LIST_FOREACH(wd->its, l, _item)
- if (_item == item) {
- l = eina_list_prev(l);
- if (!l) return NULL;
- return eina_list_data_get(l);
- }
- return NULL;
-}
-
-/**
- * Get the next item in the cabinet
- *
- * @param item The item
- * @return The item after the item @p item
- *
- * @ingroup Cabinet
- */
-EAPI Elm_Cabinet_Item *
-elm_cabinet_item_next(Elm_Cabinet_Item *item)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Cabinet_Item *_item;
-
- if (!item) return NULL;
- wd = elm_widget_data_get(item->cabinet);
- if (!wd || !wd->its) return NULL;
-
- EINA_LIST_FOREACH(wd->its, l, _item)
- if (_item == item) {
- l = eina_list_next(l);
- if (!l) return NULL;
- return eina_list_data_get(l);
- }
- return NULL;
-}
-
-/**
- * Get private data of item
- *
- * @param item The item
- * @return Private data of the item @p item
- *
- * @ingroup Cabinet
- */
-EAPI void *
-elm_cabinet_item_data_get(Elm_Cabinet_Item *item)
-{
- if (!item) return NULL;
- return item->priv_data;
-}
-
-/**
- * Set private data of item
- *
- * @param item The item
- * @param data data
- *
- * @ingroup Cabinet
- */
-EAPI void
-elm_cabinet_item_data_set(Elm_Cabinet_Item *item, void *data)
-{
- if (!item) return;
- item->priv_data = data;
-}
-
-EAPI Eina_Bool
-elm_cabinet_item_del_btn_disabled_get(Elm_Cabinet_Item *item)
-{
- if (!item) return EINA_FALSE;
- return item->btn_disabled ? EINA_TRUE : EINA_FALSE;
-}
-
-EAPI void
-elm_cabinet_item_del_btn_disabled_set(Elm_Cabinet_Item *item, Eina_Bool disabled)
-{
- if (!item) return;
-
- if (item->btn_disabled == !!disabled) return;
- item->btn_disabled = !!disabled;
- _cells_update(item->cabinet);
-}
-
-EAPI Eina_Bool
-elm_cabinet_item_sub_info_disabled_get(Elm_Cabinet_Item *item)
-{
- if (!item) return EINA_FALSE;
- return item->info_disabled ? EINA_TRUE : EINA_FALSE;
-}
-
-EAPI void
-elm_cabinet_item_sub_info_disabled_set(Elm_Cabinet_Item *item, Eina_Bool disabled)
-{
- if (!item) return;
-
- if (item->info_disabled == !!disabled) return;
- item->info_disabled = !!disabled;
- _cells_update(item->cabinet);
-}
+++ /dev/null
-#include <Elementary.h>
-#include "elm_priv.h"
-
-/**
- * @defgroup Chronometer Chronometer
- * @ingroup Elementary
- *
- * It's a widget to show chronometer.
- *
- */
-
-typedef struct _Widget_Data Widget_Data;
-
-struct _Widget_Data
-{
- int sec1, sec2;
- Evas_Object *chronometer;
- Ecore_Timer *ticker;
- struct
- {
- int hrs, min, sec;
- Eina_Bool format: 1;
- Eina_Bool run: 1;
- } cur;
-};
-
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static Eina_Bool _ticker(void *data);
-static void _signal_chronometer_val_changed(void *data,Evas_Object *obj,const char *emission,const char *source);
-static void _time_update(Evas_Object *obj);
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (wd->ticker) ecore_timer_del(wd->ticker);
-
- free(wd);
-}
-
-static void
-_theme_hook(Evas_Object *obj)
-{
- _time_update(obj);
-}
-
-static Eina_Bool
-_ticker(void *data)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- double t;
- struct timeval timev;
- struct tm *tm;
- time_t tt;
-
- gettimeofday(&timev, NULL);
- t = ((double)(1000000 - timev.tv_usec)) / 1000000.0;
- wd->ticker = ecore_timer_add(t, _ticker, data);
-
- tt=(time_t)(timev.tv_sec);
- tzset();
- tm=localtime(&tt);
- if(tm)
- {
- wd->sec1=tm->tm_sec;
- _time_update(data);
- }
- return 0;
-}
-
-/*
- * FIXME:
- */
-static void
-_signal_chronometer_val_changed(void *data,Evas_Object *obj,const char *emission,const char *source)
-{
-// Widget_Data *wd=elm_widget_data_get(data);
-
- evas_object_smart_callback_call(data,"changed",NULL);
-}
-
-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;
- Evas_Coord w, h;
-
- if (!wd) return;
-
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- edje_object_size_min_restricted_calc(wd->chronometer, &minw, &minh, minw, minh);
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
-
- evas_object_size_hint_min_get(obj, &w, &h);
- if (w > minw) minw = w;
- if (h > minw) minh = h;
-
- evas_object_size_hint_min_set(obj, minw, minh);
- evas_object_size_hint_max_set(obj, maxw, maxh);
-}
-
-static void
-_time_update(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- const char *style = elm_widget_style_get(obj);
- char buf1[9], buf2[7];
-
- if(wd->sec1==wd->sec2)
- return 0;
-
- wd->sec2 = wd->sec1;
-
- _elm_theme_object_set(obj,wd->chronometer, "chronometer", "base", style);
-
- if(wd->cur.run)
- wd->cur.sec++;
-
- if(wd->cur.sec==60){
- wd->cur.min++;
- if(wd->cur.min==60){
- wd->cur.hrs++;
- if(wd->cur.hrs==100)
- wd->cur.hrs=0;
- wd->cur.min=0;
- }
- wd->cur.sec=0;
- }
-
- if (wd->cur.format) {
- snprintf(buf1,sizeof(buf1),"%02d:%02d:%02d",wd->cur.hrs,wd->cur.min,wd->cur.sec);
- edje_object_part_text_set(wd->chronometer,"digit",buf1);
- }
- else {
- snprintf(buf2,sizeof(buf2),"%02d:%02d",wd->cur.min,wd->cur.sec);
- edje_object_part_text_set(wd->chronometer,"digit",buf2);
- }
-
-}
-
-/**
- * Add a new chronometer to the parent
- *
- * @param parent The parent object
- *
- * This function inserts a chronometer widget on a given canvas.
- *
- * @ingroup Chronometer
- */
-EAPI Evas_Object *
-elm_chronometer_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- elm_widget_type_set(obj, "chronometer");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
-
- wd->chronometer = edje_object_add(e);
- elm_widget_resize_object_set(obj, wd->chronometer);
-
- wd->cur.format = EINA_TRUE;
- wd->cur.run = EINA_FALSE;
-
- _sizing_eval(obj);
-
- _time_update(obj);
- _ticker(obj);
-
- return obj;
-}
-
-/**
- * Run the chronometer
- *
- * @param obj The chronometer object
- *
- * This function start the chronometer time
- *
- * @ingroup Chronometer
- */
-EAPI void
-elm_chronometer_start(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- wd->cur.run = EINA_TRUE;
- _time_update(obj);
-}
-
-/**
- * Run the chronometer
- *
- * @param obj The chronometer object
- *
- * This function stop the chronometer time
- *
- * @ingroup Chronometer
- */
-EAPI void
-elm_chronometer_stop(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- wd->cur.run = EINA_FALSE;
- _time_update(obj);
-}
-
-/**
- * Set the chronometer time
- *
- * @param obj The chronometer object
- * @param hrs The hours to set
- * @param min The minutes to set
- * @param sec The secondes to set
- *
- * This function updates the time that is showed by the chronometer widget
- *
- * @ingroup Chronometer
- */
-EAPI void
-elm_chronometer_time_set(Evas_Object *obj, int hrs, int min, int sec)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- wd->cur.hrs = hrs;
- wd->cur.min = min;
- wd->cur.sec = sec;
- _time_update(obj);
-}
-
-/**
- * Get chronometer time
- *
- * @param obj The chronometer object
- * @param hrs Pointer to the variable to get the hour of this chronometer
- * object
- * @param min Pointer to the variable to get the minute of this chronometer
- * object
- * @param sec Pointer to the variable to get the second of this chronometer
- * object
- *
- * This function gets the time set of the chronometer widget and returns it
- * on the variables passed as the arguments to function
- *
- * @ingroup Chronometer
- */
-EAPI void
-elm_chronometer_time_get(const Evas_Object *obj, int *hrs, int *min, int *sec)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (hrs) *hrs = wd->cur.hrs;
- if (min) *min = wd->cur.min;
- if (sec) *sec = wd->cur.sec;
-}
-
-/**
- * Set the chronometer format
- *
- * @param obj The chronometer object
- * @param format Bool option for the show hours
- * (1 = show hours, 0 = not show hours)
- *
- * This function sets the chronometer format.
- *
- * @ingroup Chronometer
- */
-EAPI void
-elm_chronometer_format_set(Evas_Object *obj, Eina_Bool format)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- wd->cur.format = format;
- _time_update(obj);
-}
-
-/**
- * Get the chronometer format
- *
- * @param obj The chronometer object
- * @param format Bool option for the show hours
- * (1 = show hours, 0 = not show hours)
- *
- * This function gets the chronometer format
- *
- * @ingroup Chronometer
- */
-EAPI void
-elm_chronometer_format_get(Evas_Object *obj, Eina_Bool *format)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- *format = wd->cur.format;
-}
+++ /dev/null
-/*
- * SLP
- * Copyright (c) 2009 Samsung Electronics, Inc.
- * All rights reserved.
- *
- * This software is a confidential and proprietary information
- * of Samsung Electronics, Inc. ("Confidential Information"). You
- * shall not disclose such Confidential Information and shall use
- * it only in accordance with the terms of the license agreement
- * you entered into with Samsung Electronics.
- */
-
-
-
-#include <Elementary.h>
-#include "elm_priv.h"
-
-#define COVER_SIZE 180
-#define HALF_COVER_SIZE COVER_SIZE / 2
-#define TI_BUFFER_SIZE 30
-#define SLIDING_DURATION 1.5
-#define BOUNCING_DURATION (SLIDING_DURATION*0.75)
-#define REFLECTION_COLOR 150
-#define ROTATION_DEGREE 35
-#define CACHED_ITEM_COUNT 50
-#define CACHED_ITEM_SIZE (CACHED_ITEM_COUNT * COVER_SIZE )
-#define DISTANCE_BETWEEN_ITEMS 130
-#define BEGIN_POS_X -22
-#define ROTATION_DURATION 0.25
-#define ZOOM_OUT_DISTANCE 500
-#define ZOOM_OUT_DURATION 0.5
-#define MOVE_ON_LIMIT 3
-#define SELECTED_ITEM_POS_Z -200
-
-typedef struct _Widget_Data Widget_Data;
-typedef struct _Touch_Info_Node TI_Node;
-typedef struct _Touch_Info_Queue TI_Queue;
-typedef struct _Point Point;
-typedef enum _Shift_Direction Shift_Direction;
-typedef struct _Float_Ani_Data Float_Ani_Data;
-typedef struct _EvasCoord_Ani_Data EvasCoord_Ani_Data;
-typedef struct _Select_Ani_Data Select_Ani_Data;
-
-enum _Shift_Direction { Shift_Left, Shift_Right, Shift_None };
-
-struct _Touch_Info_Node {
- Evas_Coord pos;
- TI_Node* prev;
- TI_Node* next;
-};
-
-struct _Touch_Info_Queue {
- TI_Node* head;
- TI_Node* tail;
- unsigned int cnt;
-};
-
-struct _Coverflow_Item
-{
- Widget_Data* wd;
- Evas_Object* base;
- Evas_Object* reflection;
- Elm_Coverflow_Item_Class cic;
- void* data;
- void (*func)( void*, Evas_Object*, void* );
- void* func_data;
- int idx;
- Eina_Bool visible : 1;
-};
-/*
-struct _Animation_Data {
- Elm_Animator* animator;
- Evas_Coord from;
-};
-*/
-struct _Point {
- Evas_Coord x;
- Evas_Coord y;
- Evas_Coord z;
-};
-
-struct _Float_Ani_Data {
- Elm_Animator* animator;
- float cur;
- float from;
- float to;
-};
-
-struct _EvasCoord_Ani_Data {
- Elm_Animator* animator;
- Evas_Coord cur;
- Evas_Coord from;
- Evas_Coord to;
-};
-
-struct _Select_Ani_Data {
- Elm_Animator* animator;
- Evas_Coord orig_pos_x;
- Evas_Coord orig_pos_y;
- Evas_Coord from_x, from_z;
- Evas_Coord to_x, to_z;
- float orig_rot;
- float from_rot, to_rot;
-};
-
-
-
-struct _Widget_Data
-{
- Evas_Object* parent;
- Evas_Object* obj;
- Evas_Object* base;
- Eina_List* all_item_list;
- Eina_List* valid_item_list;
- Point base_pos;
- Point cur_pos;
- Evas_Coord sliding_vector;
- TI_Queue ti_queue;
- Float_Ani_Data rot_ani_data;
- EvasCoord_Ani_Data base_ani_data;
- Select_Ani_Data* select_ani_data;
- unsigned long valid_item_cnt;
- unsigned long valid_item_length;
- Evas_Map* original_map;
- Evas_Map* reflection_map;
- Elm_Coverflow_Item* selected_item;
- Evas_Coord dist_between_items;
-
- Eina_Bool stack_raise : 1;
- Eina_Bool horizontal : 1;
- Eina_Bool move_on : 1;
- Eina_Bool show : 1;
-};
-
-
-
-
-static void _parent_resize( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static void _coverflow_show( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static void _coverflow_hide( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static void _coverflow_move( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static void _coverflow_resize( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static void _del_pre_hook( Evas_Object* obj );
-static void _del_hook( Evas_Object* obj );
-static void _sizing_eval( Widget_Data* wd );
-static void _render_visible_items( Widget_Data* wd );
-static void _mouse_down_ev( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static void _mouse_move_ev( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static void _mouse_up_ev( void* data, Evas* evas, Evas_Object* obj, void* event_info );
-static TI_Node* _create_tinode( const Evas_Coord pos );
-static void _clear_ti_queue( TI_Queue* ti_queue );
-static void _push_back_tinode( TI_Queue* ti_queue, TI_Node* tinode );
-static void _sliding_completion_cb( void* data );
-static void _sliding_operation_cb( void* data, Elm_Animator* animator, const double key_frame );
-static void _update_items( Widget_Data* wd, Shift_Direction dir, Eina_Bool stack_raise );
-static Evas_Map* _create_original_map();
-static Evas_Map* _create_reflection_map( const Evas_Coord reflection_size );
-static void _init_item_obj( Evas_Object* obj );
-static Eina_Bool _left_shift_item( Widget_Data* wd, Elm_Coverflow_Item* item );
-static Eina_Bool _right_shift_item( Widget_Data* wd, Elm_Coverflow_Item* item );
-static void _create_item_obj( Widget_Data* wd, Elm_Coverflow_Item* item );
-static void _remove_item_obj( Widget_Data* wd, Elm_Coverflow_Item* item );
-static void _calc_base_pos( Widget_Data* wd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h );
-static void _direct_bounce( Widget_Data* wd, Evas_Coord to );
-static void _left_bounce_cb( void* data );
-static void _right_bounce_cb( void* data );
-static Eina_Bool _bounce_to_left( Widget_Data* wd );
-static void _rotation_operation_cb( void* data, Elm_Animator* animator, const double key_frame );
-static void _rotation_completion_cb( void* data );
-static void _update_rotation_degree( Widget_Data* wd, float degree );
-static void _zoom_out_completion_cb( void* data );
-static void _zoom_out_operation_cb( void* data, Elm_Animator* animator, const double key_frame );
-
-
-inline static TI_Node* _create_tinode( const Evas_Coord pos )
-{
- TI_Node* tinode = (TI_Node*) calloc( 1, sizeof( TI_Node ) );
-
- if( tinode ) {
- tinode->pos = pos;
- }
-
- return tinode;
-}
-
-
-
-static void _push_back_tinode( TI_Queue* ti_queue, TI_Node* tinode )
-{
- if( tinode == NULL ) {
- return ;
- }
-
- tinode->next = NULL;
-
- if( ti_queue->head == NULL ) {
- ++ti_queue->cnt;
- tinode->prev = NULL;
- ti_queue->head = tinode;
- ti_queue->tail = tinode;
- return ;
- }
-
- ti_queue->tail->next = tinode;
- tinode->prev = ti_queue->tail;
- ti_queue->tail = tinode;
-
- if( ti_queue->cnt >= TI_BUFFER_SIZE ) {
- TI_Node* head = ti_queue->head;
- ti_queue->head = head->next;
- ti_queue->head->prev = NULL;
- free( head );
- return ;
- }
-
- ++ti_queue->cnt;
-}
-
-
-
-static void _clear_ti_queue( TI_Queue* ti_queue )
-{
- TI_Node* head = ti_queue->head;
- TI_Node* tinode;
-
- while( head ) {
- tinode = head->next;
- free( head );
- head = tinode;
- }
-
- ti_queue->head = ti_queue->tail = NULL;
- ti_queue->cnt = 0;
-
-}
-
-
-
-static void _coverflow_show( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- int idx = 0;
- Eina_List* elist;
- Elm_Coverflow_Item* item;
-
- EINA_LIST_FOREACH( wd->valid_item_list, elist, item ) {
-
- evas_object_show( item->base );
- evas_object_show( item->reflection );
-
- if( ++idx == wd->valid_item_cnt ) {
- break;
- }
-
- }
-
- evas_object_show( wd->base );
- wd->show = EINA_TRUE;
-
- _render_visible_items( wd );
-
-}
-
-static void _coverflow_hide( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- int idx = 0;
- Eina_List* elist;
- Elm_Coverflow_Item* item;
-
- EINA_LIST_FOREACH( wd->valid_item_list, elist, item ) {
-
- evas_object_hide( item->base );
- evas_object_hide( item->reflection );
-
- if( ++idx == wd->valid_item_cnt ) {
- break;
- }
- }
-
- evas_object_hide( wd->base );
-
-}
-
-static void _coverflow_move( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- Evas_Coord x, y, w, h;
- evas_object_geometry_get( obj, &x, &y, &w, &h );
- evas_object_move( wd->base, x, y );
-
- wd->valid_item_cnt = w / COVER_SIZE + 2 + CACHED_ITEM_COUNT * 2;
-
- _calc_base_pos( wd, x, y, w, h );
- _update_items( wd, Shift_None, wd->stack_raise );
- _render_visible_items( wd );
-
-
-}
-
-static void _calc_base_pos( Widget_Data* wd,
- Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h )
-{
- Evas_Coord valid_item_size;
-
- if( wd->valid_item_cnt < eina_list_count( wd->valid_item_list ) ) {
- valid_item_size = wd->valid_item_cnt * wd->dist_between_items;
- }else {
- valid_item_size = eina_list_count( wd->valid_item_list ) * wd->dist_between_items;
- }
-
- //horizontal mode
- if( valid_item_size < w ) {
- wd->cur_pos.x = wd->base_pos.x = (w >> 1) - (valid_item_size >>1) + x;
- }else {
- wd->cur_pos.x = wd->base_pos.x = x;
- }
-
- wd->cur_pos.y = wd->base_pos.y = y + ( h >> 1 ) - HALF_COVER_SIZE;
-
-}
-
-
-static void _parent_resize( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
-
-}
-
-
-static void _coverflow_resize( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- Evas_Coord x, y, w, h;
- evas_object_geometry_get( obj, &x, &y, &w, &h );
- evas_object_resize( wd->base, w, h );
-
- wd->valid_item_cnt = w / COVER_SIZE + 2 + CACHED_ITEM_COUNT * 2;
-
- _calc_base_pos( wd, x, y, w, h );
-
- //TODO: re-create items.
-
- _update_items( wd, Shift_None, wd->stack_raise );
- _render_visible_items( wd );
-
-}
-
-
-
-
-static void _del_pre_hook( Evas_Object* obj )
-{
- Widget_Data* wd = (Widget_Data*) elm_widget_data_get( obj );
-
- if( wd->base_ani_data.animator ) {
- elm_animator_stop( wd->base_ani_data.animator );
- elm_animator_del( wd->base_ani_data.animator );
- }
-
-}
-
-
-
-
-static void _del_hook( Evas_Object* obj )
-{
- Widget_Data* wd = (Widget_Data*) elm_widget_data_get( obj );
-
- _clear_ti_queue( &wd->ti_queue );
-
- evas_map_free( wd->original_map );
- evas_map_free( wd->reflection_map );
-
- elm_coverflow_clear( obj );
-
-
- evas_object_del( wd->base );
-
-
-}
-
-
-
-
-static void _sizing_eval( Widget_Data* wd )
-{
-/* Eina_List* elist;
- Elm_Coverflow_Item* item;
-
- EINA_LIST_FOREACH( wd->all_item_list, elist, item ) {
- evas_object_resize( item->obj, COVER_SIZE, COVER_SIZE );
- evas_object_resize( item->reflection, COVER_SIZE, COVER_SIZE );
- }
-*/
-}
-
-inline static Evas_Map* _create_original_map()
-{
- Evas_Map* map = evas_map_new( 4 );
-
- if( map == NULL ) {
- return NULL;
- }
-
- evas_map_smooth_set( map, EINA_TRUE );
-
- return map;
-}
-
-
-inline static Evas_Map* _create_reflection_map( const Evas_Coord reflection_size )
-{
- Evas_Map* map = _create_original_map();
-
- evas_map_point_image_uv_set( map, 0, 0, COVER_SIZE );
- evas_map_point_image_uv_set( map, 1, COVER_SIZE, COVER_SIZE );
- evas_map_point_image_uv_set( map, 2, COVER_SIZE, COVER_SIZE-reflection_size );
- evas_map_point_image_uv_set( map, 3, 0, COVER_SIZE-reflection_size );
-
- evas_map_point_color_set( map, 0,
- REFLECTION_COLOR, REFLECTION_COLOR, REFLECTION_COLOR, REFLECTION_COLOR );
-
- evas_map_point_color_set( map, 1,
- REFLECTION_COLOR, REFLECTION_COLOR, REFLECTION_COLOR, REFLECTION_COLOR );
-
- evas_map_point_color_set( map, 2,
- 0, 0, 0, 0 );
-
- evas_map_point_color_set( map, 3,
- 0, 0, 0, 0 );
-
- return map;
-
-}
-
-
-
-
-
-
-static void _render_visible_items( Widget_Data* wd )
-{
- Evas_Coord reflection_size = COVER_SIZE / 3;
-
- Eina_List* elist;
- Elm_Coverflow_Item* item;
- Evas_Coord x, y, z = wd->cur_pos.z;
- int idx = 0;
-
- EINA_LIST_FOREACH( wd->valid_item_list, elist, item ) {
-
- ++idx;
-
- if( item->visible == EINA_FALSE ) {
- continue;
- }
-
- if( item == wd->selected_item ) {
- continue;
- }
-
- evas_object_geometry_get( item->base, &x, &y, NULL, NULL );
-
- //Geometry
- //ToDo: Check coord_set .
- evas_map_util_points_populate_from_object_full( wd->original_map, item->base, z );
-
- evas_map_point_coord_set( wd->reflection_map, 0,
- x, y + COVER_SIZE, z );
- evas_map_point_coord_set( wd->reflection_map, 1,
- x + COVER_SIZE, y + COVER_SIZE, z );
- evas_map_point_coord_set( wd->reflection_map, 2,
- x + COVER_SIZE, y + COVER_SIZE + reflection_size, z );
- evas_map_point_coord_set( wd->reflection_map, 3,
- x, y + COVER_SIZE + reflection_size, z );
-
- //Rotation
- evas_map_util_3d_rotate( wd->original_map, 0, wd->rot_ani_data.cur, 0,
- x + HALF_COVER_SIZE, y + HALF_COVER_SIZE, z );
-
- evas_map_util_3d_rotate( wd->reflection_map, 0, wd->rot_ani_data.cur, 0,
- x + HALF_COVER_SIZE, y + HALF_COVER_SIZE, z );
-
- //Perspective
- evas_map_util_3d_perspective( wd->original_map,
- x + HALF_COVER_SIZE,
- y + HALF_COVER_SIZE, 0, 750 );
-
- evas_map_util_3d_perspective( wd->reflection_map,
- x + HALF_COVER_SIZE,
- y + HALF_COVER_SIZE, 0, 750 );
-
- evas_object_map_set( item->base, wd->original_map );
- evas_object_map_set( item->reflection, wd->reflection_map );
-
- evas_object_show( item->base );
- evas_object_show( item->reflection );
-
- if( idx == wd->valid_item_cnt ) {
- break;
- }
-
- }
-
- evas_object_raise( wd->base );
-
-}
-
-static void _mouse_down_ev( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- if( wd->base_ani_data.animator ) {
- elm_animator_stop( wd->base_ani_data.animator );
- elm_animator_del( wd->base_ani_data.animator );
- wd->base_ani_data.animator = NULL;
- }
-
- _clear_ti_queue( &wd->ti_queue );
-
- Evas_Event_Mouse_Down* ev = event_info;
- _push_back_tinode( &wd->ti_queue, _create_tinode( ev->output.x ) );
-
- wd->move_on = EINA_FALSE;
-
-}
-
-
-inline static void _remove_item_obj( Widget_Data* wd, Elm_Coverflow_Item* item )
-{
- if( item == NULL ) {
- return ;
- }
-
- evas_object_del( item->base );
- evas_object_del( item->reflection );
-
- wd->valid_item_length -= wd->dist_between_items;
-
-}
-
-
-
-static Eina_Bool _left_shift_item( Widget_Data* wd, Elm_Coverflow_Item* item )
-{
- //valid items are less than cached item count !
- if( eina_list_count( wd->all_item_list ) - item->idx <= wd->valid_item_cnt ) {
- return EINA_FALSE;
- }
-
- _remove_item_obj( wd, item );
-
-
- //Generate
- Elm_Coverflow_Item* gen_item = (Elm_Coverflow_Item*) eina_list_data_get(
- eina_list_nth_list( wd->all_item_list, item->idx + wd->valid_item_cnt ) );
-
- _create_item_obj( wd, gen_item );
-
- //shift item.
- wd->valid_item_list = eina_list_next(wd->valid_item_list);
-
- return EINA_TRUE;
-}
-
-
-static Eina_Bool _right_shift_item( Widget_Data* wd, Elm_Coverflow_Item* item ) {
-
- //valid items are less than cached item count !
- if( ((Elm_Coverflow_Item*) eina_list_data_get( wd->valid_item_list ))->idx <= 0 ) {
- return EINA_FALSE;
- }
-
- _remove_item_obj( wd, item );
-
- //Generate
- Elm_Coverflow_Item* gen_item = (Elm_Coverflow_Item*) eina_list_data_get(
- eina_list_nth_list( wd->all_item_list, item->idx - wd->valid_item_cnt ) );
-
- _create_item_obj( wd, gen_item );
-
- //shift_item.
- wd->valid_item_list = eina_list_prev(wd->valid_item_list);
-
- return EINA_TRUE;
-}
-
-
-static void _update_items( Widget_Data* wd, Shift_Direction dir, Eina_Bool stack_raise )
-
-{
- Evas_Coord body_x, body_y, body_w, body_h;
- evas_object_geometry_get( wd->base, &body_x, &body_y, &body_w, &body_h );
-
- Eina_List* elist;
- Elm_Coverflow_Item* item;
- int idx = 0;
- int shift_cnt = 0;
-
- Evas_Coord cur_pos;
- Evas_Object* prev_obj = NULL;
-
- EINA_LIST_FOREACH( wd->valid_item_list, elist, item ) {
-
- //horizontal mode
- cur_pos = idx++ * wd->dist_between_items + wd->cur_pos.x + BEGIN_POS_X;
- evas_object_move( item->base, cur_pos, wd->cur_pos.y );
-
- //Clipping!
- if( cur_pos + COVER_SIZE < body_x || cur_pos - COVER_SIZE > body_x + body_w ) {
- item->visible = EINA_FALSE;
- evas_object_hide( item->base );
- evas_object_hide( item->reflection );
- }else {
- item->visible = EINA_TRUE;
- }
-
- if( item->visible == EINA_FALSE ) {
-
- switch( dir ) {
- case Shift_Left:
- //Shift Left Side item!
- if( cur_pos + COVER_SIZE < body_x - CACHED_ITEM_SIZE ) {
-
- if( _left_shift_item( wd, item ) == EINA_TRUE ) {
- ++shift_cnt;
- }
- }
- break;
- case Shift_Right:
- //Shift Right Side item!
- if( cur_pos > body_x + body_w + CACHED_ITEM_SIZE ) {
-
- if( _right_shift_item( wd, item ) == EINA_TRUE ) {
- --shift_cnt;
- }
- }
- break;
- case Shift_None:
- default:
- break;
- }
-
- //Z Order
- }else {
-
- if( stack_raise == EINA_TRUE ) {
- evas_object_raise( item->base );
- evas_object_raise( item->reflection );
- }else {
- evas_object_stack_above( prev_obj, item->reflection );
- evas_object_stack_above( item->reflection, item->base );
- }
-
- }
-
- prev_obj = item->base;
-
- if( idx == wd->valid_item_cnt ) {
- break ;
- }
-
- }
-
- //The base position should be shifted by size of removed items.
- if( shift_cnt ) {
- shift_cnt *= wd->dist_between_items;
- wd->cur_pos.x += shift_cnt;
- wd->base_ani_data.from += shift_cnt;
- }
-
-}
-
-static void _rotation_operation_cb( void* data, Elm_Animator* animator, const double key_frame )
-{
- Widget_Data* wd = (Widget_Data*) data;
- wd->rot_ani_data.cur = wd->rot_ani_data.from + wd->rot_ani_data.to * key_frame;
-}
-
-static void _rotation_completion_cb( void* data )
-{
- Widget_Data* wd = (Widget_Data*) data;
- elm_animator_del( wd->rot_ani_data.animator );
- wd->rot_ani_data.animator = NULL;
-}
-
-static void _update_rotation_degree( Widget_Data* wd, float degree )
-{
- if( wd->rot_ani_data.cur == degree ) {
- return ;
- }
-
- if( wd->rot_ani_data.animator ) {
- elm_animator_stop( wd->rot_ani_data.animator );
- }else {
- wd->rot_ani_data.animator = elm_animator_add( wd->obj );
- elm_animator_operation_callback_set( wd->rot_ani_data.animator, _rotation_operation_cb, wd );
- elm_animator_completion_callback_set( wd->rot_ani_data.animator, _rotation_completion_cb, wd );
- elm_animator_duration_set( wd->rot_ani_data.animator, ROTATION_DURATION );
- }
-
- wd->rot_ani_data.from = wd->rot_ani_data.cur;
- wd->rot_ani_data.to = degree - wd->rot_ani_data.cur;
- elm_animator_animate( wd->rot_ani_data.animator );
-
-}
-
-static void _mouse_move_ev( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
- Evas_Event_Mouse_Move* ev = ( Evas_Event_Mouse_Move* ) event_info;
-
- if( ev->buttons == 0 ) {
- return ;
- }
-
- Widget_Data* wd = (Widget_Data*) data;
-
- if( wd->move_on == EINA_FALSE ) {
- if( abs( ev->cur.output.x - wd->ti_queue.head->pos ) < MOVE_ON_LIMIT ) {
- return ;
- }else {
- wd->move_on = EINA_TRUE;
- }
- }
-
-#ifdef SKIP_EVENT
- static int skip_count = 0;
-
- ++skip_count;
-
- if( skip_count < 4 ) {
- ++skip_count;
- return ;
- }
- skip_count = 0;
-#endif
-
- Evas_Coord vector;
-
- //horizontal mode
- vector = ev->cur.output.x - ev->prev.output.x;
- wd->cur_pos.x += vector;
-
- if( wd->rot_ani_data.cur > (180-ROTATION_DEGREE)/2+ROTATION_DEGREE) {
- wd->stack_raise = EINA_FALSE;
- }else {
- wd->stack_raise = EINA_TRUE;
- }
-
- if( vector > 0 ) {
- _update_items(wd, Shift_Right, wd->stack_raise );
- wd->rot_ani_data.cur += 3;
- if( wd->rot_ani_data.cur > 180 - ROTATION_DEGREE ) {
- wd->rot_ani_data.cur = 180 - ROTATION_DEGREE;
- }
- }else {
- _update_items(wd, Shift_Left, wd->stack_raise );
- wd->rot_ani_data.cur -= 3;
- if( wd->rot_ani_data.cur < ROTATION_DEGREE ) {
- wd->rot_ani_data.cur = ROTATION_DEGREE;
- }
- }
-
- //TODO: if Drag Direction is changed, let's clear queue!
-
- _push_back_tinode( &wd->ti_queue, _create_tinode( ev->cur.output.x ) );
- _render_visible_items( wd );
-
-}
-
-
-static void _direct_bounce( Widget_Data* wd, Evas_Coord to )
-{
- wd->sliding_vector = to - wd->cur_pos.x;
- wd->base_ani_data.animator = elm_animator_add( wd->obj );
- elm_animator_curve_style_set( wd->base_ani_data.animator, ELM_ANIMATOR_CURVE_OUT );
- elm_animator_operation_callback_set( wd->base_ani_data.animator, _sliding_operation_cb, wd );
- elm_animator_completion_callback_set( wd->base_ani_data.animator, _sliding_completion_cb, wd );
- elm_animator_duration_set( wd->base_ani_data.animator, BOUNCING_DURATION );
- elm_animator_animate( wd->base_ani_data.animator );
-}
-
-
-static void _sliding_completion_cb( void* data )
-{
- Widget_Data* wd = (Widget_Data*) data;
- elm_animator_del( wd->base_ani_data.animator );
- wd->base_ani_data.animator = NULL;
-}
-
-static void _right_bounce_cb( void* data )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- Evas_Coord w;
- evas_object_geometry_get( wd->obj, NULL, NULL, &w, NULL );
-
- wd->sliding_vector = w - wd->cur_pos.x + wd->valid_item_length;
- wd->base_ani_data.from = wd->cur_pos.x;
- wd->stack_raise = EINA_FALSE;
-
- elm_animator_duration_set( wd->base_ani_data.animator, BOUNCING_DURATION * 0.5 );
- elm_animator_completion_callback_set( wd->base_ani_data.animator, _sliding_completion_cb, wd );
- elm_animator_animate( wd->base_ani_data.animator );
-
-}
-
-
-
-static void _left_bounce_cb( void* data )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- wd->sliding_vector = -wd->cur_pos.x;
- wd->base_ani_data.from = wd->cur_pos.x;
- wd->stack_raise = EINA_FALSE;
-
- elm_animator_duration_set( wd->base_ani_data.animator, BOUNCING_DURATION * 0.5 );
- elm_animator_completion_callback_set( wd->base_ani_data.animator, _sliding_completion_cb, wd );
- elm_animator_animate( wd->base_ani_data.animator );
-
-}
-
-
-
-static void _sliding_operation_cb( void* data, Elm_Animator* animator, const double key_frame )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- wd->cur_pos.x = wd->base_ani_data.from + (Evas_Coord) ( (double) wd->sliding_vector * key_frame );
-
- if( wd->sliding_vector > 0 ) {
- _update_items( wd, Shift_Right, wd->stack_raise );
- }else {
- _update_items( wd, Shift_Left, wd->stack_raise );
- }
-
- _render_visible_items( wd );
-
-}
-
-
-static Eina_Bool _bounce_to_right( Widget_Data* wd )
-{
- Evas_Coord w;
- evas_object_geometry_get( wd->obj, NULL, NULL, &w, NULL );
-
- Elm_Coverflow_Item* item = eina_list_data_get( wd->valid_item_list );
-
- Evas_Coord right_outside_length = wd->cur_pos.x + (Evas_Coord) wd->valid_item_length - w;
- Evas_Coord sliding_length = wd->sliding_vector;
-
- if( right_outside_length + sliding_length <= 0 ) {
- return EINA_FALSE;
- }
-
- Evas_Coord bounce_pos = (right_outside_length + sliding_length) / 2;
-
- wd->sliding_vector = bounce_pos - right_outside_length;
-
- wd->base_ani_data.animator = elm_animator_add( wd->obj );
- elm_animator_duration_set( wd->base_ani_data.animator, SLIDING_DURATION * 0.5 );
- elm_animator_curve_style_set( wd->base_ani_data.animator, ELM_ANIMATOR_CURVE_OUT );
- elm_animator_operation_callback_set( wd->base_ani_data.animator, _sliding_operation_cb, wd );
- elm_animator_completion_callback_set( wd->base_ani_data.animator, _sliding_completion_cb, wd );
-// elm_animator_completion_callback_set( wd->base_ani_data.animator, _right_bounce_cb, wd );
- elm_animator_animate( wd->base_ani_data.animator );
-
- return EINA_TRUE;
-
-}
-
-
-
-static Eina_Bool _bounce_to_left( Widget_Data* wd )
-{
- Elm_Coverflow_Item* item = eina_list_data_get( wd->valid_item_list );
- Evas_Coord left_outside_length = wd->cur_pos.x -item->idx * wd->dist_between_items;
- Evas_Coord sliding_length = wd->sliding_vector;
-
- if( left_outside_length + sliding_length < 0 ) {
- return EINA_FALSE;
- }
-
- Evas_Coord bounce_pos = (left_outside_length + sliding_length) / 2;
-
- wd->sliding_vector = bounce_pos - left_outside_length;
-
- wd->base_ani_data.animator = elm_animator_add( wd->obj );
- elm_animator_duration_set( wd->base_ani_data.animator, SLIDING_DURATION * 0.5 );
- elm_animator_curve_style_set( wd->base_ani_data.animator, ELM_ANIMATOR_CURVE_OUT );
- elm_animator_operation_callback_set( wd->base_ani_data.animator, _sliding_operation_cb, wd );
- elm_animator_completion_callback_set( wd->base_ani_data.animator, _left_bounce_cb, wd );
- elm_animator_animate( wd->base_ani_data.animator );
-
- return EINA_TRUE;
-
-}
-
-
-
-static void _mouse_up_ev( void* data, Evas* evas, Evas_Object* obj, void* event_info )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- if( wd->move_on == EINA_FALSE ) {
- return ;
- }
-
- if( wd->ti_queue.cnt == 0 ) {
- return ;
- }
-
- wd->base_ani_data.from = wd->cur_pos.x;
- wd->sliding_vector = wd->ti_queue.tail->pos - wd->ti_queue.head->pos;
-
- //TODO:Please check animator in direct_bouce and update_rotation_degree, bounce_to_left..
-
- //Rotation
- if( wd->sliding_vector > 0 ) {
- wd->stack_raise = EINA_FALSE;
- _update_rotation_degree( wd, 180 - ROTATION_DEGREE );
- }else {
- wd->stack_raise = EINA_TRUE;
- _update_rotation_degree( wd, ROTATION_DEGREE );
- }
-
- //Check Bouncing
- Evas_Coord w;
- evas_object_geometry_get( obj, NULL, NULL, &w, NULL );
-
- //bounce to left directly
- if( wd->cur_pos.x > 0 ) {
- _direct_bounce( wd, 0 );
- return ;
- //bounce to right directly
- }else if( wd->cur_pos.x + (Evas_Coord) wd->valid_item_length < w ) {
- _direct_bounce( wd, w - (Evas_Coord) wd->valid_item_length );
- return ;
- }
-
- if( _bounce_to_left( wd ) == EINA_TRUE ) {
- return ;
- }
-/*
- if( _bounce_to_right( wd ) == EINA_TRUE ) {
- return ;
- }
-*/
- //sliding effect
- wd->base_ani_data.animator = elm_animator_add( obj );
- elm_animator_duration_set( wd->base_ani_data.animator, SLIDING_DURATION );
- elm_animator_curve_style_set( wd->base_ani_data.animator, ELM_ANIMATOR_CURVE_OUT );
- elm_animator_operation_callback_set( wd->base_ani_data.animator, _sliding_operation_cb, wd );
- elm_animator_completion_callback_set( wd->base_ani_data.animator, _sliding_completion_cb, wd );
- elm_animator_animate( wd->base_ani_data.animator );
-
-}
-
-
-
-EAPI Evas_Object* elm_coverflow_add( Evas_Object* parent )
-{
- Evas* evas;
- Evas_Object* obj;
- Widget_Data* wd;
- evas = evas_object_evas_get( parent );
-
- if( evas == NULL ) {
- return NULL;
- }
-
- obj = ( Evas_Object* ) elm_widget_add( evas );
-
- if( obj == NULL ) {
- return NULL;
- }
-
- elm_widget_type_set( obj, "coverflow" );
- elm_widget_sub_object_add( parent, obj );
-
- wd = calloc( 1, sizeof( Widget_Data ) );
-
- if( wd == NULL ) {
- return NULL;
- }
-
- elm_widget_data_set( obj, wd );
- elm_widget_del_pre_hook_set( obj, _del_pre_hook );
- elm_widget_del_hook_set( obj, _del_hook );
-
- wd->parent = parent;
- wd->obj = obj;
- wd->horizontal = EINA_TRUE;
- wd->rot_ani_data.cur = ROTATION_DEGREE;
- wd->dist_between_items = DISTANCE_BETWEEN_ITEMS;
- wd->stack_raise = EINA_TRUE;
- wd->original_map = _create_original_map();
- wd->reflection_map = _create_reflection_map( COVER_SIZE / 3 );
-
- //body
- wd->base = evas_object_rectangle_add( evas );
- evas_object_color_set( wd->base, 0, 0, 0, 0 );
- evas_object_resize( wd->base, 99999999, 9999999 );
- evas_object_size_hint_weight_set( wd->base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND );
- evas_object_size_hint_align_set( wd->base, EVAS_HINT_FILL, EVAS_HINT_FILL );
- evas_object_event_callback_add( wd->base, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_ev, wd );
- evas_object_event_callback_add( wd->base, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_ev, wd );
- evas_object_event_callback_add( wd->base, EVAS_CALLBACK_MOUSE_UP, _mouse_up_ev, wd );
- evas_object_repeat_events_set( wd->base, EINA_TRUE );
-
- //Set widget base callbacks.
- evas_object_event_callback_add( parent, EVAS_CALLBACK_RESIZE, _parent_resize, obj );
- evas_object_event_callback_add( obj, EVAS_CALLBACK_SHOW, _coverflow_show, wd );
- evas_object_event_callback_add( obj, EVAS_CALLBACK_HIDE, _coverflow_hide, wd );
- evas_object_event_callback_add( obj, EVAS_CALLBACK_MOVE, _coverflow_move, wd );
- evas_object_event_callback_add( obj, EVAS_CALLBACK_RESIZE, _coverflow_resize, wd );
-
- //calculate count of initial valid item.
- Evas_Coord w, h;
- evas_object_geometry_get( wd->parent, NULL, NULL, &w, &h );
- wd->valid_item_cnt = w / COVER_SIZE + 2 + CACHED_ITEM_COUNT * 2;
-
- return obj;
-
-}
-
-
-
-
-EAPI void elm_coverflow_clear( Evas_Object* obj )
-{
- Widget_Data* wd = (Widget_Data*) elm_widget_data_get( obj );
-
- if( wd == NULL ) {
- return ;
- }
-
- Eina_List* elist;
- Elm_Coverflow_Item* item;
-
- EINA_LIST_FOREACH( wd->all_item_list, elist, item ) {
- _remove_item_obj( wd, item );
- wd->all_item_list = eina_list_remove( wd->all_item_list, item );
- free( item );
- }
-
- wd->valid_item_length = 0;
-
-}
-
-
-
-/*
-EAPI void elm_coverflow_vertical_set( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
-}
-
-EAPI void elm_coverflow_vertical_get( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
-}
-*/
-
-
-static Evas_Object* _TEMP_CREATE_ICON( Evas_Object* parent, int idx )
-{
- char file_path[ 256 ];
- sprintf( file_path, "/usr/share/beat_winset_test/icon/coverflow_img/%d_raw.png", idx+1 );
-/*
- Evas_Object* icon = elm_icon_add( parent );
- elm_icon_file_set( icon, file_path, NULL );
- elm_icon_scale_set( icon, 1, 1 );
- return icon; */
-
- Evas_Object* img = evas_object_image_add( evas_object_evas_get( parent ) );
- evas_object_image_load_size_set( img, 80, 80 );
- evas_object_image_fill_set( img, 0, 0, 80, 80 );
- evas_object_image_file_set( img, file_path, NULL );
- evas_object_image_smooth_scale_set( img, EINA_TRUE );
-
- return img;
-}
-
-static void _selected_item_completion_cb( void* data )
-{
- Widget_Data* wd = (Widget_Data*) data;
- elm_animator_del( wd->select_ani_data->animator );
-
- free( wd->select_ani_data );
- wd->select_ani_data = NULL;
- wd->selected_item = NULL;
-
- _update_items( wd, Shift_None, wd->stack_raise );
-
- evas_object_show( wd->base );
- evas_object_raise( wd->base );
-
-}
-
-
-static void _selected_item_operation_cb( void* data, Elm_Animator* animator, const double key_frame )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- Evas_Coord reflection_size = COVER_SIZE / 3;
-
- Elm_Coverflow_Item* item = wd->selected_item;
-
- Evas_Coord x = wd->select_ani_data->from_x + wd->select_ani_data->to_x * key_frame;
- Evas_Coord y = wd->select_ani_data->orig_pos_y;
- Evas_Coord z = wd->select_ani_data->from_z + wd->select_ani_data->to_z * key_frame;
- float rot_degree =
- wd->select_ani_data->from_rot + wd->select_ani_data->to_rot * key_frame;
-
- //Geometry
- //ToDo: Check coord_set .
- evas_map_point_coord_set( wd->original_map, 0,
- x, y, z );
- evas_map_point_coord_set( wd->original_map, 1,
- x + COVER_SIZE, y, z );
- evas_map_point_coord_set( wd->original_map, 2,
- x + COVER_SIZE, y + COVER_SIZE, z );
- evas_map_point_coord_set( wd->original_map, 3,
- x, y + COVER_SIZE, z );
-
- evas_map_point_coord_set( wd->reflection_map, 0,
- x, y + COVER_SIZE, z );
- evas_map_point_coord_set( wd->reflection_map, 1,
- x + COVER_SIZE, y + COVER_SIZE, z );
- evas_map_point_coord_set( wd->reflection_map, 2,
- x + COVER_SIZE, y + COVER_SIZE + reflection_size, z );
- evas_map_point_coord_set( wd->reflection_map, 3,
- x, y + COVER_SIZE + reflection_size, z );
-
- //Rotation
- evas_map_util_3d_rotate( wd->original_map, 0, rot_degree, 0,
- x + HALF_COVER_SIZE, y + HALF_COVER_SIZE, z );
-
- evas_map_util_3d_rotate( wd->reflection_map, 0, rot_degree, 0,
- x + HALF_COVER_SIZE, y + HALF_COVER_SIZE, z );
-
- //Perspective
- evas_map_util_3d_perspective( wd->original_map,
- x + HALF_COVER_SIZE,
- y + HALF_COVER_SIZE, 0, 750 );
-
- evas_map_util_3d_perspective( wd->reflection_map,
- x + HALF_COVER_SIZE,
- y + HALF_COVER_SIZE, 0, 750 );
-
- evas_object_map_set( item->base, wd->original_map );
- evas_object_map_set( item->reflection, wd->reflection_map );
-
-}
-
-
-
-
-
-static void _unselect_item( Widget_Data* wd, Elm_Coverflow_Item* item )
-{
- Select_Ani_Data* ani_data = wd->select_ani_data;
-
- ani_data->from_x = ani_data->from_x + ani_data->to_x;
- ani_data->to_x = ani_data->orig_pos_x - ani_data->from_x;
- ani_data->from_z = SELECTED_ITEM_POS_Z;
- ani_data->to_z = -SELECTED_ITEM_POS_Z;
- ani_data->from_rot = 0;
- ani_data->to_rot = wd->rot_ani_data.cur;
-
- elm_animator_completion_callback_set( ani_data->animator, _selected_item_completion_cb, wd );
- elm_animator_animate( ani_data->animator );
-}
-
-
-
-
-
-
-static void _zoom_in_completion_cb( void* data )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- elm_animator_del( wd->base_ani_data.animator );
- wd->base_ani_data.animator = NULL;
-
-
-}
-
-
-
-
-static void _zoom_in_operation_cb( void* data, Elm_Animator* animator, const double key_frame )
-{
- Widget_Data* wd = (Widget_Data*) data;
- wd->cur_pos.z = ZOOM_OUT_DISTANCE -ZOOM_OUT_DISTANCE * key_frame;
- _render_visible_items( wd );
-}
-
-
-inline static void _zoom_in( Widget_Data* wd )
-{
- wd->base_ani_data.animator = elm_animator_add( wd->obj );
- elm_animator_duration_set( wd->base_ani_data.animator, ZOOM_OUT_DURATION );
- elm_animator_curve_style_set( wd->base_ani_data.animator, ELM_ANIMATOR_CURVE_OUT );
- elm_animator_operation_callback_set( wd->base_ani_data. animator,
- _zoom_in_operation_cb, wd );
- elm_animator_completion_callback_set( wd->base_ani_data.animator,
- _zoom_in_completion_cb, wd );
- elm_animator_animate( wd->base_ani_data.animator );
-}
-
-
-static void _zoom_in_ev( void* data, Evas* e, Evas_Object* obj, void* event_info )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- evas_object_del( obj );
-
- _zoom_in( wd );
- _unselect_item( wd, wd->selected_item );
-
-}
-
-
-static void _zoom_out_completion_cb( void* data )
-{
- Widget_Data* wd = (Widget_Data*) data;
-
- elm_animator_del( wd->base_ani_data.animator );
-
- //Create Zoom In Event Delegator
- Evas_Coord x, y, w, h;
- evas_object_geometry_get( wd->base, &x, &y, &w, &h );
- Evas_Object* rect = evas_object_rectangle_add( evas_object_evas_get( wd->obj ) );
- evas_object_color_set( rect, 0, 0, 0, 0 );
- evas_object_move( rect, x, y );
- evas_object_resize( rect, w, h );
- evas_object_show( rect );
- evas_object_event_callback_add( rect, EVAS_CALLBACK_MOUSE_UP, _zoom_in_ev, wd );
-
-}
-
-static void _zoom_out_operation_cb( void* data, Elm_Animator* animator, const double key_frame )
-{
- Widget_Data* wd = (Widget_Data*) data;
- wd->cur_pos.z = ZOOM_OUT_DISTANCE * key_frame;
-
- _render_visible_items( wd );
-}
-
-
-
-
-inline static void _zoom_out( Widget_Data* wd )
-{
- wd->base_ani_data.animator = elm_animator_add( wd->obj );
- elm_animator_duration_set( wd->base_ani_data.animator, ZOOM_OUT_DURATION );
- elm_animator_curve_style_set( wd->base_ani_data.animator, ELM_ANIMATOR_CURVE_OUT );
- elm_animator_operation_callback_set( wd->base_ani_data.animator,
- _zoom_out_operation_cb, wd );
- elm_animator_completion_callback_set( wd->base_ani_data.animator,
- _zoom_out_completion_cb, wd );
- elm_animator_animate( wd->base_ani_data.animator );
-
-}
-
-
-static void _select_item( Widget_Data* wd, Elm_Coverflow_Item* item )
-{
- wd->selected_item = item;
- evas_object_raise( item->base );
- evas_object_raise( item->reflection );
-
- Select_Ani_Data* ani_data = calloc( 1, sizeof( Select_Ani_Data ) );
-
- evas_object_geometry_get( item->base, &ani_data->orig_pos_x, &ani_data->orig_pos_y, NULL, NULL );
- ani_data->from_x = ani_data->orig_pos_x;
-
- Evas_Coord w;
- evas_object_geometry_get( wd->base, NULL, NULL, &w, NULL );
- ani_data->to_x = w / 2 - COVER_SIZE / 2 - ani_data->from_x;
-
- ani_data->from_z = 0;
- ani_data->to_z = SELECTED_ITEM_POS_Z;
- ani_data->from_rot = wd->rot_ani_data.cur;
- ani_data->to_rot = -wd->rot_ani_data.cur;
-
- ani_data->animator = elm_animator_add( wd->obj );
- elm_animator_duration_set( ani_data->animator, ZOOM_OUT_DURATION );
- elm_animator_curve_style_set( ani_data->animator, ELM_ANIMATOR_CURVE_OUT );
- elm_animator_operation_callback_set( ani_data->animator, _selected_item_operation_cb, wd );
- elm_animator_animate( ani_data->animator );
-
- wd->select_ani_data = ani_data;
-}
-
-
-
-static void _item_clicked_ev( void* data, Evas* e, Evas_Object* obj, void* event_info )
-{
- Elm_Coverflow_Item* item = (Elm_Coverflow_Item*) data;
-
- Widget_Data* wd = item->wd;
-
- if( wd->move_on == EINA_TRUE ) {
- return ;
- }
-
- if( evas_object_visible_get( wd->base ) == EINA_FALSE ) {
- return;
- }
-
- evas_object_hide( wd->base );
-
- if( wd->base_ani_data.animator ) {
- elm_animator_stop( wd->base_ani_data.animator );
- elm_animator_del( wd->base_ani_data.animator );
- }
-
- _zoom_out( wd );
- _select_item( wd, item );
-
-}
-
-
-static void _create_item_obj( Widget_Data* wd, Elm_Coverflow_Item* item )
-{
- if( item == NULL ) {
- return ;
- }
-
- //Original Object
- item->base = _TEMP_CREATE_ICON( wd->parent, (int) item->data );
- _init_item_obj( item->base );
-// evas_object_smart_callback_add( item->base, "clicked", _item_clicked_ev, item );
- evas_object_event_callback_add( item->base, EVAS_CALLBACK_MOUSE_UP, _item_clicked_ev, item );
-
- item->wd = wd;
-
- //Reflection Object
- item->reflection = _TEMP_CREATE_ICON( wd->parent, (int) item->data );
- _init_item_obj( item->reflection );
-
- wd->valid_item_length += wd->dist_between_items;
-}
-
-
-inline static void _init_item_obj( Evas_Object* obj )
-{
- evas_object_size_hint_weight_set( obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND );
- evas_object_size_hint_align_set( obj, EVAS_HINT_FILL, EVAS_HINT_FILL );
- evas_object_resize( obj, COVER_SIZE, COVER_SIZE );
- evas_object_map_enable_set( obj, EINA_TRUE );
-
-}
-
-
-
-EAPI Elm_Coverflow_Item* elm_coverflow_item_append(
- Evas_Object* obj,
- Elm_Coverflow_Item_Class* cic,
- void* data,
- void (*func)(void*data, Evas_Object* obj, void* event_info),
- void* func_data )
-{
- if( cic == NULL ) {
- return NULL;
- }
-
- Widget_Data* wd = (Widget_Data*) elm_widget_data_get( obj );
-
- if( wd == NULL ) {
- return NULL;
- }
-
- Elm_Coverflow_Item* item = calloc( 1, sizeof( Elm_Coverflow_Item ) );
-
- if( item == NULL ) {
- return NULL;
- }
-
- item->cic.CoverflowItemGenFunc = cic->CoverflowItemGenFunc;
- item->cic.CoverflowItemDelFunc = cic->CoverflowItemDelFunc;
- item->data = data;
- item->func = func;
- item->func_data = func_data;
- item->idx = eina_list_count( wd->all_item_list );
-
- wd->all_item_list = eina_list_append( wd->all_item_list, item );
-
- //If the item count is less than valid item count
- if( eina_list_count( wd->all_item_list ) <= wd->valid_item_cnt ) {
-
- _create_item_obj( wd, item );
-
- //For First item.
- wd->valid_item_list = wd->all_item_list;
-
- //Exactly It does not need to update_items.
- if( wd->show == EINA_TRUE ) {
- _update_items( wd, Shift_Left, EINA_FALSE );
- }
-
- }
-
- return item;
-}
-
-
-
-/*
-EAPI Elm_Coverflow_Item* elm_coverflow_item_prepend( Evas_Object* obj, Evas_Object* item )
-{
- Elm_Coverflow_Item* item;
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
- return item;
-}
-
-
-
-EAPI Elm_Coverflow_Item* elm_coverflow_item_insert_before( Evas_Object* obj, Elm_Coverflow_Item* before_item, Evas_Object* item ) {
- Elm_Coverflow_Item* item;
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
- return item;
-}
-
-
-EAPI Elm_Coverflow_Item* elm_coverflow_item_insert_after( Evas_Object* obj, Elm_Coverflow_Item* after_item, Evas_Object* item ) {
-
- Elm_Coverflow_Item* item;
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
- return item;
-}
-
-
-EAPI Elm_Coverflow_Item* elm_coverflow_first_item_get( Evas_Object* obj )
-{
-fprintf( stderr, "Sorry, It does not support yet!\n" );
- return NULL;
-}
-
-
-EAPI Elm_Coverflow_Item* elm_coverflow_last_item_get( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
- return NULL;
-}
-
-
-
-EAPI void elm_coverflow_item_del( Evas_Object* obj, Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
- if( --wd->item_cnt == 0 ) {
- wd->visible_item_head = NULL;
- }
-
-}
-
-
-EAPI unsigned int elm_coverflow_item_count_get( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return 0;
-}
-
-
-EAPI void elm_coverflow_item_disabled_set( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-}
-
-EAPI Eina_Bool elm_coverflow_item_disabled_get( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return EINA_FALSE;
-}
-
-
-EAPI const Eina_List* elm_coverflow_items_get( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return NULL;
-}
-
-
-
-
-EAPI void elm_coverflow_multiselect_set( Evas_Object* obj, Eina_Bool multi )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-}
-
-EAPI Eina_Bool elm_coverflow_multiselect_get( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-
- return EINA_FALSE;
-}
-
-EAPI Eina_List* elm_coverflow_selected_items_get( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return NULL;
-}
-
-
-EAPI unsigned int elm_coverflow_selected_items_count_get( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return 0;
-}
-
-
-EAPI void elm_coverflow_multiselected_cancel( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-}
-
-
-EAPI void elm_coverflow_multiselected_showup( Evas_Object* obj )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-}
-
-
-
-EAPI Elm_Coverflow_Item* elm_coverflow_item_next_get( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return NULL;
-}
-
-
-EAPI Elm_Coverflow_Item* elm_coverflow_item_prev_get( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return NULL;
-}
-
-
-EAPI void elm_coverflow_item_bring_in( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-}
-
-
-EAPI void elm_coverflow_item_top_bring_in( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-}
-
-
-EAPI void elm_coverflow_item_middle_bring_in( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
-}
-
-
-EAPI Evas_Object* elm_coverflow_item_object_get( Elm_Coverflow_Item* item )
-{
- fprintf( stderr, "Sorry, It does not support yet!\n" );
- return NULL;
-}
-
-*/
if (h < 0) h = 0;
if( (rotation == 0) || (rotation ==180)) {
+ printf( "indicator %d\n", h);
return h;
}else {
+ printf( "indicator %d\n", w);
return w;
}
+
}
static Elm_Ctxpopup_Arrow
if (base_w > max_width_size)
base_w = max_width_size;
+ //s -a
+ //evas_object_size_hint_max_get
+
if(wd->position_forced)
{
rect->x = x;
break;
}
- //Not enough space to locate. In this case, just show with down arrow.
- //And prevent to show the arrow.
+ //Not enough space to locate. In this case, just show And prevent to show the arrow.
if( !(available_direction[0] | available_direction[1] | available_direction[2] | available_direction[3]) )
{
- ADJUST_POS_X(x);
- arrow = -1;
- y = indicator_h;
- evas_object_hide(wd->arrow);
+ x = area_x + (area_w/2) - (base_w / 2);
+ y = area_y + (area_y/2) - (base_h / 2);
+ arrow = -1;
+ evas_object_hide(wd->arrow);
}
rect->x = x;
/**
* Add a new ctxpopup object to the parent.
*
- * @param[in] parent Parent object
+ * @param[in] obj window object
* @return New object or NULL if it cannot be created
*
* @ingroup Ctxpopup
*/
EAPI Evas_Object *
-elm_ctxpopup_add(Evas_Object *parent)
+elm_ctxpopup_add(Evas_Object *obj)
{
Evas_Object *obj;
Evas *e;
+++ /dev/null
-#include <Elementary.h>
-#include "elm_priv.h"
-#include <langinfo.h>
-#include <string.h>
-
-/**
- * @defgroup Datepicker2 Datepicker2
- * @ingroup Elementary
- *
- * This is a date picker.
- */
-
-enum {
- PICKER_YEAR,
- PICKER_MON,
- PICKER_DAY,
- PICKER_MAX
-};
-
-#define YEAR_MIN (1900)
-#define YEAR_MAX (2099)
-#define MONTH_MIN (1)
-#define MONTH_MAX (12)
-#define DAY_MIN (1)
-#define DAY_MAX (31)
-#define MONTH_MAX (12)
-#define DAY_MAX (31)
-
-typedef struct _Widget_Data Widget_Data;
-
-struct _Widget_Data {
- Evas_Object *base;
- Evas_Object *pickers[PICKER_MAX];
- int y_max, m_max, d_max;
- int y_min, m_min, d_min;
- int day_of_month;
- int year, month, day;
- char fmt[8];
-};
-
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _disable_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _i18n(Evas_Object *obj);
-static Evas_Object *_picker_add(Evas_Object *ly, const char *part, int min, int max, const char *fmt);
-static void _pickers_del(Evas_Object *obj);
-static void _picker_item_add(Evas_Object *eo, int min, int max, const char *fmt);
-static void _picker_item_del(Evas_Object *eo);
-static void _update_day_of_month(Evas_Object *obj, int month);
-static void _update_picker(Evas_Object *picker, int nth);
-static void _changed(Evas_Object *picker, Evas_Object *child, Evas_Object *obj);
-static void _overflow_cb(void *data, Evas_Object *obj, void *event_info);
-static void _underflow_cb(void *data, Evas_Object *obj, void *event_info);
-static void _year_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _month_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _day_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _pickers_add(Evas_Object *obj);
-static void _callback_init(Evas_Object *obj);
-
-static Eina_Bool
-_is_valid_date(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- int cur, min, max;
- if (!wd) return EINA_FALSE;
-
- cur = wd->year * 10000 + wd->month * 100 + wd->day;
- max = wd->y_max * 10000 + wd->m_max * 100 + wd->d_max;
- min = wd->y_min * 10000 + wd->m_min * 100 + wd->d_min;
-
- if (cur > max || cur < min) return EINA_FALSE;
- return EINA_TRUE;
-}
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _pickers_del(obj);
- free(wd);
-}
-
-static void
-_theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- _pickers_del(obj);
- _elm_theme_object_set(obj, wd->base, "datepicker2", "base", elm_widget_style_get(obj));
- _pickers_add(obj);
- _i18n(obj);
-
- _update_picker(wd->pickers[PICKER_YEAR], wd->year - wd->y_min);
- _update_picker(wd->pickers[PICKER_MON], wd->month - 1);
- _update_picker(wd->pickers[PICKER_DAY], wd->day - 1);
-
- _sizing_eval(obj);
-}
-
-static void
-_disable_hook(Evas_Object *obj)
-{
-
-}
-
-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;
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- evas_object_size_hint_min_set(obj, minw, minh);
- evas_object_size_hint_max_set(obj, maxw, maxh);
-}
-
-static void
-_i18n(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- const char *fmt;
- char sig[32] = { "elm,state," };
- int i = 0, j, k;
-
- if (!wd) return;
-
- j = strlen(sig);
- k = j;
- fmt = nl_langinfo(D_FMT);
-
- while (fmt[i] && j < 32) {
- if (fmt[i] == '%' && fmt[i+1]) {
- i++;
- switch (fmt[i]) {
- case 'Y': case 'M': case 'D': case 'y': case 'm': case 'd':
- sig[j++] = tolower(fmt[i]);
- sig[j++] = tolower(fmt[i]);
- break;
- default:
- break;
- }
- }
- i++;
- }
- sig[j] = '\0';
- edje_object_signal_emit(wd->base, sig, "elm");
- snprintf(wd->fmt, 8, sig + k);
-}
-
-static void
-_picker_item_add(Evas_Object *eo, int min, int max, const char *fmt)
-{
- char buf[8];
- for (; min <= max; min++) {
- snprintf(buf, 8, fmt, min);
- elm_discpicker_item_append(eo, buf, NULL, NULL);
- }
-}
-
-static void
-_picker_item_del(Evas_Object *eo)
-{
- Elm_Picker_Item *item;
- item = elm_discpicker_first_item_get(eo);
- while (item) {
- elm_discpicker_item_del(item);
- item = elm_discpicker_first_item_get(eo);
- }
-}
-
-static Evas_Object *
-_picker_add(Evas_Object *ly, const char *part, int min, int max, const char *fmt)
-{
- Evas_Object *eo;
- eo = elm_discpicker_add(ly);
- _picker_item_add(eo, min, max, fmt);
- evas_object_data_set(eo, "freeze", 0);
- if (part)
- edje_object_part_swallow(ly, part, eo);
- return eo;
-}
-
-static Evas_Object *
-_picker_month_add(Evas_Object *ly, const char *part, const char *fmt)
-{
- int i;
- char buf[32];
- struct tm tm = {0, };
-
- Evas_Object *eo;
- Elm_Discpicker_Item *it;
- eo = elm_discpicker_add(ly);
-
- for (i = 0; i < 12; i++) {
- tm.tm_mon = i;
- strftime(buf, 32, fmt, &tm);
- it = elm_discpicker_item_append(eo, buf, NULL, NULL);
- elm_discpicker_item_data_set(it, (void *)(i + 1));
- }
-
- if (part)
- edje_object_part_swallow(ly, part, eo);
- return eo;
-}
-
-static void
-_update_day_of_month(Evas_Object *obj, int month)
-{
- int tmp, need_move = 0;
- Elm_Picker_Item *item, *selected_item;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- tmp = wd->day_of_month;
- switch (month) {
- case 4: case 6: case 9: case 11:
- wd->day_of_month = 30;
- break;
- case 2:
- if ((!(wd->year % 4) && (wd->year % 100)) || !(wd->year % 400))
- wd->day_of_month = 29;
- else
- wd->day_of_month = 28;
- break;
- default:
- wd->day_of_month = 31;
- break;
- }
-
- if (wd->day > wd->day_of_month) {
- wd->day = wd->day_of_month;
- }
-
- if (tmp == wd->day_of_month) return;
- item = elm_discpicker_last_item_get(wd->pickers[PICKER_DAY]);
-
- if (tmp > wd->day_of_month) {
- selected_item = elm_discpicker_selected_item_get(wd->pickers[PICKER_DAY]);
- for (; tmp > wd->day_of_month; tmp--) {
- elm_discpicker_item_disabled_set(item, EINA_TRUE);
- if (selected_item == item) need_move = 1;
- item = elm_discpicker_item_prev(item);
- }
- if (need_move) elm_discpicker_prev(wd->pickers[PICKER_DAY]);
- } else {
- while (item && elm_discpicker_item_disabled_get(item)) {
- elm_discpicker_item_disabled_set(item, EINA_FALSE);
- item = elm_discpicker_item_prev(item);
- }
- }
-}
-
-static void
-_update_picker(Evas_Object *picker, int nth)
-{
- const Eina_List *l;
- Elm_Picker_Item *item;
- int i;
- l = elm_discpicker_items_get(picker);
- for (i = 0; i < nth; i++) {
- l = l->next;
- if (!l) break;
- }
- item = eina_list_data_get(l);
- evas_object_data_set(picker, "freeze", 1);
- elm_discpicker_item_selected_set(item);
-}
-
-static void
-_changed(Evas_Object *picker, Evas_Object *child, Evas_Object *obj)
-{
- int c1, c2 = 0;
- c1 = (int)(evas_object_data_get(picker, "carryon"));
- evas_object_data_set(picker, "carryon", (void *)0);
-
- if (child) {
- c2 = (int)(evas_object_data_get(child, "carryon"));
- evas_object_data_set(child, "carryon", (void *)0);
- }
-
- if (!c1 && !c2)
- evas_object_smart_callback_call(obj, "selected", NULL);
-}
-
-static void
-_overflow_cb(void *data, Evas_Object *obj, void *event_info)
-{
- int freeze;
- Evas_Object *eo;
- eo = evas_object_data_get(obj, "parent");
-
- freeze = (int)evas_object_data_get(obj, "freeze");
- if (freeze) {
- evas_object_data_set(obj, "freeze", 0);
- return;
- }
-
- if (eo) {
- elm_discpicker_next(eo);
- evas_object_data_set(obj, "carryon", (void *)1);
- }
-}
-
-static void
-_underflow_cb(void *data, Evas_Object *obj, void *event_info)
-{
- int freeze;
- Evas_Object *eo;
- eo = evas_object_data_get(obj, "parent");
- Widget_Data *wd = elm_widget_data_get(data);
-
- freeze = (int)evas_object_data_get(obj, "freeze");
- if (freeze) {
- evas_object_data_set(obj, "freeze", 0);
- return;
- }
-
- if (eo) {
- elm_discpicker_prev(eo);
- evas_object_data_set(obj, "carryon", (void *)-1);
- }
-
- if (obj == wd->pickers[PICKER_DAY]) {
- Elm_Picker_Item *item;
- _update_day_of_month(data, wd->month - 1);
- wd->day = wd->day_of_month;
- item = elm_discpicker_last_item_get(obj);
- elm_discpicker_item_selected_set(item);
- }
-}
-
-static void
-_year_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *year;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- year = elm_discpicker_item_label_get(event_info);
- wd->year = atoi(year);
-
- if (wd->month == 2)
- _update_day_of_month(data, wd->month);
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static void
-_month_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- wd->month = (int)elm_discpicker_item_data_get(event_info);
-
- _update_day_of_month(data, wd->month);
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static void
-_day_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *day;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- day = elm_discpicker_item_label_get(event_info);
- wd->day = atoi(day);
-
- if (elm_discpicker_item_disabled_get(event_info) == EINA_TRUE) {
- elm_discpicker_prev(obj);
- } else {
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
- }
-}
-
-static void
-_pickers_add(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- wd->pickers[PICKER_YEAR] = _picker_add(wd->base, "elm.swallow.year", wd->y_min, wd->y_max, "%04d");
- wd->pickers[PICKER_MON] = _picker_month_add(wd->base, "elm.swallow.mon", "%B");
- wd->pickers[PICKER_DAY] = _picker_add(wd->base, "elm.swallow.day", 1, wd->day_of_month, "%02d");
- _callback_init(obj);
-}
-
-static void
-_pickers_del(Evas_Object *obj)
-{
- int i = 0;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- for (i = 0; i < PICKER_MAX; i++) {
- if (wd->pickers[i]) {
- evas_object_del(wd->pickers[i]);
- wd->pickers[i] = NULL;
- }
- }
-}
-
-static void
-_callback_init(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- evas_object_data_set(wd->pickers[PICKER_YEAR], "child", wd->pickers[PICKER_MON]);
- evas_object_data_set(wd->pickers[PICKER_MON], "child", wd->pickers[PICKER_DAY]);
- evas_object_data_set(wd->pickers[PICKER_MON], "parent", wd->pickers[PICKER_YEAR]);
- evas_object_data_set(wd->pickers[PICKER_DAY], "parent", wd->pickers[PICKER_MON]);
-
- evas_object_smart_callback_add(wd->pickers[PICKER_MON], "overflowed", _overflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_MON], "underflowed", _underflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_DAY], "overflowed", _overflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_DAY], "underflowed", _underflow_cb, obj);
-
- evas_object_smart_callback_add(wd->pickers[PICKER_YEAR], "selected", _year_changed_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_MON], "selected", _month_changed_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_DAY], "selected", _day_changed_cb, obj);
-}
-
-/**
- * Add a new datepicker to the parent
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Datepicker2
- */
-EAPI Evas_Object *
-elm_datepicker2_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- elm_widget_type_set(obj, "datepicker2");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
-
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
- elm_widget_disable_hook_set(obj, _disable_hook);
-
- wd->base = edje_object_add(e);
- _elm_theme_object_set(obj, wd->base, "datepicker2", "base", "default");
- elm_widget_resize_object_set(obj, wd->base);
-
- wd->y_max = YEAR_MAX;
- wd->y_min = YEAR_MIN;
- wd->m_max = MONTH_MAX;
- wd->m_min = MONTH_MIN;
- wd->d_min = DAY_MIN;
- wd->d_max = DAY_MAX;
- wd->day_of_month = DAY_MAX;
-
- wd->year = YEAR_MIN;
- wd->month = 1;
- wd->day = 1;
-
- _pickers_add(obj);
-
- _i18n(obj);
-
- _sizing_eval(obj);
- return obj;
-}
-
-/**
- * Set selected date of the datepicker
- *
- * @param obj The datepicker object
- * @param year The year to set
- * @param month The month to set
- * @param day The day to set
- *
- * @ingroup Datepicker2
- */
-EAPI void
-elm_datepicker2_date_set(Evas_Object *obj, int year, int month, int day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year < wd->y_min || year > wd->y_max
- || month < 1 || month > 12
- || day < 1 || day > 31)
- return;
- wd->year = year;
- wd->month = month;
- wd->day = day;
- _update_day_of_month(obj, month);
- _update_picker(wd->pickers[PICKER_YEAR], wd->year - wd->y_min);
- _update_picker(wd->pickers[PICKER_MON], wd->month - 1);
- _update_picker(wd->pickers[PICKER_DAY], wd->day - 1);
-}
-
-/**
- * Get selected date of the datepicker
- *
- * @param obj The datepicker object
- * @param year The pointer to the variable get the selected year
- * @param month The pointer to the variable get the selected month
- * @param day The pointer to the variable get the selected day
- *
- * @ingroup Datepicker2
- */
-EAPI void
-elm_datepicker2_date_get(Evas_Object *obj, int *year, int *month, int *day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year)
- *year = wd->year;
- if (month)
- *month = wd->month;
- if (day)
- *day = wd->day;
-}
-
-/**
- * Set upper bound of the datepicker
- *
- * @param obj The datepicker object
- * @param year The year to set
- * @param month The month to set
- * @param day The day to set
- *
- * @ingroup Datepicker2
- */
-EAPI void
-elm_datepicker2_date_min_set(Evas_Object *obj, int year, int month, int day)
-{
- // TODO
-}
-
-/**
- * Get lower bound of the datepicker
- *
- * @param obj The datepicker object
- * @param year The pointer to the variable get the minimum year
- * @param month The pointer to the variable get the minimum month
- * @param day The pointer to the variable get the minimum day
- *
- * @ingroup Datepicker2
- */
-EAPI void
-elm_datepicker2_date_min_get(Evas_Object *obj, int *year, int *month, int *day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year)
- *year = wd->y_min;
- if (month)
- *month = wd->m_min;
- if (day)
- *day = wd->d_min;
-}
-
-/**
- * Set lower bound of the datepicker
- *
- * @param obj The datepicker object
- * @param year The year to set
- * @param month The month to set
- * @param day The day to set
- *
- * @ingroup Datepicker2
- */
-EAPI void
-elm_datepicker2_date_max_set(Evas_Object *obj, int year, int month, int day)
-{
- // TODO
-}
-
-/**
- * Get upper bound of the datepicker
- *
- * @param obj The datepicker object
- * @param year The pointer to the variable get the maximum year
- * @param month The pointer to the variable get the maximum month
- * @param day The pointer to the variable get the maximum day
- *
- * @ingroup Datepicker2
- */
-EAPI void
-elm_datepicker2_date_max_get(Evas_Object *obj, int *year, int *month, int *day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year)
- *year = wd->y_max;
- if (month)
- *month = wd->m_max;
- if (day)
- *day = wd->d_max;
-}
-
-/**
- * Set date format of datepicker
- *
- * @param obj The datepicker object
- * @param fmt The date format, ex) yymmdd
- *
- * @ingroup Datepicker2
- */
-EAPI void
-elm_datepicker2_date_format_set(Evas_Object *obj, const char *fmt)
-{
- char sig[32] = "elm,state,";
- int i = 0, j;
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd || !fmt) return;
-
- j = strlen(sig);
- while (j < 32) {
- sig[j++] = tolower(fmt[i++]);
- }
-
- edje_object_signal_emit(wd->base, sig, "elm");
-}
-
-/**
- * Get date format of datepicker
- *
- * @param obj The datepicker object
- * @return The date format of given datepicker
- *
- * @ingroup Datepicker2
- */
-EAPI const char *
-elm_datepicker2_date_format_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- return wd->fmt;
-}
+++ /dev/null
-#include <Elementary.h>
-#include "elm_priv.h"
-#include <langinfo.h>
-#include <string.h>
-
-/**
- * @defgroup Datepicker3 Datepicker3
- * @ingroup Elementary
- *
- * This is a date picker3.
- */
-
-enum {
- PICKER_YEAR,
- PICKER_MON,
- PICKER_DAY,
- PICKER_MAX
-};
-
-#define YEAR_MIN (1900)
-#define YEAR_MAX (2099)
-#define MONTH_MIN (1)
-#define MONTH_MAX (12)
-#define DAY_MIN (1)
-#define DAY_MAX (31)
-#define MONTH_MAX (12)
-#define DAY_MAX (31)
-
-typedef struct _Widget_Data Widget_Data;
-
-struct _Widget_Data {
- Evas_Object *base;
- Evas_Object *pickers[PICKER_MAX];
- int y_max, m_max, d_max;
- int y_min, m_min, d_min;
- int day_of_month;
- int year, month, day;
- char fmt[8];
-};
-
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _disable_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _i18n(Evas_Object *obj);
-static Evas_Object *_picker_add(Evas_Object *ly, const char *part, int min, int max, const char *fmt);
-static void _pickers_del(Evas_Object *obj);
-static void _picker_item_add(Evas_Object *eo, int min, int max, const char *fmt);
-static void _picker_item_del(Evas_Object *eo);
-static void _update_day_of_month(Evas_Object *obj, int month);
-static void _update_picker(Evas_Object *picker, int nth);
-static void _changed(Evas_Object *picker, Evas_Object *child, Evas_Object *obj);
-static void _overflow_cb(void *data, Evas_Object *obj, void *event_info);
-static void _underflow_cb(void *data, Evas_Object *obj, void *event_info);
-static void _year_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _month_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _day_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _pickers_add(Evas_Object *obj);
-static void _callback_init(Evas_Object *obj);
-
-static Eina_Bool
-_is_valid_date(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- int cur, min, max;
- if (!wd) return EINA_FALSE;
-
- cur = wd->year * 10000 + wd->month * 100 + wd->day;
- max = wd->y_max * 10000 + wd->m_max * 100 + wd->d_max;
- min = wd->y_min * 10000 + wd->m_min * 100 + wd->d_min;
-
- if (cur > max || cur < min) return EINA_FALSE;
- return EINA_TRUE;
-}
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _pickers_del(obj);
- free(wd);
-}
-
-static void
-_theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- _pickers_del(obj);
- _elm_theme_object_set(obj, wd->base, "datepicker3", "base", elm_widget_style_get(obj));
- _pickers_add(obj);
- _i18n(obj);
-
- _update_picker(wd->pickers[PICKER_YEAR], wd->year - wd->y_min);
- _update_picker(wd->pickers[PICKER_MON], wd->month - 1);
- _update_picker(wd->pickers[PICKER_DAY], wd->day - 1);
-
- _sizing_eval(obj);
-}
-
-static void
-_disable_hook(Evas_Object *obj)
-{
-
-}
-
-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;
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- evas_object_size_hint_min_set(obj, minw, minh);
- evas_object_size_hint_max_set(obj, maxw, maxh);
-}
-
-static void
-_i18n(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- const char *fmt;
- char sig[32] = { "elm,state," };
- int i = 0, j, k;
-
- if (!wd) return;
-
- j = strlen(sig);
- k = j;
- fmt = nl_langinfo(D_FMT);
-
- while (fmt[i] && j < 32) {
- if (fmt[i] == '%' && fmt[i+1]) {
- i++;
- switch (fmt[i]) {
- case 'Y': case 'M': case 'D': case 'y': case 'm': case 'd':
- sig[j++] = tolower(fmt[i]);
- sig[j++] = tolower(fmt[i]);
- break;
- default:
- break;
- }
- }
- i++;
- }
- sig[j] = '\0';
- edje_object_signal_emit(wd->base, sig, "elm");
- snprintf(wd->fmt, 8, sig + k);
-}
-
-static void
-_picker_item_add(Evas_Object *eo, int min, int max, const char *fmt)
-{
- char buf[8];
- for (; min <= max; min++) {
- snprintf(buf, 8, fmt, min);
- elm_buttonpicker_item_append(eo, buf, NULL, NULL);
- }
-}
-
-static void
-_picker_item_del(Evas_Object *eo)
-{
- Elm_Buttonpicker_Item *item;
- item = elm_buttonpicker_first_item_get(eo);
- while (item) {
- elm_buttonpicker_item_del(item);
- item = elm_buttonpicker_first_item_get(eo);
- }
-}
-
-static Evas_Object *
-_picker_add(Evas_Object *ly, const char *part, int min, int max, const char *fmt)
-{
- Evas_Object *eo;
- eo = elm_buttonpicker_add(ly);
- _picker_item_add(eo, min, max, fmt);
- if (part)
- edje_object_part_swallow(ly, part, eo);
- return eo;
-}
-
-static void
-_update_day_of_month(Evas_Object *obj, int month)
-{
- int tmp;
- Elm_Buttonpicker_Item *item;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- tmp = wd->day_of_month;
- switch (month) {
- case 4: case 6: case 9: case 11:
- wd->day_of_month = 30;
- break;
- case 2:
- if ((!(wd->year % 4) && (wd->year % 100)) || !(wd->year % 400))
- wd->day_of_month = 29;
- else
- wd->day_of_month = 28;
- break;
- default:
- wd->day_of_month = 31;
- break;
- }
-
- if (wd->day > wd->day_of_month) {
- wd->day = wd->day_of_month;
- }
-
- if (tmp == wd->day_of_month) return;
- if (tmp > wd->day_of_month) {
- for (; tmp > wd->day_of_month; tmp--) {
- item = elm_buttonpicker_last_item_get(wd->pickers[PICKER_DAY]);
- elm_buttonpicker_item_del(item);
- }
- } else {
- char buf[8];
- tmp++;
- for (; tmp <= wd->day_of_month; tmp++) {
- snprintf(buf, 8, "%2d", tmp);
- elm_buttonpicker_item_append(wd->pickers[PICKER_DAY], buf, NULL, NULL);
- }
- }
-}
-
-static void
-_update_picker(Evas_Object *picker, int nth)
-{
- const Eina_List *l;
- Elm_Buttonpicker_Item *item;
- int i;
- l = elm_buttonpicker_items_get(picker);
- for (i = 0; i < nth; i++) {
- l = l->next;
- if (!l) break;
- }
- item = eina_list_data_get(l);
- elm_buttonpicker_item_selected_set(item);
-}
-
-static void
-_changed(Evas_Object *picker, Evas_Object *child, Evas_Object *obj)
-{
- int c1, c2 = 0;
- c1 = (int)(evas_object_data_get(picker, "carryon"));
- evas_object_data_set(picker, "carryon", (void *)0);
-
- if (child) {
- c2 = (int)(evas_object_data_get(child, "carryon"));
- evas_object_data_set(child, "carryon", (void *)0);
- }
-
- if (!c1 && !c2)
- evas_object_smart_callback_call(obj, "changed", NULL);
-}
-
-static void
-_overflow_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Evas_Object *eo;
- eo = evas_object_data_get(obj, "parent");
- if (eo) {
- elm_buttonpicker_next(eo);
- evas_object_data_set(obj, "carryon", (void *)1);
- }
-}
-
-static void
-_underflow_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Evas_Object *eo;
- eo = evas_object_data_get(obj, "parent");
- Widget_Data *wd = elm_widget_data_get(data);
-
- if (eo) {
- elm_buttonpicker_prev(eo);
- evas_object_data_set(obj, "carryon", (void *)-1);
- }
-
- if (obj == wd->pickers[PICKER_DAY]) {
- Elm_Buttonpicker_Item *item;
- _update_day_of_month(data, wd->month - 1);
- wd->day = wd->day_of_month;
- item = elm_buttonpicker_last_item_get(obj);
- elm_buttonpicker_item_selected_set(item);
- }
-}
-
-static void
-_year_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *year;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- year = elm_buttonpicker_item_label_get(event_info);
- wd->year = atoi(year);
-
- if (wd->month == 2)
- _update_day_of_month(data, wd->month);
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static void
-_month_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *month;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- month = elm_buttonpicker_item_label_get(event_info);
- //wd->month = atoi(month);
-
- if(strcmp(month, "Jan")==0)
- wd->month = 1;
- else if(strcmp(month, "Feb")==0)
- wd->month = 2;
- else if(strcmp(month, "Mar")==0)
- wd->month = 3;
- else if(strcmp(month, "Apr")==0)
- wd->month = 4;
- else if(strcmp(month, "May")==0)
- wd->month = 5;
- else if(strcmp(month, "Jun")==0)
- wd->month = 6;
- else if(strcmp(month, "Jul")==0)
- wd->month = 7;
- else if(strcmp(month, "Aug")==0)
- wd->month = 8;
- else if(strcmp(month, "Sep")==0)
- wd->month = 9;
- else if(strcmp(month, "Oct")==0)
- wd->month = 10;
- else if(strcmp(month, "Nov")==0)
- wd->month = 11;
- else if(strcmp(month, "Dec")==0)
- wd->month = 12;
-
- _update_day_of_month(data, wd->month);
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static void
-_day_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *day;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- day = elm_buttonpicker_item_label_get(event_info);
- wd->day = atoi(day);
-
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static Evas_Object *
-_picker_month_add(Evas_Object *ly, const char *part, const char *fmt)
-{
- int i;
- char buf[32];
- struct tm tm = {0, };
-
- Evas_Object *eo;
- Elm_Buttonpicker_Item *it;
- eo = elm_buttonpicker_add(ly);
-
- for (i = 0; i < 12; i++) {
- tm.tm_mon = i;
- strftime(buf, 32, fmt, &tm);
- it = elm_buttonpicker_item_append(eo, buf, NULL, NULL);
- }
-
- if (part)
- edje_object_part_swallow(ly, part, eo);
- return eo;
-}
-
-static void
-_pickers_add(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- wd->pickers[PICKER_YEAR] = _picker_add(wd->base, "elm.swallow.year", wd->y_min, wd->y_max, "%04d");
- wd->pickers[PICKER_MON] = _picker_month_add(wd->base, "elm.swallow.mon", "%b");
- wd->pickers[PICKER_DAY] = _picker_add(wd->base, "elm.swallow.day", 1, wd->day_of_month, "%02d");
- _callback_init(obj);
-}
-
-static void
-_pickers_del(Evas_Object *obj)
-{
- int i = 0;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- for (i = 0; i < PICKER_MAX; i++) {
- if (wd->pickers[i]) {
- evas_object_del(wd->pickers[i]);
- wd->pickers[i] = NULL;
- }
- }
-}
-
-static void
-_callback_init(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- evas_object_data_set(wd->pickers[PICKER_YEAR], "child", wd->pickers[PICKER_MON]);
- evas_object_data_set(wd->pickers[PICKER_MON], "child", wd->pickers[PICKER_DAY]);
- evas_object_data_set(wd->pickers[PICKER_MON], "parent", wd->pickers[PICKER_YEAR]);
- evas_object_data_set(wd->pickers[PICKER_DAY], "parent", wd->pickers[PICKER_MON]);
-
- evas_object_smart_callback_add(wd->pickers[PICKER_MON], "overflowed", _overflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_MON], "underflowed", _underflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_DAY], "overflowed", _overflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_DAY], "underflowed", _underflow_cb, obj);
-
- evas_object_smart_callback_add(wd->pickers[PICKER_YEAR], "changed", _year_changed_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_MON], "changed", _month_changed_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_DAY], "changed", _day_changed_cb, obj);
-}
-
-/**
- * Add a new datepicker3 to the parent
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Datepicker3
- */
-EAPI Evas_Object *
-elm_datepicker3_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- elm_widget_type_set(obj, "datepicker3");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
-
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
- elm_widget_disable_hook_set(obj, _disable_hook);
-
- wd->base = edje_object_add(e);
- _elm_theme_object_set(obj, wd->base, "datepicker3", "base", "default");
- elm_widget_resize_object_set(obj, wd->base);
-
- wd->y_max = YEAR_MAX;
- wd->y_min = YEAR_MIN;
- wd->m_max = MONTH_MAX;
- wd->m_min = MONTH_MIN;
- wd->d_min = DAY_MIN;
- wd->d_max = DAY_MAX;
- wd->day_of_month = DAY_MAX;
-
- wd->year = YEAR_MIN;
- wd->month = 1;
- wd->day = 1;
-
- _pickers_add(obj);
-
- _i18n(obj);
-
- _sizing_eval(obj);
- return obj;
-}
-
-/**
- * Set selected date of the datepicker3
- *
- * @param obj The datepicker3 object
- * @param year The year to set
- * @param month The month to set
- * @param day The day to set
- *
- * @ingroup Datepicker3
- */
-EAPI void
-elm_datepicker3_date_set(Evas_Object *obj, int year, int month, int day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year < wd->y_min || year > wd->y_max
- || month < 1 || month > 12
- || day < 1 || day > 31)
- return;
- wd->year = year;
- wd->month = month;
- wd->day = day;
- _update_day_of_month(obj, month);
- _update_picker(wd->pickers[PICKER_YEAR], wd->year - wd->y_min);
- _update_picker(wd->pickers[PICKER_MON], wd->month - 1);
- _update_picker(wd->pickers[PICKER_DAY], wd->day - 1);
-}
-
-/**
- * Get selected date of the datepicker3
- *
- * @param obj The datepicker3 object
- * @param year The pointer to the variable get the selected year
- * @param month The pointer to the variable get the selected month
- * @param day The pointer to the variable get the selected day
- *
- * @ingroup Datepicker3
- */
-EAPI void
-elm_datepicker3_date_get(Evas_Object *obj, int *year, int *month, int *day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year)
- *year = wd->year;
- if (month)
- *month = wd->month;
- if (day)
- *day = wd->day;
-}
-
-/**
- * Set upper bound of the datepicker3
- *
- * @param obj The datepicker3 object
- * @param year The year to set
- * @param month The month to set
- * @param day The day to set
- *
- * @ingroup Datepicker3
- */
-EAPI void
-elm_datepicker3_date_min_set(Evas_Object *obj, int year, int month, int day)
-{
- // TODO
-}
-
-/**
- * Get lower bound of the datepicker3
- *
- * @param obj The datepicker3 object
- * @param year The pointer to the variable get the minimum year
- * @param month The pointer to the variable get the minimum month
- * @param day The pointer to the variable get the minimum day
- *
- * @ingroup Datepicker3
- */
-EAPI void
-elm_datepicker3_date_min_get(Evas_Object *obj, int *year, int *month, int *day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year)
- *year = wd->y_min;
- if (month)
- *month = wd->m_min;
- if (day)
- *day = wd->d_min;
-}
-
-/**
- * Set lower bound of the datepicker3
- *
- * @param obj The datepicker3 object
- * @param year The year to set
- * @param month The month to set
- * @param day The day to set
- *
- * @ingroup Datepicker3
- */
-EAPI void
-elm_datepicker3_date_max_set(Evas_Object *obj, int year, int month, int day)
-{
- // TODO
-}
-
-/**
- * Get upper bound of the datepicker3
- *
- * @param obj The datepicker3 object
- * @param year The pointer to the variable get the maximum year
- * @param month The pointer to the variable get the maximum month
- * @param day The pointer to the variable get the maximum day
- *
- * @ingroup Datepicker3
- */
-EAPI void
-elm_datepicker3_date_max_get(Evas_Object *obj, int *year, int *month, int *day)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (year)
- *year = wd->y_max;
- if (month)
- *month = wd->m_max;
- if (day)
- *day = wd->d_max;
-}
-
-/**
- * Set date format of datepicker3
- *
- * @param obj The datepicker3 object
- * @param fmt The date format, ex) yymmdd
- *
- * @ingroup Datepicker3
- */
-EAPI void
-elm_datepicker3_date_format_set(Evas_Object *obj, const char *fmt)
-{
- char sig[32] = "elm,state,";
- int i = 0, j;
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd || !fmt) return;
-
- j = strlen(sig);
- while (j < 32) {
- sig[j++] = tolower(fmt[i++]);
- }
-
- edje_object_signal_emit(wd->base, sig, "elm");
-}
-
-/**
- * Get date format of datepicker3
- *
- * @param obj The datepicker3 object
- * @return The date format of given datepicker3
- *
- * @ingroup Datepicker3
- */
-EAPI const char *
-elm_datepicker3_date_format_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return NULL;
- return wd->fmt;
-}
+++ /dev/null
-#include <Elementary.h>
-#include "elm_priv.h"
-
-/**
- * @defgroup Timepicker3 Timepicker3
- * @ingroup Elementary
- *
- * This is a time picker3.
- */
-
-
-#define PICKER_DRAG_BOUND (10)
-
-#define MAX_HOUR (12)
-#define MAX_HOUR2 (23)
-#define MAX_DIGIT (59)
-
-enum {
- PICKER_HRS,
- PICKER_MIN,
- PICKER_SUB,
- PICKER_AMPM,
- PICKER_MAX
-};
-
-typedef struct _Widget_Data Widget_Data;
-
-struct _Widget_Data {
- Evas_Object *base;
- Evas_Object *pickers[PICKER_MAX];
-
- int hrs, min, sec;
- Eina_Bool is_pm;
-
- Eina_Bool ampm;
- Eina_Bool seconds;
-};
-
-static inline Eina_Bool _is_time_valid(int hrs, int min, int sec);
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _disable_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _update_ampm(Evas_Object *obj);
-static void _update_seconds(Evas_Object *obj);
-static void _update_picker(Evas_Object *picker, int nth);
-static void _update_all(Evas_Object *obj);
-static void _hrs_reload(Evas_Object *picker, Eina_Bool ampm);
-static void _digit_reload(Evas_Object *picker, Eina_Bool seconds, int max);
-static Evas_Object *_hrs_add(Evas_Object *ly, const char *part, Eina_Bool ampm);
-static Evas_Object *_digit_add(Evas_Object *ly, const char *part, unsigned char max);
-static Evas_Object *_ampm_add(Evas_Object *ly, const char *part);
-static void _callback_init(Evas_Object *obj);
-static void _pickers_add(Evas_Object *obj);
-static void _pickers_del(Evas_Object *obj);
-static void _changed(Evas_Object *picker, Evas_Object *child, Evas_Object *obj);
-static void _overflow_cb(void *data, Evas_Object *obj, void *event_info);
-static void _underflow_cb(void *data, Evas_Object *obj, void *event_info);
-static void _hrs_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _min_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _sub_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void _ampm_changed_cb(void *data, Evas_Object *obj, void *event_info);
-
-static inline Eina_Bool
-_is_time_valid(int hrs, int min, int sec)
-{
- if (hrs < 0 || hrs > 23 || min < 0 || min > 59 || sec < 0 || sec > 59)
- return EINA_FALSE;
- return EINA_TRUE;
-}
-
-static void
-_del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- _pickers_del(obj);
- free(wd);
-}
-
-static void
-_theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- _pickers_del(obj);
- _elm_theme_object_set(obj, wd->base, "timepicker3", "base", elm_widget_style_get(obj));
- _pickers_add(obj);
-
- _update_ampm(obj);
- _update_seconds(obj);
- _sizing_eval(obj);
-}
-
-static void
-_disable_hook(Evas_Object *obj)
-{
-
-}
-
-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;
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);
- elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- evas_object_size_hint_min_set(obj, minw, minh);
- evas_object_size_hint_max_set(obj, maxw, maxh);
-}
-
-static void
-_update_ampm(Evas_Object *obj)
-{
- const char *sig;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (wd->ampm)
- sig = "elm,state,ampm,visible";
-
- else
- sig = "elm,state,ampm,hidden";
-
- _hrs_reload(wd->pickers[PICKER_HRS], wd->ampm);
- edje_object_signal_emit(wd->base, sig, "elm");
- _update_all(obj);
-}
-
-static void
-_update_seconds(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- const char *sig;
- if (!wd) return;
-
- if (wd->seconds)
- sig = "elm,state,sec,visible";
- else
- sig = "elm,state,sec,hidden";
-
- _digit_reload(wd->pickers[PICKER_MIN], wd->seconds, MAX_DIGIT);
- _digit_reload(wd->pickers[PICKER_SUB], wd->seconds, MAX_DIGIT);
-
- edje_object_signal_emit(wd->base, sig, "elm");
- _update_all(obj);
-}
-
-static void
-_update_picker(Evas_Object *picker, int nth)
-{
- const Eina_List *l;
- Elm_Buttonpicker_Item *item;
- int i;
- l = elm_buttonpicker_items_get(picker);
- for (i = 0; i < nth; i++) {
- l = l->next;
- if (!l) break;
- }
-
- item = eina_list_data_get(l);
-
- elm_buttonpicker_item_selected_set(item);
-}
-
-static void
-_update_all(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- int hrs;
- if (!wd) return;
-
- hrs = wd->hrs;
- if (wd->ampm)
- hrs = wd->hrs % 12;
-
- _update_picker(wd->pickers[PICKER_HRS], hrs);
- if (wd->hrs >= 12)
- wd->is_pm = 1;
- else
- wd->is_pm = 0;
- _update_picker(wd->pickers[PICKER_AMPM], wd->is_pm);
-
- _update_picker(wd->pickers[PICKER_MIN], wd->min);
- _update_picker(wd->pickers[PICKER_SUB], wd->sec);
-
- _sizing_eval(obj);
-}
-
-static void
-_hrs_reload(Evas_Object *picker, Eina_Bool ampm)
-{
- int i, max;
- char buf[8];
- Elm_Buttonpicker_Item *item;
-
- item = elm_buttonpicker_first_item_get(picker);
-
- while (item) {
- elm_buttonpicker_item_del(item);
- item = elm_buttonpicker_first_item_get(picker);
- }
-
- if (ampm) {
- i = 1;
- snprintf(buf, 8, "%02d", MAX_HOUR);
- elm_buttonpicker_item_append(picker, buf, NULL, NULL);
- max = MAX_HOUR - 1;
- } else {
- i = 0;
- max = MAX_HOUR2;
- }
-
- for (; i <= max; i++) {
- snprintf(buf, 8, "%02d", i);
- elm_buttonpicker_item_append(picker, buf, NULL, NULL);
- }
-}
-
-static void
-_digit_reload(Evas_Object *picker, Eina_Bool seconds, int max)
-{
- int i;
- char buf[8];
- Elm_Buttonpicker_Item *item;
-
- item = elm_buttonpicker_first_item_get(picker);
-
- while (item) {
- elm_buttonpicker_item_del(item);
- item = elm_buttonpicker_first_item_get(picker);
- }
-
- for (i = 0; i <= max; i++) {
- snprintf(buf, 8, "%02d", i);
- elm_buttonpicker_item_append(picker, buf, NULL, NULL);
- }
-}
-
-static Evas_Object *
-_hrs_add(Evas_Object *ly, const char *part, Eina_Bool ampm)
-{
- int i, max;
- char buf[8];
- Evas_Object *eo;
- eo = elm_buttonpicker_add(ly);
-
- if (ampm) {
- i = 1;
- snprintf(buf, 8, "%02d", MAX_HOUR);
- elm_buttonpicker_item_append(eo, buf, NULL, NULL);
- max = MAX_HOUR - 1;
- } else {
- i = 0;
- max = MAX_HOUR2;
- }
-
- for (; i <= max; i++) {
- snprintf(buf, 8, "%02d", i);
- elm_buttonpicker_item_append(eo, buf, NULL, NULL);
- }
- if (part)
- edje_object_part_swallow(ly, part, eo);
- return eo;
-}
-
-static Evas_Object *
-_digit_add(Evas_Object *ly, const char *part, unsigned char max)
-{
- int i;
- char buf[8];
- Evas_Object *eo;
- eo = elm_buttonpicker_add(ly);
- for (i = 0; i <= max; i++) {
- snprintf(buf, 8, "%02d", i);
- elm_buttonpicker_item_append(eo, buf, NULL, NULL);
- }
- if (part)
- edje_object_part_swallow(ly, part, eo);
- return eo;
-}
-
-static Evas_Object *
-_ampm_add(Evas_Object *ly, const char *part)
-{
- Evas_Object *eo;
- eo = elm_buttonpicker_add(ly);
- elm_buttonpicker_item_append(eo, "AM", NULL, NULL);
- elm_buttonpicker_item_append(eo, "PM", NULL, NULL);
- if (part)
- edje_object_part_swallow(ly, part, eo);
- return eo;
-}
-
-static void
-_callback_init(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- evas_object_data_set(wd->pickers[PICKER_HRS], "child", wd->pickers[PICKER_MIN]);
- evas_object_data_set(wd->pickers[PICKER_MIN], "child", wd->pickers[PICKER_SUB]);
- evas_object_data_set(wd->pickers[PICKER_SUB], "child", NULL);
- evas_object_data_set(wd->pickers[PICKER_AMPM], "child", wd->pickers[PICKER_HRS]);
- evas_object_data_set(wd->pickers[PICKER_HRS], "parent", wd->pickers[PICKER_AMPM]);
- evas_object_data_set(wd->pickers[PICKER_MIN], "parent", wd->pickers[PICKER_HRS]);
- evas_object_data_set(wd->pickers[PICKER_SUB], "parent", wd->pickers[PICKER_MIN]);
-
- evas_object_smart_callback_add(wd->pickers[PICKER_HRS], "overflowed", _overflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_HRS], "underflowed", _underflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_MIN], "overflowed", _overflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_MIN], "underflowed", _underflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_SUB], "overflowed", _overflow_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_SUB], "underflowed", _underflow_cb, obj);
-
- evas_object_smart_callback_add(wd->pickers[PICKER_HRS], "changed", _hrs_changed_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_MIN], "changed", _min_changed_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_SUB], "changed", _sub_changed_cb, obj);
- evas_object_smart_callback_add(wd->pickers[PICKER_AMPM], "changed", _ampm_changed_cb, obj);
-}
-
-static void
-_pickers_add(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- wd->pickers[PICKER_HRS] = _hrs_add(wd->base, "elm.swallow.hour", EINA_TRUE);
- wd->pickers[PICKER_MIN] = _digit_add(wd->base, "elm.swallow.min", MAX_DIGIT);
- wd->pickers[PICKER_SUB] = _digit_add(wd->base, "elm.swallow.sub", MAX_DIGIT);
- wd->pickers[PICKER_AMPM] = _ampm_add(wd->base, "elm.swallow.ampm");
- edje_object_signal_emit(wd->base, "elm,state,ampm,visible", "elm");
- wd->ampm = EINA_TRUE;
-
- _callback_init(obj);
-}
-
-static void
-_pickers_del(Evas_Object *obj)
-{
- int i = 0;
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- for (i = 0; i < PICKER_MAX; i++) {
- if (wd->pickers[i]) {
- evas_object_del(wd->pickers[i]);
- wd->pickers[i] = NULL;
- }
- }
-}
-
-static void
-_changed(Evas_Object *picker, Evas_Object *child, Evas_Object *obj)
-{
- int c1, c2 = 0;
- c1 = (int)(evas_object_data_get(picker, "carryon"));
- evas_object_data_set(picker, "carryon", (void *)0);
-
- if (child) {
- c2 = (int)(evas_object_data_get(child, "carryon"));
- evas_object_data_set(child, "carryon", (void *)0);
- }
-
- if (!c1 && !c2)
- evas_object_smart_callback_call(obj, "changed", NULL);
-}
-
-static void
-_overflow_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Evas_Object *eo;
- eo = evas_object_data_get(obj, "parent");
- if (eo) {
- elm_buttonpicker_next(eo);
- evas_object_data_set(obj, "carryon", (void *)1);
- }
-}
-
-static void
-_underflow_cb(void *data, Evas_Object *obj, void *event_info)
-{
- Evas_Object *eo;
- eo = evas_object_data_get(obj, "parent");
- if (eo) {
- elm_buttonpicker_prev(eo);
- evas_object_data_set(obj, "carryon", (void *)1);
- }
-}
-
-static void
-_hrs_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *hrs;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- hrs = elm_buttonpicker_item_label_get(event_info);
- wd->hrs = atoi(hrs);
-
- if (wd->ampm) {
- wd->hrs %= 12;
- if (wd->is_pm)
- wd->hrs += 12;
- }
-
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static void
-_min_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *min;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- min = elm_buttonpicker_item_label_get(event_info);
-
- wd->min = atoi(min);
-
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static void
-_sub_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *sub;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- sub = elm_buttonpicker_item_label_get(event_info);
-
- wd->sec = atoi(sub);
-
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-static void
-_ampm_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
- const char *ampm;
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Object *child;
- if (!wd) return;
-
- ampm = elm_buttonpicker_item_label_get(event_info);
-
- wd->hrs = (wd->hrs) % 12;
- if (!strcmp(ampm, "AM")) {
- wd->is_pm = 0;
- } else {
- wd->is_pm = 1;
- wd->hrs += 12;
- }
-
- child = evas_object_data_get(obj, "child");
- _changed(obj, child, data);
-}
-
-/**
- * Add a new timepicker3 to the parent
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Timepicker3
- */
-EAPI Evas_Object *
-elm_timepicker3_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- elm_widget_type_set(obj, "timepicker3");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
-
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
- elm_widget_disable_hook_set(obj, _disable_hook);
-
- wd->base = edje_object_add(e);
- _elm_theme_object_set(obj, wd->base, "timepicker3", "base", "default");
- elm_widget_resize_object_set(obj, wd->base);
- _pickers_add(obj);
- _sizing_eval(obj);
- return obj;
-}
-
-/**
- * Set selected time of the timepicker3
- *
- * @param obj The timepicker3 object
- * @param hrs The hours to set
- * @param min The minutes to set
- * @param sec The seconds to set
- *
- * @ingroup Timepicker3
- */
-EAPI void
-elm_timepicker3_time_set(Evas_Object *obj, int hrs, int min, int sec)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (!_is_time_valid(hrs, min, sec)) return;
-
- wd->hrs = hrs;
- wd->min = min;
- wd->sec = sec;
-
- _update_all(obj);
-}
-
-/**
- * Get selected time of the timepicker3
- *
- * @param obj The timepicker3 object
- * @param hrs The Pointer to the variable to get the selected hours
- * @param min The Pointer to the variable to get the selected minute
- * @param sec The Pointer to the variable to get the selected seconds
- *
- * @ingroup Timepicker3
- */
-EAPI void
-elm_timepicker3_time_get(Evas_Object *obj, int *hrs, int *min, int *sec)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (hrs)
- *hrs = wd->hrs;
- if (min)
- *min = wd->min;
- if (sec)
- *sec = wd->sec;
-}
-
-/**
- * Set if the timepicker3 show hours in military or am/pm mode
- *
- * @param obj The timepicker3 object
- * @param am_pm Bool option for the hours mode
- *
- * @ingroup Timepicker3
- */
-EAPI void
-elm_timepicker3_show_am_pm_set(Evas_Object *obj, Eina_Bool am_pm)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (wd->ampm != am_pm) {
- wd->ampm = am_pm;
- _update_ampm(obj);
- }
-}
-
-/**
- * Set if the timepicker3 show seconds picker3 or not
- *
- * @param obj The timepicker3 object
- * @param am_pm Bool option for the show seconds picker3
- *
- * @ingroup Timepicker3
- */
-EAPI void
-elm_timepicker3_show_seconds_set(Evas_Object *obj, Eina_Bool seconds)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
-
- if (wd->seconds != seconds) {
- wd->seconds = seconds;
- _update_seconds(obj);
- }
-}
+++ /dev/null
-/*
- * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
- */
-#include <Elementary.h>
-#include "elm_priv.h"
-#include "els_scroller.h"
-
-/**
- * @defgroup Toolbar Toolbar
- * @ingroup Elementary
- *
- * For listing a selection of items in a list within a "bar", each item having an icon and label.
- * This is more or less intended for use when selecting different modes - much like a tab widget,
- * but this is just the bar piece.
- */
-
-typedef struct _Widget_Data Widget_Data;
-
-struct _Widget_Data
-{
- Evas_Object *scr, *bx;
- Eina_List *items;
- int icon_size;
- Eina_Bool scrollable : 1;
- Eina_Bool homogeneous : 1;
- double align;
-};
-
-struct _Elm_Toolbar2_Item
-{
- Evas_Object *obj;
- Evas_Object *base;
- Evas_Object *icon;
- void (*func) (void *data, Evas_Object *obj, void *event_info);
- void (*del_cb) (void *data, Evas_Object *obj, void *event_info);
- const void *data;
-};
-
-static void _item_show(Elm_Toolbar2_Item *it);
-static void _del_pre_hook(Evas_Object *obj);
-static void _del_hook(Evas_Object *obj);
-static void _theme_hook(Evas_Object *obj);
-static void _sizing_eval(Evas_Object *obj);
-static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
-static void press_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
-static void press_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
-
-static void _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
-
-static void _item_show(Elm_Toolbar2_Item *it)
-{
- Widget_Data *wd = elm_widget_data_get(it->obj);
- Evas_Coord x, y, w, h, bx, by, bw, bh;
-
- if (!wd) return;
- evas_object_geometry_get(wd->bx, &bx, &by, &bw, &bh);
- evas_object_geometry_get(it->base, &x, &y, &w, &h);
- elm_smart_scroller_child_region_show(wd->scr, x - bx, y - by, w, h);
-}
-
-static void _del_pre_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- Elm_Toolbar2_Item *it;
-
- if (!wd) return;
- EINA_LIST_FREE(wd->items, it)
- {
- if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
- if (it->icon) evas_object_del(it->icon);
- evas_object_del(it->base);
- free(it);
- }
-}
-
-static void _del_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return;
- free(wd);
-}
-
-static void _theme_hook(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- const Eina_List *l;
- Elm_Toolbar2_Item *it;
- const char *style = elm_widget_style_get(obj);
- int ms = 0;
- int scale = 0;
-
- if (!wd) return;
- scale = (elm_widget_scale_get(obj) * _elm_config->scale);
- edje_object_scale_set(wd->scr, scale);
- EINA_LIST_FOREACH(wd->items, l, it)
- {
- // Evas_Coord mw, mh;
- Evas_Coord ic_w, ic_h;
-
- edje_object_scale_set(it->base, scale);
-
-
- _elm_theme_object_set(obj, it->base, "toolbar2", "item", style);
- if (it->icon)
- {
- evas_object_size_hint_min_get(it->icon, &ic_w, &ic_h);
-
- ms = ((double)wd->icon_size * _elm_config->scale);
- if (ic_w > 0 && ic_h > 0)
- {
- if (ic_h > wd->icon_size) ic_h = wd->icon_size;
- evas_object_size_hint_min_set(it->icon, ic_w, ic_h);
- evas_object_size_hint_max_set(it->icon, ic_w, ic_h);
- }
- else
- {
- evas_object_size_hint_min_set(it->icon, ms, ms);
- evas_object_size_hint_max_set(it->icon, ms, ms);
- }
-
- evas_object_size_hint_align_set(it->icon, 0.5, 0.5);
- edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon);
- evas_object_show(it->icon);
- elm_widget_sub_object_add(obj, it->icon);
- }
- /*
- mw = mh = -1;
- elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh);
- elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- */
- evas_object_size_hint_weight_set(it->base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(it->base, 0.5, 0.5);
-
- if (ic_w > 0 && ic_h > 0)
- {
- evas_object_size_hint_min_set(it->base, ic_w, ic_h);
- }
- else
- {
- // evas_object_size_hint_min_set(it->base, mw, mh);
- ms = ((double)wd->icon_size * _elm_config->scale);
-
- evas_object_size_hint_min_set(it->base, ms, ms);
- }
- }
- _sizing_eval(obj);
-}
-
-static void _sizing_eval(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- Evas_Coord minw = -1, minh = -1;
- Evas_Coord vw = 0, vh = 0;
- Evas_Coord w, h;
-
- if (!wd) return;
-
- evas_object_smart_calculate(wd->bx);
- edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh);
- evas_object_geometry_get(obj, NULL, NULL, &w, &h);
-
- if (w < minw) w = minw;
- if (h < minh) h = minh;
-
- evas_object_resize(wd->scr, w, h);
-
- evas_object_size_hint_min_get(wd->bx, &minw, &minh);
- if (w > minw) minw = w;
-
- evas_object_resize(wd->bx, minw, 66);
- if (w > minw) minw = w;
- elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh);
-
- if (wd->scrollable)
- minw = w - vw;
- else
- minw = minw + (w - vw);
-
- minh = minh + (h - vh);
-
- evas_object_size_hint_min_set(obj, vw, vh);
- evas_object_size_hint_max_set(obj, -1, -1);
-}
-
-static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- Evas_Coord mw, mh, vw, vh, w, h;
-
- if (!wd) return;
-
- elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh);
- evas_object_size_hint_min_get(wd->bx, &mw, &mh);
- evas_object_geometry_get(wd->bx, NULL, NULL, &w, &h);
-
- if (vw >= mw)
- {
- if (w != vw) evas_object_resize(wd->bx, vw, h);
- }
-}
-
-static void press_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
-{
- //Evas_Event_Mouse_Down *ev = event_info;
- //printf("\nDown %d\n", ev->flags);
- //Evas_Event_Mouse_Down *ev = event_info;
- Elm_Toolbar2_Item *it = (Elm_Toolbar2_Item *)data;
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
- _item_show(it);
-}
-
-static void press_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
-{
- Elm_Toolbar2_Item *it = (Elm_Toolbar2_Item *)data;
-
- edje_object_signal_emit(it->base, "elm,state,unselected", "elm");
-
- Evas_Event_Mouse_Up *ev = event_info;
- // printf("\nUp %d\n", ev->flags);
- if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
- {
- //printf("\nReturn\n");
- return;
- }
-
- // printf("\nSend\n");
- if (it->func) it->func((void *)(it->data), it->obj, it);
- evas_object_smart_callback_call(it->obj, "clicked", it);
-}
-
-static void _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
-{
- Widget_Data *wd = data;
-
- _els_box_layout(o, priv, 1, wd->homogeneous);
-}
-
-/**
- * Add a new Toolbar object
- *
- * @param parent The parent object
- * @return The new object or NULL if it cannot be created
- *
- * @ingroup Toolbar
- */
-EAPI Evas_Object *elm_toolbar2_add(Evas_Object *parent)
-{
- Evas_Object *obj;
- Evas *e;
- Widget_Data *wd;
-
- wd = ELM_NEW(Widget_Data);
- e = evas_object_evas_get(parent);
- obj = elm_widget_add(e);
- elm_widget_type_set(obj, "toolbar");
- elm_widget_sub_object_add(parent, obj);
- elm_widget_data_set(obj, wd);
- elm_widget_del_pre_hook_set(obj, _del_pre_hook);
- elm_widget_del_hook_set(obj, _del_hook);
- elm_widget_theme_hook_set(obj, _theme_hook);
- elm_widget_can_focus_set(obj, 0);
-
- wd->scr = elm_smart_scroller_add(e);
- elm_smart_scroller_bounce_allow_set(wd->scr, 0, 0);
- elm_smart_scroller_object_theme_set(obj, wd->scr, "toolbar2", "base", "default");
- elm_widget_resize_object_set(obj, wd->scr);
- elm_smart_scroller_policy_set(wd->scr,
- ELM_SMART_SCROLLER_POLICY_AUTO,
- ELM_SMART_SCROLLER_POLICY_OFF);
-
- wd->icon_size = 50;
- wd->scrollable = EINA_TRUE;
- wd->homogeneous = EINA_TRUE;
- wd->align = 0.5;
-
- wd->bx = evas_object_box_add(e);
- evas_object_size_hint_align_set(wd->bx, wd->align, 0.5);
- evas_object_box_layout_set(wd->bx, _layout, wd, NULL);
- elm_widget_sub_object_add(obj, wd->bx);
- elm_smart_scroller_child_set(wd->scr, wd->bx);
- evas_object_show(wd->bx);
-
- evas_object_event_callback_add(wd->scr, EVAS_CALLBACK_RESIZE, _resize, obj);
-
- _sizing_eval(obj);
- return obj;
-}
-
-/**
- * Set the size of icon of Toolbar object
- *
- * @param obj The Toolbar object
- * @param icon_size The size of icon to be set
- *
- * @ingroup Toolbar
- */
-EAPI void elm_toolbar2_icon_size_set(Evas_Object *obj, int icon_size)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return;
- if (icon_size > 50) return;
- if (wd->icon_size == icon_size) return;
- wd->icon_size = icon_size;
- _theme_hook(obj);
-}
-
-/**
- * Get the size of icon of Toolbar object
- *
- * @param obj The Toolbar object
- * @return The size of icon to be set
- *
- * @ingroup Toolbar
- */
-EAPI int elm_toolbar2_icon_size_get(Evas_Object *obj)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return 0;
- return wd->icon_size;
-}
-
-/**
- * Add items to Toolbar object
- *
- * @param obj The Toolbar object
- * @param icon The icon
- * @param label The Label
- * @param func The function
- * @param data The data
- * @return TheToolbar item
- *
- * @ingroup Toolbar
- */
-EAPI Elm_Toolbar2_Item *elm_toolbar2_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
- int ms = 0;
- // Evas_Coord mw, mh;
- Evas_Coord ic_w, ic_h;
- Elm_Toolbar2_Item *it;
-
- if (!wd) return NULL;
- it = ELM_NEW(Elm_Toolbar2_Item);
- if (!it) return NULL;
- wd->items = eina_list_append(wd->items, it);
-
- it->obj = obj;
- it->icon = icon;
- it->func = func;
- it->data = data;
- it->base = edje_object_add(evas_object_evas_get(obj));
-
- _elm_theme_object_set(obj, it->base, "toolbar2", "item", elm_widget_style_get(obj));
-
- evas_object_event_callback_add(it->icon, EVAS_CALLBACK_MOUSE_DOWN, press_down_cb, it);
- evas_object_event_callback_add(it->icon, EVAS_CALLBACK_MOUSE_UP, press_up_cb, it);
-
- elm_widget_sub_object_add(obj, it->base);
-
- ic_w = 0;
- ic_h = 0;
- if (it->icon)
- {
- evas_object_size_hint_min_get(it->icon, &ic_w, &ic_h);
-
- if (ic_w > 0 && ic_h > 0)
- {
- if (ic_h > wd->icon_size) ic_h = wd->icon_size;
- evas_object_size_hint_min_set(it->icon, ic_w, ic_h);
- evas_object_size_hint_max_set(it->icon, ic_w, ic_h);
- }
- else
- {
- ms = ((double)wd->icon_size * _elm_config->scale);
-
- evas_object_size_hint_min_set(it->icon, ms, ms);
- evas_object_size_hint_max_set(it->icon, ms, ms);
- }
-
- //evas_object_size_hint_weight_set(it->icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- //evas_object_size_hint_align_set(it->icon, 0.5, 0.5);
-
- edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon);
- evas_object_show(it->icon);
- elm_widget_sub_object_add(obj, it->icon);
- }
- /*
- mw = mh = -1;
-
- elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh);
- elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- */
- evas_object_size_hint_weight_set(it->base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(it->base, 0.5, 0.5);
-
- if (ic_w > 0 && ic_h > 0)
- {
- evas_object_size_hint_min_set(it->base, ic_w, ic_h);
- }
- else
- {
- // evas_object_size_hint_min_set(it->base, mw, mh);
- ms = ((double)wd->icon_size * _elm_config->scale);
-
- evas_object_size_hint_min_set(it->base, ms, ms);
- }
- evas_object_box_append(wd->bx, it->base);
- evas_object_show(it->base);
- _sizing_eval(obj);
- return it;
-}
-
-/**
- * Get icon of item of Toolbar object
- *
- * @param item TheToolbar item
- * @return The icon object
- *
- * @ingroup Toolbar
- */
-EAPI Evas_Object *elm_toolbar2_item_icon_get(Elm_Toolbar2_Item *item)
-{
- if (!item) return NULL;
- return item->icon;
-}
-
-/**
- * Delete the Toolbar item
- *
- * @param it TheToolbar item
- *
- * @ingroup Toolbar
- */
-EAPI void elm_toolbar2_item_del(Elm_Toolbar2_Item *it)
-{
- Widget_Data *wd = elm_widget_data_get(it->obj);
- Evas_Object *obj2 = it->obj;
-
- if ((!wd) || (!it)) return;
- if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
- wd->items = eina_list_remove(wd->items, it);
- if (it->icon) evas_object_del(it->icon);
- evas_object_del(it->base);
- free(it);
- _theme_hook(obj2);
-}
-
-/**
- * Set the function called when a toolbar item is freed.
- *
- * @param it The item to set the callback on
- * @param func The function called
- *
- * @ingroup Toolbar
- */
-EAPI void elm_toolbar2_item_del_cb_set(Elm_Toolbar2_Item *it, void (*func)(void *data, Evas_Object *obj, void *event_info))
-{
- if(!it) return;
-
- it->del_cb = func;
-}
-
-/**
- * Whether toolbar is scrollable
- *
- * @param obj The Toolbar
- * @param scrollable The scrollable flag (1 if toolbar is scrollable, 0 otherwise)
- *
- * @ingroup Toolbar
- */
-EAPI void elm_toolbar2_scrollable_set(Evas_Object *obj, Eina_Bool scrollable)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return;
- wd->scrollable = scrollable;
- _sizing_eval(obj);
-}
-
-/**
- * Whether toolbar is homogenous
- *
- * @param obj The Toolbar
- * @param homogenous The homogenous flag (1 if toolbar is homogenous, 0 otherwise)
- *
- * @ingroup Toolbar
- *
- */
-EAPI void
-elm_toolbar2_homogenous_set(Evas_Object *obj, Eina_Bool homogenous)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return;
- wd->homogeneous = !!homogenous;
- evas_object_smart_calculate(wd->bx);
-}
-
-/**
- * Set if the alignment of the items.
- *
- * @param obj The toolbar object
- * @param align The new alignment. (left) 0.0 ... 1.0 (right)
- *
- * @ingroup Toolbar
- */
-EAPI void elm_toolbar2_align_set(Evas_Object *obj, double align)
-{
- Widget_Data *wd = elm_widget_data_get(obj);
-
- if (!wd) return;
- if(wd->align != align)
- evas_object_size_hint_align_set(wd->bx, align, 0.5);
- wd->align = align;
-}
+++ /dev/null
-/**\r
- *\r
- * @defgroup Viewflipper Viewflipper\r
- * @ingroup Elementary\r
- *\r
- * This is an viewflipper.\r
- * viewflipper api can retrun the following values \r
- * ERROR_0 = -1, //can not find wanted value\r
- * SUCCESS =0, \r
- * ERROR_1 =1001, //confrim parameter is layout or not\r
- * ERROR_2 , //confrim memory check\r
- * ERROR_3 , //data is empty\r
- * ERROR_4 , //check the range\r
- * ERROR_5 , //Non need operation\r
- * ERROR_6 , //waiting gui\r
- * ERROR_7 , //timer second is not setup or can not time setup\r
- */\r
-\r
-\r
-#include <Elementary.h>\r
-#include "elm_priv.h"\r
-\r
-#define TRUE 1\r
-#define FALSE 0\r
-\r
-typedef struct _Widget_Data Widget_Data;\r
-\r
-struct _Widget_Data\r
-{\r
- Evas_Object * viewflipper;\r
- Evas_Object * left_lay;\r
- Evas_Object * middle_lay;\r
- Evas_Object * right_lay;\r
-\r
- int is_left_show;\r
- int is_middle_show;\r
- int is_right_show; \r
-\r
- int is_can_move;\r
-\r
- int is_auto_start;\r
- int is_show_button;\r
-\r
- int request_direction;\r
- int request_pos;\r
- int time_sec;\r
- Ecore_Timer * auto_timer;\r
-\r
- int temp_x_down;\r
- int temp_x_up;\r
- \r
- Eina_List *view_list;\r
- int selected_view;\r
- int all_count;\r
-};\r
-\r
-Widget_Data * this_pointer=NULL;\r
-\r
-static const char *widtype = NULL;\r
-\r
-static void _set_this(Widget_Data * in_this_pointer);\r
-static void _del_hook(Evas_Object *obj);\r
-static void _theme_hook(Evas_Object *obj);\r
-static void _sizing_eval(Evas_Object *obj);\r
-static int _is_can_move();\r
-static int _is_first_view();\r
-static int _is_last_view();\r
-static void _mouse_flip_cb(int mouse_direction);\r
-static void _mouse_up(void *data, Evas *e, Evas_Object *o, void *event_info);\r
-static void _mouse_down(void *data, Evas *e, Evas_Object *o, void *event_info);\r
-static void _complete_move(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);\r
-static void _left_button_click(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);\r
-static void _right_button_click(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__);\r
-static Eina_Bool _flipping_timer_cb(void *data);\r
-static void _set_layout_each_view(Evas_Object * left,Evas_Object * middle,Evas_Object *right);\r
-static int _setView();\r
-static void _setup_button_show_left_right();\r
-\r
-\r
-\r
- \r
-static void\r
-_set_this(Widget_Data * in_this_pointer)\r
-{\r
- this_pointer=in_this_pointer;\r
-}\r
-\r
-Widget_Data * _get_this()\r
-{\r
- return this_pointer;\r
-}\r
-static void\r
-_del_pre_hook(Evas_Object *obj)\r
-{\r
- Widget_Data *wd = elm_widget_data_get(obj);\r
- elm_viewflipper_stopAutoFlipping();\r
- _set_layout_each_view(NULL,NULL,NULL);\r
- if(wd->viewflipper!=NULL)\r
- {\r
- evas_object_del(wd->viewflipper);\r
- }\r
- eina_list_free(wd->view_list);\r
- wd->view_list=NULL;\r
-}\r
-static void\r
-_del_hook(Evas_Object *obj)\r
-{\r
- Widget_Data *wd = elm_widget_data_get(obj); \r
-\r
- if (!wd) return;\r
- free(wd);\r
-}\r
-\r
-static void\r
-_theme_hook(Evas_Object *obj)\r
-{\r
- printf("_theme_hook \n");\r
- \r
- Widget_Data *wd = elm_widget_data_get(obj);\r
- if (!wd) return;\r
-\r
- _sizing_eval(obj);\r
- evas_object_show(wd->viewflipper);\r
-}\r
-static void\r
-_sizing_eval(Evas_Object *obj)\r
-{\r
- Widget_Data *wd = elm_widget_data_get(obj);\r
- Evas_Coord minw = -1, minh = -1;\r
-\r
- edje_object_size_min_calc(wd->viewflipper, &minw, &minh);\r
- evas_object_size_hint_min_set(obj, minw, minh);\r
- evas_object_size_hint_max_set(obj, -1, -1);\r
- evas_object_resize(wd->viewflipper, minw, minh); \r
-\r
- printf("_sizing_eval %d %d \n",minw,minh);\r
-\r
- Eina_List *l;\r
- Evas_Object * it;\r
-\r
- EINA_LIST_FOREACH(_get_this()->view_list, l, it)\r
- {\r
- evas_object_resize(it, minw, minh); \r
- } \r
-} \r
-\r
-static int\r
-_is_can_move()\r
-{\r
- Widget_Data *wd = _get_this();\r
- return wd->is_can_move;\r
-}\r
-\r
-static int\r
-_is_first_view()\r
-{\r
- if(elm_viewflipper_getCountChild()==0)\r
- return FALSE;\r
-\r
- if(_get_this()->selected_view==0)\r
- return TRUE;\r
- return FALSE;\r
-}\r
-\r
-static int\r
-_is_last_view()\r
-{\r
- if(elm_viewflipper_getCountChild()==0)\r
- return FALSE;\r
-\r
- Widget_Data *wd = _get_this();\r
- if(wd->selected_view==(elm_viewflipper_getCountChild()-1))\r
- return TRUE;\r
- return FALSE;\r
-}\r
-\r
-static void\r
-_mouse_flip_cb(int mouse_direction)\r
-{\r
- if(mouse_direction == DIR_RIGHT)\r
- elm_viewflipper_setNextView();\r
- else elm_viewflipper_setPreviousView();\r
-}\r
-\r
-static void\r
-_mouse_up(void *data, Evas *e, Evas_Object *o, void *event_info)\r
-{\r
- Evas_Event_Mouse_Up *ev = event_info;\r
- _get_this()->temp_x_up = ev->canvas.x;\r
- printf("mouse up start\n");\r
-\r
- int temp_value= _get_this()->temp_x_up - _get_this()->temp_x_down;\r
- if(temp_value <0)\r
- temp_value = temp_value * -1;\r
-\r
- if(temp_value < FLIP_RANGE_X)\r
- return;\r
- \r
- if(_get_this()->temp_x_up>_get_this()->temp_x_down)\r
- {\r
- printf("left flip\n");\r
- _mouse_flip_cb(DIR_LEFT);\r
- }\r
- else\r
- {\r
- printf("right flip\n");\r
- _mouse_flip_cb(DIR_RIGHT);\r
- }\r
- printf("mouse up end\n");\r
-}\r
-\r
-static void\r
-_mouse_down(void *data, Evas *e, Evas_Object *o, void *event_info)\r
-{\r
- Evas_Event_Mouse_Down *ev = event_info;\r
- _get_this()->temp_x_down = ev->canvas.x; \r
- printf("mouse down\n");\r
-}\r
-\r
-static void\r
-_complete_move(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)\r
-{\r
- _get_this()->is_can_move=TRUE;\r
- _setView();\r
-}\r
-static void\r
-_left_button_click(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)\r
-{\r
- elm_viewflipper_setPreviousView();\r
- printf("_left_button_click\n");\r
-}\r
-static void\r
-_right_button_click(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)\r
-{\r
- elm_viewflipper_setNextView();\r
- printf("_right_button_click\n");\r
-}\r
-\r
-static Eina_Bool\r
-_flipping_timer_cb(void *data)\r
-{\r
- if(elm_viewflipper_isAutoStart()==FALSE)\r
- return 0;\r
-\r
- if(_get_this()->request_pos!=EACH_LAST && _get_this()->selected_view ==_get_this()->request_pos)\r
- {\r
- printf("_flipping_timer_cb stop using each_last");\r
- elm_viewflipper_stopAutoFlipping();\r
- return 0;\r
- }\r
-\r
- if(_get_this()->request_direction==DIR_RIGHT)\r
- elm_viewflipper_setNextView();\r
- else elm_viewflipper_setPreviousView();\r
- \r
- if(_is_last_view()==TRUE)\r
- { \r
- printf("_flipping_timer_cb stop");\r
- elm_viewflipper_stopAutoFlipping();\r
- return 0;\r
- } \r
- printf("_flipping_timer_cb ing");\r
-}\r
-\r
-static void\r
-_set_layout_each_view(Evas_Object * left,Evas_Object * middle,Evas_Object *right)\r
-{\r
- Widget_Data *wd = _get_this();\r
- edje_object_signal_emit(_get_this()->viewflipper, "change_default_pos", "elm");\r
- \r
- if(wd->left_lay!=NULL)\r
- {\r
- edje_object_part_unswallow(wd->viewflipper, wd->left_lay);\r
- evas_object_hide(wd->left_lay);\r
- wd->left_lay=NULL; \r
- } \r
- if(wd->middle_lay!=NULL)\r
- {\r
- edje_object_part_unswallow(wd->viewflipper, wd->middle_lay);\r
- evas_object_hide(wd->middle_lay);\r
- wd->middle_lay=NULL; \r
- }\r
- if(wd->right_lay!=NULL)\r
- {\r
- edje_object_part_unswallow(wd->viewflipper, wd->right_lay); \r
- evas_object_hide(wd->right_lay);\r
- wd->right_lay=NULL;\r
- }\r
-\r
- if(left==NULL)\r
- {\r
- wd->is_left_show = FALSE; \r
- }\r
- else \r
- {\r
- wd->left_lay=left; \r
- edje_object_part_swallow(wd->viewflipper, "first_view",left);\r
- wd->is_left_show = TRUE; \r
-\r
- printf("_set_layout_each_view 1\n"); \r
- }\r
-\r
- if(middle==NULL)\r
- {\r
- _get_this()->is_middle_show=FALSE;\r
- }\r
- else\r
- {\r
- wd->middle_lay=middle; \r
- edje_object_part_swallow(wd->viewflipper, "second_view",middle );\r
- _get_this()->is_left_show = TRUE;\r
- \r
- printf("_set_layout_each_view 2\n"); \r
- }\r
-\r
- if(right==NULL)\r
- { \r
- _get_this()->is_right_show=FALSE;\r
- }\r
- else\r
- {\r
- wd->right_lay=right; \r
- edje_object_part_swallow(wd->viewflipper, "third_view", right); \r
- _get_this()->is_right_show = TRUE;\r
-\r
- printf("_set_layout_each_view 3\n"); \r
- }\r
-}\r
-static int \r
-_setView()\r
-{\r
- Widget_Data *wd = _get_this();\r
- if(elm_viewflipper_getCountChild()==0)\r
- return ERROR_3;\r
- if(_is_first_view()==TRUE)\r
- {\r
- if(elm_viewflipper_getCountChild()==1)\r
- {\r
- _set_layout_each_view(NULL, elm_viewflipper_getChildAt(0),NULL);\r
- printf("_setView 1\n");\r
- }\r
- else//than 1\r
- {\r
- _set_layout_each_view(NULL, elm_viewflipper_getChildAt(0), elm_viewflipper_getChildAt(1)); \r
- printf("_setView 2\n");\r
- } \r
- }\r
- else if(_is_last_view()==TRUE)\r
- {\r
- if(elm_viewflipper_getCountChild()==1)\r
- {\r
- _set_layout_each_view(NULL, elm_viewflipper_getChildAt(wd->selected_view),NULL);\r
- printf("_setView 3\n");\r
- }\r
- else//than 1\r
- {\r
- _set_layout_each_view( elm_viewflipper_getChildAt((wd->selected_view)-1), elm_viewflipper_getChildAt(wd->selected_view),NULL);\r
- printf("_setView 4\n");\r
- } \r
- }\r
- else\r
- {\r
- _set_layout_each_view( elm_viewflipper_getChildAt((wd->selected_view)-1), elm_viewflipper_getChildAt(wd->selected_view), elm_viewflipper_getChildAt((wd->selected_view)+1));\r
- printf("_setView 5\n");\r
- }\r
- _setup_button_show_left_right(); \r
-} \r
-\r
-static void \r
-_setup_button_show_left_right()\r
-{\r
- if(_get_this()->is_show_button==TRUE)\r
- {\r
- if(elm_viewflipper_getCountChild()==0)\r
- return;\r
- else if(_is_first_view()==TRUE)\r
- {\r
- edje_object_signal_emit(_get_this()->viewflipper, "right_button_show", "elm");\r
- edje_object_signal_emit(_get_this()->viewflipper, "left_button_hide", "elm");\r
- }\r
- else if(_is_last_view()==TRUE)\r
- {\r
- edje_object_signal_emit(_get_this()->viewflipper, "left_button_show", "elm");\r
- edje_object_signal_emit(_get_this()->viewflipper, "right_button_hide", "elm");\r
- }\r
- else \r
- { \r
- edje_object_signal_emit(_get_this()->viewflipper, "button_show", "elm");\r
- }\r
- }\r
-}\r
-\r
-/**\r
- * This function makes a new viewflipper object\r
- * @param parent The parent object\r
- * @return new viewflipper object \r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI Evas_Object * \r
-elm_viewflipper_add(Evas_Object * parent)\r
-{\r
- Evas_Object *obj;\r
- Evas *e;\r
- Widget_Data *wd;\r
-\r
- wd = ELM_NEW(Widget_Data);\r
- e = evas_object_evas_get(parent);\r
- obj = elm_widget_add(e);\r
- ELM_SET_WIDTYPE(widtype, "viewflipper");\r
- elm_widget_type_set(obj, "viewflipper");\r
- elm_widget_sub_object_add(parent, obj);\r
- elm_widget_data_set(obj, wd);\r
- elm_widget_del_pre_hook_set(obj, _del_pre_hook);\r
- elm_widget_del_hook_set(obj, _del_hook);\r
- elm_widget_theme_hook_set(obj, _theme_hook);\r
- \r
- wd->viewflipper = edje_object_add(evas_object_evas_get(obj));\r
- _elm_theme_object_set(obj,wd->viewflipper, "viewflipper", "base", "default");\r
-\r
- evas_object_event_callback_add(wd->viewflipper, EVAS_CALLBACK_MOUSE_DOWN,\r
- _mouse_down, obj);\r
- evas_object_event_callback_add(wd->viewflipper, EVAS_CALLBACK_MOUSE_UP,\r
- _mouse_up, obj);\r
- \r
-\r
- edje_object_signal_callback_add(wd->viewflipper, "elm,action,moving", "elm",\r
- _complete_move, obj);\r
- edje_object_signal_callback_add(wd->viewflipper, "clicked", "btn_left",\r
- _left_button_click, obj);\r
- edje_object_signal_callback_add(wd->viewflipper, "clicked", "btn_right",\r
- _right_button_click, obj);\r
-\r
- \r
- _set_this(wd);\r
- _get_this()->is_can_move=TRUE;\r
-\r
- elm_widget_resize_object_set(obj, wd->viewflipper);\r
- _sizing_eval(obj);\r
-\r
- printf("create_viewflipper\n");\r
- return obj;\r
-}\r
-\r
-/**\r
- * This function returns the value of button show setting\r
- *\r
- * @return the value of button show setting (TRUE,FALSE)\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_isFlipbutton()\r
-{\r
- return _get_this()->is_show_button;\r
-}\r
-\r
-\r
-\r
-/**\r
- * This function checks if auto sliding is in use\r
- *\r
- * @return the value of auto sliding is in use (TRUE,FALSE)\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI \r
-int elm_viewflipper_isAutoStart()\r
-{\r
- return _get_this()->is_auto_start;\r
-}\r
-\r
-\r
-\r
-/**\r
- * This function checks if the index is valid\r
- * @param pos index of layout\r
- * @return TRUE , FALSE \r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_isValidPos(int pos)\r
-{\r
- if(elm_viewflipper_getCountChild()==0)\r
- return FALSE;\r
-\r
- if(pos<0 || pos >=elm_viewflipper_getCountChild())\r
- return FALSE;\r
-\r
- return TRUE; \r
-}\r
-\r
-\r
-\r
-/**\r
- * This function appends(adds) a layout to viewflipper\r
- * @param child_layout the item(layout)\r
- * @return SUCCESS , ERROR_1 ,ERROR_2\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_addChild(Evas_Object * child_layout)\r
-{\r
- if(_get_this()==NULL)\r
- return ERROR_2;\r
- \r
- if(strncmp(elm_widget_style_get(child_layout),"layout",6)==0)\r
- return ERROR_1;\r
- \r
- _get_this()->view_list = eina_list_append(_get_this()->view_list, child_layout);\r
- printf("addChild\n");\r
- return SUCCESS;\r
-}\r
-\r
-\r
-/**\r
- * This function removes a child layout from the viewflipper\r
- * @param child_layout the item(layout)\r
- * @return SUCCESS ,ERROR_0, ERROR_1 ,ERROR_2 \r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_removeChild(Evas_Object * child_layout)\r
-{\r
- if(_get_this()==NULL)\r
- return ERROR_2;\r
- \r
- if(strncmp(elm_widget_style_get(child_layout),"layout",6)==0)\r
- return ERROR_1;\r
- \r
- \r
- Eina_List *l;\r
- Evas_Object * it;\r
-\r
- EINA_LIST_FOREACH(_get_this()->view_list, l, it)\r
- {\r
- if (it == child_layout)\r
- { \r
- evas_object_hide(child_layout);\r
- _get_this()->view_list = eina_list_remove_list(_get_this()->view_list, l);\r
- _setView();\r
- return SUCCESS;\r
- }\r
- } \r
- return ERROR_0; \r
-}\r
-\r
-\r
-/**\r
- * This function removes a child a layout using it's index\r
- * @param pos index of layout\r
- * @return SUCCESS ,ERROR_0,ERROR_2,ERROR_4\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_removeChildAt(int pos)\r
-{\r
- if(_get_this()==NULL)\r
- return ERROR_2;\r
-\r
- if(elm_viewflipper_isValidPos(pos)==FALSE)\r
- return ERROR_4;\r
- \r
- int i=0;\r
- Eina_List *l;_set_layout_each_view(NULL, elm_viewflipper_getChildAt(0), elm_viewflipper_getChildAt(1)); \r
- Evas_Object * it;\r
-\r
- EINA_LIST_FOREACH(_get_this()->view_list, l, it)\r
- {\r
- if (i == pos)\r
- {\r
- Evas_Object * child_layout = elm_viewflipper_getChildAt(pos);\r
- if(child_layout!=NULL)//defense code\r
- evas_object_hide(child_layout);\r
- _get_this()->view_list = eina_list_remove_list(_get_this()->view_list, l);\r
- _setView(); \r
- return SUCCESS;\r
- }\r
- i++;\r
- } \r
- return ERROR_0; \r
-}\r
-\r
-\r
-/**\r
- * This function gets the index of layout\r
- * @param child_layout the item(layout)\r
- * @return index, ERROR_0,ERROR_1,ERROR_2\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_getPositionChild(Evas_Object * child_layout)\r
-{\r
- if(_get_this()==NULL)\r
- return ERROR_2;\r
- \r
- if(strncmp(elm_widget_style_get(child_layout),"layout",6)==0)\r
- return ERROR_1;\r
-\r
- int i=0;\r
- Eina_List *l;\r
- Evas_Object * it;\r
-\r
- EINA_LIST_FOREACH(_get_this()->view_list, l, it)\r
- {\r
- if (it == child_layout)\r
- {\r
- return i;\r
- }\r
- i++;\r
- } \r
- return ERROR_0; \r
-}\r
-\r
-/**\r
- * This function gets the layout using index\r
- * @param pos index of layout\r
- * @return NULL, layout object \r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI Evas_Object * \r
-elm_viewflipper_getChildAt(int pos)//start 0\r
-{\r
- if(_get_this()==NULL)\r
- return NULL;\r
-\r
- if(elm_viewflipper_isValidPos(pos)==FALSE)\r
- return NULL;\r
-\r
- int i=0; \r
- Eina_List *l;\r
- Evas_Object *it;\r
- EINA_LIST_FOREACH(_get_this()->view_list, l, it)\r
- {\r
- if (i== pos)\r
- {\r
- return it;\r
- }\r
- i++;\r
- } \r
- return NULL;\r
-}\r
-\r
-/**\r
- * This function gets the count of layouts in a viewflipper\r
- *\r
- * @return Count Number , ERROR_2\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_getCountChild()\r
-{\r
- if(_get_this()==NULL)\r
- return ERROR_2;\r
- \r
- return eina_list_count(_get_this()->view_list);\r
-}\r
-\r
-\r
-/**\r
- * This function slides to given index from current one\r
- * @param pos index of layout\r
- * @return SUCCESS ,ERROR_4,ERROR_5\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_setDisplayedChild(int pos)\r
-{\r
- if(elm_viewflipper_isValidPos(pos)==FALSE)\r
- return ERROR_4;\r
-\r
- if(_get_this()->selected_view==pos)\r
- return ERROR_5;\r
- \r
- elm_viewflipper_stopAutoFlipping();\r
-\r
- if(_get_this()->selected_view>pos)\r
- {\r
- elm_viewflipper_startAutoFlippingWithOption(DIR_LEFT,pos);\r
- }\r
- else\r
- {\r
- elm_viewflipper_startAutoFlippingWithOption(DIR_RIGHT,pos);\r
- }\r
- return SUCCESS;\r
- \r
-}\r
-\r
-\r
-/**\r
- * This function show the viewflipper\r
- *\r
- * @return SUCCESS , ERROR_3\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_setNowView()\r
-{\r
- return _setView(); \r
-}\r
-\r
-\r
-\r
-/**\r
- * This function show the next layout\r
- *\r
- * @return SUCCESS ,ERROR_5, ERROR_6\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_setNextView()\r
-{\r
- if(_is_last_view()==TRUE)\r
- return ERROR_5;\r
-\r
- if(_get_this()->is_can_move==FALSE)\r
- return ERROR_6;\r
-\r
- _get_this()->selected_view = _get_this()->selected_view+1;\r
- _get_this()->is_can_move=FALSE;\r
- \r
- edje_object_signal_emit(_get_this()->viewflipper, "moving_left_pos", "elm");\r
- printf("elm_viewflipper_setNextView\n");\r
- return SUCCESS;\r
-}\r
-\r
-\r
-\r
-\r
-/**\r
- * This function show the previous layout\r
- *\r
- * @return SUCCESS , ERROR_5, ERROR_6\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_setPreviousView()\r
-{\r
- if(_is_first_view()==TRUE)\r
- return ERROR_5;\r
- \r
- if(_get_this()->is_can_move==FALSE)\r
- return ERROR_6;\r
-\r
- _get_this()->selected_view = _get_this()->selected_view-1;\r
- _get_this()->is_can_move=FALSE;\r
- \r
- edje_object_signal_emit(_get_this()->viewflipper, "moving_right_pos", "elm"); \r
- printf("elm_viewflipper_setPreviousView\n");\r
- return SUCCESS;\r
-}\r
-\r
-\r
-\r
-/**\r
- * This function sets the value of sliding interval time\r
- * @param milliseconds milliseconds(interval time)\r
- * @return SUCCESS , ERROR_7\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_setFlipInterval(int milliseconds) \r
-{\r
- if(milliseconds<=0)\r
- return ERROR_7;\r
-\r
- _get_this()->time_sec=milliseconds;\r
- return SUCCESS;\r
-}\r
-\r
-\r
-\r
-/**\r
- * This function sets the option of showing buttons or not\r
- * @param showbutton TRUE,FALSE\r
- * @return SUCCESS \r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_setFlipbutton(int showbutton)\r
-{\r
- if(showbutton==TRUE)\r
- {\r
- _get_this()->is_show_button=TRUE;\r
- _setup_button_show_left_right();\r
- }\r
- else\r
- {\r
- _get_this()->is_show_button=FALSE;\r
- edje_object_signal_emit(_get_this()->viewflipper, "button_hide", "elm"); \r
- }\r
- return SUCCESS;\r
-}\r
-\r
-\r
-EAPI int \r
-elm_viewflipper_startAutoFlippingWithOption(int drection,int pos)\r
-{ \r
- if(_get_this()->time_sec==0)\r
- return ERROR_7;\r
-\r
- if(elm_viewflipper_isValidPos(pos)==FALSE)\r
- return ERROR_4;\r
- \r
- if(elm_viewflipper_isAutoStart()==TRUE)\r
- elm_viewflipper_stopAutoFlipping();\r
-\r
- _get_this()->request_direction= drection;\r
- _get_this()->request_pos = pos;\r
-\r
- _get_this()->auto_timer= ecore_timer_add(_get_this()->time_sec , _flipping_timer_cb, NULL);\r
- _get_this()->is_auto_start=TRUE;\r
- printf("elm_viewflipper_startAutoFlippingWithOption\n");\r
- return SUCCESS;\r
-}\r
-\r
-/**\r
- * This function starts the auto sliding\r
- *\r
- * @return ERROR_7 , SUCCESS\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-EAPI int \r
-elm_viewflipper_startAutoFlipping() \r
-{\r
- if(_get_this()->time_sec==0)\r
- return ERROR_7;\r
- \r
- if(elm_viewflipper_isAutoStart()==TRUE)\r
- elm_viewflipper_stopAutoFlipping();\r
-\r
- _get_this()->request_direction= DIR_RIGHT;\r
- _get_this()->request_pos = EACH_LAST;\r
-\r
- _get_this()->auto_timer= ecore_timer_add(_get_this()->time_sec , _flipping_timer_cb, NULL);\r
- _get_this()->is_auto_start=TRUE;\r
- printf("elm_viewflipper_startAutoFlipping\n");\r
- return SUCCESS;\r
-}\r
-\r
-/**\r
- * This function steps the auto sliding.\r
- *\r
- * @return ERROR_5 , SUCCESS\r
- *\r
- * @ingroup Viewflipper\r
- */\r
-\r
-EAPI int \r
-elm_viewflipper_stopAutoFlipping()\r
-{ \r
- if(elm_viewflipper_isAutoStart()==FALSE)\r
- return ERROR_5;\r
-\r
- if(_get_this()->auto_timer)//defense code\r
- ecore_timer_del(_get_this()->auto_timer);\r
- _get_this()->auto_timer=NULL;\r
- _get_this()->is_auto_start=FALSE; \r
- _get_this()->request_direction= 0;\r
- _get_this()->request_pos = 0; \r
- printf("elm_viewflipper_stopAutoFlipping\n");\r
- return SUCCESS;\r
-}\r
-\r
-\r