Compare commits

...

2 Commits

Author SHA1 Message Date
Mykyta Biliavskyi 8ce488e506 Fix markup of edjshare base dialog. 2015-11-12 17:34:00 +00:00
Mykyta Biliavskyi 3a03096269 Edje share: add support edjshare service by e.org.
This feature requre installed application edjshare
(https://phab.enlightenment.org/F25599).
2015-11-12 17:14:21 +00:00
11 changed files with 778 additions and 2 deletions

View File

@ -19,6 +19,7 @@ images {
image: "live_text.png" COMP;
image: "live_textblock.png" COMP;
image: "live_edit.png" COMP;
image: "share.png" COMP;
}
#define ICON_GROUP(_group_name, _image_path) \
@ -32,6 +33,7 @@ images {
} \
}
ICON_GROUP("goto", "goto.png")
ICON_GROUP("share", "share.png")
ICON_GROUP("menu", "menu.png")
ICON_GROUP("find", "find.png")
ICON_GROUP("highlight", "highlight.png")

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

View File

@ -1284,6 +1284,438 @@ group { name: "search_layout";
}
}
group { name: "share_success_layout";
parts {
part { name: "base";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
min: 300 140;
}
}
part { name: "left_top_padding";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.to: "base";
rel2.to: "base";
rel1.relative: 0 0;
rel2.relative: 0 0;
fixed: 1 1;
align: 0 0;
min: 5 5;
}
}
part { name: "elm.text.link";
type: TEXT;
scale: 1;
effect: SHADOW BOTTOM;
description { state: "default" 0.0;
align: 0 0;
rel1.to: "left_top_padding";
rel2.to: "left_top_padding";
rel1.relative: 1 1;
rel2.relative: 1 1;
text {
text: "Link: ";
font: FN;
size: 11;
align: 0 0;
min: 1 1;
ellipsis: -1;
}
color: 255 255 255 255;
color3: 0 0 0 128;
fixed: 1 1;
}
}
swallow { "elm.swallow.copy";
desc {
align: 1 0.5;
rel1.relative: 1 0;
rel1.to_x: "base";
rel1.to_y: "elm.text.link";
rel2.relative: 0 1;
rel2.to_x: "right.pad";
rel2.to_y: "elm.text.link";
aspect: 1 1;
aspect_preference: BOTH;
}
}
spacer { "spec.pad";
desc {
align: 1 0.5;
min: 5 5;
max: 5 5;
rel1.to: "base";
rel2.to: "elm.swallow.copy";
rel2.relative: 0 1;
}
}
swallow { "elm.swallow.open";
desc {
align: 1 0.5;
rel1.relative: 0 0;
rel1.to_x: "base";
rel1.to_y: "elm.swallow.copy";
rel2.relative: 0 1;
rel2.to_x: "spec.pad";
rel2.to_y: "elm.swallow.copy";
aspect: 1 1;
aspect_preference: BOTH;
}
}
spacer { "text.pad";
desc {
fixed: 1 1;
max: 5 5;
align: 0 0;
rel1.to: "elm.text.link";
rel2.to: "base";
rel1.relative: 0 1;
}
}
spacer { "right.pad";
desc {
fixed: 1 1;
max: 5 5;
align: 1 0;
rel1.to: "base";
rel2.to: "base";
}
}
part { name: "elm.swallow.entry";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
rel1.relative: 0 1;
rel2.relative: 0 0;
rel1.to: "text.pad";
rel2.to_y: "button.pad";
rel2.to_x: "right.pad";
fixed: 1 1;
}
}
spacer { "button.pad";
desc { "default";
min: 5 5;
max: 5 5;
fixed: 1 1;
align: 0.5 1;
rel2 {
to_x: "base";
to_y: "elm.swallow.close";
relative: 1 0;
}
rel1.to: "base";
}
}
swallow { "elm.swallow.close";
scale: 1;
desc { "default";
align: 0.5 1;
rel1 {
relative: 0 1;
to: "base";
}
rel2.relative: 1 0;
rel2.to_x: "base";
rel2.to_y: "bottom.pad";
min: 75 25;
max: 75 25;
fixed: 1 1;
}
}
spacer { "bottom.pad"
desc {
align: 1 1;
rel1.to: "base";
rel2.to: "base";
min: 5 5;
max: 5 5;
}
}
}
}
group { name: "share_error_layout";
parts {
part { name: "base";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
min: 300 140;
}
}
part { name: "left_top_padding";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.to: "base";
rel2.to: "base";
rel1.relative: 0 0;
rel2.relative: 0 0;
fixed: 1 1;
align: 0 0;
min: 5 5;
}
}
part { name: "elm.text.share";
type: TEXT;
scale: 1;
effect: SHADOW BOTTOM;
description { state: "default" 0.0;
align: 0 0;
rel1.to: "left_top_padding";
rel2.to: "left_top_padding";
rel1.relative: 1 1;
rel2.relative: 1 1;
text {
text: "Error message: ";
font: FN;
size: 11;
align: 0 0;
min: 1 1;
ellipsis: -1;
}
color: 255 255 255 255;
color3: 0 0 0 128;
fixed: 1 1;
}
}
spacer { "text.pad";
desc {
fixed: 1 1;
max: 5 5;
align: 0 0;
rel1.to: "elm.text.share";
rel2.to: "base";
rel1.relative: 0 1;
}
}
spacer { "right.pad";
desc {
fixed: 1 1;
max: 5 5;
align: 1 0;
rel1.to: "base";
rel2.to: "base";
}
}
part { name: "elm.swallow.entry";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
rel1.relative: 0 1;
min: 50 50;
rel2.relative: 0 0;
rel1.to: "text.pad";
rel2.to_y: "button.pad";
rel2.to_x: "right.pad";
fixed: 1 1;
}
}
spacer { "button.pad";
desc { "default";
min: 5 5;
max: 5 5;
fixed: 1 1;
align: 0.5 1;
rel2 {
to_x: "base";
to_y: "elm.swallow.share";
relative: 1 0;
}
rel1.to: "base";
}
}
part { name: "elm.swallow.share";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
rel2 {
relative: 0 0;
to_y: "bottom.pad";
to_x: "button.pad";
}
rel1.to: "base";
min: 75 25;
max: 75 25;
align: 1 1;
fixed: 1 1;
}
}
swallow { "elm.swallow.cancel";
scale: 1;
desc { "default";
align: 0 1;
rel1 {
relative: 1 1;
to: "button.pad";
}
rel2.relative: 1 0;
rel2.to_x: "base";
rel2.to_y: "bottom.pad";
min: 75 25;
max: 75 25;
fixed: 1 1;
}
}
spacer { "bottom.pad"
desc {
align: 1 1;
rel1.to: "base";
rel2.to: "base";
min: 5 5;
max: 5 5;
}
}
}
}
group { name: "share_base_layout";
parts {
part { name: "base";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
min: 300 100;
}
}
part { name: "left_top_padding";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.relative: 0 0;
rel2.relative: 0 0;
fixed: 1 1;
align: 0 0;
min: 5 5;
}
}
part { name: "elm.text.share";
type: TEXT;
scale: 1;
effect: SHADOW BOTTOM;
description { state: "default" 0.0;
align: 0 0;
rel1.to: "left_top_padding";
rel2.to: "left_top_padding";
rel1.relative: 1 1;
rel2.relative: 1 1;
text {
text: "Tags: ";
font: FN;
size: 11;
align: 0 0;
min: 1 1;
ellipsis: -1;
}
color: 255 255 255 255;
color3: 0 0 0 128;
fixed: 1 1;
}
}
part { name: "elm.swallow.tags";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
rel1.relative: 1 0;
rel2.relative: 1 0;
rel1.to: "elm.text.share";
rel2.to_y: "button.pad";
rel2.offset: -5 -1;
fixed: 1 1;
}
}
part { name: "elm.text.msg";
type: TEXT;
scale: 1;
effect: GLOW;
description { state: "default" 0.0;
align: 0 0;
rel1.to: "elm.text.share";
rel2.to: "elm.text.share";
rel1.relative: 0 1;
rel2.relative: 0 1;
rel1.offset: 0 10;
text {
font: FN;
size: 10;
align: 0 0.5;
}
color: 51 153 255 255;
color3: 51 153 255 18;
color2: 51 153 255 24;
min: 180 30;
fixed: 1 1;
}
}
spacer { "button.pad";
desc { "default";
min: 5 5;
max: 5 5;
fixed: 1 1;
align: 0.5 1;
rel2 {
to_y: "elm.swallow.share";
relative: 1 0;
}
}
}
part { name: "elm.swallow.share";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
rel2 {
relative: 0 0;
to_x: "button.pad";
to_y: "bottom.pad";
}
min: 75 25;
max: 75 25;
align: 1 1;
fixed: 1 1;
}
}
swallow { "elm.swallow.cancel";
scale: 1;
desc { "default";
align: 0 1;
rel1 {
relative: 1 1;
to: "button.pad";
}
rel2.relative: 1 0;
rel2.to_y: "bottom.pad";
min: 75 25;
max: 75 25;
fixed: 1 1;
}
}
spacer { "bottom.pad"
desc {
align: 1 1;
rel1.to: "base";
rel2.to: "base";
min: 5 5;
max: 5 5;
}
}
}
}
group { name: "live_edit_layout";
data.item: "ctrl_size" "8";
parts {

View File

@ -26,7 +26,8 @@ enventor_SOURCES = \
globals.c \
live_edit.c \
console.c \
file_mgr.c
file_mgr.c \
share.c
enventor_LDADD = \
$(top_builddir)/src/lib/libenventor.la \

View File

@ -125,6 +125,7 @@ goto_open(Evas_Object *enventor)
}
search_close();
share_close();
gd = calloc(1, sizeof(goto_data));
if (!gd)

View File

@ -325,6 +325,7 @@ search_open(Evas_Object *enventor)
}
goto_close();
share_close();
sd = calloc(1, sizeof(search_data));
if (!sd)

315
src/bin/share.c Normal file
View File

@ -0,0 +1,315 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "common.h"
typedef struct share_s
{
Evas_Object *win;
Evas_Object *base_layout;
Evas_Object *tags_entry;
Evas_Object *enventor;
Evas_Object *error_layout;
Evas_Object *success_layout;
Evas_Object *link_entry;
Evas_Object *error_entry;
Eina_Stringshare *link;
Ecore_Event_Handler *event_data_handler;
Ecore_Event_Handler *event_error_handler;
Eina_Stringshare *cmd;
} share_data;
static share_data *g_sd = NULL;
static Evas_Coord win_w = DEFAULT_SHARE_WIN_W;
static Evas_Coord win_h = DEFAULT_SHARE_WIN_H;
void
share_close(void)
{
share_data *sd = g_sd;
if (!sd) return;
eina_stringshare_del(sd->cmd);
evas_object_del(g_sd->win);
evas_object_del(sd->error_layout);
evas_object_del(sd->base_layout);
free(sd);
g_sd = NULL;
// tools_share_update(enventor, EINA_FALSE);
}
static Eina_Bool
exe_event_data_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event_info);
static Eina_Bool
exe_event_error_cb(void *data, int type EINA_UNUSED, void *event_info);
static const char*
share_cmd_get(Evas_Object *enventor, Evas_Object *tags_entry)
{
const char *edj_path = NULL;
const Eina_List *pathes = NULL;
pathes = enventor_object_path_get(enventor, ENVENTOR_PATH_TYPE_EDJ);
edj_path = eina_list_data_get(pathes);
if (!edj_path) return NULL;
const char *tags = elm_entry_entry_get(tags_entry);
return eina_stringshare_printf("edjshare %s %s", edj_path, tags);
}
static void
share(void)
{
share_data *sd = g_sd;
sd->cmd = share_cmd_get(sd->enventor, sd->tags_entry);
printf("Command is: %s\n", sd->cmd);
sd->event_data_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DATA,
exe_event_data_cb, sd);
sd->event_error_handler = ecore_event_handler_add(ECORE_EXE_EVENT_ERROR,
exe_event_error_cb, sd);
Ecore_Exe_Flags flags = (ECORE_EXE_PIPE_READ_LINE_BUFFERED |
ECORE_EXE_PIPE_READ |
ECORE_EXE_PIPE_ERROR_LINE_BUFFERED |
ECORE_EXE_PIPE_ERROR);
ecore_exe_pipe_run(sd->cmd, flags, NULL);
}
static void
share_btn_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
share();
}
static void
win_delete_request_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
share_close();
}
static void
cancel_btn_cb(void *data EINA_UNUSED,
Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
share_close();
}
static void
link_copy_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED)
{
return;
}
static void
link_open_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ei EINA_UNUSED)
{
return;
}
static Eina_Bool
exe_event_data_cb(void *data EINA_UNUSED,
int type EINA_UNUSED,
void *event_info)
{
Ecore_Exe_Event_Data *ev = event_info;
Ecore_Exe_Event_Data_Line *el = NULL;
int i = 0;
share_data *sd = (share_data *)data;
evas_object_hide(sd->base_layout);
evas_object_hide(sd->error_layout);
if (!sd->success_layout)
{
sd->success_layout = elm_layout_add(sd->win);
elm_layout_file_set(sd->success_layout, EDJE_PATH, "share_success_layout");
evas_object_size_hint_weight_set(sd->success_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(sd->success_layout);
elm_win_resize_object_add(sd->win, sd->success_layout);
sd->link_entry = elm_entry_add(sd->success_layout);
elm_entry_scrollable_set(sd->link_entry, EINA_TRUE);
elm_entry_editable_set(sd->link_entry, EINA_FALSE);
elm_entry_single_line_set(sd->link_entry, EINA_FALSE);
evas_object_size_hint_weight_set(sd->link_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set (sd->link_entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(sd->link_entry);
elm_object_part_content_set(sd->success_layout, "elm.swallow.entry", sd->link_entry);
Evas_Object *button = elm_button_add(sd->success_layout);
elm_object_text_set(button, "Close");
elm_object_part_content_set(sd->success_layout, "elm.swallow.close", button);
evas_object_smart_callback_add(button, "clicked", cancel_btn_cb, sd);
evas_object_show(button);
Evas_Object *icon = elm_icon_add(sd->success_layout);
elm_image_file_set(icon, EDJE_PATH, "save");
evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
button = elm_button_add(sd->success_layout);
elm_object_part_content_set(button, "icon", icon);
evas_object_smart_callback_add(button, "clicked", link_copy_cb, sd);
evas_object_show(button);
elm_object_part_content_set(sd->success_layout, "elm.swallow.copy", button);
elm_object_disabled_set(button, EINA_TRUE);
icon = elm_icon_add(sd->success_layout);
elm_image_file_set(icon, EDJE_PATH, "goto");
evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
button = elm_button_add(sd->success_layout);
elm_object_part_content_set(button, "icon", icon);
evas_object_smart_callback_add(button, "clicked", link_open_cb, sd);
evas_object_show(button);
elm_object_part_content_set(sd->success_layout, "elm.swallow.open", button);
elm_object_disabled_set(button, EINA_TRUE);
}
evas_object_show(sd->success_layout);
elm_entry_entry_insert(sd->link_entry, "");
fprintf(stdout, "Data:\n");
for (el = ev->lines; el && el->line; el++, i++)
{
elm_entry_entry_append(sd->link_entry, el->line);
elm_entry_entry_append(sd->link_entry, "\n");
fprintf(stdout, "\t%s\n", el->line);
}
return EINA_TRUE;
}
static Eina_Bool
exe_event_error_cb(void *data, int type EINA_UNUSED, void *event_info)
{
share_data *sd = (share_data *) data;
Ecore_Exe_Event_Data *ev = event_info;
Ecore_Exe_Event_Data_Line *el = NULL;
int i = 0;
evas_object_hide(sd->base_layout);
evas_object_hide(sd->success_layout);
if (!sd->error_layout)
{
sd->error_layout = elm_layout_add(sd->win);
evas_object_hide(sd->base_layout);
elm_layout_file_set(sd->error_layout, EDJE_PATH, "share_error_layout");
evas_object_size_hint_weight_set(sd->error_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(sd->error_layout);
elm_win_resize_object_add(sd->win, sd->error_layout);
sd->error_entry = elm_entry_add(sd->error_layout);
elm_entry_single_line_set(sd->error_entry, EINA_FALSE);
elm_entry_scrollable_set(sd->error_entry, EINA_TRUE);
elm_entry_editable_set(sd->error_entry, EINA_FALSE);
evas_object_size_hint_weight_set(sd->error_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set (sd->error_entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(sd->error_entry);
elm_object_part_content_set(sd->error_layout, "elm.swallow.entry", sd->error_entry);
Evas_Object *button = elm_button_add(sd->error_layout);
elm_object_text_set(button, "Cancel");
elm_object_part_content_set(sd->error_layout, "elm.swallow.cancel", button);
evas_object_smart_callback_add(button, "clicked", cancel_btn_cb, sd);
evas_object_show(button);
button = elm_button_add(sd->error_layout);
elm_object_text_set(button, "Try again");
elm_object_part_content_set(sd->error_layout, "elm.swallow.share", button);
evas_object_smart_callback_add(button, "clicked", share_btn_cb, sd);
evas_object_show(button);
}
evas_object_show(sd->error_layout);
elm_entry_entry_set(sd->error_entry, "");
fprintf(stdout, "Error:\n");
for (el = ev->lines; el && el->line; el++, i++)
{
if (strcmp(el->line, "FAIL"))
{
elm_entry_entry_append(sd->error_entry, el->line);
elm_entry_entry_append(sd->error_entry, "</br>");
}
fprintf(stdout, "\t%s\n", el->line);
}
return EINA_TRUE;
}
void
share_open(Evas_Object *enventor)
{
share_data *sd = g_sd;
if (sd)
{
share_close();
return;
}
search_close();
goto_close();
sd = calloc(1, sizeof(share_data));
if (!sd)
{
EINA_LOG_ERR("Failed to allocate Memory!");
return;
}
g_sd = sd;
Evas_Object *win = elm_win_add(base_win_get(), "Share edj file",
ELM_WIN_DIALOG_BASIC);
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
elm_win_title_set(win, "Share edj file");
evas_object_smart_callback_add(win, "delete,request", win_delete_request_cb, sd);
Evas_Object *bg = elm_bg_add(win);
evas_object_show(bg);
elm_win_resize_object_add(win, bg);
Evas_Object *base_layout = elm_layout_add(win);
elm_layout_file_set(base_layout, EDJE_PATH, "share_base_layout");
evas_object_size_hint_weight_set(base_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(base_layout);
elm_win_resize_object_add(win, base_layout);
Evas_Object *tags_entry = elm_entry_add(base_layout);
elm_entry_single_line_set(tags_entry, EINA_FALSE);
elm_entry_scrollable_set(tags_entry, EINA_TRUE);
evas_object_size_hint_weight_set(tags_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(tags_entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_part_content_set(base_layout, "elm.swallow.tags", tags_entry);
evas_object_show(tags_entry);
elm_object_focus_set(tags_entry, EINA_TRUE);
elm_entry_entry_insert(tags_entry, "enventor");
Evas_Object *button_share = elm_button_add(base_layout);
elm_object_text_set(button_share, "Share");
evas_object_smart_callback_add(button_share, "clicked", share_btn_cb, sd);
evas_object_show(button_share);
elm_object_part_content_set(base_layout, "elm.swallow.share", button_share);
Evas_Object *button_cancel = elm_button_add(base_layout);
elm_object_text_set(button_cancel, "Cancel");
evas_object_smart_callback_add(button_cancel, "clicked", cancel_btn_cb, sd);
evas_object_show(button_cancel);
elm_object_part_content_set(base_layout, "elm.swallow.cancel", button_cancel);
win_w = (Evas_Coord) ((double) win_w * elm_config_scale_get());
win_h = (Evas_Coord) ((double) win_h * elm_config_scale_get());
evas_object_resize(win, win_w, win_h);
evas_object_show(win);
sd->win = win;
sd->base_layout = base_layout;
sd->tags_entry = tags_entry;
sd->enventor = enventor;
}

View File

@ -82,6 +82,15 @@ goto_cb(void *data, Evas_Object *obj EINA_UNUSED,
else goto_open(enventor);
}
static void
share_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *enventor = data;
live_edit_cancel();
share_open(enventor);
}
static void
console_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
@ -232,6 +241,13 @@ tools_init(Evas_Object *parent, Evas_Object *enventor)
elm_box_pack_end(box, btn);
td->lines_btn = btn;
btn = tools_btn_create(box, "share", "Share edj file",
share_cb, enventor);
evas_object_size_hint_weight_set(btn, 0, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL);
elm_box_pack_end(box, btn);
td->lines_btn = btn;
sp = elm_separator_add(box);
evas_object_show(sp);
elm_box_pack_end(box, sp);

View File

@ -15,4 +15,5 @@ EXTRA_DIST = common.h \
search.h \
live_edit.h \
console.h \
file_mgr.h
file_mgr.h \
share.h

View File

@ -79,5 +79,6 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
#include "live_edit.h"
#include "console.h"
#include "file_mgr.h"
#include "share.h"
#endif

6
src/include/share.h Normal file
View File

@ -0,0 +1,6 @@
#define DEFAULT_SHARE_WIN_W 330
#define DEFAULT_SHARE_WIN_H 140
void share_open(Evas_Object *enventor);
void share_close(void);