From 227993f481b6fd7db74bc348e87ffebcbd3fc158 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Mon, 13 Oct 2008 22:34:54 +0000 Subject: Fix basic rearrangement of tree nodes svn path=/trunk/netsurf/; revision=5567 --- amiga/gui.h | 1 + amiga/tree.c | 60 +++++++++++++++++++++++++++++++++++++++++------------------- amiga/tree.h | 7 +++++++ 3 files changed, 49 insertions(+), 19 deletions(-) (limited to 'amiga') diff --git a/amiga/gui.h b/amiga/gui.h index 2678c7cb1..99fa74f9c 100755 --- a/amiga/gui.h +++ b/amiga/gui.h @@ -56,6 +56,7 @@ enum GID_CANCEL, GID_TREEBROWSER, GID_OPEN, + GID_LEFT, GID_UP, GID_DOWN, GID_NEWF, diff --git a/amiga/tree.c b/amiga/tree.c index 60e5be78e..10fbd52c4 100755 --- a/amiga/tree.c +++ b/amiga/tree.c @@ -38,7 +38,7 @@ void ami_add_elements(struct treeview_window *twin,struct node *root,WORD *gen); bool ami_tree_launch_node(struct tree *tree, struct node *node); void free_browserlist(struct List *list); -void ami_move_node(struct treeview_window *twin,bool up); +void ami_move_node(struct treeview_window *twin,int move); void ami_new_bookmark(struct treeview_window *twin); void ami_recreate_listbrowser(struct treeview_window *twin); @@ -283,6 +283,12 @@ void ami_open_tree(struct tree *tree,int type) GA_RelVerify,TRUE, GA_Disabled,nothl, ButtonEnd, + LAYOUT_AddChild, twin->gadgets[GID_LEFT] = ButtonObject, + GA_ID,GID_LEFT, + BUTTON_AutoButton,BAG_LFARROW, + GA_RelVerify,TRUE, + GA_Disabled,nothl, //(!tree->movable), + ButtonEnd, LAYOUT_AddChild, twin->gadgets[GID_UP] = ButtonObject, GA_ID,GID_UP, BUTTON_AutoButton,BAG_UPARROW, @@ -550,11 +556,15 @@ BOOL ami_tree_event(struct treeview_window *twin) break; case GID_UP: - ami_move_node(twin,true); + ami_move_node(twin,AMI_MOVE_UP); break; case GID_DOWN: - ami_move_node(twin,false); + ami_move_node(twin,AMI_MOVE_DOWN); + break; + + case GID_LEFT: + ami_move_node(twin,AMI_MOVE_OUT); break; case GID_DEL: @@ -591,35 +601,47 @@ BOOL ami_tree_event(struct treeview_window *twin) return FALSE; } -void ami_move_node(struct treeview_window *twin,bool up) +void ami_move_node(struct treeview_window *twin,int move) { struct Node *lbnode = NULL; struct node *treenode,*moveto; - BOOL sel = FALSE; + bool before; GetAttr(LISTBROWSER_SelectedNode,twin->gadgets[GID_TREEBROWSER],(ULONG *)&lbnode); - if(lbnode) - { - GetListBrowserNodeAttrs(lbnode, - LBNA_UserData,(ULONG *)&treenode, + if(!lbnode) return; + + GetListBrowserNodeAttrs(lbnode, + LBNA_UserData,(ULONG *)&treenode, // for multiselects? LBNA_Selected,(BOOL *)&sel, - TAG_DONE); - } + TAG_DONE); + tree_set_node_selected(twin->tree,twin->tree->root,false); tree_set_node_selected(twin->tree,treenode,true); - if(up) + switch(move) { - moveto = treenode->previous; - } - else - { - moveto = treenode->next; + case AMI_MOVE_UP: + moveto = treenode->previous; + before = true; + break; + + case AMI_MOVE_DOWN: + moveto = treenode->next; + before = false; + break; + + case AMI_MOVE_OUT: + moveto = treenode->parent->previous; + before = false; + break; } - tree_move_selected_nodes(twin->tree,moveto,up); - tree_set_node_selected(twin->tree,treenode,false); + if(!moveto) return; + + tree_delink_node(treenode); + //tree_move_selected_nodes(twin->tree,moveto,before); + tree_link_node(moveto,treenode,before); ami_recreate_listbrowser(twin); } diff --git a/amiga/tree.h b/amiga/tree.h index 210891fc2..a5f590180 100755 --- a/amiga/tree.h +++ b/amiga/tree.h @@ -40,6 +40,13 @@ enum AMI_TREE_COOKIES }; +enum +{ + AMI_MOVE_UP, + AMI_MOVE_DOWN, + AMI_MOVE_OUT +}; + void ami_open_tree(struct tree *tree,int type); void ami_tree_close(struct treeview_window *twin); BOOL ami_tree_event(struct treeview_window *twin); -- cgit v1.2.3