Sync with the private
authorJin Yoon <jinny.yoon@samsung.com>
Thu, 14 Feb 2013 08:47:43 +0000 (17:47 +0900)
committerJin Yoon <jinny.yoon@samsung.com>
Thu, 14 Feb 2013 09:25:34 +0000 (18:25 +0900)
39 files changed:
CMakeLists.txt
data/CMakeLists.txt
data/edje/CMakeLists.txt
data/edje/all_apps_portrait.edc
data/edje/button_edit.edc [new file with mode: 0644]
data/edje/item_4x4.edc
data/edje/pagecontrol.edc [deleted file]
data/images/CMakeLists.txt [new file with mode: 0644]
data/images/RM06_App tray_Btn_Uninstall.png [new file with mode: 0644]
data/images/RM06_App tray_Btn_Uninstall_press.png [new file with mode: 0644]
data/images/RM06_App_tray_edit_btn.png [new file with mode: 0644]
data/images/RM06_App_tray_edit_btn_press.png [new file with mode: 0644]
data/images/RM06_App_tray_setting.png [new file with mode: 0644]
data/images/RM06_App_tray_setting_press.png [new file with mode: 0644]
data/images/default.png [new file with mode: 0644]
data/images/menu_badge_01.png [new file with mode: 0644]
debian/control
include/item.h
include/item_badge.h [new file with mode: 0644]
include/page_scroller.h
include/popup.h
include/util.h
packaging/org.tizen.menu-screen.spec
src/all_apps/layout.c
src/all_apps/list.c
src/index.c
src/item.c
src/item_badge.c [new file with mode: 0644]
src/item_event.c
src/layout.c
src/list.c
src/mapbuf.c
src/menu_screen.c
src/mouse.c
src/page.c
src/page_scroller.c
src/pkgmgr.c
src/popup.c
src/util.c

index 68177398bd863c23faec12f5d958476323e62e8b..4528b3624d4dc030ec7b9da1a7c9645e220d51ea 100644 (file)
@@ -16,6 +16,7 @@ INCLUDE(FindPkgConfig)
 pkg_check_modules(MENU_PKGS REQUIRED
        ail
        aul
+       badge
        bundle
        capi-appfw-application
        dlog
@@ -59,6 +60,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
 ADD_EXECUTABLE(${PROJECT_NAME}
        src/index.c
        src/item.c
+       src/item_badge.c
        src/item_event.c
        src/layout.c
        src/list.c
index dcc6f83e431f47de8e9b9be9d555b55ac9201d4c..8b9e6d0ec3450eace3c1ebb71bd3a45dbeee0fff 100644 (file)
@@ -5,5 +5,6 @@ CONFIGURE_FILE(${PACKAGE_NAME}.xml.in ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml)
 INSTALL(FILES ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}.xml DESTINATION ${MANIFESTDIR})
 
 ADD_SUBDIRECTORY(edje)
+ADD_SUBDIRECTORY(images)
 
 # End of a file
index 02cf5484e7c69a50c9b7b7e6867563d9cbb4457d..2e334a08ff0797fb0145c97bf1ee9fe7cfe43044 100644 (file)
@@ -48,4 +48,14 @@ INSTALL(FILES layout_portrait.edj DESTINATION ${EDJEDIR})
 
 
 
+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
index 5534e0f582d54082ba180b9a690aa1cb3e1395dd..fe5f0ef18d762d2be0032d8b793f7a492dfe582b 100644 (file)
@@ -56,22 +56,34 @@ collections {
                                        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";
diff --git a/data/edje/button_edit.edc b/data/edje/button_edit.edc
new file mode 100644 (file)
index 0000000..dc6e2e3
--- /dev/null
@@ -0,0 +1,277 @@
+ /*
+  * 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
index c24306965658c12f4bba4dac2b96bd606f8c6532..527dfad9a9b5481d5b9d7397b1da8f3d7f9e1d8f 100644 (file)
@@ -25,7 +25,11 @@ styles {
        }
 }
 
-
+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 {
@@ -81,7 +85,56 @@ collections {
                                        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;
@@ -100,6 +153,52 @@ collections {
                                        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;
@@ -147,6 +246,66 @@ collections {
                                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
diff --git a/data/edje/pagecontrol.edc b/data/edje/pagecontrol.edc
deleted file mode 100644 (file)
index ebb5c31..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
- /*
-  * 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)
-}
diff --git a/data/images/CMakeLists.txt b/data/images/CMakeLists.txt
new file mode 100644 (file)
index 0000000..cb60ac7
--- /dev/null
@@ -0,0 +1 @@
+INSTALL(FILES default.png DESTINATION ${IMAGEDIR})
diff --git a/data/images/RM06_App tray_Btn_Uninstall.png b/data/images/RM06_App tray_Btn_Uninstall.png
new file mode 100644 (file)
index 0000000..7145638
Binary files /dev/null and b/data/images/RM06_App tray_Btn_Uninstall.png differ
diff --git a/data/images/RM06_App tray_Btn_Uninstall_press.png b/data/images/RM06_App tray_Btn_Uninstall_press.png
new file mode 100644 (file)
index 0000000..2ac8311
Binary files /dev/null and b/data/images/RM06_App tray_Btn_Uninstall_press.png differ
diff --git a/data/images/RM06_App_tray_edit_btn.png b/data/images/RM06_App_tray_edit_btn.png
new file mode 100644 (file)
index 0000000..0674e9c
Binary files /dev/null and b/data/images/RM06_App_tray_edit_btn.png differ
diff --git a/data/images/RM06_App_tray_edit_btn_press.png b/data/images/RM06_App_tray_edit_btn_press.png
new file mode 100644 (file)
index 0000000..eefc4f9
Binary files /dev/null and b/data/images/RM06_App_tray_edit_btn_press.png differ
diff --git a/data/images/RM06_App_tray_setting.png b/data/images/RM06_App_tray_setting.png
new file mode 100644 (file)
index 0000000..1b357fc
Binary files /dev/null and b/data/images/RM06_App_tray_setting.png differ
diff --git a/data/images/RM06_App_tray_setting_press.png b/data/images/RM06_App_tray_setting_press.png
new file mode 100644 (file)
index 0000000..3858945
Binary files /dev/null and b/data/images/RM06_App_tray_setting_press.png differ
diff --git a/data/images/default.png b/data/images/default.png
new file mode 100644 (file)
index 0000000..983c883
Binary files /dev/null and b/data/images/default.png differ
diff --git a/data/images/menu_badge_01.png b/data/images/menu_badge_01.png
new file mode 100644 (file)
index 0000000..f297f72
Binary files /dev/null and b/data/images/menu_badge_01.png differ
index 1a1fe81c16ab12b9ab6bd780a9613b62497fd7a0..1bb0f091dd81790bc036b228699659bf6c43f684 100644 (file)
@@ -2,14 +2,14 @@ Source: menu-screen
 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
index 70844a31566263a8617719e91f53de330d4aba82..60d4db7182a49c08b57b68432fe9a04d304a9eb6 100644 (file)
@@ -45,6 +45,13 @@ extern void item_set_desktop(Evas_Object *item, char *name, int sync);
 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);
diff --git a/include/item_badge.h b/include/item_badge.h
new file mode 100644 (file)
index 0000000..8e13bdf
--- /dev/null
@@ -0,0 +1,35 @@
+ /*
+  * 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
index 4f12bda2d744259b7cd072b8a55f133025f1979f..0a9f1ca818016b87f0f785bd72c490c6cdb58c42 100644 (file)
@@ -45,6 +45,10 @@ extern void page_scroller_trim_items(Evas_Object *scroller);
 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
index 7a2dc3ce0f4921afc21f6e3d28d480eb2489f5de..d8ed123c38d2c5b4274f24031db73c2324192970 100644 (file)
@@ -25,6 +25,7 @@ extern void popup_free_list();
 
 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__
 
index 9d93f627230640a36c7143c7d9d9f65960ea574e..522a58065ee73684b85356fb50007ff230ea36fa 100644 (file)
 
 /* 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;                         \
index f084a02674f604cd798f4087c8345e997e211123..952944811174832039205c70ba0306d92aa3f810 100644 (file)
@@ -19,27 +19,28 @@ Release:    1.1
 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
@@ -92,9 +93,11 @@ init_vconf
 %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}
index 7d394ea2e1cb867e7c2cba001892766be02b8ca3..386b5f77ab20ca95710ecc8ad558397921a17b81 100644 (file)
 
 #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)
@@ -80,6 +237,15 @@ ERROR:
        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;
 }
 
@@ -102,7 +268,7 @@ static menu_screen_error_e _push_items(Evas_Object *all_apps)
 
 
 
-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;
@@ -176,11 +342,23 @@ Evas_Object *all_apps_layout_create(Evas_Object *controlbar, int rotate)
 
 
 
-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");
 
index e3d2e6c8db9486d7d148dbc625f33c44ecd79557..531bbbd130187652e7eb26c6376b6093f1adaa0b 100644 (file)
@@ -85,7 +85,7 @@ static int _all_apps_sort_cb(const void *d1, const void *d2)
 
 
 
-app_list *all_apps_list_create(void)
+HAPI app_list *all_apps_list_create(void)
 {
        int count = 0;
        app_list *list;
@@ -123,7 +123,7 @@ app_list *all_apps_list_create(void)
 
 
 
-void all_apps_list_destroy(app_list *list)
+HAPI void all_apps_list_destroy(app_list *list)
 {
        app_list_item *item;
 
index 81f536c180916a17237442ab86b08fa1cf9e012b..d840d3d41cab02377a9b4975e3d825ce5703e0ce 100644 (file)
@@ -28,7 +28,7 @@
 
 
 
-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;
 
@@ -39,7 +39,7 @@ inline void index_bring_in(Evas_Object *index, int idx)
 
 
 
-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");
@@ -52,7 +52,7 @@ void index_destroy(Evas_Object *index)
 
 
 
-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;
@@ -106,7 +106,7 @@ Evas_Object *index_create(Evas_Object *tab, unsigned int count)
 
 
 
-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);
@@ -115,14 +115,14 @@ Evas_Object *index_update(Evas_Object *layout, Evas_Object *index, unsigned int
 
 
 
-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");
 }
index aeb18120a1e308c287392edc21fd1f3a9d3c68e1..dd005589d889c23fce1b882a42871cb8ed635059 100644 (file)
@@ -22,6 +22,7 @@
 #include <ail.h>
 
 #include "menu_screen.h"
+#include "item_badge.h"
 #include "conf.h"
 #include "item.h"
 #include "item_event.h"
@@ -29,6 +30,7 @@
 #include "list.h"
 #include "mapbuf.h"
 #include "page.h"
+#include "page_scroller.h"
 #include "popup.h"
 #include "util.h"
 
@@ -88,7 +90,7 @@ static char *_space_to_new_line(const char *str)
 
 
 
-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;
@@ -114,7 +116,7 @@ void item_set_icon(Evas_Object *edje, char *icon, int sync)
 
 
 
-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);
 }
@@ -122,7 +124,7 @@ inline char *item_get_icon(Evas_Object *edje)
 
 
 
-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;
@@ -168,14 +170,14 @@ void item_set_name(Evas_Object *edje, char *name, int sync)
 
 
 
-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;
@@ -201,14 +203,14 @@ void item_set_desktop(Evas_Object *edje, char *name, int sync)
 
 
 
-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;
@@ -235,14 +237,14 @@ void item_set_package(Evas_Object *edje, char *package, int sync)
 
 
 
-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;
@@ -263,14 +265,14 @@ void item_set_removable(Evas_Object *edje, int removable, int sync)
 
 
 
-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;
@@ -291,7 +293,7 @@ void item_set_page(Evas_Object *edje, Evas_Object *page, int sync)
 
 
 
-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);
 }
@@ -299,7 +301,7 @@ inline Evas_Object *item_get_page(Evas_Object *edje)
 
 
 
-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");
@@ -308,7 +310,7 @@ inline void item_enable_delete(Evas_Object *item)
 
 
 
-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");
@@ -316,7 +318,50 @@ inline void item_disable_delete(Evas_Object *item)
 }
 
 
-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;
 
@@ -347,7 +392,7 @@ void item_enable_progress(Evas_Object *obj)
 
 
 
-void item_update_progress(Evas_Object *obj, int value)
+HAPI void item_update_progress(Evas_Object *obj, int value)
 {
        Evas_Object *progress;
 
@@ -363,7 +408,7 @@ void item_update_progress(Evas_Object *obj, int value)
 
 
 
-void item_disable_progress(Evas_Object *obj)
+HAPI void item_disable_progress(Evas_Object *obj)
 {
        Evas_Object *progress;
 
@@ -381,13 +426,40 @@ void item_disable_progress(Evas_Object *obj)
 
 
 
-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;
@@ -430,7 +502,7 @@ static Evas_Object *_add_edje_icon(Evas_Object *item, const char *icon_file)
 
 
 
-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.";
@@ -449,17 +521,30 @@ menu_screen_error_e item_is_edje_icon(const char *icon)
 
 
 
-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;
@@ -483,11 +568,23 @@ void item_update(Evas_Object *item, app_info_t *ai)
        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;
@@ -540,7 +637,7 @@ Evas_Object *item_create(Evas_Object *scroller, app_info_t* ai)
 
 
 
-void item_destroy(Evas_Object *item)
+HAPI void item_destroy(Evas_Object *item)
 {
        Evas_Object *icon;
        Evas_Object *bg;
@@ -565,6 +662,9 @@ void item_destroy(Evas_Object *item)
                }
        }
 
+       if (item_badge_is_registered(item)) {
+               item_badge_unregister(item);
+       }
        item_event_unregister(item);
 
        item_set_package(item, NULL, 1);
@@ -617,7 +717,7 @@ static Eina_Bool _unblock_cb(void *data)
 
 
 
-void item_launch(Evas_Object *obj)
+HAPI void item_launch(Evas_Object *obj)
 {
        char *package;
        char *name;
@@ -661,7 +761,7 @@ void item_launch(Evas_Object *obj)
 
 
 
-int item_get_position(Evas_Object *item)
+HAPI int item_get_position(Evas_Object *item)
 {
        Evas_Object *scroller;
        Evas_Object *layout;
@@ -716,21 +816,21 @@ int item_get_position(Evas_Object *item)
 
 
 
-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");
 }
diff --git a/src/item_badge.c b/src/item_badge.c
new file mode 100644 (file)
index 0000000..8762099
--- /dev/null
@@ -0,0 +1,180 @@
+ /*
+  * 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
index 30fd27a1a3a6055fb98ba95f2789579c9efcf5cb..e5eec04a5144609beae4972208dc2575b64fa541 100644 (file)
@@ -29,6 +29,8 @@
 #include "mouse.h"
 #include "page.h"
 #include "page_scroller.h"
+#include "pkgmgr.h"
+#include "popup.h"
 #include "util.h"
 #include "all_apps/layout.h"
 
@@ -70,6 +72,7 @@ static void _item_down_cb(void *data, Evas_Object *obj, const char* emission, co
 
 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;
 
@@ -91,12 +94,57 @@ static void _item_up_cb(void *data, Evas_Object *obj, const char* emission, cons
 
        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);
@@ -104,11 +152,14 @@ void item_event_register(Evas_Object *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);
@@ -116,6 +167,9 @@ void item_event_unregister(Evas_Object *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");
 }
 
index f28751b8615f2779c6d5d487e4d082a5ece8a3ca..43edf93fd62c40c01a39dc8169ad5ba7619fd1b3 100644 (file)
@@ -33,7 +33,7 @@
 
 
 
-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;
 
@@ -77,7 +77,7 @@ Evas_Object *layout_create(Evas_Object *conformant, const char *file, const char
 
 
 
-void layout_destroy(Evas_Object *layout)
+HAPI void layout_destroy(Evas_Object *layout)
 {
        Evas_Object *all_apps;
 
@@ -94,7 +94,7 @@ void layout_destroy(Evas_Object *layout)
 
 
 
-void layout_enable_block(Evas_Object *layout)
+HAPI void layout_enable_block(Evas_Object *layout)
 {
        ret_if(NULL == layout);
 
@@ -104,7 +104,7 @@ void layout_enable_block(Evas_Object *layout)
 
 
 
-void layout_disable_block(Evas_Object *layout)
+HAPI void layout_disable_block(Evas_Object *layout)
 {
        ret_if(NULL == layout);
 
@@ -114,7 +114,7 @@ void layout_disable_block(Evas_Object *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;
 
@@ -132,7 +132,7 @@ Evas_Object* layout_load_edj(Evas_Object *parent, const char *edjname, const cha
 
 
 
-void layout_unload_edj(Evas_Object *layout)
+HAPI void layout_unload_edj(Evas_Object *layout)
 {
        Evas_Object *evas_object;
 
index 48c9a08a18b284adc7a1dd4c0f4a03bac9f83990..af4b0547f73e1bdc222b6686f77eef3a8e6d9f8f 100644 (file)
@@ -27,7 +27,7 @@
 
 
 
-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);
@@ -40,7 +40,7 @@ menu_screen_error_e list_count(app_list *list, int *count)
 
 
 
-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);
 
@@ -51,7 +51,7 @@ menu_screen_error_e list_first(app_list *list)
 
 
 
-menu_screen_error_e list_next(app_list *list)
+HAPI menu_screen_error_e list_next(app_list *list)
 {
        int count;
 
@@ -68,7 +68,7 @@ menu_screen_error_e list_next(app_list *list)
 
 
 
-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;
 
@@ -83,7 +83,7 @@ menu_screen_error_e list_is_ended(app_list *list, bool *flag)
 
 
 
-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);
@@ -96,7 +96,7 @@ menu_screen_error_e list_get_item(app_list *list, app_list_item **item)
 
 
 
-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;
@@ -139,20 +139,35 @@ menu_screen_error_e list_get_values(const char *package, app_info_t *ai)
 
 
 
-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);
@@ -165,7 +180,7 @@ menu_screen_error_e list_append_item(app_list *list, app_list_item *item)
 
 
 
-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);
@@ -178,7 +193,7 @@ menu_screen_error_e list_remove_item(app_list *list, app_list_item *item)
 
 
 
-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);
 
index 098b12b62458650a964ed5998204c70425dd6ce3..b807395febffeff5b3a5d01f6b0cd5dfe799a2fb 100644 (file)
@@ -26,7 +26,7 @@
 
 
 
-Evas_Object *mapbuf_get_mapbuf(Evas_Object *obj)
+HAPI Evas_Object *mapbuf_get_mapbuf(Evas_Object *obj)
 {
        Evas_Object *mapbuf;
 
@@ -42,7 +42,7 @@ Evas_Object *mapbuf_get_mapbuf(Evas_Object *obj)
 
 
 
-Evas_Object *mapbuf_get_page(Evas_Object *obj)
+HAPI Evas_Object *mapbuf_get_page(Evas_Object *obj)
 {
        Evas_Object *page;
 
@@ -58,13 +58,11 @@ Evas_Object *mapbuf_get_page(Evas_Object *obj)
 
 
 
-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");
@@ -96,7 +94,7 @@ menu_screen_error_e mapbuf_enable(Evas_Object *obj, int force)
 
 
 
-int mapbuf_is_enabled(Evas_Object *obj)
+HAPI int mapbuf_is_enabled(Evas_Object *obj)
 {
        Evas_Object *mapbuf;
        mapbuf = mapbuf_get_mapbuf(obj);
@@ -109,7 +107,7 @@ int mapbuf_is_enabled(Evas_Object *obj)
 
 
 
-int mapbuf_disable(Evas_Object *obj, int force)
+HAPI int mapbuf_disable(Evas_Object *obj, int force)
 {
        Evas_Object *mapbuf;
        int cnt;
@@ -143,7 +141,7 @@ int mapbuf_disable(Evas_Object *obj, int force)
 
 
 
-Evas_Object *mapbuf_bind(Evas_Object *box, Evas_Object *page)
+HAPI Evas_Object *mapbuf_bind(Evas_Object *box, Evas_Object *page)
 {
        Evas_Object *mapbuf;
 
@@ -167,7 +165,7 @@ Evas_Object *mapbuf_bind(Evas_Object *box, Evas_Object *page)
 
 
 
-Evas_Object *mapbuf_unbind(Evas_Object *obj)
+HAPI Evas_Object *mapbuf_unbind(Evas_Object *obj)
 {
        Evas_Object *page;
        Evas_Object *mapbuf;
index 0ce4d1bb0ec9ad6dbabef777665a9c99906b6e6b..8f4f5b45996d07e6838bc25ff1d40648b254edf6 100644 (file)
@@ -64,49 +64,49 @@ static struct {
 
 
 
-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;
 }
@@ -299,7 +299,7 @@ static void _fini_theme(void)
 
 
 
-Evas_Object *_create_conformant(Evas_Object *win)
+static Evas_Object *_create_conformant(Evas_Object *win)
 {
        Evas_Object *conformant;
 
@@ -319,7 +319,7 @@ Evas_Object *_create_conformant(Evas_Object *win)
 
 
 
-void _destroy_conformant(Evas_Object *conformant)
+static void _destroy_conformant(Evas_Object *conformant)
 {
        evas_object_data_del(conformant, "win");
        evas_object_del(conformant);
index 078323fca72e12f411bc1985ccca2f551fd9964d..f6cf4467680c0e2b93f9ad26b35524f5591ad35a 100644 (file)
@@ -68,7 +68,7 @@ static struct {
 
 
 
-bool mouse_is_scrolling(void)
+HAPI bool mouse_is_scrolling(void)
 {
        bool scroll_x = false;
        bool scroll_y = false;
@@ -141,7 +141,7 @@ static Eina_Bool _move_cb(void *data, int type, void *event)
 
 
 
-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) {
@@ -168,7 +168,7 @@ void mouse_register(void)
 
 
 
-void mouse_unregister(void)
+HAPI void mouse_unregister(void)
 {
        if (mouse_info.mouse_down) {
                ecore_event_handler_del(mouse_info.mouse_down);
index 0492364c11061a632d6636d878ddb6c829292fc6..6da6598a5ceb6b73b77d3f5550cdb3d4f57a18f6 100644 (file)
@@ -34,7 +34,7 @@
 
 
 
-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");
@@ -43,7 +43,7 @@ inline void page_mark_dirty(Evas_Object *page)
 
 
 
-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");
@@ -54,14 +54,14 @@ inline void page_unmark_dirty(Evas_Object *page)
 
 
 
-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");
 }
@@ -137,7 +137,7 @@ static void _dim_up_cb(void *data, Evas_Object *obj, const char* emission, const
 
 
 
-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;
@@ -218,7 +218,7 @@ Evas_Object *page_create(Evas_Object *scroller, int idx, int rotate)
 
 
 
-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;
@@ -279,7 +279,7 @@ void page_destroy(Evas_Object *scroller, Evas_Object *page)
 
 
 
-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;
@@ -305,7 +305,7 @@ Evas_Object *page_get_item_at(Evas_Object *page, unsigned int idx)
 
 
 
-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;
@@ -347,7 +347,7 @@ menu_screen_error_e page_unpack_item(Evas_Object *page, Evas_Object *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;
@@ -390,7 +390,7 @@ Evas_Object *page_unpack_item_at(Evas_Object *page, int idx)
 
 
 
-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;
@@ -426,7 +426,7 @@ void page_pack_item(Evas_Object *page, int idx, Evas_Object *item)
 
 
 
-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;
 
@@ -448,7 +448,7 @@ void page_set_item(Evas_Object *page, int idx, Evas_Object *item)
 
 
 
-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;
@@ -466,7 +466,7 @@ inline unsigned int page_count_item(Evas_Object *page)
 
 
 
-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;
@@ -503,7 +503,7 @@ int page_find_empty_near(Evas_Object *page, int pivot)
 
 
 
-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;
@@ -525,7 +525,7 @@ int page_find_first_empty(Evas_Object *page, int pivot)
 
 
 
-void page_trim_items(Evas_Object *page)
+HAPI void page_trim_items(Evas_Object *page)
 {
        Evas_Object *item;
        register unsigned int i;
index 20b7116f68e0b9c777401bf80786325860b082ac..5d611d256ac0a1ce504488467ece45c72a6aad92 100644 (file)
@@ -19,6 +19,7 @@
 #include <Elementary.h>
 #include <vconf.h>
 
+#include "item_badge.h"
 #include "conf.h"
 #include "index.h"
 #include "item.h"
@@ -52,7 +53,7 @@ static int _count_pages(Evas_Object *scroller)
 
 
 
-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;
@@ -74,7 +75,7 @@ void page_scroller_bring_in(Evas_Object *scroller, int idx)
 
 
 
-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;
@@ -192,7 +193,7 @@ static void _scroller_unregister(Evas_Object *scroller)
 
 
 
-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;
@@ -234,7 +235,7 @@ menu_screen_error_e _find_position_by_default(Evas_Object *scroller, int *candid
 
 
 
-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;
@@ -393,7 +394,7 @@ static Evas_Object *_animated_unpack_item(Evas_Object *scroller, Evas_Object *pa
 
 
 
-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;
@@ -736,7 +737,7 @@ static void _mapbuf_cb(keynode_t *node, void *data)
 
 
 
-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;
@@ -761,7 +762,7 @@ void _mouse_wheel_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 
 
 
-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;
@@ -832,13 +833,14 @@ Evas_Object *page_scroller_create(Evas_Object *tab, Evas_Object *index, page_scr
        }
 
        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;
@@ -852,6 +854,7 @@ void page_scroller_destroy(Evas_Object *scroller)
        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) {
@@ -914,7 +917,7 @@ void page_scroller_destroy(Evas_Object *scroller)
 
 
 
-void page_scroller_clean(Evas_Object *scroller)
+HAPI void page_scroller_clean(Evas_Object *scroller)
 {
        Evas_Object *page;
        Evas_Object *item;
@@ -947,7 +950,7 @@ void page_scroller_clean(Evas_Object *scroller)
 
 
 
-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;
@@ -971,7 +974,7 @@ Evas_Object *page_scroller_get_page_at(Evas_Object *scroller, unsigned int idx)
 
 
 
-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;
@@ -987,7 +990,7 @@ unsigned int page_scroller_count_page(Evas_Object *scroller)
 
 
 
-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;
@@ -1018,7 +1021,7 @@ int page_scroller_get_page_no(Evas_Object* scroller, Evas_Object *page)
 
 
 
-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;
@@ -1059,7 +1062,7 @@ Evas_Object *page_scroller_find_item_by_package(Evas_Object *scroller, const cha
 
 
 
-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;
@@ -1130,4 +1133,83 @@ void page_scroller_trim_items(Evas_Object *scroller)
 }
 
 
+
+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
index a0fb33a342f936a07d2c5d5271578dabbde32ce6..c4182c7b48b041e9c1985b1a28ef02b3cacd4cd0 100644 (file)
@@ -46,7 +46,7 @@ static struct {
 
 
 
-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;
@@ -162,7 +162,7 @@ static menu_screen_error_e _start_update(const char *package, void *scroller)
                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);
@@ -220,10 +220,24 @@ static menu_screen_error_e _start_install(const char *package, void *scroller)
                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;
@@ -232,7 +246,7 @@ static menu_screen_error_e _start_install(const char *package, void *scroller)
                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);
@@ -336,6 +350,7 @@ static menu_screen_error_e _icon_path(const char *package, const char *val, void
                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)) {
@@ -346,6 +361,7 @@ static menu_screen_error_e _icon_path(const char *package, const char *val, void
                                free(pi);
                        }
                } else {
+                       _D("There is an item for [%s:%p]", package, pi->item);
                        item_update(pi->item, &pi->ai);
                }
        }
@@ -562,8 +578,7 @@ static menu_screen_error_e _end_unknown(const char *package, struct package_info
                // 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) {
@@ -635,6 +650,10 @@ static menu_screen_error_e _end(const char *package, const char *val, void *scro
 
        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);
        }
@@ -732,7 +751,7 @@ static menu_screen_error_e _pkgmgr_cb(int req_id, const char *pkg_type, const ch
 
 
 
-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;
@@ -748,7 +767,7 @@ menu_screen_error_e pkgmgr_init(Evas_Object *scroller)
 
 
 
-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) {
@@ -759,7 +778,7 @@ void pkgmgr_fini(void)
 
 
 
-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;
index c83e3055eda7166bf9665f0d114827579f58bea0..af27631e40bd960ceb86fa5fab16de4bb3df1024 100644 (file)
@@ -39,7 +39,7 @@ static void _response_cb(void *data, Evas_Object *obj, void *event_info)
 
 
 
-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;
@@ -70,5 +70,83 @@ Evas_Object *popup_create(Evas_Object *parent, const char *warning)
 }
 
 
+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
index 7ec1f36865ee5393b9c04ad91b781471b3f10ec1..281b53c3dd1a42c873ecb7847817eb1cbbb80d4a 100644 (file)
@@ -22,7 +22,7 @@
 
 
 
-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;
@@ -35,14 +35,14 @@ void _evas_object_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_i
 
 
 
-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;
@@ -55,7 +55,7 @@ void _evas_object_event_move_cb(void *data, Evas *e, Evas_Object *obj, void *eve
 
 
 
-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;