diff --git a/.gitignore b/.gitignore index 18c9d5bfff6..d6a84d10f09 100644 --- a/.gitignore +++ b/.gitignore @@ -351,4 +351,4 @@ lib/ojdbc.jar !/buildSrc/src/main/groovy/org/jabref/build # do not ignore JabRef icons (they are ignored by the macos setting above) -!gui/icon/**/* +!src/main/java/org/jabref/gui/icon diff --git a/src/main/java/org/jabref/gui/copyfiles/CopyFilesDialogView.java b/src/main/java/org/jabref/gui/copyfiles/CopyFilesDialogView.java index 52f46bf22d3..e8d6d20f859 100644 --- a/src/main/java/org/jabref/gui/copyfiles/CopyFilesDialogView.java +++ b/src/main/java/org/jabref/gui/copyfiles/CopyFilesDialogView.java @@ -5,20 +5,19 @@ import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.paint.Color; -import javafx.scene.text.Text; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; import org.jabref.gui.util.BaseDialog; import org.jabref.gui.util.ValueTableCellFactory; import org.jabref.logic.l10n.Localization; import com.airhacks.afterburner.views.ViewLoader; -import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon; -import de.jensd.fx.glyphs.materialdesignicons.utils.MaterialDesignIconFactory; public class CopyFilesDialogView extends BaseDialog { @FXML private TableView tvResult; - @FXML private TableColumn colStatus; + @FXML private TableColumn colStatus; @FXML private TableColumn colMessage; @FXML private TableColumn colFile; private final CopyFilesDialogViewModel viewModel; @@ -46,16 +45,14 @@ private void setupTable() { colStatus.setCellValueFactory(cellData -> cellData.getValue().getIcon()); colFile.setCellFactory(new ValueTableCellFactory().withText(item -> item).withTooltip(item -> item)); - colStatus.setCellFactory(new ValueTableCellFactory().withGraphic(item -> { - - Text icon = MaterialDesignIconFactory.get().createIcon(item); - if (item == MaterialDesignIcon.CHECK) { - icon.setFill(Color.GREEN); + colStatus.setCellFactory(new ValueTableCellFactory().withGraphic(item -> { + if (item == IconTheme.JabRefIcons.CHECK) { + item = item.withColor(Color.GREEN); } - if (item == MaterialDesignIcon.ALERT) { - icon.setFill(Color.RED); + if (item == IconTheme.JabRefIcons.WARNING) { + item = item.withColor(Color.RED); } - return icon; + return item.getGraphicNode(); })); tvResult.setItems(viewModel.copyFilesResultListProperty()); diff --git a/src/main/java/org/jabref/gui/copyfiles/CopyFilesResultItemViewModel.java b/src/main/java/org/jabref/gui/copyfiles/CopyFilesResultItemViewModel.java index 12fce765c84..e48f0685112 100644 --- a/src/main/java/org/jabref/gui/copyfiles/CopyFilesResultItemViewModel.java +++ b/src/main/java/org/jabref/gui/copyfiles/CopyFilesResultItemViewModel.java @@ -7,19 +7,20 @@ import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; public class CopyFilesResultItemViewModel { private final StringProperty file = new SimpleStringProperty(""); - private final ObjectProperty icon = new SimpleObjectProperty<>(MaterialDesignIcon.ALERT); + private final ObjectProperty icon = new SimpleObjectProperty<>(IconTheme.JabRefIcons.WARNING); private final StringProperty message = new SimpleStringProperty(""); public CopyFilesResultItemViewModel(Path file, boolean success, String message) { this.file.setValue(file.toString()); this.message.setValue(message); if (success) { - this.icon.setValue(MaterialDesignIcon.CHECK); + this.icon.setValue(IconTheme.JabRefIcons.CHECK); } } @@ -31,7 +32,7 @@ public StringProperty getMessage() { return message; } - public ObjectProperty getIcon() { + public ObjectProperty getIcon() { return icon; } diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java index 725c206ffa6..ccbf0b75d54 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java @@ -30,6 +30,7 @@ import org.jabref.gui.DragAndDropDataFormats; import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.copyfiles.CopySingleFileAction; +import org.jabref.gui.icon.IconTheme; import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.util.TaskExecutor; import org.jabref.gui.util.ViewModelListCellFactory; @@ -42,8 +43,6 @@ import org.jabref.preferences.JabRefPreferences; import com.airhacks.afterburner.views.ViewLoader; -import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon; -import de.jensd.fx.glyphs.materialdesignicons.utils.MaterialDesignIconFactory; public class LinkedFilesEditor extends HBox implements FieldEditorFX { @@ -142,13 +141,13 @@ private static Node createFileDisplay(LinkedFileViewModel linkedFile) { info.setStyle("-fx-padding: 0.5em 0 0.5em 0;"); // To align with buttons below which also have 0.5em padding info.getChildren().setAll(icon, link, desc, progressIndicator); - Button acceptAutoLinkedFile = MaterialDesignIconFactory.get().createIconButton(MaterialDesignIcon.BRIEFCASE_CHECK); + Button acceptAutoLinkedFile = IconTheme.JabRefIcons.AUTO_LINKED_FILE.asButton(); acceptAutoLinkedFile.setTooltip(new Tooltip(Localization.lang("This file was found automatically. Do you want to link it to this entry?"))); acceptAutoLinkedFile.visibleProperty().bind(linkedFile.isAutomaticallyFoundProperty()); acceptAutoLinkedFile.setOnAction(event -> linkedFile.acceptAsLinked()); acceptAutoLinkedFile.getStyleClass().setAll("icon-button"); - Button writeXMPMetadata = MaterialDesignIconFactory.get().createIconButton(MaterialDesignIcon.IMPORT); + Button writeXMPMetadata = IconTheme.JabRefIcons.IMPORT.asButton(); writeXMPMetadata.setTooltip(new Tooltip(Localization.lang("Write BibTeXEntry as XMP-metadata to PDF."))); writeXMPMetadata.visibleProperty().bind(linkedFile.canWriteXMPMetadataProperty()); writeXMPMetadata.setOnAction(event -> linkedFile.writeXMPMetadata()); diff --git a/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java b/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java index cb17247dd0c..bd44fb53d33 100644 --- a/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java +++ b/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java @@ -37,7 +37,6 @@ import org.jabref.model.strings.StringUtil; import com.google.common.base.Enums; -import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon; import org.fxmisc.easybind.EasyBind; public class GroupNodeViewModel { @@ -200,7 +199,7 @@ private JabRefIcon createDefaultIcon() { } private Optional parseIcon(String iconCode) { - return Enums.getIfPresent(MaterialDesignIcon.class, iconCode.toUpperCase(Locale.ENGLISH)) + return Enums.getIfPresent(IconTheme.JabRefIcons.class, iconCode.toUpperCase(Locale.ENGLISH)) .toJavaUtil() .map(icon -> new InternalMaterialDesignIcon(getColor(), icon)); } diff --git a/src/main/java/org/jabref/gui/icon/IconTheme.java b/src/main/java/org/jabref/gui/icon/IconTheme.java index 131292628cf..98b9a2074e8 100644 --- a/src/main/java/org/jabref/gui/icon/IconTheme.java +++ b/src/main/java/org/jabref/gui/icon/IconTheme.java @@ -18,7 +18,6 @@ import javafx.scene.image.Image; import javafx.scene.paint.Color; -import org.jabref.logic.groups.DefaultGroupsFactory; import org.jabref.preferences.JabRefPreferences; import de.jensd.fx.glyphs.GlyphIcons; @@ -209,6 +208,7 @@ public enum JabRefIcons implements JabRefIcon { EXPORT_TO_CLIPBOARD(MaterialDesignIcon.CLIPBOARD_ARROW_LEFT) /*css: clipboard-arrow-left */, ATTACH_FILE(MaterialDesignIcon.PAPERCLIP) /*css: paperclip*/, AUTO_FILE_LINK(MaterialDesignIcon.FILE_FIND) /*css: file-find */, + AUTO_LINKED_FILE(MaterialDesignIcon.BRIEFCASE_CHECK) /*css: briefcase-check */, QUALITY_ASSURED(MaterialDesignIcon.CERTIFICATE), /*css: certificate */ QUALITY(MaterialDesignIcon.CERTIFICATE), /*css: certificate */ OPEN(MaterialDesignIcon.FOLDER_OUTLINE) /*css: folder */, @@ -251,6 +251,7 @@ public enum JabRefIcons implements JabRefIcon { FIND_DUPLICATES(MaterialDesignIcon.CODE_EQUAL), /*css: code-equal */ CONNECT_DB(MaterialDesignIcon.CLOUD_UPLOAD), /*cloud-upload*/ SUCCESS(MaterialDesignIcon.CHECK_CIRCLE), + CHECK(MaterialDesignIcon.CHECK) /*css: check */, WARNING(MaterialDesignIcon.ALERT), ERROR(MaterialDesignIcon.ALERT_CIRCLE), CASE_SENSITIVE(MaterialDesignIcon.ALPHABETICAL), /* css: mdi-alphabetical */ @@ -263,7 +264,7 @@ public enum JabRefIcons implements JabRefIcon { DATE_PICKER(MaterialDesignIcon.CALENDAR), /* css: calendar */ DEFAULT_GROUP_ICON_COLORED(MaterialDesignIcon.PLAY), DEFAULT_GROUP_ICON(MaterialDesignIcon.LABEL_OUTLINE), - ALL_ENTRIES_GROUP_ICON(DefaultGroupsFactory.ALL_ENTRIES_GROUP_DEFAULT_ICON), + ALL_ENTRIES_GROUP_ICON(MaterialDesignIcon.DATABASE), IMPORT(MaterialDesignIcon.CALL_RECEIVED), EXPORT(MaterialDesignIcon.CALL_MADE), PREVIOUS_LEFT(MaterialDesignIcon.CHEVRON_LEFT), diff --git a/src/main/java/org/jabref/gui/util/ViewModelListCellFactory.java b/src/main/java/org/jabref/gui/util/ViewModelListCellFactory.java index 87b9120b69b..c0ce703dee0 100644 --- a/src/main/java/org/jabref/gui/util/ViewModelListCellFactory.java +++ b/src/main/java/org/jabref/gui/util/ViewModelListCellFactory.java @@ -14,15 +14,12 @@ import javafx.scene.control.Tooltip; import javafx.scene.input.DragEvent; import javafx.scene.input.MouseEvent; -import javafx.scene.paint.Paint; -import javafx.scene.text.Text; +import javafx.scene.paint.Color; import javafx.util.Callback; +import org.jabref.gui.icon.JabRefIcon; import org.jabref.model.strings.StringUtil; -import de.jensd.fx.glyphs.GlyphIcons; -import de.jensd.fx.glyphs.materialdesignicons.utils.MaterialDesignIconFactory; - /** * Constructs a {@link ListCell} based on the view model of the row and a bunch of specified converter methods. * @@ -53,22 +50,21 @@ public ViewModelListCellFactory withGraphic(Callback toGraphic) { return this; } - public ViewModelListCellFactory withIcon(Callback toIcon) { + public ViewModelListCellFactory withIcon(Callback toIcon) { this.toGraphic = viewModel -> { - GlyphIcons icon = toIcon.call(viewModel); + JabRefIcon icon = toIcon.call(viewModel); if (icon != null) { - return MaterialDesignIconFactory.get().createIcon(icon); + return icon.getGraphicNode(); } return null; }; return this; } - public ViewModelListCellFactory withIcon(Callback toIcon, Callback toColor) { + public ViewModelListCellFactory withIcon(Callback toIcon, Callback toColor) { this.toGraphic = viewModel -> { - Text graphic = MaterialDesignIconFactory.get().createIcon(toIcon.call(viewModel)); - graphic.setFill(toColor.call(viewModel)); - return graphic; + + return toIcon.call(viewModel).withColor(toColor.call(viewModel)).getGraphicNode(); }; return this; } diff --git a/src/main/java/org/jabref/logic/groups/DefaultGroupsFactory.java b/src/main/java/org/jabref/logic/groups/DefaultGroupsFactory.java index ef085adae08..f544aff90d7 100644 --- a/src/main/java/org/jabref/logic/groups/DefaultGroupsFactory.java +++ b/src/main/java/org/jabref/logic/groups/DefaultGroupsFactory.java @@ -3,18 +3,16 @@ import org.jabref.logic.l10n.Localization; import org.jabref.model.groups.AllEntriesGroup; -import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon; - public class DefaultGroupsFactory { - public static MaterialDesignIcon ALL_ENTRIES_GROUP_DEFAULT_ICON = MaterialDesignIcon.DATABASE; + private static String ALL_ENTRIES_GROUP_DEFAULT_ICON = "ALL_ENTRIES_GROUP_ICON"; private DefaultGroupsFactory() { } public static AllEntriesGroup getAllEntriesGroup() { AllEntriesGroup group = new AllEntriesGroup(Localization.lang("All entries")); - group.setIconName(ALL_ENTRIES_GROUP_DEFAULT_ICON.name()); + group.setIconName(ALL_ENTRIES_GROUP_DEFAULT_ICON); return group; } } diff --git a/src/test/java/org/jabref/architecture/MainArchitectureTestsWithArchUnit.java b/src/test/java/org/jabref/architecture/MainArchitectureTestsWithArchUnit.java index cd56a07e905..dc7308e77f4 100644 --- a/src/test/java/org/jabref/architecture/MainArchitectureTestsWithArchUnit.java +++ b/src/test/java/org/jabref/architecture/MainArchitectureTestsWithArchUnit.java @@ -41,7 +41,12 @@ public static void doNotUseJGoodies(JavaClasses classes) { public static void doNotUseGlazedLists(JavaClasses classes) { noClasses().should().accessClassesThat().resideInAPackage("ca.odell.glazedlists..").check(classes); } - + + @ArchTest + public static void doNotUseGlyphsDirectly(JavaClasses classes) { + noClasses().that().resideOutsideOfPackage("org.jabref.gui.icon").should().accessClassesThat().resideInAnyPackage("de.jensd.fx.glyphs", "de.jensd.fx.glyphs.materialdesignicons").check(classes); + } + //"Currently disabled as there is no alternative for the rest of classes who need awt" @ArchIgnore @ArchTest