src/app-widget-app.c
src/key.c
src/util.c
- src/common/home_custom_index.c
- src/common/home_custom_scroller.c
)
SET(VENDOR "tizen")
+++ /dev/null
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef __app_widget_app_H__
-#define __app_widget_app_H__
-
-#include <app.h>
-#include <Elementary.h>
-#include <system_settings.h>
-#include <efl_extension.h>
-#include <dlog.h>
-#include <app-widget-app_log.h>
-
-#endif /*__app_widget_app_H__ */
+++ /dev/null
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __W_HOME_CUSTOM_INDEX_H__
-#define __W_HOME_CUSTOM_INDEX_H__
-
-typedef enum {
- INDEX_BRING_IN_NONE = 0,
- INDEX_BRING_IN_AFTER,
-} hc_index_bring_in_e;
-
-extern void home_custom_index_bring_in_page(Evas_Object *index, Evas_Object *page);
-
-extern Evas_Object *home_custom_index_create(Evas_Object *layout, Evas_Object *scroller);
-extern void home_custom_index_destroy(Evas_Object *index);
-extern void home_custom_index_update(Evas_Object *index, Evas_Object *scroller, hc_index_bring_in_e after);
-extern void home_custom_index_show(Evas_Object *index, Eina_Bool bAutoHide);
-
-#endif /* __W_HOME_CUSTOM_INDEX_H__ */
+++ /dev/null
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __W_HOME_CUSTOM_INDEX_INFO_H__
-#define __W_HOME_CUSTOM_INDEX_INFO_H__
-
-typedef struct {
- /* innate features; */
- int count;
- int current_no;
-
- /* acquired features */
- Evas_Object *layout;
- Evas_Object *scroller;
- Eina_List *page_index_list;
-} hc_index_info_s;
-
-#endif // __W_HOME_CUSTOM_INDEX_INFO_H__
+++ /dev/null
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __HOME_CUSTOM_SCROLLER_H__
-#define __HOME_CUSTOM_SCROLLER_H__
-
-#include <Evas.h>
-#include "common/home_custom_scroller_info.h"
-
-#if !defined(SCROLLAPI)
-#define HCSAPI __attribute__((visibility("hidden")))
-#endif
-
-typedef enum {
- HOME_CUSTOM_SC_DIRECTION_NONE,
- HOME_CUSTOM_SC_DIRECTION_LEFT,
- HOME_CUSTOM_SC_DIRECTION_RIGHT,
- HOME_CUSTOM_SC_DIRECTION_UP,
- HOME_CUSTOM_SC_DIRECTION_DOWN,
-} Home_Custom_Sc_Direction;
-
-HCSAPI scroller_info_s *home_custom_scroller_info_create(void);
-
-HCSAPI Evas_Object *home_custom_scroller_add(Evas_Object *parent, scroller_info_s *scroller_info);
-HCSAPI void home_custom_scroller_del(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_pause(Evas_Object *scroller);
-HCSAPI void home_custom_scroller_resume(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_page_append(Evas_Object *scroller, Evas_Object *page);
-HCSAPI void home_custom_scroller_page_prepend(Evas_Object *scroller, Evas_Object *page);
-HCSAPI void home_custom_scroller_page_remove(Evas_Object *scroller, Evas_Object *page);
-HCSAPI int home_custom_scroller_get_page_count(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_list_append(Evas_Object *scroller, Eina_List *page_list);
-HCSAPI void home_custom_scroller_list_remove(Evas_Object *scroller, Eina_List *page_list);
-HCSAPI Eina_List *home_custom_scroller_get_page_list(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_edit(Evas_Object *scroller);
-HCSAPI void home_custom_scroller_unedit(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_freeze(Evas_Object *scroller, Eina_Bool status);
-HCSAPI Eina_Bool home_custom_scroller_is_freeze(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_page_freeze(Evas_Object *scroller, Evas_Object *page, Eina_Bool status);
-HCSAPI Eina_Bool home_custom_scroller_is_page_freeze(Evas_Object *scroller, Evas_Object *page);
-
-HCSAPI void home_custom_scroller_bring_in(Evas_Object *scroller, int page_no);
-HCSAPI void home_custom_scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page);
-HCSAPI void home_custom_scroller_bring_in_direction(Evas_Object *scroller, Home_Custom_Sc_Direction direction);
-HCSAPI Eina_Bool home_custom_scroller_is_scrolling(Evas_Object *scroller);
-
-HCSAPI void home_custom_scroller_region_show(Evas_Object *scroller, int x, int y);
-
-HCSAPI Evas_Object *home_custom_scroller_get_first_page(Evas_Object *scroller);
-HCSAPI Evas_Object *home_custom_scroller_get_last_page(Evas_Object *scroller);
-HCSAPI Evas_Object *home_custom_scroller_get_current_page(Evas_Object *scroller);
-HCSAPI Evas_Object *home_custom_scroller_get_page(Evas_Object *scroller, int index);
-HCSAPI Eina_Bool home_custom_scroller_is_edge(Evas_Object *page);
-
-//index
-HCSAPI Evas_Object *home_custom_scroller_index_add(Evas_Object *parent, Evas_Object *scroller);
-
-#endif //__HOME_CUSTOM_SCROLLER_H__
-
-// End of a file
+++ /dev/null
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __HOME_CUSTOM_SCROLLER_INFO_H__
-#define __HOME_CUSTOM_SCROLLER_INFO_H__
-
-#include <Evas.h>
-
-typedef struct {
- Evas_Object *win;
-
- Evas_Object *parent;
- Evas_Object *box_layout;
- Evas_Object *box;
- Evas_Object *layout_focus;
- Evas_Object *top_focus;
- Evas_Object *bottom_focus;
-
- Eina_List *list;
- int list_index;
-
- int page_width;
- int page_height;
-
- int edge_width;
- int edge_height;
-} scroller_info_s;
-
-#endif //__HOME_CUSTOM_SCROLLER_INFO_H__
-
-// End of a file
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
#ifndef __APPS_ITEM_INFO_H__
#define __APPS_ITEM_INFO_H__
#include <Elementary.h>
#include <Evas.h>
#include <util.h>
+
#define APP_TYPE_WGT "wgt"
-#define APP_TYPE_RECENT_APPS "recent"
-#define APP_TYPE_MORE_APPS "more"
typedef struct {
- /* innate features */
char *pkgid;
char *appid;
char *name;
char *icon;
char *type;
-
- int ordering;
int open_app;
- int tts;
int removable;
- int uneditable;
-
- /* acquired features */
- Evas_Object *win;
- Evas_Object *layout;
-
- Evas_Object *scroller;
- Evas_Object *page;
-
- Evas_Object *item;
- Evas_Object *item_inner;
- Evas_Object *center;
+ Eina_Bool is_selected;
} item_info_s;
-typedef enum {
- ITEM_INFO_LIST_TYPE_INVALID = 0,
- ITEM_INFO_LIST_TYPE_ALL,
- ITEM_INFO_LIST_TYPE_FACTORY_BINARY,
- ITEM_INFO_LIST_TYPE_XML,
- ITEM_INFO_LIST_TYPE_MAX,
-} item_info_list_type_e;
-
-HAPI void apps_item_info_destroy(item_info_s *item_info);
HAPI item_info_s *apps_item_info_create(const char *appid);
-
-HAPI item_info_s *apps_recent_apps_item_info_create();
-HAPI item_info_s *apps_more_apps_item_info_create();
-HAPI item_info_s *apps_item_info_get(Evas_Object *win, const char *appid);
-
-HAPI Eina_List *apps_item_info_list_create(item_info_list_type_e list_type);
-HAPI void apps_item_info_list_destroy(Eina_List *item_info_list);
-
-HAPI Evas_Object *apps_item_info_list_get_item(Eina_List *item_info_list, const char *appid);
-HAPI int apps_item_info_list_get_ordering(Eina_List *item_info_list, const char *appid);
-
-HAPI void apps_item_info_list_change_language(Eina_List *item_info_list);
-
-HAPI int apps_item_info_is_support_tts(const char *appid);
-
-HAPI item_info_s *apps_item_info_dup(item_info_s *item_info);
+HAPI void apps_item_info_destroy(item_info_s *item_info);
#endif // __APPS_ITEM_INFO_H__
TUTORIAL_LANGUAGE_GEORGIA,
};
+#undef FREE
+#define FREE(ptr) \
+ do { \
+ free(ptr); \
+ ptr = NULL; \
+ } while (0)
+
+#undef DEL_EVAS_OBJECT
+#define DEL_EVAS_OBJECT(ptr) \
+ do { \
+ if (ptr) { \
+ evas_object_del(ptr); \
+ ptr = NULL; \
+ } \
+ } while (0)
+
#if !defined(_EDJ)
#define _EDJ(a) elm_layout_edje_get(a)
#endif
<label>Apps</label>
<icon>org.tizen.apptray-widget-app.png</icon>
</ui-application>
+ <widget-application appid="org.tizen.apptray-widget" exec="apptray-widget" main="true" update-period="0" hw-acceleration="on">
+ <label>apptray-widget</label>
+ <icon>apps_widget_preview.png</icon>
+ <support-size preview="apps_widget_preview.png">2x2</support-size>
+ </widget-application>
<privileges>
<privilege>http://tizen.org/privilege/packagemanager.info</privilege>
<privilege>http://tizen.org/privilege/packagemanager.clearcache</privilege>
<privilege>http://tizen.org/privilege/message.read</privilege>
<privilege>http://tizen.org/privilege/contact.read</privilege>
</privileges>
- <widget-application appid="org.tizen.apptray-widget" exec="apptray-widget" main="true" update-period="0" hw-acceleration="on">
- <label>apptray-widget</label>
- <icon>apps_widget_preview.png</icon>
- <support-size preview="apps_widget_preview.png">2x2</support-size>
- </widget-application>
- <privileges>
- <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
- </privileges>
</manifest>
name: "name_style";
base: "font=TIZEN:style=Light text_class=AT0315 font_size="24" align=middle color=#FFFFFF color_class=AT0315 ellipsis=1 wrap=mixed";
}
+ style {
+ name: "select_indicator";
+ base: "font=Tizen:weight=SemiBold:width=Condensed:style=Bold font_size=32 align=center color=#fafafaff ellipsis=1.0 wrap=mixed text_class=tizen";
+ }
}
images {
image : "apps_edit_icon_select_ef_sv.png" COMP;
}
+#define SELECT_INDICATOR_MIN_SIZE_INC 100 75
+#define SELECT_INDICATOR_MAX_SIZE_INC 180 75
+#define SELECT_INDICATOR_PADDING_LT_SIZE_INC 10 11
+#define SELECT_INDICATOR_PADDING_RB_SIZE_INC 10 11
+#define SELECT_INDICATOR_TEXT_MIN_SIZE_INC 80 42
+#define SELECT_INDICATOR_TEXT_MAX_SIZE_INC 160 42
+
collections {
base_scale: 1.3;
+
+ group { "select_indicator";
+ images{
+ image: "tw_list_number_bg.#.png" COMP;
+ image: "tw_list_number_ef.#.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: SELECT_INDICATOR_MIN_SIZE_INC;
+ max: SELECT_INDICATOR_MAX_SIZE_INC;
+ }
+ }
+ part { name: "padding_top_left";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1 { relative: 0.0 0.0; to: "base"; }
+ rel2 { relative: 0.0 0.0; to: "base"; }
+ min: SELECT_INDICATOR_PADDING_LT_SIZE_INC;
+ fixed: 1 1;
+ }
+ }
+ part { name: "padding_bottom_right";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1 { relative: 1.0 1.0; to: "base"; }
+ rel2 { relative: 1.0 1.0; to: "base"; }
+ min: SELECT_INDICATOR_PADDING_RB_SIZE_INC;
+ fixed: 1 1;
+ }
+ }
+ part { name: "bg";
+ type: IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ image.normal: "tw_list_number_bg.#.png";
+ rel1.to: "base";
+ rel2.to: "base";
+ color: 0 53 74 255;
+ }
+ }
+ part { name: "ef";
+ type: IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ image.normal: "tw_list_number_ef.#.png";
+ rel1.to: "base";
+ rel2.to: "base";
+ color: 0 0 0 255;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: SELECT_INDICATOR_TEXT_MIN_SIZE_INC;
+ max: SELECT_INDICATOR_TEXT_MAX_SIZE_INC;
+ rel1 { relative: 1.0 1.0; to: "padding_top_left"; }
+ rel2 { relative: 0.0 0.0; to: "padding_bottom_right"; }
+ text {
+ min: 1 0;
+ style: "select_indicator";
+ }
+ fixed: 0 1;
+ }
+ }
+ }
+ }
+
group {
name: "layout";
parts {
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#include "app-widget-app.h"
-
-#undef TIZEN_SDK
#include <app.h>
-#include <Evas.h>
#include <Elementary.h>
#include <widget_service.h>
#include <widget_errno.h>
#include <package-manager.h>
#include <bundle.h>
#include <app_preference.h>
+#include <efl_extension.h>
+#include <system_settings.h>
+
+#include "app-widget-app_log.h"
#include "key.h"
#include "util.h"
-#include "common/home_custom_scroller.h"
#include "item_info.h"
-#include "elm_layout_legacy.h"
#define IDS_IDLE_BODY_APPS "Apps"
#define EDJE_FILE "edje/add_to_shortcut.edj"
-#define SCHEDULE_ICON_ARABIC "res/schedule_arabic_%s.png"
-#define LANGUAGE_ARABIC "ar"
-#define PACKAGE_MANAGER_PKGINFO_PROP_NODISPALY "PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING"
#define APP_WIDGET_PKGID "org.tizen.app-widget"
#define DEFAULT_APP_ORDER "org.tizen.apptray-widget-app org.tizen.watch-setting empty empty"
#define APPS_PKG "org.tizen.apptray-widget-app"
#define BUNDLE_KEY_WIDGET_INSTANCE_ID "instance_id"
#define APP_SLOTS_MAX_COUNT 4
+#define GENLIST_ITEM_ICON_DIMENTION 76
+
+#define SELECT_COUNT_BUF_SIZE 10
+
+static Elm_Genlist_Item_Class header_itc = { ELM_GEN_ITEM_CLASS_HEADER, 0 };
+static bool header_itc_inited = false;
+
+static Elm_Genlist_Item_Class content_itc = { ELM_GEN_ITEM_CLASS_HEADER, 0 };
+static bool content_itc_inited = false;
+
+static Elm_Genlist_Item_Class empty_itc = { ELM_GEN_ITEM_CLASS_HEADER, 0 };
+static bool empty_itc_inited = false;
typedef enum {
APPTRAY_WGT_APP_LAUNCH_TYPE_UNDEFINED = 0,
typedef struct appdata {
Evas_Object *edit_win;
+ Evas_Object *edit_layout;
+
Evas_Object *select_win;
+ Evas_Object *select_conform;
+ Eext_Circle_Surface *select_circle_surf;
Evas_Object *select_layout;
- Evas_Object *edit_layout;
+ Evas_Object *select_count_btn;
+ int select_count;
+
Evas_Object *scroller;
Evas_Object *title;
char *widget_instance_id;
_apptray_wgt_launch_type_e launch_type;
- char *index;
- Ecore_Event_Handler *press_handler;
Ecore_Event_Handler *release_handler;
- Eina_List *app_list;
- Eina_List *item_list;
+ Eina_List *all_app_list;
char *appid_list[APP_SLOTS_MAX_COUNT];
char *applabel_list[APP_SLOTS_MAX_COUNT];
+
+ Evas_Object *toast_popup;
} appdata_s;
char *widget_id = NULL;
int pressed_index = 0;
int dst_index = 0;
Evas_Object *transit_obj = NULL;
-Eina_Bool hide_flag = EINA_FALSE;
Eina_Bool longpress_flag = EINA_FALSE;
Eina_Bool launch_flag = EINA_TRUE;
Eina_Bool transit_go = EINA_FALSE;
-Eina_List *font_theme;
-Elm_Theme *theme;
Ecore_Timer *longpress_timer;
int empty_count = 0;
static appdata_s *g_info = NULL;
-static appdata_s *_get_info(void){
- return g_info;
-}
-
+static char *strdup_s(const char *val);
+static void _update_appid_list_with_selected_items();
+static void _update_content(void);
+static Eina_Bool _key_release_cb(void *data, int type, void *event);
static void _terminate_add_to_shortcut(void);
-Evas_Object *_set_app_slot(const char *appid, int pos);
-item_info_s *apps_apps_info_create(const char *appid);
-item_info_s *apps_recent_info_create(const char *appid);
-static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static Evas_Object *_create_win(appdata_s *info, const char *name, const char *title);
+static Eina_Bool _longpress_timer_cb(void *data);
+static void _render_post_cb(void *data, Evas *e , void *event_info);
+
+static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
static void _down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _transit_del_cb(void *data, Elm_Transit *transit);
+static void _anim_switch_item(Evas_Object *item, int src, int dst);
+static void _move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _create_edit_layout(appdata_s *info);
+static char *_title_item_get_txt_cb(void *data, Evas_Object *obj, const char *part);
+static Elm_Genlist_Item_Class *_get_gl_itc_header();
+static char *_cont_item_get_txt_cb(void *data, Evas_Object *obj, const char *part);
+static void _toast_popup_hide_cb(void *data, Evas_Object *obj, void *event_info);
+static void _toast_popup_dismiss_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_toast_popup(const char *text);
+static void _gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _cont_item_del_cb(void *data, Evas_Object *obj);
+static Elm_Genlist_Item_Class *_get_gl_itc_content();
+static Elm_Genlist_Item_Class *_get_gl_itc_empty();
+static void _set_select_genlist_content(Evas_Object *genlist, appdata_s *info);
+static Evas_Object *_create_simple_genlist(Evas_Object *parent, appdata_s *info);
+static void _gl_add_header_item(Evas_Object *gl);
+static bool _check_already_added_apps(const char *appid);
+static void _gl_item_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _gl_add_apps_items(Evas_Object *gl, appdata_s *info);
+static void _gl_add_empty_item(Evas_Object *gl);
+static Evas_Object *_create_bottom_btn_ly(appdata_s *info);
+static void _bottom_btn_click_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *_create_bottom_btn(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_create_genlist_ly(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_create_pick_genlist(Evas_Object *parent, appdata_s *info);
+static Evas_Object *_create_select_count_btn(Evas_Object *parent, appdata_s *info);
+static void _create_select_view(appdata_s *info);
+Evas_Object *_set_app_slot(const char *appid, int pos);
+static int _apps_sort_cb(const void *d1, const void *d2);
+static int _apps_all_cb(pkgmgrinfo_appinfo_h handle, void *user_data);
+static Eina_List *_read_all_apps(Eina_List **list);
+static Eina_Bool _load_list(void* data);
static void _process_pick_operation(appdata_s *info, app_control_h service);
static void _process_main_operation(appdata_s *info, app_control_h service, const char *app_list);
+static bool _create_edit_window(appdata_s *info, const char *name, const char *title);
+static Evas_Object *_create_conformant_without_indicator(Evas_Object *win);
+static bool _create_select_window(appdata_s *info, const char *name, const char *title);
+
+static bool _app_create(void *data);
+static void _app_terminate(void *data);
+static void _app_pause(void *data);
+static void _app_resume(void *data);
+static void _app_control(app_control_h service, void *data);
+static void _app_lang_changed(app_event_info_h event_info, void *user_data);
+static void _app_region_changed(app_event_info_h event_info, void *user_data);
static char *strdup_s(const char *val)
{
return (val ? strdup(val) : NULL);
}
+static void _update_appid_list_with_selected_items()
+{
+ item_info_s *item_info = NULL;
+ Eina_List *l = NULL;
+ Eina_List *n = NULL;
+ int selected_app_count = 0;
+ int i = 0;
+
+ EINA_LIST_FOREACH_SAFE(g_info->all_app_list, l, n, item_info) {
+ if (item_info->is_selected && item_info->appid) {
+ ++selected_app_count;
+ }
+ }
+
+ EINA_LIST_FOREACH_SAFE(g_info->all_app_list, l, n, item_info) {
+ if (item_info->is_selected && item_info->appid) {
+ free(g_info->appid_list[_input_slot_conv[selected_app_count].slot_seq_arr[i]]);
+ g_info->appid_list[_input_slot_conv[selected_app_count].slot_seq_arr[i]] = strdup(item_info->appid);
+ i++;
+ }
+ }
+
+ for (i = 0; i < APP_SLOTS_MAX_COUNT; i++) {
+ if (!g_info->appid_list[i]) {
+ g_info->appid_list[i] = strdup("empty");
+ }
+ }
+}
+
static void _update_content(void)
{
_ENTER;
_E("bundle_create failed");
return;
}
+
bundle_add_str(b_tmp, BUNDLE_KEY_SHORTCUT_LIST, content);
res = widget_service_trigger_update(APP_WIDGET_CONTENT_KEY, g_info->widget_instance_id, b_tmp, 1);
if (res != WIDGET_ERROR_NONE) {
}
bundle_free(b_tmp);
-}
-
-char *_get_date(void)
-{
- _ENTER;
- struct tm st;
- time_t tt = time(NULL);
- localtime_r(&tt, &st);
-
- char str_date[5] = {0,};
- char *date = NULL;
-
- snprintf(str_date, sizeof(str_date), "%d", st.tm_mday);
-
- date = strdup(str_date);
-
- return date;
-
-}
-
-static void _init_theme(void)
-{
- _ENTER;
- theme = elm_theme_new();
-}
-
-static void _fini_theme(void)
-{
- _ENTER;
- elm_theme_free(theme);
- theme = NULL;
- if (font_theme) {
- font_theme = NULL;
- }
+ _EXIT;
}
static Eina_Bool _key_release_cb(void *data, int type, void *event)
_D("%s", ev->keyname);
- if (!strcmp(ev->keyname, /*KEY_BACK*/"XF86Back") || !strcmp(ev->keyname, /*KEY_POWER*/"XF86PowerOff")) {
- _D("back or home key cb");
- if(evas_object_visible_get(g_info->select_win) == EINA_TRUE
+ if (g_info->toast_popup) {
+ return ECORE_CALLBACK_PASS_ON;
+ }
+
+ if (!strcmp(ev->keyname, "XF86Back") || !strcmp(ev->keyname, "XF86PowerOff")) {
+ if(evas_object_visible_get(g_info->select_win)
&& g_info->launch_type != APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
evas_object_hide(g_info->select_win);
evas_object_show(g_info->edit_win);
- } else{
+ } else {
+ if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+ _update_appid_list_with_selected_items();
+ }
_terminate_add_to_shortcut();
}
}
{
_ENTER;
- appdata_s *info = _get_info();
+ int i = 0;
_update_content();
- evas_object_del(info->edit_win);
- info->edit_win = NULL;
+ DEL_EVAS_OBJECT(g_info->edit_win);
- evas_object_del(info->select_win);
- info->select_win = NULL;
+ DEL_EVAS_OBJECT(g_info->select_win);
- free(info->widget_instance_id);
+ FREE(g_info->widget_instance_id);
+
+ eina_list_free(g_info->all_app_list);
+ g_info->all_app_list = NULL;
+
+ for (; i < APP_SLOTS_MAX_COUNT; i++) {
+ FREE(g_info->appid_list[i]);
+ FREE(g_info->applabel_list[i]);
+ }
if (g_info->release_handler) {
ecore_event_handler_del(g_info->release_handler);
+ g_info->release_handler = NULL;
}
+ g_info = NULL;
+
elm_exit();
}
return eo;
}
-static Eina_Bool _longpress_timer_cb(void *data){
+static Eina_Bool _longpress_timer_cb(void *data)
+{
_ENTER;
Evas_Object *item = NULL;
char index[10] = {0};
return ECORE_CALLBACK_CANCEL;
}
-static void _render_post_cb(void *data, Evas *e , void *event_info){
+static void _render_post_cb(void *data, Evas *e , void *event_info)
+{
_ENTER;
_D("render finished");
Evas_Object *slot = (Evas_Object *)data;
elm_object_signal_emit(slot, "show_vi", "slot");
}
-static void _mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source){
- _ENTER;
-
- _D("icon clicked");
-
- item_info_s *item_info = evas_object_data_get((Evas_Object *)data, "p_i_n");
-
- if(!item_info)
- return;
-
- g_info->appid_list[slot_index] = strdup(item_info->appid);
-
- Evas_Object *slot = _set_app_slot(item_info->appid, slot_index);
- elm_object_signal_emit(slot, "hide_icon", "slot");
- empty_count--;
- evas_object_hide(g_info->select_win);
- evas_object_show(g_info->edit_win);
- evas_event_callback_add(evas_object_evas_get(g_info->edit_layout), EVAS_CALLBACK_RENDER_POST, _render_post_cb, (void *)slot);
- _update_content();
-}
-
-static void _mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source){
- _D("icon mouse down");
- _ENTER;
- Evas_Object *icon = elm_object_part_content_get((Evas_Object *)data, "icon");
- evas_object_color_set(icon, 255, 255, 255, 127);
-}
-
-static void _mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source){
- _D("icon mouse up");
- _ENTER;
- Evas_Object *icon = elm_object_part_content_get((Evas_Object *)data, "icon");
- evas_object_color_set(icon, 255, 255, 255, 255);
-}
-
-static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _plus_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
_D("plus clicked");
_ENTER;
if(launch_flag == EINA_FALSE){
evas_object_show(g_info->select_win);
}
-static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _del_mouse_down_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
_ENTER;
_D("del mouse down");
elm_object_signal_emit((Evas_Object *)data, "pressed", "slot");
}
-static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _del_mouse_up_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
_ENTER;
_D("del mouse up");
elm_object_signal_emit((Evas_Object *)data, "released", "slot");
}
-static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source){
+static void _del_mouse_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
_ENTER;
_D("del mouse clicked");
char index[10] = {0};
Evas_Object *slot = NULL;
int ret = 0;
- Evas_Coord x,y,w,h;
+ Evas_Coord x, y, w, h;
int pos = 0;
if(transit_go){
longpress_timer = ecore_timer_add(0.5, _longpress_timer_cb, obj);
}
-static void _transit_del_cb(void *data, Elm_Transit *transit){
+static void _transit_del_cb(void *data, Elm_Transit *transit)
+{
_ENTER;
_D("transit end");
char index[10] = {0};
transit_obj = NULL;
}
-static void _anim_switch_item(Evas_Object *item, int src, int dst){
+static void _anim_switch_item(Evas_Object *item, int src, int dst)
+{
_ENTER;
if(transit_go == EINA_TRUE) return;
transit_go = EINA_TRUE;
_update_content();
}
-static Evas_Object *_create_item(Evas_Object *scroller, item_info_s *item_info)
+Evas_Object *_set_app_slot(const char *appid, int pos)
{
- _ENTER;
- Evas_Object *page = NULL;
- Evas_Object *page_rect = NULL;
- Evas_Object *icon = NULL;
- page = elm_layout_add(scroller);
- retv_if(!page, NULL);
- char full_path[PATH_MAX] = { 0, };
- apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
- _D("full_path:%s",full_path);
- int ret = elm_layout_file_set(page, full_path, "item");
- _D("ret:%d",ret);
-
- evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(page);
-
- page_rect = evas_object_rectangle_add(evas_object_evas_get(page));
- evas_object_size_hint_min_set(page_rect, (160), (360));
- evas_object_color_set(page_rect, 0, 0, 0, 0);
- evas_object_show(page_rect);
- elm_object_part_content_set(page, "bg", page_rect);
-
- icon = evas_object_image_add(evas_object_evas_get(page));
- evas_object_repeat_events_set(icon, EINA_TRUE);
- _D("icon:%s ,name:%s",item_info->icon,item_info->name);
- evas_object_image_file_set(icon, item_info->icon, NULL);
- evas_object_image_filled_set(icon, EINA_TRUE);
- evas_object_show(icon);
- elm_object_part_content_set(page, "icon", icon);
- elm_object_part_text_set(page, "name", item_info->name);
-
- elm_object_signal_callback_add(page, "mouse_clicked", "*", _mouse_clicked_cb, page);
- elm_object_signal_callback_add(page, "mouse_down", "*", _mouse_down_cb, page);
- elm_object_signal_callback_add(page, "mouse_up", "*", _mouse_up_cb, page);
-
- home_custom_scroller_page_append(scroller, page);
- evas_object_data_set(page, "p_i_n", item_info);
- _EXIT;
- return page;
-}
-
-void app_shortcut_show_name(Evas_Object *page){
- _ENTER;
- appdata_s *info = _get_info();
- item_info_s *item_info = NULL;
- item_info = evas_object_data_get(page, "p_i_n");
-
- page = home_custom_scroller_get_current_page(info->scroller);
-
- if(item_info){
- _D("get item info from the page. %s", item_info->name);
- elm_object_part_text_set(info->select_layout, "name", item_info->name);
- elm_object_signal_emit(info->select_layout, "show_name", "name");
- edje_object_message_signal_process(info->select_layout);
- hide_flag = EINA_FALSE;
- }
-
-}
-
-void app_shortcut_hide_name(){
- _ENTER;
- appdata_s *info = _get_info();
- if(hide_flag == EINA_FALSE){
- _D("hide app name");
- elm_object_signal_emit(info->select_layout, "hide_name", "name");
- hide_flag = EINA_TRUE;
- }
-
-}
-
-Evas_Object *_set_app_slot(const char *appid, int pos){
_ENTER;
pkgmgrinfo_appinfo_h appinfo_h = NULL;
_D("%s", appid);
return slot;
}
-static void _create_edit_layout(appdata_s *info){
+static void _create_edit_layout(appdata_s *info)
+{
_ENTER;
- int ret = 0;
+
Evas_Object *layout = NULL;
- layout = elm_layout_add(info->edit_win);
char full_path[PATH_MAX] = { 0, };
- apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
- _D("full_path:%s",full_path);
- ret = elm_layout_file_set(layout, full_path, "edit_layout");
- if(ret == EINA_FALSE){
- _E("failed to set layout");
- return;
- }
- info->edit_layout = layout;
+ layout = elm_layout_add(info->edit_win);
+ apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
+ elm_layout_file_set(layout, full_path, "edit_layout");
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_resize(layout, 360, 360);
evas_object_show(layout);
+
+ info->edit_layout = layout;
}
+static char *_title_item_get_txt_cb(void *data, Evas_Object *obj, const char *part)
+{
+ return strdup("Select application");
+}
-static void _create_layout(appdata_s *info){
- _ENTER;
- Evas_Object *layout = NULL;
- int ret = 0;
- Eina_List *item_info_list = NULL;
- item_info_s *item_info = NULL;
- layout = elm_layout_add(info->select_win);
- char full_path[PATH_MAX] = { 0, };
- apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
- _D("full_path:%s",full_path);
- ret = elm_layout_file_set(layout, full_path, "layout");
- if(ret == EINA_FALSE){
- _E("failed to set layout");
- return;
+static Elm_Genlist_Item_Class *_get_gl_itc_header()
+{
+ if (!header_itc_inited) {
+ header_itc.item_style = "title";
+ header_itc.decorate_item_style = NULL;
+ header_itc.decorate_all_item_style = NULL;
+ header_itc.func.text_get = _title_item_get_txt_cb;
+ header_itc.func.content_get = NULL;
+ header_itc.func.state_get = NULL;
+ header_itc.func.del = NULL;
+ header_itc_inited = true;
}
- info->select_layout = layout;
+ return &header_itc;
+}
- evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_resize(layout, 360, 360);
- evas_object_show(layout);
- _D("layout create done");
- /* scroller */
- scroller_info_s *scroller_info = home_custom_scroller_info_create();
+static char *_cont_item_get_txt_cb(void *data, Evas_Object *obj, const char *part)
+{
+ _D();
+ if (!strcmp(part, "elm.text")) {
+ _D();
+ item_info_s *item_info = data;
+ retv_if(!item_info, NULL);
+ _D("Name created");
+ return strdup(item_info->name);
+ }
+ return NULL;
+}
- scroller_info->page_width = 160;
- scroller_info->page_height = 360;
+static void _toast_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ret_if(!obj);
+ elm_popup_dismiss(obj);
+}
- scroller_info->edge_width = 100;//76;
- scroller_info->edge_height = 360;//165;
+static void _toast_popup_dismiss_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ret_if(!obj);
+ evas_object_del(obj);
+ g_info->toast_popup = NULL;
+}
- Evas_Object *scroller = home_custom_scroller_add(layout, scroller_info);
- if(!scroller){
- _E("scroller is NULL");
- free(scroller_info);
- return;
- }
- info->scroller = scroller;
- elm_object_part_content_set(layout, "scroller", scroller);
-
-
- evas_object_show(scroller);
- _D("scroller create done");
- /* get apps list */
- item_info_list = g_info->app_list;
-
- //Handle AppsUI case
- item_info_s *apps_item_info = NULL;
- Evas_Object *apps_item = NULL;
- g_info->item_list = NULL;
- apps_item_info = apps_item_info_create(APPS_PKG);
- if(NULL == apps_item_info){
- _E("failed to create item info");
+static void _create_toast_popup(const char *text)
+{
+ Evas_Object *popup = NULL;
+
+ if (g_info->toast_popup) {
+ evas_object_del(g_info->toast_popup);
}
- else{
- free(apps_item_info->name);
- apps_item_info->name = strdup(IDS_IDLE_BODY_APPS);
- _D("%s,%s,%s", apps_item_info->appid, apps_item_info->icon, apps_item_info->name);
- apps_item = _create_item(scroller, apps_item_info);
- g_info->item_list = eina_list_append(g_info->item_list, apps_item);
+
+ popup = elm_popup_add(g_info->select_win);
+ elm_object_style_set(popup, "toast/circle");
+ elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _toast_popup_hide_cb, NULL);
+ evas_object_smart_callback_add(popup, "dismissed", _toast_popup_dismiss_cb, NULL);
+ elm_object_part_text_set(popup, "elm.text", text);
+ evas_object_smart_callback_add(popup, "block,clicked", _toast_popup_hide_cb, NULL);
+ elm_popup_timeout_set(popup, 2.0);
+ evas_object_smart_callback_add(popup, "timeout", _toast_popup_hide_cb, NULL);
+
+ evas_object_show(popup);
+
+ g_info->toast_popup = popup;
+}
+
+static void _gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ item_info_s *item_info = data;
+ char buf[SELECT_COUNT_BUF_SIZE] = { 0 };
+
+ if (g_info->select_count >= 4) {
+ if (item_info->is_selected) {
+ item_info->is_selected = false;
+ elm_check_state_set(obj, EINA_FALSE);
+ _create_toast_popup("You can only add up to 4 apps");
+ return;
+ }
}
- Eina_List *l = NULL;
- Eina_List *n = NULL;
- EINA_LIST_FOREACH_SAFE(item_info_list, l, n, item_info) {
- Evas_Object *page_item = NULL;
- _D("create item for each pkg pkgid:%s",item_info->pkgid);
- page_item = _create_item(scroller, item_info);
- g_info->item_list = eina_list_append(g_info->item_list, page_item);
+ g_info->select_count += (item_info->is_selected)? 1 : -1;
+ snprintf(buf, sizeof(buf), "%d/4", g_info->select_count);
+ elm_object_text_set(g_info->select_count_btn, buf);
+}
+
+static Evas_Object *_cont_item_get_content_cb(void *data, Evas_Object *obj, const char *part)
+{
+ item_info_s *item_info = data;
+ retv_if(!item_info, NULL);
+
+ if (!strcmp(part, "elm.icon")) {
+ Evas_Object *image = NULL;
+
+ image = elm_image_add(obj);
+ elm_image_file_set(image, item_info->icon, NULL);
+ elm_image_aspect_fixed_set(image, EINA_TRUE);
+ evas_object_repeat_events_set(image, EINA_TRUE);
+ evas_object_size_hint_min_set(image,
+ ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENTION),
+ ELM_SCALE_SIZE(GENLIST_ITEM_ICON_DIMENTION));
+ evas_object_show(image);
+ return image;
+ } else if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK && !strcmp(part, "elm.swallow.center_check")) {
+ Evas_Object *check = elm_check_add(obj);
+ elm_object_style_set(check, "genlist/select_mode");
+ elm_check_state_set(check, EINA_FALSE);
+ evas_object_smart_callback_add(check, "changed", _gl_check_clicked_cb, data);
+ elm_check_state_pointer_set(check, &item_info->is_selected);
+ evas_object_repeat_events_set(check, EINA_FALSE);
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ evas_object_show(check);
+
+ return check;
}
- eina_list_free(item_info_list);
- Evas_Object *index = home_custom_scroller_index_add(layout, scroller);
- if(!index) return;
+ return NULL;
+}
- elm_object_part_content_set(layout, "index", index);
+static void _cont_item_del_cb(void *data, Evas_Object *obj)
+{
+ apps_item_info_destroy(data);
+}
- _D("create layout success");
- return;
+static Elm_Genlist_Item_Class *_get_gl_itc_content()
+{
+ if (!content_itc_inited) {
+ content_itc.item_style = "1text.1icon";
+ content_itc.decorate_item_style = NULL;
+ content_itc.decorate_all_item_style = NULL;
+ content_itc.func.text_get = _cont_item_get_txt_cb;
+ content_itc.func.content_get = _cont_item_get_content_cb;
+ content_itc.func.state_get = NULL;
+ content_itc.func.del = _cont_item_del_cb;
+ content_itc_inited = true;
+ }
+ return &content_itc;
}
-void apps_item_info_destroy(item_info_s *item_info)
+static Elm_Genlist_Item_Class *_get_gl_itc_empty()
{
- _ENTER;
- ret_if(!item_info);
+ if (!empty_itc_inited) {
+ empty_itc.item_style = "1text.1icon";
+ empty_itc.decorate_item_style = NULL;
+ empty_itc.decorate_all_item_style = NULL;
+ empty_itc.func.text_get = NULL;
+ empty_itc.func.content_get = NULL;
+ empty_itc.func.state_get = NULL;
+ empty_itc.func.del = NULL;
+ empty_itc_inited = true;
+ }
+ return &empty_itc;
+}
- if (item_info->pkgid) free(item_info->pkgid);
- if (item_info->appid) free(item_info->appid);
- if (item_info->name) free(item_info->name);
- if (item_info->icon) free(item_info->icon);
- if (item_info->type) free(item_info->type);
- if (item_info) free(item_info);
+static void _set_select_genlist_content(Evas_Object *genlist, appdata_s *info)
+{
+ if (info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+ _gl_add_empty_item(genlist);
+ } else {
+ _gl_add_header_item(genlist);
+ }
+ _gl_add_apps_items(genlist, info);
+ _gl_add_empty_item(genlist);
}
-item_info_s *apps_apps_info_create(const char *appid)
+static Evas_Object *_create_simple_genlist(Evas_Object *parent, appdata_s *info)
{
- _ENTER;
- item_info_s *item_info = NULL;
- pkgmgrinfo_appinfo_h appinfo_h = NULL;
- pkgmgrinfo_pkginfo_h pkghandle = NULL;
- char *pkgid = NULL;
+ Evas_Object *eo = elm_genlist_add(parent);
+ retv_if(!eo, NULL);
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_genlist_mode_set(eo, ELM_LIST_COMPRESS);
+ elm_genlist_homogeneous_set(eo, EINA_TRUE);
- char *icon = NULL;
- char *type = NULL;
- bool removable = false;
+ Evas_Object *circle_genlist = eext_circle_object_genlist_add(eo, info->select_circle_surf);
+ eext_circle_object_genlist_scroller_policy_set(circle_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+ eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
+ evas_object_show(eo);
+ return eo;
+}
- retv_if(!appid, NULL);
+static void _gl_add_header_item(Evas_Object *gl)
+{
+ elm_genlist_item_append(gl, _get_gl_itc_header(), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+}
- item_info = calloc(1, sizeof(item_info_s));
- if (NULL == item_info) {
- return NULL;
+static bool _check_already_added_apps(const char *appid)
+{
+ int i = 0;
+
+ for (; i < APP_SLOTS_MAX_COUNT; i++) {
+ if (!strcmp(g_info->appid_list[i], appid)) {
+ return true;
+ }
}
- goto_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), ERROR);
- goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon), ERROR);
- do {
- break_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid));
- break_if(NULL == pkgid);
+ return false;
+}
- break_if(0 > pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkghandle));
- break_if(NULL == pkghandle);
- } while (0);
+static void _gl_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ item_info_s *item_info = data;
+ ret_if(!item_info);
- goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_type(pkghandle, &type), ERROR);
- if (pkgid) {
- item_info->pkgid = strdup(pkgid);
- goto_if(NULL == item_info->pkgid, ERROR);
+ Elm_Object_Item *it = (Elm_Object_Item *)event_info;
+ elm_genlist_item_selected_set(it, EINA_FALSE);
+
+ if (g_info->launch_type == APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+ return;
}
- item_info->appid = strdup(appid);
- goto_if(NULL == item_info->appid, ERROR);
+ if (_check_already_added_apps(item_info->appid)) {
+ /* TODO: Need translation */
+ _create_toast_popup("App already added.");
+ return;
+ }
- item_info->name = strdup(_("IDS_IDLE_BODY_APPS"));
+ g_info->appid_list[slot_index] = strdup(item_info->appid);
- if (type) {
- item_info->type = strdup(type);
- goto_if(NULL == item_info->type, ERROR);
- if (!strncmp(item_info->type, APP_TYPE_WGT, strlen(APP_TYPE_WGT))) {
- item_info->open_app = 1;
- } else {
- item_info->open_app = 0;
- }
- }
+ Evas_Object *slot = _set_app_slot(item_info->appid, slot_index);
+ elm_object_signal_emit(slot, "hide_icon", "slot");
+ empty_count--;
- if (icon) {
- if (strlen(icon) > 0) {
- item_info->icon = strdup(icon);
- goto_if(NULL == item_info->icon, ERROR);
- } else {
- item_info->icon = strdup(DEFAULT_ICON);
- goto_if(NULL == item_info->icon, ERROR);
+ evas_object_hide(g_info->select_win);
+ evas_object_show(g_info->edit_win);
+
+ evas_event_callback_add(evas_object_evas_get(g_info->edit_layout),
+ EVAS_CALLBACK_RENDER_POST, _render_post_cb, (void *)slot);
+
+ _update_content();
+}
+
+static void _gl_add_apps_items(Evas_Object *gl, appdata_s *info)
+{
+ item_info_s *item_info = NULL;
+ Eina_List *item_info_list = g_info->all_app_list;
+ Elm_Object_Item *item = NULL;
+ Eina_List *l = NULL;
+ Eina_List *n = NULL;
+
+ EINA_LIST_FOREACH_SAFE(item_info_list, l, n, item_info) {
+ item = elm_genlist_item_append(gl, _get_gl_itc_content(), item_info, NULL,
+ ELM_GENLIST_ITEM_NONE, _gl_item_clicked_cb, item_info);
+ if (!item) {
+ _E("Failed to append genlist item");
}
- } else {
- item_info->icon = strdup(DEFAULT_ICON);
- goto_if(NULL == item_info->icon, ERROR);
}
+}
- item_info->removable = removable;
+static void _gl_add_empty_item(Evas_Object *gl)
+{
+ elm_genlist_item_append(gl, _get_gl_itc_empty(), NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+}
- pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
- if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
+static Evas_Object *_create_bottom_btn_ly(appdata_s *info)
+{
+ Evas_Object *eo = elm_layout_add(info->select_conform);
+ retv_if(!eo, NULL);
+ elm_layout_theme_set(eo, "layout", "bottom_button", "default");
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(eo);
- return item_info;
+ return eo;
+}
-ERROR:
- apps_item_info_destroy(item_info);
- pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
- if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
- return NULL;
+static void _bottom_btn_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _update_appid_list_with_selected_items();
+ _terminate_add_to_shortcut();
}
-item_info_s *apps_recent_info_create(const char *appid)
+static Evas_Object *_create_bottom_btn(Evas_Object *parent, appdata_s *info)
{
- _ENTER;
- item_info_s *item_info = NULL;
- pkgmgrinfo_appinfo_h appinfo_h = NULL;
- pkgmgrinfo_pkginfo_h pkghandle = NULL;
- char *pkgid = NULL;
- char *icon = NULL;
- char *type = NULL;
- char *name = NULL;
- bool removable = false;
+ Evas_Object *eo = elm_button_add(parent);
+ retv_if(!eo, NULL);
+ elm_object_style_set(eo, "bottom");
+ /* TODO: Need translation */
+ elm_object_text_set(eo, "COMPLETE");
+ evas_object_smart_callback_add(eo, "clicked", _bottom_btn_click_cb, NULL);
+ evas_object_show(eo);
+ elm_object_part_content_set(parent, "elm.swallow.button", eo);
- retv_if(!appid, NULL);
+ return eo;
+}
- item_info = calloc(1, sizeof(item_info_s));
- if (NULL == item_info) {
- return NULL;
- }
+static Evas_Object *_create_genlist_ly(Evas_Object *parent, appdata_s *info)
+{
+ Evas_Object *eo = elm_layout_add(parent);
+ retv_if(!eo, NULL);
+ elm_layout_theme_set(eo, "layout", "select_mode", "default");
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(eo);
- goto_if(0 > pkgmgrinfo_appinfo_get_appinfo(appid, &appinfo_h), ERROR);
- goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_label(appinfo_h, &name), ERROR);
- goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_icon(appinfo_h, &icon), ERROR);
- do {
- break_if(PMINFO_R_OK != pkgmgrinfo_appinfo_get_pkgid(appinfo_h, &pkgid));
- break_if(NULL == pkgid);
+ elm_layout_content_set(parent, "elm.swallow.content", eo);
- break_if(0 > pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkghandle));
- break_if(NULL == pkghandle);
- } while (0);
- goto_if(PMINFO_R_OK != pkgmgrinfo_pkginfo_get_type(pkghandle, &type), ERROR);
- if (pkgid) {
- item_info->pkgid = strdup(pkgid);
- goto_if(NULL == item_info->pkgid, ERROR);
- }
- item_info->appid = strdup(appid);
- goto_if(NULL == item_info->appid, ERROR);
+ return eo;
+}
- if(name){
- item_info->name = strdup(name);
- goto_if(NULL == item_info->name, ERROR);
- }
+static Evas_Object *_create_pick_genlist(Evas_Object *parent, appdata_s *info)
+{
+ Evas_Object *eo = _create_simple_genlist(parent, info);
+ retv_if(!eo, NULL);
+ elm_object_style_set(eo, "focus_bg");
+ _set_select_genlist_content(eo, info);
+ elm_layout_content_set(parent, "elm.swallow.content", eo);
- if (type) {
- item_info->type = strdup(type);
- goto_if(NULL == item_info->type, ERROR);
- if (!strncmp(item_info->type, APP_TYPE_WGT, strlen(APP_TYPE_WGT))) {
- item_info->open_app = 1;
- } else {
- item_info->open_app = 0;
- }
- }
+ return eo;
+}
- if (icon) {
- if (strlen(icon) > 0) {
- item_info->icon = strdup(icon);
- goto_if(NULL == item_info->icon, ERROR);
- } else {
- item_info->icon = strdup(DEFAULT_ICON);
- goto_if(NULL == item_info->icon, ERROR);
- }
+static Evas_Object *_create_select_count_btn(Evas_Object *parent, appdata_s *info)
+{
+ char buf[SELECT_COUNT_BUF_SIZE] = { 0 };
+ char full_path[PATH_MAX] = { 0, };
+
+ Evas_Object *eo = elm_layout_add(parent);
+ apptray_wgt_app_utils_get_resource(EDJE_FILE, full_path, sizeof(full_path));
+ elm_layout_file_set(eo, full_path, "select_indicator");
+ snprintf(buf, sizeof(buf), "%d/4", info->select_count);
+ elm_object_text_set(eo, buf);
+ elm_layout_content_set(parent, "elm.swallow.icon", eo);
+
+ elm_object_signal_emit(eo, "select_mode,button,show", "elm");
+
+ return eo;
+}
+
+static void _create_select_view(appdata_s *info)
+{
+ _ENTER;
+
+ if (info->launch_type != APPTRAY_WGT_APP_LAUNCH_TYPE_PICK) {
+ Evas_Object *genlist = _create_simple_genlist(info->select_conform, info);
+ ret_if(!genlist);
+ _set_select_genlist_content(genlist, info);
+ elm_object_content_set(info->select_conform, genlist);
} else {
- item_info->icon = strdup(DEFAULT_ICON);
- goto_if(NULL == item_info->icon, ERROR);
- }
+ Evas_Object *bottom_btn_ly = NULL;
+ Evas_Object *bottom_btn = NULL;
+ Evas_Object *genlist_layout = NULL;
+ Evas_Object *genlist = NULL;
- item_info->removable = removable;
- pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
- if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
- return item_info;
+ bottom_btn_ly = _create_bottom_btn_ly(info);
+ ret_if(!bottom_btn_ly);
-ERROR:
- apps_item_info_destroy(item_info);
+ bottom_btn = _create_bottom_btn(bottom_btn_ly, info);
+ ret_if(!bottom_btn);
- pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
- if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
- return NULL;
+ genlist_layout = _create_genlist_ly(bottom_btn_ly, info);
+ ret_if(!genlist_layout);
+
+ genlist = _create_pick_genlist(genlist_layout, info);
+ ret_if(!genlist);
+
+ info->select_count_btn = _create_select_count_btn(genlist_layout, info);
+ ret_if(!info->select_count_btn);
+
+ elm_object_signal_emit(genlist_layout, "select_mode,button,show", "");
+
+ elm_object_content_set(info->select_conform, bottom_btn_ly);
+ }
+}
+
+void apps_item_info_destroy(item_info_s *item_info)
+{
+ _ENTER;
+ ret_if(!item_info);
+
+ if (item_info->pkgid)
+ free(item_info->pkgid);
+ if (item_info->appid)
+ free(item_info->appid);
+ if (item_info->name)
+ free(item_info->name);
+ if (item_info->icon)
+ free(item_info->icon);
+ if (item_info->type)
+ free(item_info->type);
+ if (item_info)
+ free(item_info);
}
item_info_s *apps_item_info_create(const char *appid)
bool nodisplay = false;
bool enabled = false;
bool removable = false;
- //int support_mode = 0;
retv_if(!appid, NULL);
if (name) {
if(!strncmp(appid, APPS_PKG, strlen(APPS_PKG))) {
- item_info->name = strdup(_("IDS_IDLE_BODY_APPS"));
+ /* TODO: Need translation */
+ item_info->name = strdup(IDS_IDLE_BODY_APPS);
goto_if(NULL == item_info->name, ERROR);
}
else{
}
}
-
- if (icon) {
- if (strlen(icon) > 0) {
- item_info->icon = strdup(icon);
- goto_if(NULL == item_info->icon, ERROR);
- } else {
- item_info->icon = strdup(DEFAULT_ICON);
- goto_if(NULL == item_info->icon, ERROR);
- }
+ if (icon) {
+ if (strlen(icon) > 0) {
+ item_info->icon = strdup(icon);
+ goto_if(NULL == item_info->icon, ERROR);
} else {
item_info->icon = strdup(DEFAULT_ICON);
goto_if(NULL == item_info->icon, ERROR);
}
+ } else {
+ item_info->icon = strdup(DEFAULT_ICON);
+ goto_if(NULL == item_info->icon, ERROR);
+ }
item_info->removable = removable;
pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
- if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
+ if (pkghandle)
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
return item_info;
ERROR:
apps_item_info_destroy(item_info);
- if (appinfo_h) pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
- if (pkghandle) pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
+ if (appinfo_h)
+ pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+ if (pkghandle)
+ pkgmgrinfo_pkginfo_destroy_pkginfo(pkghandle);
return NULL;
}
goto_if(PMINFO_R_OK != pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, _apps_all_cb, list), ERROR);
*list = eina_list_sort(*list, eina_list_count(*list), _apps_sort_cb);
+ *list = eina_list_prepend(*list, apps_item_info_create(APPS_PKG));
ERROR:
- if (handle) pkgmgrinfo_appinfo_filter_destroy(handle);
+ if (handle)
+ pkgmgrinfo_appinfo_filter_destroy(handle);
return *list;
}
static Eina_Bool _load_list(void* data)
{
Eina_List *pkgmgr_list = NULL;
- g_info->app_list = _read_all_apps(&pkgmgr_list);
- _create_layout(g_info);
+ g_info->all_app_list = _read_all_apps(&pkgmgr_list);
+ _create_select_view(g_info);
return ECORE_CALLBACK_CANCEL;
}
static void _process_pick_operation(appdata_s *info, app_control_h service)
{
_ENTER;
- /* TODO: This is stub to leave application on peek operation
- Need to implement in further according UI
- */
-
- char *content = NULL;
- char *save = NULL;
- int i = 0;
-
- _create_edit_layout(info);
- evas_object_show(info->edit_win);
- content = strdup_s("empty empty empty empty");
-
- if (!content) {
- _D("Content is NULL. Set default applist");
- content = strdup(DEFAULT_APP_ORDER);
- }
- _D("Content [%s]", content);
-
- for (i = 0 ; i < APP_SLOTS_MAX_COUNT ; i++) {
- if (i == 0) {
- _set_app_slot(strtok_r(content, " ",&save), i);
- } else {
- _set_app_slot(strtok_r(NULL, " ",&save), i);
- }
- }
-
- free(content);
+ evas_object_show(info->select_win);
ecore_idler_add(_load_list, NULL);
}
ecore_idler_add(_load_list, NULL);
}
+static bool _create_edit_window(appdata_s *info, const char *name, const char *title)
+{
+ info->edit_win = _create_win(info, name, title);
+ retv_if(!info->edit_win, false);
+
+ return true;
+}
+
+static Evas_Object *_create_conformant_without_indicator(Evas_Object *win)
+{
+ Evas_Object *conform = NULL;
+
+ retv_if(!win, NULL);
+
+ conform = elm_conformant_add(win);
+ evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, conform);
+ evas_object_show(conform);
+
+ return conform;
+}
+
+static bool _create_select_window(appdata_s *info, const char *name, const char *title)
+{
+ info->select_win = _create_win(info, name, title);
+ retv_if(!info->select_win, false);
+
+ info->select_conform = _create_conformant_without_indicator(info->select_win);
+ retv_if(!info->select_conform, false);
+
+ info->select_circle_surf = eext_circle_surface_conformant_add(info->select_conform);
+ retv_if(!info->select_circle_surf, false);
+
+ return true;
+}
+
static bool _app_create(void *data)
{
_ENTER;
- _D("check");
+
appdata_s *info = data;
+ retv_if(!info, false);
g_info = info;
- info->edit_win = _create_win(info, "__ADD_TO_SHORTCUT__", "__ADD_TO_SHORTCUT__");
- retv_if(!info->edit_win, false);
- info->select_win = _create_win(info, "__SELECT_LIST__", "_SELECT_LIST__");
- retv_if(!info->select_win, false);
+ retv_if(!_create_edit_window(info, "__ADD_TO_SHORTCUT__", "__ADD_TO_SHORTCUT__"), false);
+ retv_if(!_create_select_window(info, "__SELECT_LIST__", "__SELECT_LIST__"), false);
- _init_theme();
feedback_initialize();
g_info->release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _key_release_cb, NULL);
static void _app_terminate(void *data)
{
_ENTER;
- _D("check");
- _fini_theme();
+
+ if (longpress_timer) {
+ ecore_timer_del(longpress_timer);
+ }
+
feedback_deinitialize();
}
static void _app_lang_changed(app_event_info_h event_info, void *user_data)
{
_ENTER;
- /*APP_EVENT_LANGUAGE_CHANGED*/
+
char *locale = NULL;
system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
elm_language_set(locale);
+++ /dev/null
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <Elementary.h>
-
-#include <bundle.h>
-#include <util.h>
-
-
-#include "common/home_custom_index_info.h"
-#include "common/home_custom_index.h"
-#include "common/home_custom_scroller.h"
-#include "app-widget-app_log.h"
-
-#define PRIVATE_DATA_KEY_INDEX_TIMER "p_in_timer"
-
-typedef struct {
- Evas_Object *page;
- int index;
-} page_index_s;
-
-
-#define INDEX_EVEN_ITEM_NUM 20
-#define INDEX_ODD_ITEM_NUM 19
-static const char *_index_style_get(int index, int even)
-{
- static const char g_it_style_odd[INDEX_ODD_ITEM_NUM][20] = {
- "item/odd_1",
- "item/odd_2",
- "item/odd_3",
- "item/odd_4",
- "item/odd_5",
- "item/odd_6",
- "item/odd_7",
- "item/odd_8",
- "item/odd_9",
- "item/odd_10",
- "item/odd_11",
- "item/odd_12",
- "item/odd_13",
- "item/odd_14",
- "item/odd_15",
- "item/odd_16",
- "item/odd_17",
- "item/odd_18",
- "item/odd_19",
- };
- static const char g_it_style_even[INDEX_EVEN_ITEM_NUM][20] = {
- "item/even_1",
- "item/even_2",
- "item/even_3",
- "item/even_4",
- "item/even_5",
- "item/even_6",
- "item/even_7",
- "item/even_8",
- "item/even_9",
- "item/even_10",
- "item/even_11",
- "item/even_12",
- "item/even_13",
- "item/even_14",
- "item/even_15",
- "item/even_16",
- "item/even_17",
- "item/even_18",
- "item/even_19",
- "item/even_20",
- };
-
- index = (index < 0) ? 0 : index;
- if (even) {
- index = (index >= INDEX_EVEN_ITEM_NUM) ? INDEX_EVEN_ITEM_NUM - 1 : index;
-
- return g_it_style_even[index];
- } else {
- index = (index >= INDEX_ODD_ITEM_NUM) ? INDEX_ODD_ITEM_NUM - 1 : index;
-
- return g_it_style_odd[index];
- }
-}
-
-
-HAPI void home_custom_index_bring_in_page(Evas_Object *index, Evas_Object *page)
-{
- _ENTER;
- Elm_Object_Item *idx_it = NULL;
- const Eina_List *l = NULL;
- hc_index_info_s *index_info = NULL;
- page_index_s *page_index = NULL;
- int idx = 0;
- int found = 0;
-
- ret_if(!index);
- ret_if(!page);
-
- index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO);
- ret_if(!index_info);
- ret_if(!index_info->page_index_list);
-
- EINA_LIST_FOREACH(index_info->page_index_list, l, page_index) {
- if (page_index->page == page) {
- idx = page_index->index;
- found = 1;
- break;
- }
- }
-
- if (!found) {
- _E("Cannot find a page(%p)", page);
- return;
- }
-
- idx_it = elm_index_item_find(index, (void *) idx);
- if (idx_it) {
- elm_index_item_selected_set(idx_it, EINA_TRUE);
- } else {
- _E("Critical, the index(%p) cannot find the page(%p:%d)", index, page, idx);
- }
-}
-
-
-
-HAPI Evas_Object *home_custom_index_create(Evas_Object *parent, Evas_Object *scroller)
-{
- _ENTER;
- Evas_Object *index = NULL;
- hc_index_info_s *index_info = NULL;
-
- retv_if(!parent, NULL);
- retv_if(!scroller, NULL);
-
- index = elm_index_add(parent);
- retv_if(!index, NULL);
- elm_object_style_set(index, "circle");
-
- index_info = calloc(1, sizeof(hc_index_info_s));
- if (!index_info) {
- _E("Cannot calloc for index_info");
- evas_object_del(index);
- return NULL;
- }
- evas_object_data_set(index, DATA_KEY_INDEX_INFO, index_info);
-
- evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_index_horizontal_set(index, EINA_TRUE);
- elm_index_autohide_disabled_set(index, EINA_TRUE);
- elm_index_level_go(index, 0);
- evas_object_show(index);
-
- index_info->layout = parent;
- index_info->scroller = scroller;
-
- return index;
-}
-
-
-
-HAPI void home_custom_index_destroy(Evas_Object *index)
-{
- _ENTER;
- hc_index_info_s *index_info = NULL;
- page_index_s *page_index = NULL;
-
- ret_if(!index);
-
- index_info = evas_object_data_del(index, DATA_KEY_INDEX_INFO);
- ret_if(!index_info);
-
- if (index_info->page_index_list) {
- EINA_LIST_FREE(index_info->page_index_list, page_index) {
- free(page_index);
- }
- index_info->page_index_list = NULL;
- }
-
- free(index_info);
- elm_index_item_clear(index);
- evas_object_del(index);
-}
-
-
-
-#define MAX_INDEX_NUMBER 20
-static void _update_index(Evas_Object *scroller, Evas_Object *index, const Eina_List *list)
-{
- _ENTER;
- Evas_Object *page = NULL;
- Elm_Object_Item *idx_it = NULL;
- const Eina_List *l = NULL;
-
- hc_index_info_s *index_info = NULL;
- page_index_s *page_index = NULL;
-
- int extra_idx = 0, page_index_inserting = 0;
- int cur_inserted = 0;
- int index_number = 0;
- int cur_start_idx = 0, cur_mid_idx = 0;
- int total_count = 0, total_inserted = 0;
-
- ret_if(!index);
- ret_if(!list);
-
- index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO);
- ret_if(!index_info);
-
- /* 0. Remove an old page_index_list */
- if (index_info->page_index_list) {
- EINA_LIST_FREE(index_info->page_index_list, page_index) {
- free(page_index);
- }
- index_info->page_index_list = NULL;
- }
-
- /* 1. Make indexes (cur/center/other) */
- total_count = home_custom_scroller_get_page_count(scroller);
-
- total_inserted = total_count;
- if (total_inserted > MAX_INDEX_NUMBER) {
- total_inserted = MAX_INDEX_NUMBER;
- }
-
- int style_even = 0;
- int style_base = 0;
- if (!(total_inserted % 2)) {
- style_even = 1;
- style_base = (MAX_INDEX_NUMBER/2) - (total_inserted / 2);
- } else {
- style_base = (MAX_INDEX_NUMBER/2) - (total_inserted / 2) - 1;
- }
- _D("style even:%d,style base:%d",style_even,style_base);
-
- EINA_LIST_FOREACH(list, l, page) {
- if (index_number < total_inserted) {
- if (!cur_inserted) {
- cur_start_idx = index_number;
- }
- cur_inserted++;
- idx_it = elm_index_item_append(index, NULL, NULL, (void *) index_number);
- elm_object_item_style_set(idx_it, _index_style_get(style_base + index_number, style_even));
- index_number++;
- }
- }
-
- cur_mid_idx = (cur_start_idx + cur_inserted - 1) / 2;
- extra_idx = total_count - cur_inserted;
-
- /* 2. Make a new page_index_list */
- page_index_inserting = -1;
- EINA_LIST_FOREACH(list, l, page) {
- page_index = calloc(1, sizeof(page_index_s));
- continue_if(!page_index);
-
- if (page_index_inserting == cur_mid_idx && extra_idx > 0) {
- extra_idx--;
- } else {
- page_index_inserting++;
- }
-
- page_index->page = page;
- page_index->index = page_index_inserting;
-
- index_info->page_index_list = eina_list_append(index_info->page_index_list, page_index);
- }
-}
-
-
-
-HAPI void home_custom_index_update(Evas_Object *index, Evas_Object *scroller, hc_index_bring_in_e after)
-{
- _ENTER;
- Evas_Object *page_current = NULL;
- Eina_List *page_list = NULL;
-
- hc_index_info_s *index_info = NULL;
-
- ret_if(!index);
- ret_if(!scroller);
-
- _D("Index(%p) is clear", index);
- elm_index_item_clear(index);
-
- index_info = evas_object_data_get(index, DATA_KEY_INDEX_INFO);
- ret_if(!index_info);
-
- page_list = home_custom_scroller_get_page_list(scroller);
- ret_if(!page_list);
-
- elm_object_style_set(index, "circle");
-
- _update_index(scroller, index, page_list);
-
- eina_list_free(page_list);
-
- elm_index_level_go(index, 0);
-
- if (INDEX_BRING_IN_AFTER == after) {
- page_current = home_custom_scroller_get_current_page(scroller);
- ret_if(!page_current);
- home_custom_index_bring_in_page(index, page_current);
- }
-}
-
-
-static Eina_Bool _index_hide_timer_cb(void *data)
-{
- _ENTER;
- Evas_Object *index = (Evas_Object*)data;
- retv_if(!index, ECORE_CALLBACK_CANCEL);
-
- Elm_Transit *transit = elm_transit_add();
- retv_if(!transit, ECORE_CALLBACK_CANCEL);
-
- elm_transit_effect_color_add(transit, 255, 255, 255, 255, 0, 0, 0, 0);
- elm_transit_object_add(transit, index);
- elm_transit_duration_set(transit, 0.5);
- elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
- elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
- elm_transit_go(transit);
-
- evas_object_data_del(index, PRIVATE_DATA_KEY_INDEX_TIMER);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-HAPI void home_custom_index_show(Evas_Object *index, Eina_Bool bAutoHide)
-{
- _ENTER;
- Ecore_Timer *timer = NULL;
-
- ret_if(!index);
-
- evas_object_color_set(index, 255, 255, 255, 255);
- evas_object_show(index);
-
- if(bAutoHide) {
- timer = evas_object_data_get(index, PRIVATE_DATA_KEY_INDEX_TIMER);
- if(timer) {
- ecore_timer_del(timer);
- }
-
- timer = ecore_timer_add(2.0, _index_hide_timer_cb, index);
- ret_if(!timer);
-
- evas_object_data_set(index, PRIVATE_DATA_KEY_INDEX_TIMER, timer);
- }
-}
-
-
- // End of file
-
+++ /dev/null
-/*
- * Samsung API
- * Copyright (c) 2013 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.1 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-#include <app_control.h>
-#include <efl_extension.h>
-#include "common/home_custom_scroller.h"
-#include "common/home_custom_scroller_info.h"
-#include "common/home_custom_index.h"
-#include "app-widget-app.h"
-#include "util.h"
-
-
-#define SCROLLER_LAYOUT_EDJE "edje/home_custom_layout.edj"
-#define SCROLLER_LAYOUT_GROUP_NAME "layout"
-#define SCROLLER_BOX_PART_NAME "box"
-
-#define PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN "p_sc_m_dn"
-#define PRIVATE_DATA_KEY_SCROLLER_DRAG "p_sc_dr"
-#define PRIVATE_DATA_KEY_IS_SCROLLING "p_is_scr"
-#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER "p_sc_tmer"
-#define PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH "p_sc_ith"
-#define PRIVATE_DATA_KEY_SCROLLER_INFO "p_sc_if"
-
-#define PRIVATE_DATA_KEY_SCROLLER_PAGE_MOUSE_DOWN "p_sc_pg_m_dn"
-
-#define PRIVATE_DATA_KEY_INDEX "p_id"
-#define PRIVATE_DATA_KEY_START_EDGE_RECT "p_s_er"
-#define PRIVATE_DATA_KEY_END_EDGE_RECT "p_e_er"
-#define PRIVATE_DATA_KEY_EDGE_RECT "p_e_r"
-
-Eina_Bool scroll_transit_go = EINA_FALSE;
-#define PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN "p_sc_anim_start_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN "p_sc_anim_stop_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN "p_sc_drag_start_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_DRAG_STOP_FN "p_sc_drag_start_fn"
-#define PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN "p_sc_scroll_fn"
-
-int home_custom_scroller_get_current_page_no(Evas_Object *scroller);
-
-static void _scroller_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- _ENTER;
- Evas_Event_Mouse_Down *ei = event_info;
- ret_if(!ei);
-
- _D("Mouse is down [%d,%d]", ei->output.x, ei->output.y);
- evas_object_data_set(obj, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN, (void *) 1);
-}
-
-
-
-static void _scroller_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- _ENTER;
- Evas_Event_Mouse_Up *ei = event_info;
- ret_if(!ei);
-
- _D("Mouse is up [%d,%d]", ei->output.x, ei->output.y);
- evas_object_data_del(obj, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN);
-
- if (evas_object_data_get(obj, PRIVATE_DATA_KEY_SCROLLER_DRAG)) return;
- evas_object_data_del(obj, PRIVATE_DATA_KEY_IS_SCROLLING);
-}
-
-
-
-static void _default_anim_start_cb(void *data, Evas_Object *scroller, void *event_info)
-{
- _ENTER;
- _D("start the scroller animation");
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_IS_SCROLLING, (void *)1);
-
- void *(*_anim_start_cb)(void *, Evas_Object *, void *);
- _anim_start_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN);
- if(_anim_start_cb) _anim_start_cb(data, scroller, event_info);
-
- Evas_Object *page = home_custom_scroller_get_current_page(scroller);
- ret_if(!page);
-}
-
-
-
-static void _default_anim_stop_cb(void *data, Evas_Object *scroller, void *event_info)
-{
- _ENTER;
- _D("stop the scroller animation");
-
- void *(*_anim_stop_cb)(void *, Evas_Object *, void *);
- _anim_stop_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN);
- if(_anim_stop_cb) _anim_stop_cb(data, scroller, event_info);
-
- if (evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_MOUSE_DOWN)) return;
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_IS_SCROLLING);
-
- scroll_transit_go = EINA_FALSE;
-
- Evas_Object *page = home_custom_scroller_get_current_page(scroller);
- ret_if(!page);
- Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
- if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-
-static void _default_drag_start_cb(void *data, Evas_Object *scroller, void *event_info)
-{
- _ENTER;
- ret_if(!scroller);
-
- _D("start to drag the scroller animation");
-
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG, (void *) 1);
-
- void *(*_drag_start_cb)(void *, Evas_Object *, void *);
- _drag_start_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN);
- if(_drag_start_cb) _drag_start_cb(data, scroller, event_info);
-
- /* _drag_start_cb is called even if the scroller is not moved. */
- Evas_Object *page = home_custom_scroller_get_current_page(scroller);
- ret_if(!page);
- scroll_transit_go = EINA_TRUE;
-}
-
-
-
-static void _default_drag_stop_cb(void *data, Evas_Object *scroller, void *event_info)
-{
- _ENTER;
- ret_if(!scroller);
-
- _D("stop to drag the scroller animation");
-
- void *(*_drag_stop_cb)(void *, Evas_Object *, void *);
- _drag_stop_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_STOP_FN);
- if(_drag_stop_cb) _drag_stop_cb(data, scroller, event_info);
-
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG);
-}
-
-
-
-static void _default_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
-{
- _ENTER;
- ret_if(!scroller);
-
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_IS_SCROLLING, (void *)1);
-
- void *(*_scroll_cb)(void *, Evas_Object *, void *);
- _scroll_cb = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN);
- if(_scroll_cb) _scroll_cb(data, scroller, event_info);
-
- Evas_Object *page = home_custom_scroller_get_current_page(scroller);
- ret_if(!page);
-
- Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
- if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-static void _init_rotary(Evas_Object *scroller)
-{
- _ENTER;
- _D("Initialize the rotary event");
-}
-
-
-
-static void _destroy_rotary(Evas_Object *scroller)
-{
- _ENTER;
- _D("Finish the rotary event");
-}
-
-scroller_info_s *home_custom_scroller_info_create(void)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
-
- scroller_info = calloc(1, sizeof(scroller_info_s));
- retv_if(!scroller_info, NULL);
-
- return scroller_info;
-}
-
-
-void home_custom_scroller_register_cb(Evas_Object *scroller,
- void _anim_start_cb(void *, Evas_Object *, void *),
- void _anim_stop_cb(void *, Evas_Object *, void *),
- void _drag_start_cb(void *, Evas_Object *, void *),
- void _drag_stop_cb(void *, Evas_Object *, void *),
- void _scroll_cb(void *, Evas_Object *, void *))
-{
- _ENTER;
- ret_if(!scroller);
-
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN, _anim_start_cb);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN, _anim_stop_cb);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN, _drag_start_cb);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN, _drag_start_cb);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN, _scroll_cb);
-}
-
-
-void home_custom_scroller_deregister_cb(Evas_Object *scroller)
-{
- _ENTER;
- ret_if(!scroller);
-
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_START_FN);
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_ANIM_STOP_FN);
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN);
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_DRAG_START_FN);
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_SCROLL_FN);
-}
-
-Evas_Object *home_custom_scroller_add(Evas_Object *parent, scroller_info_s *scroller_info)
-{
- _ENTER;
- Evas_Object *scroller = NULL;
- Evas_Object *box_layout = NULL;
- Evas_Object *box = NULL;
- scroller = elm_scroller_add(parent);
- retv_if(!scroller, NULL);
- _D("scroller is added");
- elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
- evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_scroller_page_size_set(scroller, scroller_info->page_width, scroller_info->page_height);
- elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
- elm_scroller_page_scroll_limit_set(scroller, 1, 0);
- elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
-
- Evas_Object *circle_scroller = eext_circle_object_scroller_add(scroller, NULL);
- eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
- eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
-
- elm_object_style_set(scroller, "effect");
-
- evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_DOWN, _scroller_mouse_down_cb, NULL);
- evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, _scroller_mouse_up_cb, NULL);
- evas_object_smart_callback_add(scroller, "scroll,anim,start", _default_anim_start_cb, NULL);
- evas_object_smart_callback_add(scroller, "scroll,anim,stop", _default_anim_stop_cb, NULL);
- evas_object_smart_callback_add(scroller, "scroll,drag,start", _default_drag_start_cb, NULL);
- evas_object_smart_callback_add(scroller, "scroll,drag,stop", _default_drag_stop_cb, NULL);
- evas_object_smart_callback_add(scroller, "scroll", _default_scroll_cb, NULL);
-
- /* Use the layout between box and scroller because of alignment of a page in the box. */
- box_layout = elm_layout_add(scroller);
- goto_if(!box_layout, ERROR);
- _D("box layout is created for scroller");
- char full_path[PATH_MAX] = { 0, };
- apptray_wgt_app_utils_get_resource(SCROLLER_LAYOUT_EDJE, full_path, sizeof(full_path));
- _D("full_path:%s",full_path);
- elm_layout_file_set(box_layout, full_path, SCROLLER_LAYOUT_GROUP_NAME);
- evas_object_show(box_layout);
- elm_object_content_set(scroller, box_layout);
- _D("scroller content is set as box layout");
- /* Create Box */
- box = elm_box_add(box_layout);
- goto_if(!box, ERROR);
- _D("box is added to boxlayout");
- elm_box_horizontal_set(box, EINA_TRUE);
- evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_show(box);
- elm_object_part_content_set(box_layout, SCROLLER_BOX_PART_NAME, box);
-
- Evas_Object *start_rect = evas_object_rectangle_add(evas_object_evas_get(box));
- evas_object_size_hint_min_set(start_rect, (scroller_info->edge_width), (scroller_info->edge_height));
- evas_object_data_set(start_rect, PRIVATE_DATA_KEY_EDGE_RECT, (void*)1);
- elm_box_pack_end(box, start_rect);
-
- Evas_Object *end_rect = evas_object_rectangle_add(evas_object_evas_get(box));
- evas_object_size_hint_min_set(end_rect, (scroller_info->edge_width), (scroller_info->edge_height));
- evas_object_data_set(end_rect, PRIVATE_DATA_KEY_EDGE_RECT, (void*)1);
- elm_box_pack_end(box, end_rect);
-
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT, start_rect);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT, end_rect);
-
- scroller_info->parent = parent;
- scroller_info->box_layout = box_layout;
- scroller_info->box = box;
-
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO, scroller_info);
- _init_rotary(scroller);
- _D("scroller created success");
- return scroller;
-
-ERROR:
- home_custom_scroller_del(scroller);
- return NULL;
-}
-
-
-void home_custom_scroller_del(Evas_Object *scroller)
-{
- _ENTER;
- Evas_Object *page = NULL;
- Eina_List *box_list = NULL;
- scroller_info_s *scroller_info = NULL;
-
- ret_if(!scroller);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- home_custom_scroller_deregister_cb(scroller);
- _destroy_rotary(scroller);
-
- box_list = elm_box_children_get(scroller_info->box);
-
- /* FIXME : We don't need to remove items? */
- EINA_LIST_FREE(box_list, page) {
- if (!page) break;
- evas_object_del(page);
- }
-
- evas_object_del(scroller_info->box);
- evas_object_del(scroller_info->box_layout);
-
- evas_object_event_callback_del(scroller, EVAS_CALLBACK_MOUSE_DOWN, _scroller_mouse_down_cb);
- evas_object_event_callback_del(scroller, EVAS_CALLBACK_MOUSE_UP, _scroller_mouse_up_cb);
- evas_object_smart_callback_del(scroller, "scroll,anim,start", _default_anim_start_cb);
- evas_object_smart_callback_del(scroller, "scroll,anim,stop", _default_anim_stop_cb);
- evas_object_smart_callback_del(scroller, "scroll,drag,start", _default_drag_start_cb);
- evas_object_smart_callback_del(scroller, "scroll,drag,stop", _default_drag_stop_cb);
- evas_object_smart_callback_del(scroller, "scroll", _default_scroll_cb);
-
- free(scroller_info);
- evas_object_del(scroller);
-}
-
-
-void home_custom_scroller_pause(Evas_Object *scroller)
-{
- _ENTER;
- _D("");
-}
-
-
-void home_custom_scroller_resume(Evas_Object *scroller)
-{
- _ENTER;
- eext_rotary_object_event_activated_set(scroller, EINA_TRUE);
-
- Evas_Object *index = (Evas_Object*)evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
- if(index)
- home_custom_index_show(index, EINA_FALSE);
-}
-
-
-static void _page_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- _ENTER;
- Evas_Event_Mouse_Down *ei = event_info;
- ret_if(!ei);
-
- _D("Mouse is down [%d,%d]", ei->output.x, ei->output.y);
- evas_object_data_set(obj, PRIVATE_DATA_KEY_SCROLLER_PAGE_MOUSE_DOWN, (void *) 1);
-}
-
-
-static void _page_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
- _ENTER;
- Evas_Event_Mouse_Up *ei = event_info;
- ret_if(!ei);
-
- _D("Mouse is up [%d,%d]", ei->output.x, ei->output.y);
- evas_object_data_del(obj, PRIVATE_DATA_KEY_SCROLLER_PAGE_MOUSE_DOWN);
-}
-
-
-void home_custom_scroller_page_append(Evas_Object *scroller, Evas_Object *page)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
-
- ret_if(!scroller);
- ret_if(!page);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
- _D("before adding mouse events");
- evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb, NULL);
- evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb, NULL);
-
- Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
- if(end_rect) {
- elm_box_pack_before(scroller_info->box, page, end_rect);
- }
- else {
- elm_box_pack_end(scroller_info->box, page);
- }
-}
-
-
-void home_custom_scroller_page_prepend(Evas_Object *scroller, Evas_Object *page)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
-
- ret_if(!scroller);
- ret_if(!page);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb, NULL);
- evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb, NULL);
-
- Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
- if(start_rect) {
- elm_box_pack_after(scroller_info->box, page, start_rect);
- }
- else {
- elm_box_pack_start(scroller_info->box, page);
- }
-}
-
-
-void home_custom_scroller_page_remove(Evas_Object *scroller, Evas_Object *page)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
-
- ret_if(!scroller);
- ret_if(!page);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb);
- evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb);
-
- elm_box_unpack(scroller_info->box, page);
-
- int nTotalCount = home_custom_scroller_get_page_count(scroller);
- int nPageNo = home_custom_scroller_get_current_page_no(scroller);
-
- if(nPageNo >= nTotalCount) {
- home_custom_scroller_region_show(scroller, nTotalCount-1, 0);
- }
-}
-
-
-int home_custom_scroller_get_page_count(Evas_Object *scroller)
-{
- _ENTER;
- int count = 0;
- Eina_List *page_list = NULL;
- scroller_info_s *scroller_info = NULL;
-
- retv_if(!scroller, 0);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- retv_if(!scroller_info, 0);
-
- page_list = elm_box_children_get(scroller_info->box);
- retv_if(!page_list, 0);
-
- count = eina_list_count(page_list);
- count = count - 2;
-
- eina_list_free(page_list);
-
- return count;
-}
-
-
-void home_custom_scroller_list_append(Evas_Object *scroller, Eina_List *page_list)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
- Eina_List *l = NULL;
- Eina_List *n = NULL;
- Evas_Object *page = NULL;
-
- ret_if(!scroller);
- ret_if(!page_list);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- EINA_LIST_FOREACH_SAFE(page_list, l, n, page) {
-
- evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb, NULL);
- evas_object_event_callback_add(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb, NULL);
-
- Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
- if(end_rect) {
- elm_box_pack_before(scroller_info->box, page, end_rect);
- }
- else {
- elm_box_pack_end(scroller_info->box, page);
- }
- }
-}
-
-
-void home_custom_scroller_list_remove(Evas_Object *scroller, Eina_List *page_list)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
- Eina_List *l = NULL;
- Eina_List *n = NULL;
- Evas_Object *page = NULL;
-
- ret_if(!scroller);
- ret_if(!page_list);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- EINA_LIST_FOREACH_SAFE(page_list, l, n, page) {
-
- evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_DOWN, _page_mouse_down_cb);
- evas_object_event_callback_del(page, EVAS_CALLBACK_MOUSE_UP, _page_mouse_up_cb);
-
- elm_box_unpack(scroller_info->box, page);
- }
-}
-
-
-Eina_List *home_custom_scroller_get_page_list(Evas_Object *scroller)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
- Eina_List *page_list = NULL;
-
- retv_if(!scroller, NULL);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- retv_if(!scroller_info, NULL);
-
- page_list = elm_box_children_get(scroller_info->box);
- retv_if(!page_list, NULL);
-
- Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
- if(start_rect) {
- page_list = eina_list_remove(page_list, start_rect);
- }
-
- Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
- if(end_rect) {
- page_list = eina_list_remove(page_list, end_rect);
- }
-
- return eina_list_clone(page_list);
-}
-
-
-void home_custom_scroller_edit(Evas_Object *scroller)
-{
-#if 0
- scroller_info_s *scroller_info = NULL;
-
- _D("home_custom_scroller_edit");
-
- ret_if(!scroller);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- elm_object_signal_emit(scroller_info->box_layout, "show,zoom", "scroller");
-#endif
-}
-
-
-void home_custom_scroller_unedit(Evas_Object *scroller)
-{
-#if 0
- scroller_info_s *scroller_info = NULL;
-
- _D("home_custom_scroller_unedit");
-
- ret_if(!scroller);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- elm_object_signal_emit(scroller_info->box_layout, "reset,zoom", "scroller");
-#endif
- Evas_Object *page = home_custom_scroller_get_current_page(scroller);
- ret_if(!page);
-
- Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
- if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-void home_custom_scroller_freeze(Evas_Object *scroller, Eina_Bool status)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
-
- ret_if(!scroller);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- if(status) {
- elm_object_scroll_freeze_push(scroller_info->box);
- }
- else {
- while (elm_object_scroll_freeze_get(scroller_info->box))
- elm_object_scroll_freeze_pop(scroller_info->box);
- }
-}
-
-
-Eina_Bool home_custom_scroller_is_freeze(Evas_Object *scroller)
-{
- _ENTER;
- scroller_info_s *scroller_info = NULL;
-
- retv_if(!scroller, EINA_FALSE);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- retv_if(!scroller_info, EINA_FALSE);
-
- return elm_object_scroll_freeze_get(scroller_info->box);
-}
-
-
-void home_custom_scroller_page_freeze(Evas_Object *scroller, Evas_Object *page, Eina_Bool status)
-{
- _ENTER;
-}
-
-
-Eina_Bool home_custom_scroller_is_page_freeze(Evas_Object *scroller, Evas_Object *page)
-{
- _ENTER;
- return EINA_FALSE;
-}
-
-
-static Eina_Bool _bring_in_timer_cb(void *data)
-{
- _ENTER;
- int i = 0;
- Evas_Object *scroller = data;
-
- i = (int) evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH);
- _D("bring in to index:[%d]", i);
-
- Eina_Bool bStatus = home_custom_scroller_is_freeze(scroller);
- if(bStatus) {
- home_custom_scroller_freeze(scroller, EINA_FALSE);
- }
-
- elm_scroller_page_bring_in(scroller, i, 0);
-
- home_custom_scroller_freeze(scroller, bStatus);
-
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER);
-
- Evas_Object *page = home_custom_scroller_get_current_page(scroller);
- retv_if(!page, ECORE_CALLBACK_CANCEL);
-
- Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
- if(index) home_custom_index_bring_in_page(index, page);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-
-void home_custom_scroller_bring_in(Evas_Object *scroller, int page_no)
-{
- _ENTER;
- Ecore_Timer *timer = NULL;
-
- ret_if(!scroller);
-
- /* 1. Remove the old timer */
- timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER);
- if (timer) ecore_timer_del(timer);
-
- /* 2. Append the new timer */
- timer = ecore_timer_add(0.01f, _bring_in_timer_cb, scroller);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH, (void *)page_no);
-}
-
-
-void home_custom_scroller_bring_in_page(Evas_Object *scroller, Evas_Object *page)
-{
- _ENTER;
- Evas_Object *tmp = NULL;
- Eina_List *page_list = NULL;
- Ecore_Timer *timer = NULL;
- scroller_info_s *scroller_info = NULL;
- const Eina_List *l;
- const Eina_List *n;
- int i = -1;
-
- ret_if(!scroller);
- ret_if(!page);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- ret_if(!scroller_info);
-
- page_list = elm_box_children_get(scroller_info->box);
- ret_if(!page_list);
-
- EINA_LIST_FOREACH_SAFE(page_list, l, n, tmp) {
- i++;
- break_if(!tmp);
- if (tmp != page) continue;
-
- /* 1. Remove the old timer */
- timer = evas_object_data_del(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER);
- if (timer) ecore_timer_del(timer);
-
- /* 2. Append the new timer */
- timer = ecore_timer_add(0.01f, _bring_in_timer_cb, scroller);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_TIMER, timer);
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_SCROLLER_BRING_IN_ITH, (void *) i);
-
- break;
- }
- eina_list_free(page_list);
-}
-
-
-void home_custom_scroller_bring_in_direction(Evas_Object *scroller, Home_Custom_Sc_Direction direction)
-{
- _ENTER;
- int hPageNo = 0;
- int vPageNo = 0;
- int nPageCount = 0;
-
- elm_scroller_current_page_get(scroller, &hPageNo, &vPageNo);
-
- nPageCount = home_custom_scroller_get_page_count(scroller);
-
- switch(direction)
- {
- case HOME_CUSTOM_SC_DIRECTION_LEFT:
- if(hPageNo > 0) {
- home_custom_scroller_bring_in(scroller, hPageNo - 1);
- }
- else {
- _W("pageNo:[%d,%d]", hPageNo, vPageNo);
- }
- break;
- case HOME_CUSTOM_SC_DIRECTION_RIGHT:
- if(hPageNo < nPageCount) {
- home_custom_scroller_bring_in(scroller, hPageNo + 1);
- }
- else {
- _W("Total Page Count:[%d], pageNo:[%d,%d]", nPageCount, hPageNo, vPageNo);
- }
- break;
- default:
- _E("Wrong direction: [%d]", direction);
- break;
- }
-}
-
-
-Eina_Bool home_custom_scroller_is_scrolling(Evas_Object *scroller)
-{
- _ENTER;
- retv_if(!scroller, EINA_FALSE);
-
- return evas_object_data_get(scroller, PRIVATE_DATA_KEY_IS_SCROLLING) ? EINA_TRUE:EINA_FALSE;
-}
-
-
-void home_custom_scroller_region_show(Evas_Object *scroller, int hPageNo, int vPageNo)
-{
- _ENTER;
- elm_scroller_page_show(scroller, hPageNo, vPageNo);
-
- evas_object_data_del(scroller, PRIVATE_DATA_KEY_IS_SCROLLING);
-
- Evas_Object *page = home_custom_scroller_get_current_page(scroller);
- ret_if(!page);
-
- Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
- if(index) home_custom_index_bring_in_page(index, page);
-}
-
-
-Evas_Object *home_custom_scroller_get_first_page(Evas_Object *scroller)
-{
- _ENTER;
- Eina_List *page_list = NULL;
- scroller_info_s *scroller_info = NULL;
- Evas_Object *page = NULL;
-
- retv_if(!scroller, NULL);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- retv_if(!scroller_info, NULL);
-
- page_list = elm_box_children_get(scroller_info->box);
- retv_if(!page_list, NULL);
-
- Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
- if(start_rect) {
- page_list = eina_list_remove(page_list, start_rect);
- }
-
- Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
- if(end_rect) {
- page_list = eina_list_remove(page_list, end_rect);
- }
-
- page = eina_list_nth(page_list, 0);
-
- eina_list_free(page_list);
-
- return page;
-}
-
-
-Evas_Object *home_custom_scroller_get_last_page(Evas_Object *scroller)
-{
- _ENTER;
- int count = 0;
- Eina_List *page_list = NULL;
- scroller_info_s *scroller_info = NULL;
- Evas_Object *page = NULL;
-
- retv_if(!scroller, NULL);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- retv_if(!scroller_info, NULL);
-
- page_list = elm_box_children_get(scroller_info->box);
- retv_if(!page_list, NULL);
-
- Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
- if(start_rect) {
- page_list = eina_list_remove(page_list, start_rect);
- }
-
- Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
- if(end_rect) {
- page_list = eina_list_remove(page_list, end_rect);
- }
-
- count = eina_list_count(page_list);
-
- page = eina_list_nth(page_list, count-1);
-
- eina_list_free(page_list);
-
- return page;
-}
-
-
-Evas_Object *home_custom_scroller_get_current_page(Evas_Object *scroller)
-{
- _ENTER;
- int hPageNo = 0;
- int vPageNo = 0;
-
- elm_scroller_current_page_get(scroller, &hPageNo, &vPageNo);
- _D("hpageno:%d, vpageno:%d",hPageNo,vPageNo);
-
- return home_custom_scroller_get_page(scroller, hPageNo);
-}
-
-
-int home_custom_scroller_get_current_page_no(Evas_Object *scroller)
-{
- _ENTER;
- int hPageNo = 0;
- int vPageNo = 0;
-
- elm_scroller_current_page_get(scroller, &hPageNo, &vPageNo);
-
- return hPageNo;
-}
-
-
-
-Evas_Object *home_custom_scroller_get_page(Evas_Object *scroller, int index)
-{
- _ENTER;
- Eina_List *page_list = NULL;
- scroller_info_s *scroller_info = NULL;
- Evas_Object *page = NULL;
-
- retv_if(!scroller, NULL);
-
- scroller_info = evas_object_data_get(scroller, PRIVATE_DATA_KEY_SCROLLER_INFO);
- retv_if(!scroller_info, NULL);
-
- page_list = elm_box_children_get(scroller_info->box);
- retv_if(!page_list, NULL);
-
- Evas_Object *start_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_START_EDGE_RECT);
- if(start_rect) {
- page_list = eina_list_remove(page_list, start_rect);
- }
-
- Evas_Object *end_rect = evas_object_data_get(scroller, PRIVATE_DATA_KEY_END_EDGE_RECT);
- if(end_rect) {
- page_list = eina_list_remove(page_list, end_rect);
- }
-
- page = eina_list_nth(page_list, index);
-
- eina_list_free(page_list);
-
- return page;
-}
-
-
-Eina_Bool home_custom_scroller_is_edge(Evas_Object *page)
-{
- _ENTER;
- retv_if(!page, EINA_FALSE);
-
- return evas_object_data_get(page, PRIVATE_DATA_KEY_EDGE_RECT) ? EINA_TRUE:EINA_FALSE;
-}
-
-/* scroller index */
-Evas_Object *home_custom_scroller_index_add(Evas_Object *parent, Evas_Object *scroller)
-{
- _ENTER;
- retv_if(!parent, NULL);
- retv_if(!scroller, NULL);
-
- Evas_Object *index = home_custom_index_create(parent, scroller);
- retv_if(!index, NULL);
-
- evas_object_data_set(scroller, PRIVATE_DATA_KEY_INDEX, index);
-
- home_custom_index_update(index, scroller, INDEX_BRING_IN_AFTER);
-
- return index;
-}
-
-void home_custom_scroller_index_update(Evas_Object *scroller)
-{
- _ENTER;
- ret_if(!scroller);
-
- Evas_Object *index = evas_object_data_get(scroller, PRIVATE_DATA_KEY_INDEX);
- if(index) home_custom_index_update(index, scroller, INDEX_BRING_IN_AFTER);
-}
-
-// End of this file
-