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.
This commit is contained in:
Al Poole 2018-02-22 15:38:53 +00:00
parent 5cbb9466e9
commit 81165c426f
4 changed files with 85 additions and 23 deletions

View File

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

View File

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

View File

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

View File

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