editor: improve goto line dialog

Focus the input when we show and allow enter press to submit.
Also refactor it out of the edi_main mess.
This commit is contained in:
Andy Williams 2015-07-16 22:36:15 +01:00
parent f80b901195
commit 1c7e2b3873
4 changed files with 80 additions and 55 deletions

View File

@ -42,7 +42,7 @@ static Elm_Object_Item *_edi_logpanel_item, *_edi_consolepanel_item, *_edi_testp
static Elm_Object_Item *_edi_selected_bottompanel;
static Evas_Object *_edi_filepanel, *_edi_filepanel_icon;
static Evas_Object *_edi_main_win, *_edi_main_box, *_edi_new_popup, *_edi_goto_popup,*_edi_message_popup;
static Evas_Object *_edi_main_win, *_edi_main_box, *_edi_new_popup, *_edi_message_popup;
int _edi_log_dom = -1;
static void
@ -584,62 +584,12 @@ _tb_search_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UN
edi_mainview_search();
}
static void
_tb_goto_go_cb(void *data,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
int number;
number = atoi(elm_entry_entry_get((Evas_Object *) data));
edi_mainview_goto(number);
evas_object_del(_edi_goto_popup);
}
static void
_tb_goto_cancel_cb(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
evas_object_del(_edi_goto_popup);
}
static void
_edi_edit_goto()
{
Evas_Object *popup, *input, *button;
popup = elm_popup_add(_edi_main_win);
_edi_goto_popup = popup;
elm_object_part_text_set(popup, "title,text",
"Enter line number");
input = elm_entry_add(popup);
elm_entry_single_line_set(input, EINA_TRUE);
elm_object_content_set(popup, input);
button = elm_button_add(popup);
elm_object_text_set(button, "cancel");
elm_object_part_content_set(popup, "button1", button);
evas_object_smart_callback_add(button, "clicked",
_tb_goto_cancel_cb, NULL);
button = elm_button_add(popup);
elm_object_text_set(button, "go");
elm_object_part_content_set(popup, "button2", button);
evas_object_smart_callback_add(button, "clicked",
_tb_goto_go_cb, input);
evas_object_show(popup);
}
static void
_tb_goto_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
elm_toolbar_item_selected_set(elm_toolbar_selected_item_get(obj), EINA_FALSE);
_edi_edit_goto();
edi_mainview_goto_popup_show();
}
static Eina_Bool
@ -776,7 +726,7 @@ static void
_edi_menu_goto_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
_edi_edit_goto();
edi_mainview_goto_popup_show();
}
static void

View File

@ -180,6 +180,10 @@ _smart_cb_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
{
edi_mainview_search();
}
else if (!strcmp(ev->key, "g"))
{
edi_mainview_goto_popup_show();
}
else if (!strcmp(ev->key, "z"))
{
_undo_cb(editor, obj, event);

View File

@ -18,7 +18,7 @@
#include "edi_config.h"
static Evas_Object *nf, *tb, *_main_win;
static Evas_Object *_edi_mainview_choose_popup;
static Evas_Object *_edi_mainview_choose_popup, *_edi_mainview_goto_popup;
static Edi_Path_Options *_edi_mainview_choose_options;
static Eina_List *_edi_mainview_items = NULL;
@ -572,6 +572,71 @@ edi_mainview_goto(int line)
elm_object_focus_set(editor->entry, EINA_TRUE);
}
static void
_edi_mainview_goto_popup_go_cb(void *data,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
int number;
number = atoi(elm_entry_entry_get((Evas_Object *) data));
edi_mainview_goto(number);
evas_object_del(_edi_mainview_goto_popup);
}
static void
_edi_mainview_goto_popup_cancel_cb(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
evas_object_del(_edi_mainview_goto_popup);
}
static void
_edi_mainview_goto_popup_key_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
Evas_Object *obj, void *event_info)
{
Evas_Event_Key_Up *ev = (Evas_Event_Key_Up *)event_info;
const char *str;
str = elm_object_text_get(obj);
if (strlen(str) && (!strcmp(ev->key, "KP_Enter") || !strcmp(ev->key, "Return")))
_edi_mainview_goto_popup_go_cb(obj, NULL, NULL);
}
void
edi_mainview_goto_popup_show()
{
Evas_Object *popup, *input, *button;
popup = elm_popup_add(_main_win);
_edi_mainview_goto_popup = popup;
elm_object_part_text_set(popup, "title,text",
"Enter line number");
input = elm_entry_add(popup);
elm_entry_single_line_set(input, EINA_TRUE);
evas_object_event_callback_add(input, EVAS_CALLBACK_KEY_UP, _edi_mainview_goto_popup_key_up_cb, NULL);
elm_object_content_set(popup, input);
button = elm_button_add(popup);
elm_object_text_set(button, "cancel");
elm_object_part_content_set(popup, "button1", button);
evas_object_smart_callback_add(button, "clicked",
_edi_mainview_goto_popup_cancel_cb, NULL);
button = elm_button_add(popup);
elm_object_text_set(button, "go");
elm_object_part_content_set(popup, "button2", button);
evas_object_smart_callback_add(button, "clicked",
_edi_mainview_goto_popup_go_cb, input);
evas_object_show(popup);
elm_object_focus_set(input, EINA_TRUE);
}
void
edi_mainview_add(Evas_Object *parent, Evas_Object *win)
{

View File

@ -89,7 +89,6 @@ void edi_mainview_open_window_path(const char *path);
*/
void edi_mainview_open_window(Edi_Path_Options *options);
/**
* Save the current file.
*
@ -148,6 +147,13 @@ void edi_mainview_search();
*/
void edi_mainview_goto(int line);
/**
* Present a popup that will initiate a goto in the current view.
*
* @ingroup Content
*/
void edi_mainview_goto_popup_show();
/**
* @}
*