SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Kürzlich hochgeladen (20)

Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

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

Hinweis der Redaktion

  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