Sun, 07 Sep 2025 08:28:30 +0200
implement ui_dialog_create (Cocoa)
| make/xcode/toolkit/toolkit/main.m | file | annotate | diff | comparison | revisions | |
| ui/cocoa/window.m | file | annotate | diff | comparison | revisions |
--- a/make/xcode/toolkit/toolkit/main.m Sat Sep 06 12:40:04 2025 +0200 +++ b/make/xcode/toolkit/toolkit/main.m Sun Sep 07 08:28:30 2025 +0200 @@ -67,6 +67,7 @@ static void toolbar_action(UiEvent *event, void *userdata) { printf("toolbar item\n"); + ui_dialog(event->obj, .title = "Error", .content = "Error Message", .input = TRUE, .button1_label = "Add", .button2_label = "Remove", .closebutton_label = "Close"); } static void toolbar_toggle(UiEvent *event, void *userdata) {
--- a/ui/cocoa/window.m Sat Sep 06 12:40:04 2025 +0200 +++ b/ui/cocoa/window.m Sun Sep 07 08:28:30 2025 +0200 @@ -154,3 +154,74 @@ ui_filelist_free(flist); }]; } + +/* ------------------------------------- Dialog ------------------------------------- */ + +void ui_dialog_create(UiObject *parent, UiDialogArgs *args) { + NSAlert *dialog = [[NSAlert alloc] init]; + + if(args->title) { + dialog.messageText = [[NSString alloc]initWithUTF8String:args->title]; + } + if(args->content) { + dialog.informativeText = [[NSString alloc]initWithUTF8String:args->content]; + } + NSTextField *textfield = nil; + if(args->input) { + NSRect frame = NSMakeRect(0,0,300,22); + textfield = args->password ? [[NSSecureTextField alloc] initWithFrame:frame] : [[NSTextField alloc]initWithFrame:frame]; + if(args->input_value) { + textfield.stringValue = [[NSString alloc]initWithUTF8String:args->input_value]; + } + dialog.accessoryView = textfield; + } + + int b = 0; + int b1 = -1; + int b2 = -1; + if(args->button1_label) { + [dialog addButtonWithTitle:[[NSString alloc]initWithUTF8String:args->button1_label]]; + b1 = b++; + } + if(args->button2_label) { + [dialog addButtonWithTitle:[[NSString alloc]initWithUTF8String:args->button2_label]]; + b2 = b; + } + if(args->closebutton_label) { + [dialog addButtonWithTitle:[[NSString alloc]initWithUTF8String:args->closebutton_label]]; + } + + ui_callback callback = args->result; + void *userdata = args->resultdata; + + NSWindow *window = (__bridge NSWindow*)parent->wobj; + [dialog beginSheetModalForWindow:window completionHandler:^(NSModalResponse returnCode) { + UiEvent event; + event.obj = parent; + event.window = event.obj->window; + event.document = event.obj->ctx->document; + event.eventdata = NULL; + event.eventdatatype = 0; + event.set = 0; + event.intval = 0; + + long ret = returnCode - NSAlertFirstButtonReturn; + if(ret == b1) { + event.intval = 1; + } else if(ret == b2) { + event.intval = 2; + } + + NSString *value = nil; + if(textfield) { + value = textfield.stringValue; + event.eventdata = (void*)value.UTF8String; + event.eventdatatype = UI_EVENT_DATA_STRING; + } + + if(callback) { + callback(&event, userdata); + } + }]; + +}