BTW, I didn't test this but mine is (translated from AP3 lib) like
this, I think it's close to the specs.

- (void) setSubviews: (NSArray *)newSubviews
{
        NSEnumerator *en;
        NSView* aView;
        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];
        }

        en = [_subviews objectEnumerator];
        while ((aView = [en nextObject]))
        {
                if (NO == [newSubviews containsObject:aView])
                {
                        [aView removeFromSuperview];
                }
        }

        ASSIGN(_subviews, uniqNew); //sorting
}

_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to