Enlightenment CVS committal Author : dj2 Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: Ewl.h.in Makefile.am ewl_tree2.c ewl_tree2.h Added Files: ewl_model.c ewl_model.h ewl_view.c ewl_view.h Log Message: - working on ewl_tree2 =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/Ewl.h.in,v retrieving revision 1.30 retrieving revision 1.31 diff -u -3 -r1.30 -r1.31 --- Ewl.h.in 4 Feb 2006 05:58:48 -0000 1.30 +++ Ewl.h.in 6 Feb 2006 03:40:26 -0000 1.31 @@ -266,6 +266,9 @@ #include <ewl_object.h> #include <ewl_widget.h> +#include <ewl_model.h> +#include <ewl_view.h> + #include <ewl_attach.h> #include <ewl_container.h> @@ -333,6 +336,7 @@ #include <ewl_dnd.h> #include <ewl_tree.h> +#include <ewl_tree2.h> #ifdef __cplusplus } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/Makefile.am,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- Makefile.am 4 Feb 2006 05:58:48 -0000 1.21 +++ Makefile.am 6 Feb 2006 03:40:26 -0000 1.22 @@ -49,6 +49,7 @@ ewl_menu_base.h \ ewl_menu_item.h \ ewl_misc.h \ + ewl_model.h \ ewl_notebook.h \ ewl_object.h \ ewl_overlay.h \ @@ -70,6 +71,7 @@ ewl_tree.h \ ewl_tree2.h \ ewl_theme.h \ + ewl_view.h \ ewl_widget.h \ ewl_window.h @@ -114,6 +116,7 @@ ewl_menu_base.c \ ewl_menu_item.c \ ewl_misc.c \ + ewl_model.c \ ewl_notebook.c \ ewl_object.c \ ewl_overlay.c \ @@ -135,6 +138,7 @@ ewl_theme.c \ ewl_tree.c \ ewl_tree2.c \ + ewl_view.c \ ewl_widget.c \ ewl_window.c \ ewl_private.h \ =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_tree2.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ewl_tree2.c 30 Jan 2006 03:01:21 -0000 1.4 +++ ewl_tree2.c 6 Feb 2006 03:40:26 -0000 1.5 @@ -2,7 +2,8 @@ #include "ewl_debug.h" #include "ewl_macros.h" #include "ewl_private.h" -#include "ewl_tree2.h" + +static void ewl_tree2_cb_column_free(void *data); /** * @return Returns NULL on failure, a new tree widget on success. @@ -19,7 +20,8 @@ if (!w) DRETURN_PTR(NULL, DLEVEL_STABLE); - if (!ewl_tree2_init(EWL_TREE2(w))) { + if (!ewl_tree2_init(EWL_TREE2(w))) + { ewl_widget_destroy(w); DRETURN_PTR(NULL, DLEVEL_STABLE); } @@ -46,200 +48,467 @@ ewl_widget_appearance_set(EWL_WIDGET(tree), EWL_TREE2_TYPE); ewl_widget_inherit(EWL_WIDGET(tree), EWL_TREE2_TYPE); - DRETURN_INT(TRUE, DLEVEL_STABLE); + tree->columns = ecore_list_new(); + ecore_list_set_free_cb(tree->columns, ewl_tree2_cb_column_free); + + tree->mode = EWL_TREE_MODE_NONE; + +{ +Ewl_Widget *l; +l = ewl_label_new(); +ewl_label_text_set(EWL_LABEL(l), "TEST"); +ewl_container_child_append(EWL_CONTAINER(tree), l); +ewl_widget_show(l); } -/* - * MODEL CODE BEGINS HERE - */ + tree->header = ewl_hpaned_new(); + ewl_container_child_append(EWL_CONTAINER(tree), tree->header); + ewl_widget_appearance_set(EWL_WIDGET(tree->header), "tree_header"); + ewl_object_fill_policy_set(EWL_OBJECT(tree->header), + EWL_FLAG_FILL_HFILL | EWL_FLAG_FILL_VSHRINK); + ewl_widget_show(tree->header); + + ewl_tree2_headers_visible_set(tree, TRUE); + ewl_tree2_fixed_rows_set(tree, FALSE); + + ewl_callback_append(EWL_WIDGET(tree), EWL_CALLBACK_CONFIGURE, + ewl_tree2_cb_configure, NULL); + ewl_callback_prepend(EWL_WIDGET(tree), EWL_CALLBACK_DESTROY, + ewl_tree2_cb_destroy, NULL); + + ewl_widget_focusable_set(EWL_WIDGET(tree), FALSE); + + DRETURN_INT(TRUE, DLEVEL_STABLE); +} /** + * @param tree: The Ewl_Tree to set the data into + * @param data: The data to set into the tree + * @return Returns no value. */ -Ewl_Model * -ewl_model_new(void) +void +ewl_tree2_data_set(Ewl_Tree2 *tree, void *data) { - Ewl_Model *model; - - DENTER_FUNCTION(DLEVEL_UNSTABLE); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); - model = NEW(Ewl_Model, 1); - if (!ewl_model_init(model)) - FREE(model); + tree->data = data; - DRETURN_PTR(model, DLEVEL_UNSTABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The Ewl_Tree to get the data from + * @return Returns the data currently set into the tree or NULL on failure */ -int -ewl_model_init(Ewl_Model *model) +void * +ewl_tree2_data_get(Ewl_Tree2 *tree) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR_RET("model", model, FALSE); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("tree", tree, NULL); + DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, NULL); - DRETURN_INT(TRUE, DLEVEL_UNSTABLE); + DRETURN_PTR(tree->data, DLEVEL_STABLE); } /** + * @param tree: The Ewl_Tree to append the column too + * @param model: The model to use for this column + * @param view: The view to use for this column + * @return Returns no value. */ void -ewl_model_fetch_set(Ewl_Model *m, Ewl_Model_Fetch get) +ewl_tree2_column_append(Ewl_Tree2 *tree, Ewl_Model *model, Ewl_View *view) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR("m", m); + Ewl_Tree2_Column *c; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_PARAM_PTR("model", model); + DCHECK_PARAM_PTR("view", view); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); + + c = ewl_tree2_column_new(); + if (!c) + { + DWARNING("Unable to create new tree column.\n"); + DRETURN(DLEVEL_STABLE); + } - m->fetch = get; + ewl_tree2_column_model_set(c, model); + ewl_tree2_column_view_set(c, view); - DLEAVE_FUNCTION(DLEVEL_UNSTABLE); + ecore_list_append(tree->columns, c); + + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The Ewl_Tree to prepend the column too + * @param model: The model to use for this column + * @param view: The view to use for this column + * @return Returns no value. */ -Ewl_Model_Fetch -ewl_model_fetch_get(Ewl_Model *m) +void +ewl_tree2_column_prepend(Ewl_Tree2 *tree, Ewl_Model *model, Ewl_View *view) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR_RET("m", m, NULL); + Ewl_Tree2_Column *c; - DRETURN_PTR(m->fetch, DLEVEL_UNSTABLE); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_PARAM_PTR("model", model); + DCHECK_PARAM_PTR("view", view); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); + + c = ewl_tree2_column_new(); + if (!c) + { + DWARNING("Unable to create new tree column.\n"); + DRETURN(DLEVEL_STABLE); + } + + ewl_tree2_column_model_set(c, model); + ewl_tree2_column_view_set(c, view); + + ecore_list_prepend(tree->columns, c); + + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The Ewl_Tree to insert the column into + * @param model: The model to use for this column + * @param view: The view to use for this column + * @param idx: The index to insert into + * @return Returns no value. */ void -ewl_model_subfetch_set(Ewl_Model *m, Ewl_Model_Fetch get) +ewl_tree2_column_insert(Ewl_Tree2 *tree, Ewl_Model *model, Ewl_View *view, + unsigned int idx) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR("m", m); + Ewl_Tree2_Column *c; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_PARAM_PTR("model", model); + DCHECK_PARAM_PTR("view", view); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); + + c = ewl_tree2_column_new(); + if (!c) + { + DWARNING("Unable to create new tree column.\n"); + DRETURN(DLEVEL_STABLE); + } + + ewl_tree2_column_model_set(c, model); + ewl_tree2_column_view_set(c, view); - m->subfetch = get; + ecore_list_goto_index(tree->columns, idx); + ecore_list_insert(tree->columns, c); - DLEAVE_FUNCTION(DLEVEL_UNSTABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The tree to remove the column from + * @param idx: The column index to remove + * @return Returns no value */ -Ewl_Model_Fetch -ewl_model_subfetch_get(Ewl_Model *m) +void +ewl_tree2_column_remove(Ewl_Tree2 *tree, unsigned int idx) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR_RET("m", m, NULL); + Ewl_Tree2_Column *c; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); + + ecore_list_goto_index(tree->columns, idx); + c = ecore_list_remove(tree->columns); + + ewl_tree2_column_destroy(c); - DRETURN_PTR(m->subfetch, DLEVEL_UNSTABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The tree to toggle the header visibility + * @param visible: The visiblity to set the tree to (TRUE == on, FALSE == off) + * @return Returns no value */ void -ewl_model_sort_set(Ewl_Model *m, Ewl_Model_Sort sort) +ewl_tree2_headers_visible_set(Ewl_Tree2 *tree, unsigned char visible) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR("m", m); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); - m->sort = sort; + tree->headers_visible = !!visible; - DLEAVE_FUNCTION(DLEVEL_UNSTABLE); + if (!tree->headers_visible) + ewl_widget_hide(tree->header); + else + ewl_widget_show(tree->header); + + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The tree to get the header visiblity from + * @return Returns the current header visiblity of the tree */ -Ewl_Model_Sort -ewl_model_sort_get(Ewl_Model *m) +unsigned int +ewl_tree2_headers_visible_get(Ewl_Tree2 *tree) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR_RET("m", m, NULL); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("tree", tree, FALSE); + DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, FALSE); - DRETURN_PTR(m->sort, DLEVEL_UNSTABLE); + DRETURN_INT(tree->headers_visible, DLEVEL_STABLE); } /** + * @param tree: The tree to get the selected cells from + * @return Returns an Ecore_List of cells selected in the tree + */ +Ecore_List * +ewl_tree2_selected_cells_get(Ewl_Tree2 *tree) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("tree", tree, FALSE); + DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, FALSE); + + DRETURN_PTR(tree->selected, DLEVEL_STABLE); +} + +/** + * @param tree: The tree to clear the selected cells from + * @return Returns no value. */ void -ewl_model_count_set(Ewl_Model *m, Ewl_Model_Count count) +ewl_tree2_selected_cells_clear(Ewl_Tree2 *tree) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR("m", m); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); + + if (tree->mode == EWL_TREE_MODE_NONE) + DRETURN(DLEVEL_STABLE); - m->count = count; + ecore_list_clear(tree->selected); - DLEAVE_FUNCTION(DLEVEL_UNSTABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } -/* - * VIEW CODE BEGINS HERE +/** + * @param tree: The tree to get the mode from + * @return Returns the current Ewl_Tree_Mode of the tree */ +Ewl_Tree_Mode +ewl_tree2_mode_get(Ewl_Tree2 *tree) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("tree", tree, EWL_TREE_MODE_NONE); + DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, EWL_TREE_MODE_NONE); + + DRETURN_INT(tree->mode, DLEVEL_STABLE); +} /** + * @param tree: The Ewl_Tree to set the mode into + * @param mode: The Ewl_Tree_Mode to set into the tree + * @return Returns no value. */ -Ewl_View * -ewl_view_new(void) +void +ewl_tree2_mode_set(Ewl_Tree2 *tree, Ewl_Tree_Mode mode) { - Ewl_View *view; + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); - DENTER_FUNCTION(DLEVEL_UNSTABLE); + if (tree->mode == mode) + DRETURN(DLEVEL_STABLE); - view = NEW(Ewl_View, 1); - if (!ewl_view_init(view)) - FREE(view); + tree->mode = mode; + + /* if the mode is none then we don't care about the selected list */ + if (tree->mode == EWL_TREE_MODE_NONE) + { + if (tree->selected) + ecore_list_destroy(tree->selected); + } + else + { + if (!tree->selected) + tree->selected = ecore_list_new(); + } - DRETURN_PTR(view, DLEVEL_UNSTABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The tree to set the fixed row flag into + * @param fixed: The fixed row flag to set into the tree + * @return Returns no value. */ -int -ewl_view_init(Ewl_View *view) +void +ewl_tree2_fixed_rows_set(Ewl_Tree2 *tree, unsigned int fixed) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR_RET("view", view, FALSE); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("tree", tree); + DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE); + + tree->fixed = fixed; - DRETURN_INT(TRUE, DLEVEL_UNSTABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } /** + * @param tree: The tree to get the fixed row flag from + * @return Returns the current fixed row flag of the tree */ +unsigned int +ewl_tree2_fixed_rows_get(Ewl_Tree2 *tree) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("tree", tree, FALSE); + DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, FALSE); + + DRETURN_INT(tree->fixed, DLEVEL_STABLE); +} + void -ewl_view_constructor_set(Ewl_View *v, Ewl_View_Constructor construct) +ewl_tree2_cb_destroy(Ewl_Widget *w, void *ev __UNUSED__, void *data __UNUSED__) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR("v", v); + Ewl_Tree2 *t; - v->construct = construct; + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); + + t = EWL_TREE2(w); - DLEAVE_FUNCTION(DLEVEL_UNSTABLE); + ecore_list_destroy(t->columns); + if (t->selected) ecore_list_destroy(t->selected); + + DLEAVE_FUNCTION(DLEVEL_STABLE); } -/** - */ -Ewl_View_Constructor -ewl_view_constructor_get(Ewl_View *v) +void +ewl_tree2_cb_configure(Ewl_Widget *w, void *ev __UNUSED__, void *data __UNUSED__) +{ + Ewl_Tree2 *tree; + Ewl_Tree2_Column *col; + int column = 0; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("w", w, EWL_TREE2_TYPE); + + tree = EWL_TREE2(w); + + /* setup the headers */ + ewl_container_reset(EWL_CONTAINER(tree->header)); + ecore_list_goto_first(tree->columns); + while ((col = ecore_list_next(tree->columns))) + { + Ewl_Widget *h; + + h = col->model->header_fetch(tree->data, column); + ewl_container_child_append(EWL_CONTAINER(tree->header), h); + +printf("%s\n", ewl_label_text_get(EWL_LABEL(h))); + + column ++; + } + + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +static void +ewl_tree2_cb_column_free(void *data) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR_RET("v", v, NULL); + Ewl_Tree2_Column *c; + + DENTER_FUNCTION(DLEVEL_STABLE); - DRETURN_PTR(v->construct, DLEVEL_UNSTABLE); + c = data; + ewl_tree2_column_destroy(c); + + DLEAVE_FUNCTION(DLEVEL_STABLE); } -/** +/* + * Ewl_Tree2_Column stuff */ +Ewl_Tree2_Column * +ewl_tree2_column_new(void) +{ + Ewl_Tree2_Column *c; + + DENTER_FUNCTION(DLEVEL_STABLE); + + c = NEW(Ewl_Tree2_Column, 1); + + DRETURN_PTR(c, DLEVEL_STABLE); +} + void -ewl_view_assign_set(Ewl_View *v, Ewl_View_Assign assign) +ewl_tree2_column_destroy(Ewl_Tree2_Column *c) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("c", c); + + c->model = NULL; + c->view = NULL; + FREE(c); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +void +ewl_tree2_column_model_set(Ewl_Tree2_Column *c, Ewl_Model *m) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("c", c); + DCHECK_PARAM_PTR("m", m); + + c->model = m; + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +Ewl_Model * +ewl_tree2_column_model_get(Ewl_Tree2_Column *c) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("c", c, NULL); + + DRETURN_PTR(c->model, DLEVEL_STABLE); +} + +void +ewl_tree2_column_view_set(Ewl_Tree2_Column *c, Ewl_View *v) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("c", c); DCHECK_PARAM_PTR("v", v); - v->assign = assign; + c->view = v; - DLEAVE_FUNCTION(DLEVEL_UNSTABLE); + DLEAVE_FUNCTION(DLEVEL_STABLE); } -/** - */ -Ewl_View_Assign -ewl_view_assign_get(Ewl_View *v) +Ewl_View * +ewl_tree2_column_view_get(Ewl_Tree2_Column *c) { - DENTER_FUNCTION(DLEVEL_UNSTABLE); - DCHECK_PARAM_PTR_RET("v", v, NULL); + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR_RET("c", c, NULL); - DRETURN_PTR(v->assign, DLEVEL_UNSTABLE); + DRETURN_PTR(c->view, DLEVEL_STABLE); } + + =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/lib/ewl_tree2.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- ewl_tree2.h 12 Jan 2006 18:21:19 -0000 1.13 +++ ewl_tree2.h 6 Feb 2006 03:40:26 -0000 1.14 @@ -2,8 +2,8 @@ #define _EWL_TREE2_H /** - * @file ewl_tree.h - * @defgroup Ewl_Tree Tree: A Widget for List or Tree Layout + * @file ewl_tree2.h + * @defgroup Ewl_Tree2 Tree: A Widget for List or Tree Layout * @brief Defines a widget for laying out other widgets in a tree or list * like manner. This also fulfills the functionality often seen in a table * widget. @@ -62,64 +62,32 @@ #define EWL_TREE2_TYPE "tree2" -typedef void *(*Ewl_Model_Fetch)(void *data, int row, int column); - -#define EWL_MODEL_DATA_GET(f) ((Ewl_Model_Fetch *)f) - -typedef int (*Ewl_Model_Sort)(void *data, int column); - -#define EWL_MODEL_DATA_SORT(f) ((Ewl_Model_Sort *)f) - -typedef int (*Ewl_Model_Count)(void *data); - -#define EWL_MODEL_DATA_COUNT(f) ((Ewl_Model_Count *)f) - /** - * @def EWL_MODEL(model) - * Typecasts a pointer to an Ewl_Model pointer. + * @def EWL_TREE2_COLUMN + * Typecasts a pointer to an Ewl_Tree2_Column pointer. */ -#define EWL_MODEL(model) ((Ewl_Model *)model) - -typedef struct Ewl_Model Ewl_Model; - -struct Ewl_Model -{ - Ewl_Model_Fetch fetch; /**< Retrieve data for a cell */ - Ewl_Model_Fetch subfetch; /**< Check for subdata */ - Ewl_Model_Sort sort; /**< Trigger sort on column */ - Ewl_Model_Count count; /**< Count of data items */ -}; - -typedef int (*Ewl_View_Constructor)(void *data); - -#define EWL_VIEW_CONSTRUCTOR(f) ((Ewl_View_Constructor *)f) - -typedef int (*Ewl_View_Assign)(Ewl_Widget *w, void *data); +#define EWL_TREE2_COLUMN(c) ((Ewl_Tree2_Column *)c) -#define EWL_VIEW_ASSIGN(f) ((Ewl_View_Assign *)f) +typedef struct Ewl_Tree2_Column Ewl_Tree2_Column; /** - * @def EWL_VIEW(view) - * Typecasts a pointer to an Ewl_View pointer. + * @struct Ewl_Tree2_Column + * Holdes the model and view to use for this column in the tree */ -#define EWL_VIEW(view) ((Ewl_View *)view) - -typedef struct Ewl_View Ewl_View; - -struct Ewl_View +struct Ewl_Tree2_Column { - Ewl_View_Constructor construct; /**< Create a widget for display */ - Ewl_View_Assign assign; /**< Assign data to a widget */ + Ewl_Model *model; /**< The model for the column */ + Ewl_View *view; /**< The view for the column */ }; -typedef struct Ewl_Tree2 Ewl_Tree2; - /** * @def EWL_TREE2(t) * Typecasts a pointer to an Ewl_Tree pointer. */ #define EWL_TREE2(t) ((Ewl_Tree2 *)t) +typedef struct Ewl_Tree2 Ewl_Tree2; + /** * @struct Ewl_Tree * The tree is a columnar listing, where items in the list may be nested @@ -129,11 +97,17 @@ { Ewl_Container container; /**< Inherit from container. */ - Ewl_Model *models; /**< Data models for the tree columns. */ + Ewl_Widget *header; /**< The tree header */ + Ecore_List *columns; /**< The tree columns. */ void *data; /**< Data provided to the tree */ + int *rowcache; /**< Cache of row sizes */ - int fixed; /**< Rows are fixed height */ + Ecore_List *selected; /**< The list of selected cells */ + + Ewl_Tree_Mode mode; /**< The mode of the tree */ + unsigned int fixed:1; /**< Rows are fixed height */ + unsigned int headers_visible:1; /**< Are the headers visible? */ }; /* @@ -142,58 +116,52 @@ Ewl_Widget *ewl_tree2_new(void); int ewl_tree2_init(Ewl_Tree2 *tree); -void ewl_tree2_data_set(Ewl_Tree2 *m, void *data); -void *ewl_tree2_data_get(Ewl_Tree2 *m); +void ewl_tree2_data_set(Ewl_Tree2 *m, void *data); +void *ewl_tree2_data_get(Ewl_Tree2 *m); -void ewl_tree2_column_append(Ewl_Tree2 *t, Ewl_Model *m, Ewl_View *v); -void ewl_tree2_column_prepend(Ewl_Tree2 *t, Ewl_Model *m, Ewl_View *v); -void ewl_tree2_column_remove(Ewl_Tree2 *t, Ewl_Model *m, Ewl_View *v); +void ewl_tree2_column_append(Ewl_Tree2 *t, Ewl_Model *m, + Ewl_View *v); +void ewl_tree2_column_prepend(Ewl_Tree2 *t, Ewl_Model *m, + Ewl_View *v); +void ewl_tree2_column_insert(Ewl_Tree2 *t, Ewl_Model *m, + Ewl_View *v, + unsigned int idx); +void ewl_tree2_column_remove(Ewl_Tree2 *t, unsigned int idx); void ewl_tree2_headers_visible_set(Ewl_Tree2 *tree, unsigned char visible); unsigned int ewl_tree2_headers_visible_get(Ewl_Tree2 *tree); -Ecore_List *ewl_tree2_selected_get(Ewl_Tree2 *tree); -void ewl_tree2_selected_clear(Ewl_Tree2 *tree); +Ecore_List *ewl_tree2_selected_cells_get(Ewl_Tree2 *tree); +void ewl_tree2_selected_cells_clear(Ewl_Tree2 *tree); Ewl_Tree_Mode ewl_tree2_mode_get(Ewl_Tree2 *tree); void ewl_tree2_mode_set(Ewl_Tree2 *tree, Ewl_Tree_Mode mode); -void ewl_tree2_fixed_rows_set(Ewl_Tree2 *tree, int fixed); -int ewl_tree2_fixed_rows_get(Ewl_Tree2 *tree); +void ewl_tree2_fixed_rows_set(Ewl_Tree2 *tree, unsigned int fixed); +unsigned int ewl_tree2_fixed_rows_get(Ewl_Tree2 *tree); /* - * View manipulation + * Internal stuff. */ -Ewl_View *ewl_view_new(void); -int ewl_view_init(Ewl_View *view); - -void ewl_view_constructor_set(Ewl_View *view, Ewl_View_Constructor construct); -Ewl_View_Constructor ewl_view_constructor_get(Ewl_View *view); - -void ewl_view_assign_set(Ewl_View *view, Ewl_View_Assign assign); -Ewl_View_Assign ewl_view_assign_get(Ewl_View *view); +void ewl_tree2_cb_destroy(Ewl_Widget *w, void *ev, void *data); +void ewl_tree2_cb_configure(Ewl_Widget *w, void *ev, void *data); /* - * Model manipulation. + * Ewl_Tree2_Column stuff */ -Ewl_Model *ewl_model_new(void); -int ewl_model_init(Ewl_Model *model); +Ewl_Tree2_Column *ewl_tree2_column_new(void); +void ewl_tree2_column_destroy(Ewl_Tree2_Column *c); -void ewl_model_fetch_set(Ewl_Model *m, Ewl_Model_Fetch get); -Ewl_Model_Fetch ewl_model_fetch_get(Ewl_Model *m); +void ewl_tree2_column_model_set(Ewl_Tree2_Column *c, Ewl_Model *m); +Ewl_Model *ewl_tree2_column_model_get(Ewl_Tree2_Column *c); -void ewl_model_subfetch_set(Ewl_Model *m, Ewl_Model_Fetch get); -Ewl_Model_Fetch ewl_model_subfetch_get(Ewl_Model *m); - -void ewl_model_sort_set(Ewl_Model *m, Ewl_Model_Sort sort); -Ewl_Model_Sort ewl_model_sort_get(Ewl_Model *m); - -void ewl_model_count_set(Ewl_Model *m, Ewl_Model_Count count); -Ewl_Model_Count ewl_model_count_get(Ewl_Model *m); +void ewl_tree2_column_view_set(Ewl_Tree2_Column *c, Ewl_View *v); +Ewl_View *ewl_tree2_column_view_get(Ewl_Tree2_Column *c); /** * @} */ #endif + ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs