netstar pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=d694160d134470acf278c60e337f0c0d3a0c2245

commit d694160d134470acf278c60e337f0c0d3a0c2245
Author: Al Poole <[email protected]>
Date:   Tue Sep 12 10:19:34 2017 +0100

    scm: add elm code widget for diff in commit screen.
    
    Use a proper widget with lovely formatting.
---
 src/bin/screens/edi_scm_screens.c | 75 +++++++++++++++++++++++++++------------
 1 file changed, 52 insertions(+), 23 deletions(-)

diff --git a/src/bin/screens/edi_scm_screens.c 
b/src/bin/screens/edi_scm_screens.c
index 8c1ef8d..1906111 100644
--- a/src/bin/screens/edi_scm_screens.c
+++ b/src/bin/screens/edi_scm_screens.c
@@ -4,6 +4,7 @@
 
 #include "Edi.h"
 #include "mainview/edi_mainview.h"
+#include "edi_config.h"
 #include "edi_consolepanel.h"
 #include "edi_scm_screens.h"
 #include "edi_private.h"
@@ -76,16 +77,39 @@ _edi_scm_screens_commit_cb(void *data,
    free(message);
 }
 
+static void
+_entry_lines_append(Elm_Code *code, char *diff)
+{
+   char *pos = diff;
+   char *start, *end = NULL;
+
+   start = pos;
+   while (*pos++ != '\0')
+    {
+       if (*pos == '\n')
+         end = pos;
+
+       if (start && end)
+         {
+            elm_code_file_line_append(code->file, start, end - start, NULL);
+            start = end + 1;
+            end = NULL;
+         }
+    }
+}
+
 void
 edi_scm_screens_commit(Evas_Object *parent)
 {
-   Evas_Object *popup, *box, *hbox, *sep, *label, *avatar, *input, *button;
-   Evas_Object *list, *icon, *entry;
+   Evas_Object *popup, *box, *hbox, *cbox, *sep, *label, *avatar, *input, 
*button;
+   Evas_Object *list, *icon;
+   Elm_Code_Widget *entry;
+   Elm_Code *code;
    Eina_Strbuf *text, *user;
    Eina_List *l;
    Edi_Scm_Engine *engine;
    Edi_Scm_Status *status;
-   char *diff, *markup;
+   char *diff;
    Eina_Bool staged_changes;
 
    engine= edi_scm_engine_get();
@@ -104,6 +128,8 @@ edi_scm_screens_commit(Evas_Object *parent)
                                      _("Commit Changes"));
    box = elm_box_add(popup);
    elm_box_horizontal_set(box, EINA_FALSE);
+   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_object_content_set(popup, box);
 
    sep = elm_separator_add(box);
@@ -233,28 +259,31 @@ edi_scm_screens_commit(Evas_Object *parent)
    evas_object_show(input);
    elm_box_pack_end(box, input);
 
-   entry = elm_entry_add(box);
-   evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_entry_line_wrap_set(entry, ELM_WRAP_NONE);
-   elm_entry_editable_set(entry, EINA_FALSE);
-   elm_entry_scrollable_set(entry, EINA_TRUE);
-   elm_entry_single_line_set(entry, EINA_TRUE);
-   evas_object_show(entry);
-   elm_box_pack_end(box, entry);
-
    diff = edi_scm_diff();
-   text = eina_strbuf_new();
-   markup = elm_entry_utf8_to_markup(diff);
-   if (strlen(markup))
-     eina_strbuf_append_printf(text, "<font=Fixed>%s</font>", markup);
-   else
-     eina_strbuf_append(text, _("No changes to display."));
-
-   elm_object_text_set(entry, eina_strbuf_string_get(text));
+   if (strlen(diff))
+     {
+        cbox = elm_box_add(popup);
+        evas_object_size_hint_weight_set(cbox, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
+        evas_object_size_hint_align_set(cbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+        evas_object_size_hint_min_set(cbox, 400 * elm_config_scale_get(), 400 
* elm_config_scale_get());
+        evas_object_show(cbox);
+        elm_box_pack_end(box, cbox);
+
+        code = elm_code_create();
+        entry = elm_code_widget_add(box, code);
+        elm_code_parser_standard_add(code, ELM_CODE_PARSER_STANDARD_DIFF);
+        elm_obj_code_widget_font_set(entry, _edi_project_config->font.name, 
_edi_project_config->font.size);
+        elm_obj_code_widget_gravity_set(entry, 0.0, 1.0);
+        elm_obj_code_widget_editable_set(entry, EINA_FALSE);
+        elm_obj_code_widget_line_numbers_set(entry, EINA_FALSE);
+        evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
+        evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+        evas_object_show(entry);
+        elm_box_pack_end(cbox, entry);
+
+        _entry_lines_append(code, diff);
+     }
 
-   eina_strbuf_free(text);
-   free(markup);
    free(diff);
 
    sep = elm_separator_add(box);

-- 


Reply via email to