From ed79b88c722f7eb7b446033e4ebdb103d5f856c3 Mon Sep 17 00:00:00 2001 From: Valentin Date: Wed, 24 May 2023 13:56:50 +0300 Subject: [PATCH] fix problems on column suppresion, undo/redo, and saves --- .../appCommands/CloseApplicationCommand.java | 11 +++- .../components/comparison/ComparisonView.java | 9 ++- .../appCommands/DelColumnCommand.java | 37 +++++------ .../ComparisonTableController.java | 63 ++++++++++--------- src/main/java/utils/GlobalVariables.java | 20 +++++- .../views/Comparison/ComparisonView.fxml | 17 ++--- 6 files changed, 98 insertions(+), 59 deletions(-) diff --git a/src/main/java/application/appCommands/CloseApplicationCommand.java b/src/main/java/application/appCommands/CloseApplicationCommand.java index 2bd9dd85..90e02b83 100644 --- a/src/main/java/application/appCommands/CloseApplicationCommand.java +++ b/src/main/java/application/appCommands/CloseApplicationCommand.java @@ -8,6 +8,7 @@ import javafx.scene.control.ButtonType; import javafx.stage.WindowEvent; import javafx.scene.control.ButtonBar.ButtonData; +import utils.GlobalVariables; import java.util.Optional; import java.util.UUID; @@ -37,9 +38,14 @@ public Void execute() { String currentTitle = upmtApp.getPrimaryStage().getTitle(); UUID currentCommandId = HistoryManager.getCurrentCommandId(); UUID lastSavedCommandId = upmtApp.getLastSavedCommandId(); - if(currentCommandId != null ){ + if (GlobalVariables.getGlobalVariables().getComparisonState()) { + GlobalVariables.getGlobalVariables().setId(currentCommandId); + } + if(currentCommandId != null){ if(lastSavedCommandId == null){ - workUnsaved = true; + if (!(currentCommandId.equals(GlobalVariables.getGlobalVariables().getId()))) { + workUnsaved = true; + } }else { if (HistoryManager.getCurrentCommandId().equals(lastSavedCommandId)) { System.out.println("Projet sauvegardé"); @@ -62,6 +68,7 @@ public Void execute() { alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo, buttonTypeCancel); Optional result = alert.showAndWait(); + if (result.get() == buttonTypeOne){ // ... user chose "Save And Quit" appCommandFactory.saveProject().execute(); diff --git a/src/main/java/components/comparison/ComparisonView.java b/src/main/java/components/comparison/ComparisonView.java index 75f8e2b6..13b69fba 100644 --- a/src/main/java/components/comparison/ComparisonView.java +++ b/src/main/java/components/comparison/ComparisonView.java @@ -1,6 +1,9 @@ package components.comparison; +import application.appCommands.ApplicationCommand; +import application.appCommands.ApplicationCommandFactory; import application.configuration.Configuration; +import application.history.HistoryManager; import components.comparison.controllers.ComparisonTableController; import javafx.application.Application; import javafx.collections.ObservableList; @@ -8,13 +11,16 @@ import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; +import utils.GlobalVariables; import java.io.IOException; import java.util.Objects; +import java.util.UUID; public class ComparisonView extends Application { private final ObservableList selectionInterviews; + private final UUID startingId = HistoryManager.getCurrentCommandId(); //save the current command id public ComparisonView(ObservableList selectionInterviews){ this.selectionInterviews = selectionInterviews; @@ -29,7 +35,8 @@ public void start(Stage stage) throws IOException { Scene scene = new Scene(root); root.getStylesheets().add(Objects.requireNonNull(getClass().getResource("/css/application.css")).toExternalForm()); stage.setScene(scene); - + GlobalVariables.getGlobalVariables().setComparisonState(true); + GlobalVariables.getGlobalVariables().setId(startingId); stage.show(); } } \ No newline at end of file diff --git a/src/main/java/components/comparison/appCommands/DelColumnCommand.java b/src/main/java/components/comparison/appCommands/DelColumnCommand.java index cce2c50f..2f61c56f 100644 --- a/src/main/java/components/comparison/appCommands/DelColumnCommand.java +++ b/src/main/java/components/comparison/appCommands/DelColumnCommand.java @@ -23,25 +23,27 @@ public DelColumnCommand(int columnIndex, TableView> tv, Lis } @Override public Void execute() { - tv.getColumns().remove(idx); - List easy_balance = new ArrayList<>(); - //check if the last column of other tables is empty - for (TableView tableView : tables){ - if (tableView != tv){ - if (tableView.getColumns().get(tableView.getColumns().size() - 1).getText().equals(" ")){ - easy_balance.add(false); - } else { - easy_balance.add(true); + if (tv.getColumns().get(idx).getText().equals(" ")) { + tv.getColumns().remove(idx); + List easy_balance = new ArrayList<>(); + //check if the last column of other tables is empty + //if so, + for (TableView tableView : tables) { + if (tableView != tv) { + if (tableView.getColumns().get(tableView.getColumns().size() - 1).getText().equals(" ")) { + easy_balance.add(false); + } else { + easy_balance.add(true); + } } } - } - if (easy_balance.contains(true)){ - tv.getColumns().add(new TableColumn<>(" ")); - } - else { - for (TableView tableView : tables){ - if (tableView != tv) { - tableView.getColumns().remove(tableView.getColumns().size() - 1); + if (easy_balance.contains(true)) { + tv.getColumns().add(new TableColumn<>(" ")); + } else { + for (TableView tableView : tables) { + if (tableView != tv) { + tableView.getColumns().remove(tableView.getColumns().size() - 1); + } } } } @@ -52,7 +54,6 @@ public Void execute() { public Object undo() { // Restaurer l'état précédent de la table en réinsérant les colonnes précédentes tv.getColumns().setAll(previousState); - return null; } } diff --git a/src/main/java/components/comparison/controllers/ComparisonTableController.java b/src/main/java/components/comparison/controllers/ComparisonTableController.java index 61187cac..4a643805 100644 --- a/src/main/java/components/comparison/controllers/ComparisonTableController.java +++ b/src/main/java/components/comparison/controllers/ComparisonTableController.java @@ -28,7 +28,7 @@ import persistency.newSaveSystem.SMoment; //import javax.swing.event.ChangeListener; -import java.beans.EventHandler; +import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; import java.net.URL; @@ -40,17 +40,14 @@ public class ComparisonTableController implements Initializable { private @FXML VBox table; + public @FXML MenuItem undo; + public @FXML MenuItem redo; private ComparisonTable comparisonTable; - private ObservableList selectionInterviews; + private final ObservableList selectionInterviews; private ArrayList columnsWidth = new ArrayList<>(); private Stage comparisonStage; - public ComparisonTableController(ObservableList selectionInterviews) { - this.table = new VBox(); - this.selectionInterviews = selectionInterviews; - initialize(null, null); - } public void undo() { HistoryManager.goBack(); @@ -60,23 +57,39 @@ public void redo() { HistoryManager.goForward(); } + + public ComparisonTableController(ObservableList selectionInterviews) { + this.table = new VBox(); + this.selectionInterviews = selectionInterviews; + initialize(null, null); + } + + @Override public void initialize(URL url, ResourceBundle resourceBundle) { final KeyCodeCombination keyCombUNDO = new KeyCodeCombination(KeyCode.Z, KeyCombination.SHORTCUT_DOWN); final KeyCodeCombination keyCombREDO = new KeyCodeCombination(KeyCode.Y, KeyCombination.SHORTCUT_DOWN); - //set the undo method to the undo keyCombination - table.setOnKeyPressed(event -> { - if (keyCombUNDO.match(event)) { - undo(); - } - if (keyCombREDO.match(event)) { - redo(); - } - }); + fillTable(this.selectionInterviews); Platform.runLater(() -> { + //bindUndoRedoButtons(false); bindScroll(); setColumnsSizesToBiggest(); + //bindUndoRedoButtons(true); + + //set the undo method to the undo keyCombination + this.undo.setAccelerator(keyCombUNDO); + redo.setAccelerator(keyCombREDO); + }); + + this.table.setOnKeyPressed(event -> { + if (keyCombUNDO.match(event)) { + undo(); + event.consume(); // Prevent the event from being processed further + } else if (keyCombREDO.match(event)) { + redo(); + event.consume(); // Prevent the event from being processed further + } }); } @@ -229,18 +242,13 @@ public void setContextMenu(TableView> tv, int columnIndex, contextMenu.show(tv, event.getScreenX(), event.getScreenY()); } - public void setListener(TableView> tv) {// Create the pop-up menu + public void setListener(TableView> tv) {// Create the pop-up menu on right click // Set the pop-up menu to show on a right-click event on the table header for (TableColumn column : tv.getColumns()) { - column.setGraphic(new Label(column.getText())); - column.setContextMenu(new ContextMenu()); - column.getGraphic().setOnContextMenuRequested(event -> { - int columnIndex = tv.getColumns().indexOf(column); - setContextMenu(tv, columnIndex, event); - }); + setColListener((TableColumn, StringProperty>) column); } } - public void setListener(TableColumn, StringProperty> tc){ + public void setColListener(TableColumn, StringProperty> tc){ tc.setGraphic(new Label(tc.getText())); tc.setContextMenu(new ContextMenu()); tc.getGraphic().setOnContextMenuRequested(event -> { @@ -253,10 +261,10 @@ public void addColumn(int idx, TableView> tv){ // Handle "Add Column After" action here AddColumnCommand addColumnCommand = new AddColumnCommand(idx, tv, getTables()); HistoryManager.addCommand(addColumnCommand, true); - setListener((TableColumn, StringProperty>) tv.getColumns().get(idx)); + setColListener((TableColumn, StringProperty>) tv.getColumns().get(idx)); for (TableView> tableView : getTables()){ if (tableView != tv){ - setListener((TableColumn, StringProperty>) tv.getColumns().get(tv.getColumns().size() - 1)); + setColListener((TableColumn, StringProperty>) tv.getColumns().get(tv.getColumns().size() - 1)); } } setColumnsSizesToBiggest(); @@ -278,7 +286,7 @@ public void completeTable(TableView> tv, int length){ for (int i = 0; i < length - actualLength; i++){ TableColumn, StringProperty> tc = new TableColumn<>(" "); tv.getColumns().add(tc); - setListener(tc); + setColListener(tc); } } } @@ -425,5 +433,4 @@ public void exportToExcel(){ ExcelExporter.exportToExcel(containerData, saveFile.getAbsolutePath()); } } - } diff --git a/src/main/java/utils/GlobalVariables.java b/src/main/java/utils/GlobalVariables.java index a824ea3e..ef81a5bd 100644 --- a/src/main/java/utils/GlobalVariables.java +++ b/src/main/java/utils/GlobalVariables.java @@ -1,13 +1,13 @@ package utils; +import application.UPMTApp; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableObjectValue; -import javafx.scene.Node; import models.*; -import java.util.HashMap; import java.util.HashSet; +import java.util.UUID; import java.util.function.BiFunction; public class GlobalVariables { @@ -26,6 +26,8 @@ public class GlobalVariables { public static NodeView nodeViews = new NodeView(); public static ModelisationNavigator modelisationNavigator; public SimpleBooleanProperty isMomentSearchClicked; + public boolean isComparisonViewOn = false; + public UUID lastCommandIdWhenStartComparisonView = null; private GlobalVariables() { this.isMomentSearchClicked = new SimpleBooleanProperty(false); @@ -55,6 +57,13 @@ public static RootMoment getRootMoment() { return rootMoment; } + public void setId(UUID id) { + this.lastCommandIdWhenStartComparisonView = id; + } + public UUID getId() { + return lastCommandIdWhenStartComparisonView; + } + public void setDescriptemeChanged(Descripteme descripteme) { changedDescripteme.set(descripteme); } @@ -73,6 +82,13 @@ public void setProject(Project project) { public String getCurrentProjectPath() { return currentProjectPath; } + public boolean getComparisonState(){ + return isComparisonViewOn; + } + + public void setComparisonState(boolean state){ + isComparisonViewOn = state; + } public static void setCurrentProjectPath(String currentProjectPath) { globalVariables.currentProjectPath = currentProjectPath; diff --git a/src/main/resources/views/Comparison/ComparisonView.fxml b/src/main/resources/views/Comparison/ComparisonView.fxml index 2ed59f8f..099decf2 100644 --- a/src/main/resources/views/Comparison/ComparisonView.fxml +++ b/src/main/resources/views/Comparison/ComparisonView.fxml @@ -7,17 +7,18 @@ + + + + + + + + + -