package com.coder.client.gui; 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.GUIMessageSentListener; import com.coder.client.property.CheckBoxProperty; import com.coder.client.property.CoderClientProperty; import com.coder.client.property.ComboBoxProperty; import com.coder.server.message.CoderMessage; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; 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 EditorWindowController extends Controller implements Initializable { private HashSet GUIMessageSentListeners = new HashSet(); @FXML private TreeView fileTreeView; @FXML private TextArea editTextArea; @FXML private PropertySheet propertySheet; @FXML private Button compileButton; @FXML private Button runButton; public EditorWindowController(){ super(); } @Override public void initialize(URL fxmlFileLocation, ResourceBundle resources) { setupPropertySheet(); setupFileTreeView(); } @FXML protected void handleRun(ActionEvent event){ } @FXML protected void handleCompile(ActionEvent event){ } 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 addMessageSentListener(GUIMessageSentListener listener) { this.GUIMessageSentListeners.add(listener); } private void sendMessage(CoderMessage msg){ for(GUIMessageSentListener listener : GUIMessageSentListeners){ listener.sendMessage(msg); } } }