----- Original message -----
> > * Forgot not to modify the array during the enumeration.
> > * Remove the extra subviews to improve the lookup speed on additions.
> >
> > why it's _sub_views and not _subviews?
>
> I don't know, but I have observed that various GNUstep classes written a
> long ago have ivars named in a similar way.
>
> > - (void) setSubviews: (NSArray *)newSubviews
> > {
> > NSEnumerator *en;
> > NSView *aView;
> >
> > en = [[NSArray arrayWithArray:_subviews] objectEnumerator];
> > while ((aView = [en nextObject]))
> > {
> > if (NO == [newSubviews containsObject:aView])
> > {
> > [aView removeFromSuperview];
> > }
> > }
> >
> > NSMutableArray *uniqNew = [NSMutableArray array];
> > en = [newSubviews objectEnumerator];
> > while ((aView = [en nextObject]))
> > {
> > id supersub = [aView superview];
> > if (supersub != nil && supersub != self)
> > {
> > [NSException raise:NSInvalidArgumentException
> > format:@"Superviews of new subviews must be either
> > nil or
> > receiver."]; }
> >
> > if ([uniqNew containsObject:aView])
> > {
> > [NSException raise:NSInvalidArgumentException
> > format:@"Duplicated new subviews."];
> > }
> >
> > if (NO == [_subviews containsObject:aView])
> > {
> > [self addSubview:aView];
> > }
> >
> > [uniqNew addObject:aView];
> > }
> >
> > ASSIGN(_subviews, uniqNew);
> > }
>
> This looks ok. However I think this code doesn't match this requirement
> written in the Cocoa doc: "And any views that are in both subviews and
> newSubviews are moved in the subviews array as needed, without being
> removed and re-added."
>
> Cheers,
> Quentin.
Im still not sure why it is not. I thought of that case, only views that werent
shared by both arrays will either be added or removed, else they only got
sorted and assigned back as uniqNew.
_______________________________________________
Gnustep-dev mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/gnustep-dev