diff --git a/build.gradle b/build.gradle index e19415cd851..3c8b64d58eb 100644 --- a/build.gradle +++ b/build.gradle @@ -153,8 +153,8 @@ dependencies { implementation group: 'jakarta.annotation', name: 'jakarta.annotation-api', version: '1.3.5' // JavaFX stuff - implementation 'de.jensd:fontawesomefx-commons:11.0' - implementation 'de.jensd:fontawesomefx-materialdesignfont:1.7.22-11' + implementation 'org.kordamp.ikonli:ikonli-javafx:12.2.0' + implementation 'org.kordamp.ikonli:ikonli-materialdesign2-pack:12.2.0' implementation 'de.saxsys:mvvmfx-validation:1.9.0-SNAPSHOT' implementation 'de.saxsys:mvvmfx:1.8.0' implementation 'com.tobiasdiez:easybind:2.1.0' @@ -230,11 +230,6 @@ dependencyUpdates.resolutionStrategy = { selection.reject('Release candidate') } } - rules.withModule("de.jensd:fontawesomefx-materialdesignfont") { ComponentSelection selection -> - if (selection.candidate.version ==~ /2.0.26.*/) { - selection.reject('1.7.22-11 is actually newer (strange version system)') - } - } rules.withModule("org.javamodularity.moduleplugin:org.javamodularity.moduleplugin.gradle.plugin") { ComponentSelection selection -> if (selection.candidate.version ==~ /1.6.0/) { selection.reject("Does not work due to bug, see https://github.com/JabRef/jabref/pull/5270") diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 3619fe63b0c..f8eba5b2f48 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -15,8 +15,18 @@ requires afterburner.fx; requires com.jfoenix; requires de.saxsys.mvvmfx; - requires de.jensd.fx.fontawesomefx.commons; - requires de.jensd.fx.fontawesomefx.materialdesignicons; + + requires org.kordamp.ikonli.core; + requires org.kordamp.ikonli.javafx; + requires org.kordamp.ikonli.materialdesign2; + uses org.kordamp.ikonli.IkonHandler; + uses org.kordamp.ikonli.IkonProvider; + + provides org.kordamp.ikonli.IkonHandler + with org.jabref.gui.icon.JabRefIkonHandler; + provides org.kordamp.ikonli.IkonProvider + with org.jabref.gui.icon.JabrefIconProvider; + requires org.controlsfx.controls; requires org.fxmisc.richtext; requires com.tobiasdiez.easybind; diff --git a/src/main/java/org/jabref/gui/FXDialog.java b/src/main/java/org/jabref/gui/FXDialog.java index f1c93adbdee..7b485c24876 100644 --- a/src/main/java/org/jabref/gui/FXDialog.java +++ b/src/main/java/org/jabref/gui/FXDialog.java @@ -47,7 +47,7 @@ public FXDialog(AlertType type, String title) { public FXDialog(AlertType type, boolean isModal) { super(type); - setDialogIcon(IconTheme.getJabRefImageFX()); + setDialogIcon(IconTheme.getJabRefImage()); Stage dialogWindow = getDialogWindow(); dialogWindow.setOnCloseRequest(evt -> this.close()); diff --git a/src/main/java/org/jabref/gui/JabRefDialogService.java b/src/main/java/org/jabref/gui/JabRefDialogService.java index ca88c9c7914..a3bf7ea74f0 100644 --- a/src/main/java/org/jabref/gui/JabRefDialogService.java +++ b/src/main/java/org/jabref/gui/JabRefDialogService.java @@ -133,7 +133,7 @@ public static String shortenDialogMessage(String dialogMessage) { @Override public Optional showChoiceDialogAndWait(String title, String content, String okButtonLabel, T defaultChoice, Collection choices) { ChoiceDialog choiceDialog = new ChoiceDialog<>(defaultChoice, choices); - ((Stage) choiceDialog.getDialogPane().getScene().getWindow()).getIcons().add(IconTheme.getJabRefImageFX()); + ((Stage) choiceDialog.getDialogPane().getScene().getWindow()).getIcons().add(IconTheme.getJabRefImage()); ButtonType okButtonType = new ButtonType(okButtonLabel, ButtonBar.ButtonData.OK_DONE); choiceDialog.getDialogPane().getButtonTypes().setAll(ButtonType.CANCEL, okButtonType); choiceDialog.setHeaderText(title); @@ -287,7 +287,7 @@ public void showProgressDialog(String title, String content, Task task) { progressDialog.setTitle(title); progressDialog.setContentText(content); progressDialog.setGraphic(null); - ((Stage) progressDialog.getDialogPane().getScene().getWindow()).getIcons().add(IconTheme.getJabRefImageFX()); + ((Stage) progressDialog.getDialogPane().getScene().getWindow()).getIcons().add(IconTheme.getJabRefImage()); progressDialog.setOnCloseRequest(evt -> task.cancel()); DialogPane dialogPane = progressDialog.getDialogPane(); dialogPane.getButtonTypes().add(ButtonType.CANCEL); diff --git a/src/main/java/org/jabref/gui/JabRefGUI.java b/src/main/java/org/jabref/gui/JabRefGUI.java index bf6dce8c2fe..f1dfdbc7006 100644 --- a/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/src/main/java/org/jabref/gui/JabRefGUI.java @@ -57,7 +57,6 @@ public JabRefGUI(Stage mainStage, List databases, boolean isBlank) } private void openWindow(Stage mainStage) { - IconTheme.loadFonts(); LOGGER.debug("Initializing frame"); mainFrame.init(); diff --git a/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java b/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java index a3c8044ccf4..73dade430f1 100644 --- a/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java +++ b/src/main/java/org/jabref/gui/groups/GroupNodeViewModel.java @@ -1,7 +1,6 @@ package org.jabref.gui.groups; import java.util.List; -import java.util.Locale; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -21,7 +20,6 @@ import org.jabref.gui.DragAndDropDataFormats; import org.jabref.gui.StateManager; import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.InternalMaterialDesignIcon; import org.jabref.gui.icon.JabRefIcon; import org.jabref.gui.util.BackgroundTask; import org.jabref.gui.util.CustomLocalDragboard; @@ -41,10 +39,8 @@ import org.jabref.model.strings.StringUtil; import org.jabref.preferences.PreferencesService; -import com.google.common.base.Enums; import com.tobiasdiez.easybind.EasyBind; import com.tobiasdiez.easybind.EasyObservableList; -import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon; public class GroupNodeViewModel { @@ -213,9 +209,7 @@ private JabRefIcon createDefaultIcon() { } private Optional parseIcon(String iconCode) { - return Enums.getIfPresent(MaterialDesignIcon.class, iconCode.toUpperCase(Locale.ENGLISH)) - .toJavaUtil() - .map(icon -> new InternalMaterialDesignIcon(getColor(), icon)); + return IconTheme.findIcon(iconCode, getColor()); } public ObservableList getChildren() { diff --git a/src/main/java/org/jabref/gui/icon/IconTheme.java b/src/main/java/org/jabref/gui/icon/IconTheme.java index 0b9876e486b..07a3a346fe1 100644 --- a/src/main/java/org/jabref/gui/icon/IconTheme.java +++ b/src/main/java/org/jabref/gui/icon/IconTheme.java @@ -2,28 +2,54 @@ import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.ServiceLoader; +import java.util.Set; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ToggleButton; import javafx.scene.image.Image; import javafx.scene.paint.Color; -import javafx.scene.text.Font; -import de.jensd.fx.glyphs.GlyphIcons; -import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon; +import org.kordamp.ikonli.Ikon; +import org.kordamp.ikonli.IkonProvider; +import org.kordamp.ikonli.materialdesign2.MaterialDesignA; +import org.kordamp.ikonli.materialdesign2.MaterialDesignB; +import org.kordamp.ikonli.materialdesign2.MaterialDesignC; +import org.kordamp.ikonli.materialdesign2.MaterialDesignD; +import org.kordamp.ikonli.materialdesign2.MaterialDesignE; +import org.kordamp.ikonli.materialdesign2.MaterialDesignF; +import org.kordamp.ikonli.materialdesign2.MaterialDesignG; +import org.kordamp.ikonli.materialdesign2.MaterialDesignH; +import org.kordamp.ikonli.materialdesign2.MaterialDesignI; +import org.kordamp.ikonli.materialdesign2.MaterialDesignK; +import org.kordamp.ikonli.materialdesign2.MaterialDesignL; +import org.kordamp.ikonli.materialdesign2.MaterialDesignM; +import org.kordamp.ikonli.materialdesign2.MaterialDesignN; +import org.kordamp.ikonli.materialdesign2.MaterialDesignO; +import org.kordamp.ikonli.materialdesign2.MaterialDesignP; +import org.kordamp.ikonli.materialdesign2.MaterialDesignR; +import org.kordamp.ikonli.materialdesign2.MaterialDesignS; +import org.kordamp.ikonli.materialdesign2.MaterialDesignT; +import org.kordamp.ikonli.materialdesign2.MaterialDesignU; +import org.kordamp.ikonli.materialdesign2.MaterialDesignV; +import org.kordamp.ikonli.materialdesign2.MaterialDesignW; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static java.util.EnumSet.allOf; + public class IconTheme { public static final Color DEFAULT_DISABLED_COLOR = Color.web("#c8c8c8"); @@ -31,35 +57,30 @@ public class IconTheme { private static final String DEFAULT_ICON_PATH = "/images/external/red.png"; private static final Logger LOGGER = LoggerFactory.getLogger(IconTheme.class); private static final Map KEY_TO_ICON = readIconThemeFile(IconTheme.class.getResource("/images/Icons.properties"), "/images/external/"); + private static final Set ICON_NAMES = new HashSet<>(); - public static void loadFonts() { - try (InputStream stream = getMaterialDesignIconsStream()) { - Font.loadFont(stream, 7); - } catch (IOException e) { - LOGGER.error("Error loading Material Design Icons TTF font", e); - } - - try (InputStream stream = getJabRefMaterialDesignIconsStream()) { - Font.loadFont(stream, 7); - } catch (IOException e) { - LOGGER.error("Error loading custom font for custom JabRef icons", e); - } + public static Color getDefaultGroupColor() { + return Color.web("#8a8a8a"); } - private static InputStream getMaterialDesignIconsStream() { - return IconTheme.class.getResourceAsStream("/fonts/materialdesignicons-webfont.ttf"); + public static Optional findIcon(String code, Color color) { + if (ICON_NAMES.isEmpty()) { + loadAllIkons(); + } + return ICON_NAMES.stream().filter(icon -> icon.toString().equals(code.toUpperCase(Locale.ENGLISH))) + .map(internalMat -> new InternalMaterialDesignIcon(internalMat).withColor(color)).findFirst(); } - private static InputStream getJabRefMaterialDesignIconsStream() throws IOException { - return IconTheme.class.getResource("/fonts/JabRefMaterialDesign.ttf").openStream(); + public static Image getJabRefImage() { + return getImageFX("jabrefIcon48"); } - public static Color getDefaultGroupColor() { - return Color.web("#8a8a8a"); - } + private static void loadAllIkons() { + ServiceLoader providers = ServiceLoader.load(IkonProvider.class); - public static Image getJabRefImageFX() { - return getImageFX("jabrefIcon48"); + for (IkonProvider provider : providers) { + ICON_NAMES.addAll(allOf(provider.getIkon())); + } } /* @@ -84,7 +105,7 @@ public static URL getIconUrl(String name) { String key = Objects.requireNonNull(name, "icon name"); if (!KEY_TO_ICON.containsKey(key)) { LOGGER.warn("Could not find icon url by name " + name + ", so falling back on default icon " - + DEFAULT_ICON_PATH); + + DEFAULT_ICON_PATH); } String path = KEY_TO_ICON.getOrDefault(key, DEFAULT_ICON_PATH); return Objects.requireNonNull(IconTheme.class.getResource(path), "Path must not be null for key " + key); @@ -141,107 +162,107 @@ public static List getLogoSetFX() { public enum JabRefIcons implements JabRefIcon { - ADD(MaterialDesignIcon.PLUS_CIRCLE_OUTLINE), - ADD_FILLED(MaterialDesignIcon.PLUS_CIRCLE), - ADD_NOBOX(MaterialDesignIcon.PLUS), - ADD_ARTICLE(MaterialDesignIcon.PLUS), - ADD_ENTRY(MaterialDesignIcon.PLAYLIST_PLUS), - EDIT_ENTRY(MaterialDesignIcon.TOOLTIP_EDIT), - EDIT_STRINGS(MaterialDesignIcon.TOOLTIP_TEXT), - FOLDER(MaterialDesignIcon.FOLDER_OUTLINE), - REMOVE(MaterialDesignIcon.MINUS_BOX), - REMOVE_NOBOX(MaterialDesignIcon.MINUS), - FILE(MaterialDesignIcon.FILE_OUTLINE), - PDF_FILE(MaterialDesignIcon.FILE_PDF), - DOI(MaterialDesignIcon.BARCODE_SCAN), - DUPLICATE(MaterialDesignIcon.CONTENT_DUPLICATE), - EDIT(MaterialDesignIcon.PENCIL), - NEW(MaterialDesignIcon.FOLDER_PLUS), - SAVE(MaterialDesignIcon.CONTENT_SAVE), - SAVE_ALL(MaterialDesignIcon.CONTENT_SAVE_ALL), - CLOSE(MaterialDesignIcon.CLOSE_CIRCLE), + ADD(MaterialDesignP.PLUS_CIRCLE_OUTLINE), + ADD_FILLED(MaterialDesignP.PLUS_CIRCLE), + ADD_NOBOX(MaterialDesignP.PLUS), + ADD_ARTICLE(MaterialDesignP.PLUS), + ADD_ENTRY(MaterialDesignP.PLAYLIST_PLUS), + EDIT_ENTRY(MaterialDesignT.TOOLTIP_EDIT), + EDIT_STRINGS(MaterialDesignT.TOOLTIP_TEXT), + FOLDER(MaterialDesignF.FOLDER_OUTLINE), + REMOVE(MaterialDesignM.MINUS_BOX), + REMOVE_NOBOX(MaterialDesignM.MINUS), + FILE(MaterialDesignF.FILE_OUTLINE), + PDF_FILE(MaterialDesignF.FILE_PDF), + DOI(MaterialDesignB.BARCODE_SCAN), + DUPLICATE(MaterialDesignC.CONTENT_DUPLICATE), + EDIT(MaterialDesignP.PENCIL), + NEW(MaterialDesignF.FOLDER_PLUS), + SAVE(MaterialDesignC.CONTENT_SAVE), + SAVE_ALL(MaterialDesignC.CONTENT_SAVE_ALL), + CLOSE(MaterialDesignC.CLOSE_CIRCLE), PASTE(JabRefMaterialDesignIcon.PASTE), - CUT(MaterialDesignIcon.CONTENT_CUT), - COPY(MaterialDesignIcon.CONTENT_COPY), - COMMENT(MaterialDesignIcon.COMMENT), - REDO(MaterialDesignIcon.REDO), - UNDO(MaterialDesignIcon.UNDO), - MARKER(MaterialDesignIcon.MARKER), - REFRESH(MaterialDesignIcon.REFRESH), - DELETE_ENTRY(MaterialDesignIcon.DELETE), - SEARCH(MaterialDesignIcon.MAGNIFY), - FILE_SEARCH(MaterialDesignIcon.FILE_FIND), - ADVANCED_SEARCH(Color.CYAN, MaterialDesignIcon.MAGNIFY), - PREFERENCES(MaterialDesignIcon.SETTINGS), - HELP(MaterialDesignIcon.HELP_CIRCLE), - UP(MaterialDesignIcon.ARROW_UP), - DOWN(MaterialDesignIcon.ARROW_DOWN), - LEFT(MaterialDesignIcon.ARROW_LEFT_BOLD), - RIGHT(MaterialDesignIcon.ARROW_RIGHT_BOLD), - SOURCE(MaterialDesignIcon.CODE_BRACES), - MAKE_KEY(MaterialDesignIcon.KEY_VARIANT), - CLEANUP_ENTRIES(MaterialDesignIcon.BROOM), - PRIORITY(MaterialDesignIcon.FLAG), - PRIORITY_HIGH(Color.RED, MaterialDesignIcon.FLAG), - PRIORITY_MEDIUM(Color.ORANGE, MaterialDesignIcon.FLAG), - PRIORITY_LOW(Color.rgb(111, 204, 117), MaterialDesignIcon.FLAG), - PRINTED(MaterialDesignIcon.PRINTER), - RANKING(MaterialDesignIcon.STAR), - RANK1(MaterialDesignIcon.STAR, MaterialDesignIcon.STAR_OUTLINE, MaterialDesignIcon.STAR_OUTLINE, MaterialDesignIcon.STAR_OUTLINE, MaterialDesignIcon.STAR_OUTLINE), - RANK2(MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR_OUTLINE, MaterialDesignIcon.STAR_OUTLINE, MaterialDesignIcon.STAR_OUTLINE), - RANK3(MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR_OUTLINE, MaterialDesignIcon.STAR_OUTLINE), - RANK4(MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR_OUTLINE), - RANK5(MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR, MaterialDesignIcon.STAR), - WWW(MaterialDesignIcon.WEB), - GROUP_INCLUDING(MaterialDesignIcon.FILTER_OUTLINE), - GROUP_REFINING(MaterialDesignIcon.FILTER), - AUTO_GROUP(MaterialDesignIcon.AUTO_FIX), + CUT(MaterialDesignC.CONTENT_CUT), + COPY(MaterialDesignC.CONTENT_COPY), + COMMENT(MaterialDesignC.COMMENT), + REDO(MaterialDesignR.REDO), + UNDO(MaterialDesignU.UNDO), + MARKER(MaterialDesignM.MARKER), + REFRESH(MaterialDesignR.REFRESH), + DELETE_ENTRY(MaterialDesignD.DELETE), + SEARCH(MaterialDesignM.MAGNIFY), + FILE_SEARCH(MaterialDesignF.FILE_FIND), + ADVANCED_SEARCH(Color.CYAN, MaterialDesignM.MAGNIFY), + PREFERENCES(MaterialDesignS.STAR_SETTINGS), + HELP(MaterialDesignH.HELP_CIRCLE), + UP(MaterialDesignA.ARROW_UP), + DOWN(MaterialDesignA.ARROW_DOWN), + LEFT(MaterialDesignA.ARROW_LEFT_BOLD), + RIGHT(MaterialDesignA.ARROW_RIGHT_BOLD), + SOURCE(MaterialDesignC.CODE_BRACES), + MAKE_KEY(MaterialDesignK.KEY_VARIANT), + CLEANUP_ENTRIES(MaterialDesignB.BROOM), + PRIORITY(MaterialDesignF.FLAG), + PRIORITY_HIGH(Color.RED, MaterialDesignF.FLAG), + PRIORITY_MEDIUM(Color.ORANGE, MaterialDesignF.FLAG), + PRIORITY_LOW(Color.rgb(111, 204, 117), MaterialDesignF.FLAG), + PRINTED(MaterialDesignP.PRINTER), + RANKING(MaterialDesignS.STAR), + RANK1(MaterialDesignS.STAR, MaterialDesignS.STAR_OUTLINE, MaterialDesignS.STAR_OUTLINE, MaterialDesignS.STAR_OUTLINE, MaterialDesignS.STAR_OUTLINE), + RANK2(MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR_OUTLINE, MaterialDesignS.STAR_OUTLINE, MaterialDesignS.STAR_OUTLINE), + RANK3(MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR_OUTLINE, MaterialDesignS.STAR_OUTLINE), + RANK4(MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR_OUTLINE), + RANK5(MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR, MaterialDesignS.STAR), + WWW(MaterialDesignW.WEB), + GROUP_INCLUDING(MaterialDesignF.FILTER_OUTLINE), + GROUP_REFINING(MaterialDesignF.FILTER), + AUTO_GROUP(MaterialDesignA.AUTO_FIX), GROUP_INTERSECTION(JabRefMaterialDesignIcon.SET_CENTER), GROUP_UNION(JabRefMaterialDesignIcon.SET_ALL), - EMAIL(MaterialDesignIcon.EMAIL), - EXPORT_TO_CLIPBOARD(MaterialDesignIcon.CLIPBOARD_ARROW_LEFT), - ATTACH_FILE(MaterialDesignIcon.PAPERCLIP), - AUTO_FILE_LINK(MaterialDesignIcon.FILE_FIND), - AUTO_RENAME(MaterialDesignIcon.AUTO_FIX), - DOWNLOAD_FILE(MaterialDesignIcon.DOWNLOAD), - MOVE_TO_FOLDER(MaterialDesignIcon.FILE_SEND), - COPY_TO_FOLDER(MaterialDesignIcon.CONTENT_COPY), - RENAME(MaterialDesignIcon.RENAME_BOX), - DELETE_FILE(MaterialDesignIcon.DELETE_FOREVER), - REMOVE_LINK(MaterialDesignIcon.LINK_OFF), - AUTO_LINKED_FILE(MaterialDesignIcon.BRIEFCASE_CHECK), - QUALITY_ASSURED(MaterialDesignIcon.CERTIFICATE), - QUALITY(MaterialDesignIcon.CERTIFICATE), - OPEN(MaterialDesignIcon.FOLDER_OUTLINE), - ADD_ROW(MaterialDesignIcon.SERVER_PLUS), - REMOVE_ROW(MaterialDesignIcon.SERVER_MINUS), - PICTURE(MaterialDesignIcon.FILE_IMAGE), - READ_STATUS_READ(Color.rgb(111, 204, 117, 1), MaterialDesignIcon.EYE), - READ_STATUS_SKIMMED(Color.ORANGE, MaterialDesignIcon.EYE), - READ_STATUS(MaterialDesignIcon.EYE), - RELEVANCE(MaterialDesignIcon.STAR_CIRCLE), - MERGE_ENTRIES(MaterialDesignIcon.COMPARE), - CONNECT_OPEN_OFFICE(MaterialDesignIcon.OPEN_IN_APP), - PLAIN_TEXT_IMPORT_TODO(MaterialDesignIcon.CHECKBOX_BLANK_CIRCLE_OUTLINE), - PLAIN_TEXT_IMPORT_DONE(MaterialDesignIcon.CHECKBOX_MARKED_CIRCLE_OUTLINE), - DONATE(MaterialDesignIcon.GIFT), - MOVE_TAB_ARROW(MaterialDesignIcon.ARROW_UP_BOLD), - OPTIONAL(MaterialDesignIcon.LABEL_OUTLINE), - REQUIRED(MaterialDesignIcon.LABEL), - INTEGRITY_FAIL(Color.RED, MaterialDesignIcon.CLOSE_CIRCLE), - INTEGRITY_INFO(MaterialDesignIcon.INFORMATION), - INTEGRITY_WARN(MaterialDesignIcon.ALERT_CIRCLE), - INTEGRITY_SUCCESS(MaterialDesignIcon.CHECKBOX_MARKED_CIRCLE_OUTLINE), - GITHUB(MaterialDesignIcon.GITHUB_CIRCLE), - TOGGLE_ENTRY_PREVIEW(MaterialDesignIcon.LIBRARY_BOOKS), - TOGGLE_GROUPS(MaterialDesignIcon.VIEW_LIST), - SHOW_PREFERENCES_LIST(MaterialDesignIcon.VIEW_LIST), - WRITE_XMP(MaterialDesignIcon.IMPORT), - FILE_WORD(MaterialDesignIcon.FILE_WORD), - FILE_EXCEL(MaterialDesignIcon.FILE_EXCEL), - FILE_POWERPOINT(MaterialDesignIcon.FILE_POWERPOINT), - FILE_TEXT(MaterialDesignIcon.FILE_DOCUMENT), - FILE_MULTIPLE(MaterialDesignIcon.FILE_MULTIPLE), + EMAIL(MaterialDesignE.EMAIL), + EXPORT_TO_CLIPBOARD(MaterialDesignC.CLIPBOARD_ARROW_LEFT), + ATTACH_FILE(MaterialDesignP.PAPERCLIP), + AUTO_FILE_LINK(MaterialDesignF.FILE_FIND), + AUTO_RENAME(MaterialDesignA.AUTO_FIX), + DOWNLOAD_FILE(MaterialDesignD.DOWNLOAD), + MOVE_TO_FOLDER(MaterialDesignF.FILE_SEND), + COPY_TO_FOLDER(MaterialDesignC.CONTENT_COPY), + RENAME(MaterialDesignR.RENAME_BOX), + DELETE_FILE(MaterialDesignD.DELETE_FOREVER), + REMOVE_LINK(MaterialDesignL.LINK_OFF), + AUTO_LINKED_FILE(MaterialDesignB.BRIEFCASE_CHECK), + QUALITY_ASSURED(MaterialDesignC.CERTIFICATE), + QUALITY(MaterialDesignC.CERTIFICATE), + OPEN(MaterialDesignF.FOLDER_OUTLINE), + ADD_ROW(MaterialDesignS.SERVER_PLUS), + REMOVE_ROW(MaterialDesignS.SERVER_MINUS), + PICTURE(MaterialDesignF.FILE_IMAGE), + READ_STATUS_READ(Color.rgb(111, 204, 117, 1), MaterialDesignE.EYE), + READ_STATUS_SKIMMED(Color.ORANGE, MaterialDesignE.EYE), + READ_STATUS(MaterialDesignE.EYE), + RELEVANCE(MaterialDesignS.STAR_CIRCLE), + MERGE_ENTRIES(MaterialDesignC.COMPARE), + CONNECT_OPEN_OFFICE(MaterialDesignO.OPEN_IN_APP), + PLAIN_TEXT_IMPORT_TODO(MaterialDesignC.CHECKBOX_BLANK_CIRCLE_OUTLINE), + PLAIN_TEXT_IMPORT_DONE(MaterialDesignC.CHECKBOX_MARKED_CIRCLE_OUTLINE), + DONATE(MaterialDesignG.GIFT), + MOVE_TAB_ARROW(MaterialDesignA.ARROW_UP_BOLD), + OPTIONAL(MaterialDesignL.LABEL_OUTLINE), + REQUIRED(MaterialDesignL.LABEL), + INTEGRITY_FAIL(Color.RED, MaterialDesignC.CLOSE_CIRCLE), + INTEGRITY_INFO(MaterialDesignI.INFORMATION), + INTEGRITY_WARN(MaterialDesignA.ALERT_CIRCLE), + INTEGRITY_SUCCESS(MaterialDesignC.CHECKBOX_MARKED_CIRCLE_OUTLINE), + GITHUB(MaterialDesignG.GITHUB), + TOGGLE_ENTRY_PREVIEW(MaterialDesignL.LIBRARY), + TOGGLE_GROUPS(MaterialDesignV.VIEW_LIST), + SHOW_PREFERENCES_LIST(MaterialDesignV.VIEW_LIST), + WRITE_XMP(MaterialDesignI.IMPORT), + FILE_WORD(MaterialDesignF.FILE_WORD), + FILE_EXCEL(MaterialDesignF.FILE_EXCEL), + FILE_POWERPOINT(MaterialDesignF.FILE_POWERPOINT), + FILE_TEXT(MaterialDesignF.FILE_DOCUMENT), + FILE_MULTIPLE(MaterialDesignF.FILE_MULTIPLE), FILE_OPENOFFICE(JabRefMaterialDesignIcon.OPEN_OFFICE), APPLICATION_EMACS(JabRefMaterialDesignIcon.EMACS), APPLICATION_LYX(JabRefMaterialDesignIcon.LYX), @@ -249,92 +270,87 @@ public enum JabRefIcons implements JabRefIcon { APPLICATION_TEXMAKER(JabRefMaterialDesignIcon.TEX_MAKER), APPLICATION_VIM(JabRefMaterialDesignIcon.VIM), APPLICATION_WINEDT(JabRefMaterialDesignIcon.WINEDT), - KEY_BINDINGS(MaterialDesignIcon.KEYBOARD), - FIND_DUPLICATES(MaterialDesignIcon.CODE_EQUAL), - CONNECT_DB(MaterialDesignIcon.CLOUD_UPLOAD), - SUCCESS(MaterialDesignIcon.CHECK_CIRCLE), - CHECK(MaterialDesignIcon.CHECK), - WARNING(MaterialDesignIcon.ALERT), - ERROR(MaterialDesignIcon.ALERT_CIRCLE), - CASE_SENSITIVE(MaterialDesignIcon.ALPHABETICAL), - REG_EX(MaterialDesignIcon.REGEX), - CONSOLE(MaterialDesignIcon.CONSOLE), - FORUM(MaterialDesignIcon.FORUM), - FACEBOOK(MaterialDesignIcon.FACEBOOK), - TWITTER(MaterialDesignIcon.TWITTER), - BLOG(MaterialDesignIcon.RSS), - DATE_PICKER(MaterialDesignIcon.CALENDAR), - DEFAULT_GROUP_ICON_COLORED(MaterialDesignIcon.PLAY), - DEFAULT_GROUP_ICON(MaterialDesignIcon.LABEL_OUTLINE), - ALL_ENTRIES_GROUP_ICON(MaterialDesignIcon.DATABASE), - IMPORT(MaterialDesignIcon.CALL_RECEIVED), - EXPORT(MaterialDesignIcon.CALL_MADE), - PREVIOUS_LEFT(MaterialDesignIcon.CHEVRON_LEFT), - PREVIOUS_UP(MaterialDesignIcon.CHEVRON_UP), - NEXT_RIGHT(MaterialDesignIcon.CHEVRON_RIGHT), - NEXT_DOWN(MaterialDesignIcon.CHEVRON_DOWN), - LIST_MOVE_LEFT(MaterialDesignIcon.CHEVRON_LEFT), - LIST_MOVE_UP(MaterialDesignIcon.CHEVRON_UP), - LIST_MOVE_RIGHT(MaterialDesignIcon.CHEVRON_RIGHT), - LIST_MOVE_DOWN(MaterialDesignIcon.CHEVRON_DOWN), - FIT_WIDTH(MaterialDesignIcon.ARROW_EXPAND_ALL), - FIT_SINGLE_PAGE(MaterialDesignIcon.NOTE), - ZOOM_OUT(MaterialDesignIcon.MAGNIFY_MINUS), - ZOOM_IN(MaterialDesignIcon.MAGNIFY_PLUS), - ENTRY_TYPE(MaterialDesignIcon.PENCIL), - NEW_GROUP(MaterialDesignIcon.PLUS), - OPEN_LINK(MaterialDesignIcon.OPEN_IN_NEW), - LOOKUP_IDENTIFIER(MaterialDesignIcon.MAGNIFY), // TODO: use WEB_SEARCH instead as soon as it is available - FETCH_FULLTEXT(MaterialDesignIcon.MAGNIFY), // TODO: use WEB_SEARCH instead as soon as it is available - FETCH_BY_IDENTIFIER(MaterialDesignIcon.CLIPBOARD_ARROW_DOWN), - TOGGLE_ABBREVIATION(MaterialDesignIcon.FORMAT_ALIGN_CENTER), - NEW_FILE(MaterialDesignIcon.PLUS), - DOWNLOAD(MaterialDesignIcon.DOWNLOAD), - OWNER(MaterialDesignIcon.ACCOUNT), - CLOSE_JABREF(MaterialDesignIcon.GLASSDOOR), - ARTICLE(MaterialDesignIcon.FILE_DOCUMENT), - BOOK(MaterialDesignIcon.BOOK_OPEN_PAGE_VARIANT), + KEY_BINDINGS(MaterialDesignK.KEYBOARD), + FIND_DUPLICATES(MaterialDesignC.CODE_EQUAL), + CONNECT_DB(MaterialDesignC.CLOUD_UPLOAD), + SUCCESS(MaterialDesignC.CHECK_CIRCLE), + CHECK(MaterialDesignC.CHECK), + WARNING(MaterialDesignA.ALERT), + ERROR(MaterialDesignA.ALERT_CIRCLE), + CASE_SENSITIVE(MaterialDesignA.ALPHABETICAL), + REG_EX(MaterialDesignR.REGEX), + CONSOLE(MaterialDesignC.CONSOLE), + FORUM(MaterialDesignF.FORUM), + FACEBOOK(MaterialDesignF.FACEBOOK), + TWITTER(MaterialDesignT.TWITTER), + BLOG(MaterialDesignR.RSS), + DATE_PICKER(MaterialDesignC.CALENDAR), + DEFAULT_GROUP_ICON_COLORED(MaterialDesignP.PLAY), + DEFAULT_GROUP_ICON(MaterialDesignL.LABEL_OUTLINE), + ALL_ENTRIES_GROUP_ICON(MaterialDesignD.DATABASE), + IMPORT(MaterialDesignC.CALL_RECEIVED), + EXPORT(MaterialDesignC.CALL_MADE), + PREVIOUS_LEFT(MaterialDesignC.CHEVRON_LEFT), + PREVIOUS_UP(MaterialDesignC.CHEVRON_UP), + NEXT_RIGHT(MaterialDesignC.CHEVRON_RIGHT), + NEXT_DOWN(MaterialDesignC.CHEVRON_DOWN), + LIST_MOVE_LEFT(MaterialDesignC.CHEVRON_LEFT), + LIST_MOVE_UP(MaterialDesignC.CHEVRON_UP), + LIST_MOVE_RIGHT(MaterialDesignC.CHEVRON_RIGHT), + LIST_MOVE_DOWN(MaterialDesignC.CHEVRON_DOWN), + FIT_WIDTH(MaterialDesignA.ARROW_EXPAND_ALL), + FIT_SINGLE_PAGE(MaterialDesignN.NOTE), + ZOOM_OUT(MaterialDesignM.MAGNIFY_MINUS), + ZOOM_IN(MaterialDesignM.MAGNIFY_PLUS), + ENTRY_TYPE(MaterialDesignP.PENCIL), + NEW_GROUP(MaterialDesignP.PLUS), + OPEN_LINK(MaterialDesignO.OPEN_IN_NEW), + LOOKUP_IDENTIFIER(MaterialDesignS.SEARCH_WEB), + FETCH_FULLTEXT(MaterialDesignS.SEARCH_WEB), + FETCH_BY_IDENTIFIER(MaterialDesignC.CLIPBOARD_ARROW_DOWN), + TOGGLE_ABBREVIATION(MaterialDesignF.FORMAT_ALIGN_CENTER), + NEW_FILE(MaterialDesignP.PLUS), + DOWNLOAD(MaterialDesignD.DOWNLOAD), + OWNER(MaterialDesignA.ACCOUNT), + CLOSE_JABREF(MaterialDesignD.DOOR), + ARTICLE(MaterialDesignF.FILE_DOCUMENT), + BOOK(MaterialDesignB.BOOK_OPEN_PAGE_VARIANT), LATEX_CITATIONS(JabRefMaterialDesignIcon.TEX_STUDIO), - LATEX_FILE_DIRECTORY(MaterialDesignIcon.FOLDER_OUTLINE), - LATEX_FILE(MaterialDesignIcon.FILE_OUTLINE), - LATEX_COMMENT(MaterialDesignIcon.COMMENT_TEXT_OUTLINE), - LATEX_LINE(MaterialDesignIcon.FORMAT_LINE_SPACING), - PASSWORD_REVEALED(MaterialDesignIcon.EYE), - ADD_ABBREVIATION_LIST(MaterialDesignIcon.FOLDER_PLUS), - OPEN_ABBREVIATION_LIST(MaterialDesignIcon.FOLDER_OUTLINE), - REMOVE_ABBREVIATION_LIST(MaterialDesignIcon.FOLDER_REMOVE), - ADD_ABBREVIATION(MaterialDesignIcon.PLAYLIST_PLUS), - REMOVE_ABBREVIATION(MaterialDesignIcon.PLAYLIST_MINUS), - NEW_ENTRY_FROM_PLAIN_TEXT(MaterialDesignIcon.PLUS_BOX), - REMOTE_DATABASE(MaterialDesignIcon.DATABASE), - HOME(MaterialDesignIcon.HOME), - LINK(MaterialDesignIcon.LINK), - LINK_VARIANT(MaterialDesignIcon.LINK_VARIANT), - PROTECT_STRING(MaterialDesignIcon.CODE_BRACES); + LATEX_FILE_DIRECTORY(MaterialDesignF.FOLDER_OUTLINE), + LATEX_FILE(MaterialDesignF.FILE_OUTLINE), + LATEX_COMMENT(MaterialDesignC.COMMENT_TEXT_OUTLINE), + LATEX_LINE(MaterialDesignF.FORMAT_LINE_SPACING), + PASSWORD_REVEALED(MaterialDesignE.EYE), + ADD_ABBREVIATION_LIST(MaterialDesignF.FOLDER_PLUS), + OPEN_ABBREVIATION_LIST(MaterialDesignF.FOLDER_OUTLINE), + REMOVE_ABBREVIATION_LIST(MaterialDesignF.FOLDER_REMOVE), + ADD_ABBREVIATION(MaterialDesignP.PLAYLIST_PLUS), + REMOVE_ABBREVIATION(MaterialDesignP.PLAYLIST_MINUS), + NEW_ENTRY_FROM_PLAIN_TEXT(MaterialDesignP.PLUS_BOX), + REMOTE_DATABASE(MaterialDesignD.DATABASE), + HOME(MaterialDesignH.HOME), + LINK(MaterialDesignL.LINK), + LINK_VARIANT(MaterialDesignL.LINK_VARIANT), + PROTECT_STRING(MaterialDesignC.CODE_BRACES); private final JabRefIcon icon; - JabRefIcons(GlyphIcons... icons) { + JabRefIcons(Ikon... icons) { icon = new InternalMaterialDesignIcon(icons); } - JabRefIcons(Color color, MaterialDesignIcon... icons) { + JabRefIcons(Color color, Ikon... icons) { icon = new InternalMaterialDesignIcon(color, icons); } @Override - public Node getGraphicNode() { - return icon.getGraphicNode(); + public Ikon getIkon() { + return icon.getIkon(); } @Override - public String unicode() { - return icon.unicode(); - } - - @Override - public String fontFamily() { - return icon.fontFamily(); + public Node getGraphicNode() { + return icon.getGraphicNode(); } public Button asButton() { diff --git a/src/main/java/org/jabref/gui/icon/InternalMaterialDesignIcon.java b/src/main/java/org/jabref/gui/icon/InternalMaterialDesignIcon.java index cfc0c420e91..b16fb86c382 100644 --- a/src/main/java/org/jabref/gui/icon/InternalMaterialDesignIcon.java +++ b/src/main/java/org/jabref/gui/icon/InternalMaterialDesignIcon.java @@ -7,47 +7,42 @@ import javafx.scene.Node; import javafx.scene.paint.Color; -import javafx.scene.text.Text; -import org.jabref.gui.util.ColorUtil; - -import de.jensd.fx.glyphs.GlyphIcons; +import org.kordamp.ikonli.Ikon; +import org.kordamp.ikonli.javafx.FontIcon; public class InternalMaterialDesignIcon implements JabRefIcon { - private final List icons; + private final List icons; private Optional color; private final String unicode; - public InternalMaterialDesignIcon(Color color, GlyphIcons... icons) { + public InternalMaterialDesignIcon(Color color, Ikon... icons) { this(color, Arrays.asList(icons)); } - InternalMaterialDesignIcon(Color color, List icons) { + InternalMaterialDesignIcon(Color color, List icons) { this(icons); this.color = Optional.of(color); } - public InternalMaterialDesignIcon(GlyphIcons... icons) { + public InternalMaterialDesignIcon(Ikon... icons) { this(Arrays.asList(icons)); } - public InternalMaterialDesignIcon(List icons) { + public InternalMaterialDesignIcon(List icons) { this.icons = icons; - this.unicode = icons.stream().map(GlyphIcons::unicode).collect(Collectors.joining()); + this.unicode = icons.stream().map(Ikon::getCode).map(String::valueOf).collect(Collectors.joining()); this.color = Optional.empty(); } @Override public Node getGraphicNode() { - GlyphIcons icon = icons.get(0); - - Text text = new Text(unicode); - text.getStyleClass().add("glyph-icon"); - text.setStyle(String.format("-fx-font-family: %s;", icon.fontFamily())); - - color.ifPresent(color -> text.setStyle(text.getStyle() + String.format("-fx-fill: %s;", ColorUtil.toRGBCode(color)))); - return text; + Ikon icon = icons.get(0); + FontIcon fontIcon = FontIcon.of(icon); + fontIcon.getStyleClass().add("glyph-icon"); + color.ifPresent(fontIcon::setIconColor); + return fontIcon; } @Override @@ -62,7 +57,7 @@ public JabRefIcon withColor(Color color) { @Override public String name() { - return unicode; + return icons.get(0).toString(); } public String getCode() { @@ -70,12 +65,8 @@ public String getCode() { } @Override - public String unicode() { - return icons.get(0).unicode(); + public Ikon getIkon() { + return icons.get(0); } - @Override - public String fontFamily() { - return icons.get(0).fontFamily(); - } } diff --git a/src/main/java/org/jabref/gui/icon/JabRefIcon.java b/src/main/java/org/jabref/gui/icon/JabRefIcon.java index f11d4493d6a..c7d37eb2d53 100644 --- a/src/main/java/org/jabref/gui/icon/JabRefIcon.java +++ b/src/main/java/org/jabref/gui/icon/JabRefIcon.java @@ -3,16 +3,17 @@ import javafx.scene.Node; import javafx.scene.paint.Color; -import de.jensd.fx.glyphs.GlyphIcons; +import org.kordamp.ikonli.Ikon; -public interface JabRefIcon extends GlyphIcons { +public interface JabRefIcon { Node getGraphicNode(); - @Override String name(); JabRefIcon withColor(Color color); JabRefIcon disabled(); + + Ikon getIkon(); } diff --git a/src/main/java/org/jabref/gui/icon/JabRefIconView.java b/src/main/java/org/jabref/gui/icon/JabRefIconView.java index 60e3af62c5a..1c831ae2077 100644 --- a/src/main/java/org/jabref/gui/icon/JabRefIconView.java +++ b/src/main/java/org/jabref/gui/icon/JabRefIconView.java @@ -2,35 +2,49 @@ import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.css.Size; +import javafx.css.SizeUnits; + +import org.jabref.gui.icon.IconTheme.JabRefIcons; import com.tobiasdiez.easybind.EasyBind; -import de.jensd.fx.glyphs.GlyphIcon; +import org.kordamp.ikonli.javafx.FontIcon; -public class JabRefIconView extends GlyphIcon { +public class JabRefIconView extends FontIcon { /** * This property is only needed to get proper IDE support in FXML files * (e.g. validation that parameter passed to "icon" is indeed of type {@link IconTheme.JabRefIcons}). */ private final ObjectProperty glyph; + private final ObjectProperty glyphSize; - public JabRefIconView(IconTheme.JabRefIcons icon, String iconSize) { - super(IconTheme.JabRefIcons.class); + public JabRefIconView(JabRefIcons icon, int size) { + super(icon.getIkon()); this.glyph = new SimpleObjectProperty<>(icon); - EasyBind.subscribe(glyph, this::setIcon); - setIcon(icon); - setStyle(String.format("-fx-font-family: %s; -fx-font-size: %s;", icon.fontFamily(), iconSize)); + this.glyphSize = new SimpleObjectProperty<>(size); + + EasyBind.subscribe(glyph, glyph -> setIconCode(glyph.getIkon())); + EasyBind.subscribe(glyphSize, glyphsize -> setIconSize(glyphsize.intValue())); } public JabRefIconView(IconTheme.JabRefIcons icon) { - this(icon, "1em"); + + super(icon.getIkon()); + Size size = new Size(1.0, SizeUnits.EM); + this.glyph = new SimpleObjectProperty<>(icon); + this.glyphSize = new SimpleObjectProperty<>(9); + + int px = (int) size.pixels(getFont()); + glyphSize.set(px); + EasyBind.subscribe(glyph, glyph -> setIconCode(glyph.getIkon())); + EasyBind.subscribe(glyphSize, glyphsize -> setIconSize(glyphsize.intValue())); } public JabRefIconView() { - this(IconTheme.JabRefIcons.ERROR, "1em"); + this(IconTheme.JabRefIcons.ERROR); } - @Override public IconTheme.JabRefIcons getDefaultGlyph() { return IconTheme.JabRefIcons.ERROR; } @@ -46,4 +60,16 @@ public void setGlyph(IconTheme.JabRefIcons icon) { public ObjectProperty glyphProperty() { return glyph; } + + public void setGlyphSize(Number value) { + this.glyphSize.set(value); + } + + public ObjectProperty glyphSizeProperty() { + return glyphSize; + } + + public Number getGlyphSize() { + return glyphSize.getValue(); + } } diff --git a/src/main/java/org/jabref/gui/icon/JabRefIkonHandler.java b/src/main/java/org/jabref/gui/icon/JabRefIkonHandler.java new file mode 100644 index 00000000000..d35ad446bb6 --- /dev/null +++ b/src/main/java/org/jabref/gui/icon/JabRefIkonHandler.java @@ -0,0 +1,38 @@ +package org.jabref.gui.icon; + +import java.io.InputStream; +import java.net.URL; + +import org.kordamp.ikonli.AbstractIkonHandler; +import org.kordamp.ikonli.Ikon; + +public class JabRefIkonHandler extends AbstractIkonHandler { + + private static String FONT_RESOURCE = "/fonts/JabRefMaterialDesign.ttf"; + + @Override + public boolean supports(String description) { + return (description != null) && description.startsWith("jab-"); + } + + @Override + public Ikon resolve(String description) { + return JabRefMaterialDesignIcon.findByDescription(description); + } + + @Override + public URL getFontResource() { + return getClass().getResource(FONT_RESOURCE); + } + + @Override + public InputStream getFontResourceAsStream() { + return getClass().getResourceAsStream(FONT_RESOURCE); + } + + @Override + public String getFontFamily() { + return "JabRefMaterialDesign"; + } + +} diff --git a/src/main/java/org/jabref/gui/icon/JabRefMaterialDesignIcon.java b/src/main/java/org/jabref/gui/icon/JabRefMaterialDesignIcon.java index 0c241c14e02..0c934e8161a 100644 --- a/src/main/java/org/jabref/gui/icon/JabRefMaterialDesignIcon.java +++ b/src/main/java/org/jabref/gui/icon/JabRefMaterialDesignIcon.java @@ -1,6 +1,6 @@ package org.jabref.gui.icon; -import de.jensd.fx.glyphs.GlyphIcons; +import org.kordamp.ikonli.Ikon; /** * Provides the same true-type font interface as MaterialDesignIcon itself, but uses a font we created ourselves that @@ -12,37 +12,48 @@ * @see Tutorial on our Wiki * @see Material Design Icon custom page */ -public enum JabRefMaterialDesignIcon implements GlyphIcons { - - TEX_STUDIO("\ue900"), - TEX_MAKER("\ue901"), - EMACS("\ue902"), - OPEN_OFFICE("\ue903"), - VIM("\ue904"), - VIM2("\ue905"), - LYX("\ue906"), - WINEDT("\ue907"), - ARXIV("\ue908"), - COPY("\ue909"), - PASTE("\ue90a"), - SET_CENTER("\ue90b"), - SET_ALL("\ue90c"), - VSCODE("\ue90d"), - CANCEL("\ue90e"); - - private final String unicode; - - JabRefMaterialDesignIcon(String unicode) { - this.unicode = unicode; +public enum JabRefMaterialDesignIcon implements Ikon { + + TEX_STUDIO("jab-texstudio", '\ue900'), + TEX_MAKER("jab-textmaker", '\ue901'), + EMACS("jab-emacs", '\ue902'), + OPEN_OFFICE("jab-oo", '\ue903'), + VIM("jab-vim", '\ue904'), + VIM2("jab-vim2", '\ue905'), + LYX("jab-lyx", '\ue906'), + WINEDT("jab-winedt", '\ue907'), + ARXIV("jab-arxiv", '\ue908'), + COPY("jab-copy", '\ue909'), + PASTE("jab-paste", '\ue90a'), + SET_CENTER("jab-setcenter", '\ue90b'), + SET_ALL("jab-setall", '\ue90c'), + VSCODE("jab-vsvode", '\ue90d'), + CANCEL("jab-cancel", '\ue90e'); + + private String description; + private int code; + + JabRefMaterialDesignIcon(String description, int code) { + this.description = description; + this.code = code; + } + + public static JabRefMaterialDesignIcon findByDescription(String description) { + for (JabRefMaterialDesignIcon font : values()) { + if (font.getDescription().equals(description)) { + return font; + } + } + throw new IllegalArgumentException("Icon description '" + description + "' is invalid!"); } @Override - public String unicode() { - return unicode; + public String getDescription() { + return description; } @Override - public String fontFamily() { - return "\'JabRefMaterialDesign\'"; + public int getCode() { + return code; } } diff --git a/src/main/java/org/jabref/gui/icon/JabrefIconProvider.java b/src/main/java/org/jabref/gui/icon/JabrefIconProvider.java new file mode 100644 index 00000000000..f794bbccd47 --- /dev/null +++ b/src/main/java/org/jabref/gui/icon/JabrefIconProvider.java @@ -0,0 +1,11 @@ +package org.jabref.gui.icon; + +import org.kordamp.ikonli.IkonProvider; + +public class JabrefIconProvider implements IkonProvider { + + @Override + public Class getIkon() { + return JabRefMaterialDesignIcon.class; + } +} diff --git a/src/main/java/org/jabref/gui/util/BaseDialog.java b/src/main/java/org/jabref/gui/util/BaseDialog.java index ee1aec850a9..ee11f6db322 100644 --- a/src/main/java/org/jabref/gui/util/BaseDialog.java +++ b/src/main/java/org/jabref/gui/util/BaseDialog.java @@ -37,7 +37,7 @@ protected BaseDialog() { } }); - setDialogIcon(IconTheme.getJabRefImageFX()); + setDialogIcon(IconTheme.getJabRefImage()); setResizable(true); EasyBind.wrapNullable(dialogPaneProperty()) diff --git a/src/main/java/org/jabref/styletester/StyleTesterMain.java b/src/main/java/org/jabref/styletester/StyleTesterMain.java index 34a74309645..5a7c927e380 100644 --- a/src/main/java/org/jabref/styletester/StyleTesterMain.java +++ b/src/main/java/org/jabref/styletester/StyleTesterMain.java @@ -5,7 +5,6 @@ import javafx.stage.Stage; import org.jabref.gui.JabRefExecutorService; -import org.jabref.gui.icon.IconTheme; import org.jabref.gui.util.DefaultFileUpdateMonitor; import org.jabref.logic.JabRefException; import org.jabref.preferences.JabRefPreferences; @@ -24,8 +23,6 @@ public void start(Stage stage) throws JabRefException { StyleTesterView view = new StyleTesterView(); JabRefPreferences preferences = JabRefPreferences.getInstance(); - IconTheme.loadFonts(); - DefaultFileUpdateMonitor fileUpdateMonitor = new DefaultFileUpdateMonitor(); JabRefExecutorService.INSTANCE.executeInterruptableTask(fileUpdateMonitor, "FileUpdateMonitor"); diff --git a/src/main/resources/META-INF/services/org.kordamp.ikonli.IkonHandler b/src/main/resources/META-INF/services/org.kordamp.ikonli.IkonHandler new file mode 100644 index 00000000000..92a5abe689a --- /dev/null +++ b/src/main/resources/META-INF/services/org.kordamp.ikonli.IkonHandler @@ -0,0 +1 @@ +org.jabref.gui.icon.JabRefIkonHandler \ No newline at end of file diff --git a/src/main/resources/META-INF/services/org.kordamp.ikonli.IkonProvider b/src/main/resources/META-INF/services/org.kordamp.ikonli.IkonProvider new file mode 100644 index 00000000000..1de18d524f1 --- /dev/null +++ b/src/main/resources/META-INF/services/org.kordamp.ikonli.IkonProvider @@ -0,0 +1 @@ +org.jabref.gui.icon.JabrefIconProvider \ No newline at end of file diff --git a/src/test/java/module-info.test b/src/test/java/module-info.test index d028e69c829..62fcab1b133 100644 --- a/src/test/java/module-info.test +++ b/src/test/java/module-info.test @@ -32,4 +32,15 @@ io.github.classgraph --add-reads - org.jabref=io.github.classgraph + org.jabref=io.github.classgraph + +--add-modules + org.kordamp.ikonli.core,org.kordamp.ikonli.javafx,org.kordamp.ikonli.materialdesign2 + +--add-reads + org.kordamp.ikonli.IkonHandler=org.jabref.gui.icon.JabRefIkonHandler + +--add-reads + org.kordamp.ikonli.IkonProvider=org.jabref.gui.icon.JabrefIconProvider + +