SlideShare ist ein Scribd-Unternehmen logo
1 von 97
Downloaden Sie, um offline zu lesen
JavaFX @ eclipse.org
Tom Schindl <tom.schindl@bestsolution.at>
Twitter: @tomsontom
Blog: http://tomsondev.bestsolution.at
Website: http://www.bestsolution.at
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Tooling
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Tooling News 1.0 - 1.2
‣ CSS-Editor - Add gradient editor
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Tooling News 1.0 - 1.2
‣ CSS-Editor - Add gradient editor
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ CSS-Editor - Support for custom controls
Tooling News 1.0 - 1.2
(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
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ FXML-Editor - Generating controller stub
Tooling News 1.0 - 1.2
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Reuseable
Tooling
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
(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
(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
(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
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
l10n
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
l10n-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ DSL to define translations
l10n-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ DSL to define translations
‣ Uses Xtext
l10n-DSL
(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
(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
(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"»'''
}
}
}
(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
(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);
}
}
(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()));
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo
(Elementary)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
‣ DSL to describe Eclipse project setups
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
‣ DSL to describe Eclipse project setups
‣ Uses Xtext
(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
(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"
}
}
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (Run
Task)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
‣ LivePreview was developed for FXML/FXGraph immediate
feedback
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
‣ LivePreview was developed for FXML/FXGraph immediate
feedback
‣ Expects FXML passed
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (Elemenatry &
Lego-DSL & FXML-
Viewer)
(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();
}
});
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
CSSExt-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
CSSExt-DSL
‣ CSS-Editor has NO hard coded properties
(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
(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
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (SVG-CSS-
Properties)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Runtime
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ DI-Extensions: @Log, @ContextValue, @Service
Components for reuse
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ DI-Extensions: @Log, @ContextValue, @Service
‣ Filesystem-Service
Components for reuse
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
(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
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
(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
(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
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Current shipped backends
‣ java.util.logging (default)
‣ log4j
‣ slf4j
@Log & Logger-API
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@ContextValue
‣ Allows you to abstract away IEclipseContext#modify
(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));
}
}
(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));
}
}
(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());
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Service
(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
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Fileystem Service
‣ Service on top of NIO2 low level API
(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();
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controls
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controlsFolderViewer
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controlsFolderViewer
Folder Content Viewer
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controlsFolderViewer
Folder Content Viewer
FileContentViewer
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
‣ Non Editable Text: StyledLabel & StyledString
(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);
(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);
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ StyledText in List/Table/TreeView
StyledText APIs
(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();
}
(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());
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
‣ Editable StyledText
(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),
/* */);
(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;
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
‣ Mission 0: Must look slick!
(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
(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
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (Basic-
Editor + Python
install)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator - HSL+CSS
(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
(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);
}
/* */
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(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

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to GriffonJames Williams
 
Google io extended '17 인천
Google io extended '17 인천Google io extended '17 인천
Google io extended '17 인천Pluu love
 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packagertechmemo
 
Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Kirill Chebunin
 
parenscript-tutorial
parenscript-tutorialparenscript-tutorial
parenscript-tutorialtutorialsruby
 
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPPScalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPPUdaya Kiran
 
HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)Kevin Gill
 
Html5 Open Video Tutorial
Html5 Open Video TutorialHtml5 Open Video Tutorial
Html5 Open Video TutorialSilvia Pfeiffer
 
Compile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwireCompile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwireyann_s
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is DockerNick Belhomme
 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packagertechmemo
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with ComposerAdam Englander
 

Was ist angesagt? (17)

Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
 
Google io extended '17 인천
Google io extended '17 인천Google io extended '17 인천
Google io extended '17 인천
 
How to Add Original Library to Android NDK
How to Add Original Library to Android NDKHow to Add Original Library to Android NDK
How to Add Original Library to Android NDK
 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packager
 
Phalcon 2 - PHP Brazil Conference
Phalcon 2 - PHP Brazil ConferencePhalcon 2 - PHP Brazil Conference
Phalcon 2 - PHP Brazil Conference
 
Troubleshooting Puppet
Troubleshooting PuppetTroubleshooting Puppet
Troubleshooting Puppet
 
Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?
 
parenscript-tutorial
parenscript-tutorialparenscript-tutorial
parenscript-tutorial
 
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPPScalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
 
How to Make Android Native Application
How to Make Android Native ApplicationHow to Make Android Native Application
How to Make Android Native Application
 
HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)
 
Html5 Open Video Tutorial
Html5 Open Video TutorialHtml5 Open Video Tutorial
Html5 Open Video Tutorial
 
Compile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwireCompile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwire
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packager
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with Composer
 

Andere mochten auch

EclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraEclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraMichaël Figuière
 
The Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing FrameworkThe Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing FrameworkAlexander Nyßen
 
Managing XML documents with Epsilon
Managing XML documents with EpsilonManaging XML documents with Epsilon
Managing XML documents with EpsilonDimitris Kolovos
 

Andere mochten auch (7)

EclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraEclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache Cassandra
 
The Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing FrameworkThe Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing Framework
 
GEF4 - Sightseeing Mars
GEF4 - Sightseeing MarsGEF4 - Sightseeing Mars
GEF4 - Sightseeing Mars
 
GEF(4) Dot Oh Dot Oh
GEF(4) Dot Oh Dot OhGEF(4) Dot Oh Dot Oh
GEF(4) Dot Oh Dot Oh
 
Managing XML documents with Epsilon
Managing XML documents with EpsilonManaging XML documents with Epsilon
Managing XML documents with Epsilon
 
Epsilon
EpsilonEpsilon
Epsilon
 
Eugenia
EugeniaEugenia
Eugenia
 

Ähnlich wie E(fx)clipse eclipse con

Java fx smart code econ
Java fx smart code econJava fx smart code econ
Java fx smart code econTom Schindl
 
Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Rhinofly
 
Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...Bharat Malge
 
Democamp - Munich - Java9
Democamp - Munich - Java9Democamp - Munich - Java9
Democamp - Munich - Java9Tom Schindl
 
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and ScalaWriting highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and Scalajfarcand
 
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...Vincenzo Barone
 
Flash Security, OWASP Chennai
Flash Security, OWASP ChennaiFlash Security, OWASP Chennai
Flash Security, OWASP Chennailavakumark
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Servicesmattjive
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptJohn Stevenson
 
Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Tony Frame
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3Andrea Dottor
 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Edward Burns
 
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia
 
Building a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQLBuilding a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQLYan Cui
 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)yann_s
 
Build social network in 4 weeks
Build social network in 4 weeksBuild social network in 4 weeks
Build social network in 4 weeksYan Cui
 

Ähnlich wie E(fx)clipse eclipse con (20)

Java fx smart code econ
Java fx smart code econJava fx smart code econ
Java fx smart code econ
 
Java fx tools
Java fx toolsJava fx tools
Java fx tools
 
Java fx & xtext
Java fx & xtextJava fx & xtext
Java fx & xtext
 
Java fx ap is
Java fx ap isJava fx ap is
Java fx ap is
 
Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Railo Presentation Railo 3.1
Railo Presentation Railo 3.1
 
Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...
 
Democamp - Munich - Java9
Democamp - Munich - Java9Democamp - Munich - Java9
Democamp - Munich - Java9
 
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and ScalaWriting highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
 
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
 
Flash Security, OWASP Chennai
Flash Security, OWASP ChennaiFlash Security, OWASP Chennai
Flash Security, OWASP Chennai
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Services
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
 
Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3
 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.
 
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
 
Building a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQLBuilding a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQL
 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)
 
Build social network in 4 weeks
Build social network in 4 weeksBuild social network in 4 weeks
Build social network in 4 weeks
 

Kürzlich hochgeladen

Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 

Kürzlich hochgeladen (20)

Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 

E(fx)clipse eclipse con

  • 1. JavaFX @ eclipse.org Tom Schindl <tom.schindl@bestsolution.at> Twitter: @tomsontom Blog: http://tomsondev.bestsolution.at Website: http://www.bestsolution.at
  • 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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 4. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling
  • 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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling News 1.0 - 1.2 ‣ CSS-Editor - Add gradient editor
  • 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. (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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ FXML-Editor - Generating controller stub Tooling News 1.0 - 1.2
  • 11. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Reuseable Tooling
  • 12. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse
  • 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. (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. (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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n
  • 18. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n-DSL
  • 19. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DSL to define translations l10n-DSL
  • 20. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DSL to define translations ‣ Uses Xtext l10n-DSL
  • 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. (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. (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. (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. (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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Elementary)
  • 28. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL
  • 29. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ‣ DSL to describe Eclipse project setups
  • 30. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ‣ DSL to describe Eclipse project setups ‣ Uses Xtext
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Run Task)
  • 34. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview
  • 35. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview ‣ LivePreview was developed for FXML/FXGraph immediate feedback
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Elemenatry & Lego-DSL & FXML- Viewer)
  • 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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL
  • 41. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL ‣ CSS-Editor has NO hard coded properties
  • 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. (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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (SVG-CSS- Properties)
  • 46. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 47. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Runtime
  • 48. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse
  • 49. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DI-Extensions: @Log, @ContextValue, @Service Components for reuse
  • 50. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ DI-Extensions: @Log, @ContextValue, @Service ‣ Filesystem-Service Components for reuse
  • 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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API
  • 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. (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. (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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ‣ Allows you to abstract away IEclipseContext#modify
  • 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. (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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Service
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Fileystem Service ‣ Service on top of NIO2 low level API
  • 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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controls
  • 70. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer
  • 71. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer Folder Content Viewer
  • 72. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer Folder Content Viewer FileContentViewer
  • 73. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Non Editable Text: StyledLabel & StyledString
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ‣ StyledText in List/Table/TreeView StyledText APIs
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ‣ Editable StyledText
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 83. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 84. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator ‣ Mission 0: Must look slick!
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 88. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 89. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Basic- Editor + Python install)
  • 90. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator - HSL+CSS
  • 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. (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. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo
  • 94. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 95. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 96. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 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