20 - (id)initWithFrame:(NSRect)frame {
21 self = [
super initWithFrame:frame];
26 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layoutSubviews) name:NSViewFrameDidChangeNotification object:self];
32 [[NSNotificationCenter defaultCenter] removeObserver:self];
33 [subviewsInOrder release];
43 #define borderDistance 8.0
44 #define cellDistance 4.0
46 -(void) layoutSubviews {
47 NSRect bounds = [
self bounds];
49 NSUInteger numOfSubViews = [subviewsInOrder count];
51 if (numOfSubViews > 0) {
54 CGFloat sizesHeight[numOfSubViews];
55 CGFloat sizesWidth[numOfSubViews];
56 CGFloat exclusiveWidth = 0.0;
57 NSUInteger exclusiveChilds = 0;
60 for (i=0; i<numOfSubViews; i++) {
61 NSView* subview = [subviewsInOrder objectAtIndex:i];
66 sizesWidth[i] = neededWidth;
67 exclusiveWidth += neededWidth;
73 sizesHeight[i] = neededHeight;
78 sizesHeight[i] = -1.0;
85 CGFloat stdWidth = 0.0;
86 if (numOfSubViews > exclusiveChilds) {
87 CGFloat fillWidth = bounds.size.width-exclusiveWidth;
91 CGFloat fillWidth = bounds.size.width;
100 NSRect actualFrame = bounds;
103 for (i=0; i<numOfSubViews; i++) {
105 CGFloat usedHeight = sizesHeight[i];
106 if (usedHeight < 0.0) usedHeight = stdHeight;
107 actualFrame.origin.y = bounds.size.height-
borderDistance-usedHeight;
108 actualFrame.size.height = usedHeight;
110 CGFloat usedWidth = sizesWidth[i];
111 if (usedWidth < 0.0) usedWidth = stdWidth;
112 actualFrame.size.width = usedWidth;
116 NSView* subview = [subviewsInOrder objectAtIndex:i];
117 [subview setFrame:actualFrame];
123 -(void) addLayoutSubview:(NSView*)new_subview {
125 [
self addSubview:new_subview];
126 [
self layoutSubviews];
129 #pragma mark Protocoll Methods
132 NSUInteger numOfSubViews = [subviewsInOrder count];
134 NSSize size = NSMakeSize(borderWidth, borderWidth);
135 if (numOfSubViews > 0) {
137 for (i=0; i<numOfSubViews; i++) {
138 NSView* subview = [subviewsInOrder objectAtIndex:i];
141 if (subViewMinSize.height+borderWidth > size.height) {
142 size.height = subViewMinSize.height+borderWidth;
144 size.width += subViewMinSize.width;
152 - (void)setFrame:(NSRect)frameRect {
153 NSSize
minSize = [
self minSize];
154 if (frameRect.size.height < minSize.height) {
155 frameRect.size.height = minSize.height;
157 if (frameRect.size.width < minSize.width) {
158 frameRect.size.width = minSize.width;
160 [
super setFrame:frameRect];