2014-08-07 06:32:27 -07:00
|
|
|
#include <Elementary.h>
|
|
|
|
#include "common.h"
|
2014-08-08 22:29:51 -07:00
|
|
|
#include "template_code.h"
|
2014-08-07 06:32:27 -07:00
|
|
|
|
|
|
|
const char *NAME_SEED = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
|
|
const int NAME_SEED_LEN = 52;
|
|
|
|
|
2014-08-13 06:14:09 -07:00
|
|
|
static void
|
|
|
|
template_part_first_line_get(char *buf, int size)
|
2014-08-07 06:32:27 -07:00
|
|
|
{
|
2014-08-11 00:33:17 -07:00
|
|
|
char name[9];
|
2014-08-07 06:32:27 -07:00
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < 8; i++)
|
|
|
|
name[i] = NAME_SEED[(rand() % NAME_SEED_LEN)];
|
2014-08-11 00:33:17 -07:00
|
|
|
name[i]='\0';
|
2014-08-07 06:32:27 -07:00
|
|
|
|
2014-08-13 06:14:09 -07:00
|
|
|
snprintf(buf, size, "part { name: \"%s\";<br/>", name);
|
2014-08-07 06:32:27 -07:00
|
|
|
}
|
2014-08-08 22:29:51 -07:00
|
|
|
|
2014-08-10 21:48:01 -07:00
|
|
|
static void
|
|
|
|
image_description_add(edit_data *ed)
|
2014-08-08 22:29:51 -07:00
|
|
|
{
|
2014-08-10 21:48:01 -07:00
|
|
|
int cursor_pos;
|
|
|
|
Evas_Object * edit_entry = edit_entry_get(ed);
|
2014-08-08 22:29:51 -07:00
|
|
|
|
2014-08-10 21:48:01 -07:00
|
|
|
Evas_Coord cursor_pos_to_restore = elm_entry_cursor_pos_get(edit_entry_get(ed));
|
2014-08-08 22:29:51 -07:00
|
|
|
|
2014-08-10 21:48:01 -07:00
|
|
|
Eina_Bool images_block = parser_images_pos_get(edit_entry, &cursor_pos);
|
|
|
|
if (cursor_pos == -1) return;
|
|
|
|
if (images_block)
|
|
|
|
{
|
|
|
|
elm_entry_cursor_pos_set(edit_entry, cursor_pos);
|
2014-08-13 07:12:51 -07:00
|
|
|
template_insert(ed, TEMPLATE_INSERT_LIVE_EDIT);
|
2014-08-10 21:48:01 -07:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_entry_cursor_pos_set(edit_entry, cursor_pos);
|
|
|
|
elm_entry_cursor_line_begin_set(edit_entry);
|
|
|
|
int cursor_pos1 = elm_entry_cursor_pos_get(edit_entry);
|
|
|
|
elm_entry_entry_insert(edit_entry, TEMPLATE_IMG_BLOCK);
|
|
|
|
edit_line_increase(ed, TEMPLATE_IMG_BLOCK_LINE_CNT);
|
|
|
|
int cursor_pos2 = elm_entry_cursor_pos_get(edit_entry);
|
|
|
|
edit_redoundo_region_push(ed, cursor_pos1, cursor_pos2);
|
|
|
|
}
|
|
|
|
elm_entry_cursor_pos_set(edit_entry, cursor_pos_to_restore);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
template_part_insert_cursor_pos_set(edit_data *ed,
|
2014-08-13 07:12:51 -07:00
|
|
|
Template_Insert_Type insert_type,
|
2014-08-10 21:48:01 -07:00
|
|
|
const Eina_Stringshare *group_name)
|
|
|
|
{
|
|
|
|
int cursor_pos = -1;
|
|
|
|
Evas_Object *edit_entry = edit_entry_get(ed);
|
2014-08-13 07:12:51 -07:00
|
|
|
if (insert_type == TEMPLATE_INSERT_LIVE_EDIT)
|
2014-08-10 21:48:01 -07:00
|
|
|
{
|
|
|
|
cursor_pos = parser_end_of_parts_block_pos_get(edit_entry, group_name);
|
|
|
|
if (cursor_pos != -1)
|
|
|
|
elm_entry_cursor_pos_set(edit_entry, cursor_pos);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
cursor_pos = elm_entry_cursor_pos_get(edit_entry);
|
|
|
|
}
|
|
|
|
elm_entry_cursor_line_begin_set(edit_entry);
|
|
|
|
return cursor_pos;
|
|
|
|
}
|
|
|
|
|
2014-08-13 07:12:51 -07:00
|
|
|
void
|
|
|
|
template_part_insert(edit_data *ed, Edje_Part_Type part_type,
|
|
|
|
Template_Insert_Type insert_type, float rel1_x,
|
|
|
|
float rel1_y, float rel2_x, float rel2_y,
|
|
|
|
const Eina_Stringshare *group_name)
|
2014-08-10 21:48:01 -07:00
|
|
|
{
|
2014-08-13 07:12:51 -07:00
|
|
|
if ((part_type == EDJE_PART_TYPE_IMAGE) &&
|
|
|
|
(insert_type == TEMPLATE_INSERT_LIVE_EDIT))
|
2014-08-13 06:19:32 -07:00
|
|
|
image_description_add(ed);
|
2014-08-10 21:48:01 -07:00
|
|
|
|
|
|
|
Evas_Object *edit_entry = edit_entry_get(ed);
|
|
|
|
int cursor_pos = template_part_insert_cursor_pos_set(ed, insert_type,
|
2014-08-13 06:14:09 -07:00
|
|
|
group_name);
|
2014-08-10 21:48:01 -07:00
|
|
|
if (cursor_pos == -1) return;
|
|
|
|
int cursor_pos1 = elm_entry_cursor_pos_get(edit_entry);
|
2014-08-08 22:29:51 -07:00
|
|
|
int space = edit_cur_indent_depth_get(ed);
|
|
|
|
|
|
|
|
//Alloc Empty spaces
|
|
|
|
char *p = alloca(space + 1);
|
|
|
|
memset(p, ' ', space);
|
|
|
|
p[space] = '\0';
|
|
|
|
|
|
|
|
int line_cnt;
|
|
|
|
char **t;
|
|
|
|
char buf[64];
|
|
|
|
char part[20];
|
|
|
|
|
2014-08-13 07:12:51 -07:00
|
|
|
switch(part_type)
|
2014-08-08 22:29:51 -07:00
|
|
|
{
|
|
|
|
case EDJE_PART_TYPE_RECTANGLE:
|
|
|
|
line_cnt = TEMPLATE_PART_RECT_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_PART_RECT;
|
|
|
|
strcpy(part, "Rect");
|
|
|
|
break;
|
|
|
|
case EDJE_PART_TYPE_TEXT:
|
|
|
|
line_cnt = TEMPLATE_PART_TEXT_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_PART_TEXT;
|
|
|
|
strcpy(part, "Text");
|
|
|
|
break;
|
|
|
|
case EDJE_PART_TYPE_SWALLOW:
|
|
|
|
line_cnt = TEMPLATE_PART_SWALLOW_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_PART_SWALLOW;
|
|
|
|
strcpy(part, "Swallow");
|
|
|
|
break;
|
|
|
|
case EDJE_PART_TYPE_TEXTBLOCK:
|
|
|
|
line_cnt = TEMPLATE_PART_TEXTBLOCK_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_PART_TEXTBLOCK;
|
|
|
|
strcpy(part, "Textblock");
|
|
|
|
break;
|
|
|
|
case EDJE_PART_TYPE_SPACER:
|
|
|
|
line_cnt = TEMPLATE_PART_SPACER_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_PART_SPACER;
|
|
|
|
strcpy(part, "Spacer");
|
|
|
|
break;
|
|
|
|
case EDJE_PART_TYPE_IMAGE:
|
|
|
|
case EDJE_PART_TYPE_NONE:
|
|
|
|
case EDJE_PART_TYPE_GRADIENT:
|
|
|
|
case EDJE_PART_TYPE_GROUP:
|
|
|
|
case EDJE_PART_TYPE_BOX:
|
|
|
|
case EDJE_PART_TYPE_TABLE:
|
|
|
|
case EDJE_PART_TYPE_EXTERNAL:
|
|
|
|
case EDJE_PART_TYPE_PROXY:
|
|
|
|
case EDJE_PART_TYPE_LAST:
|
|
|
|
line_cnt = TEMPLATE_PART_IMAGE_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_PART_IMAGE;
|
|
|
|
strcpy(part, "Image");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2014-08-13 02:20:42 -07:00
|
|
|
//Insert first line of the part block with generated name.
|
2014-08-13 06:14:09 -07:00
|
|
|
char first_line[40];
|
2014-08-13 06:35:09 -07:00
|
|
|
elm_entry_entry_insert(edit_entry, p);
|
2014-08-13 06:14:09 -07:00
|
|
|
template_part_first_line_get(first_line, 40);
|
2014-08-10 21:48:01 -07:00
|
|
|
elm_entry_entry_insert(edit_entry, first_line);
|
2014-08-08 22:29:51 -07:00
|
|
|
|
2014-08-13 02:20:42 -07:00
|
|
|
//Insert part body
|
2014-08-08 22:29:51 -07:00
|
|
|
int i;
|
2014-08-11 19:31:06 -07:00
|
|
|
for (i = 0; i < line_cnt; i++)
|
2014-08-08 22:29:51 -07:00
|
|
|
{
|
2014-08-10 21:48:01 -07:00
|
|
|
elm_entry_entry_insert(edit_entry, p);
|
|
|
|
elm_entry_entry_insert(edit_entry, t[i]);
|
2014-08-08 22:29:51 -07:00
|
|
|
}
|
|
|
|
|
2014-08-13 02:20:42 -07:00
|
|
|
//Insert relatives
|
2014-08-11 19:31:06 -07:00
|
|
|
elm_entry_entry_insert(edit_entry, p);
|
2014-08-13 06:35:09 -07:00
|
|
|
snprintf(buf, sizeof(buf), " rel1.relative: %.2f %.2f;<br/>", rel1_x,
|
2014-08-13 02:20:42 -07:00
|
|
|
rel2_y);
|
|
|
|
elm_entry_entry_insert(edit_entry, buf);
|
2014-08-11 19:31:06 -07:00
|
|
|
elm_entry_entry_insert(edit_entry, p);
|
2014-08-13 06:35:09 -07:00
|
|
|
snprintf(buf, sizeof(buf), " rel2.relative: %.2f %.2f;<br/>", rel1_x,
|
2014-08-13 02:20:42 -07:00
|
|
|
rel2_y);
|
|
|
|
elm_entry_entry_insert(edit_entry, buf);
|
2014-08-11 19:31:06 -07:00
|
|
|
|
2014-08-13 06:35:09 -07:00
|
|
|
//Insert the tale of the part that contains closing brackets
|
2014-08-11 19:31:06 -07:00
|
|
|
t = (char **) &TEMPLATE_PART_TALE;
|
|
|
|
for (i = 0; i < TEMPLATE_PART_TALE_LINE_CNT; i++)
|
|
|
|
{
|
|
|
|
elm_entry_entry_insert(edit_entry, p);
|
|
|
|
elm_entry_entry_insert(edit_entry, t[i]);
|
|
|
|
}
|
2014-08-08 22:29:51 -07:00
|
|
|
|
2014-08-13 07:12:51 -07:00
|
|
|
//add new line only in live edit mode
|
|
|
|
if (insert_type == TEMPLATE_INSERT_LIVE_EDIT)
|
|
|
|
elm_entry_entry_insert(edit_entry, "<br/>");
|
|
|
|
|
2014-08-13 06:35:47 -07:00
|
|
|
/* Increase (part name + body + relatives + tail) line. But line increase
|
2014-08-13 07:12:51 -07:00
|
|
|
count should be -1 in entry template insertion because the
|
|
|
|
cursor position would be taken one line additionally. */
|
|
|
|
int line_inc = 1 + line_cnt + 2 + TEMPLATE_PART_TALE_LINE_CNT;
|
|
|
|
if (insert_type == TEMPLATE_INSERT_DEFAULT) line_inc--;
|
|
|
|
edit_line_increase(ed, line_inc);
|
2014-08-13 02:20:42 -07:00
|
|
|
|
2014-08-10 21:48:01 -07:00
|
|
|
int cursor_pos2 = elm_entry_cursor_pos_get(edit_entry);
|
2014-08-08 22:29:51 -07:00
|
|
|
edit_redoundo_region_push(ed, cursor_pos1, cursor_pos2);
|
|
|
|
|
2014-08-10 21:48:01 -07:00
|
|
|
elm_entry_cursor_pos_set(edit_entry, cursor_pos);
|
2014-08-08 22:29:51 -07:00
|
|
|
|
|
|
|
snprintf(buf, sizeof(buf), "Template code inserted. (%s Part)", part);
|
|
|
|
stats_info_msg_update(buf);
|
2014-08-13 03:48:47 -07:00
|
|
|
edit_syntax_color_partial_apply(ed, 0);
|
2014-08-10 21:48:01 -07:00
|
|
|
edit_changed_set(ed, EINA_TRUE);
|
|
|
|
edit_save(ed);
|
2014-08-08 22:29:51 -07:00
|
|
|
}
|
|
|
|
|
2014-08-10 21:48:01 -07:00
|
|
|
void
|
2014-08-13 07:12:51 -07:00
|
|
|
template_insert(edit_data *ed, Template_Insert_Type insert_type)
|
2014-08-13 04:28:43 -07:00
|
|
|
{
|
|
|
|
const char *EXCEPT_MSG = "Can't insert template code here. Move the cursor" " inside the \"Collections,Images,Parts,Part,"
|
|
|
|
"Programs\" scope.";
|
|
|
|
|
|
|
|
Evas_Object *entry = edit_entry_get(ed);
|
|
|
|
Eina_Stringshare *paragh = edit_cur_paragh_get(ed);
|
|
|
|
if (!paragh)
|
|
|
|
{
|
|
|
|
stats_info_msg_update(EXCEPT_MSG);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!strcmp(paragh, "parts"))
|
|
|
|
{
|
2014-08-13 07:12:51 -07:00
|
|
|
template_part_insert(ed, EDJE_PART_TYPE_IMAGE, TEMPLATE_INSERT_DEFAULT,
|
|
|
|
REL1_X, REL1_Y, REL2_X, REL2_Y, NULL);
|
2014-08-13 04:28:43 -07:00
|
|
|
goto end;
|
|
|
|
}
|
|
|
|
|
|
|
|
int line_cnt;
|
|
|
|
char **t = NULL;
|
|
|
|
char buf[64];
|
|
|
|
char buf2[12];
|
|
|
|
|
|
|
|
if (!strcmp(paragh, "part"))
|
|
|
|
{
|
|
|
|
line_cnt = TEMPLATE_DESC_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_DESC;
|
|
|
|
strcpy(buf2, "Description");
|
|
|
|
}
|
|
|
|
else if (!strcmp(paragh, "programs"))
|
|
|
|
{
|
|
|
|
line_cnt = TEMPLATE_PROG_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_PROG;
|
|
|
|
strcpy(buf2, "Program");
|
|
|
|
}
|
|
|
|
else if (!strcmp(paragh, "images"))
|
|
|
|
{
|
|
|
|
line_cnt = TEMPLATE_IMG_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_IMG;
|
|
|
|
strcpy(buf2, "Image File");
|
|
|
|
}
|
|
|
|
else if (!strcmp(paragh, "collections"))
|
|
|
|
{
|
|
|
|
line_cnt = TEMPLATE_GROUP_LINE_CNT;
|
|
|
|
t = (char **) &TEMPLATE_GROUP;
|
|
|
|
strcpy(buf2, "Group");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!t)
|
|
|
|
{
|
|
|
|
stats_info_msg_update(EXCEPT_MSG);
|
|
|
|
goto end;
|
|
|
|
}
|
|
|
|
int cursor_pos = elm_entry_cursor_pos_get(entry);
|
|
|
|
elm_entry_cursor_line_begin_set(entry);
|
|
|
|
int cursor_pos1 = elm_entry_cursor_pos_get(entry);
|
|
|
|
int space = edit_cur_indent_depth_get(ed);
|
|
|
|
|
|
|
|
//Alloc Empty spaces
|
|
|
|
char *p = alloca(space + 1);
|
|
|
|
memset(p, ' ', space);
|
|
|
|
p[space] = '\0';
|
|
|
|
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < (line_cnt - 1); i++)
|
|
|
|
{
|
|
|
|
elm_entry_entry_insert(entry, p);
|
|
|
|
elm_entry_entry_insert(entry, t[i]);
|
|
|
|
}
|
|
|
|
elm_entry_entry_insert(entry, p);
|
|
|
|
elm_entry_entry_insert(entry, t[i]);
|
|
|
|
|
2014-08-13 07:12:51 -07:00
|
|
|
/* Line increase count should be -1 in entry template insertion because the
|
|
|
|
cursor position would be taken one line additionally. */
|
|
|
|
if (insert_type == TEMPLATE_INSERT_DEFAULT) line_cnt--;
|
|
|
|
edit_line_increase(ed, line_cnt);
|
2014-08-13 04:28:43 -07:00
|
|
|
|
|
|
|
int cursor_pos2 = elm_entry_cursor_pos_get(entry);
|
|
|
|
edit_redoundo_region_push(ed, cursor_pos1, cursor_pos2);
|
|
|
|
|
|
|
|
elm_entry_cursor_pos_set(entry, cursor_pos);
|
|
|
|
|
|
|
|
edit_syntax_color_partial_apply(ed, 0);
|
|
|
|
snprintf(buf, sizeof(buf), "Template code inserted. (%s)", buf2);
|
|
|
|
stats_info_msg_update(buf);
|
|
|
|
|
|
|
|
end:
|
|
|
|
eina_stringshare_del(paragh);
|
|
|
|
}
|