diff --git a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java index d298b1530..40e177bd2 100644 --- a/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java +++ b/app/src/main/java/io/xpipe/app/browser/menu/impl/OpenNativeFileDetailsMenuProvider.java @@ -8,6 +8,7 @@ import io.xpipe.app.browser.menu.BrowserMenuCategory; import io.xpipe.app.browser.menu.BrowserMenuLeafProvider; import io.xpipe.app.core.AppI18n; +import io.xpipe.app.util.LabelGraphic; import javafx.beans.value.ObservableValue; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCodeCombination; @@ -41,4 +42,9 @@ public class OpenNativeFileDetailsMenuProvider implements BrowserMenuLeafProvide public boolean acceptsEmptySelection() { return true; } + + @Override + public LabelGraphic getIcon(BrowserFileSystemTabModel model, List entries) { + return new LabelGraphic.IconGraphic("mdi2f-folder-information-outline"); + } } diff --git a/app/src/main/java/io/xpipe/app/comp/base/ButtonComp.java b/app/src/main/java/io/xpipe/app/comp/base/ButtonComp.java index 1f0047a59..1b923bd48 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/ButtonComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/ButtonComp.java @@ -56,16 +56,15 @@ public class ButtonComp extends Comp> { var n = t.createGraphicNode(); button.setGraphic(n); if (n instanceof FontIcon f && button.getFont() != null) { - f.iconSizeProperty().bind(new ReadOnlyIntegerWrapper((int) - new Size(button.getFont().getSize(), SizeUnits.PT).pixels())); + f.setIconSize((int) + new Size(button.getFont().getSize(), SizeUnits.PT).pixels()); } }); }); button.fontProperty().subscribe(c -> { if (button.getGraphic() instanceof FontIcon f) { - f.iconSizeProperty() - .bind(new ReadOnlyIntegerWrapper((int) new Size(c.getSize(), SizeUnits.PT).pixels())); + f.setIconSize((int) new Size(c.getSize(), SizeUnits.PT).pixels()); } }); } diff --git a/app/src/main/java/io/xpipe/app/comp/base/DropdownComp.java b/app/src/main/java/io/xpipe/app/comp/base/DropdownComp.java index 39c97342b..c8f376ad1 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/DropdownComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/DropdownComp.java @@ -54,8 +54,7 @@ public class DropdownComp extends Comp> { var graphic = new FontIcon("mdi2c-chevron-double-down"); button.fontProperty().subscribe(c -> { - graphic.iconSizeProperty() - .bind(new ReadOnlyIntegerWrapper((int) new Size(c.getSize(), SizeUnits.PT).pixels())); + graphic.setIconSize((int) new Size(c.getSize(), SizeUnits.PT).pixels()); }); button.setGraphic(graphic); diff --git a/app/src/main/java/io/xpipe/app/comp/base/IconButtonComp.java b/app/src/main/java/io/xpipe/app/comp/base/IconButtonComp.java index 38bf38584..34db87f7d 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/IconButtonComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/IconButtonComp.java @@ -57,15 +57,14 @@ public class IconButtonComp extends Comp> { PlatformThread.runLaterIfNeeded(() -> { button.setGraphic(labelGraphic.createGraphicNode()); if (button.getGraphic() instanceof FontIcon fi) { - fi.iconSizeProperty().bind(new ReadOnlyIntegerWrapper((int) - new Size(button.getFont().getSize(), SizeUnits.PT).pixels())); + fi.setIconSize((int) + new Size(button.getFont().getSize(), SizeUnits.PT).pixels()); } }); }); button.fontProperty().subscribe((n) -> { if (button.getGraphic() instanceof FontIcon fi) { - fi.iconSizeProperty() - .bind(new ReadOnlyIntegerWrapper((int) new Size(n.getSize(), SizeUnits.PT).pixels())); + fi.setIconSize((int) new Size(n.getSize(), SizeUnits.PT).pixels()); } }); if (listener != null) { diff --git a/app/src/main/java/io/xpipe/app/comp/base/IntroComp.java b/app/src/main/java/io/xpipe/app/comp/base/IntroComp.java index 3c2347e29..8be08ae85 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/IntroComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/IntroComp.java @@ -50,7 +50,7 @@ public class IntroComp extends SimpleComp { var img = graphic.createGraphicNode(); if (img instanceof FontIcon fontIcon) { - fontIcon.iconSizeProperty().bind(new ReadOnlyIntegerWrapper(80)); + fontIcon.setIconSize(80); } var text = new VBox(title, introDesc); text.setSpacing(5); diff --git a/app/src/main/java/io/xpipe/app/comp/base/TileButtonComp.java b/app/src/main/java/io/xpipe/app/comp/base/TileButtonComp.java index 59b7c6159..60c6dd648 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/TileButtonComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/TileButtonComp.java @@ -103,7 +103,7 @@ public class TileButtonComp extends Comp { desc.heightProperty())); pane.prefHeightProperty().addListener((c, o, n) -> { var size = Math.min(n.intValue(), 100); - fi.getIcon().iconSizeProperty().bind(new ReadOnlyDoubleWrapper(size * iconSize)); + fi.getIcon().setIconSize((int) (size * iconSize)); }); bt.setGraphic(hbox); return Structure.builder() diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreIconComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreIconComp.java index 5ddb316c8..ebd25c3a6 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreIconComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreIconComp.java @@ -37,7 +37,7 @@ public class StoreIconComp extends SimpleComp { background.getStyleClass().add("background"); var dots = new FontIcon("mdi2d-dots-horizontal"); - dots.iconSizeProperty().bind(new ReadOnlyIntegerWrapper((int) (h * 1.3))); + dots.setIconSize((int) (h * 1.3)); var stack = new StackPane(background, storeIcon, dots); stack.setMinHeight(w + 5); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreIdentitiesIntroComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreIdentitiesIntroComp.java index 807c94531..948279565 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreIdentitiesIntroComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreIdentitiesIntroComp.java @@ -35,7 +35,7 @@ public class StoreIdentitiesIntroComp extends SimpleComp { introDesc.setMaxWidth(470); var img = new FontIcon("mdi2a-account-group"); - img.iconSizeProperty().bind(new ReadOnlyIntegerWrapper(80)); + img.setIconSize(80); var text = new VBox(title, introDesc); text.setSpacing(5); text.setAlignment(Pos.CENTER_LEFT); @@ -90,7 +90,7 @@ public class StoreIdentitiesIntroComp extends SimpleComp { syncPane.setAlignment(Pos.CENTER); var fi = new FontIcon("mdi2g-git"); - fi.iconSizeProperty().bind(new ReadOnlyIntegerWrapper(80)); + fi.setIconSize(80); var img = new StackPane(fi); img.setPrefWidth(100); img.setPrefHeight(120); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreIntroComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreIntroComp.java index 3b501bae6..4417c2281 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreIntroComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreIntroComp.java @@ -80,7 +80,7 @@ public class StoreIntroComp extends SimpleComp { importPane.setAlignment(Pos.CENTER); var fi = new FontIcon("mdi2g-git"); - fi.iconSizeProperty().bind(new ReadOnlyIntegerWrapper(80)); + fi.setIconSize(80); var img = new StackPane(fi); img.setPrefWidth(100); img.setPrefHeight(150); diff --git a/app/src/main/java/io/xpipe/app/hub/comp/StoreScriptsIntroComp.java b/app/src/main/java/io/xpipe/app/hub/comp/StoreScriptsIntroComp.java index 4b4cfe2d0..c509925d0 100644 --- a/app/src/main/java/io/xpipe/app/hub/comp/StoreScriptsIntroComp.java +++ b/app/src/main/java/io/xpipe/app/hub/comp/StoreScriptsIntroComp.java @@ -39,7 +39,7 @@ public class StoreScriptsIntroComp extends SimpleComp { introDesc.setMaxWidth(470); var img = new FontIcon("mdi2s-script-text"); - img.iconSizeProperty().bind(new ReadOnlyIntegerWrapper(80)); + img.setIconSize(80); var text = new VBox(title, introDesc); text.setSpacing(5); text.setAlignment(Pos.CENTER_LEFT); @@ -80,7 +80,7 @@ public class StoreScriptsIntroComp extends SimpleComp { importPane.setAlignment(Pos.CENTER); var fi = new FontIcon("mdi2t-tooltip-edit"); - fi.iconSizeProperty().bind(new ReadOnlyIntegerWrapper(80)); + fi.setIconSize(80); var img = new StackPane(fi); img.setPrefWidth(100); img.setPrefHeight(150); diff --git a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java index 990324e77..db46fdb00 100644 --- a/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java +++ b/app/src/main/java/io/xpipe/app/issue/ErrorHandlerDialog.java @@ -1,5 +1,6 @@ package io.xpipe.app.issue; +import atlantafx.base.theme.Styles; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.ModalButton; import io.xpipe.app.comp.base.ModalOverlay; @@ -33,7 +34,7 @@ public class ErrorHandlerDialog { var headerId = event.isTerminal() ? "terminalErrorOccured" : "errorOccured"; var errorModal = ModalOverlay.of(headerId, comp, new LabelGraphic.NodeGraphic(() -> { var graphic = new FontIcon("mdomz-warning"); - graphic.iconColorProperty().bind(new ReadOnlyObjectWrapper<>(Color.RED)); + graphic.pseudoClassStateChanged(Styles.STATE_DANGER, true); return graphic; })); if (event.getThrowable() != null && event.isReportable()) { diff --git a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java index 5d309f9b4..036d859c8 100644 --- a/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java +++ b/app/src/main/java/io/xpipe/app/prefs/TerminalCategory.java @@ -1,5 +1,6 @@ package io.xpipe.app.prefs; +import atlantafx.base.theme.Styles; import io.xpipe.app.comp.Comp; import io.xpipe.app.comp.base.*; import io.xpipe.app.core.AppI18n; @@ -61,9 +62,8 @@ public class TerminalCategory extends AppPrefsCategory { if (item != ExternalTerminalType.CUSTOM) { var graphic = new FontIcon( item.isRecommended() ? "mdi2c-check-decagram" : "mdi2a-alert-circle-check"); - graphic.iconColorProperty() - .bind(new ReadOnlyObjectWrapper<>( - item.isRecommended() ? Color.GREEN : Color.ORANGE)); + graphic.getStyleClass().add("graphic"); + graphic.getStyleClass().add(item.isRecommended() ? "supported" : "unsupported"); setGraphic(graphic); } else { setGraphic(new FontIcon("mdi2m-minus-circle")); diff --git a/app/src/main/resources/io/xpipe/app/resources/style/style.css b/app/src/main/resources/io/xpipe/app/resources/style/style.css index d58a2ef4e..71a727eef 100644 --- a/app/src/main/resources/io/xpipe/app/resources/style/style.css +++ b/app/src/main/resources/io/xpipe/app/resources/style/style.css @@ -158,3 +158,10 @@ -fx-padding: 3 10; } +.ikonli-font-icon.graphic.supported { + -fx-icon-color: -color-success-fg; +} + +.ikonli-font-icon.graphic.unsupported { + -fx-icon-color: -color-warning-fg; +} diff --git a/gradle/gradle_scripts/atlantafx-base-2.0.2.jar b/gradle/gradle_scripts/atlantafx-base-2.0.2.jar index f8ab683f9..b5af95a3d 100644 Binary files a/gradle/gradle_scripts/atlantafx-base-2.0.2.jar and b/gradle/gradle_scripts/atlantafx-base-2.0.2.jar differ