1 # This file is part of NIT (http://www.nitlanguage.org).
3 # Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
17 # Native services from the `android.view` and `android.widget` namespaces
18 module native_ui
is android_api_min
14
23 import android.app.Activity;
25 import android.view.Gravity;
26 import android.view.View;
27 import android.view.ViewGroup;
28 import android.view.ViewGroup.MarginLayoutParams;
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;
40 redef extern class NativeActivity
42 # Set the main layout of this activity
43 fun content_view
=(layout
: NativeViewGroup) in "Java" `{
44 final ViewGroup final_layout = layout;
45 final Activity final_recv = recv;
47 recv.runOnUiThread(new Runnable() {
50 final_recv.setContentView(final_layout);
52 final_layout.requestFocus();
58 # A `View` for Android
59 extern class NativeView in "Java" `{ android.view.View `}
62 fun minimum_width=(val: Int) in "Java" `{ recv.setMinimumWidth((int)val); `}
63 fun minimum_height
=(val
: Int) in "Java" `{ recv.setMinimumHeight((int)val); `}
65 fun enabled: Bool in "Java" `{ return recv.isEnabled(); `}
66 fun enabled
=(value
: Bool) in "Java" `{
67 final View final_recv = recv;
68 final boolean final_value = value;
70 ((Activity)recv.getContext()).runOnUiThread(new Runnable() {
73 final_recv.setEnabled(final_value);
79 # A collection of `NativeView`
80 extern class NativeViewGroup in "Java" `{ android.view.ViewGroup `}
83 fun add_view(view: NativeView) in "Java" `{ recv.addView(view); `}
85 fun add_view_with_weight
(view
: NativeView, weight
: Float)
87 recv.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, (float)weight));
91 # A `NativeViewGroup` organized in a line
92 extern class NativeLinearLayout in "Java" `{ android.widget.LinearLayout `}
95 new(context: NativeActivity) in "Java" `{ return new LinearLayout(context); `}
97 fun set_vertical
in "Java" `{ recv.setOrientation(LinearLayout.VERTICAL); `}
98 fun set_horizontal in "Java" `{ recv.setOrientation(LinearLayout.HORIZONTAL); `}
100 redef fun add_view
(view
) in "Java"
102 MarginLayoutParams params = new MarginLayoutParams(
103 LinearLayout.LayoutParams.MATCH_PARENT,
104 LinearLayout.LayoutParams.WRAP_CONTENT);
105 recv.addView(view, params);
109 # A `NativeViewGroup` organized as a grid
110 extern class NativeGridLayout in "Java" `{ android.widget.GridLayout `}
111 super NativeViewGroup
113 new(context: NativeActivity) in "Java" `{ return new android.widget.GridLayout(context); `}
115 fun row_count
=(val
: Int) in "Java" `{ recv.setRowCount((int)val); `}
117 fun column_count=(val: Int) in "Java" `{ recv.setColumnCount((int)val); `}
119 redef fun add_view
(view
) in "Java" `{ recv.addView(view); `}
122 extern class NativePopupWindow in "Java" `{ android.widget.PopupWindow `}
125 new (context
: NativeActivity) in "Java" `{
126 PopupWindow recv = new PopupWindow(context);
127 recv.setWindowLayoutMode(LinearLayout.LayoutParams.MATCH_PARENT,
128 LinearLayout.LayoutParams.MATCH_PARENT);
129 recv.setClippingEnabled(false);
133 fun content_view
=(layout
: NativeViewGroup) in "Java" `{ recv.setContentView(layout); `}
136 extern class NativeTextView in "Java" `{ android.widget.TextView `}
139 new (context
: NativeActivity) in "Java" `{ return new TextView(context); `}
141 fun text: JavaString in "Java" `{ return recv.getText().toString(); `}
143 fun text
=(value
: JavaString) in "Java" `{
145 final TextView final_recv = recv;
146 final String final_value = value;
148 ((Activity)recv.getContext()).runOnUiThread(new Runnable() {
151 final_recv.setText(final_value);
156 fun gravity_center
in "Java" `{
157 recv.setGravity(Gravity.CENTER);
160 fun text_size
: Float in "Java" `{
161 return recv.getTextSize();
163 fun text_size
=(dpi
: Float) in "Java" `{
164 recv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, (float)dpi);
168 extern class NativeEditText in "Java" `{ android.widget.EditText `}
171 redef type SELF: NativeEditText
173 new (context: NativeActivity) in "Java" `{ return new android.widget.EditText(context); `}
175 fun width
=(val
: Int) in "Java" `{ recv.setWidth((int)val); `}
177 fun input_type_text in "Java" `{ recv.setInputType(android.text.InputType.TYPE_CLASS_TEXT); `}
179 redef fun new_global_ref
: SELF import sys
, Sys.jni_env
`{
180 Sys sys = NativeEditText_sys(recv);
181 JNIEnv *env = Sys_jni_env(sys);
182 return (*env)->NewGlobalRef(env, recv);
186 extern class NativeButton in "Java" `{ android.widget.Button `}
189 redef type SELF: NativeButton
191 redef fun new_global_ref: SELF import sys, Sys.jni_env `{
192 Sys sys
= NativeButton_sys(recv
);
193 JNIEnv *env
= Sys_jni_env(sys
);
194 return (*env
)->NewGlobalRef(env
, recv
);