Enlightenment CVS committal

Author  : rbdpngn
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src


Modified Files:
        ewl_tree.c ewl_tree.h 


Log Message:
Move the nodes to using a separate widget for expanding/collapsing the branch
points.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_tree.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -3 -r1.40 -r1.41
--- ewl_tree.c  3 Jun 2004 06:01:29 -0000       1.40
+++ ewl_tree.c  14 Jun 2004 05:55:19 -0000      1.41
@@ -484,8 +484,19 @@
 
        ewl_callback_append(EWL_WIDGET(node), EWL_CALLBACK_CONFIGURE,
                        ewl_tree_node_configure_cb, NULL);
-       ewl_callback_append(EWL_WIDGET(node), EWL_CALLBACK_CLICKED,
-                       ewl_tree_node_clicked_cb, NULL);
+
+       /*
+        * The handle for expanding and collapsing the branch point at this
+        * node.
+        */
+       node->handle = ewl_check_new();
+       ewl_object_set_fill_policy(EWL_OBJECT(node->handle),
+                                  EWL_FLAG_FILL_NONE);
+       ewl_object_set_alignment(EWL_OBJECT(node->handle), EWL_FLAG_ALIGN_TOP);
+       ewl_container_append_child(EWL_CONTAINER(node), node->handle);
+       ewl_callback_append(node->handle, EWL_CALLBACK_VALUE_CHANGED,
+                           ewl_tree_node_toggle_cb, node);
+       ewl_widget_show(node->handle);
 
        node->expanded = EWL_TREE_NODE_COLLAPSED;
 
@@ -512,7 +523,7 @@
 
        ecore_list_goto_first(EWL_CONTAINER(node)->children);
        while ((w = ecore_list_next(EWL_CONTAINER(node)->children))) {
-               if (w != node->row)
+               if (w != node->row && w != node->handle)
                        ewl_widget_hide(w);
        }
 
@@ -545,7 +556,7 @@
 
        ecore_list_goto_first(EWL_CONTAINER(node)->children);
        while ((w = ecore_list_next(EWL_CONTAINER(node)->children))) {
-               if (w != node->row)
+               if (w != node->row && w != node->handle)
                        ewl_widget_show(w);
        }
 
@@ -560,7 +571,7 @@
        Ewl_Tree_Node *node;
        Ewl_Container *c;
        Ewl_Object *child;
-       int y;
+       int x, y;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
@@ -574,29 +585,18 @@
                DRETURN(DLEVEL_STABLE);
 
        ecore_list_goto_first(c->children);
-       child = ecore_list_next(c->children);
-
-       /*
-       printf("Tree node configured at (%d, %d) %d x %d\n", CURRENT_X(w),
-                       CURRENT_Y(w), CURRENT_W(w), CURRENT_H(w));
-                       */
+       y = CURRENT_Y(w);
 
-       /*
-        * The first child is the current level row
-        * are lower nodes and rows.
-        */
-       ewl_object_request_geometry(child, CURRENT_X(w), CURRENT_Y(w),
-                       CURRENT_W(w), ewl_object_get_preferred_h(child));
-       
-       y = CURRENT_Y(w) + ewl_object_get_current_h(child);
+       ewl_object_request_geometry(EWL_OBJECT(node->handle), CURRENT_X(w),
+                                   CURRENT_Y(w), CURRENT_W(w), CURRENT_H(w));
+       x = CURRENT_X(w) + ewl_object_get_current_w(EWL_OBJECT(node->handle));
 
        /*
         * All subsequent children are lower nodes and rows.
         */
        while ((child = ecore_list_next(c->children))) {
-               if (VISIBLE(child)) {
-                       ewl_object_request_geometry(child, CURRENT_X(w), y,
-                                                   CURRENT_W(w),
+               if (VISIBLE(child) && EWL_WIDGET(child) != node->handle) {
+                       ewl_object_request_geometry(child, x, y, CURRENT_W(w),
                                                    ewl_object_get_preferred_h(child));
                        y += ewl_object_get_current_h(child);
                }
@@ -606,13 +606,13 @@
 }
 
 void
-ewl_tree_node_clicked_cb(Ewl_Widget * w, void *ev_data, void *user_data)
+ewl_tree_node_toggle_cb(Ewl_Widget * w, void *ev_data, void *user_data)
 {
        Ewl_Tree_Node *node;
 
        DENTER_FUNCTION(DLEVEL_STABLE);
 
-       node = EWL_TREE_NODE(w);
+       node = EWL_TREE_NODE(user_data);
 
        if (node->expanded == EWL_TREE_NODE_NOEXPAND)
                DRETURN(DLEVEL_STABLE);
@@ -634,11 +634,15 @@
 
        node = EWL_TREE_NODE(c);
 
-       if (ecore_list_nodes(c->children) > 1)
-               ewl_widget_set_state(EWL_WIDGET(c), "expandable");
+       if (ecore_list_nodes(c->children) > 2 ) {
+               if (HIDDEN(node->handle))
+                       ewl_widget_show(node->handle);
+       }
 
        if (node->expanded) {
                ewl_container_prefer_sum(c, EWL_ORIENTATION_VERTICAL);
+               ewl_object_set_preferred_h(EWL_OBJECT(c), PREFERRED_H(c) -
+                               ewl_object_get_preferred_h(EWL_OBJECT(node->handle)));
        }
        else {
                ewl_object_set_preferred_h(EWL_OBJECT(c),
@@ -661,8 +665,10 @@
 
        node = EWL_TREE_NODE(c);
 
-       if (ecore_list_nodes(c->children) < 2)
-               ewl_widget_set_state(EWL_WIDGET(c), "flat");
+       if (ecore_list_nodes(c->children) < 3) {
+               if (VISIBLE(node->handle))
+                       ewl_widget_hide(node->handle);
+       }
 
        ewl_object_set_preferred_h(EWL_OBJECT(c), PREFERRED_H(c) -
                                   ewl_object_get_preferred_h(EWL_OBJECT(w)));
@@ -678,20 +684,7 @@
 ewl_tree_node_resize_cb(Ewl_Container *c, Ewl_Widget *w, int size,
                Ewl_Orientation o)
 {
-       Ewl_Tree_Node *node;
-
-       DENTER_FUNCTION(DLEVEL_STABLE);
-
-       node = EWL_TREE_NODE(c);
-
-       if (o == EWL_ORIENTATION_HORIZONTAL)
-               ewl_object_set_preferred_w(EWL_OBJECT(c),
-                                          PREFERRED_W(c) + size);
-       else
-               ewl_object_set_preferred_h(EWL_OBJECT(c),
-                                          PREFERRED_H(c) + size);
-
-       DLEAVE_FUNCTION(DLEVEL_STABLE);
+       ewl_tree_node_child_show_cb(c, w);
 }
 
 void
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ewl/src/ewl_tree.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- ewl_tree.h  15 May 2004 07:29:05 -0000      1.21
+++ ewl_tree.h  14 Jun 2004 05:55:19 -0000      1.22
@@ -54,6 +54,7 @@
        Ewl_Container container; /**< Inherit from Ewl_Container */
        Ewl_Tree *tree; /**< Pointer to the tree this is inside */
        Ewl_Widget *row; /**< The child row */
+       Ewl_Widget *handle; /**< The child row */
        int expanded; /**< Indicator of expansion state */
 };
 
@@ -92,7 +93,7 @@
  */
 void ewl_tree_node_configure_cb(Ewl_Widget * w, void *ev_data,
                             void *user_data);
-void ewl_tree_node_clicked_cb(Ewl_Widget * w, void *ev_data,
+void ewl_tree_node_toggle_cb(Ewl_Widget * w, void *ev_data,
                           void *user_data);
 
 void ewl_tree_node_child_show_cb(Ewl_Container *c, Ewl_Widget *w);




-------------------------------------------------------
This SF.Net email is sponsored by the new InstallShield X.
>From Windows to Linux, servers to mobile, InstallShield X is the
one installation-authoring solution that does it all. Learn more and
evaluate today! http://www.installshield.com/Dev2Dev/0504
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to