/RichClientFX

A lightweight EMF Rich Client Platform based on JavaFX

Primary LanguageJavaApache License 2.0Apache-2.0

JavaFX based EMF Rich Client Platform

A lightweight JavaFX based EMF Rich Client Platform. This framework is defined by the emf model itself. The workbench is created by the definition. The framework contains a selection service for registration and recognition of selections. Defined views like PropertyView, HistoryView, ProjectExplorer can be included in it.

Eclipse Editor for generating JavaFX Controls by defining meta informations in EMF or in Xtext DSL. For more details, please visit the wiki site

Overview of code generation with Eclipse IDE Support

Code Generation

Running generated application with EMF support like Undo / Redo, PropertySheet (Optional) and Tree / Table/ List Editing.

This application contains on the generation:

  • Workbench
  • ProjectExplorer
  • Workspace
  • EMF Model TreeEditor
  • PropertyView
  • Flat HistoryView for Undo / Redo
  • Hierachical History View for Undo / Redo
  • ContextMenu with commands:
    • New item creation
    • Copy / Paste
    • Edit
    • Delete
    • Duplicate
    • Undo / Redo
  • Command Acceleration Binding for Undo / Redo
  • Theme switching
  • Default dark theme
  • Addons:
    • Realtime JavaFX Chart Rendering
      • LineChart
      • BarChart
      • ScatterChart
      • AreaChart
      • PieChart
    • Realtime Orson Chart Rendering
      • AreaChart 3D
      • BarChart 3D
      • LineChart 3D
      • PieChart 3D
      • ScatterChart 3D
      • XYZLineChart
      • XYZBarChart
      • SurfacePlotter
    • Thymeleaf Blog Template Generator
    • Barcode Renderer used OkapiBarcode
    • Lecture: Declarative defining presentation slides via tree view, markdown or html
  • Editor Registry for several types

Flat History View

This view shows all command calls. Via the context menu, the user can undo or redo this action. Running Application

Hierachical History View

This view is an extended history view. A lot of information is displayed in cell feature directly. The user is allowed to undo / redo and delete this command direct via the buttons. The results are also displayed in the tree as child nodes. Running Application

RealTime LineChart Rendering

This addon supports rendering of chart files. The chart file is defined in EMF Xcore, so to create a chart the EMFTreeModelView can be used. Running Application

RealTime BarChart Rendering

BarChart Rendering showing history view, editor part and emf model tree. Running Application

RealTime AreaChart 3D Rendering (Orson Chart)

Running Application

RealTime BarChart 3D Rendering (Orson Chart)

Running Application

RealTime Surface 3D Plotter (Orson Chart)

Running Application

RealTime BarChart 3D Rendering (Orson Chart)

Running Application

Generic Selection Viewer

Shows all provided selections as fields and methods in tables and hierachical view. Running Application

Lecture Presentation Slides Editor

Defining presentation slides can be declare by emf treeview, html or markdown. Running the slides in JavaFX Tab or external browser with the reveal.js api. Running Application

EMF.edit for undo, redo, editing and drag&drop support.

Basic functions will integrate into the TreeView, ListView and TableView. The following figure will shows a generated EMF.edit TreeView with binded PropertyView and HistoryView. Only this description is required to configure the generation

EMFSupport for CRM{
	packagePath: 'hello.world.crm' 
	modelItemProviderAdapterFactory: de.dc.javafx.emfsupport.website.model.provider.ModelItemProviderAdapterFactory
	modelPackage: de.dc.javafx.emfsupport.website.model.ModelPackage
	modelFactory: de.dc.javafx.emfsupport.website.model.ModelFactory
	rootType: de.dc.javafx.emfsupport.website.model.Website
	useUndoRedo: true  
	showCommandStack: true 
	showPropertyView: true 
	// Generate an example application
    	generateDemo: true 
 
	// Edit Suppport, EAttributes is taken from EMF generated ModelPackage
	// This attribute should exist, otherwise you will get a compile error.
	editables += EAttribute(Website_Name)
	editables += EAttribute(Page_Name)	
	editables += EAttribute(Author_Firstname)
    
	// Context Menu
	contextMenus += addContextMenu(
		id:AddPage 
		parentType: de.dc.javafx.emfsupport.website.model.Website
		createType: de.dc.javafx.emfsupport.website.model.Page 
	)
	contextMenus += addContextMenu(
		id:AddAuthor 
		parentType: de.dc.javafx.emfsupport.website.model.Page
		createType: de.dc.javafx.emfsupport.website.model.Author
	)
}

EMF.edit Support

Features

  • TableView with Cell Providers
  • DataBinding Models
  • Form Binding Models
  • Derived Bean to Binding Model
  • Code Generation via DSL
  • Code Generation via EMF Editor
  • Update Site for Eclipse Installation
  • Eclipse JavaFX Preview
  • Code Generation of TreeView
  • Code Generation of TreeTableView
  • Code Generation of ListView
  • Code Generation of Custom forms
  • Code Generation of LineChart
  • Code Generation of PieChart
  • Code Generation of AreaChart
  • FXML Code Generation
  • High complex Binding
  • DSL directly to CompilationUnit

Used Example

  • Define TableView dsl
ProjectFX ContactProject{
	packagePath 'de.dc.emf.javafx.xtext.demo.contact'
	
	controls{
		TableView {
			name: ContactTableView
			usedModel: Contact
			Column(	name:forename 	width:100 	attribute:"Contact.forename")
			Column(	name:familyName width:100 	attribute:"Contact.familyName")
			Column(	name:age 			attribute:"Contact.age")
			Column(	name:address 	width:50 	attribute:"Contact.address")
		}
	}
	
	models{
		class Contact{
			String forename
			String familyName
			int age
			boolean gender
			String address
		} 
	}
}

How to define a FilteredTableViewFX

Each Filter columns as activate the filter by useFilter: true

ProjectFX ContactProject{
	packagePath 'de.dc.emf.javafx.xtext.demo.contact'
	
	controls{
		FilteredTableView {
			name: ContactTableView
			usedModel: Contact
			Column(	name:forename 	width:100 	attribute:"Contact.forename" useFilter:true)
			Column(	name:familyName width:100 	attribute:"Contact.familyName" useFilter:true)
			Column(	name:age 			attribute:"Contact.age" useFilter:true)
			Column(	name:address 	width:50 	attribute:"Contact.address" useFilter:true)
		}
	}   
	
	models{
		class Contact{
			String forename
			String familyName
			int age
			boolean gender
			String address
		} 
	}
}

How to define a LineChart with data list

LineChart{
	name: BudgetChartOther
	legendSide:Top
	title:"Other Budget Chart"
	titleSide:Top
	xAxisLabel:"Budget"
	yAxisLabel:"Month"
	dataList{
		data('10','20') 
		data('20','23')  
		data('25','25') 
		data('30','30') 
	}
}

LineChart Example

LineChart with 3 series

LineChart{
	name: BudgetChartOther
	legendSide:Top
	title:"Other Budget Chart"
	titleSide:Top
	xAxisLabel:"Budget"
	yAxisLabel:"Month"
	series{  
		name:"exampleData2" 
		dataList{
			data('0','5') 
			data('10','20') 
			data('20','23')   
			data('25','25') 
			data('30','30') 
		}
	}
	series{
		name:"exampleData10"
		dataList{ 
			data('0','5') 
			data('25','5')   
			data('40','7') 
			data('80','9') 
		}
	}

	series{  
		name:"exampleData15"
		dataList{ 
			data('0','5') 
			data('5','10') 
			data('20','15')   
			data('40','25') 
			data('80','29') 
		}
	}
}

LineChart Example

Third Libaries

ChangeLog

Download

  • v0.9.0 : New API
  • v0.8.4 : TableViewFX with filter and property view
  • v0.8.3 : Working Example of JFX CU
  • v0.8.2 : Separated base code files
  • v0.8.1a : Removed Eclipse ui editor version restriction
  • v0.8.1
  • v0.8.0