modelling and synthesis of user interfaces for complex
play

Modelling and Synthesis of User Interfaces for Complex, Web-Based - PowerPoint PPT Presentation

Modelling and Synthesis of User Interfaces for Complex, Web-Based Modelling Environments Jacob Beard McGill University Modelling, Simulation and Design Lab (MSDL) 08/29/08 Overall Project Goal The creation of a web-based meta- modelling


  1. Modelling and Synthesis of User Interfaces for Complex, Web-Based Modelling Environments Jacob Beard McGill University Modelling, Simulation and Design Lab (MSDL) 08/29/08

  2. Overall Project Goal  The creation of a web-based meta- modelling environment for synthesizing domain- specific, web-based modelling environments.  Enable language- based multi-formalism modelling.

  3. End-to-End Modelling of UI  Topical  Dave Raggett, W3C incubator group  Useful  Complex behaviour described well by statecharts  Meta-modelling allows easy testing and automation  Important concepts  Layering of Concrete Syntax, Abstract Syntax, and Semantics  Nested and Scoped UI  Statecharts for behaviour

  4. Meta-Modelling the UI Two-Way Communication Between Each Layer HSMCanvas <<Abstract>> DChart Model Attributes: - name :: String Multiplicities: - To CanvasContains: 0 to N serviceLayoutRequest+ T: <layoutRequest> New Arrow Composite Basic CanvasContains Multiplicities: - To Toolbar: 0 to N Rollback* T: <ButtonPress-3> - From HSMCanvas: 0 to N - To PseudoCanvas: 0 to N T: [Done] Create DChart Entity+ T: <layoutRequest> T: [Done] Toolbar <<Abstract>> T: <Control-ButtonPress-3> Attributes: PseudoCanvas <<Abstract>> T: <Any-Motion> - name :: String Attributes: T: [Done] T: [Done] Multiplicities: - name :: String Drop Point* - From CanvasContains: 0 to N Multiplicities: - To ToolbarContains: 0 to N - From CanvasContains: 0 to N T: <Control-ButtonPress-1> - To PseudoCanvasContains: 0 to N T: (create)* T: <ButtonPress-1> Snap Points* Default Idle ToolbarContains T: <KeyPress-space> Multiplicities: PseudoCanvasContains - To HSMCompositeBtn: 0 to N Multiplicities: T: Reset - From Toolbar: 0 to N - To HSMComposite: 0 to N C_0 - To HSMBasicBtn: 0 to N - From PseudoCanvas: 0 to N T: <ButtonPress-1> T: <KeyPress-space> - To HSMBasic: 0 to N HSMCompositeBtn <<Abstract>> HSMBasicBtn <<Abstract>> T: <InteractionSelect>* Attributes: Attributes: T: <ButtonPress-1> - name :: String - name :: String HSMComposite <<Abstract>> HSMBasic <<Abstract>> Multiplicities: Multiplicities: Attributes: Attributes: - From ToolbarContains: 0 to N - From ToolbarContains: 0 to N HSMCompositeContains - name :: String - name :: String Multiplicities: Multiplicities: Drop Point2* Multiplicities: - To HSMBasic: 0 to N - From PseudoCanvasContains: 0 to N T: <Arrow Created> T: [Done] - From PseudoCanvasContains: 0 to N No Snap* - From HSMComposite: 0 to N - From HSMCompositeContains: 0 to N - To HSMCompositeContains: 0 to N - To HSMComposite: 0 to N - From HSMHyperEdge: 0 to N - To HSMHyperEdge: 0 to N B_0 - From HSMHyperEdge: 0 to N - To HSMHyperEdge: 0 to N - From HSMCompositeContains: 0 to N T: [Done] T: <Any-Motion> T: <ButtonPress-3> HSMHyperEdge Attributes: - name :: String - trigger :: String Rollback2* - action :: String Multiplicities: - To HSMBasic: 0 to N - From HSMComposite: 0 to N - To HSMComposite: 0 to N - From HSMBasic: 0 to N End UI Concrete Abstract Semantics Syntax Syntax Each Layer Can Itself Be Metamodelled ... Concrete Syntax Abstract Syntax Semantics

  5. Benefits of this Architecture  Testing  At each layer, events can be recorded, later on played back within testing harness.  Allows headless automated testing of UI.  Each layer can be simulated, thus automated.  Collaboration  Centralized server = easy sync  Easy to hook multiple terminals to the same graphics server: many-to-one relationship

  6. Nested and Scoped UI Buttons Formalism HSM Formalism Nested Buttons Formalism DCharts Formalism Nested Bounding Box Formalism

  7. Statecharts for Behaviour DChart Model Selected Mode* Rotate Mode T: mousemove A: this.newEvent = this.params[0] T: mousedown this.rDelta = this.computeRDelta(this.eventStamp,this.newEvent); G: this.isTypeOfTRotationHandle(this.params[0].target) this.rotate(this.rDelta,this.cachedCenterPoint.x,this.cachedCenterPoint.y); A: this.stampFirst(this.params[0]) this.stampEvent(this.newEvent) this.params[0].stopPropagation(); this.updateTracker() //TODO: saturate on this Rotating T: mouseup Selected_R* Before Mode is Chosen T: mouseup A: this.parent.event('OBJ_FINISHED_TRANSFORM',[this]) T: mouseup A: this.tDelta = this.computeTDelta(this.firstEvent,this.eventStamp); T: mouseup Translating_R this.cacheCenterPoint() this.parent.event('OBJ_FINISHED_TRANSFORM',[this]) T: mousemove T: mousedown A: this.newEvent = this.params[0] G: this.isTypeOfTRect(this.params[0].target) Ready to Translate_R this.tDelta = this.computeTDelta(this.eventStamp,this.newEvent); A: this.params[0].stopPropagation(); T: mousemove this.translate(this.tDelta); A: this.stampFirst(this.params[0]) this.stampEvent(this.newEvent) this.updateTracker() //TODO: saturate on this T: mousemove T: mousedown A: this.stampFirst(this.params[0]) G: this.isTypeOfTRect(this.params[0].target) A: this.params[0].stopPropagation(); * H Scale Mode T: mousemove T: mousedown A: this.newEvent = this.params[0] G: this.isTypeOfTScaleHandle(this.params[0].target) this.scale(this.eventStamp,this.newEvent); A: this.stampFirst(this.params[0]) T: CANVAS_DESELECT this.stampEvent(this.newEvent) this.params[0].stopPropagation(); this.updateTracker() //TODO: saturate on this T: mouseup Scaling T: mouseup Selected_S* A: this.cacheCenterPoint() Idle* this.parent.event('OBJ_FINISHED_TRANSFORM',[this]) T: mousedown T: mouseup G: this.isTypeOfTCanvas(this.params[0].target) A: this.tDelta = this.computeTDelta(this.firstEvent,this.eventStamp); T: (create) this.cacheCenterPoint() T: mousedown A: this.cacheCenterPoint() this.parent.event('OBJ_FINISHED_TRANSFORM',[this]) G: this.isTypeOfTRect(this.params[0].target) A: this.params[0].stopPropagation(); Translating_S Ready to Translate_S Default T: mousemove T: mousemove A: this.newEvent = this.params[0] A: this.stampFirst(this.params[0]) this.tDelta = this.computeTDelta(this.eventStamp,this.newEvent); this.translate(this.tDelta); this.stampEvent(this.newEvent) this.updateTracker() //TODO: saturate on this

  8. How This Comes Together in UI  Hierarchical State Machine Demo

  9. Technical Challenges  What platform to use for web vector graphics? SVG/VML? Flash? Silverlight?  Libraries needed for complex, OO development with ECMAScript → Dojo  Improving performance.  Optimizing Statechart-to-ECMAScript compilation.  Saturating high-fidelity operations.  Other optimizations.  Determining best practices for development

  10. Thank you for attending!

Recommend


More recommend