Add a click handler for lines in a widget

This commit is contained in:
Andy Williams 2015-01-17 19:54:56 +00:00
parent 823c2e2a86
commit 6a63044b30
3 changed files with 43 additions and 0 deletions

View File

@ -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, "");

View File

@ -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));

View File

@ -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