diff options
| author | Pietro Gagliardi <[email protected]> | 2015-04-12 15:46:58 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2015-04-12 15:46:58 -0400 |
| commit | 142b2db9f59e24440aed4adadf89137cd076dc46 (patch) | |
| tree | 2b82dd51ea1914c70a3f9306c03703c3650aaa6c | |
| parent | f6a38383a732c54d03408392b9bec053b562993e (diff) | |
Implemented uiTab on Mac OS X. It still doesn't quite work yet; switching from one tab and back doesn't show that tab's controls...
| -rw-r--r-- | new/tab_darwin.m | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/new/tab_darwin.m b/new/tab_darwin.m new file mode 100644 index 0000000..deea075 --- /dev/null +++ b/new/tab_darwin.m @@ -0,0 +1,65 @@ +// 12 april 2015 +#import "uipriv_darwin.h" + +// TODO very margins against extra space around the tab + +@interface uiNSTabView : NSTabView +@property uiControl *uiC; +@end + +@implementation uiNSTabView + +- (void)viewDidMoveToSuperview +{ + if (uiDarwinControlFreeWhenAppropriate(self.uiC, [self superview])) + self.uiC = NULL; + [super viewDidMoveToSuperview]; +} + +@end + +// the default new control implementation uses -sizeToFit, which we don't have with NSTabView +// fortunately, we do have -minimumSize +static void preferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *height) +{ + uiNSTabView *tv; + NSSize s; + + tv = (uiNSTabView *) uiControlHandle(c); + s = [tv minimumSize]; + *width = (intmax_t) (s.width); + *height = (intmax_t) (s.height); +} + +uiControl *uiNewTab(void) +{ + uiControl *c; + uiNSTabView *t; + + c = uiDarwinNewControl([uiNSTabView class], NO, NO); + c->preferredSize = preferredSize; + t = (uiNSTabView *) uiControlHandle(c); + t.uiC = c; + + // also good for NSTabView (same selector and everything) + setStandardControlFont((NSControl *) t); + + return c; +} + +void uiTabAddPage(uiControl *c, const char *name, uiControl *child) +{ + uiNSTabView *tv; + uiContainer *container; + NSTabViewItem *i; + + container = [[uiContainer alloc] initWithFrame:NSZeroRect]; + container.uiChild = child; + uiControlSetParent(container.uiChild, (uintptr_t) container); + + i = [[NSTabViewItem alloc] initWithIdentifier:nil]; + [i setLabel:toNSString(name)]; + [i setView:container]; + tv = (uiNSTabView *) uiControlHandle(c); + [tv addTabViewItem:i]; +} |
