2015-10-20 14:26:58 +00:00
|
|
|
package com.coder.client.gui.editor;
|
2015-10-20 06:56:14 +00:00
|
|
|
|
2015-10-20 14:26:58 +00:00
|
|
|
import java.io.IOException;
|
2015-10-20 06:56:14 +00:00
|
|
|
import java.net.URL;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.ResourceBundle;
|
|
|
|
|
|
|
|
|
|
import org.controlsfx.control.PropertySheet;
|
|
|
|
|
import org.controlsfx.property.editor.PropertyEditor;
|
|
|
|
|
|
2015-10-20 14:26:58 +00:00
|
|
|
import com.coder.client.gui.GuiWindow;
|
2015-10-20 06:56:14 +00:00
|
|
|
import com.coder.client.property.CheckBoxProperty;
|
|
|
|
|
import com.coder.client.property.CoderClientProperty;
|
|
|
|
|
import com.coder.client.property.ComboBoxProperty;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javafx.beans.value.ChangeListener;
|
|
|
|
|
import javafx.beans.value.ObservableValue;
|
|
|
|
|
import javafx.event.ActionEvent;
|
|
|
|
|
import javafx.fxml.FXML;
|
|
|
|
|
import javafx.scene.control.Button;
|
|
|
|
|
import javafx.scene.control.TextArea;
|
|
|
|
|
import javafx.scene.control.TreeItem;
|
|
|
|
|
import javafx.scene.control.TreeView;
|
|
|
|
|
import javafx.util.Callback;
|
|
|
|
|
|
2015-10-20 14:26:58 +00:00
|
|
|
public class EditorWindow extends GuiWindow {
|
2015-10-20 06:56:14 +00:00
|
|
|
|
2015-10-21 14:23:00 +00:00
|
|
|
private HashSet<EditorWindowListener> listsners;
|
2015-10-20 06:56:14 +00:00
|
|
|
|
|
|
|
|
@FXML private TreeView<String> fileTreeView;
|
|
|
|
|
@FXML private TextArea editTextArea;
|
|
|
|
|
@FXML private PropertySheet propertySheet;
|
|
|
|
|
@FXML private Button compileButton;
|
|
|
|
|
@FXML private Button runButton;
|
|
|
|
|
|
2015-10-20 14:26:58 +00:00
|
|
|
public EditorWindow() throws IOException{
|
|
|
|
|
super(EditorWindow.class.getResource("EditorWindow.fxml"));
|
2015-10-21 14:23:00 +00:00
|
|
|
listsners = new HashSet<EditorWindowListener>();
|
2015-10-20 06:56:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
|
|
|
|
|
setupPropertySheet();
|
|
|
|
|
setupFileTreeView();
|
2015-10-20 14:26:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void willShow(){
|
2015-10-21 14:23:00 +00:00
|
|
|
for(EditorWindowListener listener : listsners){
|
|
|
|
|
listener.willShow();
|
|
|
|
|
}
|
2015-10-20 06:56:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
protected void handleRun(ActionEvent event){
|
2015-10-21 14:23:00 +00:00
|
|
|
for(EditorWindowListener listener : listsners){
|
|
|
|
|
listener.run();
|
|
|
|
|
}
|
2015-10-20 06:56:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
protected void handleCompile(ActionEvent event){
|
2015-10-21 14:23:00 +00:00
|
|
|
for(EditorWindowListener listener : listsners){
|
|
|
|
|
listener.compile();
|
|
|
|
|
}
|
2015-10-20 06:56:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void setupFileTreeView(){
|
|
|
|
|
fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
|
|
|
|
|
@Override
|
|
|
|
|
public void changed(ObservableValue<? extends TreeItem<String>> item, TreeItem<String> oldValue, TreeItem<String> newValue) {
|
|
|
|
|
if(newValue != fileTreeView.getRoot()){
|
|
|
|
|
System.out.println("INFO: item " + newValue + " selected");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
TreeItem<String> root = new TreeItem<String>("root");
|
|
|
|
|
root.setExpanded(true);
|
|
|
|
|
fileTreeView.setRoot(root);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void setupPropertySheet(){
|
|
|
|
|
//handle custom ProperySheet.Item's editor
|
|
|
|
|
propertySheet.setPropertyEditorFactory(new Callback<PropertySheet.Item, PropertyEditor<?>>(){
|
|
|
|
|
@Override
|
|
|
|
|
public PropertyEditor<?> call(PropertySheet.Item param) {
|
|
|
|
|
//only support internal types
|
|
|
|
|
if(param instanceof CoderClientProperty){
|
|
|
|
|
return ((CoderClientProperty<?>)param).getEditor();
|
|
|
|
|
}
|
|
|
|
|
//not a internal property type
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
propertySheet.getItems().clear();
|
|
|
|
|
|
|
|
|
|
ArrayList<String> boards = new ArrayList<String>();
|
|
|
|
|
boards.add("UNO");
|
|
|
|
|
boards.add("Mega");
|
|
|
|
|
ComboBoxProperty p1 = new ComboBoxProperty("Port", null, boards);
|
|
|
|
|
propertySheet.getItems().add(p1);
|
|
|
|
|
|
|
|
|
|
CheckBoxProperty p2 = new CheckBoxProperty("Melt?", false);
|
|
|
|
|
propertySheet.getItems().add(p2);
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-21 14:23:00 +00:00
|
|
|
public void addEditorWindowListener(EditorWindowListener listener) {
|
2015-10-20 14:26:58 +00:00
|
|
|
this.listsners.add(listener);
|
2015-10-20 06:56:14 +00:00
|
|
|
}
|
|
|
|
|
|
2015-10-21 16:13:45 +00:00
|
|
|
@Override
|
|
|
|
|
protected String getTitle() {
|
|
|
|
|
return "Coder Client";
|
|
|
|
|
}
|
|
|
|
|
|
2015-10-20 06:56:14 +00:00
|
|
|
}
|