Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

E(fx)clipse eclipse con

1,738 views

Published on

Slides from e(fx)clipse talk at EclipseCon NA 2015

Published in: Software
  • Be the first to comment

  • Be the first to like this

E(fx)clipse eclipse con

  1. 1. JavaFX @ eclipse.org Tom Schindl <tom.schindl@bestsolution.at> Twitter: @tomsontom Blog: http://tomsondev.bestsolution.at Website: http://www.bestsolution.at
  2. 2. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 About Me ‣ CTO BestSolution.at Systemhaus GmbH ‣ Eclipse Committer ‣ e4 ‣ Platform ‣ EMF ‣ Project lead ‣ e(fx)clipse ‣ Twitter: @tomsontom ‣ Blog: tomsondev.bestsolution.at ‣ Cooperate: http://bestsolution.at
  3. 3. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  4. 4. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling
  5. 5. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling News 1.0 - 1.2 ‣ CSS-Editor - Add gradient editor
  6. 6. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling News 1.0 - 1.2 ‣ CSS-Editor - Add gradient editor
  7. 7. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ CSS-Editor - Support for custom controls Tooling News 1.0 - 1.2
  8. 8. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ Java-Editor - Wizard to generate JavaFX Getter/setters Tooling News 1.0 - 1.2
  9. 9. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ Java-Editor - Wizard to generate JavaFX Getter/setters Tooling News 1.0 - 1.2
  10. 10. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ FXML-Editor - Generating controller stub Tooling News 1.0 - 1.2
  11. 11. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Reuseable Tooling
  12. 12. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse
  13. 13. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ‣ l10n-DSL: if you Java8, e4 and want dynamic language flipping
  14. 14. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ‣ l10n-DSL: if you Java8, e4 and want dynamic language flipping ‣ RRobot-DSL: allows you to describe eclipse-project setups
  15. 15. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ‣ l10n-DSL: if you Java8, e4 and want dynamic language flipping ‣ RRobot-DSL: allows you to describe eclipse-project setups ‣ LivePreview: Reuse the live preview to present your textual content in a visual way
  16. 16. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ‣ l10n-DSL: if you Java8, e4 and want dynamic language flipping ‣ RRobot-DSL: allows you to describe eclipse-project setups ‣ LivePreview: Reuse the live preview to present your textual content in a visual way ‣ CSSExt-DSL: allows you to define your custom CSS- Properties
  17. 17. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n
  18. 18. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n-DSL
  19. 19. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DSL to define translations l10n-DSL
  20. 20. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DSL to define translations ‣ Uses Xtext l10n-DSL
  21. 21. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DSL to define translations ‣ Uses Xtext ‣ Generates code and text files l10n-DSL
  22. 22. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DSL to define translations ‣ Uses Xtext ‣ Generates code and text files ‣ Requires Java8 ‣ Makes use of Java8 functional interfaces and method references l10n-DSL
  23. 23. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n-DSL ‣ DSL to store language definitions package sample.l10n.app.themes { bundle BasicMessages default en { HelloWorld { en : '''Hello World''', de : '''Hallo Welt''' } } bundle SamplePartMessages default en { Button_title [ BasicMessages.HelloWorld ] Current_Date(DATE now) { en : '''«now "MM/dd/yyyy"»''', de : '''«now "dd.MM.yyyy"»''' } } }
  24. 24. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n-DSL ‣ Generated artifacts ‣ ${bundle}.java: e4 message class ‣ ${bundle}.properties: Default transalations ‣ ${bundle}_${lang}.properties: Translations for the lang ‣ ${bundle}Registry.java: Registry to use for binding
  25. 25. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ Use in code (Sample JavaFX) l10n-DSL package sample.l10n.app.themes; public class SamplePart { @Inject SamplePartMessagesRegistry messagesReg; @PostConstruct void init(BorderPane pane) { Button b = new Button(); messagesReg.register(b::setText, messagesReg::Button_title); pane.setCenter(b); Label l = new Label(); messagesReg.register(b::setText, messagesReg.Current_Date_supplier(new Date())); pane.setTop(l); } }
  26. 26. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ Use in code (Sample SWT) l10n-DSL package sample.l10n.app.themes; public class SamplePart { @Inject SamplePartMessagesRegistry messagesReg; @PostConstruct void init(Composite pane) { Button b = new Button(pane,SWT.PUSH); messagesReg.register(b::setText, messagesReg::Button_title); Label l = new Label(pane,SWT.NONE); messagesReg.register(b::setText, messagesReg.Current_Date_supplier(new Date())); } }
  27. 27. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Elementary)
  28. 28. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL
  29. 29. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ‣ DSL to describe Eclipse project setups
  30. 30. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ‣ DSL to describe Eclipse project setups ‣ Uses Xtext
  31. 31. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ‣ DSL to describe Eclipse project setups ‣ Uses Xtext ‣ Allows to setup ‣ JDT Projects ‣ PDE-Projects Bundles & Features
  32. 32. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL RobotTask { // Variables to be used later on variables = { ## Name of the bundle STRING "BundleName" default "econsample" } projects = { BundleProject "${BundleName}" { manifest = ManifestFile "${BundleName}" "1.0.0" "JavaSE-1.8" { bundlename = "${BundleName}" vendor = "BestSolution.at" } build = BuildProperties { } resources = { Folder "src" } rootfragments = { fragment "default-src" "src" } } } }
  33. 33. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Run Task)
  34. 34. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview
  35. 35. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview ‣ LivePreview was developed for FXML/FXGraph immediate feedback
  36. 36. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview ‣ LivePreview was developed for FXML/FXGraph immediate feedback ‣ Expects FXML passed
  37. 37. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview ‣ LivePreview was developed for FXML/FXGraph immediate feedback ‣ Expects FXML passed ‣ LivePreview requests FXML from editors who adapt to IFXMLProviderAdapter
  38. 38. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Elemenatry & Lego-DSL & FXML- Viewer)
  39. 39. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview public class FXMLProviderAdapter implements IFXMLProviderAdapter { private XtextEditor editor; public FXMLProviderAdapter(XtextEditor editor) { this.editor = editor; } @Override public IEditorPart getEditorPart() { return editor; } @Override public String getPreviewFXML() { return editor.getDocument().readOnly(new IUnitOfWork<String, XtextResource>() { @Override public String exec(XtextResource resource) throws Exception { Injector injector = LegoActivator.getInstance().getInjector("at.bestsolution.lego.Lego"); PreviewGenerator generator = injector.getInstance(PreviewGenerator.class); return generator.generatePreview((Model) resource.getContents().get(0)).toString(); } }); }
  40. 40. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL
  41. 41. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL ‣ CSS-Editor has NO hard coded properties
  42. 42. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL ‣ CSS-Editor has NO hard coded properties ‣ Properties available are defined in an extra file ending with .cssext
  43. 43. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL ‣ CSS-Editor has NO hard coded properties ‣ Properties available are defined in an extra file ending with .cssext ‣ CSS-Editor looks up .cssext-Files from projects classpath
  44. 44. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 package svg { prop_alignment-baseline = [ auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | inherit ]; /** * */ tspan { /** * Documentation */ alignment-baseline <prop_alignment-baseline> default: auto; } } CSSExt-DSL
  45. 45. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (SVG-CSS- Properties)
  46. 46. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  47. 47. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Runtime
  48. 48. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse
  49. 49. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DI-Extensions: @Log, @ContextValue, @Service Components for reuse
  50. 50. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DI-Extensions: @Log, @ContextValue, @Service ‣ Filesystem-Service Components for reuse
  51. 51. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DI-Extensions: @Log, @ContextValue, @Service ‣ Filesystem-Service ‣ Controls ‣ Filesystem controls ‣ StyledText & JFace-Text-Port Components for reuse
  52. 52. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API
  53. 53. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API ‣ Simple slf4j like API ‣ Used internally by e(fx)clipse runtime ‣ Implementation provided as an OSGi-Service/ ServiceLoader
  54. 54. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API ‣ Simple slf4j like API ‣ Used internally by e(fx)clipse runtime ‣ Implementation provided as an OSGi-Service/ ServiceLoader ‣ Multiple ways to consume ‣ Through OSGi-Service-Registry ‣ Through a factory ‣ Through DI with @Log
  55. 55. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API
  56. 56. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API @Component public class OSGiComponent { private Logger logger; @Reference public synchronized void setLoggerFactory(LoggerFactory factory) { this.logger = factory.createLogger(OSGiComponent.class.getName()); } } OSGi-Component
  57. 57. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API public class DIComponent { @Inject @Log private Logger logger; } Eclipse-DI @Component public class OSGiComponent { private Logger logger; @Reference public synchronized void setLoggerFactory(LoggerFactory factory) { this.logger = factory.createLogger(OSGiComponent.class.getName()); } } OSGi-Component
  58. 58. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API public class DIComponent { @Inject @Log private Logger logger; } Eclipse-DI public class PlainJava { private static Logger logger = LoggerCreator.createLogger(PlainJava.class); } Plain Java @Component public class OSGiComponent { private Logger logger; @Reference public synchronized void setLoggerFactory(LoggerFactory factory) { this.logger = factory.createLogger(OSGiComponent.class.getName()); } } OSGi-Component
  59. 59. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ Current shipped backends ‣ java.util.logging (default) ‣ log4j ‣ slf4j @Log & Logger-API
  60. 60. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ‣ Allows you to abstract away IEclipseContext#modify
  61. 61. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ‣ Allows you to abstract away IEclipseContext#modify public class ValuePublisherComponent { @Inject private IEclipseContext context; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.modify("contextValue",newVal)); } }
  62. 62. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ‣ Allows you to abstract away IEclipseContext#modify public class ValuePublisherComponent { @Inject private IEclipseContext context; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.modify("contextValue",newVal)); } } public class ValuePublisherComponent { @Inject @ContextValue("contextValue") private ContextBoundValue<String> value; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.publish(newVal)); } }
  63. 63. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ‣ Allows you to abstract away IEclipseContext#modify public class ValuePublisherComponent { @Inject private IEclipseContext context; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.modify("contextValue",newVal)); } } public class ValuePublisherComponent { @Inject @ContextValue("contextValue") private ContextBoundValue<String> value; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.publish(newVal)); } } public class ValuePublisherComponent { @Inject @ContextValue("contextValue") private Property<String> value; public void publishContext() { ListView<String> values = new ListView<>(); fxProperty.bind(values.getSelectionModel().selectedItemProperty()); } }
  64. 64. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Service
  65. 65. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Service ‣ Eclipse DI by default does NOT conform to OSGi-Service semantics ‣ Services can come and go ‣ Requestor of services is important if a ServiceFactory is used
  66. 66. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 public class DIServiceConsumer { @Inject public void setServices(@Service List<LoggerFactory> serviceList) { } @Inject public void setServices(@Service LoggerFactory serviceList) { } } @Service
  67. 67. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Fileystem Service ‣ Service on top of NIO2 low level API
  68. 68. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Fileystem Service ‣ Service on top of NIO2 low level API public class FilesystemSample extends Application { @Override public void start(Stage primaryStage) throws Exception { FilesystemService fs = Util.lookupService(FilesystemSample.class, FilesystemService.class); Subscription observePath = fs.observePath(Paths.get(URI.create("file:/Users/tomschindl")), (k,p) -> { System.err.print("filesystem item '"+p+"' has been "); switch (k) { case CREATE: System.err.println("created."); break; case DELETE: System.err.println("deleted."); break; default: System.err.println("modified."); break; } }); // ..... observePath.dispose(); } }
  69. 69. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controls
  70. 70. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer
  71. 71. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer Folder Content Viewer
  72. 72. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer Folder Content Viewer FileContentViewer
  73. 73. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Non Editable Text: StyledLabel & StyledString
  74. 74. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Non Editable Text: StyledLabel & StyledString StyledString s = new StyledString(); s.appendSegment("Hello", "h1"); s.appendSegment("World!", "h1","colorful"); StyledLabel label = new StyledLabel(s);
  75. 75. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Non Editable Text: StyledLabel & StyledString StyledString s = new StyledString(); s.appendSegment("Hello", "h1"); s.appendSegment("World!", "h1","colorful"); StyledLabel label = new StyledLabel(s); .h1 { -fx-font-size: 20pt; } .colorful { -fx-font-weight: bold; -fx-fill: linear-gradient( from 0.0% 0.0% to 100.0% 100.0%, rgb(128,179,128) 0.0, rgb(255,179,102) 100.0); }
  76. 76. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ StyledText in List/Table/TreeView StyledText APIs
  77. 77. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ StyledText in List/Table/TreeView StyledText APIs public interface OutlineItem { public CharSequence getLabel(); public Node getGraphic(); public OutlineItem getParent(); public ObservableList<OutlineItem> getChildren(); }
  78. 78. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ StyledText in List/Table/TreeView StyledText APIs public interface OutlineItem { public CharSequence getLabel(); public Node getGraphic(); public OutlineItem getParent(); public ObservableList<OutlineItem> getChildren(); } private TreeView<OutlineItem> createView() { TreeView<OutlineItem> outlineView = new TreeView<>(); outlineView.setShowRoot(false); outlineView.setCellFactory(this::createCell); return outlineView; } TreeCell<OutlineItem> createCell(TreeView<OutlineItem> param) { return new SimpleTreeCell<OutlineItem>( i -> i.getLabel(), i -> i.getGraphic(), i -> Collections.emptyList()); }
  79. 79. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Editable StyledText
  80. 80. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Editable StyledText StyledTextArea t = new StyledTextArea(); t.getContent().setText("package test;nn…"); t.setStyleRanges( new StyleRange("keyword",0,6,null,null), /* */);
  81. 81. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Editable StyledText StyledTextArea t = new StyledTextArea(); t.getContent().setText("package test;nn…"); t.setStyleRanges( new StyleRange("keyword",0,6,null,null), /* */); .keyword { -styled-text-color: rgb(127, 0, 85); -fx-font-weight: bold; }
  82. 82. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  83. 83. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  84. 84. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator ‣ Mission 0: Must look slick!
  85. 85. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator ‣ Mission 0: Must look slick! ‣ Mission 1: Create a simple source editor like Notepad++ who: ‣ Is process light-weight ‣ Makes it easy to add new language highlightings
  86. 86. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator ‣ Mission 0: Must look slick! ‣ Mission 1: Create a simple source editor like Notepad++ who: ‣ Is process light-weight ‣ Makes it easy to add new language highlightings ‣ Mission 2: Allow the simple source editor to expand to a (simple) IDE: ‣ where Source-Editor, VCS (git), Ticketsystem (eg. github), CI (eg. travis) are core components fully integrated with each other ‣ Easy to integrate: Does not depend on core.resources
  87. 87. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  88. 88. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  89. 89. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Basic- Editor + Python install)
  90. 90. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator - HSL+CSS
  91. 91. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Python { partition __dftl_partition_content_type partition __python_multiline_comment partition __python_singleline_comment partition __python_string rule_damager rule_damager __dftl_partition_content_type { default token python_default token python_string token python_operator token python_bracket token python_keyword_return token python_keyword keywords python_keyword_return [ "return" ] keywords python_keyword [ "and", "as", „assert", /* … */] } rule_damager __python_singleline_comment { default token python_single_line_comment } /* … */ rule_partitioner { single_line __python_string '"' => '"' single_line __python_singleline_comment "#" multi_line __python_multiline_comment "'''" => "'''" single_line __python_string "'" => "'" } } for "text/python" Compensator - HSL+CSS
  92. 92. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Python { partition __dftl_partition_content_type partition __python_multiline_comment partition __python_singleline_comment partition __python_string rule_damager rule_damager __dftl_partition_content_type { default token python_default token python_string token python_operator token python_bracket token python_keyword_return token python_keyword keywords python_keyword_return [ "return" ] keywords python_keyword [ "and", "as", „assert", /* … */] } rule_damager __python_singleline_comment { default token python_single_line_comment } /* … */ rule_partitioner { single_line __python_string '"' => '"' single_line __python_singleline_comment "#" multi_line __python_multiline_comment "'''" => "'''" single_line __python_string "'" => "'" } } for "text/python" Compensator - HSL+CSS /* */ .Python.styled-text-area .python_doc_default { -styled-text-color: rgb(63, 95, 191); } .Python.styled-text-area .python_single_line_comment { -styled-text-color: rgb(63, 127, 95); } /* */
  93. 93. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo
  94. 94. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  95. 95. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  96. 96. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  97. 97. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator - Roadmap ‣ Tighter integration with git workflow ‣ Improve Java autocomplete & Error Annotations ‣ Support for JavaScript auto-complete & error reporting ‣ Support for Xtext-Languages (their upcoming IntelliJ support should help us) ‣ Connect it to Flux to get a Flux Compensator

×