package com.coder.client.gui.editor; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.ResourceBundle; import java.util.logging.Logger; import org.controlsfx.control.PropertySheet; import org.controlsfx.property.editor.PropertyEditor; import zutil.log.LogUtil; import com.coder.client.CoderClient; 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 com.coder.client.session.ProjectRspMsgListener; import com.coder.client.session.ProjectTypeRspMsgListener; import com.coder.client.session.SessionListener; import com.coder.server.message.ProjectRspMsg; import com.coder.server.message.ProjectTypeRspMsg; 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 { public static final Logger logger = LogUtil.getLogger(); private CoderClient client; @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(CoderClient client) throws IOException{ super(EditorWindow.class.getResource("EditorWindow.fxml")); this.client = client; client.getSessionHandler().addMessageListener(new ProjectRspMsgListener() { @Override public void messageReceived(final ProjectRspMsg msg) { logger.fine("a ProjectRspMsg received"); if(msg.error != null){ return; } setProjectName(msg.name); Properties projectConfig = msg.config; String projectDescription = msg.description; List fileList = msg.fileList; String projectType = msg.type; //TODO: handle msg } }); client.getSessionHandler().addMessageListener(new ProjectTypeRspMsgListener() { @Override public void messageReceived(ProjectTypeRspMsg msg) { //TODO: update the project properties } }); } @Override public void initialize(URL fxmlFileLocation, ResourceBundle resources) { setupPropertySheet(); setupFileTreeView(); } @Override protected void willShow(){ } @FXML protected void run(ActionEvent event){ //TODO } @FXML protected void compile(ActionEvent event){ //TODO } @FXML protected void changeProject(ActionEvent event){ client.getProjectHandler().setProject(null); client.getProjectHandler().selectProject(); } @FXML protected void exit(ActionEvent event){ client.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); } @Override protected String getTitle() { return "Coder Client"; } private void setErrorMessage(String msg) { // TODO Auto-generated method stub } public void setProjectName(String name) { fileTreeView.getRoot().setValue(name); } @Override protected String getDescriptiveName() { return "Editor Window"; } }