From 4f424e4e103b4d989752abccc63adbf016c971b6 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 9 Apr 2015 12:47:34 -0400 Subject: [PATCH] Implemented uiCheckbox on Mac OS X. Before I implement it on GTK+ I'll go back and add uiCheckboxChecked() and uICheckboxSetChecked(). --- checkbox_darwin.m | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 checkbox_darwin.m diff --git a/checkbox_darwin.m b/checkbox_darwin.m new file mode 100644 index 00000000..a1fd61ca --- /dev/null +++ b/checkbox_darwin.m @@ -0,0 +1,78 @@ +// 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 strdup(fromNSString([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; +}