summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--new/checkbox_darwin.m78
1 files changed, 78 insertions, 0 deletions
diff --git a/new/checkbox_darwin.m b/new/checkbox_darwin.m
new file mode 100644
index 0000000..a1fd61c
--- /dev/null
+++ b/new/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;
+}