[cbhm] fixed focus problem when landscape mode
[framework/uifw/cbhm.git] / src / clipdrawer.c
index 77f110e..2fc67b2 100644 (file)
 #define DEFAULT_WIDTH 720
 #define GRID_ITEM_SPACE_W 6
 #define GRID_ITEM_SINGLE_W 185
-#define GRID_ITEM_SINGLE_H 161
+#define GRID_ITEM_SINGLE_H 140
 #define GRID_ITEM_W (GRID_ITEM_SINGLE_W+(GRID_ITEM_SPACE_W*2))
 #define GRID_ITEM_H (GRID_ITEM_SINGLE_H)
 #define GRID_IMAGE_LIMIT_W 91
 #define GRID_IMAGE_LIMIT_H 113
+#define GRID_IMAGE_INNER 10
+#define GRID_IMAGE_REAL_W (GRID_ITEM_SINGLE_W - (2*GRID_IMAGE_INNER))
+#define GRID_IMAGE_REAL_H (GRID_ITEM_SINGLE_H - (2*GRID_IMAGE_INNER))
 
 static Evas_Object *create_win(ClipdrawerData *cd, const char *name);
 static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *part);
@@ -56,7 +59,7 @@ static void _change_gengrid_paste_textonly_mode(ClipdrawerData *cd)
 
        while (gitem)
        {
-               item = elm_gengrid_item_data_get(gitem);
+               item = elm_object_item_data_get(gitem);
                if ((item->type_index == ATOM_INDEX_IMAGE) && (item->layout))
                {
                        if (cd->paste_text_only)
@@ -145,10 +148,13 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
        edje_object_signal_callback_add(elm_layout_edje_get(cd->main_layout),
                        "mouse,up,1", "*", clipdrawer_ly_clicked, ad);
 
+       elm_object_part_text_set(cd->main_layout, "panel_title", "Clipboard");
+       elm_object_part_text_set(cd->main_layout, "panel_function", "Done");
+
        cd->gengrid = elm_gengrid_add(cd->main_win);
-       elm_layout_content_set(cd->main_layout, "historyitems", cd->gengrid);
-       elm_gengrid_item_size_set(cd->gengrid, GRID_ITEM_W+2, GRID_ITEM_H);
-       elm_gengrid_align_set(cd->gengrid, 0.5, 0.5);
+       elm_object_part_content_set(cd->main_layout, "historyitems", cd->gengrid);
+       elm_gengrid_item_size_set(cd->gengrid, GRID_ITEM_W, GRID_ITEM_H);
+       elm_gengrid_align_set(cd->gengrid, 0.5, 0.0);
        elm_gengrid_horizontal_set(cd->gengrid, EINA_TRUE);
        elm_gengrid_bounce_set(cd->gengrid, EINA_TRUE, EINA_FALSE);
        elm_gengrid_multi_select_set(cd->gengrid, EINA_FALSE);
@@ -157,7 +163,7 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
 
        elm_gengrid_clear(cd->gengrid);
 
-       cd->gic.item_style = "default_grid";
+       cd->gic.item_style = "clipboard_photo_style";
        cd->gic.func.text_get = NULL;
        cd->gic.func.content_get = _grid_content_get;
        cd->gic.func.state_get = NULL;
@@ -172,6 +178,8 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
        cd->keydown_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, keydown_cb, ad);
        cd->evas = evas_object_evas_get(cd->main_win);
 
+       delete_mode = EINA_FALSE;
+
        return cd;
 }
 
@@ -193,7 +201,7 @@ static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item)
                Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
                while (gitem)
                {
-                       CNP_ITEM *gitem_data = elm_gengrid_item_data_get(gitem);
+                       CNP_ITEM *gitem_data = elm_object_item_data_get(gitem);
                        gitem = elm_gengrid_item_next_get(gitem);
                        if ((gitem_data->type_index == item->type_index) && (!strcmp(item->data, gitem_data->data)))
                        {
@@ -211,7 +219,7 @@ static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item)
 static Eina_Bool clipdrawer_del_item(AppData *ad, CNP_ITEM *item)
 {
        if (item->gitem)
-               elm_gengrid_item_del(item->gitem);
+               elm_object_item_del(item->gitem);
        return EINA_TRUE;
 }
 
@@ -228,22 +236,45 @@ static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *
        AppData *ad = item->ad;
        ClipdrawerData *cd = ad->clipdrawer;
 
-       if (strcmp(part, "elm.swallow.icon"))
-               return NULL;
-       if (item->type_index == ATOM_INDEX_IMAGE) /* text/uri */
+       if (item->type_index == ATOM_INDEX_IMAGE && !strcmp(part, "elm.swallow.icon")) /* text/uri */
        {
+               int w, h, iw, ih;
+
                Evas_Object *layout = elm_layout_add(obj);
-               elm_layout_theme_set(layout, "gengrid", "widestyle", "horizontal_layout");
+               elm_layout_theme_set(layout, "gengrid", "item", "clipboard_style");
                edje_object_signal_callback_add(elm_layout_edje_get(layout),
                                "mouse,up,1", "*", _grid_item_ly_clicked, data);
 
+
                Evas_Object *sicon;
                sicon = evas_object_image_add(evas_object_evas_get(obj));
-               evas_object_image_load_size_set(sicon, GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
+               evas_object_image_load_size_set(sicon, GRID_IMAGE_REAL_W, GRID_IMAGE_REAL_H);
                evas_object_image_file_set(sicon, item->data, NULL);
-               evas_object_image_fill_set(sicon, 0, 0, GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
-               evas_object_resize(sicon, GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
-               elm_layout_content_set(layout, "elm.swallow.icon", sicon);
+               evas_object_image_size_get(sicon, &w, &h);
+
+               if (w > GRID_IMAGE_REAL_W || h > GRID_IMAGE_REAL_H)
+               {
+                       if (w >= h)
+                       {
+                               iw = GRID_IMAGE_REAL_W;
+                               ih = (float)GRID_IMAGE_REAL_W / w * h;
+                       }
+                       else
+                       {
+                               iw = (float)GRID_IMAGE_REAL_H / h * w;
+                               ih = GRID_IMAGE_REAL_H;
+                       }
+               }
+               else
+               {
+                       iw = w;
+                       ih = h;
+               }
+
+               evas_object_image_fill_set(sicon, 0, 0, iw, ih);
+               evas_object_resize(sicon, iw, ih);
+               evas_object_size_hint_min_set(sicon, iw, ih);
+               elm_object_part_content_set(layout, "elm.swallow.icon", sicon);
 
                if (cd->paste_text_only)
                        edje_object_signal_emit(elm_layout_edje_get(layout), "elm,state,show,dim", "elm");
@@ -252,7 +283,7 @@ static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *
 
                item->layout = layout;
        }
-       else
+       else if (item->type_index != ATOM_INDEX_IMAGE && !strcmp(part, "elm.swallow.entry")) /* text/uri */
        {
                Evas_Object *layout = elm_layout_add(obj);
                elm_layout_theme_set(layout, "gengrid", "widestyle", "horizontal_layout");
@@ -260,9 +291,9 @@ static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *
                                "mouse,up,1", "*", _grid_item_ly_clicked, data);
                Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
                evas_object_resize(rect, GRID_ITEM_W, GRID_ITEM_H);
-               evas_object_color_set(rect, 242, 233, 183, 255);
+               evas_object_color_set(rect, 237, 233, 208, 255);
                evas_object_show(rect);
-               elm_layout_content_set(layout, "elm.swallow.icon", rect);
+               elm_object_part_content_set(layout, "elm.swallow.icon", rect);
 
                Evas_Object *ientry = elm_entry_add(obj);
                evas_object_size_hint_weight_set(ientry, 0, 0);
@@ -281,10 +312,17 @@ static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *
                elm_entry_editable_set(ientry, EINA_FALSE);
                elm_entry_context_menu_disabled_set(ientry, EINA_TRUE);
                evas_object_show(ientry);
-               elm_layout_content_set(layout, "elm.swallow.inner", ientry);
+               elm_object_part_content_set(layout, "elm.swallow.inner", ientry);
 
                item->layout = layout;
        }
+       else
+               return NULL;
+
+       if (delete_mode)
+               edje_object_signal_emit(elm_layout_edje_get(item->layout), "elm,state,show,delbtn", "elm");
+       else
+               edje_object_signal_emit(elm_layout_edje_get(item->layout), "elm,state,hide,delbtn", "elm");
 
        return item->layout;
 }
@@ -296,26 +334,17 @@ static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emis
        if (ad->clipdrawer->anim_status != STATUS_NONE)
                return;
 
-#define EDJE_CLOSE_PART_PREFIX "background/close"
+#define EDJE_CLOSE_PART_PREFIX "background/title/close"
+#define EDJE_DELETE_MODE_PREFIX "background/title/delete"
        if (!strncmp(source, EDJE_CLOSE_PART_PREFIX, strlen(EDJE_CLOSE_PART_PREFIX)))
        {
                clipdrawer_lower_view(ad);
        }
-}
-
-static void _grid_del_response_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       CNP_ITEM *item = data;
-       AppData *ad = item->ad;
-       ClipdrawerData *cd = ad->clipdrawer;
-
-       /* delete popup */
-       evas_object_del(obj);
-
-       if((int)event_info == ELM_POPUP_RESPONSE_OK)
+       else if (!strncmp(source, EDJE_DELETE_MODE_PREFIX, strlen(EDJE_DELETE_MODE_PREFIX)))
        {
-               item_delete_by_CNP_ITEM(ad, item);
+               _delete_mode_set(ad, !delete_mode);
        }
+
 }
 
 static void _grid_item_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
@@ -329,7 +358,7 @@ static void _grid_item_ly_clicked(void *data, Evas_Object *obj, const char *emis
 
        Elm_Object_Item *sgobj = NULL;
        sgobj = elm_gengrid_selected_item_get(cd->gengrid);
-       item = elm_gengrid_item_data_get(sgobj);
+       item = elm_object_item_data_get(sgobj);
 
        if (!sgobj || !item)
        {
@@ -342,6 +371,9 @@ static void _grid_item_ly_clicked(void *data, Evas_Object *obj, const char *emis
        {
                elm_gengrid_item_selected_set(sgobj, EINA_FALSE);
 
+               if (delete_mode)
+                       return;
+
                if (item->type_index != ATOM_INDEX_IMAGE || !cd->paste_text_only)
                {
                        set_selection_owner(ad, ECORE_X_SELECTION_SECONDARY, item);
@@ -351,16 +383,7 @@ static void _grid_item_ly_clicked(void *data, Evas_Object *obj, const char *emis
        {
                elm_gengrid_item_selected_set(sgobj, EINA_FALSE);
 
-               Evas_Object *popup = elm_popup_add(cd->main_win);
-               elm_popup_timeout_set(popup, 5);
-               evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               elm_popup_desc_set(popup, "Are you sure delete this?");
-               elm_popup_buttons_add(popup, 2,
-                               "Yes", ELM_POPUP_RESPONSE_OK,
-                               "No", ELM_POPUP_RESPONSE_CANCEL,
-                               NULL);
-               evas_object_smart_callback_add(popup, "response", _grid_del_response_cb, item);
-               evas_object_show(popup);
+               item_delete_by_CNP_ITEM(ad, item);
        }
 }
 
@@ -455,8 +478,13 @@ static void set_sliding_win_geometry(ClipdrawerData *cd)
                w = 0;
 
        DTRACE("[CBHM] change degree geometry... (%d, %d, %d x %d)\n", x, y, w, h);
-       ecore_x_e_illume_sliding_win_geometry_set(zone, x, y, w, h);
-       ecore_x_e_illume_sliding_win_state_set(zone, cd->anim_count != 0);
+       int clipboard_state;
+       if (cd->anim_count)
+               clipboard_state = ECORE_X_ILLUME_CLIPBOARD_STATE_ON;
+       else
+               clipboard_state = ECORE_X_ILLUME_CLIPBOARD_STATE_OFF;
+       ecore_x_e_illume_clipboard_geometry_set(zone, x, y, w, h);
+       ecore_x_e_illume_clipboard_state_set(zone, clipboard_state);
 }
 
 void set_rotation_to_clipdrawer(ClipdrawerData *cd)
@@ -614,6 +642,7 @@ static Eina_Bool anim_pos_calc_cb(void *data)
                        elm_win_lower(cd->main_win);
                        unset_transient_for(cd->x_main_win, ad->x_active_win);
                        stop_animation(ad);
+                       _delete_mode_set(ad, EINA_FALSE);
                        return EINA_FALSE;
                }
                _do_anim_delta_pos(cd, anim_start, anim_end, cd->anim_count, &delta);
@@ -658,9 +687,8 @@ void clipdrawer_activate_view(AppData* ad)
                cd->o_degree = get_active_window_degree(ad->x_active_win);
                elm_win_rotation_set(cd->main_win, cd->o_degree);
                set_rotation_to_clipdrawer(cd);
-       //      evas_object_show(cd->main_win);
+               evas_object_show(cd->main_win);
                elm_win_activate(cd->main_win);
-       //      if (clipdrawer_anim_effect(ad, SHOW_ANIM))
                clipdrawer_anim_effect(ad, SHOW_ANIM);
        }
 }
@@ -677,3 +705,33 @@ void clipdrawer_lower_view(AppData* ad)
                clipdrawer_anim_effect(ad, HIDE_ANIM);
        }
 }
+
+void _delete_mode_set(AppData* ad, Eina_Bool del_mode)
+{
+       ClipdrawerData *cd = ad->clipdrawer;
+       CNP_ITEM *item = NULL;
+
+       delete_mode = del_mode;
+       if (del_mode)
+       {
+               edje_object_signal_emit(elm_layout_edje_get(cd->main_layout), "elm,state,show,function", "elm");
+               edje_object_signal_emit(elm_layout_edje_get(cd->main_layout), "elm,state,hide,delmode", "elm");
+       }
+       else
+       {
+               edje_object_signal_emit(elm_layout_edje_get(cd->main_layout), "elm,state,hide,function", "elm");
+               edje_object_signal_emit(elm_layout_edje_get(cd->main_layout), "elm,state,show,delmode", "elm");
+       }
+
+       Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+       while (gitem)
+       {
+               item = elm_object_item_data_get(gitem);
+               if (del_mode)
+                       edje_object_signal_emit(elm_layout_edje_get(item->layout), "elm,state,show,delbtn", "elm");
+               else
+                       edje_object_signal_emit(elm_layout_edje_get(item->layout), "elm,state,hide,delbtn", "elm");
+
+               gitem = elm_gengrid_item_next_get(gitem);
+       }
+}