# 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
new_annotation app_version
+ new_annotation app_files
end
# 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
- # 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 being created
+ #
+ # You should build the UI at this time.
+ #
+ # Triggers are platform specific:
+ # * Android: `Activity.onCreate`
+ # * iOS: `UIApplicationDelegate application:didFinishLaunchingWithOptions`
+ fun on_create do end
- # Helper function for logging errors
- fun log_error(msg: String) do sys.stderr.write "{log_prefix} error: {msg}\n"
+ # The application enters the active state, it is in the foreground and interactive
+ #
+ # Triggers are platform specific:
+ # * Android: `Activity.onResume`
+ # * iOS: `UIApplicationDelegate applicationDidBecomeActive`
+ fun on_resume do end
- # Helper function for logging warnings
- fun log_warning(msg: String) do sys.stderr.write "{log_prefix} warn: {msg}\n"
+ # The application leaves the active state but is still partially visible
+ #
+ # It may then go back to `on_resume` or `on_stop`.
+ #
+ # Triggers are platform specific:
+ # * Android: `Activity.onPause`
+ # * iOS: `UIApplicationDelegate applicationWillResignActive`
+ fun on_pause 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 is completely hidden from the user
+ #
+ # It may then be destroyed or go back to a paused state with `on_restart`.
+ #
+ # Triggers are platform specific:
+ # * Android: `Activity.onStop`
+ # * iOS: `UIApplicationDelegate applicationDidEnterBackground`
+ fun on_stop do end
- # Called before destroying the window
- fun window_closing do end
+ # The application returns to a visible state from a previous `on_stop`
+ #
+ # Triggers are platform specific:
+ # * Android: `Activity.onRestart`
+ # * iOS: `UIApplicationDelegate applicationWillEnterForeground`
+ fun on_restart do end
+
+ # The application may be destroyed soon, save its state for a future `on_restore_state`
+ #
+ # Triggers are platform specific:
+ # * Android: `Activity.onSaveInstanceState`
+ # * iOS: `UIApplicationDelegate applicationDidEnterBackground`
+ fun on_save_state do end
+
+ # The application is launching, restore its state from a previous `on_save_state`
+ #
+ # Triggers are platform specific:
+ # * Android: `Activity.onCreate`, _not_ `Activity.onRestoreInstanceState`
+ # as it is trigged only if there is a previous Android specific save state.
+ # * iOS: `UIApplicationDelegate applicationDidEnterBackground`
+ 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