ui/cocoa/text.m

changeset 108
77254bd6dccb
parent 103
6606616eca9f
child 109
c3dfcb8f0be7
--- a/ui/cocoa/text.m	Sat Apr 05 17:57:04 2025 +0200
+++ b/ui/cocoa/text.m	Sun Jul 20 22:04:39 2025 +0200
@@ -31,7 +31,7 @@
 #import "Container.h"
 #import <objc/runtime.h>
 
-UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
+UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
     NSTextView *textview = [[NSTextView alloc] init];
     textview.autoresizingMask = NSViewWidthSizable;
     textview.minSize = NSMakeSize(0, 0);
@@ -44,5 +44,161 @@
     UiLayout layout = UI_INIT_LAYOUT(args);
     ui_container_add(obj, scrollview, &layout, TRUE);
     
+    
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT);
+    if(var) {
+        UiText *text = var->value;
+        text->obj = (__bridge void*)textview;
+        ui_textarea_restore(text);
+        
+        text->save = ui_textarea_save;
+        text->destroy = ui_textarea_destroy;
+        text->restore = ui_textarea_restore;
+        text->set = ui_textarea_set;
+        text->get = ui_textarea_get;
+        text->getsubstr = ui_textarea_getsubstr;
+        text->insert = ui_textarea_insert;
+        text->setposition = ui_textarea_setposition;
+        text->position = ui_textarea_position;
+        text->setselection = ui_textarea_setselection;
+        text->selection = ui_textarea_selection;
+        text->length = ui_textarea_length;
+        text->remove = ui_textarea_remove;
+    }
+    
     return (__bridge void*)scrollview;
 }
+
+
+
+
+void ui_textarea_save(UiText *text) {
+    
+}
+
+void ui_textarea_destroy(UiText *text) {
+    (void)(__bridge_transfer NSTextStorage*)text->data1;
+}
+
+void ui_textarea_restore(UiText *text) {
+    NSTextView *textview = (__bridge NSTextView*)text->obj;
+    NSTextStorage *textStorage;
+    if(text->data1) {
+        textStorage = (__bridge NSTextStorage*)text->data1;
+        
+    } else {
+        textStorage = [[NSTextStorage alloc] init];
+    }
+    [textview.layoutManager replaceTextStorage:textStorage];
+    text->data1 = (__bridge_retained void*)textStorage;
+}
+
+void ui_textarea_set(UiText *text, const char *str) {
+    
+}
+
+char* ui_textarea_get(UiText *text) {
+    return NULL;
+}
+
+char* ui_textarea_getsubstr(UiText *text, int begin, int end) {
+    return NULL;
+}
+
+void ui_textarea_insert(UiText *text, int pos, char *str) {
+    
+}
+
+void ui_textarea_setposition(UiText *text, int pos) {
+    
+}
+
+int ui_textarea_position(UiText *text) {
+    return 0;
+}
+
+void ui_textarea_setselection(UiText *text, int begin, int end) {
+    
+}
+
+void ui_textarea_selection(UiText *text, int *begin, int *end) {
+    
+}
+
+int ui_textarea_length(UiText *text) {
+    return 0;
+}
+
+void ui_textarea_remove(UiText *text, int begin, int end) {
+    
+}
+
+
+
+/* -------------------------- TextField -------------------------- */
+
+static UIWIDGET textfield_create(UiObject *obj, UiTextFieldArgs *args, BOOL password, BOOL frameless) {
+    NSTextField *textfield;
+    if(password) {
+        textfield = [[NSSecureTextField alloc] init];
+    } else {
+        textfield = [[NSTextField alloc] init];
+    } 
+    
+    if(frameless) {
+        [textfield setBezeled: NO];
+    }
+    
+    UiLayout layout = UI_INIT_LAYOUT(args);
+    ui_container_add(obj, textfield, &layout, FALSE);
+    
+    UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
+    if(var) {
+        UiString *s = var->value;
+        if(s->value.ptr) {
+            textfield.stringValue = [[NSString alloc] initWithUTF8String:s->value.ptr];
+            if(s->value.free) {
+                s->value.free(s->value.ptr);
+            }
+        }
+        s->obj = (__bridge void*)textfield;
+        s->get = ui_textfield_get;
+        s->set = ui_textfield_set;
+    }
+    
+    return (__bridge void*)textfield;
+}
+
+UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
+    return textfield_create(obj, args, FALSE, FALSE);
+}
+
+UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) {
+    return textfield_create(obj, args, FALSE, TRUE);
+}
+
+UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) {
+    return textfield_create(obj, args, TRUE, FALSE);
+}
+
+char* ui_textfield_get(UiString *s) {
+    NSTextField *textfield = (__bridge NSTextField*)s->obj;
+    NSString *str = textfield.stringValue;
+    const char *cstr = str.UTF8String;
+    if(s->value.free) {
+        s->value.free(s->value.ptr);
+    }
+    s->value.ptr = strdup(cstr);
+    s->value.free = free;
+    return s->value.ptr;
+}
+
+void ui_textfield_set(UiString *s, const char *value) {
+    if(s->value.free) {
+        s->value.free(s->value.ptr);
+    }
+    s->value.ptr = NULL;
+    s->value.free = NULL;
+    NSTextField *textfield = (__bridge NSTextField*)s->obj;
+    textfield.stringValue = [[NSString alloc] initWithUTF8String:value];
+}

mercurial