ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=6a63044b30707ff10589bec8abcfa145e2bd53f2

commit 6a63044b30707ff10589bec8abcfa145e2bd53f2
Author: Andy Williams <[email protected]>
Date:   Sat Jan 17 19:54:56 2015 +0000

    Add a click handler for lines in a widget
---
 elm_code/bin/elm_code_test_main.c | 14 ++++++++++++++
 elm_code/lib/elm_code_widget.c    | 27 +++++++++++++++++++++++++++
 elm_code/lib/elm_code_widget.h    |  2 ++
 3 files changed, 43 insertions(+)

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

-- 


Reply via email to