Enlightenment CVS committal

Author  : dj2
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_filelist_tree.c ewl_model.c ewl_model.h ewl_tree2.c 
        ewl_tree2.h 


Log Message:
- API Breakage
- Break the tree2 api to fully hook into the new mvc calls
- use the mvc_view_set to set the column view onto the tree
  that view will receive the column number and is responsible for creating
  the correct widget
- various other changes see the test app...

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_filelist_tree.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- ewl_filelist_tree.c 25 Mar 2007 02:05:57 -0000      1.10
+++ ewl_filelist_tree.c 25 Mar 2007 04:25:58 -0000      1.11
@@ -144,18 +144,17 @@
        ewl_model_expansion_data_fetch_set(model,
                        ewl_filelist_tree_data_expansion_data_fetch);
 
+       view = ewl_view_new();
+       ewl_view_widget_fetch_set(view, ewl_filelist_tree_cb_widget_fetch);
+       ewl_view_header_fetch_set(view, ewl_filelist_tree_cb_header_fetch);
+
        fl->tree = ewl_tree2_new();
+       ewl_tree2_column_count_set(EWL_TREE2(fl->tree), 2);
        ewl_mvc_data_set(EWL_MVC(fl->tree), data);
        ewl_mvc_model_set(EWL_MVC(fl->tree), model);
+       ewl_mvc_view_set(EWL_MVC(fl->tree), view);
        ewl_container_child_append(EWL_CONTAINER(fl), fl->tree);
        ewl_widget_show(fl->tree);
-
-       view = ewl_view_new();
-       ewl_view_widget_fetch_set(view, ewl_filelist_tree_cb_widget_fetch);
-       ewl_view_header_fetch_set(view, ewl_filelist_tree_cb_header_fetch);
-
-       ewl_tree2_column_append(EWL_TREE2(fl->tree), view, TRUE);
-       ewl_tree2_column_append(EWL_TREE2(fl->tree), view, TRUE);
 
        DRETURN_INT(TRUE, DLEVEL_STABLE);
 }
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_model.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- ewl_model.c 21 Mar 2007 03:22:55 -0000      1.16
+++ ewl_model.c 25 Mar 2007 04:25:58 -0000      1.17
@@ -63,6 +63,37 @@
 }
 
 /**
+ * @param m: The model to work with
+ * @param get: The fetch callback to set
+ * @return Returns no value
+ * @brief Sets the fetch callback into the model
+ */
+void
+ewl_model_data_header_fetch_set(Ewl_Model *m, Ewl_Model_Data_Header_Fetch get)
+{
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("m", m);
+
+       m->header = get;
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+/** 
+ * @param m: The model to work with
+ * @return Returns the header fetch function
+ * @brief Retrieves the header fetch function 
+ */
+Ewl_Model_Data_Header_Fetch
+ewl_model_data_header_fetch_get(Ewl_Model *m)
+{
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET("m", m, NULL);
+       
+       DRETURN_PTR(m->header, DLEVEL_STABLE);
+}
+
+/**
  * @param m: The Ewl_Model to set the fetch callback into
  * @param get: The Ewl_Model_Fetch callback to set
  * @return Returns no value.
@@ -91,6 +122,37 @@
        DCHECK_PARAM_PTR_RET("m", m, NULL);
 
        DRETURN_INT(m->fetch, DLEVEL_STABLE);
+}
+
+/**
+ * @param m: the model to work with
+ * @param sortable: the sortable callback to set
+ * @return Returns no value
+ * @brief Sets the sortable callback
+ */
+void
+ewl_model_column_sortable_set(Ewl_Model *m, Ewl_Model_Column_Sortable sortable)
+{
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR("m", m);
+
+       m->sortable = sortable;
+
+       DLEAVE_FUNCTION(DLEVEL_STABLE);
+}
+
+/**
+ * @param m: the model to work with
+ * @return Returns the sortable callback on the model
+ * @brief Retrieves the sortable callback on the model
+ */
+Ewl_Model_Column_Sortable
+ewl_model_column_sortable_get(Ewl_Model *m)
+{
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET("m", m, NULL);
+       
+       DRETURN_PTR(m->sortable, DLEVEL_STABLE);
 }
 
 /**
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_model.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- ewl_model.h 24 Mar 2007 23:25:43 -0000      1.22
+++ ewl_model.h 25 Mar 2007 04:25:58 -0000      1.23
@@ -157,9 +157,17 @@
                                        Ewl_Model_Data_Fetch get);
 Ewl_Model_Data_Fetch    ewl_model_data_fetch_get(Ewl_Model *m);
 
+void                    ewl_model_data_header_fetch_set(Ewl_Model *m,
+                                       Ewl_Model_Data_Header_Fetch get);
+Ewl_Model_Data_Header_Fetch ewl_model_data_header_fetch_get(Ewl_Model *m);
+
 void                    ewl_model_data_free_set(Ewl_Model *m, 
                                        Ewl_Model_Data_Free assign);
 Ewl_Model_Data_Free     ewl_model_data_free_get(Ewl_Model *m);
+
+void                    ewl_model_column_sortable_set(Ewl_Model *m,
+                                       Ewl_Model_Column_Sortable sortable);
+Ewl_Model_Column_Sortable ewl_model_column_sortable_get(Ewl_Model *m);
 
 void                    ewl_model_data_sort_set(Ewl_Model *m, 
                                        Ewl_Model_Data_Sort sort);
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_tree2.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -3 -r1.68 -r1.69
--- ewl_tree2.c 24 Mar 2007 23:58:20 -0000      1.68
+++ ewl_tree2.c 25 Mar 2007 04:25:58 -0000      1.69
@@ -13,13 +13,11 @@
 #include "ewl_debug.h"
 #include "ewl_macros.h"
 
-static void ewl_tree2_cb_view_change(Ewl_MVC *mvc);
 static void ewl_tree2_build_tree(Ewl_Tree2 *tree);
 static void ewl_tree2_build_tree_rows(Ewl_Tree2 *tree, 
                        Ewl_Model *model, void *data,
                        int colour, Ewl_Widget *parent, 
                        int hidden);
-static void ewl_tree2_cb_column_free(void *data);
 static void ewl_tree2_cb_header_changed(Ewl_Widget *w, void *ev, 
                                                        void *data);
 
@@ -79,9 +77,6 @@
        ewl_object_fill_policy_set(EWL_OBJECT(tree), 
                                EWL_FLAG_FILL_SHRINK | EWL_FLAG_FILL_FILL);
 
-       tree->columns = ecore_list_new();
-       ecore_list_set_free_cb(tree->columns, ewl_tree2_cb_column_free);
-
        tree->type = EWL_TREE_SELECTION_TYPE_CELL;
 
        tree->header = ewl_hpaned_new();
@@ -93,8 +88,7 @@
        ewl_widget_show(tree->header);
 
        /* set the default row view */
-       ewl_mvc_view_change_cb_set(EWL_MVC(tree), ewl_tree2_cb_view_change);
-       ewl_mvc_view_set(EWL_MVC(tree), ewl_tree2_view_scrolled_get());
+       ewl_tree2_content_view_set(tree, ewl_tree2_view_scrolled_get());
 
        ewl_tree2_headers_visible_set(tree, TRUE);
        ewl_tree2_fixed_rows_set(tree, FALSE);
@@ -110,158 +104,107 @@
 }
 
 /**
- * @param tree: The Ewl_Tree to append the column too
- * @param view: The view to use for this column
- * @param sortable: Is the column sortable
- * @return Returns no value.
- * @brief Append a new column to the tree
+ * @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
+ * @brief Toggle if the header is visible in the tree
  */
 void
-ewl_tree2_column_append(Ewl_Tree2 *tree, Ewl_View *view, 
-                               unsigned int sortable)
+ewl_tree2_headers_visible_set(Ewl_Tree2 *tree, unsigned char visible)
 {
-       Ewl_Tree2_Column *c;
-
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR("tree", tree);
-       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.");
+       if (tree->headers_visible == visible)
                DRETURN(DLEVEL_STABLE);
-       }
 
-       ewl_tree2_column_view_set(c, view);
-       ewl_tree2_column_mvc_set(c, EWL_MVC(tree));
-       ewl_tree2_column_sortable_set(c, sortable);
+       tree->headers_visible = !!visible;
+
+       if (!tree->headers_visible)
+               ewl_widget_hide(tree->header);
+       else
+               ewl_widget_show(tree->header);
 
-       ecore_list_append(tree->columns, c);
        ewl_mvc_dirty_set(EWL_MVC(tree), TRUE);
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
 /**
- * @param tree: The Ewl_Tree to prepend the column too
- * @param view: The view to use for this column
- * @param sortable: Is the column sortable
- * @return Returns no value.
- * @brief Prepend a new column to the tree
+ * @param tree: The tree to get the header visiblity from
+ * @return Returns the current header visiblity of the tree
+ * @brief Retrieve if the header is visible in the tree
  */
-void
-ewl_tree2_column_prepend(Ewl_Tree2 *tree, Ewl_View *view, 
-                               unsigned int sortable)
+unsigned int
+ewl_tree2_headers_visible_get(Ewl_Tree2 *tree)
 {
-       Ewl_Tree2_Column *c;
-
        DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("tree", tree);
-       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.");
-               DRETURN(DLEVEL_STABLE);
-       }
-
-       ewl_tree2_column_view_set(c, view);
-       ewl_tree2_column_mvc_set(c, EWL_MVC(tree));
-       ewl_tree2_column_sortable_set(c, sortable);
-
-       ecore_list_prepend(tree->columns, c);
-       ewl_mvc_dirty_set(EWL_MVC(tree), TRUE);
+       DCHECK_PARAM_PTR_RET("tree", tree, FALSE);
+       DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, FALSE);
 
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
+       DRETURN_INT(tree->headers_visible, DLEVEL_STABLE);
 }
 
 /**
- * @param tree: The Ewl_Tree to insert the column into
- * @param view: The view to use for this column
- * @param idx: The index to insert into 
- * @param sortable: Is the column sortable?
- * @return Returns no value.
- * @brief Insert a new column into the tree
+ * @param tree: The tree to work with
+ * @param count: The number of columns in the tree
+ * @return Returns no value
+ * @brief Sets the number of columns in the tree
  */
 void
-ewl_tree2_column_insert(Ewl_Tree2 *tree, Ewl_View *view, unsigned int idx,
-                                               unsigned int sortable)
+ewl_tree2_column_count_set(Ewl_Tree2 *tree, unsigned int count)
 {
-       Ewl_Tree2_Column *c;
-
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR("tree", tree);
-       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.");
-               DRETURN(DLEVEL_STABLE);
-       }
-
-       ewl_tree2_column_view_set(c, view);
-       ewl_tree2_column_mvc_set(c, EWL_MVC(tree));
-       ewl_tree2_column_sortable_set(c, sortable);
-
-       ecore_list_goto_index(tree->columns, idx);
-       ecore_list_insert(tree->columns, c);
-       ewl_mvc_dirty_set(EWL_MVC(tree), TRUE);
+       
+       tree->columns = count;
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
 /**
- * @param tree: The tree to remove the column from
- * @param idx: The column index to remove
- * @return Returns no value
- * @brief Remove a column from the tree
+ * @param tree: The tree to work with
+ * @return Returns the number of columns in the tree
+ * @brief Retrives the number of columns in the tree
  */
-void
-ewl_tree2_column_remove(Ewl_Tree2 *tree, unsigned int idx)
+unsigned int
+ewl_tree2_column_count_get(Ewl_Tree2 *tree)
 {
-       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);
-       ewl_mvc_dirty_set(EWL_MVC(tree), TRUE);
+       DCHECK_PARAM_PTR_RET("tree", tree, 0);
+       DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, 0);
 
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
+       DRETURN_INT(tree->columns, DLEVEL_STABLE);
 }
 
 /**
- * @param tree: The tree to toggle the header visibility
- * @param visible: The visiblity to set the tree to (TRUE == on, FALSE == off)
+ * @param tree: the tree to work with
+ * @param view: The view to set to generate the content area
  * @return Returns no value
- * @brief Toggle if the header is visible in the tree
+ * @brief Sets the view to use to generate the content area
  */
 void
-ewl_tree2_headers_visible_set(Ewl_Tree2 *tree, unsigned char visible)
+ewl_tree2_content_view_set(Ewl_Tree2 *tree, Ewl_View *view)
 {
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR("tree", tree);
+       DCHECK_PARAM_PTR("view", view);
        DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE);
 
-       if (tree->headers_visible == visible)
+       if (tree->content_view == view)
                DRETURN(DLEVEL_STABLE);
 
-       tree->headers_visible = !!visible;
+       tree->content_view = view;
 
-       if (!tree->headers_visible)
-               ewl_widget_hide(tree->header);
-       else
-               ewl_widget_show(tree->header);
+       /* destroy the old view, create a new one and redisplay the tree */
+       if (tree->rows) ewl_widget_destroy(tree->rows);
+
+       tree->rows = view->fetch(NULL, 0, 0);
+       ewl_tree2_view_tree2_set(EWL_TREE2_VIEW(tree->rows), tree);
+       ewl_container_child_append(EWL_CONTAINER(tree), tree->rows);
+       ewl_widget_show(tree->rows);
 
        ewl_mvc_dirty_set(EWL_MVC(tree), TRUE);
 
@@ -269,18 +212,18 @@
 }
 
 /**
- * @param tree: The tree to get the header visiblity from
- * @return Returns the current header visiblity of the tree
- * @brief Retrieve if the header is visible in the tree
+ * @param tree: The tree to work with
+ * @return Returns the view used to generate the content area
+ * @brief Retrives the view used to generate the tree content area
  */
-unsigned int
-ewl_tree2_headers_visible_get(Ewl_Tree2 *tree)
+Ewl_View *
+ewl_tree2_content_view_get(Ewl_Tree2 *tree)
 {
        DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR_RET("tree", tree, FALSE);
-       DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, FALSE);
+       DCHECK_PARAM_PTR_RET("tree", tree, NULL);
+       DCHECK_TYPE_RET("tree", tree, EWL_TREE2_TYPE, NULL);
 
-       DRETURN_INT(tree->headers_visible, DLEVEL_STABLE);
+       DRETURN_PTR(tree->content_view, DLEVEL_STABLE);
 }
 
 /**
@@ -362,11 +305,9 @@
  * @param tree: The tree to work with
  * @return Returns the widget that contains the tree rows
  * @brief Retrieves the widget containing the tree rows
- *
- * XXX This is a badly named function. Too close to the MVC view name
  */
 Ewl_Widget *
-ewl_tree2_view_widget_get(Ewl_Tree2 *tree)
+ewl_tree2_content_widget_get(Ewl_Tree2 *tree)
 {
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR_RET("tree", tree, NULL);
@@ -525,7 +466,6 @@
 
        t = EWL_TREE2(w);
 
-       IF_FREE_LIST(t->columns);
        IF_FREE_HASH(t->expansions);
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
@@ -571,21 +511,19 @@
  * @brief Sorts the tree by the given column
  */
 void
-ewl_tree2_cb_column_sort(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__, 
-                                                               void *data)
+ewl_tree2_cb_column_sort(Ewl_Widget *w, void *ev __UNUSED__, void *data)
 {
-       Ewl_Tree2_Column *c, *col;
-       Ewl_MVC *mvc;
+       Ewl_Tree2 *tree;
        Ewl_Model *model;
        int index = 0;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("data", data);
-
-       c = data;
+       DCHECK_PARAM_PTR("w", w);
+       DCHECK_TYPE("w", w, EWL_WIDGET_TYPE);
 
-       mvc = ewl_tree2_column_mvc_get(c);
-       model = ewl_mvc_model_get(mvc);
+       /* XXX This is kind of a nasty way to get the tree ... */
+       tree = EWL_TREE2(w->parent->parent);
+       model = ewl_mvc_model_get(EWL_MVC(tree));
 
        /* sanity check */
        if (!model || !model->sort)
@@ -594,102 +532,66 @@
                DRETURN(DLEVEL_STABLE);
        }
 
-       /* loop over the columns and reset the sort settings */
-       ecore_list_goto_first(EWL_TREE2(mvc)->columns);
-       while ((col = ecore_list_next(EWL_TREE2(mvc)->columns)))
-       {
-               /* skip the current column */
-               if (col == c)
-               {
-                       /* we're the index before the one we're now on */
-                       index = ecore_list_index(EWL_TREE2(mvc)->columns) - 1;
-                       continue;
-               }
-
-               col->sort = EWL_SORT_DIRECTION_NONE;
-       }
-
-       /* update our sort direction and call the sort function, skipping
+       /* update our sort information and call the sort function, skipping
         * over SORT_NONE */
-       c->sort = ((c->sort + 1) % EWL_SORT_DIRECTION_MAX);
-       if (!c->sort) c->sort ++;
-
-       model->sort(ewl_mvc_data_get(mvc), index, c->sort);
-       ewl_mvc_dirty_set(mvc, TRUE);
+       tree->sort.column = (int)data;
+       tree->sort.direction = ((tree->sort.direction + 1) % 
EWL_SORT_DIRECTION_MAX);
+       if (!tree->sort.direction) tree->sort.direction ++;
 
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
-static void
-ewl_tree2_cb_view_change(Ewl_MVC *mvc)
-{
-       Ewl_View *view;
-       Ewl_Tree2 *t;
-
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("mvc", mvc);
-       DCHECK_TYPE("mvc", mvc, EWL_TREE2_TYPE);
-
-       t = EWL_TREE2(mvc);
-       view = ewl_mvc_view_get(mvc);
-
-       /* destroy the old view, create a new one and redisplay the tree */
-       if (t->rows) ewl_widget_destroy(t->rows);
-
-       t->rows = view->fetch(NULL, 0, 0);
-       ewl_tree2_view_tree2_set(EWL_TREE2_VIEW(t->rows), t);
-       ewl_container_child_append(EWL_CONTAINER(t), t->rows);
-       ewl_widget_show(t->rows);
+       model->sort(ewl_mvc_data_get(EWL_MVC(tree)), index,
+                                       tree->sort.direction);
+       ewl_mvc_dirty_set(EWL_MVC(tree), TRUE);
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
 static void
-ewl_tree2_header_build(Ewl_Tree2 *tree, Ewl_Tree2_Column *col, void *mvc_data, 
int column)
+ewl_tree2_header_build(Ewl_Tree2 *tree,  Ewl_Model *model, Ewl_View *view, 
+                                               void *mvc_data, int column)
 {
        Ewl_Widget *h, *c;
-       Ewl_Model *model;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR("tree", tree);
-       DCHECK_PARAM_PTR("col", col);
+       DCHECK_PARAM_PTR("model", model);
+       DCHECK_PARAM_PTR("view", view);
        DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE);
 
        if (!tree->headers_visible) DRETURN(DLEVEL_STABLE);
 
-       if (!col->view->header_fetch)
+       if (!view->header_fetch)
        {
                DWARNING("Missing header_fetch callback.");
                DRETURN(DLEVEL_STABLE);
        }
 
-       model = ewl_mvc_model_get(EWL_MVC(tree));
-
        h = ewl_hbox_new();
        ewl_container_child_append(EWL_CONTAINER(tree->header), h);
        ewl_widget_appearance_set(h, "header");
        ewl_widget_show(h);
 
-       if (col->sortable)
-               ewl_callback_append(h, EWL_CALLBACK_CLICKED, 
-                                       ewl_tree2_cb_column_sort, col);
-
-       c = col->view->header_fetch(mvc_data, column);
+       c = view->header_fetch(model->header(mvc_data, column), column);
        ewl_object_fill_policy_set(EWL_OBJECT(c), 
                        EWL_FLAG_FILL_HSHRINK | EWL_FLAG_FILL_HFILL);
        ewl_container_child_append(EWL_CONTAINER(h), c);
+       ewl_widget_show(c);
 
        /* display the sort arrow if needed */
-       if (col->sortable)
+       if (model->sortable && model->sortable(mvc_data, column)) 
        {
                char *state_str;
 
+               ewl_callback_append(h, EWL_CALLBACK_CLICKED, 
+                                       ewl_tree2_cb_column_sort, (int 
*)column);
+
                c = ewl_button_new();
                ewl_container_child_append(EWL_CONTAINER(h), c);
 
-               if (col->sort == EWL_SORT_DIRECTION_ASCENDING)
+               if ((column == tree->sort.column)
+                               && (tree->sort.direction == 
EWL_SORT_DIRECTION_ASCENDING))
                        state_str = "ascending";
-               else if (col->sort == EWL_SORT_DIRECTION_DESCENDING)
+               else if ((column == tree->sort.column)
+                               && (tree->sort.direction == 
EWL_SORT_DIRECTION_DESCENDING))
                        state_str = "descending";
                else
                        state_str = "default";
@@ -744,8 +646,7 @@
 static void
 ewl_tree2_build_tree(Ewl_Tree2 *tree)
 {
-       Ewl_Tree2_Column *col;
-       int column = 0;
+       int i;
        void *mvc_data;
        Ewl_Model *model;
 
@@ -758,12 +659,10 @@
 
        /* setup the headers */
        ewl_container_reset(EWL_CONTAINER(tree->header));
-       ecore_list_goto_first(tree->columns);
-       while ((col = ecore_list_next(tree->columns)))
-       {
-               ewl_tree2_header_build(tree, col, mvc_data, column);
-               column ++;
-       }
+       for (i = 0; i < tree->columns; i++)
+               ewl_tree2_header_build(tree, model,
+                               ewl_mvc_view_get(EWL_MVC(tree)), 
+                               mvc_data, i);
 
        if (!model)
                DRETURN(DLEVEL_STABLE);
@@ -778,7 +677,6 @@
 ewl_tree2_build_tree_rows(Ewl_Tree2 *tree, Ewl_Model *model, void *data,
                                int colour, Ewl_Widget *parent, int hidden)
 {
-       Ewl_Tree2_Column *col;
        int i = 0, column, row_count = 0;
 
        DCHECK_PARAM_PTR("tree", tree);
@@ -816,18 +714,13 @@
                colour = (colour + 1) % 2;
 
                /* do the current branch */
-               column = 0;
-               ecore_list_goto_first(tree->columns);
-               while((col = ecore_list_next(tree->columns)))
-               {
-                       ewl_tree2_column_build(EWL_ROW(row), model, col->view,
-                                                       data, i, column, node);
-                       column ++;
-               }
+               for (column = 0; column < tree->columns; column ++)
+                       ewl_tree2_column_build(EWL_ROW(row), model, 
+                                               ewl_mvc_view_get(EWL_MVC(tree)),
+                                               data, i, column, node);
 
                /* check if this is an expansion point */
-               col = ecore_list_goto_first(tree->columns);
-               if (col && model->expansion.is && model->expansion.is(data, i))
+               if (model->expansion.is && model->expansion.is(data, i))
                {
                        int hidden = TRUE;
 
@@ -864,19 +757,6 @@
 }
 
 static void
-ewl_tree2_cb_column_free(void *data)
-{
-       Ewl_Tree2_Column *c;
-
-       DENTER_FUNCTION(DLEVEL_STABLE);
-
-       c = data;
-       ewl_tree2_column_destroy(c);
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
-static void
 ewl_tree2_cb_header_changed(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__, 
                                                                void *data)
 {
@@ -975,189 +855,23 @@
        DRETURN_PTR(w, DLEVEL_STABLE);
 }
 
-
-/*
- * Ewl_Tree2_Column stuff
- */
-
-/**
- * @return Returns a new Ewl_Tree2_Column
- * @brief Creates a new Ewl_Tree2_Column object
- */
-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);
-}
-
-/**
- * @param c: The column to work with
- * @return Returns no value
- * @brief Destroys the given column 
- */
-void
-ewl_tree2_column_destroy(Ewl_Tree2_Column *c)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("c", c);
-
-       c->view = NULL;
-       c->parent = NULL;
-       c->sort = EWL_SORT_DIRECTION_NONE;
-
-       FREE(c);
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
-/**
- * @param c: The column to work with
- * @param v: The view to set
- * @return Returns no value
- * @brief Sets the given view @a v into the column @a c
- */
-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);
-
-       c->view = v;
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
-/**
- * @param c: The Ewl_Tree2_Column to work with
- * @return Returns the view set on the given column
- * @brief Retrieves the view for the given column
- */
-Ewl_View *
-ewl_tree2_column_view_get(Ewl_Tree2_Column *c)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR_RET("c", c, NULL);
-
-       DRETURN_PTR(c->view, DLEVEL_STABLE);
-}
-
-/**
- * @param c: The Ewl_Tree2_Column to work with
- * @param mvc: The parent to set
- * @return Returns no value
- * @brief Sets @a mvc as the parent of the column @a c
- */
-void
-ewl_tree2_column_mvc_set(Ewl_Tree2_Column *c, Ewl_MVC *mvc)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("c", c);
-       DCHECK_PARAM_PTR("mvc", mvc);
-       DCHECK_TYPE("mvc", mvc, EWL_MVC_TYPE);
-
-       c->parent = mvc;
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
-/**
- * @param c: The Ewl_Tree2_Column to work with
- * @return Returns the MVC parent or NULL if none set
- * @brief Retrives the MVC parent
- */
-Ewl_MVC *
-ewl_tree2_column_mvc_get(Ewl_Tree2_Column *c)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR_RET("c", c, NULL);
-
-       DRETURN_PTR(c->parent, DLEVEL_STABLE);
-}
-
-/**
- * @param c: The column to work with
- * @param sortable: The sortable flag to set
- * @return Returns no value
- * @brief Sets the sortable flag of column @a c to @a sortable
- */
-void
-ewl_tree2_column_sortable_set(Ewl_Tree2_Column *c, unsigned int sortable)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("c", c);
-
-       c->sortable = !!sortable;
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
-}
-
-/**
- * @param c: The column to work with
- * @return Returns TRUE if the column is sortable, FALSE otherwise
- * @brief Retrieves the sort flag for the column @a c
- */
-unsigned int
-ewl_tree2_column_sortable_get(Ewl_Tree2_Column *c)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR_RET("c", c, FALSE);
-
-       DRETURN_INT(c->sortable, DLEVEL_STABLE);
-}
-
-/**
- * @param c: The Ewl_Tree2_Column to work with
- * @return Returns the parent tree for this column or NULL if none set
- * @brief Retrieves the parent tree for this column or NULL if none set
- */
-Ewl_Tree2 *
-ewl_tree2_column_tree_get(Ewl_Tree2_Column *c)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR_RET("c", c, NULL);
-
-       DRETURN_PTR(c->parent, DLEVEL_STABLE);
-}
-
-/**
- * @param c: The Ewl_Tree2_Column to work with
- * @param sort: The sort direction to set
- * @return Returns no value
- * @brief Sets the sort direction of the column to the given value
- */
-void
-ewl_tree2_column_sort_direction_set(Ewl_Tree2_Column *c, Ewl_Sort_Direction 
sort)
+static void
+ewl_tree2_create_expansions_hash(Ewl_Tree2 *tree)
 {
        DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("c", c);
+       DCHECK_PARAM_PTR("tree", tree);
+       DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE);
 
-       c->sort = sort;
+       tree->expansions = ecore_hash_new(NULL, NULL);
+       ecore_hash_set_free_value(tree->expansions, 
+                       ECORE_FREE_CB(ecore_list_destroy));
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
-/**
- * @param c: The Ewl_Tree2_Column to get the sort information from
- * @return Returns the current sort direction for the column or
- * EWL_SORT_DIRECTION_NONE if none set
- * @brief Retrieves the current sort information for the Ewl_Tree2_Column
+/*
+ * Ewl_Tree2_Node Stuff
  */
-Ewl_Sort_Direction
-ewl_tree2_column_sort_direction_get(Ewl_Tree2_Column *c)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR_RET("c", c, EWL_SORT_DIRECTION_NONE);
-
-       DRETURN_INT(c->sort, DLEVEL_STABLE);
-}
-
 Ewl_Widget *
 ewl_tree2_node_new(void)
 {
@@ -1559,20 +1273,6 @@
        DCHECK_TYPE("c", c, EWL_CONTAINER_TYPE);
 
        ewl_tree2_cb_node_child_add(c, w);
-}
-
-static void
-ewl_tree2_create_expansions_hash(Ewl_Tree2 *tree)
-{
-       DENTER_FUNCTION(DLEVEL_STABLE);
-       DCHECK_PARAM_PTR("tree", tree);
-       DCHECK_TYPE("tree", tree, EWL_TREE2_TYPE);
-
-       tree->expansions = ecore_hash_new(NULL, NULL);
-       ecore_hash_set_free_value(tree->expansions, 
-                       ECORE_FREE_CB(ecore_list_destroy));
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
 
 
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_tree2.h,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -3 -r1.44 -r1.45
--- ewl_tree2.h 24 Mar 2007 23:58:20 -0000      1.44
+++ ewl_tree2.h 25 Mar 2007 04:25:58 -0000      1.45
@@ -95,16 +95,24 @@
 {
        Ewl_MVC mvc;            /**< Inherit from ewl_mvc. */
 
+       Ewl_View *content_view; /**< View for the content widget */
+
        Ewl_Widget *header;     /**< The tree header */
        Ewl_Widget *rows;       /**< The rows of the tree */
 
-       Ecore_List *columns;    /**< The tree columns. */
        int *rowcache;          /**< Cache of row sizes */
 
        Ewl_Tree_Selection_Type type;    /**< The selection type of the tree */
 
        Ecore_Hash *expansions; /**< Hash of expanded rows */
 
+       struct
+       {
+               int column;     /**< The sort column */
+               Ewl_Sort_Direction direction; /**< Sort direction */
+       } sort;                 /**< The sort information */
+
+       unsigned int columns;   /**< Number of columns in the tree */
        unsigned char fixed:1;    /**< Rows are fixed height */
        unsigned char headers_visible:1; /**< Are the headers visible? */
 };
@@ -115,19 +123,17 @@
 Ewl_Widget     *ewl_tree2_new(void);
 int             ewl_tree2_init(Ewl_Tree2 *tree);
 
-void            ewl_tree2_column_append(Ewl_Tree2 *t, Ewl_View *v, 
-                                               unsigned int sortable);
-void            ewl_tree2_column_prepend(Ewl_Tree2 *t, Ewl_View *v,
-                                               unsigned int sortable);
-void            ewl_tree2_column_insert(Ewl_Tree2 *t, Ewl_View *v, 
-                                                       unsigned int idx,
-                                                       unsigned int sortable);
-void            ewl_tree2_column_remove(Ewl_Tree2 *t, unsigned int idx);
+void            ewl_tree2_column_count_set(Ewl_Tree2 *tree, 
+                                               unsigned int count);
+unsigned int    ewl_tree2_column_count_get(Ewl_Tree2 *tree);
 
 void            ewl_tree2_headers_visible_set(Ewl_Tree2 *tree,
                                               unsigned char visible);
 unsigned int    ewl_tree2_headers_visible_get(Ewl_Tree2 *tree);
 
+void            ewl_tree2_content_view_set(Ewl_Tree2 *tree, Ewl_View *view);
+Ewl_View       *ewl_tree2_content_view_get(Ewl_Tree2 *tree);
+
 Ewl_Tree_Selection_Type ewl_tree2_selection_type_get(Ewl_Tree2 *tree);
 void            ewl_tree2_selection_type_set(Ewl_Tree2 *tree, 
                                                Ewl_Tree_Selection_Type type);
@@ -135,7 +141,7 @@
 void            ewl_tree2_fixed_rows_set(Ewl_Tree2 *tree, unsigned int fixed);
 unsigned int    ewl_tree2_fixed_rows_get(Ewl_Tree2 *tree);
 
-Ewl_Widget     *ewl_tree2_view_widget_get(Ewl_Tree2 *tree);
+Ewl_Widget     *ewl_tree2_content_widget_get(Ewl_Tree2 *tree);
 
 void            ewl_tree2_row_expand(Ewl_Tree2 *tree, void *data, 
                                                unsigned int row);
@@ -151,51 +157,6 @@
 void ewl_tree2_cb_destroy(Ewl_Widget *w, void *ev, void *data);
 void ewl_tree2_cb_configure(Ewl_Widget *w, void *ev, void *data);
 void ewl_tree2_cb_column_sort(Ewl_Widget *w, void *ev, void *data);
-
-/*
- * Ewl_Tree2_Column stuff
- */
-
-/**
- * @def EWL_TREE2_COLUMN
- * Typecasts a pointer to an Ewl_Tree2_Column pointer.
- */
-#define EWL_TREE2_COLUMN(c) ((Ewl_Tree2_Column *)c)
-
-/**
- * The Ewl_Tree2_Column type
- */
-typedef struct Ewl_Tree2_Column Ewl_Tree2_Column;
-
-/**
- * @brief Holds the model and view to use for this column in the tree
- */
-struct Ewl_Tree2_Column
-{
-       Ewl_View *view;          /**< The view for the column */
-       
-       Ewl_MVC *parent;         /**< The mvc this column is for */
-       Ewl_Sort_Direction sort; /**< direction the column is sorted in */
-
-       unsigned char sortable:1; /**< Is this column sortable */
-};
-
-Ewl_Tree2_Column       *ewl_tree2_column_new(void);
-void                    ewl_tree2_column_destroy(Ewl_Tree2_Column *c);
-
-void                    ewl_tree2_column_view_set(Ewl_Tree2_Column *c, 
Ewl_View *v);
-Ewl_View               *ewl_tree2_column_view_get(Ewl_Tree2_Column *c);
-
-void                    ewl_tree2_column_mvc_set(Ewl_Tree2_Column *c, Ewl_MVC 
*mvc);
-Ewl_MVC                *ewl_tree2_column_mvc_get(Ewl_Tree2_Column *c);
-
-void                    ewl_tree2_column_sortable_set(Ewl_Tree2_Column *c, 
-                                                       unsigned int sortable);
-unsigned int            ewl_tree2_column_sortable_get(Ewl_Tree2_Column *c);
-
-void                    ewl_tree2_column_sort_direction_set(Ewl_Tree2_Column 
*c, 
-                                                               
Ewl_Sort_Direction sort);
-Ewl_Sort_Direction      ewl_tree2_column_sort_direction_get(Ewl_Tree2_Column 
*c);
 
 /*
  * Ewl_Tree2_Node stuff



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to