summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/basicctrls_darwin.m27
-rw-r--r--redo/control_darwin.m2
-rw-r--r--redo/group_darwin.go58
-rw-r--r--redo/objc_darwin.h3
4 files changed, 89 insertions, 1 deletions
diff --git a/redo/basicctrls_darwin.m b/redo/basicctrls_darwin.m
index ed7ec10..5e0ece5 100644
--- a/redo/basicctrls_darwin.m
+++ b/redo/basicctrls_darwin.m
@@ -6,6 +6,8 @@
#define toNSButton(x) ((NSButton *) (x))
#define toNSTextField(x) ((NSTextField *) (x))
+#define toNSView(x) ((NSView *) (x))
+#define toNSBox(x) ((NSBox *) (x))
@interface goControlDelegate : NSObject {
@public
@@ -156,3 +158,28 @@ id newLabel(void)
[l setDrawsBackground:NO];
return finishNewTextField(l, NO);
}
+
+id newGroup(id container)
+{
+ NSBox *group;
+
+ group = [[NSBox alloc] initWithFrame:NSZeroRect];
+ [group setBorderType:NSLineBorder];
+ [group setBoxType:NSBoxPrimary];
+ [group setTransparent:NO];
+ // can't use setSmallControlFont() here because the selector is different
+ [group setTitleFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
+ [group setTitlePosition:NSAtTop];
+ [group setContentView:toNSView(container)];
+ return (id) group;
+}
+
+const char *groupText(id group)
+{
+ return [[toNSBox(group) title] UTF8String];
+}
+
+void groupSetText(id group, char *text)
+{
+ [toNSBox(group) setTitle:[NSString stringWithUTF8String:text]];
+}
diff --git a/redo/control_darwin.m b/redo/control_darwin.m
index 1b06114..816085b 100644
--- a/redo/control_darwin.m
+++ b/redo/control_darwin.m
@@ -28,7 +28,7 @@ void setSmallControlFont(id control)
[toNSControl(control) setFont:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:NSSmallControlSize]]];
}
-// also good for NSProgressIndicator
+// also good for NSBox and NSProgressIndicator
struct xsize controlPreferredSize(id control)
{
NSControl *c;
diff --git a/redo/group_darwin.go b/redo/group_darwin.go
new file mode 100644
index 0000000..788ba83
--- /dev/null
+++ b/redo/group_darwin.go
@@ -0,0 +1,58 @@
+// 16 august 2014
+
+package ui
+
+import (
+ "unsafe"
+)
+
+// #include "objc_darwin.h"
+import "C"
+
+type group struct {
+ _id C.id
+
+ *container
+}
+
+func newGroup(text string, control Control) Group {
+ g := new(group)
+ g.container = newContainer(control)
+ g._id = C.newGroup(g.container.id)
+ g.SetText(text)
+ return g
+}
+
+func (g *group) Text() string {
+ return C.GoString(C.groupText(g._id))
+}
+
+func (g *group) SetText(text string) {
+ ctext := C.CString(text)
+ defer C.free(unsafe.Pointer(ctext))
+ C.groupSetText(g._id, ctext)
+}
+
+func (g *group) id() C.id {
+ return g._id
+}
+
+func (g *group) setParent(p *controlParent) {
+ basesetParent(g, p)
+}
+
+func (g *group) allocate(x int, y int, width int, height int, d *sizing) []*allocation {
+ return baseallocate(g, x, y, width, height, d)
+}
+
+func (g *group) preferredSize(d *sizing) (width, height int) {
+ return basepreferredSize(g, d)
+}
+
+func (g *group) commitResize(a *allocation, d *sizing) {
+ basecommitResize(g, a, d)
+}
+
+func (g *group) getAuxResizeInfo(d *sizing) {
+ basegetAuxResizeInfo(g, d)
+}
diff --git a/redo/objc_darwin.h b/redo/objc_darwin.h
index 41b91f6..16a1a56 100644
--- a/redo/objc_darwin.h
+++ b/redo/objc_darwin.h
@@ -69,6 +69,9 @@ extern id newPasswordField(void);
extern const char *textFieldText(id);
extern void textFieldSetText(id, char *);
extern id newLabel(void);
+extern id newGroup(id);
+extern const char *groupText(id);
+extern void groupSetText(id, char *);
/* container_darwin.m */
extern id newContainerView(void *);