summaryrefslogtreecommitdiff
path: root/src/bin/elementary/elm_code_test_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/elementary/elm_code_test_main.c')
-rw-r--r--src/bin/elementary/elm_code_test_main.c439
1 files changed, 439 insertions, 0 deletions
diff --git a/src/bin/elementary/elm_code_test_main.c b/src/bin/elementary/elm_code_test_main.c
new file mode 100644
index 0000000000..80588ae159
--- /dev/null
+++ b/src/bin/elementary/elm_code_test_main.c
@@ -0,0 +1,439 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+/* NOTE: Respecting header order is important for portability.
+ * Always put system first, then EFL, then your public header,
+ * and finally your private one. */
+
+#if ENABLE_NLS
+# include <libintl.h>
+#endif
+
+#include <Ecore_Getopt.h>
+#include <Elementary.h>
+
+#include "elm_code_test_private.h"
+
+#define COPYRIGHT "Copyright © 2014 andy <andy@andywilliams.me> and various contributors (see AUTHORS)."
+
+static void
+_elm_code_test_win_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ elm_exit();
+}
+
+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);
+}
+
+static Eina_Bool
+_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);
+ return EO_CALLBACK_CONTINUE;
+}
+
+static Eina_Bool
+_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;
+
+ return EO_CALLBACK_STOP;
+}
+
+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);
+ eo_event_callback_add(widget, &ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_test_line_done_cb, NULL);
+ eo_event_callback_add(widget, ELM_OBJ_CODE_WIDGET_EVENT_LINE_CLICKED, _elm_code_test_line_clicked_cb, code);
+
+ _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");
+}
+
+static void
+_elm_code_test_welcome_editor_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *naviframe, *screen;
+
+ naviframe = (Evas_Object *)data;
+ screen = elm_box_add(naviframe);
+ 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));
+ evas_object_show(screen);
+
+ elm_naviframe_item_push(naviframe, "Editor",
+ NULL, NULL, screen, NULL);
+}
+
+static void
+_elm_code_test_welcome_log_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *naviframe, *screen, *o, *code;
+
+ naviframe = (Evas_Object *)data;
+ screen = elm_box_add(naviframe);
+ 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);
+
+ evas_object_show(screen);
+
+ elm_naviframe_item_push(naviframe, "Editor",
+ NULL, NULL, screen, NULL);
+}
+
+static void
+_elm_code_test_welcome_mirror_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Elm_Code *code;
+ Evas_Object *naviframe, *screen, *widget;
+
+ naviframe = (Evas_Object *)data;
+ screen = elm_box_add(naviframe);
+ 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));
+
+ evas_object_show(screen);
+ elm_naviframe_item_push(naviframe, "Mirrored editor",
+ NULL, NULL, screen, NULL);
+}
+
+static void
+_elm_code_test_welcome_diff_inline_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *naviframe, *screen;
+
+ naviframe = (Evas_Object *)data;
+ screen = elm_box_add(naviframe);
+ 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));
+ evas_object_show(screen);
+
+ elm_naviframe_item_push(naviframe, "Diff widget (inline)",
+ NULL, NULL, screen, NULL);
+}
+
+static void
+_elm_code_test_welcome_diff_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *naviframe, *screen;
+
+ naviframe = (Evas_Object *)data;
+ screen = elm_box_add(naviframe);
+ evas_object_size_hint_weight_set(screen, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_box_pack_end(screen, _elm_code_test_diff_setup(screen));
+ evas_object_show(screen);
+
+ elm_naviframe_item_push(naviframe, "Diff widget (comparison)",
+ NULL, NULL, screen, NULL);
+}
+
+static Evas_Object *
+elm_code_test_win_setup(void)
+{
+ Evas_Object *win, *vbox, *text, *button, *naviframe;
+ Elm_Object_Item *item;
+
+ win = elm_win_util_standard_add("main", "Elm_Code Demo");
+ if (!win) return NULL;
+
+ naviframe = elm_naviframe_add(win);
+ evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(win, naviframe);
+ evas_object_show(naviframe);
+
+ vbox = elm_box_add(win);
+ evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(vbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(vbox);
+
+ text = _elm_code_test_welcome_setup(vbox);
+ evas_object_size_hint_weight_set(text, EVAS_HINT_EXPAND, 0.5);
+ elm_box_pack_end(vbox, text);
+
+ button = elm_button_add(vbox);
+ elm_object_text_set(button, "Editor");
+ evas_object_size_hint_weight_set(button, 0.5, 0.25);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 1.0);
+ evas_object_smart_callback_add(button, "clicked",
+ _elm_code_test_welcome_editor_cb, naviframe);
+ elm_box_pack_end(vbox, button);
+ evas_object_show(button);
+
+ button = elm_button_add(vbox);
+ elm_object_text_set(button, "Log viewer");
+ evas_object_size_hint_weight_set(button, 0.5, 0.0);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 1.0);
+ evas_object_smart_callback_add(button, "clicked",
+ _elm_code_test_welcome_log_cb, naviframe);
+ elm_box_pack_end(vbox, button);
+ evas_object_show(button);
+
+ button = elm_button_add(vbox);
+ elm_object_text_set(button, "Mirrored editor");
+ evas_object_size_hint_weight_set(button, 0.5, 0.0);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5);
+ evas_object_smart_callback_add(button, "clicked",
+ _elm_code_test_welcome_mirror_cb, naviframe);
+ elm_box_pack_end(vbox, button);
+ evas_object_show(button);
+
+ button = elm_button_add(vbox);
+ elm_object_text_set(button, "Diff (inline)");
+ evas_object_size_hint_weight_set(button, 0.5, 0.0);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5);
+ evas_object_smart_callback_add(button, "clicked",
+ _elm_code_test_welcome_diff_inline_cb, naviframe);
+ elm_box_pack_end(vbox, button);
+ evas_object_show(button);
+
+ button = elm_button_add(vbox);
+ elm_object_text_set(button, "Diff (comparison)");
+ evas_object_size_hint_weight_set(button, 0.5, 0.25);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.0);
+ evas_object_smart_callback_add(button, "clicked",
+ _elm_code_test_welcome_diff_cb, naviframe);
+ elm_box_pack_end(vbox, button);
+ evas_object_show(button);
+
+ item = elm_naviframe_item_push(naviframe, "Choose Demo",
+ NULL, NULL,vbox, NULL);
+ elm_naviframe_item_title_enabled_set(item, EINA_FALSE, EINA_FALSE);
+ elm_win_resize_object_add(win, naviframe);
+
+ evas_object_smart_callback_add(win, "delete,request", _elm_code_test_win_del, NULL);
+ evas_object_resize(win, 400 * elm_config_scale_get(), 320 * elm_config_scale_get());
+ evas_object_show(win);
+
+ return win;
+}
+
+static const Ecore_Getopt optdesc = {
+ "elm_code_test",
+ "%prog [options]",
+ PACKAGE_VERSION,
+ COPYRIGHT,
+ "BSD with advertisement clause",
+ "An EFL elm_code_test program",
+ 0,
+ {
+ ECORE_GETOPT_LICENSE('L', "license"),
+ ECORE_GETOPT_COPYRIGHT('C', "copyright"),
+ ECORE_GETOPT_VERSION('V', "version"),
+ ECORE_GETOPT_HELP('h', "help"),
+ ECORE_GETOPT_SENTINEL
+ }
+};
+
+EAPI_MAIN int
+elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
+{
+ Evas_Object *win;
+ int args;
+ Eina_Bool quit_option = EINA_FALSE;
+
+ Ecore_Getopt_Value values[] = {
+ ECORE_GETOPT_VALUE_BOOL(quit_option),
+ ECORE_GETOPT_VALUE_BOOL(quit_option),
+ ECORE_GETOPT_VALUE_BOOL(quit_option),
+ ECORE_GETOPT_VALUE_BOOL(quit_option),
+ ECORE_GETOPT_VALUE_NONE
+ };
+
+#if ENABLE_NLS
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALE_DIR);
+ bind_textdomain_codeset(PACKAGE, "UTF-8");
+ textdomain(PACKAGE);
+#endif
+
+ elm_code_init();
+
+ args = ecore_getopt_parse(&optdesc, values, argc, argv);
+ if (args < 0)
+ {
+ EINA_LOG_CRIT("Could not parse arguments.");
+ goto end;
+ }
+ else if (quit_option)
+ {
+ goto end;
+ }
+
+ /* tell elm about our app so it can figure out where to get files */
+ elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR);
+ elm_app_compile_lib_dir_set(PACKAGE_LIB_DIR);
+ elm_app_compile_data_dir_set(PACKAGE_DATA_DIR);
+ elm_app_info_set(elm_main, "elm_code_test", "images/elm_code.png");
+
+ if (!(win = elm_code_test_win_setup()))
+ goto end;
+
+ elm_run();
+
+ end:
+ elm_code_shutdown();
+ elm_shutdown();
+
+ return 0;
+}
+ELM_MAIN()