summaryrefslogtreecommitdiff
path: root/new/darwin/checkbox.m
diff options
context:
space:
mode:
Diffstat (limited to 'new/darwin/checkbox.m')
-rw-r--r--new/darwin/checkbox.m98
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];
+}