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