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);
+}
- for (i = 0; i < HISTORY_QUEUE_MAX_ITEMS; i++)
+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;
+
+ 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)
{
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)
{
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
{
DTRACE("ERR: cbhm image paste mode is false\n");
}
}
-
return;
}
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);
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);
struct appdata *ad = g_get_main_appdata();
- if (!clipdrawer_paste_textonly_get(ad))
- {
- 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);
- elm_layout_content_set(layout, "elm.swallow.cover", rect);
- }
+ if (clipdrawer_paste_textonly_get(ad))
+ edje_object_signal_emit(elm_layout_edje_get(layout), "elm,state,show,dim", "elm");
+ else
+ edje_object_signal_emit(elm_layout_edje_get(layout), "elm,state,hide,dim", "elm");
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;
}
return NULL;
Elm_Gengrid_Item *item = elm_gengrid_first_item_get(ad->hig);
- while (item)
+ while (item)
{
ti = elm_gengrid_item_data_get(item);
if (count == pos)
return ti->ipathdata;
}
count++;
- item = elm_gengrid_item_next_get(item);
+ item = elm_gengrid_item_next_get(item);
}
return NULL;
return -1;
}
- while (item)
+ while (item)
{
ti = elm_gengrid_item_data_get(item);
if ((ti->itype == type) && !strcmp(ti->ipathdata, idata))
DTRACE("Error : duplicated file path = %s\n", idata);
return -1;
}
- item = elm_gengrid_item_next_get(item);
+ item = elm_gengrid_item_next_get(item);
}
newgi->ipathdata = eina_stringshare_add(idata);
}
}
}
-void set_rotation_to_clipdrawer(void *data, int angle)
+static void set_sliding_win_geometry(void *data)
+{
+ struct appdata *ad = data;
+ Ecore_X_Window zone, xwin;
+ Evas_Coord x, y, w, h;
+ xwin = elm_win_xwindow_get(ad->win_main);
+ zone = ecore_x_e_illume_zone_get(xwin);
+ DTRACE("[CBHM] xwin:%x, zone:%x\n", xwin, zone);
+
+// ecore_evas_geometry_get(ecore_evas_ecore_evas_get(evas_object_evas_get(ad->win_main)), &x, &y, &w, &h);
+
+ if (ad->o_degree == 90 || ad->o_degree == 270)
+ {
+ h = ad->anim_count/30.0 * CLIPDRAWER_HEIGHT_LANDSCAPE;
+ x = 0;
+ y = ad->root_w - h;
+ w = ad->root_h;
+ }
+ else
+ {
+ h = ad->anim_count/30.0 * CLIPDRAWER_HEIGHT;
+ x = 0;
+ y = ad->root_h - h;
+ w = ad->root_w;
+ }
+
+ if (!h)
+ 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, ad->anim_count != 0);
+}
+
+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
{
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;
evas_object_resize(ad->win_main, wwidth, (int)wh);
evas_object_move(ad->win_main, wposx, (int)wy);
+ if (ad->anim_count == ANIM_DURATION)
+ set_sliding_win_geometry(data);
}
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);
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
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;
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;
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);
ecore_timer_del(anim_timer);
anim_timer = NULL;
}
+
+ set_sliding_win_geometry(data);
}
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);
{
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;
}
{
struct appdata *ad = data;
- Elm_Gengrid_Item *item;
griditem_t *ti = NULL;
- if (clipdrawer_paste_textonly_get(ad))
- { // textonly paste mode
- Elm_Gengrid_Item *item = elm_gengrid_first_item_get(ad->hig);
-
- while (item)
- {
- 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");
- 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);
- elm_layout_content_set(ti->ilayout, "elm.swallow.cover", rect);
- }
- item = elm_gengrid_item_next_get(item);
- }
- }
- else
- { // text+image paste mode
- Elm_Gengrid_Item *item = elm_gengrid_first_item_get(ad->hig);
+ Elm_Gengrid_Item *item = elm_gengrid_first_item_get(ad->hig);
- while (item)
+ while (item)
+ {
+ ti = elm_gengrid_item_data_get(item);
+ if ((ti->itype == GI_IMAGE) && (ti->ilayout))
{
- 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");
- Evas_Object *rect = elm_layout_content_unset(ti->ilayout, "elm.swallow.cover");
- evas_object_hide(rect);
- evas_object_del(rect);
- }
- item = elm_gengrid_item_next_get(item);
+ if (clipdrawer_paste_textonly_get(ad))
+ edje_object_signal_emit(elm_layout_edje_get(ti->ilayout), "elm,state,show,dim", "elm");
+ else
+ edje_object_signal_emit(elm_layout_edje_get(ti->ilayout), "elm,state,hide,dim", "elm");
}
+ item = elm_gengrid_item_next_get(item);
}
}