Provides the API for accessing the screen elements wrapping the content and EMF model data.
The content data are considered as screens if they provide {@link IScreenAdapter} service. The {@link IScreenProvider} is used for building the screen UI tree in the target VM. Each screen element holds a reference (JEM object) to the live widgets and it also registers as the EMF adapter for receiving change notifications. When notified, the screen element performs update to the underlying model through the content interfaces.
Usage:
// UI creation // screen data is provided by the IContent IContentData screenData = xxx; // screen context defines the current screen resolution and provides the EMF resourceset used for creating new JEM objects IScreenContext screenContext = new ScreenContext(); IScreenAdapter adapter = (IScreenAdapter) screenData.getAdapter(IScreenAdapter.class); // builds the screen live widget, this may or may not initialize the child elements IScreenElement rootElement = adapter.buildScreen(screenContext); // dynamically adds child to the screen IScreenElement childElement = new ScreenElement(); rootElement.addChild(childElement); // creates the live widget childElement.adaptToScreen(screenContext); // adds the widget to the parent by using the containment feature childElement.addToParent(rootElement); // Notification and model updates // screen element typically wraps the content data and updates data upon change notifications void handleNotification(Notification notification) { // wrapped content data IContentData contentData = getData(); if (Notification.ADD == notification.getType()) { // a child is added Object childWidget = notification.getNewValue(); // updates the content contentData.addChild(...); } else if (Notification.SET == notification.getType()) { // property changes // new property value Object newValue = notification.getNewValue(); // old property value Object oldValue = notification.getOldValue(); // affected property EStructuralFeature feature = (EStructuralFeature) notification.getFeature(); // finds the registered property handler IMyPropertyHandler handler = (IMyPropertyHandler) contentData.getAdapter(IMyPropertyHandler.class); // updates the model handler.propertyChanged(new PropertyChangeEvent(feature, oldValue, newValue)); } }