- (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);
}