package com.coder.client.gui.editor; import java.io.IOException; 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; import com.coder.client.gui.GuiWindow; 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; public class EditorWindow extends GuiWindow { private HashSet listsners; @FXML private TreeView fileTreeView; @FXML private TextArea editTextArea; @FXML private PropertySheet propertySheet; @FXML private Button compileButton; @FXML private Button runButton; @FXML private Button exitButton; @FXML private Button changeProjectButton; public EditorWindow() throws IOException{ super(EditorWindow.class.getResource("EditorWindow.fxml")); listsners = new HashSet(); } @Override public void initialize(URL fxmlFileLocation, ResourceBundle resources) { setupPropertySheet(); setupFileTreeView(); } @Override protected void willShow(){ for(EditorWindowListener listener : listsners){ listener.willShow(); } } @FXML protected void handleRun(ActionEvent event){ for(EditorWindowListener listener : listsners){ listener.run(); } } @FXML protected void handleCompile(ActionEvent event){ for(EditorWindowListener listener : listsners){ listener.compile(); } } @FXML protected void handleChangeProject(ActionEvent event){ for(EditorWindowListener listener : listsners){ listener.changeProject(); } } @FXML protected void handleExit(ActionEvent event){ for(EditorWindowListener listener : listsners){ listener.exit(); } } private void setupFileTreeView(){ fileTreeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener>() { @Override public void changed(ObservableValue> item, TreeItem oldValue, TreeItem newValue) { if(newValue != fileTreeView.getRoot()){ System.out.println("INFO: item " + newValue + " selected"); } } }); TreeItem root = new TreeItem("root"); root.setExpanded(true); fileTreeView.setRoot(root); } private void setupPropertySheet(){ //handle custom ProperySheet.Item's editor propertySheet.setPropertyEditorFactory(new Callback>(){ @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 boards = new ArrayList(); 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); } public void addEditorWindowListener(EditorWindowListener listener) { this.listsners.add(listener); } @Override protected String getTitle() { return "Coder Client"; } @Override public void setErrorMessage(String msg) { // TODO Auto-generated method stub } public void setProjectName(String name) { fileTreeView.getRoot().setValue(name); } }