pkg_check_modules(MENU_PKGS REQUIRED
ail
aul
+ badge
bundle
capi-appfw-application
dlog
ADD_EXECUTABLE(${PROJECT_NAME}
src/index.c
src/item.c
+ src/item_badge.c
src/item_event.c
src/layout.c
src/list.c
INSTALL(FILES ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml DESTINATION ${MANIFESTDIR})
ADD_SUBDIRECTORY(edje)
+ADD_SUBDIRECTORY(images)
# End of a file
+ADD_CUSTOM_TARGET(button_edit.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/../images ${EDJE_CFLAGS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/button_edit.edc button_edit.edj
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/button_edit.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} button_edit.edj)
+INSTALL(FILES button_edit.edj DESTINATION ${EDJEDIR})
+
+
+
# End of a file
rel1 { relative: 0.2 0.0; to, "index_bg";}
rel2 { relative: 0.8 1.0; to, "index_bg";}
visible: 1;
- }
+ }
}
-
+ part {
+ name: "button_edit";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 16/720 8/70; to, "index_bg";}
+ rel2 { relative: 144/720 62/70; to, "index_bg";}
+ visible: 1;
+ }
+ }
part {
- name: "content_bg";
- type: RECT;
- scale: 1;
- mouse_events: 1;
- description {
+ name: "content_bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description {
state: "default" 0.0;
rel1 { relative: 0.0 84/1210; to, "bg"; } // 154 - 70
rel2 { relative: 1.0 1144/1210; to, "bg"; }
color: 34 34 34 255;
visible: 0;
- }
- }
+ }
+ }
part {
name: "content";
--- /dev/null
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.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.
+ */
+
+
+
+images {
+ image: "../images/RM06_App_tray_setting.png" COMP;
+ image: "../images/RM06_App_tray_setting_press.png" COMP;
+ image: "../images/RM06_App_tray_edit_btn.png" COMP;
+ image: "../images/RM06_App_tray_edit_btn_press.png" COMP;
+}
+
+
+
+collections {
+ group {
+ name: "button_edit";
+ parts {
+ part {
+ name: "edit_button";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 25/128 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ visible: 0;
+ }
+ description {
+ state: "enable" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ visible: 0;
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "edit_button_bg";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.5 0.5; to, "edit_button"; }
+ rel2 { relative: 0.5 0.5; to, "edit_button"; }
+ min: 119 54;
+ max: 119 54;
+ fixed: 1 1;
+ image {
+ normal: "../images/RM06_App_tray_edit_btn.png";
+ border: 3 3 3 3;
+ middle: DEFAULT;
+ border_scale: 0;
+ }
+ color: 0 0 0 0;
+ visible: 1;
+ }
+ description {
+ state: "enable" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description {
+ state: "press" 0.0;
+ rel1 { relative: 0.5 0.5; to, "edit_button"; }
+ rel2 { relative: 0.5 0.5; to, "edit_button"; }
+ min: 119 54;
+ max: 119 54;
+ fixed: 1 1;
+ image {
+ normal: "../images/RM06_App_tray_edit_btn_press.png";
+ border: 3 3 3 3;
+ middle: DEFAULT;
+ border_scale: 0;
+ }
+ color: 255 255 255 255;
+ visible: 1;
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "edit_button_image";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 30/119 0.5; to, "edit_button_bg";}
+ rel2 { relative: 30/119 0.5; to, "edit_button_bg";}
+ image {
+ normal: "../images/RM06_App_tray_setting.png";
+ }
+ min:42 42;
+ fixed: 1 1;
+ visible: 1;
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: "../images/RM06_App_tray_setting_press.png";
+ }
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "edit_button_text";
+ type: TEXT;
+ effect: SOFT_SHADOW;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 50/119 0.15; to, "edit_button_bg";} // origin : 59/119 0.0
+ rel2 { relative: 1.0 1.0; to, "edit_button_bg";}
+ color: 183 183 183 255;
+ color2: 0 0 0 35;
+ color3: 0 0 0 35;
+ text {
+ text_class: "menu_item";
+ font: "TIZEN:style=medium";
+ size: 6;
+ fit: 1 1;
+ align: 0.5 0.5;
+ }
+ visible: 1;
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ color: 249 249 249 255;
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: "edit_button_event";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ color: 0 0 0 0;
+ rel1 { relative: 0.0 0.0; to, "edit_button";}
+ rel2 { relative: 1.0 1.0; to, "edit_button";}
+ visible: 1;
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "edit_button,down";
+ signal: "mouse,down,*";
+ source: "edit_button_event";
+ action: STATE_SET "press" 0.0;
+ target: "edit_button_image";
+ target: "edit_button_text";
+ after: "edit_button,down,after";
+ }
+ program {
+ name: "edit_button,down,after";
+ action: SIGNAL_EMIT "edit_button,down" "menu";
+ }
+
+ program {
+ name: "edit_button,up";
+ signal: "mouse,up,*";
+ source: "edit_button_event";
+ action: STATE_SET "default" 0.0;
+ target: "edit_button_image";
+ target: "edit_button_text";
+ after: "edit_button,up,after";
+ }
+ program {
+ name: "edit_button,up,after";
+ action: SIGNAL_EMIT "edit_button,up" "menu";
+ }
+
+ program {
+ name: "edit_button,enable";
+ signal: "edit_button,enable";
+ source: "menu";
+ action: STATE_SET "enable" 0.0;
+ target: "edit_button";
+ target: "edit_button_bg";
+ transition: DECELERATE 0.4;
+ }
+ program {
+ name: "edit_button,disable";
+ signal: "edit_button,disable";
+ source: "menu";
+ action: STATE_SET "default" 0.0;
+ target: "edit_button";
+ target: "edit_button_bg";
+ transition: DECELERATE 0.4;
+ }
+
+ program {
+ name: "edit_button,enable,press";
+ signal: "edit_button,enable,press";
+ source: "menu";
+ action: STATE_SET "press" 0.0;
+ target: "edit_button_bg";
+ }
+ program {
+ name: "edit_button,enable,release";
+ signal: "edit_button,enable,release";
+ source: "menu";
+ action: STATE_SET "enable" 0.0;
+ target: "edit_button_bg";
+ }
+ program {
+ name: "edit_button_image,hide";
+ signal: "edit_button_image,hide";
+ source: "menu";
+ action: STATE_SET "hide" 0.0;
+ target: "edit_button";
+ target: "edit_button_bg";
+ target: "edit_button_image";
+ target: "edit_button_text";
+ target: "edit_button_event";
+ }
+ program {
+ name: "edit_button_image,show";
+ signal: "edit_button_image,show";
+ source: "menu";
+ action: STATE_SET "default" 0.0;
+ target: "edit_button";
+ target: "edit_button_bg";
+ target: "edit_button_image";
+ target: "edit_button_text";
+ target: "edit_button_event";
+ }
+ }
+ }
+}
+
+
+// End of file
}
}
-
+images {
+ image: "../images/RM06_App tray_Btn_Uninstall.png" COMP;
+ image: "../images/RM06_App tray_Btn_Uninstall_press.png" COMP;
+ image: "../images/menu_badge_01.png" COMP;
+}
collections {
group {
visible: 1;
}
}
+ part {
+ name: "badge";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 120/180 10/180; to, "bg"; }
+ rel2 { relative: 180/180 70/180; to, "bg"; }
+ image {
+ normal: "../images/menu_badge_01.png";
+ }
+ }
+ description {
+ state: "badge" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part {
+ name: "badge,txt";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 0.1 0.1; to, "badge"; }
+ rel2 { relative: 0.9 0.9; to, "badge"; }
+ align: 0.5 0.5;
+ color: 255 255 255 255;
+ color2: 0 0 0 35;
+ color3: 0 0 0 35;
+ text {
+ text_class: "menu_item";
+ font: "TIZEN:style=medium";
+ size: 12;
+ text: "1";
+ align: 0.5 0.5;
+ fit: 1 1;
+ }
+ }
+ description {
+ state: "badge" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
part {
name: "block_event";
type: RECT;
visible: 0;
}
}
+ part {
+ name: "uninstall";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 10/180 10/180; to, "bg"; }
+ rel2 { relative: 70/180 70/180; to, "bg"; }
+ image {
+ normal: "../images/RM06_App tray_Btn_Uninstall.png";
+ }
+ visible: 0;
+ }
+ description {
+ state: "edit,release" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "edit,press" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: "../images/RM06_App tray_Btn_Uninstall_press.png";
+ }
+ visible: 1;
+ }
+ }
+ part {
+ name: "uninstall_event";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0/180 10/180; to, "bg"; }
+ rel2 { relative: 60/180 70/180; to, "bg"; }
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description {
+ state: "edit,release" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
part {
name: "txt";
type: TEXT;
action: SIGNAL_EMIT "item,up" "menu";
}
+ // Badge
+ program {
+ name: "badge,on";
+ signal: "badge,on";
+ source: "menu";
+ action: STATE_SET "badge" 0.0;
+ target: "badge";
+ target: "badge,txt";
+ }
+ program {
+ name: "badge,off";
+ signal: "badge,off";
+ source: "menu";
+ action: STATE_SET "default" 0.0;
+ target: "badge";
+ target: "badge,txt";
+ }
+
+ program {
+ name: "uninstall,on";
+ signal: "uninstall,on";
+ source: "menu";
+ action: STATE_SET "edit,release" 0.0;
+ target: "block_event";
+ target: "uninstall";
+ target: "uninstall_event";
+ }
+ program {
+ name: "uninstall,off";
+ signal: "uninstall,off";
+ source: "menu";
+ action: STATE_SET "default" 0.0;
+ target: "block_event";
+ target: "uninstall";
+ target: "uninstall_event";
+ }
+ program {
+ name: "uninstall,down";
+ signal: "mouse,down,*";
+ source: "uninstall_event";
+ action: SIGNAL_EMIT "uninstall,down" "menu";
+ after: "uninstall,down,after";
+ }
+ program {
+ name: "uninstall,down,after";
+ action: STATE_SET "edit,press" 0.0;
+ target: "uninstall";
+ }
+ program {
+ name: "uninstall,up";
+ signal: "mouse,up,*";
+ source: "uninstall_event";
+ action: SIGNAL_EMIT "uninstall,up" "menu";
+ after: "uninstall,up,after";
+ }
+ program {
+ name: "uninstall,up,after";
+ action: STATE_SET "edit,release" 0.0;
+ target: "uninstall";
+ }
}
} // group
} // collections
+++ /dev/null
- /*
- * Copyright 2012 Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.tizenopensource.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.
- */
-
-
-
-collections {
- group {
- name: "elm/pagecontrol/base/default";
-
- parts {
- part {
- name: "bg";
- type: RECT;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- color: 0 0 0 0;
- }
- }
- part {
- name: "elm.swallow.page";
- type: SWALLOW;
- mouse_events: 1;
- scale: 1;
- description {
- state: "default" 0.0;
- min: 332 32;
- }
- }
- }
- }
-
- #define PAGE_ITEM(number) \
- group { \
- name: "elm/page/item/default_"number; \
- images { \
- image: "../images/RM06_App tray_page indicator.png" COMP; \
- image: "../images/RM06_App tray_page indicator_focus.png" COMP; \
- } \
- parts { \
- part { \
- name: "bg"; \
- type: RECT; \
- mouse_events: 0; \
- scale: 1; \
- description { \
- state: "default" 0.0; \
- min: 44 40; \
- max: 44 40; \
- align: 0.5 0.5; \
- color: 0 0 0 0; \
- } \
- } \
- part { \
- name: "indicator_1"; \
- mouse_events: 0; \
- scale: 1; \
- description { \
- state: "default" 0.0; \
- min: 8 8; \
- max: 8 8; \
- fixed: 1 1; \
- align: 0.5 0.5; \
- visible: 1; \
- rel1 { to: "bg"; } \
- rel2 { to: "bg"; } \
- image { \
- normal: "../images/RM06_App tray_page indicator.png"; \
- } \
- } \
- description { \
- state: "selected" 0.0; \
- inherit: "default" 0.0; \
- min: 8 8; \
- max: 8 8; \
- visible: 0; \
- } \
- } \
- part { \
- name: "indicator_2"; \
- mouse_events: 0; \
- scale: 1; \
- description { \
- state: "default" 0.0; \
- min: 8 8; \
- max: 8 8; \
- fixed: 1 1; \
- align: 0.5 0.5; \
- visible: 0; \
- rel1 { to: "bg"; } \
- rel2 { to: "bg"; } \
- image { \
- normal: "../images/RM06_App tray_page indicator_focus.png"; \
- } \
- } \
- description { \
- state: "selected" 0.0; \
- inherit: "default" 0.0; \
- min: 8 8; \
- max: 8 8; \
- visible: 1; \
- } \
- } \
- } \
- programs { \
- program { \
- name: "indicator_on"; \
- signal: "elm,state,indicator,on"; \
- source: "elm"; \
- action: STATE_SET "selected" 0.0; \
- target: "indicator_1"; \
- target: "indicator_2"; \
- } \
- program { \
- name: "indicator_off"; \
- signal: "elm,state,indicator,off"; \
- source: "elm"; \
- action: STATE_SET "default" 0.0; \
- target: "indicator_1"; \
- target: "indicator_2"; \
- } \
- program { \
- name: "indicator_clicked"; \
- signal: "mouse,clicked,1"; \
- source: "bg"; \
- action: SIGNAL_EMIT "clicked" "indicator_clicked"; \
- } \
- } \
- } \
-
- PAGE_ITEM(1)
- PAGE_ITEM(2)
- PAGE_ITEM(3)
- PAGE_ITEM(4)
- PAGE_ITEM(5)
- PAGE_ITEM(6)
- PAGE_ITEM(7)
- PAGE_ITEM(8)
- PAGE_ITEM(9)
- PAGE_ITEM(10)
-}
--- /dev/null
+INSTALL(FILES default.png DESTINATION ${IMAGEDIR})
Section: utils
Priority: extra
Maintainer: Jin Yoon <jinny.yoon@samsung.com>
-Build-Depends: debhelper (>= 5), libelm-dev, libslp-utilx-dev, libslp-setting-dev, libefreet-dev, libslp-sysman-dev, libslp-pm-dev, dlog-dev, libecore-dev, libaul-1-dev, libpkgmgr-client-dev, syspopup-caller-dev, libheynoti-dev, libail-0-dev, librua-dev, libslp-shortcut-dev, menu-daemon, capi-appfw-application-dev
+Build-Depends: debhelper (>= 5), libelm-dev, libslp-utilx-dev, libslp-setting-dev, libefreet-dev, libslp-sysman-dev, libslp-pm-dev, dlog-dev, libecore-dev, libaul-1-dev, libpkgmgr-client-dev, syspopup-caller-dev, libheynoti-dev, libail-0-dev, librua-dev, libslp-shortcut-dev, menu-daemon, capi-appfw-application-dev, libbadge-dev
Homepage: N/A
Standards-Version: 0.1.0
Package: org.tizen.menu-screen
Section: utils
Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, libelm, libeina, libslp-utilx-0, libslp-setting-0, libefreet, libslp-sysman, libslp-pm-0, libdlog-0, libaul-1, libpkgmgr-client-0, syspopup-caller-0, libheynoti-0, libail-0, menu-daemon, capi-appfw-application
+Depends: ${shlibs:Depends}, ${misc:Depends}, libelm, libeina, libslp-utilx-0, libslp-setting-0, libefreet, libslp-sysman, libslp-pm-0, libdlog-0, libaul-1, libpkgmgr-client-0, syspopup-caller-0, libheynoti-0, libail-0, menu-daemon, capi-appfw-application, libbadge
Description: inhouse menu-screen
Package: org.tizen.menu-screen-dbg
extern void item_enable_delete(Evas_Object *obj);
extern void item_disable_delete(Evas_Object *item);
+extern void item_show_badge(Evas_Object *obj, int value);
+extern void item_hide_badge(Evas_Object *obj);
+extern int item_is_enabled_badge(Evas_Object *obj);
+
+extern void item_edit(Evas_Object *item);
+extern void item_unedit(Evas_Object *item);
+
extern Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai);
extern void item_update(Evas_Object *item, app_info_t *ai);
extern void item_destroy(Evas_Object *obj);
--- /dev/null
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.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 __MENU_SCREEN_BADGE_H__
+#define __MENU_SCREEN_BADGE_H__
+
+#include <stdbool.h>
+
+#include "util.h"
+
+extern menu_screen_error_e item_badge_register(Evas_Object *item);
+extern void item_badge_unregister(Evas_Object *item);
+extern bool item_badge_is_registered(Evas_Object *item);
+extern int item_badge_count(char *package);
+
+extern void item_badge_register_changed_cb(Evas_Object *scroller);
+extern void item_badge_unregister_changed_cb(void);
+
+#endif
+// End of a file
extern void page_scroller_bring_in(Evas_Object *scroller, int idx);
extern void page_scroller_show_region(Evas_Object *scroller, int idx);
+extern void page_scroller_edit(Evas_Object *scroller);
+extern void page_scroller_unedit(Evas_Object *scroller);
+extern bool page_scroller_is_edited(Evas_Object *scroller);
+
#endif //__MENU_SCREEN_PAGE_SCROLLER_H__
// End of a file
extern Evas_Object *popup_create(Evas_Object *parent, const char *warning);
extern void popup_destroy(Evas_Object *popup);
+extern Evas_Object *popup_create_uninstall(Evas_Object *parent, Evas_Object *item);
#endif //__MENU_SCREEN_POPUP_H__
/* Log */
#if !defined(_W)
-#define _W(fmt, arg...) LOGW("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#define _W(fmt, arg...) LOGW(fmt"\n", ##arg)
#endif
#if !defined(_D)
-#define _D(fmt, arg...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#define _D(fmt, arg...) LOGD(fmt"\n", ##arg)
#endif
#if !defined(_E)
-#define _E(fmt, arg...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##arg)
+#define _E(fmt, arg...) LOGE(fmt"\n", ##arg)
#endif
#if !defined(_T)
#define N_(str) gettext_noop(str)
#define D_(str) dgettext("sys_string", str)
+/* Build */
+#define HAPI __attribute__((visibility("hidden")))
+
+/* Packaging */
+#define DEFAULT_ICON IMAGEDIR"/default.png"
+
#ifdef APPFWK_MEASUREMENT
#define PRINT_APPFWK() do { \
struct timeval tv; \
Group: TO_BE/FILLED_IN
License: Flora Software License
Source0: %{name}-%{version}.tar.gz
-BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(ail)
BuildRequires: pkgconfig(appcore-efl)
-BuildRequires: pkgconfig(utilX)
BuildRequires: pkgconfig(aul)
-BuildRequires: pkgconfig(dlog)
-BuildRequires: pkgconfig(sysman)
+BuildRequires: pkgconfig(badge)
BuildRequires: pkgconfig(bundle)
-BuildRequires: pkgconfig(pkgmgr)
-BuildRequires: pkgconfig(syspopup-caller)
-BuildRequires: pkgconfig(heynoti)
-BuildRequires: pkgconfig(evas)
-BuildRequires: pkgconfig(ecore-evas)
-BuildRequires: pkgconfig(edje)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(dlog)
BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(ecore-evas)
BuildRequires: pkgconfig(ecore-file)
BuildRequires: pkgconfig(ecore-imf)
BuildRequires: pkgconfig(ecore-input)
+BuildRequires: pkgconfig(edje)
BuildRequires: pkgconfig(eet)
BuildRequires: pkgconfig(eina)
-BuildRequires: pkgconfig(ail)
-BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(heynoti)
+BuildRequires: pkgconfig(pkgmgr)
+BuildRequires: pkgconfig(sysman)
+BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(utilX)
BuildRequires: cmake
BuildRequires: edje-tools
BuildRequires: gettext-tools
%defattr(-,root,root,-)
%{_bindir}/menu-screen
%{_resdir}/edje/all_apps_portrait.edj
+%{_resdir}/edje/button_edit.edj
%{_resdir}/edje/group_4x4_portrait.edj
%{_resdir}/edje/item_4x4.edj
%{_resdir}/edje/layout_portrait.edj
%{_resdir}/edje/index.edj
+%{_resdir}/images/default.png
%{_usr_datadir}/packages/org.tizen.menu-screen.xml
%{_usr_datadir}/license/%{name}
#define GROUP_4X4_EDJE_PORTRAIT EDJEDIR"/group_4x4_portrait.edj";
+#define ALL_APPS_EDIT_BUTTON_EDJE EDJEDIR"/button_edit.edj"
+#define ALL_APPS_EDIT_BUTTON_GROUP "button_edit"
+#define ALL_APPS_EDIT_BUTTON_PART "button_edit"
+
+#define STR_DONE _("Done")
+
+
+HAPI void all_apps_layout_edit(Evas_Object *all_apps)
+{
+ Evas_Object *edit_button;
+ Evas_Object *scroller;
+
+ edit_button = elm_object_part_content_get(all_apps, ALL_APPS_EDIT_BUTTON_PART);
+ ret_if(NULL == edit_button);
+ edje_object_signal_emit(_EDJ(edit_button), "edit_button,enable", "menu");
+ if (edje_object_part_text_set(_EDJ(edit_button), "edit_button_text", STR_DONE) == EINA_FALSE) {
+ _E("Failed to set text on the part, edje:%p, part:%s, text:%s", _EDJ(edit_button), "edit_button_text", STR_DONE);
+ }
+
+ scroller = elm_object_part_content_get(all_apps, "content");
+ ret_if(NULL == scroller);
+ page_scroller_edit(scroller);
+}
+
+
+
+HAPI void all_apps_layout_unedit(Evas_Object *all_apps)
+{
+ Evas_Object *edit_button;
+
+ ret_if(NULL == all_apps);
+
+ do {
+ edit_button = elm_object_part_content_get(all_apps, ALL_APPS_EDIT_BUTTON_PART);
+ ret_if(NULL == edit_button);
+
+ edje_object_signal_emit(_EDJ(edit_button), "edit_button,disable", "menu");
+ if (edje_object_part_text_set(_EDJ(edit_button), "edit_button_text", "") == EINA_FALSE) {
+ _E("Failed to set text on the part, edje:%p, part:%s, text:(null)", _EDJ(edit_button), "edit_button_text");
+ }
+ } while (0);
+
+ do {
+ Evas_Object *scroller;
+
+ scroller = elm_object_part_content_get(all_apps, "content");
+ ret_if(NULL == scroller);
+
+ page_scroller_unedit(scroller);
+ } while (0);
+}
+
+
+
+static void _press_edit_button(Evas_Object *edje)
+{
+ edje_object_signal_emit(edje, "edit_button,enable,press", "menu");
+}
+
+
+
+static void _release_edit_button(Evas_Object *edje)
+{
+ edje_object_signal_emit(edje, "edit_button,enable,release", "menu");
+}
+
+
+
+static void _edit_button_down_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
+{
+ Evas_Object *scroller = data;
+
+ _D("Edit button is down");
+
+ if (page_scroller_is_edited(scroller)) {
+ _press_edit_button(obj);
+ }
+}
+
+
+
+static void _edit_button_up_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
+{
+ Evas_Object *scroller = data;
+ Evas_Object *all_apps;
+
+ _D("Edit button is up");
+
+ all_apps = evas_object_data_get(scroller, "tab");
+ if (page_scroller_is_edited(scroller)) {
+ Evas_Object *eo;
+ bool pressed = false;
+
+ eo = evas_object_data_get(obj, "evas_object");
+ pressed = (bool) evas_object_data_get(eo, "pressed");
+ if (pressed) {
+ all_apps_layout_unedit(all_apps);
+ } else {
+ _release_edit_button(obj);
+ }
+ } else {
+ all_apps_layout_edit(all_apps);
+ }
+}
+
+
+
+static void _button_out_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ _D("Edit button is out");
+ evas_object_data_set(obj, "pressed", (void *) false);
+}
+
+
+
+static void _button_in_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ _D("Edit button is in");
+ evas_object_data_set(obj, "pressed", (void *) true);
+}
+
+
+
+static Evas_Object *_add_edit_button(Evas_Object *parent, Evas_Object *scroller)
+{
+ Evas_Object *button;
+
+ retv_if(NULL == parent, NULL);
+ retv_if(NULL == scroller, NULL);
+
+ button = layout_load_edj(parent, ALL_APPS_EDIT_BUTTON_EDJE, ALL_APPS_EDIT_BUTTON_GROUP);
+ retv_if(NULL == button, NULL);
+
+ edje_object_signal_callback_add(_EDJ(button), "edit_button,down", "menu", _edit_button_down_cb, scroller);
+ edje_object_signal_callback_add(_EDJ(button), "edit_button,up", "menu", _edit_button_up_cb, scroller);
+ evas_object_event_callback_add(button, EVAS_CALLBACK_MOUSE_OUT, _button_out_cb, NULL);
+ evas_object_event_callback_add(button, EVAS_CALLBACK_MOUSE_IN, _button_in_cb, NULL);
+ evas_object_data_set(button, "pressed", (void *) false);
+
+ return button;
+}
+
+
+
+static void _remove_edit_button(Evas_Object *button)
+{
+ ret_if(NULL == button);
+
+ edje_object_signal_callback_del(_EDJ(button), "edit_button,down", "menu", _edit_button_down_cb);
+ edje_object_signal_callback_del(_EDJ(button), "edit_button,up", "menu", _edit_button_up_cb);
+ evas_object_event_callback_del(button, EVAS_CALLBACK_MOUSE_OUT, _button_out_cb);
+ evas_object_event_callback_del(button, EVAS_CALLBACK_MOUSE_IN, _button_in_cb);
+ evas_object_data_del(button, "pressed");
+
+ layout_unload_edj(button);
+}
+
static menu_screen_error_e _load_item(Evas_Object *scroller, app_list_item *item)
page_scroller_bring_in(scroller, 0);
menu_screen_set_done(true);
+ do {
+ Evas_Object *button;
+ button = _add_edit_button(all_apps, scroller);
+ if (NULL == button) {
+ _D("cannot make the edit button");
+ }
+ elm_object_part_content_set(all_apps, ALL_APPS_EDIT_BUTTON_PART, button);
+ } while (0);
+
return ECORE_CALLBACK_CANCEL;
}
-Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate)
+HAPI Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate)
{
Evas_Object *all_apps;
Evas_Object *index;
-void all_apps_layout_destroy(Evas_Object *all_apps)
+HAPI void all_apps_layout_destroy(Evas_Object *all_apps)
{
Evas_Object *index;
Evas_Object *scroller;
+ ret_if(NULL == all_apps);
+
+ do {
+ Evas_Object *button;
+ if(all_apps) {
+ button = elm_object_part_content_unset(all_apps, ALL_APPS_EDIT_BUTTON_PART);
+ _remove_edit_button(button);
+ } else {
+ _D("cannot find the all_apps object");
+ }
+ } while (0);
+
index = evas_object_data_get(all_apps, "index");
scroller = evas_object_data_get(all_apps, "scroller");
-app_list *all_apps_list_create(void)
+HAPI app_list *all_apps_list_create(void)
{
int count = 0;
app_list *list;
-void all_apps_list_destroy(app_list *list)
+HAPI void all_apps_list_destroy(app_list *list)
{
app_list_item *item;
-inline void index_bring_in(Evas_Object *index, int idx)
+HAPI inline void index_bring_in(Evas_Object *index, int idx)
{
Elm_Object_Item *idx_it;
-void index_destroy(Evas_Object *index)
+HAPI void index_destroy(Evas_Object *index)
{
evas_object_data_del(index, "win");
evas_object_data_del(index, "layout");
-Evas_Object *index_create(Evas_Object *tab, unsigned int count)
+HAPI Evas_Object *index_create(Evas_Object *tab, unsigned int count)
{
Evas_Object *index;
Evas_Object *scroller;
-Evas_Object *index_update(Evas_Object *layout, Evas_Object *index, unsigned int count)
+HAPI Evas_Object *index_update(Evas_Object *layout, Evas_Object *index, unsigned int count)
{
index_destroy(index);
-void index_hide(Evas_Object *index)
+HAPI void index_hide(Evas_Object *index)
{
edje_object_signal_emit(_EDJ(index), "hide", "index");
}
-void index_show(Evas_Object *index)
+HAPI void index_show(Evas_Object *index)
{
edje_object_signal_emit(_EDJ(index), "show", "index");
}
#include <ail.h>
#include "menu_screen.h"
+#include "item_badge.h"
#include "conf.h"
#include "item.h"
#include "item_event.h"
#include "list.h"
#include "mapbuf.h"
#include "page.h"
+#include "page_scroller.h"
#include "popup.h"
#include "util.h"
-void item_set_icon(Evas_Object *edje, char *icon, int sync)
+HAPI void item_set_icon(Evas_Object *edje, char *icon, int sync)
{
char *tmp;
int changed;
-inline char *item_get_icon(Evas_Object *edje)
+HAPI inline char *item_get_icon(Evas_Object *edje)
{
return evas_object_data_get(edje, STR_ATTRIBUTE_ICON);
}
-void item_set_name(Evas_Object *edje, char *name, int sync)
+HAPI void item_set_name(Evas_Object *edje, char *name, int sync)
{
char *tmp;
int changed;
-inline char *item_get_name(Evas_Object *edje)
+HAPI inline char *item_get_name(Evas_Object *edje)
{
return evas_object_data_get(edje, STR_ATTRIBUTE_NAME);
}
-void item_set_desktop(Evas_Object *edje, char *name, int sync)
+HAPI void item_set_desktop(Evas_Object *edje, char *name, int sync)
{
char *tmp;
int changed;
-inline char *item_get_desktop(Evas_Object *edje)
+HAPI inline char *item_get_desktop(Evas_Object *edje)
{
return evas_object_data_get(edje, STR_ATTRIBUTE_DESKTOP);
}
-void item_set_package(Evas_Object *edje, char *package, int sync)
+HAPI void item_set_package(Evas_Object *edje, char *package, int sync)
{
char *tmp;
int changed;
-inline char *item_get_package(Evas_Object *edje)
+HAPI inline char *item_get_package(Evas_Object *edje)
{
return evas_object_data_get(edje, STR_ATTRIBUTE_PKG_NAME);
}
-void item_set_removable(Evas_Object *edje, int removable, int sync)
+HAPI void item_set_removable(Evas_Object *edje, int removable, int sync)
{
int value;
int changed;
-inline int item_get_removable(Evas_Object *edje)
+HAPI inline int item_get_removable(Evas_Object *edje)
{
return (int) evas_object_data_get(edje, STR_ATTRIBUTE_REMOVABLE);
}
-void item_set_page(Evas_Object *edje, Evas_Object *page, int sync)
+HAPI void item_set_page(Evas_Object *edje, Evas_Object *page, int sync)
{
Evas_Object *value;
int changed;
-inline Evas_Object *item_get_page(Evas_Object *edje)
+HAPI inline Evas_Object *item_get_page(Evas_Object *edje)
{
return evas_object_data_get(edje, STR_ATTRIBUTE_PAGE);
}
-inline void item_enable_delete(Evas_Object *item)
+HAPI inline void item_enable_delete(Evas_Object *item)
{
if (item_get_removable(item) > 0) {
edje_object_signal_emit(_EDJ(item), "delete,on", "menu");
-inline void item_disable_delete(Evas_Object *item)
+HAPI inline void item_disable_delete(Evas_Object *item)
{
if (item_get_removable(item) > 0) {
edje_object_signal_emit(_EDJ(item), "delete,off", "menu");
}
-void item_enable_progress(Evas_Object *obj)
+
+HAPI void item_show_badge(Evas_Object *obj, int value)
+{
+ char str[BUFSZE];
+ Evas_Object *scroller;
+
+ ret_if(NULL == obj);
+ ret_if(value <= 0);
+
+ sprintf(str, "%d", value);
+ if (edje_object_part_text_set(_EDJ(obj), "badge,txt", str) == EINA_FALSE) {
+ _E("Failed to set text on the part, edje:%p, part:%s, text:%s", _EDJ(obj), "badge,txt", str);
+ }
+
+ scroller = evas_object_data_get(obj, "scroller");
+ ret_if(NULL == scroller);
+ ret_if(page_scroller_is_edited(scroller));
+
+ edje_object_signal_emit(_EDJ(obj), "badge,on", "menu");
+ evas_object_data_set(obj, "badge,enabled", (void*)1);
+
+ _D("Badge is updated to %s", str);
+}
+
+
+
+HAPI void item_hide_badge(Evas_Object *obj)
+{
+ ret_if(NULL == obj);
+
+ edje_object_signal_emit(_EDJ(obj), "badge,off", "menu");
+ evas_object_data_del(obj, "badge,enabled");
+}
+
+
+
+HAPI int item_is_enabled_badge(Evas_Object *obj)
+{
+ return evas_object_data_get(obj, "badge,enabled") != NULL;
+}
+
+
+
+HAPI void item_enable_progress(Evas_Object *obj)
{
Evas_Object *progress;
-void item_update_progress(Evas_Object *obj, int value)
+HAPI void item_update_progress(Evas_Object *obj, int value)
{
Evas_Object *progress;
-void item_disable_progress(Evas_Object *obj)
+HAPI void item_disable_progress(Evas_Object *obj)
{
Evas_Object *progress;
-int item_is_enabled_progress(Evas_Object *obj)
+HAPI int item_is_enabled_progress(Evas_Object *obj)
{
return evas_object_data_get(obj, "progress,enabled") != NULL;
}
+HAPI void item_edit(Evas_Object *item)
+{
+ if (item_get_removable(item)) {
+ edje_object_signal_emit(_EDJ(item), "uninstall,on", "menu");
+ }
+ edje_object_signal_emit(_EDJ(item), "badge,off", "menu");
+ item_unmark_dirty(item);
+}
+
+
+
+HAPI void item_unedit(Evas_Object *item)
+{
+ char *package;
+
+ edje_object_signal_emit(_EDJ(item), "uninstall,off", "menu");
+
+ package = item_get_package(item);
+ if (item_badge_is_registered(item)
+ && item_badge_count(package) > 0)
+ {
+ edje_object_signal_emit(_EDJ(item), "badge,on", "menu");
+ }
+}
+
+
+
static Evas_Object *_add_icon_image(Evas_Object *item, const char *icon_file)
{
Evas_Object *icon;
-menu_screen_error_e item_is_edje_icon(const char *icon)
+HAPI menu_screen_error_e item_is_edje_icon(const char *icon)
{
int len;
const char *ext = "jde.";
-void item_update(Evas_Object *item, app_info_t *ai)
+HAPI void item_update(Evas_Object *item, app_info_t *ai)
{
- Evas_Object *icon;
+ Evas_Object *icon = NULL;
if (!ai->image) {
- if (item_is_edje_icon(ai->icon) == MENU_SCREEN_ERROR_OK) {
- icon = _add_edje_icon(item, ai->icon);
- evas_object_data_set(item, "icon_image_type", STR_ICON_IMAGE_TYPE_EDJE);
+ if (0 != access(ai->icon, R_OK)) {
+ _E("Failed to access to [%s]", ai->icon);
} else {
- icon = _add_icon_image(item, ai->icon);
- evas_object_data_set(item, "icon_image_type", STR_ICON_IMAGE_TYPE_OBJECT);
+ FILE *fp;
+
+ fp = fopen(ai->icon, "rb");
+ if (fp) {
+ fseek(fp, 0L, SEEK_END);
+ _D("Access to file [%s], size[%ld]", ai->icon, ftell(fp));
+ fclose(fp);
+ } else _E("Cannot get the file pointer[%s]", ai->icon);
+
+ if (item_is_edje_icon(ai->icon) == MENU_SCREEN_ERROR_OK) {
+ icon = _add_edje_icon(item, ai->icon);
+ evas_object_data_set(item, "icon_image_type", STR_ICON_IMAGE_TYPE_EDJE);
+ } else {
+ icon = _add_icon_image(item, ai->icon);
+ evas_object_data_set(item, "icon_image_type", STR_ICON_IMAGE_TYPE_OBJECT);
+ }
}
} else {
icon = ai->image;
item_set_icon(item, ai->icon, 0);
evas_object_data_set(item, STR_ATTRIBUTE_REMOVABLE, (void*) ai->x_slp_removable);
evas_object_data_set(item, "pid", (void *) ai->pid);
+
+ item_badge_register(item);
+
+ do {
+ Evas_Object *scroller;
+
+ scroller = evas_object_data_get(item, "scroller");
+ break_if(NULL == scroller);
+
+ if (false == page_scroller_is_edited(scroller)) break;
+ item_edit(item);
+ } while (0);
}
-Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai)
+HAPI Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai)
{
Evas_Object *item;
Evas_Object *bg;
-void item_destroy(Evas_Object *item)
+HAPI void item_destroy(Evas_Object *item)
{
Evas_Object *icon;
Evas_Object *bg;
}
}
+ if (item_badge_is_registered(item)) {
+ item_badge_unregister(item);
+ }
item_event_unregister(item);
item_set_package(item, NULL, 1);
-void item_launch(Evas_Object *obj)
+HAPI void item_launch(Evas_Object *obj)
{
char *package;
char *name;
-int item_get_position(Evas_Object *item)
+HAPI int item_get_position(Evas_Object *item)
{
Evas_Object *scroller;
Evas_Object *layout;
-void item_mark_dirty(Evas_Object *item)
+HAPI void item_mark_dirty(Evas_Object *item)
{
evas_object_data_set(item, "dirty", (void *) 1);
}
-void item_unmark_dirty(Evas_Object *item)
+HAPI void item_unmark_dirty(Evas_Object *item)
{
evas_object_data_set(item, "dirty", (void *) 0);
}
-int item_is_dirty(Evas_Object *item)
+HAPI int item_is_dirty(Evas_Object *item)
{
return (int) evas_object_data_get(item, "dirty");
}
--- /dev/null
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.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 <badge.h>
+#include <Elementary.h>
+#include <stdbool.h>
+
+#include "menu_screen.h"
+#include "conf.h"
+#include "item.h"
+#include "page_scroller.h"
+#include "util.h"
+
+
+
+HAPI int item_badge_count(char *package)
+{
+ unsigned int is_display = 0;
+ unsigned int count = 0;
+ badge_error_e err = BADGE_ERROR_NONE;
+
+ err = badge_get_display(package, &is_display);
+ if (BADGE_ERROR_NONE != err) _D("cannot get badge display");
+
+ if (0 == is_display) return 0;
+
+ err = badge_get_count(package, &count);
+ if (BADGE_ERROR_NONE != err) _D("cannot get badge count");
+
+ _D("Badge for package %s : %u", package, count);
+
+ return (int) count;
+}
+
+
+
+static Eina_Bool _idler_cb(void *data)
+{
+ char *package;
+ int count;
+ Evas_Object *item = data;
+
+ package = item_get_package(item);
+ if (!package) {
+ _D("Failed to get a package name");
+ evas_object_data_del(item, "idle_timer");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ count = item_badge_count(package);
+ if (count) item_show_badge(item, count);
+ else item_hide_badge(item);
+
+ evas_object_data_del(item, "idle_timer");
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
+HAPI bool item_badge_is_registered(Evas_Object *item)
+{
+ const char *pkgname;
+ badge_error_e err;
+ bool existing = false;
+
+ pkgname = item_get_package(item);
+ retv_if(NULL == pkgname, false);
+
+ err = badge_is_existing(pkgname, &existing);
+ if (BADGE_ERROR_NONE != err) _E("cannot know whether the badge for %s is or not.", pkgname);
+
+ return existing? true : false;
+}
+
+
+
+HAPI menu_screen_error_e item_badge_register(Evas_Object *item)
+{
+ Ecore_Idler *idle_timer;
+ bool is_registered;
+
+ is_registered = item_badge_is_registered(item);
+ if (false == is_registered) return MENU_SCREEN_ERROR_OK;
+
+ idle_timer = ecore_idler_add(_idler_cb, item);
+ retv_if(NULL == idle_timer, MENU_SCREEN_ERROR_FAIL);
+ evas_object_data_set(item, "idle_timer", idle_timer);
+
+ return MENU_SCREEN_ERROR_OK;
+}
+
+
+
+HAPI void item_badge_unregister(Evas_Object *item)
+{
+ char *package;
+ Ecore_Idler *idle_timer;
+
+ package = item_get_package(item);
+ if (!package) return;
+
+ idle_timer = evas_object_data_get(item, "idle_timer");
+ if (idle_timer) {
+ _D("Badge handler for package %s is not yet ready", package);
+ evas_object_data_del(item, "idle_timer");
+ ecore_idler_del(idle_timer);
+ return;
+ }
+
+ item_hide_badge(item);
+}
+
+
+
+static void _badge_change_cb(unsigned int action, const char *pkgname, unsigned int count, void *data)
+{
+ Evas_Object *scroller = data;
+ Evas_Object *item;
+ unsigned int is_display = 0;
+ badge_error_e err;
+
+ _D("Badge changed, action : %u, pkgname : %s, count : %u", action, pkgname, count);
+
+ ret_if(NULL == pkgname);
+
+ if (BADGE_ACTION_REMOVE == action) {
+ count = 0;
+ is_display = false;
+ } else {
+ err = badge_get_display(pkgname, &is_display);
+ if (BADGE_ERROR_NONE != err) _D("cannot get badge display");
+ if (0 == is_display) count = 0;
+ }
+
+ item = page_scroller_find_item_by_package(scroller, pkgname, NULL);
+ if (NULL == item) return;
+
+ if (count) item_show_badge(item, count);
+ else item_hide_badge(item);
+}
+
+
+
+HAPI void item_badge_register_changed_cb(Evas_Object *scroller)
+{
+ badge_error_e err;
+
+ err = badge_register_changed_cb(_badge_change_cb, scroller);
+ ret_if(BADGE_ERROR_NONE != err);
+}
+
+
+
+HAPI void item_badge_unregister_changed_cb(void)
+{
+ badge_error_e err;
+
+ err = badge_unregister_changed_cb(_badge_change_cb);
+ ret_if(BADGE_ERROR_NONE != err);
+}
+
+
+
+// End of a file
#include "mouse.h"
#include "page.h"
#include "page_scroller.h"
+#include "pkgmgr.h"
+#include "popup.h"
#include "util.h"
#include "all_apps/layout.h"
static void _item_up_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
{
+ Evas_Object *scroller;
Evas_Object *icon_image;
Evas_Object *item;
if (mouse_is_scrolling()) return;
+ scroller = evas_object_data_get(item, "scroller");
+ ret_if(NULL == scroller);
+
+ if (true == page_scroller_is_edited(scroller)) {
+ return;
+ }
item_launch(item);
}
-void item_event_register(Evas_Object *item)
+static void _uninstall_down_cb(void *data, Evas_Object *obj, const char* emission, const char* source)
+{
+ _D("Uninstall button is down");
+ obj = evas_object_data_get(obj, "evas_object");
+ if (obj) evas_object_data_set(obj, "removing", (void*)1);
+}
+
+
+
+static void _uninstall_up_cb(void *item, Evas_Object *obj, const char* emission, const char* source)
+{
+ Evas_Object *win;
+ Evas_Object *scroller;
+ char *package;
+
+ ret_if(mouse_is_scrolling());
+
+ win = menu_screen_get_win();
+ ret_if(NULL == win);
+
+ _D("Uninstall button is up");
+ scroller = evas_object_data_get(item, "scroller");
+ obj = evas_object_data_get(obj, "evas_object");
+ ret_if(NULL == obj);
+ ret_if(NULL == evas_object_data_get(obj, "removing"));
+
+ evas_object_data_del(obj, "removing");
+
+ package = item_get_package(obj);
+ ret_if(!package || strlen(package) == 0);
+ ret_if(pkgmgr_find_pended_object(package, 0, scroller, NULL));
+
+ _D("Uninstalling... [%s]", package);
+
+ popup_create_uninstall(win, item);
+}
+
+
+
+HAPI void item_event_register(Evas_Object *item)
{
Evas_Object *item_edje;
item_edje = _EDJ(item);
edje_object_signal_callback_add(item_edje, "item,down", "menu", _item_down_cb, NULL);
edje_object_signal_callback_add(item_edje, "item,up", "menu", _item_up_cb, NULL);
+
+ edje_object_signal_callback_add(item_edje, "uninstall,down", "menu", _uninstall_down_cb, NULL);
+ edje_object_signal_callback_add(item_edje, "uninstall,up", "menu", _uninstall_up_cb, item);
}
-void item_event_unregister(Evas_Object *item)
+HAPI void item_event_unregister(Evas_Object *item)
{
Evas_Object *item_edje;
item_edje = _EDJ(item);
edje_object_signal_callback_del(item_edje, "item,down", "menu", _item_down_cb);
edje_object_signal_callback_del(item_edje, "item,up", "menu", _item_up_cb);
+ edje_object_signal_callback_del(item_edje, "uninstall,down", "menu", _uninstall_down_cb);
+ edje_object_signal_callback_del(item_edje, "uninstall,up", "menu", _uninstall_up_cb);
+
evas_object_data_del(item_edje, "item");
}
-Evas_Object *layout_create(Evas_Object *conformant, const char *file, const char *group, int rotate)
+HAPI Evas_Object *layout_create(Evas_Object *conformant, const char *file, const char *group, int rotate)
{
Evas_Object *layout;
-void layout_destroy(Evas_Object *layout)
+HAPI void layout_destroy(Evas_Object *layout)
{
Evas_Object *all_apps;
-void layout_enable_block(Evas_Object *layout)
+HAPI void layout_enable_block(Evas_Object *layout)
{
ret_if(NULL == layout);
-void layout_disable_block(Evas_Object *layout)
+HAPI void layout_disable_block(Evas_Object *layout)
{
ret_if(NULL == layout);
-Evas_Object* layout_load_edj(Evas_Object *parent, const char *edjname, const char *grpname)
+HAPI Evas_Object* layout_load_edj(Evas_Object *parent, const char *edjname, const char *grpname)
{
Evas_Object *eo;
-void layout_unload_edj(Evas_Object *layout)
+HAPI void layout_unload_edj(Evas_Object *layout)
{
Evas_Object *evas_object;
-menu_screen_error_e list_count(app_list *list, int *count)
+HAPI menu_screen_error_e list_count(app_list *list, int *count)
{
retv_if(NULL == list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
retv_if(NULL == list->list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
-menu_screen_error_e list_first(app_list *list)
+HAPI menu_screen_error_e list_first(app_list *list)
{
retv_if(NULL == list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
-menu_screen_error_e list_next(app_list *list)
+HAPI menu_screen_error_e list_next(app_list *list)
{
int count;
-menu_screen_error_e list_is_ended(app_list *list, bool *flag)
+HAPI menu_screen_error_e list_is_ended(app_list *list, bool *flag)
{
int count;
-menu_screen_error_e list_get_item(app_list *list, app_list_item **item)
+HAPI menu_screen_error_e list_get_item(app_list *list, app_list_item **item)
{
retv_if(NULL == list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
retv_if(NULL == list->list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
-menu_screen_error_e list_get_values(const char *package, app_info_t *ai)
+HAPI menu_screen_error_e list_get_values(const char *package, app_info_t *ai)
{
ail_appinfo_h appinfo_h;
char *exec;
-void list_free_values(app_info_t *ai)
+HAPI void list_free_values(app_info_t *ai)
{
ret_if(NULL == ai);
/* Origin field */
- if (ai->package) free(ai->package);
- if (ai->exec) free(ai->exec);
- if (ai->name) free(ai->name);
- if (ai->icon) free(ai->icon);
+ if (ai->package) {
+ free(ai->package);
+ ai->package = NULL;
+ }
+
+ if (ai->exec) {
+ free(ai->exec);
+ ai->exec = NULL;
+ }
+
+ if (ai->name) {
+ free(ai->name);
+ ai->name = NULL;
+ }
+
+ if (ai->icon) {
+ free(ai->icon);
+ ai->icon = NULL;
+ }
}
-menu_screen_error_e list_append_item(app_list *list, app_list_item *item)
+HAPI menu_screen_error_e list_append_item(app_list *list, app_list_item *item)
{
retv_if(NULL == list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
retv_if(NULL == item, MENU_SCREEN_ERROR_INVALID_PARAMETER);
-menu_screen_error_e list_remove_item(app_list *list, app_list_item *item)
+HAPI menu_screen_error_e list_remove_item(app_list *list, app_list_item *item)
{
retv_if(NULL == list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
retv_if(NULL == list->list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
-menu_screen_error_e list_sort(app_list *list, int (*_sort_cb)(const void *d1, const void *d2))
+HAPI menu_screen_error_e list_sort(app_list *list, int (*_sort_cb)(const void *d1, const void *d2))
{
retv_if(NULL == list, MENU_SCREEN_ERROR_INVALID_PARAMETER);
-Evas_Object *mapbuf_get_mapbuf(Evas_Object *obj)
+HAPI Evas_Object *mapbuf_get_mapbuf(Evas_Object *obj)
{
Evas_Object *mapbuf;
-Evas_Object *mapbuf_get_page(Evas_Object *obj)
+HAPI Evas_Object *mapbuf_get_page(Evas_Object *obj)
{
Evas_Object *page;
-menu_screen_error_e mapbuf_enable(Evas_Object *obj, int force)
+HAPI menu_screen_error_e mapbuf_enable(Evas_Object *obj, int force)
{
Evas_Object *mapbuf;
int cnt;
- _D("Mapbuf disabled version");
-
mapbuf = mapbuf_get_mapbuf(obj);
if (!mapbuf) {
_D("Failed to get the mapbuf object");
-int mapbuf_is_enabled(Evas_Object *obj)
+HAPI int mapbuf_is_enabled(Evas_Object *obj)
{
Evas_Object *mapbuf;
mapbuf = mapbuf_get_mapbuf(obj);
-int mapbuf_disable(Evas_Object *obj, int force)
+HAPI int mapbuf_disable(Evas_Object *obj, int force)
{
Evas_Object *mapbuf;
int cnt;
-Evas_Object *mapbuf_bind(Evas_Object *box, Evas_Object *page)
+HAPI Evas_Object *mapbuf_bind(Evas_Object *box, Evas_Object *page)
{
Evas_Object *mapbuf;
-Evas_Object *mapbuf_unbind(Evas_Object *obj)
+HAPI Evas_Object *mapbuf_unbind(Evas_Object *obj)
{
Evas_Object *page;
Evas_Object *mapbuf;
-Evas *menu_screen_get_evas(void)
+HAPI Evas *menu_screen_get_evas(void)
{
return menu_screen_info.evas;
}
-int menu_screen_get_root_width(void)
+HAPI int menu_screen_get_root_width(void)
{
return menu_screen_info.root_width;
}
-int menu_screen_get_root_height(void)
+HAPI int menu_screen_get_root_height(void)
{
return menu_screen_info.root_height;
}
-Evas_Object *menu_screen_get_win(void)
+HAPI Evas_Object *menu_screen_get_win(void)
{
return menu_screen_info.win;
}
-Elm_Theme *menu_screen_get_theme(void)
+HAPI Elm_Theme *menu_screen_get_theme(void)
{
return menu_screen_info.theme;
}
-bool menu_screen_get_done(void)
+HAPI bool menu_screen_get_done(void)
{
return menu_screen_info.is_done;
}
-void menu_screen_set_done(bool is_done)
+HAPI void menu_screen_set_done(bool is_done)
{
menu_screen_info.is_done = is_done;
}
-Evas_Object *_create_conformant(Evas_Object *win)
+static Evas_Object *_create_conformant(Evas_Object *win)
{
Evas_Object *conformant;
-void _destroy_conformant(Evas_Object *conformant)
+static void _destroy_conformant(Evas_Object *conformant)
{
evas_object_data_del(conformant, "win");
evas_object_del(conformant);
-bool mouse_is_scrolling(void)
+HAPI bool mouse_is_scrolling(void)
{
bool scroll_x = false;
bool scroll_y = false;
-void mouse_register(void)
+HAPI void mouse_register(void)
{
mouse_info.mouse_down = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _down_cb, NULL);
if (!mouse_info.mouse_down) {
-void mouse_unregister(void)
+HAPI void mouse_unregister(void)
{
if (mouse_info.mouse_down) {
ecore_event_handler_del(mouse_info.mouse_down);
-inline void page_mark_dirty(Evas_Object *page)
+HAPI inline void page_mark_dirty(Evas_Object *page)
{
int value;
value = (int) evas_object_data_get(page, "dirty");
-inline void page_unmark_dirty(Evas_Object *page)
+HAPI inline void page_unmark_dirty(Evas_Object *page)
{
int value;
value = (int) evas_object_data_get(page, "dirty");
-inline void page_clean_dirty(Evas_Object *page)
+HAPI inline void page_clean_dirty(Evas_Object *page)
{
evas_object_data_set(page, "dirty", 0);
}
-inline int page_is_dirty(Evas_Object *page)
+HAPI inline int page_is_dirty(Evas_Object *page)
{
return (int) evas_object_data_get(page, "dirty");
}
-Evas_Object *page_create(Evas_Object *scroller, int idx, int rotate)
+HAPI Evas_Object *page_create(Evas_Object *scroller, int idx, int rotate)
{
Evas_Object *page;
Evas_Object *bg;
-void page_destroy(Evas_Object *scroller, Evas_Object *page)
+HAPI void page_destroy(Evas_Object *scroller, Evas_Object *page)
{
Evas_Object *mapbuf;
Evas_Object *bg;
-Evas_Object *page_get_item_at(Evas_Object *page, unsigned int idx)
+HAPI Evas_Object *page_get_item_at(Evas_Object *page, unsigned int idx)
{
Eina_List *pending_list;
Eina_List *n;
-menu_screen_error_e page_unpack_item(Evas_Object *page, Evas_Object *item)
+HAPI menu_screen_error_e page_unpack_item(Evas_Object *page, Evas_Object *item)
{
char tmp[PATH_MAX];
Evas_Object *check_item;
-Evas_Object *page_unpack_item_at(Evas_Object *page, int idx)
+HAPI Evas_Object *page_unpack_item_at(Evas_Object *page, int idx)
{
Eina_List *pending_list;
Eina_List *n;
-void page_pack_item(Evas_Object *page, int idx, Evas_Object *item)
+HAPI void page_pack_item(Evas_Object *page, int idx, Evas_Object *item)
{
char tmp[PATH_MAX];
Evas_Object *object;
-void page_set_item(Evas_Object *page, int idx, Evas_Object *item)
+HAPI void page_set_item(Evas_Object *page, int idx, Evas_Object *item)
{
Eina_List *list;
-inline unsigned int page_count_item(Evas_Object *page)
+HAPI inline unsigned int page_count_item(Evas_Object *page)
{
register unsigned int i;
unsigned int count = 0;
-int page_find_empty_near(Evas_Object *page, int pivot)
+HAPI int page_find_empty_near(Evas_Object *page, int pivot)
{
int pivot_saved = pivot;
Evas_Object *obj;
-int page_find_first_empty(Evas_Object *page, int pivot)
+HAPI int page_find_first_empty(Evas_Object *page, int pivot)
{
Evas_Object *item;
Evas_Object *scroller;
-void page_trim_items(Evas_Object *page)
+HAPI void page_trim_items(Evas_Object *page)
{
Evas_Object *item;
register unsigned int i;
#include <Elementary.h>
#include <vconf.h>
+#include "item_badge.h"
#include "conf.h"
#include "index.h"
#include "item.h"
-void page_scroller_bring_in(Evas_Object *scroller, int idx)
+HAPI void page_scroller_bring_in(Evas_Object *scroller, int idx)
{
Evas_Object *index;
int w, h;
-void page_scroller_show_region(Evas_Object *scroller, int idx)
+HAPI void page_scroller_show_region(Evas_Object *scroller, int idx)
{
Evas_Object *index;
int w, h;
-menu_screen_error_e _find_position_by_default(Evas_Object *scroller, int *candidate_page, int *candidate_pos, void *data)
+static menu_screen_error_e _find_position_by_default(Evas_Object *scroller, int *candidate_page, int *candidate_pos, void *data)
{
Evas_Object *page;
Evas_Object *item;
-menu_screen_error_e _find_position_by_package(Evas_Object *scroller, int *candidate_page, int *candidate_pos, void *data)
+static menu_screen_error_e _find_position_by_package(Evas_Object *scroller, int *candidate_page, int *candidate_pos, void *data)
{
Evas_Object *page;
Evas_Object *item;
-menu_screen_error_e page_scroller_push_item(Evas_Object *scroller, app_info_t *ai)
+HAPI menu_screen_error_e page_scroller_push_item(Evas_Object *scroller, app_info_t *ai)
{
Evas_Object *page;
Evas_Object *item;
-void _mouse_wheel_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+static void _mouse_wheel_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Event_Mouse_Wheel *ei = event_info;
Evas_Object *scroller = data;
-Evas_Object *page_scroller_create(Evas_Object *tab, Evas_Object *index, page_scroller_sort_type_e sort_type, int rotate)
+HAPI Evas_Object *page_scroller_create(Evas_Object *tab, Evas_Object *index, page_scroller_sort_type_e sort_type, int rotate)
{
Evas_Object *box;
Evas_Object *scroller;
}
pkgmgr_init(scroller);
+ item_badge_register_changed_cb(scroller);
return scroller;
}
-void page_scroller_destroy(Evas_Object *scroller)
+HAPI void page_scroller_destroy(Evas_Object *scroller)
{
Evas_Object *box;
Evas_Object *page;
ret_if(NULL == (box = evas_object_data_get(scroller, "box")));
ret_if(NULL == (page_list = elm_box_children_get(box)));
+ item_badge_unregister_changed_cb();
pkgmgr_fini();
EINA_LIST_FOREACH_SAFE(page_list, l, ln, page) {
-void page_scroller_clean(Evas_Object *scroller)
+HAPI void page_scroller_clean(Evas_Object *scroller)
{
Evas_Object *page;
Evas_Object *item;
-Evas_Object *page_scroller_get_page_at(Evas_Object *scroller, unsigned int idx)
+HAPI Evas_Object *page_scroller_get_page_at(Evas_Object *scroller, unsigned int idx)
{
const Eina_List *page_list;
Evas_Object *item;
-unsigned int page_scroller_count_page(Evas_Object *scroller)
+HAPI unsigned int page_scroller_count_page(Evas_Object *scroller)
{
const Eina_List *page_list;
Evas_Object *box;
-int page_scroller_get_page_no(Evas_Object* scroller, Evas_Object *page)
+HAPI int page_scroller_get_page_no(Evas_Object* scroller, Evas_Object *page)
{
Evas_Object *item;
Evas_Object *box;
-Evas_Object *page_scroller_find_item_by_package(Evas_Object *scroller, const char *package, int *page_no)
+HAPI Evas_Object *page_scroller_find_item_by_package(Evas_Object *scroller, const char *package, int *page_no)
{
register int i;
register int j;
-void page_scroller_trim_items(Evas_Object *scroller)
+HAPI void page_scroller_trim_items(Evas_Object *scroller)
{
register unsigned int i;
register unsigned int j;
}
+
+HAPI void page_scroller_edit(Evas_Object *scroller)
+{
+ Evas_Object *page;
+ Evas_Object *item;
+ register unsigned int page_no;
+ register unsigned int position_no;
+ unsigned int nr_of_pages;
+ int page_max_app;
+
+ nr_of_pages = page_scroller_count_page(scroller);
+ page_max_app = (int) evas_object_data_get(scroller, "page_max_app");
+ for (page_no = 0; page_no < nr_of_pages; page_no ++) {
+ page = page_scroller_get_page_at(scroller, page_no);
+ ret_if(NULL == page);
+
+ for (position_no = 0; position_no < page_max_app; position_no ++) {
+ item = page_get_item_at(page, position_no);
+ if (!item) {
+ continue;
+ }
+
+ item_edit(item);
+ }
+ }
+ evas_object_data_set(scroller, "is_edited", (void *) true);
+}
+
+
+
+HAPI void page_scroller_unedit(Evas_Object *scroller)
+{
+ Evas_Object *all_apps;
+ Evas_Object *page;
+ Evas_Object *item;
+ register int page_no;
+ register unsigned int position_no;
+ unsigned int nr_of_pages;
+ int page_max_app;
+
+ ret_if(NULL == scroller);
+
+ all_apps = evas_object_data_get(scroller, "tab");
+ ret_if(NULL == all_apps);
+
+ nr_of_pages = page_scroller_count_page(scroller);
+ page_max_app = (int) evas_object_data_get(scroller, "page_max_app");
+
+ for (page_no = nr_of_pages - 1; page_no >= 0; page_no --) {
+ int count;
+
+ page = page_scroller_get_page_at(scroller, page_no);
+ if (NULL == page) break;
+ count = page_count_item(page);
+
+ page_trim_items(page);
+
+ for (position_no = 0; position_no < page_max_app; position_no ++) {
+ item = page_get_item_at(page, position_no);
+ if (!item) {
+ break;
+ }
+
+ item_unedit(item);
+ }
+ }
+
+ evas_object_data_set(scroller, "is_edited", (void *) false);
+}
+
+
+
+HAPI bool page_scroller_is_edited(Evas_Object *scroller)
+{
+ return (bool) evas_object_data_get(scroller, "is_edited");
+}
+
+
+
// End of a file
-inline menu_screen_error_e pkgmgr_uninstall(Evas_Object *item)
+HAPI inline menu_screen_error_e pkgmgr_uninstall(Evas_Object *item)
{
pkgmgr_client *req_pc = NULL;
int ret = MENU_SCREEN_ERROR_OK;
install_list = eina_list_append(install_list, pi);
evas_object_data_set(scroller, "install_list", install_list);
} else {
- if (pi->status != DOWNLOAD_END) {
+ if (pi->status != DOWNLOAD_END && pi->status != INSTALL_END) {
_D("Package [%s] is in invalid state (%d), cancel this", package, pi->status);
install_list = eina_list_remove(install_list, pi);
evas_object_data_set(scroller, "install_list", install_list);
retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
pi->ai.package = strdup(package);
+ if (!pi->ai.package) {
+ free(pi);
+ return MENU_SCREEN_ERROR_FAIL;
+ }
+
+ pi->ai.icon = strdup(DEFAULT_ICON);
+ if (!pi->ai.icon) {
+ free(pi->ai.package);
+ free(pi);
+ return MENU_SCREEN_ERROR_FAIL;
+ }
+
pi->item = page_scroller_find_item_by_package(scroller, package, &page_no);
- if (pi->item) {
- pi->page = page_scroller_get_page_at(scroller, page_no);
+ if (!pi->item) {
+ if (MENU_SCREEN_ERROR_FAIL == page_scroller_push_item(scroller, &pi->ai)) _E("Cannot push an item");
}
+ pi->item = page_scroller_find_item_by_package(scroller, package, &page_no);
+ pi->page = page_scroller_get_page_at(scroller, page_no);
if (pi->item && pi->page) {
pi->ai.nodisplay = false;
install_list = eina_list_append(install_list, pi);
evas_object_data_set(scroller, "install_list", install_list);
} else {
- if (pi->status != DOWNLOAD_END) {
+ if (pi->status != DOWNLOAD_END && pi->status != INSTALL_END) {
_D("Package [%s] is in invalid state (%d), cancel this", package, pi->status);
install_list = eina_list_remove(install_list, pi);
evas_object_data_set(scroller, "install_list", install_list);
retv_if (NULL == pi->ai.icon, MENU_SCREEN_ERROR_OUT_OF_MEMORY);
if (!pi->item) {
+ _D("There is no item for [%s]", package);
pi->ai.nodisplay = false;
if (MENU_SCREEN_ERROR_FAIL == page_scroller_push_item(scroller, &pi->ai)) {
free(pi);
}
} else {
+ _D("There is an item for [%s:%p]", package, pi->item);
item_update(pi->item, &pi->ai);
}
}
// Remove an item only if it is installing.
if (
pi->status == INSTALL_BEGIN || pi->status == INSTALLING || pi->status == INSTALL_END ||
- pi->status == DOWNLOAD_BEGIN || pi->status == DOWNLOADING || pi->status == DOWNLOAD_END ||
- pi->status == UPDATE_BEGIN || pi->status == UPDATING || pi->status == UPDATE_END
+ pi->status == DOWNLOAD_BEGIN || pi->status == DOWNLOADING || pi->status == DOWNLOAD_END
)
{
if (pi->page) {
retv_if(NULL == pi, MENU_SCREEN_ERROR_FAIL);
+ list_free_values(&pi->ai);
+ if (MENU_SCREEN_ERROR_OK != list_get_values(package, &pi->ai)) _E("Cannot get values");
+ item_update(pi->item, &pi->ai);
+
if (item_is_enabled_progress(pi->item)) {
item_disable_progress(pi->item);
}
-menu_screen_error_e pkgmgr_init(Evas_Object *scroller)
+HAPI menu_screen_error_e pkgmgr_init(Evas_Object *scroller)
{
if (NULL != pkg_mgr_info.listen_pc) {
return MENU_SCREEN_ERROR_OK;
-void pkgmgr_fini(void)
+HAPI void pkgmgr_fini(void)
{
ret_if(NULL == pkg_mgr_info.listen_pc);
if (pkgmgr_client_free(pkg_mgr_info.listen_pc) != PKGMGR_R_OK) {
-Evas_Object *pkgmgr_find_pended_object(const char *package, int with_desktop_file, Evas_Object *scroller, Evas_Object **page)
+HAPI Evas_Object *pkgmgr_find_pended_object(const char *package, int with_desktop_file, Evas_Object *scroller, Evas_Object **page)
{
Eina_List *l;
Eina_List *tmp;
-Evas_Object *popup_create(Evas_Object *parent, const char *warning)
+HAPI Evas_Object *popup_create(Evas_Object *parent, const char *warning)
{
Evas_Object *popup;
Evas_Object *btn;
}
+static void _uninstall_yes_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *popup;
+ Evas_Object *item;
+
+ ret_if(NULL == data);
+
+ popup = data;
+ item = evas_object_data_del(popup, "item");
+
+ evas_object_del(evas_object_data_del(popup, "button1"));
+ evas_object_del(evas_object_data_del(popup, "button2"));
+ evas_object_del(popup);
+
+ if (MENU_SCREEN_ERROR_OK != pkgmgr_uninstall(item)) {
+ _E("Cannot communicate with the pkgmgr-server.");
+ }
+}
+
+
+
+static void _uninstall_no_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *popup;
+
+ ret_if(NULL == data);
+ popup = data;
+ evas_object_del(evas_object_data_del(popup, "button1"));
+ evas_object_del(evas_object_data_del(popup, "button2"));
+ evas_object_data_del(popup, "item");
+ evas_object_del(popup);
+}
+
+
+
+HAPI Evas_Object *popup_create_uninstall(Evas_Object *parent, Evas_Object *item)
+{
+ Evas_Object *popup;
+ Evas_Object *btn1;
+ Evas_Object *btn2;
+ char warning[BUFSZE];
+
+ retv_if(NULL == warning, NULL);
+
+ popup = elm_popup_add(parent);
+ retv_if(NULL == popup, NULL);
+
+ evas_object_data_set(popup, "item", item);
+
+ btn1 = elm_button_add(popup);
+ if (NULL == btn1) {
+ evas_object_del(popup);
+ return NULL;
+ }
+ elm_object_text_set(btn1, D_("IDS_COM_SK_YES"));
+ evas_object_data_set(popup, "button1", btn1);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", _uninstall_yes_cb, popup);
+
+ btn2 = elm_button_add(popup);
+ if (NULL == btn2) {
+ evas_object_del(popup);
+ return NULL;
+ }
+ elm_object_text_set(btn2, D_("IDS_COM_SK_NO"));
+ evas_object_data_set(popup, "button2", btn2);
+ elm_object_part_content_set(popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked", _uninstall_no_cb, popup);
+
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ snprintf(warning, sizeof(warning), _("Uninstall %s?"), item_get_name(item));
+ elm_object_text_set(popup, warning);
+ evas_object_show(popup);
+
+ return popup;
+}
+
+
// End of a file
-void _evas_object_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+HAPI void _evas_object_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Coord x;
Evas_Coord y;
-void _evas_object_event_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+HAPI void _evas_object_event_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
_D("%s IS REMOVED!", (const char *) data);
}
-void _evas_object_event_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+HAPI void _evas_object_event_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Coord x;
Evas_Coord y;
-void _evas_object_event_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+HAPI void _evas_object_event_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Evas_Coord x;
Evas_Coord y;