package com.coder.client.gui.newProject; import java.io.IOException; import java.net.URL; import java.util.HashSet; import java.util.ResourceBundle; import java.util.logging.Logger; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import zutil.log.LogUtil; import com.coder.client.gui.GuiWindow; import com.coder.server.message.ConfigData; public class NewProjectDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); private HashSet listeners; @FXML private Button createButton; @FXML private Button cancelButton; @FXML private TextField projectNameTextField; @FXML private ComboBox projectTypeComboBox; @FXML private Label errorMessageLabel; private ObservableList projectTypeList = null; public NewProjectDialog() throws IOException { super(NewProjectDialog.class.getResource("NewProjectDialog.fxml")); projectTypeList = FXCollections.observableArrayList(); projectTypeComboBox.setItems(projectTypeList); listeners = new HashSet(); } @Override protected void willShow() { for(NewProjectDialogListener listener : this.listeners){ listener.willShow(); } if(errorMessageLabel.getText() == null || errorMessageLabel.getText().isEmpty()){ projectNameTextField.setText(null); projectTypeComboBox.setValue(null); createButton.setDisable(true); } projectNameTextField.requestFocus(); } @Override public void initialize(URL fxmlFileLocation, ResourceBundle resources) { errorMessageLabel.setText(""); } @FXML protected void create(ActionEvent event){ if(projectNameTextField.getText() == null || projectNameTextField.getText().isEmpty()){ logger.warning("Missing project name"); return; } if(projectTypeComboBox.getValue() == null || projectTypeComboBox.getValue().isEmpty()){ logger.warning("Missing project type"); return; } for(NewProjectDialogListener listener : this.listeners){ listener.create(projectNameTextField.getText(), projectTypeComboBox.getValue()); } } @FXML protected void cancel(ActionEvent event){ for(NewProjectDialogListener listener : this.listeners){ listener.cancel(); } } @FXML protected void keyPressed(KeyEvent event){ if(projectNameTextField.getText() != null && !projectNameTextField.getText().isEmpty()){ if(projectTypeComboBox.getValue() != null && !projectTypeComboBox.getValue().isEmpty()){ createButton.setDisable(false); } } if(event.getCode().equals(KeyCode.ENTER)){ createButton.fire(); }else if(event.getCode().equals(KeyCode.ESCAPE)){ cancelButton.fire(); } } //TODO: react to combo box changes @Override protected String getTitle() { return "New Project"; } public void addNewProjectDialogListener(NewProjectDialogListener newProjectDialogListener) { this.listeners.add(newProjectDialogListener); } public void addProjectTypeToList(String typeName, ConfigData typeData) { logger.fine("Adding project type \"" + typeName + "\" to the project type list"); projectTypeList.add(typeName); } public void clearProjectTypeList() { projectTypeList.clear(); } @Override public void setErrorMessage(String errorMsg) { errorMessageLabel.setText(errorMsg); } }