Sun, 07 Jun 2026 17:43:15 +0200
send broadcast to all receivers
|
500
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2025 Olaf Wintermann. All rights reserved. |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #import "text.h" |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | #import "EventData.h" |
|
1084
cce6dad72164
fix file names on macos
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1082
diff
changeset
|
31 | #import "container.h" |
|
1102
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
32 | #import "action.h" |
|
500
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | #import <objc/runtime.h> |
|
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | |
|
603
8d2b7b934230
refactore widget args passing (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
590
diff
changeset
|
35 | UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { |
|
539
96f466ceaf23
fix textview creation (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
538
diff
changeset
|
36 | NSTextView *textview = [[NSTextView alloc] init]; |
|
540
d8b86f66721c
another textview/scrollview layout fix (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
539
diff
changeset
|
37 | textview.autoresizingMask = NSViewWidthSizable; |
|
d8b86f66721c
another textview/scrollview layout fix (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
539
diff
changeset
|
38 | textview.minSize = NSMakeSize(0, 0); |
|
d8b86f66721c
another textview/scrollview layout fix (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
539
diff
changeset
|
39 | textview.maxSize = NSMakeSize(FLT_MAX, FLT_MAX); |
|
539
96f466ceaf23
fix textview creation (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
538
diff
changeset
|
40 | |
|
538
5004b4a9b16d
use view.fittingSize as backup to intrisicContentSize in GridLayout (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
500
diff
changeset
|
41 | NSScrollView *scrollview = [[NSScrollView alloc] init]; |
|
539
96f466ceaf23
fix textview creation (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
538
diff
changeset
|
42 | scrollview.hasVerticalScroller = YES; |
|
538
5004b4a9b16d
use view.fittingSize as backup to intrisicContentSize in GridLayout (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
500
diff
changeset
|
43 | scrollview.documentView = textview; |
|
500
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | |
|
1082
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
45 | // store link to the textview |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
46 | // associate it with the textview and the scrollview to support both widgets in ui_textarea_gettextwidget |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
47 | objc_setAssociatedObject(textview, "ui_textarea", textview, OBJC_ASSOCIATION_ASSIGN); |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
48 | objc_setAssociatedObject(scrollview, "ui_textarea", textview, OBJC_ASSOCIATION_ASSIGN); |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
49 | |
|
500
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | UiLayout layout = UI_INIT_LAYOUT(args); |
|
718
06eec75a6fd5
remove default fill parameter vom container (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
686
diff
changeset
|
51 | ui_container_add(obj, scrollview, &layout); |
|
500
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
53 | |
|
603
8d2b7b934230
refactore widget args passing (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
590
diff
changeset
|
54 | UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT); |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
55 | if(var) { |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
56 | UiText *text = var->value; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
57 | text->obj = (__bridge void*)textview; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
58 | ui_textarea_restore(text); |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
59 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
60 | text->save = ui_textarea_save; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
61 | text->destroy = ui_textarea_destroy; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
62 | text->restore = ui_textarea_restore; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
63 | text->set = ui_textarea_set; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
64 | text->get = ui_textarea_get; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
65 | text->getsubstr = ui_textarea_getsubstr; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
66 | text->insert = ui_textarea_insert; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
67 | text->setposition = ui_textarea_setposition; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
68 | text->position = ui_textarea_position; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
69 | text->setselection = ui_textarea_setselection; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
70 | text->selection = ui_textarea_selection; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
71 | text->length = ui_textarea_length; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
72 | text->remove = ui_textarea_remove; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
73 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
74 | |
|
1164
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
75 | if(args->onchange || args->ontextchanged || args->onchange_action || args->ontextchanged_action) { |
|
1177
e5e5c1779294
set textview delegate (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1173
diff
changeset
|
76 | TextAreaDelegate * tad = [[TextAreaDelegate alloc] init:obj var:var args:args]; |
|
e5e5c1779294
set textview delegate (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1173
diff
changeset
|
77 | textview.delegate = tad; |
|
e5e5c1779294
set textview delegate (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1173
diff
changeset
|
78 | objc_setAssociatedObject(textview, "delegate", tad, OBJC_ASSOCIATION_RETAIN); |
|
1164
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
79 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
80 | |
|
538
5004b4a9b16d
use view.fittingSize as backup to intrisicContentSize in GridLayout (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
500
diff
changeset
|
81 | return (__bridge void*)scrollview; |
|
500
95ab1710993f
fix nested box containers (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | } |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
83 | |
|
1082
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
84 | UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
85 | id view = (__bridge id)textarea; |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
86 | id textview = objc_getAssociatedObject(view, "ui_textarea"); |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
87 | return (__bridge void*)textview; |
|
42784689781f
add ui_textarea_gettextwidget (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1068
diff
changeset
|
88 | } |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
89 | |
|
1116
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
90 | void ui_textarea_focus(UIWIDGET textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
91 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
92 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
93 | fprintf(stderr, "Error: ui_textarea_focus: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
94 | return; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
95 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
96 | NSTextView *view = (__bridge NSTextView*)textarea; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
97 | [view.window makeFirstResponder:view]; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
98 | |
|
1116
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
99 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
100 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
101 | void ui_textarea_set_selection(UIWIDGET textarea, int begin, int end) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
102 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
103 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
104 | fprintf(stderr, "Error: ui_textarea_set_selection: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
105 | return; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
106 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
107 | NSTextView *view = (__bridge NSTextView*)textarea; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
108 | NSRange range = NSMakeRange(begin, end-begin); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
109 | [view setSelectedRange:range]; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
110 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
111 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
112 | void ui_textarea_select_all(UIWIDGET textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
113 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
114 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
115 | fprintf(stderr, "Error: ui_textarea_select_all: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
116 | return; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
117 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
118 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
119 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
120 | void ui_textarea_set_editable(UIWIDGET textarea, UiBool editable) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
121 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
122 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
123 | fprintf(stderr, "Error: ui_textarea_set_editable: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
124 | return; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
125 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
126 | NSTextView *view = (__bridge NSTextView*)textarea; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
127 | view.editable = editable; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
128 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
129 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
130 | UiBool ui_textarea_is_editable(UIWIDGET textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
131 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
132 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
133 | fprintf(stderr, "Error: ui_textarea_is_editable: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
134 | return 0; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
135 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
136 | NSTextView *view = (__bridge NSTextView*)textarea; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
137 | return view.isEditable; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
138 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
139 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
140 | void ui_textarea_set_position(UIWIDGET textarea, int pos) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
141 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
142 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
143 | fprintf(stderr, "Error: ui_textarea_set_position: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
144 | return; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
145 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
146 | NSTextView *view = (__bridge NSTextView*)textarea; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
147 | NSRange range = NSMakeRange(pos, 0); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
148 | [view setSelectedRange:range]; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
149 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
150 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
151 | int ui_textarea_get_position(UIWIDGET textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
152 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
153 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
154 | fprintf(stderr, "Error: ui_textarea_get_position: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
155 | return 0; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
156 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
157 | NSTextView *view = (__bridge NSTextView*)textarea; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
158 | NSRange range = view.selectedRange; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
159 | return (int)range.location; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
160 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
161 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
162 | void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
163 | textarea = ui_textarea_gettextwidget(textarea); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
164 | if(!textarea) { |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
165 | fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n"); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
166 | return; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
167 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
168 | NSTextView *view = (__bridge NSTextView*)textarea; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
169 | NSRange range = NSMakeRange(pos, 0); |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
170 | [view scrollRangeToVisible:range]; |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
171 | } |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
172 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
173 | |
|
677f7f68f5aa
implement textarea widget functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1102
diff
changeset
|
174 | // UiText textarea functions |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
175 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
176 | void ui_textarea_save(UiText *text) { |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
177 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
178 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
179 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
180 | void ui_textarea_destroy(UiText *text) { |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
181 | (void)(__bridge_transfer NSTextStorage*)text->data1; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
182 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
183 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
184 | void ui_textarea_restore(UiText *text) { |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
185 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
186 | NSTextStorage *textStorage; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
187 | if(text->data1) { |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
188 | textStorage = (__bridge NSTextStorage*)text->data1; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
189 | } else { |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
190 | textStorage = [[NSTextStorage alloc] init]; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
191 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
192 | [textview.layoutManager replaceTextStorage:textStorage]; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
193 | text->data1 = (__bridge_retained void*)textStorage; |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
194 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
195 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
196 | void ui_textarea_set(UiText *text, const char *str) { |
|
685
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
197 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
198 | if(text->value.free) { |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
199 | text->value.free(text->value.ptr); |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
200 | } |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
201 | text->value.ptr = strdup(str); |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
202 | text->value.free = free; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
203 | textview.string = [[NSString alloc] initWithUTF8String:str]; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
204 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
205 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
206 | char* ui_textarea_get(UiText *text) { |
|
685
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
207 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
208 | if(text->value.free) { |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
209 | text->value.free(text->value.ptr); |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
210 | } |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
211 | text->value.ptr = strdup(textview.string.UTF8String); |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
212 | text->value.free = free; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
213 | return text->value.ptr; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
214 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
215 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
216 | char* ui_textarea_getsubstr(UiText *text, int begin, int end) { |
|
685
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
217 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
218 | NSString *str = textview.string; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
219 | NSRange range = NSMakeRange(begin, end-begin); |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
220 | NSString *sub = [str substringWithRange:range]; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
221 | return strdup(sub.UTF8String); |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
222 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
223 | |
|
1068
1c79dbd248f4
add UiText replace function (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
784
diff
changeset
|
224 | void ui_textarea_insert(UiText *text, int pos, const char *str) { |
|
685
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
225 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
226 | NSString *s = [[NSString alloc] initWithUTF8String:str]; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
227 | NSAttributedString *attributedStr = [[NSAttributedString alloc] initWithString:s]; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
228 | [textview.textStorage insertAttributedString:attributedStr atIndex:pos]; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
229 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
230 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
231 | void ui_textarea_setposition(UiText *text, int pos) { |
|
685
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
232 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
233 | NSRange range = NSMakeRange(pos, 0); |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
234 | [textview setSelectedRange:range]; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
235 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
236 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
237 | int ui_textarea_position(UiText *text) { |
|
686
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
238 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
239 | NSRange range = textview.selectedRange; |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
240 | return (int)range.location; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
241 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
242 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
243 | void ui_textarea_setselection(UiText *text, int begin, int end) { |
|
685
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
244 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
245 | NSRange range = NSMakeRange(begin, end-begin); |
|
36e08a9aff8e
implement textarea UiText functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
603
diff
changeset
|
246 | [textview setSelectedRange:range]; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
247 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
248 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
249 | void ui_textarea_selection(UiText *text, int *begin, int *end) { |
|
686
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
250 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
251 | NSRange range = textview.selectedRange; |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
252 | if(begin) { |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
253 | *begin = (int)range.location; |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
254 | } |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
255 | if(end) { |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
256 | *end = (int)(range.location+range.length); |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
257 | } |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
258 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
259 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
260 | int ui_textarea_length(UiText *text) { |
|
686
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
261 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
262 | return (int)textview.string.length; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
263 | } |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
264 | |
|
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
265 | void ui_textarea_remove(UiText *text, int begin, int end) { |
|
686
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
266 | NSTextView *textview = (__bridge NSTextView*)text->obj; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
267 | |
|
686
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
268 | if (begin < 0 || end < begin || end > textview.string.length) { |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
269 | return; |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
270 | } |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
271 | |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
272 | NSRange range = NSMakeRange(begin, end - begin); |
|
1e2f3a44d455
implement missing ui_textarea functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
685
diff
changeset
|
273 | [[textview textStorage] deleteCharactersInRange:range]; |
|
584
12cca226c1eb
implement textarea value binding (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
540
diff
changeset
|
274 | } |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
275 | |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
276 | |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
277 | |
|
1164
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
278 | @implementation TextAreaDelegate |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
279 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
280 | - (id)init:(UiObject*)obj var:(UiVar*)var args:(UiTextAreaArgs*)args { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
281 | self.onchange = args->onchange; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
282 | self.onchangedata = args->onchangedata; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
283 | if(args->onchange_action) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
284 | self.onchange_action = [[NSString alloc]initWithUTF8String:args->onchange_action]; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
285 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
286 | self.ontextchanged = args->ontextchanged; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
287 | self.ontextchangeddata = args->ontextchangeddata; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
288 | if(args->ontextchanged_action) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
289 | self.ontextchanged_action = [[NSString alloc]initWithUTF8String:args->ontextchanged_action]; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
290 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
291 | self.obj = obj; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
292 | self.var = var; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
293 | return self; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
294 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
295 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
296 | - (BOOL) textView:(NSTextView *) textView |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
297 | shouldChangeTextInRange:(NSRange) affectedCharRange |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
298 | replacementString:(NSString *) replacementString { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
299 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
300 | if(_onchange == nil && _onchange_action == nil) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
301 | return YES; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
302 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
303 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
304 | UiEvent event; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
305 | event.obj = _obj; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
306 | event.window = event.obj->window; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
307 | event.document = event.obj->ctx->document; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
308 | event.intval = 0; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
309 | event.set = ui_get_setop(); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
310 | // event data not set yet |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
311 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
312 | if(affectedCharRange.length > 0) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
313 | UiTextChangeEventData eventdata; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
314 | eventdata.type = UI_TEXT_DELETE; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
315 | eventdata.begin = (int)affectedCharRange.location; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
316 | eventdata.end = (int)(affectedCharRange.location + affectedCharRange.length); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
317 | eventdata.text = NULL; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
318 | eventdata.length = 0; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
319 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
320 | event.eventdata = &eventdata; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
321 | event.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
322 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
323 | if(_onchange) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
324 | _onchange(&event, _onchangedata); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
325 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
326 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
327 | if(_onchange_action) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
328 | uic_action_callback(&event, _onchange_action.UTF8String); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
329 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
330 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
331 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
332 | if(replacementString.length > 0) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
333 | UiTextChangeEventData eventdata; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
334 | eventdata.type = UI_TEXT_INSERT; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
335 | eventdata.begin = (int)affectedCharRange.location; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
336 | eventdata.end = 0; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
337 | eventdata.text = replacementString.UTF8String; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
338 | eventdata.length = (int)replacementString.length; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
339 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
340 | event.eventdata = &eventdata; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
341 | event.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
342 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
343 | if(_onchange) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
344 | _onchange(&event, _onchangedata); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
345 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
346 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
347 | if(_onchange_action) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
348 | uic_action_callback(&event, _onchange_action.UTF8String); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
349 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
350 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
351 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
352 | return YES; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
353 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
354 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
355 | - (void) textDidChange:(NSNotification *) notification { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
356 | UiEvent event; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
357 | event.obj = _obj; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
358 | event.window = event.obj->window; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
359 | event.document = event.obj->ctx->document; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
360 | if(_var) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
361 | event.eventdata = _var->value; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
362 | event.eventdatatype = UI_EVENT_DATA_TEXT_VALUE; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
363 | } else { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
364 | event.eventdata = NULL; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
365 | event.eventdatatype = 0; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
366 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
367 | event.intval = 0; |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
368 | event.set = ui_get_setop(); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
369 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
370 | if(_ontextchanged) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
371 | _ontextchanged(&event, _ontextchangeddata); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
372 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
373 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
374 | if(_ontextchanged_action) { |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
375 | uic_action_callback(&event, _ontextchanged_action.UTF8String); |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
376 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
377 | } |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
378 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
379 | @end |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
380 | |
|
3c037b84e6eb
implement textarea events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1116
diff
changeset
|
381 | |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
382 | /* -------------------------- TextField -------------------------- */ |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
383 | |
|
1173
ce0e443174d7
use UiEventType* instead of int* in get_eventdata_func (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1164
diff
changeset
|
384 | static void textfield_geteventdata(id sender, UiVar *var, void **eventdata, UiEventType *eventdatatype, int *value) { |
|
1102
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
385 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
386 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
387 | |
|
603
8d2b7b934230
refactore widget args passing (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
590
diff
changeset
|
388 | static UIWIDGET textfield_create(UiObject *obj, UiTextFieldArgs *args, BOOL password, BOOL frameless) { |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
389 | NSTextField *textfield; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
390 | if(password) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
391 | textfield = [[NSSecureTextField alloc] init]; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
392 | } else { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
393 | textfield = [[NSTextField alloc] init]; |
|
784
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
394 | } |
|
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
395 | |
|
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
396 | if(!args->hfill || args->width > 0) { |
|
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
397 | textfield.translatesAutoresizingMaskIntoConstraints = NO; |
|
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
398 | int width = args->width > 0 ? args->width : 100; |
|
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
399 | [[textfield.widthAnchor constraintEqualToConstant:width] setActive:YES]; |
|
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
400 | } |
|
2fded9495930
set textfield width (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
718
diff
changeset
|
401 | |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
402 | |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
403 | if(frameless) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
404 | [textfield setBezeled: NO]; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
405 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
406 | |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
407 | UiLayout layout = UI_INIT_LAYOUT(args); |
|
718
06eec75a6fd5
remove default fill parameter vom container (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
686
diff
changeset
|
408 | ui_container_add(obj, textfield, &layout); |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
409 | |
|
603
8d2b7b934230
refactore widget args passing (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
590
diff
changeset
|
410 | UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
411 | if(var) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
412 | UiString *s = var->value; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
413 | if(s->value.ptr) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
414 | textfield.stringValue = [[NSString alloc] initWithUTF8String:s->value.ptr]; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
415 | if(s->value.free) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
416 | s->value.free(s->value.ptr); |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
417 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
418 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
419 | s->obj = (__bridge void*)textfield; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
420 | s->get = ui_textfield_get; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
421 | s->set = ui_textfield_set; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
422 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
423 | |
|
1102
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
424 | if(args->onactivate || args->onactivate_action) { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
425 | EventData *event = [[EventData alloc] init:args->onactivate userdata:args->onactivatedata action:args->onactivate_action]; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
426 | event.get_eventdata = textfield_geteventdata; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
427 | event.obj = obj; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
428 | textfield.target = event; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
429 | textfield.action = @selector(handleEventWithEventData:); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
430 | objc_setAssociatedObject(textfield, "eventdata", event, OBJC_ASSOCIATION_RETAIN); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
431 | ui_cocoa_view_bind_action(obj->ctx, textfield, args->onactivate_action); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
432 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
433 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
434 | if(args->onchange || args->onchange_action) { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
435 | TextFieldDelegate *tfd = [[TextFieldDelegate alloc]init:obj var:var]; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
436 | tfd.onchange = args->onchange; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
437 | tfd.onchangedata = args->onchangedata; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
438 | if(args->onchange_action) { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
439 | tfd.onchange_action = [[NSString alloc]initWithUTF8String:args->onchange_action]; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
440 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
441 | objc_setAssociatedObject(textfield, "delegate", tfd, OBJC_ASSOCIATION_RETAIN); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
442 | textfield.delegate = tfd; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
443 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
444 | |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
445 | return (__bridge void*)textfield; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
446 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
447 | |
|
603
8d2b7b934230
refactore widget args passing (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
590
diff
changeset
|
448 | UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
449 | return textfield_create(obj, args, FALSE, FALSE); |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
450 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
451 | |
|
603
8d2b7b934230
refactore widget args passing (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
590
diff
changeset
|
452 | UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) { |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
453 | return textfield_create(obj, args, FALSE, TRUE); |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
454 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
455 | |
|
603
8d2b7b934230
refactore widget args passing (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
590
diff
changeset
|
456 | UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) { |
|
590
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
457 | return textfield_create(obj, args, TRUE, FALSE); |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
458 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
459 | |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
460 | char* ui_textfield_get(UiString *s) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
461 | NSTextField *textfield = (__bridge NSTextField*)s->obj; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
462 | NSString *str = textfield.stringValue; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
463 | const char *cstr = str.UTF8String; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
464 | if(s->value.free) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
465 | s->value.free(s->value.ptr); |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
466 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
467 | s->value.ptr = strdup(cstr); |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
468 | s->value.free = free; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
469 | return s->value.ptr; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
470 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
471 | |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
472 | void ui_textfield_set(UiString *s, const char *value) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
473 | if(s->value.free) { |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
474 | s->value.free(s->value.ptr); |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
475 | } |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
476 | s->value.ptr = NULL; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
477 | s->value.free = NULL; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
478 | NSTextField *textfield = (__bridge NSTextField*)s->obj; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
479 | textfield.stringValue = [[NSString alloc] initWithUTF8String:value]; |
|
07ecff1fa805
add textfield (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
584
diff
changeset
|
480 | } |
|
1086
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
481 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
482 | /* -------------------------- public Textfield functions -------------------------- */ |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
483 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
484 | void ui_textfield_focus(UIWIDGET textfield) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
485 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
486 | [tf.window makeFirstResponder:tf]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
487 | [tf selectText:nil]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
488 | } |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
489 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
490 | void ui_textfield_focus_without_selecting(UIWIDGET textfield) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
491 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
492 | [tf.window makeFirstResponder:tf]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
493 | } |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
494 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
495 | void ui_textfield_set_selection(UIWIDGET textfield, int begin, int end) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
496 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
497 | [tf.window makeFirstResponder:tf]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
498 | NSTextView *fieldEditor = (NSTextView *)[tf.window fieldEditor:YES forObject:tf]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
499 | [fieldEditor setSelectedRange:NSMakeRange(begin, end-begin)]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
500 | } |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
501 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
502 | void ui_textfield_select_all(UIWIDGET textfield) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
503 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
504 | [tf selectText:nil]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
505 | } |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
506 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
507 | void ui_textfield_set_editable(UIWIDGET textfield, UiBool editable) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
508 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
509 | tf.editable = editable; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
510 | } |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
511 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
512 | UiBool ui_textfield_is_editable(UIWIDGET textfield) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
513 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
514 | return tf.isEditable; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
515 | } |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
516 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
517 | void ui_textfield_set_position(UIWIDGET textfield, int pos) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
518 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
519 | NSTextView *editor = (NSTextView *)[tf currentEditor]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
520 | [editor setSelectedRange:NSMakeRange(pos, 0)]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
521 | } |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
522 | |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
523 | int ui_textfield_get_position(UIWIDGET textfield) { |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
524 | NSTextField *tf = (__bridge NSTextField*)textfield; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
525 | NSTextView *editor = (NSTextView *)[tf currentEditor]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
526 | NSRange selectedRange = [editor selectedRange]; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
527 | return (int)selectedRange.location; |
|
33395e907ff6
implement textfield utility functions (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1084
diff
changeset
|
528 | } |
|
1102
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
529 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
530 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
531 | /* -------------------- textfield delegate -------------------- */ |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
532 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
533 | @implementation TextFieldDelegate |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
534 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
535 | - (id)init:(UiObject*)obj var:(UiVar*)var { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
536 | self.obj = obj; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
537 | self.var = var; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
538 | return self; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
539 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
540 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
541 | - (void)controlTextDidChange:(NSNotification *)obj { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
542 | UiString *value = _var ? _var->value : NULL; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
543 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
544 | UiEvent e; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
545 | e.obj = _obj; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
546 | e.window = e.obj->window; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
547 | e.document = e.obj->ctx->document; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
548 | e.eventdata = value; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
549 | e.eventdatatype = value ? UI_EVENT_DATA_STRING_VALUE : 0; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
550 | e.intval = 0; |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
551 | e.set = ui_get_setop(); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
552 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
553 | if(_onchange) { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
554 | _onchange(&e, _onchangedata); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
555 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
556 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
557 | if(_var) { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
558 | ui_notify_evt(value->observers, &e); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
559 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
560 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
561 | if(_onchange_action) { |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
562 | uic_action_callback(&e, _onchange_action.UTF8String); |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
563 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
564 | } |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
565 | |
|
c4883a63929b
implement textfield onchange events (Cocoa)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
1086
diff
changeset
|
566 | @end |