Work in progress
TODO: Diagrams of ASCIIArt sections
[GTK / Qt / ncurses / Win32 / FastCGI for HTML / ... ] \
| \
[ UI Level ]------+ \
| | \
| [ Macro Level ] }
| | } Client side
[ Glue Level ]-----+ /
| /
[ Comms Level ] /
| /
.
. <== transport
.
| \
[ Comms Level ] } Server side
| }
[ ? ] /
Considers UI elements. Might consider a tree something like
Application => [has metadata]
|- Form *
|- Region * => for layout purposes
|- Control *
|- Event *
| ==> send
|- Method *
| <=> call/return
| <== call/ignore
|- Property *
<== update
<=> query
Not all interface models would support all events/properties
Criticality - consider want vs. need
"CSS" style override; per-app per-interface hints. Beware of O(n*m) problem
Events are subscribed, not broadcasted
Event subscriptions might include parameters for filtering
This probably needs a lot of rethinking - how to make it sufficiently generic not to care about GTK / Qt / ... text ... speech-based interface? Menus..? More abstract things...
Don't always want full network roundtrips for every UI operation
React to UI events; transform, reflect to properties/methods, throw higher-level events down to application
How powerful? Too little and it isn't useful. Too much and we hit the "JavaScript" problem - security, etc...
Language - open choice. Many scripting languages, maybe none suitable. Something custom?
Might not even be Turing complete. while(1) { }. Consider special classes of useful operation, rather than general purpose.
(needs a better name)
Glue layer exists largely to tie up UI elements and application concepts.
A sufficiently powerful glue layer should be able to imply UI elements. I.e. not have to hand-generate a UI layout
Consider example in an IRC client:
Considerations: Does glue layer know about specific UI type? Can it talk in specific e.g. GTK terms?
UI talking to application on server. Try to talk to glue; i.e. in terms of the abstract application, not the concrete UI
Handles lots of issues:
Possible UI types: Web, GTK2, Qt, Win32, "ncurses"-style TUI, raw commandline, raw RPC
Interactivty styles: display, request/response, duplex by state push, duplex by polling (do we care?)
Not all UI types go with all styles - cannot push state to commandline or RPC, Web only with JavaScript/AJAX/etc...
Access to resources. Clearly UI client has local video/keyboard/mouse access. Sound? More exotic IO devices? What of access to files? Needs bidirectional server/client trust model.
Client-local caching of "expensive" static resources - layout configurations, icons and other images, sounds,...
Pre-caching optimisations - optimse for latency/bandwidth/transmitted bytes/etc...
Possible types of application to build (and examples of existing applications):
Types of application we won't consider:
Grey areas - do we want to go down this route?
Application has "here are my demands" list; so UI knows if it has sufficient functionallity to cope