package at.bestsolution.e4.ui.workbench.renderers.jfx;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Node;
import javafx.scene.control.SplitPane;
import javafx.scene.control.SplitPane.Divider;
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.MUILabel;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer;
@SuppressWarnings("restriction")
public class SashRenderer extends JFXPartRenderer {
@Override
public Object createWidget(MUIElement element) {
SplitPane pane = new SplitPane();
if( element.getElementId() != null ) {
pane.setId(element.getElementId());
}
return pane;
}
@Override
public void processContents(final MElementContainer<MUIElement> container) {
if( !(((MUIElement)container) instanceof MPartSashContainer) ) {
return;
}
super.processContents(container);
final SplitPane splitPane = (SplitPane) container.getWidget();
for( MUIElement e : container.getChildren() ) {
if( e.getWidget() != null ) {
splitPane.getItems().add((Node) e.getWidget());
}
}
int i = 0;
for( MUIElement e : container.getChildren() ) {
String data = e.getContainerData();
if( data != null ) {
try {
double d = Double.parseDouble(data);
splitPane.setDividerPosition(i++, d);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
for( Divider d : splitPane.getDividers() ) {
d.positionProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> arg0,
Number arg1, Number arg2) {
int i = 0;
for( double d : splitPane.getDividersPositions() ) {
container.getChildren().get(i++).setContainerData(Double.toString(d));
}
}
});
}
}
@Override
public void hookControllerLogic(MUIElement me) {
super.hookControllerLogic(me);
final SplitPane pane = (SplitPane) me.getWidget();
final MPartSashContainer container = (MPartSashContainer) me;
}
@Override
protected Object getParentWidget(MUIElement element) {
// TODO Auto-generated method stub
return null;
}
@Override
public void disposeWidget(MUIElement part) {
// TODO Auto-generated method stub
}
@Override
public void childRendered(MElementContainer<MUIElement> parentElement,
MUIElement element) {
// TODO Auto-generated method stub
}
@Override
protected Object getImage(MUILabel element) {
// TODO Auto-generated method stub
return null;
}
@Override
protected boolean requiresFocus(MPart element) {
// TODO Auto-generated method stub
return false;
}
}