Skip to content

Commit

Permalink
Merge pull request #121 from yprie/sprint1/interview-management
Browse files Browse the repository at this point in the history
Sprint1/interview management
  • Loading branch information
JeridiOmar authored Jan 29, 2023
2 parents 4783565 + 2bc6145 commit aecf912
Show file tree
Hide file tree
Showing 10 changed files with 294 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,67 @@

import components.interviewSelector.appCommands.InterviewSelectorCommandFactory;
import components.interviewSelector.controllers.InterviewSelectorCellController;
import components.modelisationSpace.category.appCommands.RemoveConcreteCategoryCommand;
import javafx.application.Platform;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.ObservableList;
import javafx.css.PseudoClass;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ListCell;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
import javafx.scene.paint.Color;
import models.ConcreteCategory;
import models.Descripteme;
import models.Interview;
import utils.dragAndDrop.DragStore;

public class InterviewSelectorCell extends ListCell<Interview> {

ObjectProperty<Interview> selectedItem = new SimpleObjectProperty<>();
private InterviewSelectorCellController controller;
private InterviewSelectorCommandFactory commandFactory;
private static int selectedInterviewIndex;

public InterviewSelectorCell(InterviewSelectorCommandFactory commandFactory ) {
public InterviewSelectorCell(InterviewSelectorCommandFactory commandFactory) {
this.commandFactory = commandFactory;
addEventHandler(MouseEvent.MOUSE_ENTERED, mouseEvent -> { if(controller != null)controller.setOnHover(true); });
addEventHandler(MouseEvent.MOUSE_EXITED, mouseEvent -> {if(controller != null)controller.setOnHover(false); });
addEventHandler(MouseEvent.MOUSE_ENTERED, mouseEvent -> {
if (controller != null) controller.setOnHover(true);
});
addEventHandler(MouseEvent.MOUSE_EXITED, mouseEvent -> {
if (controller != null) controller.setOnHover(false);
});


}

@Override
public void updateItem(Interview item, boolean empty) {
super.updateItem(item, empty);

if(empty)
if (empty)
removeGraphics();
else {
//Cell view
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/views/InterviewSelector/InterviewSelectorCell.fxml"));
//Cell Controller
InterviewSelectorCellController newController = new InterviewSelectorCellController(item, commandFactory);
InterviewSelectorCellController newController = new InterviewSelectorCellController(item, this ,commandFactory);
loader.setController(newController);
controller = newController;

//Mouse click event
setOnMouseClicked(event -> commandFactory.selectCurrentInterview(item, true).execute());
setOnMouseClicked(event -> {
commandFactory.selectCurrentInterview(item, true).execute();
selectedInterviewIndex=this.getListView().getItems().indexOf(item);
});
this.getListView().getStyleClass().add("list-cell");


newController.updateColor();
this.addDragAndDrop(newController);

try {
this.setGraphic(loader.load());
Expand All @@ -44,6 +72,62 @@ public void updateItem(Interview item, boolean empty) {
}
}
}
private void addDragAndDrop(InterviewSelectorCellController newController){
this.setOnDragDetected(mouseEvent -> {
selectedItem.set(this.getListView().getSelectionModel().getSelectedItem());
Dragboard db = this.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.put(ConcreteCategory.format, 0);
DragStore.setDraggable(this.getItem());
db.setContent(content);
mouseEvent.consume();
});

this.setOnDragOver(event -> {
this.setStyle("-fx-opacity: 1;");
if (event.getGestureSource() != this &&
DragStore.getDraggable().getDataFormat() == Interview.format) {
this.setStyle("-fx-opacity: 0.5;");
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
event.consume();
newController.updateColor();
});
this.setOnDragDropped(event -> {
Dragboard db = event.getDragboard();
boolean success = false;
if (DragStore.getDraggable().getDataFormat() == Interview.format) {
ObservableList<Interview> items = this.getListView().getItems();
int draggedIdx = items.indexOf(DragStore.getDraggable());
int thisIdx = items.indexOf(getItem());
items.set(draggedIdx, getItem());
items.set(thisIdx, DragStore.getDraggable());
this.getListView().setItems(items);
if(selectedInterviewIndex==draggedIdx){
this.getListView().getSelectionModel().select(thisIdx);
selectedInterviewIndex=thisIdx;
}else{
this.getListView().getSelectionModel().select(selectedInterviewIndex);
}
success = true;
newController.updateColor();
}

event.setDropCompleted(success);
event.consume();
});


this.setOnDragExited(dragEvent -> {
this.setStyle("-fx-opacity: 1;");
newController.updateColor();
});

this.setOnDragEntered(dragEvent -> {
this.setStyle("-fx-opacity: 1;");
// newController.updateColor();
});
}

private void removeGraphics() {
this.setGraphic(null);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package components.interviewSelector.appCommands;

import application.configuration.Configuration;
import application.history.HistoryManager;
import components.interviewSelector.controllers.InterviewSelectorCellController;
import components.interviewSelector.controllers.NewInterviewController;
import components.interviewSelector.modelCommands.AddInterviewCommand;
import components.interviewSelector.modelCommands.ChangeColorInterview;
import components.modelisationSpace.moment.modelCommands.ChangeColorMoment;
import models.Interview;
import models.Project;
import utils.DialogState;
import utils.command.Executable;
import utils.popups.WarningPopup;

public class ChangeColorInterviewCommand implements Executable {
private Interview interview;
private String newColor;
private boolean userCommand;
private InterviewSelectorCellController interviewSelectorCellController;
public ChangeColorInterviewCommand(Interview interview, String newColor, InterviewSelectorCellController interviewSelectorCellController) {
this.interview = interview;
this.newColor = newColor;
this.userCommand = true;
this.interviewSelectorCellController=interviewSelectorCellController;
}
@Override
public Void execute() {
String oldColor = interview.getColor();
HistoryManager.addCommand(new ChangeColorInterview(interview, newColor, oldColor,interviewSelectorCellController), userCommand);
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package components.interviewSelector.appCommands;

import components.interviewSelector.controllers.InterviewSelectorCellController;
import components.interviewSelector.modelCommands.ChangeColorInterview;
import components.modelisationSpace.moment.appCommands.ChangeColorMomentCommand;
import models.Interview;
import models.Moment;
import models.Project;

public class InterviewSelectorCommandFactory {
Expand All @@ -12,5 +16,7 @@ public class InterviewSelectorCommandFactory {
public InterviewSelectorCommand<Void> selectCurrentInterview(Interview interview, boolean addToCommandHistory) { return new SelectCurrentInterviewCommand(project, interview, addToCommandHistory); }
public InterviewSelectorCommand<Void> deleteInterview(Interview interview) { return new DeleteInterviewCommand(project, interview); }
public InterviewSelectorCommand<Void> modifyInterview(Interview interview) { return new ModifyInterviewCommand(project, interview); }

public ChangeColorInterviewCommand colorCommand(Interview interview, String color, InterviewSelectorCellController interviewSelectorCellController) {
return new ChangeColorInterviewCommand(interview, color, interviewSelectorCellController);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package components.interviewSelector.controllers;

import application.configuration.Configuration;
import components.interviewSelector.InterviewSelectorCell;
import components.interviewSelector.appCommands.InterviewSelectorCommandFactory;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
Expand All @@ -18,14 +19,15 @@ public class InterviewSelectorCellController implements Initializable {
@FXML Label name;
@FXML ImageView pictureView;
@FXML MenuButton optionsMenu;

InterviewSelectorCell interviewSelectorCell;
protected Interview interview;
private boolean shouldRemoveMenuButtonVisibility;
private InterviewSelectorCommandFactory commandFactory;

public InterviewSelectorCellController(Interview interview, InterviewSelectorCommandFactory commandFactory) {
public InterviewSelectorCellController(Interview interview, InterviewSelectorCell interviewSelectorCell, InterviewSelectorCommandFactory commandFactory) {
this.interview = interview;
this.commandFactory = commandFactory;
this.interviewSelectorCell=interviewSelectorCell;
}

@Override
Expand All @@ -37,7 +39,53 @@ public void initialize(URL url, ResourceBundle resourceBundle) {

MenuItem deleteButton = new MenuItem(Configuration.langBundle.getString("delete"));
MenuItem editButton = new MenuItem(Configuration.langBundle.getString("edit"));
updateColor();
//ADDING COLOR
Menu changeColor = new Menu(Configuration.langBundle.getString("change_color"));

MenuItem white = new MenuItem(" ");
white.setStyle("-fx-background-color: #ffffff;\n");
white.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "ffffff",this).execute());
changeColor.getItems().add(white);

MenuItem brown = new MenuItem(" ");
brown.setStyle("-fx-background-color: #b97a57;\n");
brown.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "b97a57",this).execute());
changeColor.getItems().add(brown);

MenuItem pink = new MenuItem(" ");
pink.setStyle("-fx-background-color: #ffaec9;\n");
pink.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "ffaec9",this).execute());

changeColor.getItems().add(pink);

MenuItem yellow = new MenuItem(" ");
yellow.setStyle("-fx-background-color: #ffc90e;\n");
yellow.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "ffc90e",this).execute());
changeColor.getItems().add(yellow);

MenuItem green = new MenuItem(" ");
green.setStyle("-fx-background-color: #b5e61d;\n");
green.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "b5e61d",this).execute());
changeColor.getItems().add(green);

MenuItem blue = new MenuItem(" ");
blue.setStyle("-fx-background-color: #7092be;\n");
blue.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "7092be",this).execute());
changeColor.getItems().add(blue);

MenuItem purple = new MenuItem(" ");
purple.setStyle("-fx-background-color: #8671cd;\n");
purple.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "8671cd",this).execute());
changeColor.getItems().add(purple);

MenuItem red = new MenuItem(" ");
red.setStyle("-fx-background-color: #f15252;\n");
red.setOnAction(actionEvent -> commandFactory.colorCommand(interview, "f15252",this).execute());

changeColor.getItems().add(red);

//END ADDING
deleteButton.setOnAction(actionEvent -> {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle(Configuration.langBundle.getString("confirmation_dialog"));
Expand All @@ -53,13 +101,18 @@ public void initialize(URL url, ResourceBundle resourceBundle) {

optionsMenu.getItems().add(editButton);
optionsMenu.getItems().add(deleteButton);

optionsMenu.getItems().add(changeColor);//change
optionsMenu.setVisible(false);
optionsMenu.onHiddenProperty().addListener((observableValue, eventEventHandler, t1) -> {
if(shouldRemoveMenuButtonVisibility) { shouldRemoveMenuButtonVisibility = false; optionsMenu.setVisible(false);}
});

}
public void updateColor() {
this.interviewSelectorCell.setStyle("-fx-background-color: #" + interview.getColor() + ";\n"+"-fx-text-fill: black;\n"+"-fx-text-inner-color:black;\n");
// this.interviewSelectorCell.setStyle("-fx-text-fill: black;\n");

}
public void setOnHover(boolean YoN) {
if(optionsMenu.isShowing())
shouldRemoveMenuButtonVisibility = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ListView;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import models.ConcreteCategory;
import models.Interview;
import utils.dragAndDrop.DragStore;

import java.io.IOException;
import java.net.URL;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package components.interviewSelector.modelCommands;

import application.history.ModelUserActionCommand;
import components.interviewSelector.controllers.InterviewSelectorCellController;
import models.Interview;
import models.Project;


public class ChangeColorInterview extends ModelUserActionCommand {

private Interview interview;
private String oldColor;
private String newColor;
private InterviewSelectorCellController interviewSelectorCellController;
public ChangeColorInterview(Interview i, String newColor, String oldColor, InterviewSelectorCellController interviewSelectorCellController) {
this.interviewSelectorCellController=interviewSelectorCellController;
this.interview = i;
this.newColor = newColor;
this.oldColor = oldColor;
}

@Override
public Void execute() {
interview.setColor(newColor);
interviewSelectorCellController.updateColor();
return null;
}

@Override
public Void undo() {
interview.setColor(oldColor);
return null;
}
}
Loading

0 comments on commit aecf912

Please sign in to comment.