From 05a8b4f72760ad3d3f124b1bcd7132dad741c517 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 2 Nov 2022 09:01:38 +0100 Subject: [PATCH] Enabling zero-ranking with one click on star Uses the position of the clicked star in the HBox to determine the clicked rank and compares it to the current value. If both are equal, the rank is set to zero. --- .../maintable/columns/SpecialFieldColumn.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/org/jabref/gui/maintable/columns/SpecialFieldColumn.java b/src/main/java/org/jabref/gui/maintable/columns/SpecialFieldColumn.java index 971bb5e0f69..af7773082a7 100644 --- a/src/main/java/org/jabref/gui/maintable/columns/SpecialFieldColumn.java +++ b/src/main/java/org/jabref/gui/maintable/columns/SpecialFieldColumn.java @@ -5,6 +5,7 @@ import javax.swing.undo.UndoManager; import javafx.scene.Node; +import javafx.scene.layout.HBox; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.control.Tooltip; @@ -30,6 +31,7 @@ import com.tobiasdiez.easybind.EasyBind; import org.controlsfx.control.Rating; +import org.kordamp.ikonli.javafx.FontIcon; /** * A column that displays a SpecialField @@ -100,9 +102,26 @@ private Rating createSpecialRating(BibEntryTableViewModel entry, Optional { + if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 2) { ranking.setRating(0); event.consume(); + } else if (event.getButton().equals(MouseButton.PRIMARY) && event.getClickCount() == 1) { + if(entry.getEntry().getField(SpecialField.RANKING).isPresent()) { + // Get the position of the clicked star (1-5) + var clickedStar = ((FontIcon) event.getTarget()); + var parent = (HBox) clickedStar.getParent(); + var positionOfStarInParent = parent.getChildren().indexOf(clickedStar) + 1; + + // Compare clicked with previous rating + var clickedRating = SpecialFieldValue.getRating(positionOfStarInParent); + var previousRating = SpecialFieldValue.getRating( + Integer.parseInt(entry.getEntry().getField(SpecialField.RANKING).get().split("rank")[1])); + if (clickedRating.equals(previousRating)) { + ranking.setRating(0); + event.consume(); + } + } } else if (event.getButton().equals(MouseButton.SECONDARY)) { event.consume(); }