From: Enlightenment S. <no-...@en...> - 2009-08-21 13:54:49
|
Log: Increase the edit API Author: watchwolf Date: 2009-08-21 06:30:35 -0700 (Fri, 21 Aug 2009) New Revision: 41914 Modified: trunk/PROTO/eyelight/data/presentations/eyelight/eyelight.elt trunk/PROTO/eyelight/src/lib/Eyelight.h trunk/PROTO/eyelight/src/lib/Eyelight_Edit.h trunk/PROTO/eyelight/src/lib/eyelight_compiler.c trunk/PROTO/eyelight/src/lib/eyelight_compiler_parser.h trunk/PROTO/eyelight/src/lib/eyelight_edit.c trunk/PROTO/eyelight/src/lib/eyelight_viewer.c trunk/PROTO/eyelight/src/lib/eyelight_viewer.h trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.c trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.h Modified: trunk/PROTO/eyelight/data/presentations/eyelight/eyelight.elt =================================================================== --- trunk/PROTO/eyelight/data/presentations/eyelight/eyelight.elt 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/data/presentations/eyelight/eyelight.elt 2009-08-21 13:30:35 UTC (rev 41914) @@ -1,7 +1,6 @@ //Some ways use in this presentation are a bit stupid (define a default subtitle ...) //but this file is used to test the compiler - //a list of defaults value layout: 2_columns_left; foot_text :" Watchwolf , wat...@wa..."; Modified: trunk/PROTO/eyelight/src/lib/Eyelight.h =================================================================== --- trunk/PROTO/eyelight/src/lib/Eyelight.h 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/Eyelight.h 2009-08-21 13:30:35 UTC (rev 41914) @@ -57,6 +57,7 @@ EAPI int eyelight_viewer_presentation_file_set(Eyelight_Viewer *pres, const char* presentation); EAPI int eyelight_viewer_theme_file_set(Eyelight_Viewer *pres, const char* theme); +EAPI int eyelight_viewer_new_presentation_file_set(Eyelight_Viewer *pres, const char* presentation); EAPI const char* eyelight_viewer_presentation_file_get(Eyelight_Viewer *pres); EAPI const char* eyelight_viewer_theme_file_get(Eyelight_Viewer *pres); Modified: trunk/PROTO/eyelight/src/lib/Eyelight_Edit.h =================================================================== --- trunk/PROTO/eyelight/src/lib/Eyelight_Edit.h 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/Eyelight_Edit.h 2009-08-21 13:30:35 UTC (rev 41914) @@ -5,15 +5,15 @@ #include "Eyelight.h" /** - * This file describes a API which allows to work directly in the presentation (set item ...) - * Currently this API is empty + * This file describes an API which allows to work directly in the presentation (set item ...) */ EAPI const char* eyelight_edit_slide_title_get(Eyelight_Viewer *pres, int id_slide); +EAPI void eyelight_edit_slide_insert(Eyelight_Viewer *pres, int after); +EAPI void eyelight_edit_slide_delete(Eyelight_Viewer *pres, int id_slide); +EAPI void eyelight_edit_slide_move(Eyelight_Viewer *pres, int id_slide, int id_after); EAPI Eyelight_Viewer *eyelight_object_pres_get(Evas_Object *obj); - - #endif /* ----- #ifndef EYELIGHT_EDIT_INC ----- */ Modified: trunk/PROTO/eyelight/src/lib/eyelight_compiler.c =================================================================== --- trunk/PROTO/eyelight/src/lib/eyelight_compiler.c 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/eyelight_compiler.c 2009-08-21 13:30:35 UTC (rev 41914) @@ -47,29 +47,19 @@ { FILE* output; char* end; - char* p; + char* p = NULL; char buf[EYELIGHT_BUFLEN]; char* output_file; - if(!input_file) - return NULL; - Eyelight_Compiler* compiler = eyelight_compiler_new(input_file, 0); - char* path = ecore_file_dir_get(input_file); - snprintf(buf,EYELIGHT_BUFLEN,"%s/%s",path,ecore_file_file_get(input_file)); - buf[strlen(buf)-2] = 'd'; - buf[strlen(buf)-1] = 'c'; + if(input_file) + { + p = eyelight_source_fetch(compiler->input_file,&end); + eyelight_parse(compiler,p,end); + } - compiler->output_file = strdup(buf); - output_file = strdup(buf); - - p = eyelight_source_fetch(compiler->input_file,&end); - eyelight_parse(compiler,p,end); - EYELIGHT_FREE(p); - EYELIGHT_FREE(path); - EYELIGHT_FREE(output_file); return compiler; } @@ -81,7 +71,6 @@ Eyelight_Compiler* eyelight_compiler_new(char* input_file, int display_areas) { Eyelight_Compiler* compiler; - if(!input_file) return NULL; compiler = calloc(1,sizeof(Eyelight_Compiler)); compiler->line = 1; @@ -116,7 +105,8 @@ node_area); // - compiler->input_file = strdup(input_file); + if(input_file) + compiler->input_file = strdup(input_file); compiler-> display_areas = display_areas; return compiler; @@ -136,7 +126,6 @@ eyelight_node_free(&(compiler->node_summary),NULL); EYELIGHT_FREE(compiler->input_file); - EYELIGHT_FREE(compiler->output_file); EYELIGHT_FREE(compiler); } Modified: trunk/PROTO/eyelight/src/lib/eyelight_compiler_parser.h =================================================================== --- trunk/PROTO/eyelight/src/lib/eyelight_compiler_parser.h 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/eyelight_compiler_parser.h 2009-08-21 13:30:35 UTC (rev 41914) @@ -279,7 +279,6 @@ struct eyelight_compiler { char* input_file; - char* output_file; int display_areas; Modified: trunk/PROTO/eyelight/src/lib/eyelight_edit.c =================================================================== --- trunk/PROTO/eyelight/src/lib/eyelight_edit.c 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/eyelight_edit.c 2009-08-21 13:30:35 UTC (rev 41914) @@ -50,4 +50,203 @@ return title; } +void eyelight_edit_slide_insert(Eyelight_Viewer *pres, int after) +{ + Eyelight_Slide *slide = calloc(1,sizeof(Eyelight_Slide)); + if(after<0) + pres->slides = eina_list_prepend(pres->slides, slide); + else if(after>=pres->size) + pres->slides = eina_list_append(pres->slides, slide); + else + { + Eyelight_Slide *slide_prev = eina_list_nth(pres->slides, after); + pres->slides = eina_list_append_relative(pres->slides, slide, slide_prev); + } + + //now we create the node of this slide + //we don't add a title, foot ..., by default we use the defaults values. + Eyelight_Node *node_slide = calloc(1, sizeof(Eyelight_Node)); + node_slide->type = EYELIGHT_NODE_TYPE_BLOCK; + node_slide->name = EYELIGHT_NAME_SLIDE; + //add the default layout "1_area" + Eyelight_Node *node_layout = calloc(1, sizeof(Eyelight_Node)); + node_layout->type = EYELIGHT_NODE_TYPE_PROP; + node_layout->name = EYELIGHT_NAME_LAYOUT; + node_slide->l = eina_list_append(node_slide->l, node_layout); + Eyelight_Node *node_layout_value = calloc(1,sizeof(Eyelight_Node)); + node_layout_value->type = EYELIGHT_NODE_TYPE_VALUE; + node_layout_value->value = strdup("1_area"); + node_layout->l = eina_list_append(node_layout->l, node_layout_value); + + //insert the node + if(after<0) + { + pres->compiler->root->l = eina_list_prepend(pres->compiler->root->l, node_slide); + } + else + { + Eina_List *l; + Eyelight_Node *node; + int i=0; + EINA_LIST_FOREACH(pres->compiler->root->l, l, node) + { + if(node->type == EYELIGHT_NODE_TYPE_BLOCK + && node->name == EYELIGHT_NAME_SLIDE) + { + if(i==after) + break; + else + i++; + } + } + pres->compiler->root->l = eina_list_append_relative_list(pres->compiler->root->l, node_slide, l); + } + + pres->size++; + + //reload all slides (the number of slides which is displayed on each slide has changed) + int i = 0; + Eina_List *l; + EINA_LIST_FOREACH(pres->slides, l, slide) + { + if(slide->obj) + { + evas_object_del(slide->obj); + slide->obj = NULL; + slide->obj = eyelight_viewer_slide_get(pres, slide, i); + } + i++; + } + + //go to the new slide + if(pres->current>after) + pres->current++; + + eyelight_viewer_slide_goto(pres, after + 1); + + //create the thumbnail + if(pres->thumbnails->is_background_load) + { + eyelight_viewer_thumbnails_background_load_stop(pres); + eyelight_viewer_thumbnails_background_load_start(pres); + } +} + +void eyelight_edit_slide_delete(Eyelight_Viewer *pres, int id_slide) +{ + Eyelight_Slide *slide = eina_list_nth(pres->slides, id_slide); + if(!slide) return; + + //free the slide + pres->slides = eina_list_remove(pres->slides,slide); + eyelight_slide_clean(slide); + EYELIGHT_FREE(slide); + + //delete the slide from the tree + Eina_List *l; + Eyelight_Node *node; + int i=0; + EINA_LIST_FOREACH(pres->compiler->root->l, l, node) + { + if(node->type == EYELIGHT_NODE_TYPE_BLOCK + && node->name == EYELIGHT_NAME_SLIDE) + { + if(i==id_slide) + break; + else + i++; + } + } + pres->compiler->root->l = eina_list_remove_list(pres->compiler->root->l, l); + //all summary are created from the same node, so we must not delete him + if(node != pres->compiler->node_summary) + eyelight_node_free(&node, NULL); + + + pres->size--; + if(pres->current == id_slide) + { + pres->current = 0; + eyelight_viewer_slide_goto(pres, 0); + } + + //reload all slides (the number of slides which is displayed on each slide has changed) + i = 0; + EINA_LIST_FOREACH(pres->slides, l, slide) + { + if(slide->obj) + { + evas_object_del(slide->obj); + slide->obj = NULL; + slide->obj = eyelight_viewer_slide_get(pres, slide, i); + } + i++; + } +} + + +void eyelight_edit_slide_move(Eyelight_Viewer *pres, int id_slide, int id_after) +{ + Eyelight_Slide *slide = eina_list_nth(pres->slides, id_slide); + Eyelight_Slide *slide_relative = eina_list_nth(pres->slides, id_after); + + if(!slide) return; + + //move the slide + pres->slides = eina_list_remove(pres->slides,slide); + if(slide_relative) + pres->slides = eina_list_append_relative(pres->slides, slide, slide_relative); + else + pres->slides = eina_list_prepend(pres->slides, slide); + + //move the slide in the tree + Eina_List *l; + Eyelight_Node *node; + int i=0; + Eyelight_Node *node_relative = NULL; + Eyelight_Node *node_slide = NULL; + Eina_List *l_slide = NULL; + Eina_List *l_relative; + EINA_LIST_FOREACH(pres->compiler->root->l, l, node) + { + if(node->type == EYELIGHT_NODE_TYPE_BLOCK + && node->name == EYELIGHT_NAME_SLIDE) + { + if(i==id_slide) + { + node_slide = node; + l_slide = l; + } + else if(i==id_after) + { + node_relative = node; + l_relative = l; + } + i++; + + if(node_slide && (node_relative || id_after == -1)) + break; + } + } + pres->compiler->root->l = eina_list_remove_list(pres->compiler->root->l, l_slide); + if(node_relative) + pres->compiler->root->l = eina_list_append_relative_list(pres->compiler->root->l, node_slide, l_relative); + else + pres->compiler->root->l = eina_list_prepend(pres->compiler->root->l, node_slide); + + //reload all slides the position of a slide could change + i = 0; + EINA_LIST_FOREACH(pres->slides, l, slide) + { + if(slide->obj) + { + evas_object_del(slide->obj); + slide->obj = NULL; + slide->obj = eyelight_viewer_slide_get(pres, slide, i); + } + i++; + } + eyelight_viewer_slide_goto(pres, id_after + 1); +} + Modified: trunk/PROTO/eyelight/src/lib/eyelight_viewer.c =================================================================== --- trunk/PROTO/eyelight/src/lib/eyelight_viewer.c 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/eyelight_viewer.c 2009-08-21 13:30:35 UTC (rev 41914) @@ -73,6 +73,8 @@ if(eyelight_viewer_size_get(pres)>0) eyelight_viewer_slide_goto(pres,0); + else + pres->current = -1; eyelight_viewer_thumbnails_init(pres); @@ -83,6 +85,37 @@ printf("## Number of slides: %d\n\n",pres->size); } +int eyelight_viewer_new_presentation_file_set(Eyelight_Viewer *pres, const char* presentation) +{ + EYELIGHT_FREE(pres->elt_file); + + eyelight_viewer_clean(pres); + + if(presentation && ecore_file_exists(presentation)) + pres->elt_file = strdup(presentation); + else + pres->elt_file = NULL; + + pres -> compiler = eyelight_elt_load(pres->elt_file); + pres->size = eyelight_nb_slides_get(pres->compiler); + + int i; + for(i=0; i<pres->size; i++) + { + pres->slides = eina_list_append(pres->slides, calloc(1, sizeof(Eyelight_Slide))); + } + + + pres->current = -1; + + eyelight_viewer_thumbnails_init(pres); + eyelight_viewer_thumbnails_background_load_start(pres); + + printf("## Presentation file: %s\n",pres->elt_file); + printf("## Theme: %s\n",pres->theme); + printf("## Number of slides: %d\n\n",pres->size); +} + /** * Set the presentation elt file */ @@ -463,6 +496,8 @@ if(!slide->obj) { + eyelight_slide_clean(slide); + slide->obj = eyelight_viewer_slide_load(pres,slide,pos); eyelight_viewer_slide_transitions_load(pres,slide,pos); evas_object_move (slide->obj, pres->current_pos_x, pres->current_pos_y); @@ -508,7 +543,6 @@ l = compiler->root->l; int i_slide = -1; - //retrieve the slide and the layout while( l && i_slide < pos) { @@ -616,11 +650,12 @@ char buf[EYELIGHT_BUFLEN]; const char* trans_previous; const char* trans_next; - eyelight_slide_transitions_get(pres,pres->current,&trans_previous, &trans_next); if(pres->current>=pres->size-1) return ; + eyelight_slide_transitions_get(pres,pres->current,&trans_previous, &trans_next); + Eyelight_Slide *slide = eina_list_nth(pres->slides,pres->current); Eyelight_Slide *slide_next = eina_list_nth(pres->slides,pres->current+1); @@ -655,11 +690,11 @@ const char* trans_previous; const char* trans_next; - eyelight_slide_transitions_get(pres,pres->current,&trans_previous, &trans_next); - if(pres->current<=0) return ; + eyelight_slide_transitions_get(pres,pres->current,&trans_previous, &trans_next); + Eyelight_Slide *slide = eina_list_nth(pres->slides,pres->current); Eyelight_Slide *slide_prev = eina_list_nth(pres->slides,pres->current-1); @@ -698,14 +733,14 @@ slide->obj = eyelight_viewer_slide_get(pres,slide, slide_id); edje_object_signal_emit(slide->obj,"show","eyelight"); - if(pres->current!=slide_id) + if(pres->current!=slide_id && pres->current>=0) { slide = eina_list_nth(pres->slides, pres->current); slide->obj = eyelight_viewer_slide_get(pres,slide, pres->current); edje_object_signal_emit(slide->obj,"hide","eyelight"); - pres->current = slide_id; } + pres->current = slide_id; pres->slide_with_transition[0] = NULL; pres->slide_with_transition[1] = NULL; eyelight_viewer_clear (pres); Modified: trunk/PROTO/eyelight/src/lib/eyelight_viewer.h =================================================================== --- trunk/PROTO/eyelight/src/lib/eyelight_viewer.h 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/eyelight_viewer.h 2009-08-21 13:30:35 UTC (rev 41914) @@ -82,22 +82,6 @@ //list of type Eyelight_Slide Eina_List* slides; - //Evas_Object** slides; - //for each slide, the list of items (text item, image ...) - //we need this list to apply the scale when the size of the presentation change - //theses objects are destroyed when the slide is destroyed, we do not need to destroy them - //Eina_List** edje_items; - //for each slide, the list of edje object swallow inside - //this is the objects added by the block edje{} in a presentation - //when we destroy a slide we need to destroy each object swallowed inside - //Eina_List** edje_objects; - //for each slide, the list of custom area - //the type of nodes is Eyelight_Custom_Area - //Eina_List** custom_areas; - //for each slide, the list of video object - //the type of nodes is Eyelight_Video - //Eina_List** video_objects; - char *video_module; int size; Modified: trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.c =================================================================== --- trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.c 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.c 2009-08-21 13:30:35 UTC (rev 41914) @@ -44,6 +44,15 @@ pres->thumbnails->idle = ecore_idler_add(_eyelight_viewer_thumbnails_load_idle,pres); } +void eyelight_viewer_thumbnails_background_load_stop(Eyelight_Viewer* pres) +{ + if(pres->thumbnails->idle) + { + ecore_idler_del(pres->thumbnails->idle); + pres->thumbnails->idle = NULL; + } + pres->thumbnails->is_background_load = 0; +} void eyelight_viewer_thumbnails_size_set(Eyelight_Viewer *pres, int w, int h) { Modified: trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.h =================================================================== --- trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.h 2009-08-21 13:07:43 UTC (rev 41913) +++ trunk/PROTO/eyelight/src/lib/eyelight_viewer_thumbnails.h 2009-08-21 13:30:35 UTC (rev 41914) @@ -42,6 +42,7 @@ void eyelight_viewer_thumbnails_background_load_start(Eyelight_Viewer* pres); +void eyelight_viewer_thumbnails_background_load_stop(Eyelight_Viewer* pres); const Eyelight_Thumb* eyelight_viewer_thumbnails_get(Eyelight_Viewer* pres, int pos); const Eyelight_Thumb* eyelight_viewer_thumbnails_custom_size_get(Eyelight_Viewer* pres, int pos, int w, int h); |