Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_tree_model.c etk_tree_model.h Log Message: - new tree model, progress bar (fraction mode supported, pulse mode not yet) =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_tree_model.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- etk_tree_model.c 28 Mar 2006 07:24:57 -0000 1.8 +++ etk_tree_model.c 6 Apr 2006 00:29:21 -0000 1.9 @@ -33,6 +33,12 @@ char *text; } Etk_Tree_Model_Icon_Text_Data; +typedef struct _Etk_Tree_Model_Progressbar_Data +{ + double fraction; + char *text; +} Etk_Tree_Model_Progressbar_Data; + /* Text model */ static void etk_tree_model_text_cell_data_free(Etk_Tree_Model *model, void *cell_data); static void etk_tree_model_text_cell_data_set(Etk_Tree_Model *model, void *cell_data, va_list *args); @@ -65,6 +71,12 @@ static void etk_tree_model_checkbox_objects_create(Etk_Tree_Model *model, Evas_Object **cell_objects, Evas *evas); static void etk_tree_model_checkbox_render(Etk_Tree_Model *model, Etk_Tree_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects); static void etk_tree_model_checkbox_clicked_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +/* Progressbar model */ +static void etk_tree_model_progress_bar_cell_data_free(Etk_Tree_Model *model, void *cell_data); +static void etk_tree_model_progress_bar_cell_data_set(Etk_Tree_Model *model, void *cell_data, va_list *args); +static void etk_tree_model_progress_bar_cell_data_get(Etk_Tree_Model *model, void *cell_data, va_list *args); +static void etk_tree_model_progress_bar_objects_create(Etk_Tree_Model *model, Evas_Object **cell_objects, Evas *evas); +static void etk_tree_model_progress_bar_render(Etk_Tree_Model *model, Etk_Tree_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects); /** * @brief Creates a model of column whose cells contain a text @@ -222,6 +234,31 @@ } /** + * @brief Creates a model of column whose cells contain a progress bar + * @param tree a tree + * @return Returns the new model + * @note You don't need to free it with etk_tree_model_free() if you use it in a tree. It will be freed when the tree is destroyed + */ +Etk_Tree_Model *etk_tree_model_progress_bar_new(Etk_Tree *tree) +{ + Etk_Tree_Model *tree_model; + + tree_model = calloc(1, sizeof(Etk_Tree_Model)); + + tree_model->tree = tree; + tree_model->xalign = 0.5; + tree_model->yalign = 0.5; + tree_model->cell_data_size = sizeof(Etk_Tree_Model_Progressbar_Data); + tree_model->cell_data_set = etk_tree_model_progress_bar_cell_data_set; + tree_model->cell_data_get = etk_tree_model_progress_bar_cell_data_get; + tree_model->cell_data_free = etk_tree_model_progress_bar_cell_data_free; + tree_model->objects_create = etk_tree_model_progress_bar_objects_create; + tree_model->render = etk_tree_model_progress_bar_render; + + return tree_model; +} + +/** * @brief Frees a tree model. Usually, you don't need to call it, it's automatically called when the tree is destroyed * @param model the model to free */ @@ -894,4 +931,86 @@ etk_tree_row_fields_get(row, model->col, &checked, NULL); etk_tree_row_fields_set(row, model->col, !checked, NULL); } +} + +/*--------------------- + * Progressbar Model + *-------------------*/ + +/* Progressbar: cell_data_free */ +static void etk_tree_model_progress_bar_cell_data_free(Etk_Tree_Model *model, void *cell_data) +{ + Etk_Tree_Model_Progressbar_Data *pbar_data; + + if (!(pbar_data = cell_data)) + return; + free(pbar_data->text); +} + +/* Progressbar: cell_data_set */ +static void etk_tree_model_progress_bar_cell_data_set(Etk_Tree_Model *model, void *cell_data, va_list *args) +{ + Etk_Tree_Model_Progressbar_Data *pbar_data; + char *text; + + if (!(pbar_data = cell_data) || !args) + return; + + free(pbar_data->text); + pbar_data->text = NULL; + + pbar_data->fraction = va_arg(*args, double); + if ((text = va_arg(*args, char *))) + pbar_data->text = strdup(text); +} + +/* Progressbar: cell_data_get */ +static void etk_tree_model_progress_bar_cell_data_get(Etk_Tree_Model *model, void *cell_data, va_list *args) +{ + Etk_Tree_Model_Progressbar_Data *pbar_data; + char **string; + double *fraction; + + if (!(pbar_data = cell_data) || !args) + return; + + fraction = va_arg(*args, double *); + if (fraction) + *fraction = pbar_data->fraction; + + string = va_arg(*args, char **); + if (string) + *string = pbar_data->text; +} + +/* Progressbar: objects_create */ +static void etk_tree_model_progress_bar_objects_create(Etk_Tree_Model *model, Evas_Object **cell_objects, Evas *evas) +{ + if (!cell_objects || !evas) + return; + + /* TODO */ + cell_objects[0] = edje_object_add(evas); + edje_object_file_set(cell_objects[0], etk_theme_widget_theme_get(), "progress_bar"); +} + +/* Progressbar: Render */ +static void etk_tree_model_progress_bar_render(Etk_Tree_Model *model, Etk_Tree_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects) +{ + Etk_Tree_Model_Progressbar_Data *pbar_data; + Evas_Coord w, h; + + if (!(pbar_data = cell_data)) + return; + + edje_object_part_drag_value_set(cell_objects[0], "filler", 0.0, 0.0); + edje_object_part_drag_size_set(cell_objects[0], "filler", pbar_data->fraction, 0.0); + + edje_object_part_text_set(cell_objects[0], "text", pbar_data->text ? pbar_data->text : ""); + + evas_object_data_set(cell_objects[0], "_Etk_Tree_Model_Progressbar::Row", row); + edje_object_size_min_get(cell_objects[0], &w, &h); + evas_object_move(cell_objects[0], geometry.x + (geometry.w - w) * model->xalign, geometry.y + (geometry.h - h) * model->yalign); + evas_object_resize(cell_objects[0], w, h); + evas_object_show(cell_objects[0]); } =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_tree_model.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- etk_tree_model.h 28 Mar 2006 07:24:57 -0000 1.4 +++ etk_tree_model.h 6 Apr 2006 00:29:21 -0000 1.5 @@ -49,6 +49,7 @@ Etk_Tree_Model *etk_tree_model_image_new(Etk_Tree *tree, Etk_Tree_Model_Image_Type image_type); Etk_Tree_Model *etk_tree_model_icon_text_new(Etk_Tree *tree, Etk_Tree_Model_Image_Type icon_type); Etk_Tree_Model *etk_tree_model_checkbox_new(Etk_Tree *tree); +Etk_Tree_Model *etk_tree_model_progress_bar_new(Etk_Tree *tree); void etk_tree_model_free(Etk_Tree_Model *model); void etk_tree_model_alignment_set(Etk_Tree_Model *model, float xalign, float yalign); ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs