[CQ:H0100126827] image's delete icon display when textonly
[framework/uifw/cbhm.git] / src / clipdrawer.c
index 03b73fb..1ee6af9 100644 (file)
@@ -36,38 +36,131 @@ typedef struct tag_griditem
        Evas_Object *ilayout;
 } griditem_t;
 
+const char *
+remove_tags(const char *p)
+{
+   char *q,*ret;
+   int i;
+   if (!p) return NULL;
+
+   q = malloc(strlen(p) + 1);
+   if (!q) return NULL;
+   ret = q;
+
+   while (*p)
+     {
+        if ((*p != '<')) *q++ = *p++;
+        else if (*p == '<')
+          {
+             if ((p[1] == 'b') && (p[2] == 'r') &&
+                 ((p[3] == ' ') || (p[3] == '/') || (p[3] == '>')))
+               *q++ = '\n';
+             while ((*p) && (*p != '>')) p++;
+             p++;
+          }
+     }
+   *q = 0;
+
+   return ret;
+}
 
-int clipdrawer_update_contents(void *data)
+const char* clipdrawer_get_plain_string_from_escaped(char *escstr)
 {
-       struct appdata *ad = data;
-       int i, pos;
-       char *unesc = NULL;
+       /* NOTE : return string should be freed */
+       return remove_tags(escstr);
+}
+
+static char* _get_string_for_entry(char *str)
+{
+       if (!str)
+               return NULL;
+
+       Eina_Strbuf *strbuf = eina_strbuf_new();
+       if (!strbuf)
+               return strdup(str);
+       eina_strbuf_prepend(strbuf, "<font_size=18>");
+
+       char *trail = str;
 
-       for (i = 0; i < HISTORY_QUEUE_MAX_ITEMS; i++)
+       while (trail && *trail)
        {
-               pos = get_current_history_position() - i;
-               if (pos < 0)
-                       pos = pos+HISTORY_QUEUE_MAX_ITEMS;
+               char *pretrail = trail;
+               unsigned long length;
+               char *temp;
+               char *endtag;
 
-               if (clipdrawer_get_item_data(ad, pos) != NULL && strlen(clipdrawer_get_item_data(ad, pos)) > 0)
+               trail = strchr(trail, '<');
+               if (!trail)
                {
-                       unesc = clipdrawer_get_plain_string_from_escaped(clipdrawer_get_item_data(ad, pos));
-                       unesc = unesc ? unesc : "";
-                       elm_list_item_append(ad->txtlist, unesc, NULL, NULL, NULL, ad);
-                       free(unesc);
+                       eina_strbuf_append(strbuf, pretrail);
+                       break;
                }
-       }
+               endtag = strchr(trail, '>');
+               if (!endtag)
+                       break;
 
-       /* FIXME : sometimes when list update, screen isn't updated */
+               length = trail - pretrail;
 
-       return 0;
-}
+               temp = strndup(pretrail, length);
+               if (!temp)
+               {
+                       trail++;
+                       continue;
+               }
 
-const char* clipdrawer_get_plain_string_from_escaped(char *escstr)
-{
-       /* TODO : is it should be here? besides, remove dependency for entry */
-       /* NOTE : return string should be freed */
-       return elm_entry_markup_to_utf8(escstr);
+               DTRACE("temp str: %s \n", temp);
+               eina_strbuf_append(strbuf, temp);
+               free(temp);
+               trail++;
+
+               if (trail[0] == '/')
+               {
+                       trail = endtag + 1;
+                       continue;
+               }
+
+               if (strncmp(trail, "br", 2) == 0)
+               {
+                       eina_strbuf_append(strbuf, "<br>");
+                       trail = endtag + 1;
+                       continue;
+               }
+
+               if (strncmp(trail, "img", 3) == 0)
+               {
+                       char *src = strstr(trail, "file://");
+                       char *src_endtag = strchr(trail, '>');
+                       if (!src || !src_endtag || src_endtag < src)
+                               continue;
+
+                       length = src_endtag - src;
+
+                       src = strndup(src, length);
+                       if (!src)
+                       {
+                               trail = endtag + 1;
+                               continue;
+                       }
+                       temp = src;
+                       while(*temp)
+                       {
+                               if (*temp == '\"' || *temp == '>')
+                                       *temp = '\0';
+                               else
+                                       temp++;
+                       }
+
+                       eina_strbuf_append_printf(strbuf, "<item absize=66x62 href=%s></item>", src);
+                       DTRACE("src str: %s \n", src);
+                       free(src);
+               }
+               trail = endtag + 1;
+       }
+
+       char *ret = eina_strbuf_string_steal(strbuf);
+       eina_strbuf_free(strbuf);
+       DTRACE("result str: %s \n", ret);
+       return ret;
 }
 
 static void _grid_del_response_cb(void *data, Evas_Object *obj, void *event_info)
@@ -128,7 +221,7 @@ _grid_item_ly_clicked(void *data, Evas_Object *obj, const char *emission, const
                {
                        char *p = strdup(eina_strbuf_string_get(ti->istrdata));
 
-                       elm_selection_set(1, obj, /*ELM_SEL_FORMAT_TEXT*/1, p);
+                       elm_selection_set(1, ad->hig, /*ELM_SEL_FORMAT_HTML*/0x10, p);
                }
                else //if (ti->itype == GI_IMAGE)
                {
@@ -138,7 +231,7 @@ _grid_item_ly_clicked(void *data, Evas_Object *obj, const char *emission, const
                                char *p = malloc(len + 10);
                                snprintf(p,len+10, "file:///%s", ti->ipathdata);
 
-                               elm_selection_set(/*secondary*/1,obj,/*ELM_SEL_FORMAT_IMAGE*/4,p);
+                               elm_selection_set(/*secondary*/1, ad->hig,/*ELM_SEL_FORMAT_IMAGE*/4,p);
                        }
                        else
                        {
@@ -188,7 +281,7 @@ Evas_Object* _grid_icon_get(const void *data, Evas_Object *obj, const char *part
                        elm_layout_content_set(layout, "elm.swallow.icon", rect);
 
                        // FIXME: add string length check
-                       Evas_Object *ientry = elm_scrolled_entry_add(obj);
+                       Evas_Object *ientry = elm_entry_add(obj);
                        evas_object_size_hint_weight_set(ientry, 0, 0);
                        Eina_Strbuf *strent = NULL;
                        char *strdata = eina_strbuf_string_get(ti->istrdata);
@@ -216,15 +309,19 @@ Evas_Object* _grid_icon_get(const void *data, Evas_Object *obj, const char *part
                                        break;
                        }
                        eina_strbuf_append_n(strent, strdata, i);
-//                     eina_strbuf_append(strent, strdata);
                        eina_strbuf_replace_all(strent, " absize=240x180 ", " absize=52x39 ");
                        if (strcnt > 100)
                                eina_strbuf_append(strent, "...");
-                       eina_strbuf_prepend(strent, "<font_size=18>");
-
-                       elm_scrolled_entry_entry_set(ientry, eina_strbuf_string_get(strent));
-                       elm_scrolled_entry_editable_set(ientry, EINA_FALSE);
-                       elm_scrolled_entry_context_menu_disabled_set(ientry, EINA_TRUE);
+                       elm_entry_scrollable_set(ientry, EINA_TRUE);
+                       char *entry_text = eina_strbuf_string_get(strent);
+                       entry_text = _get_string_for_entry(entry_text);
+                       if (entry_text)
+                       {
+                               elm_object_text_part_set(ientry, NULL, entry_text);
+                               free(entry_text);
+                       }
+                       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);
 
@@ -251,7 +348,7 @@ Evas_Object* _grid_icon_get(const void *data, Evas_Object *obj, const char *part
                        
                        if (!clipdrawer_paste_textonly_get(ad))
                        {
-                               edje_object_signal_emit(elm_layout_edje_get(layout), "elm,state,hide,delbtn", "elm");
+//                             edje_object_signal_emit(elm_layout_edje_get(layout), "elm,state,hide,delbtn", "elm");
                                Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
                                evas_object_color_set(rect, 0, 0, 0, 200);
                                evas_object_show(rect);
@@ -260,74 +357,9 @@ Evas_Object* _grid_icon_get(const void *data, Evas_Object *obj, const char *part
 
                        ti->ilayout = layout;
                        return layout;
-
-/*
-                       Evas_Object *icon = elm_icon_add(obj);
-                       elm_icon_file_set(icon, ti->ipathdata, NULL);
-                       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-                       evas_object_show(icon);
-*/
-
-/*
-                       Ecore_Evas *my_ee;
-                       Evas *my_e;
-                       Evas_Object *fgimg;
-                       Evas_Object *bgrect;
-                       Evas_Object *delbtn;
-                       Evas_Object *icon;
-                       my_ee = ecore_evas_buffer_new(GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
-                       my_e = ecore_evas_get(my_ee);
-
-                       bgrect = evas_object_rectangle_add(my_e);
-                       evas_object_color_set(bgrect, 255, 255, 255, 255);
-                       evas_object_resize(bgrect, GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
-                       evas_object_move(bgrect, 0, 0);
-                       evas_object_show(bgrect);
-
-#define BORDER_SIZE 1
-                       fgimg = evas_object_image_add(my_e);
-                       evas_object_image_load_size_set(fgimg, GRID_ITEM_SINGLE_W-BORDER_SIZE*2, GRID_ITEM_SINGLE_H-BORDER_SIZE*2);
-                       evas_object_image_file_set(fgimg, ti->ipathdata, NULL);
-                       evas_object_image_fill_set(fgimg, 0, 0, GRID_ITEM_SINGLE_W-BORDER_SIZE*2, GRID_ITEM_SINGLE_H-BORDER_SIZE*2);
-                       evas_object_image_filled_set(fgimg, 1);
-                       int x,y;
-                       evas_object_image_size_get(fgimg, &x, &y);
-                       //fprintf(stderr, "## img x = %d, y = %d\n", x, y);
-                       evas_object_resize(fgimg, GRID_ITEM_SINGLE_W-BORDER_SIZE*2, GRID_ITEM_SINGLE_H-BORDER_SIZE*2);
-                       evas_object_move(fgimg, BORDER_SIZE, BORDER_SIZE);
-                       evas_object_show(fgimg);
-
-                       icon = evas_object_image_add(evas_object_evas_get(obj));
-
-                       evas_object_image_data_set(icon, NULL);
-                       evas_object_image_size_set(icon, GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
-                       evas_object_image_fill_set(icon, 0, 0, GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
-                       evas_object_image_filled_set(icon, EINA_TRUE);
-                       evas_object_image_data_copy_set(icon, (int *)ecore_evas_buffer_pixels_get(my_ee));
-                       evas_object_image_data_update_add(icon, 0, 0, GRID_ITEM_SINGLE_W, GRID_ITEM_SINGLE_H);
-
-                       evas_object_del(bgrect);
-                       evas_object_del(fgimg);
-                       ecore_evas_free(my_ee);
-
-                       return icon;
-*/
                }
-
-//             return icon;
        }
-/*
-       else if (!strcmp(part, "elm.swallow.end"))
-       {
-               ti->delbtn = elm_check_add(obj);
-               elm_object_style_set(ti->delbtn, "extended/itemcheck");
-               //evas_object_propagate_events_set(ti->delbtn, 0);
-               elm_check_state_set(ti->delbtn, tcm);
-               evas_object_smart_callback_add(ti->delbtn, "changed", _grid_item_check_changed, data);
-               evas_object_show(ti->delbtn);
-               return ti->delbtn;
-       }
-*/
+
        return NULL;
 }
 
@@ -456,11 +488,12 @@ clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const
        }
 }
 
-void set_rotation_to_clipdrawer(void *data, int angle)
+void set_rotation_to_clipdrawer(void *data)
 {
        struct appdata *ad = data;
        double wh, wy;
        int wposx, wwidth;
+       int angle = ad->o_degree;
 
        if (angle == 180) // reverse
        {
@@ -476,7 +509,7 @@ void set_rotation_to_clipdrawer(void *data, int angle)
                wwidth = ad->root_h;
                wposx = CLIPDRAWER_WIDTH-CLIPDRAWER_HEIGHT_LANDSCAPE;
        }
-       else if (angle == -90) // left rotate
+       else if (angle == 270) // left rotate
        {
                wh = (1.0*CLIPDRAWER_HEIGHT_LANDSCAPE/SCREEN_WIDTH)*ad->root_w;
                wy = (1.0*CLIPDRAWER_POS_X/SCREEN_WIDTH)*ad->root_w;
@@ -509,8 +542,6 @@ int clipdrawer_init(void *data)
        // for elm_check
        elm_theme_extension_add(NULL, APP_EDJ_FILE);
 
-       set_rotation_to_clipdrawer(ad, get_rotation_degree());
-
        edje_object_signal_callback_add(elm_layout_edje_get(ad->ly_main), 
                                                                        "mouse,up,1", "*", clipdrawer_ly_clicked, ad);
 
@@ -582,7 +613,7 @@ Eina_Bool _get_anim_pos(void *data, int *sp, int *ep)
                return EINA_FALSE;
 
        struct appdata *ad = data;
-       int angle = get_rotation_degree();
+       int angle = ad->o_degree;
        int anim_start, anim_end, delta;
 
        if (angle == 180) // reverse
@@ -598,7 +629,7 @@ Eina_Bool _get_anim_pos(void *data, int *sp, int *ep)
                anim_end = (int)(((double)CLIPDRAWER_HEIGHT_LANDSCAPE/SCREEN_WIDTH)*ad->root_w);
                anim_end = anim_start-anim_end;
        }
-       else if (angle == -90) // left rotate
+       else if (angle == 270) // left rotate
        {
                anim_start = (int)(((double)CLIPDRAWER_HEIGHT_LANDSCAPE/SCREEN_WIDTH)*ad->root_w);
                anim_start = ad->root_w-anim_start;
@@ -623,7 +654,7 @@ Eina_Bool _do_anim_delta_pos(void *data, int sp, int ep, int ac, int *dp)
                return EINA_FALSE;
 
        struct appdata *ad = data;
-       int angle = get_rotation_degree();
+       int angle = ad->o_degree;
        int delta;
        double posprop;
        posprop = 1.0*ac/ANIM_DURATION;
@@ -638,7 +669,7 @@ Eina_Bool _do_anim_delta_pos(void *data, int sp, int ep, int ac, int *dp)
                delta = (int)((ep-sp)*posprop);
                evas_object_move(ad->win_main, sp+delta, 0);
        }
-       else if (angle == -90) // left rotate
+       else if (angle == 270) // left rotate
        {
                delta = (int)((ep-sp)*posprop);
                evas_object_move(ad->win_main, sp+delta, 0);
@@ -694,7 +725,6 @@ Eina_Bool anim_pos_calc_cb(void *data)
                        elm_win_lower(ad->win_main);
                        unset_transient_for(ad);
                        stop_animation(data);
-                       //set_focus_for_app_window(ad->win_main, EINA_FALSE);
                        return EINA_FALSE;
                }
                _do_anim_delta_pos(ad, anim_start, anim_end, ad->anim_count, &delta);
@@ -733,13 +763,14 @@ void clipdrawer_activate_view(void *data)
 {
        struct appdata *ad = data;
 
-       set_focus_for_app_window(ad->win_main, EINA_TRUE);
        if (ad->win_main)
        {
                set_transient_for(ad);
+               ad->o_degree = get_active_window_degree(ad->active_win);
+               elm_win_rotation_set(ad->win_main, ad->o_degree);
+               set_rotation_to_clipdrawer(data);
                evas_object_show(ad->win_main);
                elm_win_activate(ad->win_main);
-//             elm_win_raise(ad->win_main);
                if (clipdrawer_anim_effect(ad, SHOW_ANIM))
                        ad->windowshow = EINA_TRUE;
        }
@@ -772,7 +803,7 @@ void _change_gengrid_paste_textonly_mode(void *data)
                        ti = elm_gengrid_item_data_get(item);
                        if ((ti->itype == GI_IMAGE) && (ti->ilayout))
                        {
-                               edje_object_signal_emit(elm_layout_edje_get(ti->ilayout), "elm,state,hide,delbtn", "elm");
+//                             edje_object_signal_emit(elm_layout_edje_get(ti->ilayout), "elm,state,hide,delbtn", "elm");
                                Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(ad->hig));
                                evas_object_color_set(rect, 0, 0, 0, 200);
                                evas_object_show(rect);
@@ -790,7 +821,7 @@ void _change_gengrid_paste_textonly_mode(void *data)
                        ti = elm_gengrid_item_data_get(item);
                        if ((ti->itype == GI_IMAGE) && (ti->ilayout))
                        {
-                               edje_object_signal_emit(elm_layout_edje_get(ti->ilayout), "elm,state,show,delbtn", "elm");
+//                             edje_object_signal_emit(elm_layout_edje_get(ti->ilayout), "elm,state,show,delbtn", "elm");
                                Evas_Object *rect = elm_layout_content_unset(ti->ilayout, "elm.swallow.cover");
                                evas_object_hide(rect);
                                evas_object_del(rect);