Mercurial > dwindows
comparison mac/dw.m @ 1100:13ea7575d9e8
Fixed a problem with dw_tree_item_delete() due to earlier tree data storage changes.
Also fixed a problem with dw_tree_insert_after() not inserting at the correct point.
That change required additional bounds checks.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 25 Jul 2011 23:22:04 +0000 |
parents | d1cea9be1436 |
children | d7eafaa054ab |
comparison
equal
deleted
inserted
replaced
1099:d1cea9be1436 | 1100:13ea7575d9e8 |
---|---|
1612 return nil; | 1612 return nil; |
1613 } | 1613 } |
1614 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } | 1614 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [super dealloc]; } |
1615 @end | 1615 @end |
1616 | 1616 |
1617 /* Dive into the tree showing all nodes */ | 1617 /* Dive into the tree freeing all desired child nodes */ |
1618 void _free_tree_recurse(NSMutableArray *node, NSMutableArray *item) | 1618 void _free_tree_recurse(NSMutableArray *node, NSMutableArray *item) |
1619 { | 1619 { |
1620 if(node && ([node isMemberOfClass:[NSMutableArray class]])) | 1620 if(node && ([node isKindOfClass:[NSArray class]])) |
1621 { | 1621 { |
1622 int count = (int)[node count]; | 1622 int count = (int)[node count]; |
1623 NSInteger index = -1; | |
1623 int z; | 1624 int z; |
1625 | |
1626 if(item) | |
1627 index = [node indexOfObject:item]; | |
1624 | 1628 |
1625 for(z=0;z<count;z++) | 1629 for(z=0;z<count;z++) |
1626 { | 1630 { |
1627 NSMutableArray *pnt = [node objectAtIndex:z]; | 1631 NSMutableArray *pnt = [node objectAtIndex:z]; |
1628 NSMutableArray *children = nil; | 1632 NSMutableArray *children = nil; |
1629 | 1633 |
1630 if(pnt && [pnt isMemberOfClass:[NSMutableArray class]]) | 1634 if(pnt && [pnt isKindOfClass:[NSArray class]]) |
1631 { | 1635 { |
1632 children = (NSMutableArray *)[pnt objectAtIndex:3]; | 1636 children = (NSMutableArray *)[pnt objectAtIndex:3]; |
1633 } | 1637 } |
1634 | 1638 |
1635 if(item == pnt) | 1639 if(z == index) |
1636 { | 1640 { |
1637 _free_tree_recurse(children, NULL); | 1641 _free_tree_recurse(children, NULL); |
1638 [node removeObjectAtIndex:z]; | 1642 [node removeObjectAtIndex:z]; |
1639 count = (int)[node count]; | 1643 count = (int)[node count]; |
1644 index = -1; | |
1640 z--; | 1645 z--; |
1641 } | 1646 } |
1642 else if(item == NULL) | 1647 else if(item == NULL) |
1643 { | 1648 { |
1644 NSString *oldstr = [pnt objectAtIndex:1]; | 1649 NSString *oldstr = [pnt objectAtIndex:1]; |
1788 } | 1793 } |
1789 } | 1794 } |
1790 if(after) | 1795 if(after) |
1791 { | 1796 { |
1792 NSInteger index = [children indexOfObject:after]; | 1797 NSInteger index = [children indexOfObject:after]; |
1793 [children insertObject:item atIndex:index]; | 1798 int count = (int)[children count]; |
1799 if(index != NSNotFound && (index+1) < count) | |
1800 [children insertObject:item atIndex:(index+1)]; | |
1801 else | |
1802 [children addObject:item]; | |
1794 } | 1803 } |
1795 else | 1804 else |
1796 { | 1805 { |
1797 [children addObject:item]; | 1806 [children addObject:item]; |
1798 } | 1807 } |