diff options
Diffstat (limited to 'new/darwin/checkbox.m')
| -rw-r--r-- | new/darwin/checkbox.m | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/new/darwin/checkbox.m b/new/darwin/checkbox.m new file mode 100644 index 0000000..ca52389 --- /dev/null +++ b/new/darwin/checkbox.m @@ -0,0 +1,98 @@ +// 7 april 2015 +#import "uipriv_darwin.h" + +@interface uiCheckboxNSButton : NSButton +@property uiControl *uiC; +@property void (*uiOnToggled)(uiControl *, void *); +@property void *uiOnToggledData; +@end + +@implementation uiCheckboxNSButton + +- (void)viewDidMoveToSuperview +{ + if (uiDarwinControlFreeWhenAppropriate(self.uiC, [self superview])) { + [self setTarget:nil]; + self.uiC = NULL; + } + [super viewDidMoveToSuperview]; +} + +- (IBAction)uiCheckboxToggled:(id)sender +{ + (*(self.uiOnToggled))(self.uiC, self.uiOnToggledData); +} + +@end + +static void defaultOnToggled(uiControl *c, void *data) +{ + // do nothing +} + +uiControl *uiNewCheckbox(const char *text) +{ + uiControl *c; + uiCheckboxNSButton *cc; + + c = uiDarwinNewControl([uiCheckboxNSButton class], NO, NO); + cc = (uiCheckboxNSButton *) uiControlHandle(c); + cc.uiC = c; + + [cc setTitle:toNSString(text)]; + [cc setButtonType:NSSwitchButton]; + [cc setBordered:NO]; + setStandardControlFont((NSControl *) cc); + + [cc setTarget:cc]; + [cc setAction:@selector(uiCheckboxToggled:)]; + + cc.uiOnToggled = defaultOnToggled; + + return cc.uiC; +} + +char *uiCheckboxText(uiControl *c) +{ + uiCheckboxNSButton *cc; + + cc = (uiCheckboxNSButton *) uiControlHandle(c); + return uiDarwinNSStringToText([cc title]); +} + +void uiCheckboxSetText(uiControl *c, const char *text) +{ + uiCheckboxNSButton *cc; + + cc = (uiCheckboxNSButton *) uiControlHandle(c); + [cc setTitle:toNSString(text)]; +} + +void uiCheckboxOnToggled(uiControl *c, void (*f)(uiControl *, void *), void *data) +{ + uiCheckboxNSButton *cc; + + cc = (uiCheckboxNSButton *) uiControlHandle(c); + cc.uiOnToggled = f; + cc.uiOnToggledData = data; +} + +int uiCheckboxChecked(uiControl *c) +{ + uiCheckboxNSButton *cc; + + cc = (uiCheckboxNSButton *) uiControlHandle(c); + return [cc state] == NSOnState; +} + +void uiCheckboxSetChecked(uiControl *c, int checked) +{ + uiCheckboxNSButton *cc; + NSInteger state; + + cc = (uiCheckboxNSButton *) uiControlHandle(c); + state = NSOnState; + if (!checked) + state = NSOffState; + [cc setState:state]; +} |
