2 * gcc -o entry_example entry_example.c `pkg-config --cflags --libs elementary`
4 #include <Elementary.h>
6 # include "elementary_config.h"
8 # define __UNUSED__ __attribute__((unused))
14 Evas_Object *edit_buffer;
23 Evas_Object *naviframe;
24 >>>>>>> remotes/origin/upstream
26 Evas_Object *settings;
38 _edit_buffer_insert(Evas_Object *e, const char *text)
40 elm_entry_entry_insert(e, text);
44 elm_object_focus_set(e, EINA_TRUE);
45 >>>>>>> remotes/origin/upstream
49 _it_sel_cb(void *data, Evas_Object *obj __UNUSED__, void *event)
51 App_Inwin_Data *aid = data;
53 Elm_Gengrid_Item *it = event;
55 aid->emo = elm_gengrid_item_data_get(it);
57 elm_pager_content_promote(aid->pager, aid->settings);
59 Elm_Object_Item *gg_it = event;
61 aid->emo = elm_object_item_data_get(gg_it);
63 elm_naviframe_item_simple_promote(aid->naviframe, aid->settings);
64 >>>>>>> remotes/origin/upstream
68 _emo_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
74 _emo_content_get(void *data, Evas_Object *obj, const char *part)
78 if (strcmp(part, "elm.swallow.icon"))
80 o = elm_layout_add(obj);
81 elm_layout_theme_set(o, "entry/emoticon", data, "default");
86 _emo_del(void *data, Evas_Object *obj __UNUSED__)
92 _page_grid_add(Evas_Object *parent, App_Inwin_Data *aid)
97 static Elm_Gengrid_Item_Class it_class = {
107 theme = elm_theme_list_item_path_get("default", NULL);
108 if (!theme) return NULL;
109 emos = edje_file_collection_list(theme);
111 if (!emos) return NULL;
113 grid = elm_gengrid_add(parent);
114 elm_gengrid_item_size_set(grid, 64, 80);
115 evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
116 evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
118 EINA_LIST_FOREACH(emos, it, emo)
122 if (strncmp(emo, "elm/entry/emoticon/", 19))
124 sscanf(emo, "elm/entry/emoticon/%[^/]/default", name);
125 elm_gengrid_item_append(grid, &it_class, strdup(name), _it_sel_cb, aid);
127 edje_file_collection_list_free(emos);
133 _btn_insert_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
135 App_Inwin_Data *aid = data;
136 const char *size[] = {
141 const char *vsize[] = {
147 snprintf(buf, sizeof(buf), "<item %s=%dx%d vsize=%s href=emoticon/%s>"
148 "</item>", size[aid->size], aid->width, aid->height,
149 vsize[aid->vsize], aid->emo);
150 _edit_buffer_insert(aid->ad->edit_buffer, buf);
152 evas_object_del(aid->inwin);
156 _width_changed_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
158 App_Inwin_Data *aid = data;
160 aid->width = atoi(elm_object_text_get(obj));
164 _height_changed_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
166 App_Inwin_Data *aid = data;
168 aid->height = atoi(elm_object_text_get(obj));
172 _page_settings_add(Evas_Object *parent, App_Inwin_Data *aid)
174 Evas_Object *box, *sizeopts, *box2, *sizebox, *vsizebox,
175 *rsize, *rabsize, *rrelsize, *rvfull, *rvascent,
176 *fwidth, *ewidth, *fheight, *eheight,
179 static Elm_Entry_Filter_Accept_Set accept_set = {
180 .accepted = "0123456789",
183 static Elm_Entry_Filter_Limit_Size limit_size = {
188 box = elm_box_add(parent);
189 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
190 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
192 sizeopts = elm_frame_add(parent);
193 elm_object_text_set(sizeopts, "Size");
194 evas_object_size_hint_weight_set(sizeopts, EVAS_HINT_EXPAND, 0.0);
195 evas_object_size_hint_align_set(sizeopts, EVAS_HINT_FILL, EVAS_HINT_FILL);
196 elm_box_pack_end(box, sizeopts);
197 evas_object_show(sizeopts);
199 box2 = elm_box_add(parent);
200 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
201 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
202 elm_object_content_set(sizeopts, box2);
203 evas_object_show(box2);
205 sizebox = elm_box_add(parent);
206 elm_box_horizontal_set(sizebox, EINA_TRUE);
207 evas_object_size_hint_weight_set(sizebox, EVAS_HINT_EXPAND,
209 evas_object_size_hint_align_set(sizebox, EVAS_HINT_FILL, EVAS_HINT_FILL);
210 elm_box_pack_end(box2, sizebox);
211 evas_object_show(sizebox);
213 rsize = elm_radio_add(parent);
214 elm_object_text_set(rsize, "Scale adjusted (size)");
215 elm_radio_state_value_set(rsize, 0);
216 elm_radio_value_pointer_set(rsize, &aid->size);
217 elm_box_pack_end(sizebox, rsize);
218 evas_object_show(rsize);
220 rabsize = elm_radio_add(parent);
221 elm_object_text_set(rabsize, "Absolute size (absize)");
222 elm_radio_state_value_set(rabsize, 1);
223 elm_radio_value_pointer_set(rabsize, &aid->size);
224 elm_radio_group_add(rabsize, rsize);
225 elm_box_pack_end(sizebox, rabsize);
226 evas_object_show(rabsize);
228 rrelsize = elm_radio_add(parent);
229 elm_object_text_set(rrelsize, "Relative to line (relsize)");
230 elm_radio_state_value_set(rrelsize, 2);
231 elm_radio_value_pointer_set(rrelsize, &aid->size);
232 elm_radio_group_add(rrelsize, rsize);
233 elm_box_pack_end(sizebox, rrelsize);
234 evas_object_show(rrelsize);
236 vsizebox = elm_box_add(parent);
237 elm_box_horizontal_set(vsizebox, EINA_TRUE);
238 evas_object_size_hint_weight_set(vsizebox, EVAS_HINT_EXPAND,
240 evas_object_size_hint_align_set(vsizebox, EVAS_HINT_FILL, EVAS_HINT_FILL);
241 elm_box_pack_end(box2, vsizebox);
242 evas_object_show(vsizebox);
244 rvfull = elm_radio_add(parent);
245 elm_object_text_set(rvfull, "Full height (vsize=full)");
246 elm_radio_state_value_set(rvfull, 0);
247 elm_radio_value_pointer_set(rvfull, &aid->vsize);
248 elm_box_pack_end(vsizebox, rvfull);
249 evas_object_show(rvfull);
251 rvascent = elm_radio_add(parent);
252 elm_object_text_set(rvascent, "Ascent only (vsize=ascent)");
253 elm_radio_state_value_set(rvascent, 1);
254 elm_radio_value_pointer_set(rvascent, &aid->vsize);
255 elm_radio_group_add(rvascent, rvfull);
256 elm_box_pack_end(vsizebox, rvascent);
257 evas_object_show(rvascent);
259 fwidth = elm_frame_add(parent);
260 elm_object_text_set(fwidth, "Width");
261 evas_object_size_hint_weight_set(fwidth, EVAS_HINT_EXPAND, 0.0);
262 evas_object_size_hint_align_set(fwidth, EVAS_HINT_FILL, EVAS_HINT_FILL);
263 elm_box_pack_end(box2, fwidth);
264 evas_object_show(fwidth);
266 snprintf(buf, sizeof(buf), "%d", aid->width);
267 ewidth = elm_entry_add(parent);
268 elm_entry_single_line_set(ewidth, EINA_TRUE);
270 elm_entry_text_filter_append(ewidth, elm_entry_filter_accept_set,
272 elm_entry_text_filter_append(ewidth, elm_entry_filter_limit_size,
274 elm_entry_markup_filter_append(ewidth, elm_entry_filter_accept_set,
276 elm_entry_markup_filter_append(ewidth, elm_entry_filter_limit_size,
277 >>>>>>> remotes/origin/upstream
279 elm_object_text_set(ewidth, buf);
280 evas_object_size_hint_weight_set(ewidth, EVAS_HINT_EXPAND, 0.0);
281 evas_object_size_hint_align_set(ewidth, EVAS_HINT_FILL, EVAS_HINT_FILL);
282 elm_object_content_set(fwidth, ewidth);
283 evas_object_show(ewidth);
285 evas_object_smart_callback_add(ewidth, "changed", _width_changed_cb, aid);
287 fheight = elm_frame_add(parent);
288 elm_object_text_set(fheight, "Height");
289 evas_object_size_hint_weight_set(fheight, EVAS_HINT_EXPAND, 0.0);
290 evas_object_size_hint_align_set(fheight, EVAS_HINT_FILL, EVAS_HINT_FILL);
291 elm_box_pack_end(box2, fheight);
292 evas_object_show(fheight);
294 snprintf(buf, sizeof(buf), "%d", aid->height);
295 eheight = elm_entry_add(parent);
296 elm_entry_single_line_set(eheight, EINA_TRUE);
298 elm_entry_text_filter_append(eheight, elm_entry_filter_accept_set,
300 elm_entry_text_filter_append(eheight, elm_entry_filter_limit_size,
302 elm_entry_markup_filter_append(eheight, elm_entry_filter_accept_set,
304 elm_entry_markup_filter_append(eheight, elm_entry_filter_limit_size,
305 >>>>>>> remotes/origin/upstream
307 elm_object_text_set(eheight, buf);
308 evas_object_size_hint_weight_set(eheight, EVAS_HINT_EXPAND, 0.0);
309 evas_object_size_hint_align_set(eheight, EVAS_HINT_FILL, EVAS_HINT_FILL);
310 elm_object_content_set(fheight, eheight);
311 evas_object_show(eheight);
313 evas_object_smart_callback_add(eheight, "changed", _height_changed_cb, aid);
315 binsert = elm_button_add(parent);
316 elm_object_text_set(binsert, "Insert");
317 elm_box_pack_end(box, binsert);
318 evas_object_show(binsert);
320 evas_object_smart_callback_add(binsert, "clicked", _btn_insert_cb, aid);
326 _insert_cancel_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
328 App_Inwin_Data *aid = data;
330 evas_object_del(aid->inwin);
334 _inwin_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
340 _image_insert_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
345 Evas_Object *inwin, *box, *box2, *pager, *o;
347 Evas_Object *inwin, *box, *box2, *naviframe, *o;
348 >>>>>>> remotes/origin/upstream
350 aid = calloc(1, sizeof(App_Inwin_Data));
359 inwin = elm_win_inwin_add(ad->win);
360 evas_object_size_hint_weight_set(inwin, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
361 evas_object_size_hint_align_set(inwin, EVAS_HINT_FILL, EVAS_HINT_FILL);
362 evas_object_show(inwin);
364 evas_object_event_callback_add(inwin, EVAS_CALLBACK_DEL, _inwin_del_cb,
367 box = elm_box_add(ad->win);
368 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
369 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
370 elm_win_inwin_content_set(inwin, box);
371 evas_object_show(box);
374 pager = elm_pager_add(ad->win);
375 evas_object_size_hint_weight_set(pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
376 evas_object_size_hint_align_set(pager, EVAS_HINT_FILL, EVAS_HINT_FILL);
377 elm_box_pack_end(box, pager);
378 evas_object_show(pager);
380 o = _page_grid_add(ad->win, aid);
381 elm_pager_content_push(pager, o);
384 o = _page_settings_add(ad->win, aid);
385 elm_pager_content_push(pager, o);
388 elm_pager_content_promote(pager, aid->grid);
390 naviframe = elm_naviframe_add(ad->win);
391 evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
392 evas_object_size_hint_align_set(naviframe, EVAS_HINT_FILL, EVAS_HINT_FILL);
393 elm_box_pack_end(box, naviframe);
394 evas_object_show(naviframe);
396 o = _page_grid_add(ad->win, aid);
397 elm_naviframe_item_simple_push(naviframe, o);
400 o = _page_settings_add(ad->win, aid);
401 elm_naviframe_item_simple_push(naviframe, o);
404 elm_naviframe_item_simple_promote(naviframe, aid->grid);
405 >>>>>>> remotes/origin/upstream
407 box2 = elm_box_add(ad->win);
408 elm_box_horizontal_set(box2, EINA_TRUE);
409 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
410 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
411 elm_box_pack_end(box, box2);
412 evas_object_show(box2);
414 o = elm_button_add(ad->win);
415 elm_object_text_set(o, "Cancel");
416 evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
417 evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
418 elm_box_pack_end(box2, o);
421 evas_object_smart_callback_add(o, "clicked", _insert_cancel_cb, aid);
427 aid->naviframe = naviframe;
428 >>>>>>> remotes/origin/upstream
432 _format_change_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
435 char fmt_open[5], fmt_close[6];
439 const char *ptr, *what;
440 Eina_Strbuf *buf = NULL;
442 sel = elm_object_text_get(obj);
443 snprintf(fmt_open, sizeof(fmt_open), "<%s>", sel);
444 snprintf(fmt_close, sizeof(fmt_close), "</%s>", sel);
446 buf = eina_strbuf_new();
448 cursor = elm_entry_cursor_pos_get(ad->edit_buffer);
449 elm_entry_cursor_begin_set(ad->edit_buffer);
450 elm_entry_cursor_selection_begin(ad->edit_buffer);
451 elm_entry_cursor_pos_set(ad->edit_buffer, cursor);
452 elm_entry_cursor_selection_end(ad->edit_buffer);
453 sel = elm_entry_selection_get(ad->edit_buffer);
456 eina_strbuf_append(buf, fmt_open);
461 while ((s = strstr(ptr, what)))
463 ptr = s + strlen(what);
464 if (what == fmt_open) what = fmt_close;
465 else what = fmt_open;
467 eina_strbuf_append(buf, what);
468 if (what == fmt_close)
470 elm_entry_cursor_selection_begin(ad->edit_buffer);
471 elm_entry_cursor_end_set(ad->edit_buffer);
472 elm_entry_cursor_selection_end(ad->edit_buffer);
473 sel = elm_entry_selection_get(ad->edit_buffer);
476 Eina_Strbuf *buf2 = eina_strbuf_new();
477 eina_strbuf_append(buf2, sel);
478 eina_strbuf_replace_first(buf2, fmt_close, "");
479 elm_entry_entry_insert(ad->edit_buffer,
480 eina_strbuf_string_get(buf2));
481 eina_strbuf_free(buf2);
484 elm_entry_select_none(ad->edit_buffer);
485 elm_entry_cursor_pos_set(ad->edit_buffer, cursor);
488 _edit_buffer_insert(ad->edit_buffer, eina_strbuf_string_get(buf));
489 eina_strbuf_free(buf);
493 _autosave_change_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
496 Eina_Bool state = elm_check_state_get(obj);
498 elm_entry_autosave_set(ad->edit_buffer, state);
499 if (state) elm_entry_file_save(ad->edit_buffer);
503 _edit_dblclick_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
507 current_cursor = elm_entry_cursor_pos_get(obj);
509 while (elm_entry_cursor_prev(obj))
512 if (elm_entry_cursor_is_visible_format_get(obj))
514 content = elm_entry_cursor_content_get(obj);
515 if (content && (content[0] == ' '))
519 if (current_cursor == elm_entry_cursor_pos_get(obj))
522 elm_entry_cursor_next(obj);
523 elm_entry_cursor_selection_begin(obj);
524 elm_entry_cursor_pos_set(obj, current_cursor);
525 while (elm_entry_cursor_next(obj))
528 if (elm_entry_cursor_is_visible_format_get(obj))
530 content = elm_entry_cursor_content_get(obj);
531 if (content && (content[0] == ' '))
534 elm_entry_cursor_selection_end(obj);
538 _edit_tplclick_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
540 elm_entry_cursor_line_begin_set(obj);
541 elm_entry_cursor_selection_begin(obj);
542 elm_entry_cursor_line_end_set(obj);
543 elm_entry_cursor_selection_end(obj);
547 _win_del_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
549 evas_object_del(obj);
554 elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
556 Evas_Object *win, *bg, *box, *tb, *en, *o, *icon;
559 memset(&app, 0, sizeof(app));
561 win = elm_win_add(NULL, "entry-example", ELM_WIN_BASIC);
562 elm_win_title_set(win, "Emacs Lite");
563 evas_object_show(win);
565 bg = elm_bg_add(win);
566 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
567 elm_win_resize_object_add(win, bg);
568 evas_object_show(bg);
570 box = elm_box_add(win);
571 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
572 elm_win_resize_object_add(win, box);
573 evas_object_show(box);
575 tb = elm_box_add(win);
576 elm_box_horizontal_set(tb, EINA_TRUE);
577 evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0);
578 evas_object_size_hint_weight_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
579 elm_box_pack_end(box, tb);
580 evas_object_show(tb);
582 o = elm_check_add(win);
583 elm_check_state_set(o, EINA_FALSE);
584 elm_object_text_set(o, "Autosave");
585 elm_box_pack_end(tb, o);
588 evas_object_smart_callback_add(o, "changed", _autosave_change_cb, &app);
590 o = elm_button_add(win);
591 elm_object_text_set(o, "b");
592 elm_box_pack_end(tb, o);
595 evas_object_smart_callback_add(o, "clicked", _format_change_cb, &app);
597 o = elm_button_add(win);
598 elm_object_text_set(o, "em");
599 elm_box_pack_end(tb, o);
602 evas_object_smart_callback_add(o, "clicked", _format_change_cb, &app);
604 o = elm_button_add(win);
605 elm_box_pack_end(tb, o);
608 icon = elm_layout_add(win);
609 elm_layout_theme_set(icon, "entry", "emoticon/haha", "default");
610 elm_object_part_content_set(o, "icon", icon);
612 evas_object_smart_callback_add(o, "clicked", _image_insert_cb, &app);
614 en = elm_entry_add(win);
615 elm_entry_autosave_set(en, EINA_FALSE);
616 elm_entry_file_set(en, "/tmp/da_test.txt", ELM_TEXT_FORMAT_MARKUP_UTF8);
617 evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
618 evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
619 elm_box_pack_end(box, en);
620 evas_object_show(en);
623 app.edit_buffer = en;
625 evas_object_smart_callback_add(en, "clicked,double", _edit_dblclick_cb,
627 evas_object_smart_callback_add(en, "clicked,triple", _edit_tplclick_cb,
630 evas_object_smart_callback_add(win, "delete,request", _win_del_cb, &app);
633 elm_object_focus(app.edit_buffer);
635 elm_object_focus_set(app.edit_buffer, EINA_TRUE);
636 >>>>>>> remotes/origin/upstream
638 evas_object_resize(win, 300, 780);