From 81165c426f39a019910efdeee1c6545ffb126640 Mon Sep 17 00:00:00 2001 From: Al Poole Date: Thu, 22 Feb 2018 15:38:53 +0000 Subject: [PATCH] tabs: Ensure that all content types load with good dimensions. This ensures code, text and images are loaded properly with proper dimensions. This means there is no jumping about when switching tabs with multiple panels, multiple tabs and any type of content. Moved the image_add to centralise the generation of statusbar. --- src/bin/edi_content_provider.c | 20 +------- src/bin/editor/edi_editor.c | 71 +++++++++++++++++++++++++-- src/bin/editor/edi_editor.h | 11 +++++ src/tests/edi_test_content_provider.c | 6 +++ 4 files changed, 85 insertions(+), 23 deletions(-) diff --git a/src/bin/edi_content_provider.c b/src/bin/edi_content_provider.c index 56a83aa..09ea9d6 100644 --- a/src/bin/edi_content_provider.c +++ b/src/bin/edi_content_provider.c @@ -17,24 +17,6 @@ // TODO move out to edi_content.c or similar just like the editor type // (and the Evas include) -static Evas_Object * -_edi_content_provider_image_add(Evas_Object *parent, Edi_Mainview_Item *item) -{ - Evas_Object *img, *scroll; - - scroll = elm_scroller_add(parent); - evas_object_size_hint_weight_set(scroll, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(scroll, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(scroll); - img = elm_image_add(scroll); - elm_image_file_set(img, item->path, NULL); - elm_image_no_scale_set(img, EINA_TRUE); - elm_object_content_set(scroll, img); - evas_object_show(img); - - return scroll; -} - static Eina_Bool _edi_content_provider_diff_config_changed(void *data, int type EINA_UNUSED, void *event EINA_UNUSED) { @@ -65,7 +47,7 @@ static Edi_Content_Provider _edi_content_provider_registry[] = { {"text", "text-x-generic", EINA_TRUE, EINA_TRUE, edi_editor_add}, {"code", "text-x-csrc", EINA_TRUE, EINA_TRUE, edi_editor_add}, - {"image", "image-x-generic", EINA_FALSE, EINA_FALSE, _edi_content_provider_image_add}, + {"image", "image-x-generic", EINA_FALSE, EINA_FALSE, edi_editor_image_add}, {"diff", "text-x-source", EINA_TRUE, EINA_FALSE, _edi_content_provider_diff_add}, {NULL, NULL, EINA_FALSE, EINA_FALSE, NULL} diff --git a/src/bin/editor/edi_editor.c b/src/bin/editor/edi_editor.c index 4c541c5..202f5dc 100644 --- a/src/bin/editor/edi_editor.c +++ b/src/bin/editor/edi_editor.c @@ -865,9 +865,17 @@ _edit_cursor_moved(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) unsigned int col; widget = (Elm_Code_Widget *)obj; - elm_code_widget_cursor_position_get(widget, &line, &col); + if (widget) + { + elm_code_widget_cursor_position_get(widget, &line, &col); + } + else + { + line = 0; col = 0; + } snprintf(buf, sizeof(buf), _("Line:%6d, Column:%4d"), line, col); + elm_object_text_set((Evas_Object *)data, buf); } @@ -923,10 +931,17 @@ _edi_editor_statusbar_add(Evas_Object *panel, Edi_Editor *editor, Edi_Mainview_I elm_box_pack_end(panel, table); code = elm_code_widget_code_get(editor->entry); - if (elm_code_file_line_ending_get(code->file) == ELM_CODE_FILE_LINE_ENDING_WINDOWS) - format = "WIN"; + if (code) + { + if (elm_code_file_line_ending_get(code->file) == ELM_CODE_FILE_LINE_ENDING_WINDOWS) + format = "WIN"; + else + format = "UNIX"; + } else - format = "UNIX"; + { + format = ""; + } mime = elm_entry_add(panel); elm_entry_editable_set(mime, EINA_FALSE); @@ -1383,6 +1398,54 @@ edi_editor_reload(Edi_Editor *editor) ecore_thread_main_loop_end(); } +Evas_Object * +edi_editor_image_add(Evas_Object *parent, Edi_Mainview_Item *item) +{ + Evas_Object *vbox, *box, *searchbar, *statusbar, *scroll, *img; + Edi_Editor *editor; + + vbox = elm_box_add(parent); + 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); + + searchbar = elm_box_add(vbox); + evas_object_size_hint_weight_set(searchbar, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(searchbar, EVAS_HINT_FILL, 0.0); + elm_box_pack_end(vbox, searchbar); + + box = elm_box_add(vbox); + elm_box_horizontal_set(box, EINA_TRUE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(vbox, box); + evas_object_show(box); + + statusbar = elm_box_add(vbox); + evas_object_size_hint_weight_set(statusbar, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(statusbar, EVAS_HINT_FILL, 0.0); + elm_box_pack_end(vbox, statusbar); + evas_object_show(statusbar); + + scroll = elm_scroller_add(parent); + evas_object_size_hint_weight_set(scroll, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(scroll, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(scroll); + img = elm_image_add(vbox); + elm_image_file_set(img, item->path, NULL); + elm_image_no_scale_set(img, EINA_TRUE); + elm_object_content_set(scroll, img); + evas_object_show(img); + + elm_box_pack_end(box, scroll); + editor = calloc(1, sizeof(*editor)); + editor->mimetype = item->mimetype; + + _edi_editor_statusbar_add(statusbar, editor, item); + + return vbox; +} + Evas_Object * edi_editor_add(Evas_Object *parent, Edi_Mainview_Item *item) { diff --git a/src/bin/editor/edi_editor.h b/src/bin/editor/edi_editor.h index 3377d18..b9e5ef1 100644 --- a/src/bin/editor/edi_editor.h +++ b/src/bin/editor/edi_editor.h @@ -89,6 +89,17 @@ struct _Edi_Editor */ Evas_Object *edi_editor_add(Evas_Object *parent, Edi_Mainview_Item *item); +/** + * Initialise a new image canvas and add it to the parent panel. + * + * @param parent The panel into which the image panel will be loaded. + * @param item The item describing the image file to be loaded in the canvas. + * @return the created evas object that contains the image. + * + * @ingroup Editor + */ +Evas_Object *edi_editor_image_add(Evas_Object *parent, Edi_Mainview_Item *item); + /** * Reload existing editor's content from disk. * diff --git a/src/tests/edi_test_content_provider.c b/src/tests/edi_test_content_provider.c index 7d3afe6..9e3bd72 100644 --- a/src/tests/edi_test_content_provider.c +++ b/src/tests/edi_test_content_provider.c @@ -14,6 +14,12 @@ edi_editor_add(Evas_Object *parent EINA_UNUSED, Edi_Mainview_Item *item EINA_UNU return NULL; } +EAPI Evas_Object * +edi_editor_image_add(Evas_Object *parent EINA_UNUSED, Edi_Mainview_Item *item EINA_UNUSED) +{ + return NULL; +} + Edi_Config *_edi_config = NULL; Edi_Project_Config *_edi_project_config = NULL; int EDI_EVENT_CONFIG_CHANGED;