From d648b317136f5af6cf268eb4ca2ac3aa809ee9e8 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Sun, 8 Feb 2015 00:24:21 +0000 Subject: [PATCH] help: Add an about EDI screen. Refactor code a little to help organise these support screens --- src/bin/Makefile.am | 6 +- src/bin/edi_main.c | 13 +- src/bin/screens/edi_about.c | 145 ++++++++++++++++++ .../edi_welcome.h => screens/edi_screens.h} | 13 +- src/bin/{welcome => screens}/edi_welcome.c | 2 +- 5 files changed, 173 insertions(+), 6 deletions(-) create mode 100644 src/bin/screens/edi_about.c rename src/bin/{welcome/edi_welcome.h => screens/edi_screens.h} (58%) rename src/bin/{welcome => screens}/edi_welcome.c (99%) diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 2a01c9c..0d8906d 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -7,6 +7,7 @@ AM_CPPFLAGS = \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +-DPACKAGE_DOC_DIR=\"$(docdir)\" \ -DLOCALEDIR=\"$(datadir)/locale\" \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/bin \ @@ -19,7 +20,7 @@ noinst_HEADERS = \ edi_config.h \ editor/edi_editor.h \ edi_content_provider.h \ -welcome/edi_welcome.h \ +screens/edi_screens.h \ edi_filepanel.h \ edi_logpanel.h \ edi_consolepanel.h \ @@ -31,7 +32,8 @@ edi_config.c \ editor/edi_editor_search.c \ editor/edi_editor.c \ edi_content_provider.c \ -welcome/edi_welcome.c \ +screens/edi_welcome.c \ +screens/edi_about.c \ edi_filepanel.c \ edi_logpanel.c \ edi_consolepanel.c \ diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c index ae09ea1..3a58306 100644 --- a/src/bin/edi_main.c +++ b/src/bin/edi_main.c @@ -16,7 +16,7 @@ #include "edi_logpanel.h" #include "edi_consolepanel.h" #include "mainview/edi_mainview.h" -#include "welcome/edi_welcome.h" +#include "screens/edi_screens.h" #include "edi_private.h" @@ -639,6 +639,12 @@ _tb_clean_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNU edi_builder_clean(); } +static void +_tb_about_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + edi_about_show(); +} + static Evas_Object * edi_toolbar_setup(Evas_Object *win) { @@ -680,6 +686,11 @@ edi_toolbar_setup(Evas_Object *win) // tb_it = elm_toolbar_item_append(tb, "player-play", "Run", _tb_run_cb, NULL); tb_it = elm_toolbar_item_append(tb, "edit-clear", "Clean", _tb_clean_cb, NULL); + tb_it = elm_toolbar_item_append(tb, "separator", "", NULL, NULL); + elm_toolbar_item_separator_set(tb_it, EINA_TRUE); + + tb_it = elm_toolbar_item_append(tb, "help-about", "About", _tb_about_cb, NULL); + evas_object_show(tb); return tb; } diff --git a/src/bin/screens/edi_about.c b/src/bin/screens/edi_about.c new file mode 100644 index 0000000..b0879d5 --- /dev/null +++ b/src/bin/screens/edi_about.c @@ -0,0 +1,145 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "edi_private.h" + +static void +_edi_about_exit(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + evas_object_del(data); +} + +static void +_edi_about_url_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + const char *url, *format; + char *cmd; + + url = (const char *)data; + format = "xdg-open \"%s\""; + + cmd = malloc(sizeof(char) * (strlen(format) + strlen(url) - 1)); + sprintf(cmd, format, url); + ecore_exe_run(cmd, NULL); + + free(cmd); +} + +Evas_Object *edi_about_show() +{ + Evas_Object *win, *vbox, *box, *table, *bg; + Evas_Object *text, *title, *authors, *buttonbox, *button, *space; + int alpha, r, g, b; + char buf[PATH_MAX]; + + win = elm_win_util_standard_add("about", "About Edi"); + if (!win) return NULL; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + evas_object_smart_callback_add(win, "delete,request", _edi_about_exit, win); + + table = elm_table_add(win); + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, table); + evas_object_show(table); + + snprintf(buf, sizeof(buf), "%s/images/welcome.png", elm_app_data_dir_get()); + bg = elm_bg_add(win); + elm_bg_option_set(bg, ELM_BG_OPTION_CENTER); + elm_bg_file_set(bg, buf, NULL); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(table, bg, 0, 0, 1, 1); + evas_object_show(bg); + + evas_object_color_get(bg, &r, &g, &b, &alpha); + evas_color_argb_unpremul(alpha, &r, &g, &b); + alpha = 64; + + evas_color_argb_premul(alpha, &r, &g, &b); + evas_object_color_set(bg, r, g, b, alpha); + + vbox = elm_box_add(win); + elm_box_padding_set(vbox, 25, 0); + elm_box_horizontal_set(vbox, EINA_TRUE); + 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_table_pack(table, vbox, 0, 0, 1, 1); + evas_object_show(vbox); + + elm_box_pack_end(vbox, elm_box_add(vbox)); + box = elm_box_add(win); + elm_box_padding_set(box, 10, 0); + 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); + elm_box_pack_end(vbox, elm_box_add(vbox)); + + text = elm_label_add(box); + elm_object_text_set(text, "
EDI is an IDE designed to get people into coding for Linux.
" \ + "It's based on the EFL and written completely natively
" \ + "to provide a reponsive and beautiful UI.
"); + evas_object_size_hint_weight_set(text, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(text, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, text); + evas_object_show(text); + + title = elm_entry_add(box); + elm_object_text_set(title, "EDI's lovely authors"); + elm_entry_editable_set(title, EINA_FALSE); + elm_object_focus_allow_set(title, EINA_FALSE); + evas_object_size_hint_weight_set(title, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(title, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, title); + evas_object_show(title); + + /* Authors screen */ + authors = elm_entry_add(box); + elm_entry_file_set(authors, PACKAGE_DOC_DIR "/AUTHORS", ELM_TEXT_FORMAT_PLAIN_UTF8); + elm_entry_editable_set(authors, EINA_FALSE); + elm_object_focus_allow_set(authors, EINA_FALSE); + evas_object_size_hint_weight_set(authors, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(authors, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_resize(authors, 320 * elm_config_scale_get(), 160 * elm_config_scale_get()); + elm_box_pack_end(box, authors); + evas_object_show(authors); + + buttonbox = elm_box_add(box); + elm_box_horizontal_set(buttonbox, EINA_TRUE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, buttonbox); + evas_object_show(buttonbox); + + button = elm_button_add(box); + elm_object_text_set(button, "Visit Website"); + evas_object_smart_callback_add(button, "clicked", _edi_about_url_cb, + "http://edi-ide.com"); + elm_box_pack_end(buttonbox, button); + evas_object_show(button); + + space = elm_box_add(box); + evas_object_size_hint_min_set(space, 20 * elm_config_scale_get(), 0.0); + elm_box_pack_end(buttonbox, space); + evas_object_show(space); + + button = elm_button_add(box); + elm_object_text_set(button, "Report Issue"); + evas_object_smart_callback_add(button, "clicked", _edi_about_url_cb, + "https://phab.enlightenment.org/maniphest/task/create/?projects=PHID-PROJ-geg2fyscqgjjxt3fider"); + elm_box_pack_end(buttonbox, button); + evas_object_show(button); + + + evas_object_resize(table, 360 * elm_config_scale_get(), 220 * elm_config_scale_get()); + evas_object_resize(win, 360 * elm_config_scale_get(), 220 * elm_config_scale_get()); + evas_object_show(win); + + return win; +} diff --git a/src/bin/welcome/edi_welcome.h b/src/bin/screens/edi_screens.h similarity index 58% rename from src/bin/welcome/edi_welcome.h rename to src/bin/screens/edi_screens.h index 8c0ffce..62ad4ed 100644 --- a/src/bin/welcome/edi_welcome.h +++ b/src/bin/screens/edi_screens.h @@ -11,12 +11,12 @@ extern "C" { /** * @file - * @brief These routines control the intro wizard for Edi. + * @brief These routines control the intro wizard and other supporting UI for Edi. */ /** * @brief UI management functions. - * @defgroup UI Initialisation and management of the welcome UI + * @defgroup UI Initialisation and management of the supporting Edi screens * * @{ * @@ -30,6 +30,15 @@ extern "C" { */ Evas_Object *edi_welcome_show(); + +/** + * Initialize a new Edi about window and display it. + * + * @return The about window that is created + * * @ingroup UI + */ +Evas_Object *edi_about_show(); + /** * @} */ diff --git a/src/bin/welcome/edi_welcome.c b/src/bin/screens/edi_welcome.c similarity index 99% rename from src/bin/welcome/edi_welcome.c rename to src/bin/screens/edi_welcome.c index 5650081..6f1e223 100644 --- a/src/bin/welcome/edi_welcome.c +++ b/src/bin/screens/edi_welcome.c @@ -7,7 +7,7 @@ #include -#include "edi_welcome.h" +#include "edi_screens.h" #include "edi_config.h" #include "edi_private.h"