From f8a92218da984b6500e7fe22fb0c1aca00d0460b Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Sun, 9 Nov 2014 14:44:35 +0000 Subject: [PATCH] Add some simple version control status for lines too. Add a simple display of how that could work to elm_code_tesst --- elm_code/bin/elm_code_test_main.c | 98 ++++++++++++++++++++++++++----- elm_code/lib/elm_code_common.h | 4 ++ elm_code/lib/elm_code_widget.c | 11 +++- 3 files changed, 97 insertions(+), 16 deletions(-) diff --git a/elm_code/bin/elm_code_test_main.c b/elm_code/bin/elm_code_test_main.c index 42c0d10..c88f985 100644 --- a/elm_code/bin/elm_code_test_main.c +++ b/elm_code/bin/elm_code_test_main.c @@ -24,36 +24,106 @@ _elm_code_test_win_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi } static Evas_Object * -elm_code_test_win_setup(void) +_elm_code_test_welcome_setup(Evas_Object *parent) { - Evas_Object *win; Elm_Code *code; - Elm_Code_Line *line; Evas_Object *widget; - win = elm_win_util_standard_add("main", "Elm_code_test"); - if (!win) return NULL; - - elm_win_focus_highlight_enabled_set(win, EINA_TRUE); - evas_object_smart_callback_add(win, "delete,request", _elm_code_test_win_del, NULL); - code = elm_code_create(elm_code_file_new()); - widget = elm_code_widget_add(win, code); + widget = elm_code_widget_add(parent, code); elm_code_file_line_append(code->file, "Hello World, Elm Code!"); elm_code_file_line_append(code->file, ""); elm_code_file_line_append(code->file, "This is a demo of elm_code's capabilities."); elm_code_file_line_append(code->file, "*** Currently experimental ***"); - line = elm_code_file_line_get(code->file, 4); - line->status = ELM_CODE_STATUS_TYPE_ERROR; + elm_code_file_line_status_set(code->file, 4, ELM_CODE_STATUS_TYPE_ERROR); evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(widget); - elm_win_resize_object_add(win, widget); + return widget; +} - evas_object_resize(win, 280 * elm_config_scale_get(), 70 * elm_config_scale_get()); +static Evas_Object * +_elm_code_test_diff_setup(Evas_Object *parent) +{ + Elm_Code *code; + Evas_Object *widget, *hbox; + + hbox = elm_box_add(parent); + evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_homogeneous_set(hbox, EINA_TRUE); + elm_box_horizontal_set(hbox, EINA_TRUE); + evas_object_show(hbox); + + // left side of diff + code = elm_code_create(elm_code_file_new()); + widget = elm_code_widget_add(parent, code); + + elm_code_file_line_append(code->file, "Some content to diff"); + elm_code_file_line_append(code->file, ""); + elm_code_file_line_append(code->file, "more"); + elm_code_file_line_append(code->file, "removed"); + elm_code_file_line_append(code->file, "will change"); + elm_code_file_line_append(code->file, "unchanged"); + + elm_code_file_line_status_set(code->file, 4, ELM_CODE_STATUS_TYPE_REMOVED); + elm_code_file_line_status_set(code->file, 5, ELM_CODE_STATUS_TYPE_CHANGED); + + evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(widget); + elm_box_pack_end(hbox, widget); + + // right side of diff + code = elm_code_create(elm_code_file_new()); + widget = elm_code_widget_add(parent, code); + + elm_code_file_line_append(code->file, "Some content to diff"); + elm_code_file_line_append(code->file, "added"); + elm_code_file_line_append(code->file, "more"); + elm_code_file_line_append(code->file, ""); + elm_code_file_line_append(code->file, "changed"); + elm_code_file_line_append(code->file, "unchanged"); + + elm_code_file_line_status_set(code->file, 2, ELM_CODE_STATUS_TYPE_ADDED); + elm_code_file_line_status_set(code->file, 5, ELM_CODE_STATUS_TYPE_CHANGED); + + evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(widget); + elm_box_pack_end(hbox, widget); + + return hbox; +} + +static Evas_Object * +elm_code_test_win_setup(void) +{ + Evas_Object *win; + Evas_Object *vbox; + + win = elm_win_util_standard_add("main", "Elm_code_test"); + if (!win) return NULL; + + vbox = elm_box_add(win); + 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); + elm_box_homogeneous_set(vbox, EINA_TRUE); + evas_object_show(vbox); + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + evas_object_smart_callback_add(win, "delete,request", _elm_code_test_win_del, NULL); + + elm_box_pack_end(vbox, _elm_code_test_welcome_setup(vbox)); + + elm_box_pack_end(vbox, _elm_code_test_diff_setup(vbox)); + + elm_win_resize_object_add(win, vbox); + + evas_object_resize(win, 320 * elm_config_scale_get(), 180 * elm_config_scale_get()); evas_object_show(win); return win; diff --git a/elm_code/lib/elm_code_common.h b/elm_code/lib/elm_code_common.h index aac0969..76cfa2c 100644 --- a/elm_code/lib/elm_code_common.h +++ b/elm_code/lib/elm_code_common.h @@ -14,6 +14,10 @@ typedef enum { ELM_CODE_STATUS_TYPE_DEFAULT = 0, ELM_CODE_STATUS_TYPE_ERROR, + ELM_CODE_STATUS_TYPE_ADDED, + ELM_CODE_STATUS_TYPE_REMOVED, + ELM_CODE_STATUS_TYPE_CHANGED, + ELM_CODE_STATUS_TYPE_COUNT } Elm_Code_Status_Type; diff --git a/elm_code/lib/elm_code_widget.c b/elm_code/lib/elm_code_widget.c index 16ea4e2..5133172 100644 --- a/elm_code/lib/elm_code_widget.c +++ b/elm_code/lib/elm_code_widget.c @@ -115,9 +115,16 @@ EAPI Evas_Object *elm_code_widget_add(Evas_Object *parent, Elm_Code *code) // setup status colors evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_DEFAULT, - 54, 54, 54, 255); + 54, 54, 54, 255); evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_ERROR, - 205, 54, 54, 255); + 205, 54, 54, 255); + + evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_ADDED, + 54, 125, 54, 255); + evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_REMOVED, + 125, 54, 54, 255); + evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_STATUS_TYPE_CHANGED, + 54, 54, 125, 255); // setup token colors evas_object_textgrid_palette_set(o, EVAS_TEXTGRID_PALETTE_STANDARD, ELM_CODE_TOKEN_TYPE_DEFAULT,