billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=596d234ba1852d8e2f0cced4f6aceba89bd2e6ef

commit 596d234ba1852d8e2f0cced4f6aceba89bd2e6ef
Author: Boris Faure <[email protected]>
Date:   Thu Jul 23 22:52:47 2020 +0200

    about: add youtube channel
---
 data/themes/default/base.edc | 237 +++++++++++++++++++++++++++++++++++++++++++
 src/bin/about.c              |  94 ++++++++++++++++-
 2 files changed, 329 insertions(+), 2 deletions(-)

diff --git a/data/themes/default/base.edc b/data/themes/default/base.edc
index e835479..b1b848b 100644
--- a/data/themes/default/base.edc
+++ b/data/themes/default/base.edc
@@ -381,12 +381,248 @@ group { name: "terminology/base";
          signal: "mouse,clicked,3"; source: "twitter.txt";
          action: SIGNAL_EMIT "about,twitter,ctx" "terminology";
       }
+
+      part { name: "youtube.base"; type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            fixed: 1 1;
+            rel1 {
+               to_y: "terminology.about";
+               relative: 0.5 1.0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+            }
+         }
+      }
+      part { name: "youtube.txt"; type: TEXT;
+         mouse_events: 1;
+         scale: 1;
+         effect: GLOW;
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.0 0.5;
+            fixed: 1 1;
+            rel1 {
+               to: "youtube.base";
+               relative: 0.5 0.5;
+            }
+            rel2 {
+               to: "youtube.base";
+               relative: 0.5 0.5;
+            }
+            color: 51 255 17 255;
+            color2: 136 255 136 40;
+            color3: 136 255 136 8;
+            text {
+               font: "Sans"; size: 11;
+               text: "Youtube channel";
+               align: 0.0 0.5;
+               min: 1 1;
+            }
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      part { name: "youtube.bottom";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            image.normal: "lk_bottom.png";
+            image.border: 9 9 0 0;
+            align: 0.5 1.0;
+            min: 20 8;
+            rel1 {
+               to: "youtube.txt";
+               offset: -6 -2;
+               relative: 0.0 1.0;
+            }
+            rel2 {
+               to: "youtube.txt";
+               offset: 5 -1;
+            }
+            color: 51 255 17 255;
+            fill.smooth: 0;
+            visible: 0;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default";
+            visible: 1;
+         }
+      }
+      part { name: "youtube.l";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            image.normal: "lk_left.png";
+            align: 0.0 1.0;
+            min: 4 4;
+            rel1 {
+               to: "youtube.txt";
+               offset: 6 -2;
+               relative: 0.0 1.0;
+            }
+            rel2 {
+               to: "youtube.txt";
+               offset: 6 -2;
+               relative: 0.0 1.0;
+            }
+            color: 51 255 17 255;
+            visible: 0;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default";
+            visible: 1;
+         }
+         description { state: "out" 0.0;
+            fixed: 1 1;
+            inherit: "visible" 0.0;
+            min: 16 16;
+            rel1 {
+               to: "youtube.txt";
+               offset: -10 -2;
+            }
+            rel2 {
+               to: "youtube.txt";
+               offset: -10 -2;
+            }
+            color: 51 255 17 255;
+         }
+         description { state: "out2" 0.0;
+            fixed: 1 1;
+            inherit: "visible" 0.0;
+            min: 32 32;
+            rel1 {
+               to: "youtube.txt";
+               offset: -26 -2;
+            }
+            rel2 {
+               to: "youtube.txt";
+               offset: -26 -2;
+            }
+            color: 51 255 17 0;
+         }
+      }
+      part { name: "youtube.r";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            image.normal: "lk_right.png";
+            align: 1.0 1.0;
+            min: 4 4;
+            rel1 {
+               to: "youtube.txt";
+               offset: -5 -1;
+               relative: 1.0 1.0;
+            }
+            rel2 {
+               to: "youtube.txt";
+               offset: -5 -1;
+               relative: 1.0 1.0;
+            }
+            color: 51 255 17 0;
+            visible: 0;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default";
+            visible: 1;
+         }
+         description { state: "out" 0.0;
+            fixed: 1 1;
+            inherit: "visible" 0.0;
+            min: 16 16;
+            rel1 {
+               to: "youtube.txt";
+               offset: 9 -2;
+            }
+            rel2 {
+               to: "youtube.txt";
+               offset: 9 -2;
+            }
+            color: 51 255 17 255;
+         }
+         description { state: "out2" 0.0;
+            fixed: 1 1;
+            inherit: "visible" 0.0;
+            min: 32 32;
+            rel1 {
+               to: "youtube.txt";
+               offset: 25 -2;
+            }
+            rel2 {
+               to: "youtube.txt";
+               offset: 25 -2;
+            }
+            color: 51 255 17 0;
+         }
+      }
+      program { name: "youtube.show2";
+         action: STATE_SET "out2" 0.0;
+         transition: LINEAR 0.3;
+         target: "youtube.l";
+         target: "youtube.r";
+         after: "youtube.show3";
+      }
+      program { name: "youtube.show3";
+         action: STATE_SET "default" 0.0;
+         target: "youtube.l";
+         target: "youtube.r";
+         after: "youtube.show";
+      }
+      program {
+         name: "youtube.show_bottom";
+         signal: "mouse,in"; source: "youtube.txt";
+         action: STATE_SET "visible" 0.0;
+         target: "youtube.bottom";
+      }
+      program {
+         name: "youtube.show";
+         signal: "mouse,in"; source: "youtube.txt";
+         action: STATE_SET "out" 0.0;
+         transition: LINEAR 0.3;
+         target: "youtube.l";
+         target: "youtube.r";
+         after: "youtube.show2";
+      }
+      program {
+         signal: "mouse,out"; source: "youtube.txt";
+         action: STATE_SET "visible" 0.0;
+         target: "youtube.txt";
+      }
+      program {
+         signal: "mouse,out"; source: "youtube.txt";
+         action: ACTION_STOP;
+         target: "youtube.show";
+         target: "youtube.show2";
+         target: "youtube.show3";
+      }
+      program {
+         signal: "mouse,out"; source: "youtube.txt";
+         action: STATE_SET "default" 0.0;
+         target: "youtube.bottom";
+         target: "youtube.l";
+         target: "youtube.r";
+      }
+      program {
+         signal: "mouse,clicked,1"; source: "youtube.txt";
+         action: SIGNAL_EMIT "about,youtube" "terminology";
+      }
+      program {
+         signal: "mouse,clicked,3"; source: "youtube.txt";
+         action: SIGNAL_EMIT "about,youtube,ctx" "terminology";
+      }
+
       program {
          signal: "about,show"; source: "terminology";
          action: STATE_SET "visible" 0.0;
          transition: SPRING 1.2 2.0 6;
          target: "terminology.about";
          target: "twitter.txt";
+         target: "youtube.txt";
       }
       program {
          signal: "about,hide"; source: "terminology";
@@ -394,6 +630,7 @@ group { name: "terminology/base";
          transition: DECELERATE 0.6;
          target: "terminology.about";
          target: "twitter.txt";
+         target: "youtube.txt";
       }
 
 
diff --git a/src/bin/about.c b/src/bin/about.c
index c19278c..787e7fd 100644
--- a/src/bin/about.c
+++ b/src/bin/about.c
@@ -7,6 +7,7 @@
 #include "termio.h"
 
 #define TWITTER_HANDLE  "@_Terminology_"
+#define YOUTUBE_URL "https://www.youtube.com/channel/UCZ2iBYbbxvcZfcUmnz-rmlQ";
 
 typedef struct _about_ctx {
      Evas_Object *layout;
@@ -67,6 +68,8 @@ _cb_ctxpopup_dismissed(void *data,
    evas_object_del(obj);
 }
 
+/* Twitter {{{ */
+
 static void
 _cb_ctxpopup_copy_twitter(void *data,
                           Evas_Object *obj,
@@ -95,8 +98,6 @@ _cb_ctxpopup_open_twitter_as_url(void *data,
    evas_object_del(obj);
 }
 
-
-
 static void
 _cb_twitter(void *data,
             Evas_Object *_obj EINA_UNUSED,
@@ -139,6 +140,82 @@ _cb_twitter_ctx(void *data,
    evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL,
                                   _cb_ctxpopup_del, ctx);
 }
+/* }}} */
+/* Youtube {{{ */
+
+static void
+_cb_ctxpopup_copy_youtube(void *data,
+                          Evas_Object *obj,
+                          void *_event EINA_UNUSED)
+{
+   About_Ctx *ctx = data;
+
+   elm_cnp_selection_set(ctx->win, ELM_SEL_TYPE_CLIPBOARD,
+                         ELM_SEL_FORMAT_TEXT,
+                         YOUTUBE_URL,
+                         strlen(YOUTUBE_URL));
+   ctx->ctxpopup = NULL;
+   evas_object_del(obj);
+}
+
+static void
+_cb_ctxpopup_open_youtube_as_url(void *data,
+                                 Evas_Object *obj,
+                                 void *_event EINA_UNUSED)
+{
+   About_Ctx *ctx = data;
+
+   _run_url(ctx, YOUTUBE_URL);
+
+   ctx->ctxpopup = NULL;
+   evas_object_del(obj);
+}
+
+
+
+static void
+_cb_youtube(void *data,
+            Evas_Object *_obj EINA_UNUSED,
+            const char *_sig EINA_UNUSED,
+            const char *_src EINA_UNUSED)
+{
+   About_Ctx *ctx = data;
+
+   _run_url(ctx, YOUTUBE_URL);
+}
+
+static void
+_cb_youtube_ctx(void *data,
+                Evas_Object *_obj EINA_UNUSED,
+                const char *_sig EINA_UNUSED,
+                const char *_src EINA_UNUSED)
+{
+   About_Ctx *ctx = data;
+   Evas_Object *popup;
+   const char *fmt;
+   Evas *e = evas_object_evas_get(ctx->base);
+   Evas_Coord x;
+   Evas_Coord y;
+
+   evas_pointer_canvas_xy_get(e, &x, &y);
+
+   popup = elm_ctxpopup_add(ctx->win);
+   ctx->ctxpopup = popup;
+   fmt = eina_stringshare_printf(_("Copy '%s'"),
+                                 YOUTUBE_URL);
+
+   elm_ctxpopup_item_append(popup, fmt, NULL,
+                            _cb_ctxpopup_copy_youtube, ctx);
+   elm_ctxpopup_item_append(popup, _("Open"), NULL,
+                            _cb_ctxpopup_open_youtube_as_url, ctx);
+   evas_object_move(popup, x, y);
+   evas_object_show(popup);
+   evas_object_smart_callback_add(popup, "dismissed",
+                                  _cb_ctxpopup_dismissed, ctx);
+   evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL,
+                                  _cb_ctxpopup_del, ctx);
+}
+/* }}} */
 
 static void
 _cb_mouse_down(void *data,
@@ -165,6 +242,11 @@ _cb_mouse_down(void *data,
    elm_layout_signal_callback_del(ctx->base, "about,twitter,ctx", "*",
                                   _cb_twitter_ctx);
 
+   elm_layout_signal_callback_del(ctx->base, "about,youtube", "*",
+                                  _cb_youtube);
+   elm_layout_signal_callback_del(ctx->base, "about,youtube,ctx", "*",
+                                  _cb_youtube_ctx);
+
    free(ctx);
 }
 
@@ -189,6 +271,8 @@ about_show(Evas_Object *win, Evas_Object *base, Evas_Object 
*term,
 
    elm_object_part_text_set(base, "twitter.txt",
                             _("Twitter: @_Terminology_"));
+   elm_object_part_text_set(base, "youtube.txt",
+                            _("Youtube channel"));
 
    ctx->layout = o = elm_layout_add(win);
    if (elm_layout_file_set(o, config_theme_path_get(config),
@@ -321,6 +405,12 @@ about_show(Evas_Object *win, Evas_Object *base, 
Evas_Object *term,
    elm_layout_signal_callback_add(base, "about,twitter,ctx", "*",
                                   _cb_twitter_ctx, ctx);
 
+   elm_layout_signal_callback_add(base, "about,youtube", "*",
+                                  _cb_youtube, ctx);
+   elm_layout_signal_callback_add(base, "about,youtube,ctx", "*",
+                                  _cb_youtube_ctx, ctx);
+
+
    elm_layout_signal_emit(base, "about,show", "terminology");
    elm_object_signal_emit(ctx->layout, "begin" ,"terminology");
    elm_object_focus_set(ctx->layout, EINA_TRUE);

-- 


Reply via email to