| 79 id view = (__bridge id)textarea; |
79 id view = (__bridge id)textarea; |
| 80 id textview = objc_getAssociatedObject(view, "ui_textarea"); |
80 id textview = objc_getAssociatedObject(view, "ui_textarea"); |
| 81 return (__bridge void*)textview; |
81 return (__bridge void*)textview; |
| 82 } |
82 } |
| 83 |
83 |
| 84 |
84 void ui_textarea_focus(UIWIDGET textarea) { |
| |
85 textarea = ui_textarea_gettextwidget(textarea); |
| |
86 if(!textarea) { |
| |
87 fprintf(stderr, "Error: ui_textarea_focus: widget is not a textarea\n"); |
| |
88 return; |
| |
89 } |
| |
90 NSTextView *view = (__bridge NSTextView*)textarea; |
| |
91 [view.window makeFirstResponder:view]; |
| |
92 |
| |
93 } |
| |
94 |
| |
95 void ui_textarea_set_selection(UIWIDGET textarea, int begin, int end) { |
| |
96 textarea = ui_textarea_gettextwidget(textarea); |
| |
97 if(!textarea) { |
| |
98 fprintf(stderr, "Error: ui_textarea_set_selection: widget is not a textarea\n"); |
| |
99 return; |
| |
100 } |
| |
101 NSTextView *view = (__bridge NSTextView*)textarea; |
| |
102 NSRange range = NSMakeRange(begin, end-begin); |
| |
103 [view setSelectedRange:range]; |
| |
104 } |
| |
105 |
| |
106 void ui_textarea_select_all(UIWIDGET textarea) { |
| |
107 textarea = ui_textarea_gettextwidget(textarea); |
| |
108 if(!textarea) { |
| |
109 fprintf(stderr, "Error: ui_textarea_select_all: widget is not a textarea\n"); |
| |
110 return; |
| |
111 } |
| |
112 } |
| |
113 |
| |
114 void ui_textarea_set_editable(UIWIDGET textarea, UiBool editable) { |
| |
115 textarea = ui_textarea_gettextwidget(textarea); |
| |
116 if(!textarea) { |
| |
117 fprintf(stderr, "Error: ui_textarea_set_editable: widget is not a textarea\n"); |
| |
118 return; |
| |
119 } |
| |
120 NSTextView *view = (__bridge NSTextView*)textarea; |
| |
121 view.editable = editable; |
| |
122 } |
| |
123 |
| |
124 UiBool ui_textarea_is_editable(UIWIDGET textarea) { |
| |
125 textarea = ui_textarea_gettextwidget(textarea); |
| |
126 if(!textarea) { |
| |
127 fprintf(stderr, "Error: ui_textarea_is_editable: widget is not a textarea\n"); |
| |
128 return 0; |
| |
129 } |
| |
130 NSTextView *view = (__bridge NSTextView*)textarea; |
| |
131 return view.isEditable; |
| |
132 } |
| |
133 |
| |
134 void ui_textarea_set_position(UIWIDGET textarea, int pos) { |
| |
135 textarea = ui_textarea_gettextwidget(textarea); |
| |
136 if(!textarea) { |
| |
137 fprintf(stderr, "Error: ui_textarea_set_position: widget is not a textarea\n"); |
| |
138 return; |
| |
139 } |
| |
140 NSTextView *view = (__bridge NSTextView*)textarea; |
| |
141 NSRange range = NSMakeRange(pos, 0); |
| |
142 [view setSelectedRange:range]; |
| |
143 } |
| |
144 |
| |
145 int ui_textarea_get_position(UIWIDGET textarea) { |
| |
146 textarea = ui_textarea_gettextwidget(textarea); |
| |
147 if(!textarea) { |
| |
148 fprintf(stderr, "Error: ui_textarea_get_position: widget is not a textarea\n"); |
| |
149 return 0; |
| |
150 } |
| |
151 NSTextView *view = (__bridge NSTextView*)textarea; |
| |
152 NSRange range = view.selectedRange; |
| |
153 return (int)range.location; |
| |
154 } |
| |
155 |
| |
156 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { |
| |
157 textarea = ui_textarea_gettextwidget(textarea); |
| |
158 if(!textarea) { |
| |
159 fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n"); |
| |
160 return; |
| |
161 } |
| |
162 NSTextView *view = (__bridge NSTextView*)textarea; |
| |
163 NSRange range = NSMakeRange(pos, 0); |
| |
164 [view scrollRangeToVisible:range]; |
| |
165 } |
| |
166 |
| |
167 |
| |
168 // UiText textarea functions |
| 85 |
169 |
| 86 void ui_textarea_save(UiText *text) { |
170 void ui_textarea_save(UiText *text) { |
| 87 |
171 |
| 88 } |
172 } |
| 89 |
173 |