X-Git-Url: http://nitlanguage.org diff --git a/lib/app/app_base.nit b/lib/app/app_base.nit index 2a335c4..e3e870a 100644 --- a/lib/app/app_base.nit +++ b/lib/app/app_base.nit @@ -14,17 +14,21 @@ # 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 @@ -33,25 +37,90 @@ class App # 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. + # + # Triggers are platform specific: + # * Android: `Activity.onCreate` + # * iOS: `UIApplicationDelegate application:didFinishLaunchingWithOptions` + 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 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 errors - fun log_error(msg: String) do sys.stderr.write "{log_prefix} error: {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 - # Helper function for logging warnings - fun log_warning(msg: String) do sys.stderr.write "{log_prefix} warn: {msg}\n" + # 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 - # 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 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 - # Called before destroying the window - fun window_closing 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 + +# Platform bound at compilation (by importation or -m) +# +# This value should not be used to decide the behavior of the software. +# Class refinement provide a safer and a static solution to apply variations. +# However, this value can be used in log files and communications with servers. +fun bound_platform: String do return "none" + app.setup app.run