Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[e4-dev] UI model and ESE hotel room

Hi,

I've been toying with an EMF model of a toolkit. There are many issues that come up:
- how much does it abstract from swt (e.g. TabFolder/Tab)
- how does it handle toolkit-specific objects like layout data and styling info
- can you model "unknown" controls (GenericControl)
- how do you add toolkit-specific meta-data, to help the mapping code (annotations)

I've attached the "current" model, which in some way or another addresses all these. Comments are welcome.

ESE: I waited until I got an accept for my position paper before trying to book a hotel room... which was a bit late. Anybody who knows someone who has a room, but have decided not to come?

Hallvard
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"; name="swt"
    nsURI="http://no.hal/diamodl/toolkit/swt.ecore"; nsPrefix="diamodl.toolkit.swt">
  <eAnnotations source="http://www.eclipse.org/swt";>
    <details key="javaPackage" value="org.eclipse.swt.widgets"/>
  </eAnnotations>
  <eClassifiers xsi:type="ecore:EDataType" name="RuntimeEvent" instanceClassName="java.util.EventObject"/>
  <eClassifiers xsi:type="ecore:EDataType" name="Color" instanceClassName="org.eclipse.swt.graphics.Color"/>
  <eClassifiers xsi:type="ecore:EDataType" name="Font" instanceClassName="org.eclipse.swt.graphics.Font"/>
  <eClassifiers xsi:type="ecore:EDataType" name="Layout" instanceClassName="org.eclipse.swt.widgets.Layout"/>
  <eClassifiers xsi:type="ecore:EDataType" name="LayoutData" instanceClassName="java.lang.Object"/>
  <eClassifiers xsi:type="ecore:EDataType" name="Alignment" instanceClassName="int"/>
  <eClassifiers xsi:type="ecore:EClass" name="Style">
    <eStructuralFeatures xsi:type="ecore:EReference" name="layoutData" containment="true">
      <eGenericType eClassifier="#//SharedObject">
        <eTypeArguments eClassifier="#//LayoutData"/>
      </eGenericType>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EReference" name="backgroundColor" containment="true">
      <eGenericType eClassifier="#//SharedObject">
        <eTypeArguments eClassifier="#//Color"/>
      </eGenericType>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EReference" name="foregroundColor" containment="true">
      <eGenericType eClassifier="#//SharedObject">
        <eTypeArguments eClassifier="#//Color"/>
      </eGenericType>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EReference" name="font" containment="true">
      <eGenericType eClassifier="#//SharedObject">
        <eTypeArguments eClassifier="#//Font"/>
      </eGenericType>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="textAlignment" eType="#//Alignment"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="verticalAlignment" eType="#//Alignment"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="horizontalAlignment" eType="#//Alignment"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Styled">
    <eStructuralFeatures xsi:type="ecore:EReference" name="style" eType="#//Style"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Control" abstract="true" eSuperTypes="#//Styled">
    <eStructuralFeatures xsi:type="ecore:EReference" name="composite" eType="#//AbstractComposite"
        eOpposite="#//AbstractComposite/children"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="enabled" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean";
        defaultValueLiteral="true">
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="visible" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean";
        defaultValueLiteral="true">
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Label" eSuperTypes="#//Control">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Text" eSuperTypes="#//Control">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="modify" eType="#//RuntimeEvent"
        transient="true">
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="event"/>
        <details key="invalidates" value="text"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="keyUp" eType="#//RuntimeEvent"
        transient="true">
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="event"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
        <details key="invalidatedBy" value="modify"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="List" abstract="true" eSuperTypes="#//Control">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="items" upperBound="-1"
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="selectionEvent" eType="#//RuntimeEvent"
        transient="true">
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="event"/>
        <details key="invalidates" value="selection"/>
        <details key="realName" value="selection"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SingleSelectionList" eSuperTypes="#//List">
    <eAnnotations source="http://www.eclipse.org/swt";>
      <details key="style" value="SINGLE"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="selection" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="getSelectionIndex setSelection"/>
        <details key="invalidatedBy" value="selectionEvent"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MultipleSelectionList" eSuperTypes="#//List">
    <eAnnotations source="http://www.eclipse.org/swt";>
      <details key="style" value="MULTI"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="selection" upperBound="-1"
        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="getSelectionIndices setSelection"/>
        <details key="invalidatedBy" value="selection"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Browser" eSuperTypes="#//Control">
    <eAnnotations source="http://www.eclipse.org/swt";>
      <details key="javaPackage" value="org.eclipse.swt.browser"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="location" eType="#//RuntimeEvent"
        transient="true">
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="event"/>
        <details key="invalidates" value="url text"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="url" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
        <details key="invalidatedBy" value="location"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
        <details key="invalidatedBy" value="location"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Button" abstract="true" eSuperTypes="#//Control">
    <eAnnotations source="http://www.eclipse.org/swt";>
      <details key="javaClass" value="Button"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="selectionEvent" eType="#//RuntimeEvent"
        transient="true">
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="event"/>
        <details key="invalidates" value="selection"/>
        <details key="realName" value="selection"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="PushButton" eSuperTypes="#//Button">
    <eAnnotations source="http://www.eclipse.org/swt";>
      <details key="style" value="PUSH"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="CheckBox" eSuperTypes="#//Button">
    <eAnnotations source="http://www.eclipse.org/swt";>
      <details key="style" value="CHECK"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="selection" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
        <details key="invalidatedBy" value="selectionEvent"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="ToggleButton" eSuperTypes="#//Button">
    <eAnnotations source="http://www.eclipse.org/swt";>
      <details key="style" value="TOGGLE"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="selection" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
        <details key="invalidatedBy" value="selectionEvent"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="AbstractComposite" abstract="true">
    <eStructuralFeatures xsi:type="ecore:EReference" name="children" upperBound="-1"
        eType="#//Control" containment="true" eOpposite="#//Control/composite"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Composite" eSuperTypes="#//AbstractComposite">
    <eStructuralFeatures xsi:type="ecore:EReference" name="layout" containment="true">
      <eGenericType eClassifier="#//SharedObject">
        <eTypeArguments eClassifier="#//Layout"/>
      </eGenericType>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TitledComposite" abstract="true" eSuperTypes="#//Composite">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="title" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";>
      <eAnnotations source="http://www.eclipse.org/swt";>
        <details key="access" value="property"/>
        <details key="realName" value="text"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="GroupBox" eSuperTypes="#//TitledComposite"/>
  <eClassifiers xsi:type="ecore:EClass" name="TabFolder" eSuperTypes="#//AbstractComposite"/>
  <eClassifiers xsi:type="ecore:EClass" name="Tab" eSuperTypes="#//TitledComposite"/>
  <eClassifiers xsi:type="ecore:EClass" name="SharedObject">
    <eTypeParameters name="T"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value">
      <eGenericType eTypeParameter="#//SharedObject/T"/>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="GenericControl" eSuperTypes="#//Control">
    <eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1"
        eType="#//TypeNameValueTuple"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SharedImmediate" eSuperTypes="#//SharedObject">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="data" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="SharedBean">
    <eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1"
        eType="#//TypeNameValueTuple"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TypeNameValueTuple">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="javaClass">
      <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass";>
        <eTypeArguments/>
      </eGenericType>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="data" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
  </eClassifiers>
</ecore:EPackage>

Back to the top