2 * gcc -o entry_example entry_example.c `pkg-config --cflags --libs elementary`
4 #include <Elementary.h>
9 Evas_Object *edit_buffer;
15 Evas_Object *naviframe;
17 Evas_Object *settings;
29 _edit_buffer_insert(Evas_Object *e, const char *text)
31 elm_entry_entry_insert(e, text);
32 elm_object_focus_set(e, EINA_TRUE);
36 _it_sel_cb(void *data, Evas_Object *obj, void *event)
38 App_Inwin_Data *aid = data;
39 Elm_Object_Item *gg_it = event;
41 aid->emo = elm_object_item_data_get(gg_it);
43 elm_naviframe_item_simple_promote(aid->naviframe, aid->settings);
47 _emo_label_get(void *data, Evas_Object *obj, const char *part)
53 _emo_content_get(void *data, Evas_Object *obj, const char *part)
57 if (strcmp(part, "elm.swallow.icon"))
59 o = elm_layout_add(obj);
60 elm_layout_theme_set(o, "entry/emoticon", data, "default");
65 _emo_del(void *data, Evas_Object *obj)
71 _page_grid_add(Evas_Object *parent, App_Inwin_Data *aid)
76 static Elm_Gengrid_Item_Class *it_class;
77 it_class = elm_gengrid_item_class_new();
78 it_class->item_style = "default";
79 it_class->func.text_get = _emo_label_get;
80 it_class->func.content_get = _emo_content_get;
81 it_class->func.del = _emo_del;
83 theme = elm_theme_list_item_path_get("default", NULL);
84 if (!theme) return NULL;
85 emos = edje_file_collection_list(theme);
87 if (!emos) return NULL;
89 grid = elm_gengrid_add(parent);
90 elm_gengrid_item_size_set(grid, 64, 80);
91 evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
92 evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
94 EINA_LIST_FOREACH(emos, it, emo)
98 if (strncmp(emo, "elm/entry/emoticon/", 19))
100 sscanf(emo, "elm/entry/emoticon/%[^/]/default", name);
101 elm_gengrid_item_append(grid, it_class, strdup(name), _it_sel_cb, aid);
103 edje_file_collection_list_free(emos);
104 elm_gengrid_item_class_free(it_class);
110 _btn_insert_cb(void *data, Evas_Object *obj, void *event)
112 App_Inwin_Data *aid = data;
113 const char *size[] = {
118 const char *vsize[] = {
124 snprintf(buf, sizeof(buf), "<item %s=%dx%d vsize=%s href=emoticon/%s>"
125 "</item>", size[aid->size], aid->width, aid->height,
126 vsize[aid->vsize], aid->emo);
127 _edit_buffer_insert(aid->ad->edit_buffer, buf);
129 evas_object_del(aid->inwin);
133 _width_changed_cb(void *data, Evas_Object *obj, void *event)
135 App_Inwin_Data *aid = data;
137 aid->width = atoi(elm_object_text_get(obj));
141 _height_changed_cb(void *data, Evas_Object *obj, void *event)
143 App_Inwin_Data *aid = data;
145 aid->height = atoi(elm_object_text_get(obj));
149 _page_settings_add(Evas_Object *parent, App_Inwin_Data *aid)
151 Evas_Object *box, *sizeopts, *box2, *sizebox, *vsizebox,
152 *rsize, *rabsize, *rrelsize, *rvfull, *rvascent,
153 *fwidth, *ewidth, *fheight, *eheight,
156 static Elm_Entry_Filter_Accept_Set accept_set = {
157 .accepted = "0123456789",
160 static Elm_Entry_Filter_Limit_Size limit_size = {
165 box = elm_box_add(parent);
166 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
167 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
169 sizeopts = elm_frame_add(parent);
170 elm_object_text_set(sizeopts, "Size");
171 evas_object_size_hint_weight_set(sizeopts, EVAS_HINT_EXPAND, 0.0);
172 evas_object_size_hint_align_set(sizeopts, EVAS_HINT_FILL, EVAS_HINT_FILL);
173 elm_box_pack_end(box, sizeopts);
174 evas_object_show(sizeopts);
176 box2 = elm_box_add(parent);
177 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
178 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
179 elm_object_content_set(sizeopts, box2);
180 evas_object_show(box2);
182 sizebox = elm_box_add(parent);
183 elm_box_horizontal_set(sizebox, EINA_TRUE);
184 evas_object_size_hint_weight_set(sizebox, EVAS_HINT_EXPAND,
186 evas_object_size_hint_align_set(sizebox, EVAS_HINT_FILL, EVAS_HINT_FILL);
187 elm_box_pack_end(box2, sizebox);
188 evas_object_show(sizebox);
190 rsize = elm_radio_add(parent);
191 elm_object_text_set(rsize, "Scale adjusted (size)");
192 elm_radio_state_value_set(rsize, 0);
193 elm_radio_value_pointer_set(rsize, &aid->size);
194 elm_box_pack_end(sizebox, rsize);
195 evas_object_show(rsize);
197 rabsize = elm_radio_add(parent);
198 elm_object_text_set(rabsize, "Absolute size (absize)");
199 elm_radio_state_value_set(rabsize, 1);
200 elm_radio_value_pointer_set(rabsize, &aid->size);
201 elm_radio_group_add(rabsize, rsize);
202 elm_box_pack_end(sizebox, rabsize);
203 evas_object_show(rabsize);
205 rrelsize = elm_radio_add(parent);
206 elm_object_text_set(rrelsize, "Relative to line (relsize)");
207 elm_radio_state_value_set(rrelsize, 2);
208 elm_radio_value_pointer_set(rrelsize, &aid->size);
209 elm_radio_group_add(rrelsize, rsize);
210 elm_box_pack_end(sizebox, rrelsize);
211 evas_object_show(rrelsize);
213 vsizebox = elm_box_add(parent);
214 elm_box_horizontal_set(vsizebox, EINA_TRUE);
215 evas_object_size_hint_weight_set(vsizebox, EVAS_HINT_EXPAND,
217 evas_object_size_hint_align_set(vsizebox, EVAS_HINT_FILL, EVAS_HINT_FILL);
218 elm_box_pack_end(box2, vsizebox);
219 evas_object_show(vsizebox);
221 rvfull = elm_radio_add(parent);
222 elm_object_text_set(rvfull, "Full height (vsize=full)");
223 elm_radio_state_value_set(rvfull, 0);
224 elm_radio_value_pointer_set(rvfull, &aid->vsize);
225 elm_box_pack_end(vsizebox, rvfull);
226 evas_object_show(rvfull);
228 rvascent = elm_radio_add(parent);
229 elm_object_text_set(rvascent, "Ascent only (vsize=ascent)");
230 elm_radio_state_value_set(rvascent, 1);
231 elm_radio_value_pointer_set(rvascent, &aid->vsize);
232 elm_radio_group_add(rvascent, rvfull);
233 elm_box_pack_end(vsizebox, rvascent);
234 evas_object_show(rvascent);
236 fwidth = elm_frame_add(parent);
237 elm_object_text_set(fwidth, "Width");
238 evas_object_size_hint_weight_set(fwidth, EVAS_HINT_EXPAND, 0.0);
239 evas_object_size_hint_align_set(fwidth, EVAS_HINT_FILL, EVAS_HINT_FILL);
240 elm_box_pack_end(box2, fwidth);
241 evas_object_show(fwidth);
243 snprintf(buf, sizeof(buf), "%d", aid->width);
244 ewidth = elm_entry_add(parent);
245 elm_entry_single_line_set(ewidth, EINA_TRUE);
246 elm_entry_markup_filter_append(ewidth, elm_entry_filter_accept_set,
248 elm_entry_markup_filter_append(ewidth, elm_entry_filter_limit_size,
250 elm_object_text_set(ewidth, buf);
251 evas_object_size_hint_weight_set(ewidth, EVAS_HINT_EXPAND, 0.0);
252 evas_object_size_hint_align_set(ewidth, EVAS_HINT_FILL, EVAS_HINT_FILL);
253 elm_object_content_set(fwidth, ewidth);
254 evas_object_show(ewidth);
256 evas_object_smart_callback_add(ewidth, "changed", _width_changed_cb, aid);
258 fheight = elm_frame_add(parent);
259 elm_object_text_set(fheight, "Height");
260 evas_object_size_hint_weight_set(fheight, EVAS_HINT_EXPAND, 0.0);
261 evas_object_size_hint_align_set(fheight, EVAS_HINT_FILL, EVAS_HINT_FILL);
262 elm_box_pack_end(box2, fheight);
263 evas_object_show(fheight);
265 snprintf(buf, sizeof(buf), "%d", aid->height);
266 eheight = elm_entry_add(parent);
267 elm_entry_single_line_set(eheight, EINA_TRUE);
268 elm_entry_markup_filter_append(eheight, elm_entry_filter_accept_set,
270 elm_entry_markup_filter_append(eheight, elm_entry_filter_limit_size,
272 elm_object_text_set(eheight, buf);
273 evas_object_size_hint_weight_set(eheight, EVAS_HINT_EXPAND, 0.0);
274 evas_object_size_hint_align_set(eheight, EVAS_HINT_FILL, EVAS_HINT_FILL);
275 elm_object_content_set(fheight, eheight);
276 evas_object_show(eheight);
278 evas_object_smart_callback_add(eheight, "changed", _height_changed_cb, aid);
280 binsert = elm_button_add(parent);
281 elm_object_text_set(binsert, "Insert");
282 elm_box_pack_end(box, binsert);
283 evas_object_show(binsert);
285 evas_object_smart_callback_add(binsert, "clicked", _btn_insert_cb, aid);
291 _insert_cancel_cb(void *data, Evas_Object *obj, void *event)
293 App_Inwin_Data *aid = data;
295 evas_object_del(aid->inwin);
299 _inwin_del_cb(void *data, Evas *e, Evas_Object *obj, void *event)
305 _image_insert_cb(void *data, Evas_Object *obj, void *event)
309 Evas_Object *inwin, *box, *box2, *naviframe, *o;
311 aid = calloc(1, sizeof(App_Inwin_Data));
320 inwin = elm_win_inwin_add(ad->win);
321 evas_object_size_hint_weight_set(inwin, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
322 evas_object_size_hint_align_set(inwin, EVAS_HINT_FILL, EVAS_HINT_FILL);
323 evas_object_show(inwin);
325 evas_object_event_callback_add(inwin, EVAS_CALLBACK_DEL, _inwin_del_cb,
328 box = elm_box_add(ad->win);
329 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
330 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
331 elm_win_inwin_content_set(inwin, box);
332 evas_object_show(box);
334 naviframe = elm_naviframe_add(ad->win);
335 evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
336 evas_object_size_hint_align_set(naviframe, EVAS_HINT_FILL, EVAS_HINT_FILL);
337 elm_box_pack_end(box, naviframe);
338 evas_object_show(naviframe);
340 o = _page_grid_add(ad->win, aid);
341 elm_naviframe_item_simple_push(naviframe, o);
344 o = _page_settings_add(ad->win, aid);
345 elm_naviframe_item_simple_push(naviframe, o);
348 elm_naviframe_item_simple_promote(naviframe, aid->grid);
350 box2 = elm_box_add(ad->win);
351 elm_box_horizontal_set(box2, EINA_TRUE);
352 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
353 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
354 elm_box_pack_end(box, box2);
355 evas_object_show(box2);
357 o = elm_button_add(ad->win);
358 elm_object_text_set(o, "Cancel");
359 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
360 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
361 elm_box_pack_end(box2, o);
364 evas_object_smart_callback_add(o, "clicked", _insert_cancel_cb, aid);
367 aid->naviframe = naviframe;
371 _format_change_cb(void *data, Evas_Object *obj, void *event)
374 char fmt_open[5], fmt_close[6];
378 const char *ptr, *what;
379 Eina_Strbuf *buf = NULL;
381 sel = elm_object_text_get(obj);
382 snprintf(fmt_open, sizeof(fmt_open), "<%s>", sel);
383 snprintf(fmt_close, sizeof(fmt_close), "</%s>", sel);
385 buf = eina_strbuf_new();
387 cursor = elm_entry_cursor_pos_get(ad->edit_buffer);
388 elm_entry_cursor_begin_set(ad->edit_buffer);
389 elm_entry_cursor_selection_begin(ad->edit_buffer);
390 elm_entry_cursor_pos_set(ad->edit_buffer, cursor);
391 elm_entry_cursor_selection_end(ad->edit_buffer);
392 sel = elm_entry_selection_get(ad->edit_buffer);
395 eina_strbuf_append(buf, fmt_open);
400 while ((s = strstr(ptr, what)))
402 ptr = s + strlen(what);
403 if (what == fmt_open) what = fmt_close;
404 else what = fmt_open;
406 eina_strbuf_append(buf, what);
407 if (what == fmt_close)
409 elm_entry_cursor_selection_begin(ad->edit_buffer);
410 elm_entry_cursor_end_set(ad->edit_buffer);
411 elm_entry_cursor_selection_end(ad->edit_buffer);
412 sel = elm_entry_selection_get(ad->edit_buffer);
415 Eina_Strbuf *buf2 = eina_strbuf_new();
416 eina_strbuf_append(buf2, sel);
417 eina_strbuf_replace_first(buf2, fmt_close, "");
418 elm_entry_entry_insert(ad->edit_buffer,
419 eina_strbuf_string_get(buf2));
420 eina_strbuf_free(buf2);
423 elm_entry_select_none(ad->edit_buffer);
424 elm_entry_cursor_pos_set(ad->edit_buffer, cursor);
427 _edit_buffer_insert(ad->edit_buffer, eina_strbuf_string_get(buf));
428 eina_strbuf_free(buf);
432 _autosave_change_cb(void *data, Evas_Object *obj, void *event)
435 Eina_Bool state = elm_check_state_get(obj);
437 elm_entry_autosave_set(ad->edit_buffer, state);
438 if (state) elm_entry_file_save(ad->edit_buffer);
442 _edit_dblclick_cb(void *data, Evas_Object *obj, void *event)
446 current_cursor = elm_entry_cursor_pos_get(obj);
448 while (elm_entry_cursor_prev(obj))
451 if (elm_entry_cursor_is_visible_format_get(obj))
453 content = elm_entry_cursor_content_get(obj);
454 if (content && (content[0] == ' '))
458 if (current_cursor == elm_entry_cursor_pos_get(obj))
461 elm_entry_cursor_next(obj);
462 elm_entry_cursor_selection_begin(obj);
463 elm_entry_cursor_pos_set(obj, current_cursor);
464 while (elm_entry_cursor_next(obj))
467 if (elm_entry_cursor_is_visible_format_get(obj))
469 content = elm_entry_cursor_content_get(obj);
470 if (content && (content[0] == ' '))
473 elm_entry_cursor_selection_end(obj);
477 _edit_tplclick_cb(void *data, Evas_Object *obj, void *event)
479 elm_entry_cursor_line_begin_set(obj);
480 elm_entry_cursor_selection_begin(obj);
481 elm_entry_cursor_line_end_set(obj);
482 elm_entry_cursor_selection_end(obj);
486 _win_del_cb(void *data, Evas_Object *obj, void *event)
488 evas_object_del(obj);
493 elm_main(int argc, char *argv[])
495 Evas_Object *win, *bg, *box, *tb, *en, *o, *icon;
498 memset(&app, 0, sizeof(app));
500 win = elm_win_add(NULL, "entry-example", ELM_WIN_BASIC);
501 elm_win_title_set(win, "Emacs Lite");
502 evas_object_show(win);
504 bg = elm_bg_add(win);
505 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
506 elm_win_resize_object_add(win, bg);
507 evas_object_show(bg);
509 box = elm_box_add(win);
510 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
511 elm_win_resize_object_add(win, box);
512 evas_object_show(box);
514 tb = elm_box_add(win);
515 elm_box_horizontal_set(tb, EINA_TRUE);
516 evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0);
517 evas_object_size_hint_weight_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
518 elm_box_pack_end(box, tb);
519 evas_object_show(tb);
521 o = elm_check_add(win);
522 elm_check_state_set(o, EINA_FALSE);
523 elm_object_text_set(o, "Autosave");
524 elm_box_pack_end(tb, o);
527 evas_object_smart_callback_add(o, "changed", _autosave_change_cb, &app);
529 o = elm_button_add(win);
530 elm_object_text_set(o, "b");
531 elm_box_pack_end(tb, o);
534 evas_object_smart_callback_add(o, "clicked", _format_change_cb, &app);
536 o = elm_button_add(win);
537 elm_object_text_set(o, "em");
538 elm_box_pack_end(tb, o);
541 evas_object_smart_callback_add(o, "clicked", _format_change_cb, &app);
543 o = elm_button_add(win);
544 elm_box_pack_end(tb, o);
547 icon = elm_layout_add(win);
548 elm_layout_theme_set(icon, "entry", "emoticon/haha", "default");
549 elm_object_part_content_set(o, "icon", icon);
551 evas_object_smart_callback_add(o, "clicked", _image_insert_cb, &app);
553 en = elm_entry_add(win);
554 elm_entry_autosave_set(en, EINA_FALSE);
555 elm_entry_file_set(en, "/tmp/da_test.txt", ELM_TEXT_FORMAT_MARKUP_UTF8);
556 evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
557 evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
558 elm_box_pack_end(box, en);
559 evas_object_show(en);
562 app.edit_buffer = en;
564 evas_object_smart_callback_add(en, "clicked,double", _edit_dblclick_cb,
566 evas_object_smart_callback_add(en, "clicked,triple", _edit_tplclick_cb,
569 evas_object_smart_callback_add(win, "delete,request", _win_del_cb, &app);
571 elm_object_focus_set(app.edit_buffer, EINA_TRUE);
573 evas_object_resize(win, 300, 780);