app.nit: intro example for app::ui
authorAlexis Laferrière <alexis.laf@xymus.net>
Thu, 23 Jun 2016 22:05:43 +0000 (18:05 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Mon, 27 Jun 2016 15:27:21 +0000 (11:27 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/app/README.md
lib/app/examples/.gitignore
lib/app/examples/Makefile
lib/app/examples/ui_example.nit [new file with mode: 0644]

index d48d0b5..0e0187b 100644 (file)
@@ -68,8 +68,8 @@ So there is two ways  to customize the behavior on a given event:
 
 ## Usage Example
 
-The calculator example (at `../../examples/calculator/src/calculator.nit`) is a concrete,
-simple and complete use of the _app.nit_ portable UI.
+The example at `examples/ui_example.nit` shows off most features of `app::ui` in a minimal program.
+You can also take a look at the calculator (`../../examples/calculator/src/calculator.nit`) which is a concrete usage example.
 
 ## Platform-specific UI
 
index 7f0a15f..f594638 100644 (file)
@@ -1,3 +1,4 @@
 http_request_example
-http_request_example.apk
-http_request_example.app
+ui_example
+*.apk
+*.app
index f516f0d..2dfc094 100644 (file)
@@ -1,4 +1,8 @@
-all: http_request_example
+all: http_request_example ui_example
+
+android: http_request_example.apk ui_example.apk
+
+ios: http_request_example.app ui_example.app
 
 http_request_example: $(shell nitls -M http_request_example.nit linux)
        nitc http_request_example.nit -m linux
@@ -8,3 +12,15 @@ http_request_example.apk: $(shell nitls -M http_request_example.nit android)
 
 http_request_example.app: $(shell nitls -M http_request_example.nit ios)
        nitc http_request_example.nit -m ios
+
+ui_example: $(shell nitls -M ui_example.nit linux)
+       nitc ui_example.nit -m linux
+
+ui_example.apk: $(shell nitls -M ui_example.nit android)
+       nitc ui_example.nit -m android
+
+ui_example.app: $(shell nitls -M ui_example.nit ios)
+       nitc ui_example.nit -m ios
+
+clean:
+       rm -rf http_request_example http_request_example.apk http_request_example.app ui_example ui_example.apk ui_example.app
diff --git a/lib/app/examples/ui_example.nit b/lib/app/examples/ui_example.nit
new file mode 100644 (file)
index 0000000..43628af
--- /dev/null
@@ -0,0 +1,92 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# User interface example using `app::ui`
+module ui_example is
+       app_name "app.nit UI"
+       app_namespace "org.nitlanguage.ui_example"
+       android_api_target 15
+end
+
+import app::ui
+import app::data_store
+import android::aware # for android_api_target
+
+# Window showing off some the available controls
+class UiExampleWindow
+       super Window
+
+       # Root layout
+       var layout = new ListLayout(parent=self)
+
+       # Some label
+       var some_label = new Label(parent=layout, text="This Window uses a ListLayout.")
+
+       # A checkbox
+       var checkbox = new CheckBox(parent=layout, text="A CheckBox")
+
+       # Horizontal organization
+       var h_layout = new HorizontalLayout(parent=layout)
+
+       # Description for the `user_input`
+       var user_input_label = new Label(parent=h_layout, text="Input some text:", align=0.5)
+
+       # Field for the user to enter data
+       var user_input = new TextInput(parent=h_layout, text="Default text")
+
+       # Button to open a new window with a ListLayout
+       var button_window = new Button(parent=layout, text="Open a new window")
+
+       # URL to open
+       var example_url = "http://nitlanguage.org/"
+
+       # Button to open the browser
+       var button_browser = new Button(parent=layout, text="Open {example_url}")
+
+       redef fun on_event(event)
+       do
+               if event isa ButtonPressEvent then
+                       if event.sender == button_browser then
+                               example_url.open_in_browser
+                       else if event.sender == button_window then
+                               app.push_window new SecondWindow
+                       end
+               else if event isa ToggleEvent then
+                       if event.sender == checkbox then checkbox.text = if checkbox.is_checked then "Checked" else "Unchecked"
+               end
+       end
+end
+
+# Another window with a small `VerticalLayout`
+class SecondWindow
+       super Window
+
+       # Root layout
+       var layout = new VerticalLayout(parent=self)
+
+       # Some label
+       var a_label = new Label(parent=layout, text="This window uses a VerticalLayout.")
+
+       # Another label
+       var another_label = new Label(parent=layout, text="Close it by tapping the back button.")
+end
+
+redef class App
+       redef fun on_create
+       do
+               # Create the main window
+               push_window new UiExampleWindow
+               super
+       end
+end