2016-06-11 03:59:34 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
#include <Elementary.h>
|
|
|
|
|
|
|
|
static Evas_Object *_test_code_win_create(const char *id, const char *name)
|
|
|
|
{
|
|
|
|
Evas_Object *win;
|
|
|
|
|
|
|
|
win = elm_win_add(NULL, id, ELM_WIN_BASIC);
|
|
|
|
elm_win_title_set(win, name);
|
|
|
|
elm_win_autodel_set(win, EINA_TRUE);
|
|
|
|
|
|
|
|
evas_object_resize(win, 360 * elm_config_scale_get(), 220 * elm_config_scale_get());
|
|
|
|
return win;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void _append_line(Elm_Code_File *file, const char *line)
|
|
|
|
{
|
|
|
|
int length;
|
|
|
|
|
|
|
|
length = strlen(line);
|
|
|
|
elm_code_file_line_append(file, line, length, NULL);
|
|
|
|
}
|
|
|
|
|
2016-06-20 07:31:31 -07:00
|
|
|
static void
|
2016-06-11 03:59:34 -07:00
|
|
|
_elm_code_test_line_clicked_cb(void *data EINA_UNUSED, const Eo_Event *event)
|
|
|
|
{
|
|
|
|
Elm_Code_Line *line;
|
|
|
|
|
|
|
|
line = (Elm_Code_Line *)event->info;
|
|
|
|
|
|
|
|
printf("CLICKED line %d\n", line->number);
|
|
|
|
}
|
|
|
|
|
2016-06-20 07:31:31 -07:00
|
|
|
static void
|
2016-06-11 03:59:34 -07:00
|
|
|
_elm_code_test_line_done_cb(void *data EINA_UNUSED, const Eo_Event *event)
|
|
|
|
{
|
|
|
|
Elm_Code_Line *line;
|
|
|
|
|
|
|
|
line = (Elm_Code_Line *)event->info;
|
|
|
|
|
|
|
|
if (line->number == 1)
|
|
|
|
elm_code_line_token_add(line, 17, 24, 1, ELM_CODE_TOKEN_TYPE_COMMENT);
|
|
|
|
else if (line->number == 4)
|
|
|
|
line->status = ELM_CODE_STATUS_TYPE_ERROR;
|
|
|
|
|
2016-08-10 07:23:04 -07:00
|
|
|
efl_event_callback_stop(event->object);
|
2016-06-11 03:59:34 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
|
|
|
_elm_code_test_welcome_setup(Evas_Object *parent)
|
|
|
|
{
|
|
|
|
Elm_Code *code;
|
|
|
|
Elm_Code_Widget *widget;
|
|
|
|
|
|
|
|
code = elm_code_create();
|
|
|
|
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent, elm_obj_code_widget_code_set(eo_self, code));
|
|
|
|
elm_obj_code_widget_font_set(widget, NULL, 12);
|
2016-08-10 07:23:04 -07:00
|
|
|
efl_event_callback_add(widget, &ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_test_line_done_cb, NULL);
|
|
|
|
efl_event_callback_add(widget, ELM_OBJ_CODE_WIDGET_EVENT_LINE_CLICKED, _elm_code_test_line_clicked_cb, code);
|
2016-06-11 03:59:34 -07:00
|
|
|
|
|
|
|
_append_line(code->file, "❤ Hello World, Elm Code! ❤");
|
|
|
|
_append_line(code->file, "");
|
|
|
|
_append_line(code->file, "This is a demo of elm_code's capabilities.");
|
|
|
|
_append_line(code->file, "⚑ *** Currently experimental ***");
|
|
|
|
|
|
|
|
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_show(widget);
|
|
|
|
|
|
|
|
elm_code_widget_selection_start(widget, 1, 3);
|
|
|
|
elm_code_widget_selection_end(widget, 1, 13);
|
|
|
|
|
|
|
|
return widget;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
|
|
|
_elm_code_test_editor_setup(Evas_Object *parent, Eina_Bool log)
|
|
|
|
{
|
|
|
|
Elm_Code *code;
|
|
|
|
Elm_Code_Line *line;
|
|
|
|
Elm_Code_Widget *widget;
|
|
|
|
|
|
|
|
code = elm_code_create();
|
|
|
|
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent, elm_obj_code_widget_code_set(eo_self, code));
|
|
|
|
elm_obj_code_widget_font_set(widget, NULL, 14);
|
|
|
|
elm_obj_code_widget_editable_set(widget, EINA_TRUE);
|
|
|
|
elm_obj_code_widget_show_whitespace_set(widget, EINA_TRUE);
|
|
|
|
elm_obj_code_widget_line_numbers_set(widget, EINA_TRUE);
|
|
|
|
|
|
|
|
if (!log)
|
|
|
|
{
|
|
|
|
_append_line(code->file, "Edit me :)");
|
|
|
|
_append_line(code->file, "");
|
|
|
|
_append_line(code->file, "");
|
|
|
|
_append_line(code->file, "...Please?");
|
|
|
|
|
|
|
|
line = elm_code_file_line_get(code->file, 1);
|
|
|
|
elm_code_line_token_add(line, 5, 6, 1, ELM_CODE_TOKEN_TYPE_COMMENT);
|
|
|
|
elm_code_callback_fire(code, &ELM_CODE_EVENT_LINE_LOAD_DONE, line);
|
|
|
|
}
|
|
|
|
|
|
|
|
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_show(widget);
|
|
|
|
|
|
|
|
return widget;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
|
|
|
_elm_code_test_mirror_setup(Elm_Code *code, char *font_name, Evas_Object *parent)
|
|
|
|
{
|
|
|
|
Elm_Code_Widget *widget;
|
|
|
|
|
|
|
|
widget = eo_add(ELM_CODE_WIDGET_CLASS, parent, elm_obj_code_widget_code_set(eo_self, code));
|
|
|
|
elm_obj_code_widget_font_set(widget, font_name, 11);
|
|
|
|
elm_obj_code_widget_line_numbers_set(widget, EINA_TRUE);
|
|
|
|
|
|
|
|
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_show(widget);
|
|
|
|
|
|
|
|
return widget;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
|
|
|
_elm_code_test_diff_inline_setup(Evas_Object *parent)
|
|
|
|
{
|
|
|
|
Evas_Object *diff;
|
|
|
|
Elm_Code *code;
|
|
|
|
|
|
|
|
code = elm_code_create();
|
|
|
|
diff = eo_add(ELM_CODE_WIDGET_CLASS, parent, elm_obj_code_widget_code_set(eo_self, code));
|
|
|
|
|
|
|
|
evas_object_size_hint_weight_set(diff, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(diff, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_show(diff);
|
|
|
|
|
|
|
|
elm_code_parser_standard_add(code, ELM_CODE_PARSER_STANDARD_DIFF);
|
|
|
|
elm_code_file_open(code, PACKAGE_DATA_DIR "testdiff.diff");
|
|
|
|
|
|
|
|
return diff;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
|
|
|
_elm_code_test_diff_setup(Evas_Object *parent)
|
|
|
|
{
|
|
|
|
Evas_Object *diff;
|
|
|
|
Elm_Code *code;
|
|
|
|
|
|
|
|
code = elm_code_create();
|
|
|
|
elm_code_file_open(code, PACKAGE_DATA_DIR "testdiff.diff");
|
|
|
|
|
|
|
|
diff = elm_code_diff_widget_add(parent, code);
|
|
|
|
return diff;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
|
|
|
_elm_code_test_log_timer(void *data)
|
|
|
|
{
|
|
|
|
Elm_Code *code = data;
|
|
|
|
static int line = 0;
|
|
|
|
char buf[250];
|
|
|
|
|
|
|
|
sprintf(buf, "line %d", ++line);
|
|
|
|
_append_line(code->file, buf);
|
|
|
|
|
|
|
|
return ECORE_CALLBACK_RENEW;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_elm_code_test_log_clicked(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
static Ecore_Timer *t = NULL;
|
|
|
|
|
|
|
|
if (t)
|
|
|
|
{
|
|
|
|
elm_object_text_set(obj, "Start");
|
|
|
|
ecore_timer_del(t);
|
|
|
|
t = NULL;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
t = ecore_timer_add(0.05, _elm_code_test_log_timer, data);
|
|
|
|
elm_object_text_set(obj, "Stop");
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_code_editor(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *win, *screen;
|
|
|
|
|
|
|
|
win = _test_code_win_create("code-editor", "Code Editor");
|
|
|
|
screen = elm_box_add(win);
|
|
|
|
evas_object_size_hint_weight_set(screen, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
elm_box_pack_end(screen, _elm_code_test_editor_setup(screen, EINA_FALSE));
|
|
|
|
elm_win_resize_object_add(win, screen);
|
|
|
|
evas_object_show(screen);
|
|
|
|
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_code_log(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *win, *screen, *o, *code;
|
|
|
|
|
|
|
|
win = _test_code_win_create("code-log", "Code Log");
|
|
|
|
screen = elm_box_add(win);
|
|
|
|
evas_object_size_hint_weight_set(screen, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
|
|
|
|
code = _elm_code_test_editor_setup(screen, EINA_TRUE);
|
|
|
|
elm_box_pack_end(screen, code);
|
|
|
|
|
|
|
|
o = elm_button_add(screen);
|
|
|
|
elm_object_text_set(o, "log");
|
|
|
|
evas_object_smart_callback_add(o, "clicked", _elm_code_test_log_clicked, elm_obj_code_widget_code_get(code));
|
|
|
|
elm_box_pack_end(screen, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
|
|
|
|
elm_win_resize_object_add(win, screen);
|
|
|
|
evas_object_show(screen);
|
|
|
|
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_code_mirror(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Elm_Code *code;
|
|
|
|
Evas_Object *win, *screen, *widget;
|
|
|
|
|
|
|
|
win = _test_code_win_create("code-mirror", "Code Mirror");
|
|
|
|
screen = elm_box_add(win);
|
|
|
|
elm_box_homogeneous_set(screen, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(screen, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
|
|
|
|
widget = _elm_code_test_editor_setup(screen, EINA_FALSE);
|
|
|
|
code = elm_obj_code_widget_code_get(widget);
|
|
|
|
elm_box_pack_end(screen, widget);
|
|
|
|
|
|
|
|
elm_box_pack_end(screen, _elm_code_test_mirror_setup(code, "Mono:style=Oblique", screen));
|
|
|
|
elm_box_pack_end(screen, _elm_code_test_mirror_setup(code, "Nimbus Mono", screen));
|
|
|
|
|
|
|
|
elm_win_resize_object_add(win, screen);
|
|
|
|
evas_object_show(screen);
|
|
|
|
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_code_diff_inline(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *win, *screen;
|
|
|
|
|
|
|
|
win = _test_code_win_create("code-diff-inline", "Code Diff Inline");
|
|
|
|
screen = elm_box_add(win);
|
|
|
|
evas_object_size_hint_weight_set(screen, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
elm_box_pack_end(screen, _elm_code_test_diff_inline_setup(screen));
|
|
|
|
elm_win_resize_object_add(win, screen);
|
|
|
|
evas_object_show(screen);
|
|
|
|
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_code_diff(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *win, *screen;
|
|
|
|
|
|
|
|
win = _test_code_win_create("code-diff", "Code Diff");
|
|
|
|
screen = elm_box_add(win);
|
|
|
|
evas_object_size_hint_weight_set(screen, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
elm_box_pack_end(screen, _elm_code_test_diff_setup(screen));
|
|
|
|
elm_win_resize_object_add(win, screen);
|
|
|
|
evas_object_show(screen);
|
|
|
|
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_code_welcome(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *win, *screen;
|
|
|
|
|
|
|
|
win = _test_code_win_create("code-welcome", "Code Welcome");
|
|
|
|
screen = elm_box_add(win);
|
|
|
|
evas_object_size_hint_weight_set(screen, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
elm_box_pack_end(screen, _elm_code_test_welcome_setup(screen));
|
|
|
|
elm_win_resize_object_add(win, screen);
|
|
|
|
evas_object_show(screen);
|
|
|
|
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|
|
|
|
|