Architecture/UserInterface

User Interface
The interface to the user has two main areas: the keyboard navigation of the view and the command and control inputs (login, chat, ...).

HTML Interface
provides HTTP/JSON interfaces and there a web browser is used to access these interfaces. includes a small, fixed function HTTP server to serve up pages designed for controlling.

There are two sets of addresses:
 * http://localhost:9144/std/*: library and common pages
 * http://localhost:9144/static/*: the user interface HTML pages

The 'std' URL, under normal configuration, maps to the directory ".../bin/LookingGlassUI/std/". This directory includes common libraries (jquery and common scripts) as common information pages (copyright and licenses).

The 'static' URL, under normal configuration, maps to the directory ".../bin/LookingGlassUI/Default/". There can be multiple 'skins' so the "Default" portion of this URL can be changed by modifying the parameter rest.manager.skin. This directory contains the HTML pages the user sees as well as any CSS and additional script pages.

Keyboard Navigation
Generally, the user can type at the view (when the view has focus) to move the user's agent in the world and to move the camera viewing the world. This input come out of the Renderer. IRenderProvider.UserInterface returns an IUserInterfaceProvider which has events for mouse movement and keyboard key strokes.

There are four implementations of IUserInterfaceProvider:  UserInterfaceViewWindow: user interface coming from the standalone view window;  UserInterfaceRadegast: user input coming from the Radegast view window; </li> UserInterfaceOgre: user input comes from the Ogre UIO plugin. This is used when the view window was created by the Ogre library. This interface is seldom used any more; </li>  </li>UserInterfaceNull: there is always an implementation of IUserInterfaceProvider</tt> in the renderer so, if user navigation is coming from somewhere else rather than the view window, a UserInterfaceNull</tt> is created and, while allowing routines to subscribe to its mouse and keyboard events, it will never generate anything. </ul>

The IRenderProvider</tt> selects which IUserInterfaceProvider</tt> to use by a configuration parameters which says which module to find it in. RendererOgre</tt>, for instance, has the parameter Renderer.Ogre.InputSystem.Name</tt> which is the name of the module that implements an IUserInterfaceProvider</tt>.