SlideShare une entreprise Scribd logo
1  sur  76
A FRESH LOOK
        AT
GRAPHICAL EDITING
     Dr. Jan Köhnlein
A PICTURE
     SAYS
 MORE THAN
A THOUSAND
   WORDS
A PICTURE
     SAYS
 MORE THAN
A THOUSAND
   WORDS w
          ron
              g
package ecore

class EObject {}

abstract class EModelElement extends EObject {}

class EFactory extends EObject {}
abstract class ENamedElement extends EModelElement{}
class EAnnotation extends EObject {}

class EPackage extends ENamedElement {}
abstract class EClassifier extends ENamedElement {}
class EEnumLiteral extends ENamedElement {}
abstract class ETypedElement extends ENamedElement {}

class EClass extends EClassifier {}
class EDataType extends EClassifier {}

abstract class EStructuralFeature extends ETypedElement {}
class EOperation extends ETypedElement {}
class EParameter extends ETypedElement {}

class EEnum extends EDataType {}

class EAttribute extends EStructuralFeature {}
class EReference extends EStructuralFeature {}
package ecore

           class EObject {}

           abstract class EModelElement extends EObject {}

           class EFactory extends EObject {}
           abstract class ENamedElement extends EModelElement{}
           class EAnnotation extends EObject {}

           class EPackage extends ENamedElement {}
           abstract class EClassifier extends ENamedElement {}
           class EEnumLiteral extends ENamedElement {}
           abstract class ETypedElement extends ENamedElement {}

           class EClass extends EClassifier {}
           class EDataType extends EClassifier {}

           abstract class EStructuralFeature extends ETypedElement {}
           class EOperation extends ETypedElement {}




73 words
           class EParameter extends ETypedElement {}

           class EEnum extends EDataType {}

           class EAttribute extends EStructuralFeature {}
           class EReference extends EStructuralFeature {}
abstract class EStructuralFeature extends ETypedElement {
	    boolean changeable = "true"
	    boolean ^volatile
	    boolean ^transient
	    String defaultValueLiteral
	    EJavaObject defaultValue
	    boolean ^unsettable
	    boolean ^derived
	    op int getFeatureID()
	    op EJavaClass getContainerClass()
	    container EClass eContainingClass opposite eStructuralFeatures
}

class EReference extends EStructuralFeature {
	    boolean containment
	    boolean ^container
	    boolean resolveProxies = "true"
	    refers EReference eOpposite opposite eOpposite
}



class EParameter extends ETypedElement {
	    container EOperation eOperation opposite eParameters
}

class EAttribute extends EStructuralFeature {
	    boolean iD
	    refers EDataType eAttributeType
}

class EEnumLiteral extends ENamedElement {
	    int value
	    EEnumerator instance
	    container EEnum eEnum opposite eLiterals
}

class EEnum extends EDataType {
	    op EEnumLiteral getEEnumLiteral(String name)
	    op EEnumLiteral getEEnumLiteral(int value)
	    contains EEnumLiteral[] eLiterals opposite eEnum
}

class EObject {}
type EJavaClass wraps Class
type EJavaObject wraps Object
type EEnumerator wraps java.util.Enumeration
abstract class EStructuralFeature extends ETypedElement {
 	    boolean changeable = "true"
 	    boolean ^volatile
 	    boolean ^transient
 	    String defaultValueLiteral
 	    EJavaObject defaultValue
 	    boolean ^unsettable
 	    boolean ^derived
 	    op int getFeatureID()
 	    op EJavaClass getContainerClass()
 	    container EClass eContainingClass opposite eStructuralFeatures
 }

 class EReference extends EStructuralFeature {
 	    boolean containment
 	    boolean ^container
 	    boolean resolveProxies = "true"
 	    refers EReference eOpposite opposite eOpposite
 }



 class EParameter extends ETypedElement {



368 Words
 	    container EOperation eOperation opposite eParameters
 }

 class EAttribute extends EStructuralFeature {
 	    boolean iD
 	    refers EDataType eAttributeType
 }

 class EEnumLiteral extends ENamedElement {
 	    int value
 	    EEnumerator instance
 	    container EEnum eEnum opposite eLiterals
 }

 class EEnum extends EDataType {
 	    op EEnumLiteral getEEnumLiteral(String name)
 	    op EEnumLiteral getEEnumLiteral(int value)
 	    contains EEnumLiteral[] eLiterals opposite eEnum
 }

 class EObject {}
 type EJavaClass wraps Class
 type EJavaObject wraps Object
 type EEnumerator wraps java.util.Enumeration
ENTIRE ECORE ~500 WORDS
A GOOD DIAGRAM
IS A PROJECTION
Mapping




Semantic model       Diagram
Mapping




Semantic model       Diagram
STRUCTURAL MISMATCH
                         bar
               Foo             Bar



Package              Diagram
 Class                Node
   Property
 Class                Node
 Association          Connection
   Property            Label
EDITING METAPHORS
                 bar
           Foo         Bar
EDITING METAPHORS
                          bar
                    Foo         Bar



Delete from model
EDITING METAPHORS
                             bar
                      Foo          Bar



Delete from model   Delete from diagram
EDITING METAPHORS
                               bar
                        Foo          Bar



Delete from model     Delete from diagram
              Drag & Drop
EDITING METAPHORS
                                bar
                         Foo          Bar



Delete from model      Delete from diagram
              Drag & Drop
              Copy & Paste
TECHNOLOGY MISMATCH
 EMF               EMF
 EMFT    Changes
                   EMFT
 Xtext
                   CDO
  Java              ...
   ...
TODOs for a
Graphical Tool
TODOs for a
Diagram editor
 Graphical Tool
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
Element picker / filter
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
Element picker / filter
Bidirectional
transaction mapper
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
Element picker / filter
Bidirectional
transaction mapper
Diagram design
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
           view
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter   DSL
 Bidirectional
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter DSL
 Bidirectional  expressions
 transaction mapper
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter DSL
 Bidirectional  expressions
 transaction mapper
                        snapshot
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
Diagram editor
 Graphical Tool
 Hard-wired
       uni view
 bidirectional mapping
 Element picker / filter DSL
 Bidirectional  expressions
 transaction mapper
                        snapshot
          stylesheet DSL
 Diagram design
Model browser or full
model editor
Detail editor
Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
    Element picker / filter DSL
    Bidirectional   expressions
    transaction mapper
                           snapshot
liveDiagramstylesheet DSL
              design
   Model browser or full
   model editor
   Detail editor
   Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
live Element picker / filter DSL
     Bidirectional   expressions
     transaction mapper
                            snapshot
liveDiagramstylesheet DSL
               design
   Model browser or full
   model editor
   Detail editor
   Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
live Element picker / filter DSL
     Bidirectional   expressions
     transaction mapper
                            snapshot
liveDiagramstylesheet DSL
               design
   Model browser or full
   model editor
   Detail editor
   Model navigation
TODOs for a
   Diagram editor
    Graphical Tool
    Hard-wired
          uni view
    bidirectional mapping
live Element picker / filter DSL
     Bidirectional   expressions
     transaction mapper
                            snapshot
liveDiagramstylesheet DSL
               design
   Model browser or full
           text
   model editor
   Detail editor
   Model navigation
base
base
Modern Expression Language
base
Modern Expression Language
Java-Integration
base
Modern Expression Language
Java-Integration
Statically Typed
base
Modern Expression Language
Java-Integration
Statically Typed
Highly Reusable
RUNTIME
•   Reads mapping and stylesheet

•   Capture snapshots of any live model

•   Render GEF diagram with shape library

•   Selection / navigation adapter for

    •   EMF, Xtext, JDT
MAPPING DSL
•   Xtext-based with Xbase expressions

•   Uni-directional transformation

•   Interpreted
STYLING DSL
•   Xtext-based with Xbase expressions

•   Directly modifies Draw2d figures

•   Interpreted
MyClass



SuperClass
MyClass     this


SuperClass
diagram EClassHierarchy type EClass {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this




 MyClass       this


SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this




 MyClass       this                     MyClass




SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {




 MyClass       this                    MyClass




SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {




 MyClass                               MyClass




SuperClass      this
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass                               MyClass




SuperClass      this
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass                               MyClass




SuperClass      this
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass                               MyClass




SuperClass      this                  SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass       this                    MyClass




SuperClass                            SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this




 MyClass       this                    MyClass




SuperClass                            SuperClass
diagram EClassHierarchy type EClass {
	 node EClassNode for this {
	 	 label Name for this
	 	 edge SuperType for each this.getESuperTypes() {
	 	 	 => call EClassNode for this
	 	 }
	 }
}




 MyClass       this                    MyClass




SuperClass                            SuperClass
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy
                                           refs to mappings
style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()      Xbase body
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
                                           this variable
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}
                                           color literals
style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {                    extensions
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)
}
stylesheet EClassHierarchy
   for EClassHierarchy

style EClassNode.SuperType {
	 var arrow = new PolygonDecoration()
	 arrow.setScale(10,10)
	 arrow.backgroundColor = color(#ffffff)
	 arrow.lineWidth = 2
	 this.targetDecoration = arrow
}

style EClassNode.Name {
	 font = font("Helvetica", 13,
     if (element.abstract) 3 else 1)       semantic styling
}
The code is at

https://github.com/JanKoehnlein/Generic-Graph-View


                 But remember:

        IT‘S A PROTOTYPE

Contenu connexe

Tendances

Tendances (15)

WPF Layout Containers
WPF Layout ContainersWPF Layout Containers
WPF Layout Containers
 
WPF Controls
WPF ControlsWPF Controls
WPF Controls
 
Html entities
Html entitiesHtml entities
Html entities
 
Applets - lev' 2
Applets - lev' 2Applets - lev' 2
Applets - lev' 2
 
Html character entities
Html character entitiesHtml character entities
Html character entities
 
Notes netbeans
Notes netbeansNotes netbeans
Notes netbeans
 
CSS教材
CSS教材CSS教材
CSS教材
 
Auto cad p&id
Auto cad  p&idAuto cad  p&id
Auto cad p&id
 
Uml & rup
Uml & rupUml & rup
Uml & rup
 
14 class design
14 class design14 class design
14 class design
 
14 class design (1)
14 class design (1)14 class design (1)
14 class design (1)
 
27418524 design-patterns-dot-net-with-examples
27418524 design-patterns-dot-net-with-examples27418524 design-patterns-dot-net-with-examples
27418524 design-patterns-dot-net-with-examples
 
Javascript by Yahoo
Javascript by YahooJavascript by Yahoo
Javascript by Yahoo
 
Uml Diagrams for Web Developers
Uml Diagrams for Web DevelopersUml Diagrams for Web Developers
Uml Diagrams for Web Developers
 
13 Graph Classes
13 Graph Classes13 Graph Classes
13 Graph Classes
 

Similaire à A fresh look at graphical editing

VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph IntroductionMats Persson
 
Encodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization ComponentsEncodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization ComponentsKrist Wongsuphasawat
 
Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074Paul Sandoz
 
Generics Past, Present and Future
Generics Past, Present and FutureGenerics Past, Present and Future
Generics Past, Present and FutureRichardWarburton
 
Training institute in Bangalore
Training institute in BangaloreTraining institute in Bangalore
Training institute in Bangalorepentagonspace1
 
Best training institute
Best training institute Best training institute
Best training institute pentagonspace1
 
PhD Presentation
PhD PresentationPhD Presentation
PhD Presentationmskayed
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side JavascriptJulie Iskander
 
Overcoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And ArchitectureOvercoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And ArchitecturePeter Friese
 
A recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templatesA recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templatesCoen De Roover
 
Model-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product LinesModel-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product LinesMarkus Voelter
 
A Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X TransformationA Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X TransformationCoen De Roover
 

Similaire à A fresh look at graphical editing (20)

e4 Webinar - Toolkit Model
e4 Webinar - Toolkit Modele4 Webinar - Toolkit Model
e4 Webinar - Toolkit Model
 
Eclipse meets e4
Eclipse meets e4Eclipse meets e4
Eclipse meets e4
 
VelocityGraph Introduction
VelocityGraph IntroductionVelocityGraph Introduction
VelocityGraph Introduction
 
Encodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization ComponentsEncodable: Configurable Grammar for Visualization Components
Encodable: Configurable Grammar for Visualization Components
 
Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074Codeone18 jdk-incremental-dev6074
Codeone18 jdk-incremental-dev6074
 
ITU - MDD - EMF
ITU - MDD - EMFITU - MDD - EMF
ITU - MDD - EMF
 
JavaEE Spring Seam
JavaEE Spring SeamJavaEE Spring Seam
JavaEE Spring Seam
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
Generics Past, Present and Future
Generics Past, Present and FutureGenerics Past, Present and Future
Generics Past, Present and Future
 
Training institute in Bangalore
Training institute in BangaloreTraining institute in Bangalore
Training institute in Bangalore
 
Best training institute
Best training institute Best training institute
Best training institute
 
PhD Presentation
PhD PresentationPhD Presentation
PhD Presentation
 
JFree chart
JFree chartJFree chart
JFree chart
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
Overcoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And ArchitectureOvercoming The Impedance Mismatch Between Source Code And Architecture
Overcoming The Impedance Mismatch Between Source Code And Architecture
 
java ee 6 Petcatalog
java ee 6 Petcatalogjava ee 6 Petcatalog
java ee 6 Petcatalog
 
A recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templatesA recommender system for generalizing and refining code templates
A recommender system for generalizing and refining code templates
 
Model-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product LinesModel-Driven Development in the context of Software Product Lines
Model-Driven Development in the context of Software Product Lines
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
A Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X TransformationA Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X Transformation
 

Plus de Dr. Jan Köhnlein

The Eclipse Layout Kernel sirius con 2017
The Eclipse Layout Kernel   sirius con 2017The Eclipse Layout Kernel   sirius con 2017
The Eclipse Layout Kernel sirius con 2017Dr. Jan Köhnlein
 
A New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEsA New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEsDr. Jan Köhnlein
 
Graphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagramGraphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagramDr. Jan Köhnlein
 
Diagram Editors - The FXed Generation
Diagram Editors - The FXed GenerationDiagram Editors - The FXed Generation
Diagram Editors - The FXed GenerationDr. Jan Köhnlein
 
Eclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered SpeciesEclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered SpeciesDr. Jan Köhnlein
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editingDr. Jan Köhnlein
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editingDr. Jan Köhnlein
 
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Dr. Jan Köhnlein
 

Plus de Dr. Jan Köhnlein (20)

The Eclipse Layout Kernel sirius con 2017
The Eclipse Layout Kernel   sirius con 2017The Eclipse Layout Kernel   sirius con 2017
The Eclipse Layout Kernel sirius con 2017
 
A New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEsA New Approach Towards Web-based IDEs
A New Approach Towards Web-based IDEs
 
Responsiveness
ResponsivenessResponsiveness
Responsiveness
 
Getting rid of backtracking
Getting rid of backtrackingGetting rid of backtracking
Getting rid of backtracking
 
Graphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagramGraphical Views For Xtext With FXDiagram
Graphical Views For Xtext With FXDiagram
 
XRobots
XRobotsXRobots
XRobots
 
Diagrams, Xtext and UX
Diagrams, Xtext and UXDiagrams, Xtext and UX
Diagrams, Xtext and UX
 
Scoping
ScopingScoping
Scoping
 
Xtext, diagrams and ux
Xtext, diagrams and uxXtext, diagrams and ux
Xtext, diagrams and ux
 
Diagram Editors - The FXed Generation
Diagram Editors - The FXed GenerationDiagram Editors - The FXed Generation
Diagram Editors - The FXed Generation
 
Code Generation With Xtend
Code Generation With XtendCode Generation With Xtend
Code Generation With Xtend
 
Graphical Views For Xtext
Graphical Views For XtextGraphical Views For Xtext
Graphical Views For Xtext
 
The Xtext Grammar Language
The Xtext Grammar LanguageThe Xtext Grammar Language
The Xtext Grammar Language
 
Eclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered SpeciesEclipse Diagram Editors - An Endangered Species
Eclipse Diagram Editors - An Endangered Species
 
Java DSLs with Xtext
Java DSLs with XtextJava DSLs with Xtext
Java DSLs with Xtext
 
DSLs for Java Developers
DSLs for Java DevelopersDSLs for Java Developers
DSLs for Java Developers
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
A fresh look at graphical editing
A fresh look at graphical editingA fresh look at graphical editing
A fresh look at graphical editing
 
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
 
What's Cooking in Xtext 2.0
What's Cooking in Xtext 2.0What's Cooking in Xtext 2.0
What's Cooking in Xtext 2.0
 

Dernier

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Dernier (20)

How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

A fresh look at graphical editing

  • 1. A FRESH LOOK AT GRAPHICAL EDITING Dr. Jan Köhnlein
  • 2.
  • 3. A PICTURE SAYS MORE THAN A THOUSAND WORDS
  • 4. A PICTURE SAYS MORE THAN A THOUSAND WORDS w ron g
  • 5.
  • 6. package ecore class EObject {} abstract class EModelElement extends EObject {} class EFactory extends EObject {} abstract class ENamedElement extends EModelElement{} class EAnnotation extends EObject {} class EPackage extends ENamedElement {} abstract class EClassifier extends ENamedElement {} class EEnumLiteral extends ENamedElement {} abstract class ETypedElement extends ENamedElement {} class EClass extends EClassifier {} class EDataType extends EClassifier {} abstract class EStructuralFeature extends ETypedElement {} class EOperation extends ETypedElement {} class EParameter extends ETypedElement {} class EEnum extends EDataType {} class EAttribute extends EStructuralFeature {} class EReference extends EStructuralFeature {}
  • 7. package ecore class EObject {} abstract class EModelElement extends EObject {} class EFactory extends EObject {} abstract class ENamedElement extends EModelElement{} class EAnnotation extends EObject {} class EPackage extends ENamedElement {} abstract class EClassifier extends ENamedElement {} class EEnumLiteral extends ENamedElement {} abstract class ETypedElement extends ENamedElement {} class EClass extends EClassifier {} class EDataType extends EClassifier {} abstract class EStructuralFeature extends ETypedElement {} class EOperation extends ETypedElement {} 73 words class EParameter extends ETypedElement {} class EEnum extends EDataType {} class EAttribute extends EStructuralFeature {} class EReference extends EStructuralFeature {}
  • 8.
  • 9. abstract class EStructuralFeature extends ETypedElement { boolean changeable = "true" boolean ^volatile boolean ^transient String defaultValueLiteral EJavaObject defaultValue boolean ^unsettable boolean ^derived op int getFeatureID() op EJavaClass getContainerClass() container EClass eContainingClass opposite eStructuralFeatures } class EReference extends EStructuralFeature { boolean containment boolean ^container boolean resolveProxies = "true" refers EReference eOpposite opposite eOpposite } class EParameter extends ETypedElement { container EOperation eOperation opposite eParameters } class EAttribute extends EStructuralFeature { boolean iD refers EDataType eAttributeType } class EEnumLiteral extends ENamedElement { int value EEnumerator instance container EEnum eEnum opposite eLiterals } class EEnum extends EDataType { op EEnumLiteral getEEnumLiteral(String name) op EEnumLiteral getEEnumLiteral(int value) contains EEnumLiteral[] eLiterals opposite eEnum } class EObject {} type EJavaClass wraps Class type EJavaObject wraps Object type EEnumerator wraps java.util.Enumeration
  • 10. abstract class EStructuralFeature extends ETypedElement { boolean changeable = "true" boolean ^volatile boolean ^transient String defaultValueLiteral EJavaObject defaultValue boolean ^unsettable boolean ^derived op int getFeatureID() op EJavaClass getContainerClass() container EClass eContainingClass opposite eStructuralFeatures } class EReference extends EStructuralFeature { boolean containment boolean ^container boolean resolveProxies = "true" refers EReference eOpposite opposite eOpposite } class EParameter extends ETypedElement { 368 Words container EOperation eOperation opposite eParameters } class EAttribute extends EStructuralFeature { boolean iD refers EDataType eAttributeType } class EEnumLiteral extends ENamedElement { int value EEnumerator instance container EEnum eEnum opposite eLiterals } class EEnum extends EDataType { op EEnumLiteral getEEnumLiteral(String name) op EEnumLiteral getEEnumLiteral(int value) contains EEnumLiteral[] eLiterals opposite eEnum } class EObject {} type EJavaClass wraps Class type EJavaObject wraps Object type EEnumerator wraps java.util.Enumeration
  • 11.
  • 13. A GOOD DIAGRAM IS A PROJECTION
  • 16. STRUCTURAL MISMATCH bar Foo Bar Package Diagram Class Node Property Class Node Association Connection Property Label
  • 17. EDITING METAPHORS bar Foo Bar
  • 18. EDITING METAPHORS bar Foo Bar Delete from model
  • 19. EDITING METAPHORS bar Foo Bar Delete from model Delete from diagram
  • 20. EDITING METAPHORS bar Foo Bar Delete from model Delete from diagram Drag & Drop
  • 21. EDITING METAPHORS bar Foo Bar Delete from model Delete from diagram Drag & Drop Copy & Paste
  • 22. TECHNOLOGY MISMATCH EMF EMF EMFT Changes EMFT Xtext CDO Java ... ...
  • 23.
  • 25. TODOs for a Diagram editor Graphical Tool
  • 26. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping
  • 27. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter
  • 28. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper
  • 29. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design
  • 30. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor
  • 31. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor
  • 32. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 33. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 34. TODOs for a Diagram editor Graphical Tool Hard-wired bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 35. TODOs for a Diagram editor Graphical Tool Hard-wired view bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 36. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 37. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 38. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper Diagram design Model browser or full model editor Detail editor Model navigation
  • 39. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper snapshot Diagram design Model browser or full model editor Detail editor Model navigation
  • 40. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper snapshot stylesheet DSL Diagram design Model browser or full model editor Detail editor Model navigation
  • 41. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full model editor Detail editor Model navigation
  • 42. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping live Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full model editor Detail editor Model navigation
  • 43. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping live Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full model editor Detail editor Model navigation
  • 44. TODOs for a Diagram editor Graphical Tool Hard-wired uni view bidirectional mapping live Element picker / filter DSL Bidirectional expressions transaction mapper snapshot liveDiagramstylesheet DSL design Model browser or full text model editor Detail editor Model navigation
  • 45. base
  • 50. RUNTIME • Reads mapping and stylesheet • Capture snapshots of any live model • Render GEF diagram with shape library • Selection / navigation adapter for • EMF, Xtext, JDT
  • 51. MAPPING DSL • Xtext-based with Xbase expressions • Uni-directional transformation • Interpreted
  • 52. STYLING DSL • Xtext-based with Xbase expressions • Directly modifies Draw2d figures • Interpreted
  • 54. MyClass this SuperClass
  • 55. diagram EClassHierarchy type EClass { MyClass this SuperClass
  • 56. diagram EClassHierarchy type EClass { MyClass this SuperClass
  • 57. diagram EClassHierarchy type EClass { node EClassNode for this { MyClass this SuperClass
  • 58. diagram EClassHierarchy type EClass { node EClassNode for this { MyClass this SuperClass
  • 59. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this MyClass this SuperClass
  • 60. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this MyClass this MyClass SuperClass
  • 61. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { MyClass this MyClass SuperClass
  • 62. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { MyClass MyClass SuperClass this
  • 63. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass MyClass SuperClass this
  • 64. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass MyClass SuperClass this
  • 65. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass MyClass SuperClass this SuperClass
  • 66. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass this MyClass SuperClass SuperClass
  • 67. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this MyClass this MyClass SuperClass SuperClass
  • 68. diagram EClassHierarchy type EClass { node EClassNode for this { label Name for this edge SuperType for each this.getESuperTypes() { => call EClassNode for this } } } MyClass this MyClass SuperClass SuperClass
  • 69. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 70. stylesheet EClassHierarchy for EClassHierarchy refs to mappings style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 71. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() Xbase body arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 72. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this variable this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 73. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } color literals style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 74. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { extensions font = font("Helvetica", 13, if (element.abstract) 3 else 1) }
  • 75. stylesheet EClassHierarchy for EClassHierarchy style EClassNode.SuperType { var arrow = new PolygonDecoration() arrow.setScale(10,10) arrow.backgroundColor = color(#ffffff) arrow.lineWidth = 2 this.targetDecoration = arrow } style EClassNode.Name { font = font("Helvetica", 13, if (element.abstract) 3 else 1) semantic styling }
  • 76. The code is at https://github.com/JanKoehnlein/Generic-Graph-View But remember: IT‘S A PROTOTYPE

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n