diff --git a/elm_code/bin/elm_code_test_main.c b/elm_code/bin/elm_code_test_main.c index 698e411..e81a4e5 100644 --- a/elm_code/bin/elm_code_test_main.c +++ b/elm_code/bin/elm_code_test_main.c @@ -31,6 +31,18 @@ static void _append_line(Elm_Code_File *file, const char *line) elm_code_file_line_append(file, line, length); } +static Eina_Bool +_elm_code_test_line_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, + const Eo_Event_Description *desc EINA_UNUSED, void *event_info) +{ + Elm_Code_Line *line; + + line = (Elm_Code_Line *)event_info; + + printf("CLICKED line %d\n", line->number); + return EINA_TRUE; +} + static Evas_Object * _elm_code_test_welcome_setup(Evas_Object *parent) { @@ -40,6 +52,8 @@ _elm_code_test_welcome_setup(Evas_Object *parent) code = elm_code_create(); widget = elm_code_widget_add(parent, code); elm_code_widget_font_size_set(widget, 14); + eo_do(widget,eo_event_callback_add(&ELM_CODE_WIDGET_EVENT_LINE_CLICKED, _elm_code_test_line_cb, code)); + _append_line(code->file, "Hello World, Elm Code!"); elm_code_file_line_token_add(code->file, 1, 14, 21, ELM_CODE_TOKEN_TYPE_COMMENT); _append_line(code->file, ""); diff --git a/elm_code/lib/elm_code_widget.c b/elm_code/lib/elm_code_widget.c index b079020..69fa2a9 100644 --- a/elm_code/lib/elm_code_widget.c +++ b/elm_code/lib/elm_code_widget.c @@ -6,6 +6,9 @@ #include "elm_code_private.h" +EAPI const Eo_Event_Description ELM_CODE_WIDGET_EVENT_LINE_CLICKED = + EO_EVENT_DESCRIPTION("line,clicked", ""); + Eina_Unicode status_icons[] = { ' ', '!', @@ -174,6 +177,29 @@ _elm_code_widget_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, elm_code_widget_fill(obj, code); } +static void +_elm_code_widget_clicked_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, + void *event_info) +{ + Elm_Code *code; + Elm_Code_Line *line; + Evas_Event_Mouse_Up *event; + Evas_Coord y; + int ch; + unsigned int row; + + code = (Elm_Code *)data; + event = (Evas_Event_Mouse_Up *)event_info; + y = event->canvas.y; + + evas_object_textgrid_cell_size_get(obj, NULL, &ch); + row = ((double) y / ch) + 1; + + line = elm_code_file_line_get(code->file, row); + if (line) + elm_code_callback_fire(code, &ELM_CODE_WIDGET_EVENT_LINE_CLICKED, line); +} + EAPI Evas_Object *elm_code_widget_add(Evas_Object *parent, Elm_Code *code) { Evas_Object *o; @@ -214,6 +240,7 @@ EAPI Evas_Object *elm_code_widget_add(Evas_Object *parent, Elm_Code *code) 54, 54, 255, 255); evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _elm_code_widget_resize_cb, code); + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _elm_code_widget_clicked_cb, code); eo_do(o,eo_event_callback_add(&ELM_CODE_EVENT_LINE_SET_DONE, _elm_code_widget_line_cb, code)); eo_do(o,eo_event_callback_add(&ELM_CODE_EVENT_FILE_LOAD_DONE, _elm_code_widget_file_cb, code)); diff --git a/elm_code/lib/elm_code_widget.h b/elm_code/lib/elm_code_widget.h index a24e577..6aa7b87 100644 --- a/elm_code/lib/elm_code_widget.h +++ b/elm_code/lib/elm_code_widget.h @@ -1,6 +1,8 @@ #ifndef ELM_CODE_WIDGET_H_ # define ELM_CODE_WIDGET_H_ +EAPI extern const Eo_Event_Description ELM_CODE_WIDGET_EVENT_LINE_CLICKED; + #ifdef __cplusplus extern "C" { #endif