# See the License for the specific language governing permissions and
# limitations under the License.
+# Base of the _app.nit_ framework, defines `App`
module app_base is
new_annotation app_name
new_annotation app_namespace
# App subclasses are cross-platform applications
#
-# This class is redefed by plateform modules and so
-# App can be specialized directly in the user app.
+# This class is refined by platform modules and so
+# App can be specialized directly in the user application code.
class App
+ super AppComponent
+
protected init do end
# Starts the internal setup of graphical and other stuff
# Main entry point of your application
fun run do end
+end
+
+# An element of an application that is notified of the application life cycle
+#
+# Most users of _app.nit_ need only to implement `on_create` to setup the application.
+#
+# On mobile devices, the application can be stopped a anytime when another application takes the foreground.
+# Implement the callbacks `on_save_state` and `on_load_state` to keep the state of the application between execution,
+# for an illusion of continuous execution.
+abstract class AppComponent
+
+ # The application is being created
+ #
+ # You should build the UI at this time.
+ fun on_create do end
- # Prefix to all log messages, used by `log_error`, `log_warning` and `log_info`.
- fun log_prefix: String do return "app.nit"
+ # The application is starting or restarting, it is visible to the user
+ fun on_start do end
- # Helper function for logging warnings
- fun log_warning(msg: String) do sys.stderr.write "{log_prefix} warn: {msg}\n"
+ # The application enters the active state, it is in the foreground and interactive
+ fun on_resume do end
- # Main init method for graphical stuff
- # Is called when display is ready so graphical assets
- # can be loaded at this time.
- fun window_created do end
+ # The application leaves the active state but is still partially visible
+ #
+ # It may still be visible in the background.
+ # It may then go back to `on_resume` or `on_stop`.
+ fun on_pause do end
- # Called before destroying the window
- fun window_closing do end
+ # The application is completely hidden from the user
+ #
+ # It may then be destroyed (`on_destroy`) or go back to `on_start`.
+ fun on_stop do end
+
+ # The application is being destroyed
+ fun on_destroy do end
+
+ # The application may be destroyed soon, save its state for a future `on_restore_state`
+ fun on_save_state do end
+
+ # The application is launching, restore its state from a previous `on_save_state`
+ fun on_restore_state do end
end
+# Print a warning
+fun print_warning(object: Object)
+do
+ sys.stderr.write object.to_s
+ sys.stderr.write "\n"
+end
+
+# The running `App`
fun app: App do return once new App
+
app.setup
app.run