[View]  [Edit]  [Lock]  [References]  [Attachments]  [History]  [Home]  [Changes]  [Search]  [Help] 

[U8] Mobile Framework

Description

Framework to build applications with pluggable UI for Web, Android, iOS, etc.

Main classes/roles

MobileSystemDomain/model object(s) accessible to a mobile application.
MobileApplicationAn application with a collection of (independent) UI threads.
The user can select/switch threads using a thread selection UI element
e.g. tabBar UI, multi-framed windows -TopPane-, or multi-screen environment -WebDocument-.
MobileThreadA thread defines a point of view of the system. Let the user access the tools to interact with model objects under that point of view.
MobileCoordinatorA GUI composed of widgets/tools used to manage changes on the system during a discrete time. It defines a context of operation on a subset of objects in the system. The coordinator use the screen to present tools/views to the user. The tools/controls can change the system and the coordinator can open/push another coordinator to perform works on that situation/context.
A thread define an initial coordinator, that will be accessible to the user at start time of application.
MobileDevice Or host is the layer of interaction between UI elements and the hosting device/OS.
[Mobile] WidgetsA set of widgets to present and interact with concrete/atomic model objects.
MobileCordinatorTemplateA template that contains all the necessary information to create coordinators.

[Mobile] Critics and thoughts about current design/implementation of Mobile Framework

Tutorials & Developer's Guide

Sample Applications

[Mobile] How to build a Mobile application incrementally

App instantiation patterns

threads template
(#threads -> (
   (1 -> ((#tool -> #threadName1),(#coordinator -> aCoordinatorTemplateForStartup))),
  ,(2 -> ((#tool -> #threadName2),(#coordinator -> aCoordinatorTemplateForStartup)))
))
coordinator templates
((#templates -> (
  (#Browser ->
    ((#class -> #MobileBrowser)
    ,(#configuration -> (
       (#title -> #Browser)
      ,(#widgets -> (#classes ->
         ((#class -> #MobileSelector)
         ,(#configuration -> (
           (#listeners -> (
	     (#needsItems -> [:coordinator | Smalltalk classes sorted: [:a :b| a name < b name]])
             ,(#configureCell:for:in:coordinator: -> [:cell :item :list :aCoordinator | aCoordinator configure: cell title: item name description: nil] )
	     ,(#selected: -> [:item :coordinator | coordinator thread next: ((coordinator newTemplateAt: #ClassView) model: item;yourself) ])
            ))
	  ))
         ))
       ) 
    ))
   ))
 ))
)