package com.scrivenvar;
import static com.scrivenvar.Messages.get;
import com.scrivenvar.definition.DefinitionPane;
import com.scrivenvar.yaml.YamlParser;
import com.scrivenvar.yaml.YamlTreeAdapter;
import java.io.IOException;
import java.io.InputStream;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import org.fxmisc.flowless.VirtualizedScrollPane;
import org.fxmisc.richtext.StyleClassedTextArea;
public abstract class TestHarness extends Application {
private static Application app;
private Scene scene;
@Override
public void start( final Stage stage ) throws Exception {
initApplication();
initScene();
initStage( stage );
}
protected TreeView<String> createTreeView() throws IOException {
return new YamlTreeAdapter( new YamlParser() ).adapt(
asStream( "/com/scrivenvar/variables.yaml" ),
get( "Pane.defintion.node.root.title" )
);
}
protected DefinitionPane createDefinitionPane( TreeView<String> root ) {
return new DefinitionPane( root );
}
private void initApplication() {
app = this;
}
private void initScene() {
final StyleClassedTextArea editor = new StyleClassedTextArea( false );
final VirtualizedScrollPane<StyleClassedTextArea> scrollPane = new VirtualizedScrollPane<>( editor );
final BorderPane borderPane = new BorderPane();
borderPane.setPrefSize( 1024, 800 );
borderPane.setCenter( scrollPane );
setScene( new Scene( borderPane ) );
}
private void initStage( Stage stage ) {
stage.setScene( getScene() );
}
private Scene getScene() {
return this.scene;
}
private void setScene( Scene scene ) {
this.scene = scene;
}
private static Application getApplication() {
return app;
}
public static void showDocument( String uri ) {
getApplication().getHostServices().showDocument( uri );
}
protected InputStream asStream( String resource ) {
return getClass().getResourceAsStream( resource );
}
}