package com.coder.client.gui.selectProject; import java.io.IOException; import java.net.URL; import java.util.HashSet; import java.util.ResourceBundle; import java.util.logging.Logger; import zutil.log.LogUtil; 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.ListCell; import javafx.scene.control.ListView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.util.Callback; import com.coder.client.gui.GuiWindow; import com.coder.server.message.ProjectListData; public class SelectProjectDialog extends GuiWindow { public static final Logger logger = LogUtil.getLogger(); private HashSet listeners; private ObservableList projectList; @FXML private ListView projectListView; @FXML private Button newProjectButton; @FXML private Button cancelButton; @FXML private Button openProjectButton; public SelectProjectDialog() throws IOException { super(SelectProjectDialog.class.getResource("SelectProjectDialog.fxml")); listeners = new HashSet(); } @Override protected void willShow() { for(SelectProjectDialogListener listener : this.listeners){ listener.willShow(); } } @Override public void initialize(URL fxmlFileLocation, ResourceBundle resources) { projectList = FXCollections.observableArrayList(); projectListView.setItems(projectList); projectListView.setCellFactory(new Callback, ListCell>(){ @Override public ListCell call(ListView arg0) { System.out.println("cell factory"); ListCell cell = new ListCell(){ @Override protected void updateItem(ProjectListItem item, boolean empty){ System.out.println("update item: " + item); super.updateItem(item, empty); if(empty){ setText(""); setGraphic(null); } if(item != null){ setText(item.toString()); //setGraphic(null); } } }; return cell; } }); } @FXML protected void keyPressed(KeyEvent event) { if(event.getCode() == KeyCode.ENTER){ logger.fine("User pressed the ENTER key"); openProjectButton.fire(); }else if(event.getCode() == KeyCode.ESCAPE){ logger.fine("User pressed the ESCAPE key"); cancelButton.fire(); }else if(event.getCode() == KeyCode.N && event.isControlDown()){ //CTRL+N logger.fine("User pressed CTRL+N"); newProjectButton.fire(); } } @FXML protected void newProject(ActionEvent event){ for(SelectProjectDialogListener listener : this.listeners){ listener.newProject(); } } @FXML protected void cancel(ActionEvent event){ for(SelectProjectDialogListener listener : this.listeners){ listener.cancel(); } } @FXML protected void refresh(ActionEvent event){ for(SelectProjectDialogListener listener : this.listeners){ listener.refresh(); } } @FXML protected void openProject(ActionEvent event){ for(SelectProjectDialogListener listener : this.listeners){ //TODO: get selected project in the list view String selectedProjectName = "project name"; listener.openProject(selectedProjectName); } } public void addSelectProjectDialogListener(SelectProjectDialogListener listener){ this.listeners.add(listener); } public void clearProjectList(){ logger.fine("Clearing project list"); projectList.clear(); } public void addProjectToList(String projectName, ProjectListData projectData) { logger.fine("Adding project \"" + projectName + "\" of type " + projectData.type + "to project list"); ProjectListItem item = new ProjectListItem(projectName, projectData.type, projectData.description); this.projectList.add(item); } @Override protected String getTitle() { return "Select Project"; } }