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!

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend