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

Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
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
 
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
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
"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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
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
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 

Dernier (20)

Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
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)
 
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
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
"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
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
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!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 

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