libui/redo/osxaltest/box.m

99 lines
2.2 KiB
Mathematica
Raw Normal View History

// 31 july 2015
#import "osxaltest.h"
2015-08-01 13:22:45 -05:00
@implementation tBox {
NSMutableArray *children;
NSMutableArray *stretchy;
NSView *sv;
2015-08-01 01:16:35 -05:00
BOOL vertical;
id<tControl> parent;
}
2015-08-01 13:22:45 -05:00
- (id)tInitVertical:(BOOL)vert
{
self = [super init];
if (self) {
self->children = [NSMutableArray new];
self->stretchy = [NSMutableArray new];
self->sv = nil;
2015-08-01 01:16:35 -05:00
self->vertical = vert;
self->parent = nil;
}
return self;
}
2015-08-01 13:22:45 -05:00
- (void)tAddControl:(id<tControl>)c stretchy:(BOOL)s
{
if (self->sv != nil)
[c tSetParent:self->parent addToView:self->sv];
[self->children addObject:c];
[self->stretchy addObject:[NSNumber numberWithBool:s]];
// TODO mark as needing relayout
[self tRelayout];
}
- (void)tSetParent:(id<tControl>)p addToView:(NSView *)v
{
self->parent = p;
self->sv = v;
2015-08-01 01:16:35 -05:00
[self->children enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop) {
id<tControl> c;
2015-08-01 01:16:35 -05:00
c = (id<tControl>) obj;
[c tSetParent:self->parent addToView:self->sv];
2015-08-01 01:16:35 -05:00
}];
[self tRelayout];
}
- (void)tFillAutoLayoutHorz:(NSMutableArray *)horz
vert:(NSMutableArray *)vert
extra:(NSMutableArray *)extra
extraVert:(NSMutableArray *)extraVert
views:(NSMutableDictionary *)views
first:(uintmax_t *)n
2015-08-01 01:16:35 -05:00
{
NSMutableArray *subhorz, *subvert;
uintmax_t *first;
NSUInteger i;
NSMutableString *out;
2015-08-01 01:16:35 -05:00
first = (uintmax_t *) malloc([self->children count] * sizeof (uintmax_t));
if (first == NULL)
abort();
subhorz = [NSMutableArray new];
subvert = [NSMutableArray new];
for (i = 0; i < [self->children count]; i++) {
id<tControl> cur;
2015-08-01 01:16:35 -05:00
first[i] = *n;
cur = (id<tControl>) [self->children objectAtIndex:i];
[cur tFillAutoLayoutHorz:subhorz vert:subvert
extra:extra extraVert:extraVert
views:views first:n];
}
// TODO vertical
out = [NSMutableString new];
[subhorz enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop) {
//TODO if (index != 0)
//TODO [out appendString:@"-"];
[out appendString:((NSString *) obj)];
}];
[horz addObject:out];
[vert addObjectsFromArray:subvert];
[subhorz release];
[subvert release];
free(first);
2015-08-01 01:16:35 -05:00
}
// TODOs:
// - lateral dimension: for each view of n+1, make other dimension next to first n
// this way, subelement views get positioned right
- (void)tRelayout
{
if (self->parent != nil)
[self->parent tRelayout];
}
@end