lib/android/ui: by default, calls to UI features are on the same thread
[nit.git] / lib / android / ui / native_ui.nit
1 # This file is part of NIT (http://www.nitlanguage.org).
2 #
3 # Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 # Native services from the `android.view` and `android.widget` namespaces
18 module native_ui is android_api_min 14
19
20 import nit_activity
21
22 in "Java" `{
23 import android.app.Activity;
24
25 import android.view.Gravity;
26 import android.view.View;
27 import android.view.ViewGroup;
28 import android.view.ViewGroup.MarginLayoutParams;
29
30 import android.widget.Button;
31 import android.widget.LinearLayout;
32 import android.widget.GridLayout;
33 import android.widget.PopupWindow;
34 import android.widget.TextView;
35
36 import java.lang.*;
37 import java.util.*;
38 `}
39
40 redef extern class NativeActivity
41
42 # Set the main layout of this activity
43 fun content_view=(layout: NativeViewGroup) in "Java" `{
44 self.setContentView(layout);
45 `}
46 end
47
48 # A `View` for Android
49 extern class NativeView in "Java" `{ android.view.View `}
50 super JavaObject
51
52 fun minimum_width=(val: Int) in "Java" `{ self.setMinimumWidth((int)val); `}
53 fun minimum_height=(val: Int) in "Java" `{ self.setMinimumHeight((int)val); `}
54
55 fun enabled: Bool in "Java" `{ return self.isEnabled(); `}
56 fun enabled=(value: Bool) in "Java" `{ self.setEnabled(value); `}
57 end
58
59 # A collection of `NativeView`
60 extern class NativeViewGroup in "Java" `{ android.view.ViewGroup `}
61 super NativeView
62
63 fun add_view(view: NativeView) in "Java" `{ self.addView(view); `}
64
65 fun add_view_with_weight(view: NativeView, weight: Float)
66 in "Java" `{
67 self.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, (float)weight));
68 `}
69 end
70
71 # A `NativeViewGroup` organized in a line
72 extern class NativeLinearLayout in "Java" `{ android.widget.LinearLayout `}
73 super NativeViewGroup
74
75 new(context: NativeActivity) in "Java" `{ return new LinearLayout(context); `}
76
77 fun set_vertical in "Java" `{ self.setOrientation(LinearLayout.VERTICAL); `}
78 fun set_horizontal in "Java" `{ self.setOrientation(LinearLayout.HORIZONTAL); `}
79
80 redef fun add_view(view) in "Java"
81 `{
82 MarginLayoutParams params = new MarginLayoutParams(
83 LinearLayout.LayoutParams.MATCH_PARENT,
84 LinearLayout.LayoutParams.WRAP_CONTENT);
85 self.addView(view, params);
86 `}
87
88 redef fun new_global_ref import sys, Sys.jni_env `{
89 Sys sys = NativeLinearLayout_sys(self);
90 JNIEnv *env = Sys_jni_env(sys);
91 return (*env)->NewGlobalRef(env, self);
92 `}
93 end
94
95 # A `NativeViewGroup` organized as a grid
96 extern class NativeGridLayout in "Java" `{ android.widget.GridLayout `}
97 super NativeViewGroup
98
99 new(context: NativeActivity) in "Java" `{ return new android.widget.GridLayout(context); `}
100
101 fun row_count=(val: Int) in "Java" `{ self.setRowCount((int)val); `}
102
103 fun column_count=(val: Int) in "Java" `{ self.setColumnCount((int)val); `}
104
105 redef fun add_view(view) in "Java" `{ self.addView(view); `}
106
107 redef fun new_global_ref import sys, Sys.jni_env `{
108 Sys sys = NativeGridLayout_sys(self);
109 JNIEnv *env = Sys_jni_env(sys);
110 return (*env)->NewGlobalRef(env, self);
111 `}
112 end
113
114 extern class NativePopupWindow in "Java" `{ android.widget.PopupWindow `}
115 super NativeView
116
117 new (context: NativeActivity) in "Java" `{
118 PopupWindow self = new PopupWindow(context);
119 self.setWindowLayoutMode(LinearLayout.LayoutParams.MATCH_PARENT,
120 LinearLayout.LayoutParams.MATCH_PARENT);
121 self.setClippingEnabled(false);
122 return self;
123 `}
124
125 fun content_view=(layout: NativeViewGroup) in "Java" `{ self.setContentView(layout); `}
126
127 redef fun new_global_ref import sys, Sys.jni_env `{
128 Sys sys = NativePopupWindow_sys(self);
129 JNIEnv *env = Sys_jni_env(sys);
130 return (*env)->NewGlobalRef(env, self);
131 `}
132 end
133
134 extern class NativeTextView in "Java" `{ android.widget.TextView `}
135 super NativeView
136
137 new (context: NativeActivity) in "Java" `{ return new TextView(context); `}
138
139 fun text: JavaString in "Java" `{ return self.getText().toString(); `}
140
141 fun text=(value: JavaString) in "Java" `{ self.setText(value); `}
142
143 fun gravity_center in "Java" `{
144 self.setGravity(Gravity.CENTER);
145 `}
146
147 fun text_size: Float in "Java" `{
148 return self.getTextSize();
149 `}
150 fun text_size=(dpi: Float) in "Java" `{
151 self.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, (float)dpi);
152 `}
153
154 redef fun new_global_ref import sys, Sys.jni_env `{
155 Sys sys = NativeTextView_sys(self);
156 JNIEnv *env = Sys_jni_env(sys);
157 return (*env)->NewGlobalRef(env, self);
158 `}
159 end
160
161 extern class NativeEditText in "Java" `{ android.widget.EditText `}
162 super NativeTextView
163
164 redef type SELF: NativeEditText
165
166 new (context: NativeActivity) in "Java" `{ return new android.widget.EditText(context); `}
167
168 fun width=(val: Int) in "Java" `{ self.setWidth((int)val); `}
169
170 fun input_type_text in "Java" `{ self.setInputType(android.text.InputType.TYPE_CLASS_TEXT); `}
171
172 redef fun new_global_ref import sys, Sys.jni_env `{
173 Sys sys = NativeEditText_sys(self);
174 JNIEnv *env = Sys_jni_env(sys);
175 return (*env)->NewGlobalRef(env, self);
176 `}
177 end
178
179 extern class NativeButton in "Java" `{ android.widget.Button `}
180 super NativeTextView
181
182 redef type SELF: NativeButton
183
184 redef fun new_global_ref import sys, Sys.jni_env `{
185 Sys sys = NativeButton_sys(self);
186 JNIEnv *env = Sys_jni_env(sys);
187 return (*env)->NewGlobalRef(env, self);
188 `}
189 end