From 6c1de5d4855ad003fbd2659bd142cb2c35b4c758 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sat, 26 Jan 2019 13:33:59 +0800 Subject: [PATCH] Improve tooltip UX --- .../main/java/org/jackhuang/hmcl/ui/FXUtils.java | 16 ++++++++++++++-- .../java/org/jackhuang/hmcl/ui/SettingsPage.java | 2 +- .../hmcl/ui/account/AccountListItemSkin.java | 13 ++++++++++--- .../jackhuang/hmcl/ui/construct/FileItem.java | 2 +- .../hmcl/ui/construct/IconedMenuItem.java | 2 +- .../hmcl/ui/construct/ImagePickerItem.java | 2 +- .../hmcl/ui/versions/DatapackListItem.java | 2 +- .../hmcl/ui/versions/GameListItemSkin.java | 2 +- .../org/jackhuang/hmcl/ui/versions/ModItem.java | 2 +- .../jackhuang/hmcl/ui/versions/VersionPage.java | 10 +++++----- 10 files changed, 36 insertions(+), 17 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index dd108dfcd..614ee0295 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -234,8 +234,20 @@ public final class FXUtils { } } - public static void installTooltip(Node node, String tooltip) { - installTooltip(node, 0, 5000, 0, new Tooltip(tooltip)); + public static void installFastTooltip(Node node, Tooltip tooltip) { + installTooltip(node, 50, 5000, 0, tooltip); + } + + public static void installFastTooltip(Node node, String tooltip) { + installFastTooltip(node, new Tooltip(tooltip)); + } + + public static void installSlowTooltip(Node node, Tooltip tooltip) { + installTooltip(node, 500, 5000, 0, tooltip); + } + + public static void installSlowTooltip(Node node, String tooltip) { + installSlowTooltip(node, new Tooltip(tooltip)); } public static void installTooltip(Node node, double openDelay, double visibleDelay, double closeDelay, Tooltip tooltip) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java index 079ae3266..75bf402b5 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -129,7 +129,7 @@ public final class SettingsPage extends SettingsView implements DecoratorPage { config().commonDirectoryProperty(), config().commonDirTypeProperty())); // ==== Update ==== - FXUtils.installTooltip(btnUpdate, i18n("update.tooltip")); + FXUtils.installFastTooltip(btnUpdate, i18n("update.tooltip")); updateListener = any -> { btnUpdate.setVisible(UpdateChecker.isOutdated()); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java index bc900d2d3..0eca64e0e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountListItemSkin.java @@ -21,9 +21,12 @@ import com.jfoenix.concurrency.JFXUtilities; import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXRadioButton; import com.jfoenix.effects.JFXDepthManager; + +import javafx.beans.binding.Bindings; import javafx.geometry.Pos; import javafx.scene.control.Label; import javafx.scene.control.SkinBase; +import javafx.scene.control.Tooltip; import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; @@ -36,6 +39,7 @@ import org.jackhuang.hmcl.ui.SVG; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorAccount; +import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer; public class AccountListItemSkin extends SkinBase { @@ -69,7 +73,10 @@ public class AccountListItemSkin extends SkinBase { subtitle.getStyleClass().add("subtitle"); subtitle.textProperty().bind(skinnable.subtitleProperty()); if (skinnable.getAccount() instanceof AuthlibInjectorAccount) { - FXUtils.installTooltip(subtitle, ((AuthlibInjectorAccount) skinnable.getAccount()).getServer().toString()); + Tooltip tooltip = new Tooltip(); + AuthlibInjectorServer server = ((AuthlibInjectorAccount) skinnable.getAccount()).getServer(); + tooltip.textProperty().bind(Bindings.createStringBinding(server::toString, server)); + FXUtils.installSlowTooltip(subtitle, tooltip); } VBox item = new VBox(title, subtitle); item.getStyleClass().add("two-line-list-item"); @@ -84,7 +91,7 @@ public class AccountListItemSkin extends SkinBase { btnRefresh.setOnMouseClicked(e -> skinnable.refresh()); btnRefresh.getStyleClass().add("toggle-icon4"); btnRefresh.setGraphic(SVG.refresh(Theme.blackFillBinding(), -1, -1)); - JFXUtilities.runInFX(() -> FXUtils.installTooltip(btnRefresh, i18n("button.refresh"))); + JFXUtilities.runInFX(() -> FXUtils.installFastTooltip(btnRefresh, i18n("button.refresh"))); right.getChildren().add(btnRefresh); JFXButton btnRemove = new JFXButton(); @@ -92,7 +99,7 @@ public class AccountListItemSkin extends SkinBase { btnRemove.getStyleClass().add("toggle-icon4"); BorderPane.setAlignment(btnRemove, Pos.CENTER); btnRemove.setGraphic(SVG.delete(Theme.blackFillBinding(), -1, -1)); - JFXUtilities.runInFX(() -> FXUtils.installTooltip(btnRemove, i18n("button.delete"))); + JFXUtilities.runInFX(() -> FXUtils.installFastTooltip(btnRemove, i18n("button.delete"))); right.getChildren().add(btnRemove); root.setRight(right); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java index 56af42ac8..7cbd5ac61 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/FileItem.java @@ -61,7 +61,7 @@ public class FileItem extends BorderPane { right.setGraphic(SVG.pencil(Theme.blackFillBinding(), 15, 15)); right.getStyleClass().add("toggle-icon4"); right.setOnMouseClicked(e -> onExplore()); - FXUtils.installTooltip(right, i18n("button.edit")); + FXUtils.installFastTooltip(right, i18n("button.edit")); setRight(right); Tooltip tip = new Tooltip(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/IconedMenuItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/IconedMenuItem.java index a008af282..49d915229 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/IconedMenuItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/IconedMenuItem.java @@ -30,7 +30,7 @@ public class IconedMenuItem extends IconedItem { } public IconedMenuItem addTooltip(String tooltip) { - FXUtils.installTooltip(this, tooltip); + FXUtils.installFastTooltip(this, tooltip); return this; } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java index 6c8b3afef..1a4bd7620 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ImagePickerItem.java @@ -63,7 +63,7 @@ public final class ImagePickerItem extends BorderPane { deleteButton.onMouseClickedProperty().bind(onDeleteButtonClicked); deleteButton.getStyleClass().add("toggle-icon4"); - FXUtils.installTooltip(selectButton, i18n("button.edit")); + FXUtils.installFastTooltip(selectButton, i18n("button.edit")); HBox hBox = new HBox(); hBox.getChildren().setAll(imageView, selectButton, deleteButton); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListItem.java index a7a8d04d7..7c8501b53 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/DatapackListItem.java @@ -44,7 +44,7 @@ public class DatapackListItem extends BorderPane { setCenter(modItem); JFXButton btnRemove = new JFXButton(); - FXUtils.installTooltip(btnRemove, i18n("datapack.remove")); + FXUtils.installFastTooltip(btnRemove, i18n("datapack.remove")); btnRemove.setOnMouseClicked(e -> deleteCallback.accept(this)); btnRemove.getStyleClass().add("toggle-icon4"); BorderPane.setAlignment(btnRemove, Pos.CENTER); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameListItemSkin.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameListItemSkin.java index 8b5013f30..a6de9f3f8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameListItemSkin.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/GameListItemSkin.java @@ -73,7 +73,7 @@ public class GameListItemSkin extends SkinBase { btnUpgrade.setOnMouseClicked(e -> skinnable.update()); btnUpgrade.getStyleClass().add("toggle-icon4"); btnUpgrade.setGraphic(SVG.update(Theme.blackFillBinding(), -1, -1)); - JFXUtilities.runInFX(() -> FXUtils.installTooltip(btnUpgrade, i18n("version.update"))); + JFXUtilities.runInFX(() -> FXUtils.installFastTooltip(btnUpgrade, i18n("version.update"))); right.getChildren().add(btnUpgrade); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModItem.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModItem.java index f9af3a7be..0a6eb2251 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModItem.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModItem.java @@ -47,7 +47,7 @@ public final class ModItem extends BorderPane { JFXButton btnRemove = new JFXButton(); JFXUtilities.runInFX(() -> { - FXUtils.installTooltip(btnRemove, i18n("mods.remove")); + FXUtils.installFastTooltip(btnRemove, i18n("mods.remove")); }); btnRemove.setOnMouseClicked(e -> deleteCallback.accept(this)); btnRemove.getStyleClass().add("toggle-icon4"); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java index bc933e727..9b089ec8e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java @@ -99,13 +99,13 @@ public final class VersionPage extends StackPane implements DecoratorPage { new IconedMenuItem(null, i18n("version.manage.clean"), FXUtils.withJFXPopupClosing(() -> Versions.cleanVersion(profile, version), managementPopup)).addTooltip(i18n("version.manage.clean.tooltip")) ); - FXUtils.installTooltip(btnDelete, i18n("version.manage.remove")); - FXUtils.installTooltip(btnBrowseMenu, i18n("settings.game.exploration")); - FXUtils.installTooltip(btnManagementMenu, i18n("settings.game.management")); - FXUtils.installTooltip(btnExport, i18n("modpack.export")); + FXUtils.installFastTooltip(btnDelete, i18n("version.manage.remove")); + FXUtils.installFastTooltip(btnBrowseMenu, i18n("settings.game.exploration")); + FXUtils.installFastTooltip(btnManagementMenu, i18n("settings.game.management")); + FXUtils.installFastTooltip(btnExport, i18n("modpack.export")); btnTestGame.setGraphic(SVG.launch(Theme.whiteFillBinding(), 20, 20)); - FXUtils.installTooltip(btnTestGame, i18n("version.launch.test")); + FXUtils.installFastTooltip(btnTestGame, i18n("version.launch.test")); setEventHandler(Navigator.NavigationEvent.NAVIGATED, this::onNavigated); }