mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-27 13:14:42 -04:00
每隔两秒更换”小提示“。优化换行算法
This commit is contained in:
parent
b70ca5d0b0
commit
b7d538c1e9
@ -18,16 +18,22 @@
|
|||||||
package org.jackhuang.hmcl.ui.construct;
|
package org.jackhuang.hmcl.ui.construct;
|
||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
|
import javafx.animation.Animation;
|
||||||
|
import javafx.animation.KeyFrame;
|
||||||
|
import javafx.animation.Timeline;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.Priority;
|
import javafx.scene.layout.Priority;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
import javafx.util.Duration;
|
||||||
import org.jackhuang.hmcl.task.*;
|
import org.jackhuang.hmcl.task.*;
|
||||||
import org.jackhuang.hmcl.ui.FXUtils;
|
import org.jackhuang.hmcl.ui.FXUtils;
|
||||||
|
import org.jackhuang.hmcl.util.RandomTip;
|
||||||
import org.jackhuang.hmcl.util.TaskCancellationAction;
|
import org.jackhuang.hmcl.util.TaskCancellationAction;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@ -48,6 +54,7 @@ public class TaskExecutorDialogPane extends BorderPane {
|
|||||||
private final Label lblProgress;
|
private final Label lblProgress;
|
||||||
private final JFXButton btnCancel;
|
private final JFXButton btnCancel;
|
||||||
private final Label lblBottomTip;
|
private final Label lblBottomTip;
|
||||||
|
private final Timeline tipTimeline;
|
||||||
private final TaskListPane taskListPane;
|
private final TaskListPane taskListPane;
|
||||||
|
|
||||||
public TaskExecutorDialogPane(@NotNull TaskCancellationAction cancel) {
|
public TaskExecutorDialogPane(@NotNull TaskCancellationAction cancel) {
|
||||||
@ -78,8 +85,10 @@ public class TaskExecutorDialogPane extends BorderPane {
|
|||||||
lblBottomTip = new Label(getRandomTip());
|
lblBottomTip = new Label(getRandomTip());
|
||||||
lblBottomTip.setStyle("-fx-text-fill: rgba(100, 100, 100, 0.9)");
|
lblBottomTip.setStyle("-fx-text-fill: rgba(100, 100, 100, 0.9)");
|
||||||
lblBottomTip.setPadding(new Insets(0, 8, 0, 0));
|
lblBottomTip.setPadding(new Insets(0, 8, 0, 0));
|
||||||
BorderPane.setAlignment(lblBottomTip, Pos.CENTER);
|
|
||||||
bottom.setCenter(lblBottomTip);
|
HBox centerBox = new HBox(lblBottomTip);
|
||||||
|
centerBox.setAlignment(Pos.CENTER);
|
||||||
|
bottom.setCenter(centerBox);
|
||||||
|
|
||||||
btnCancel = new JFXButton(i18n("button.cancel"));
|
btnCancel = new JFXButton(i18n("button.cancel"));
|
||||||
bottom.setRight(btnCancel);
|
bottom.setRight(btnCancel);
|
||||||
@ -112,6 +121,10 @@ public class TaskExecutorDialogPane extends BorderPane {
|
|||||||
FileDownloadTask.speedEvent.channel(FetchTask.SpeedEvent.class).registerWeak(speedEventHandler);
|
FileDownloadTask.speedEvent.channel(FetchTask.SpeedEvent.class).registerWeak(speedEventHandler);
|
||||||
|
|
||||||
onEscPressed(this, btnCancel::fire);
|
onEscPressed(this, btnCancel::fire);
|
||||||
|
|
||||||
|
tipTimeline = new Timeline(new KeyFrame(Duration.seconds(2), e -> nextTip()));
|
||||||
|
tipTimeline.setCycleCount(Animation.INDEFINITE);
|
||||||
|
tipTimeline.play();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExecutor(TaskExecutor executor) {
|
public void setExecutor(TaskExecutor executor) {
|
||||||
@ -128,6 +141,7 @@ public class TaskExecutorDialogPane extends BorderPane {
|
|||||||
executor.addTaskListener(new TaskListener() {
|
executor.addTaskListener(new TaskListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onStop(boolean success, TaskExecutor executor) {
|
public void onStop(boolean success, TaskExecutor executor) {
|
||||||
|
tipTimeline.stop();
|
||||||
Platform.runLater(() -> fireEvent(new DialogCloseEvent()));
|
Platform.runLater(() -> fireEvent(new DialogCloseEvent()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -151,4 +165,10 @@ public class TaskExecutorDialogPane extends BorderPane {
|
|||||||
|
|
||||||
runInFX(() -> btnCancel.setDisable(onCancel == null));
|
runInFX(() -> btnCancel.setDisable(onCancel == null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void nextTip() {
|
||||||
|
String old = lblBottomTip.getText();
|
||||||
|
String next = RandomTip.getRandomTip(old);
|
||||||
|
Platform.runLater(() -> lblBottomTip.setText(next));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,14 @@ public class RandomTip {
|
|||||||
return formatTip(tip);
|
return formatTip(tip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getRandomTip(String previous) {
|
||||||
|
String tip;
|
||||||
|
do {
|
||||||
|
tip = tips.get(getRandomTipIndex());
|
||||||
|
} while (tips.size() > 1 && tip.equals(previous));
|
||||||
|
return formatTip(tip);
|
||||||
|
}
|
||||||
|
|
||||||
private static String formatTip(String tip) {
|
private static String formatTip(String tip) {
|
||||||
StringBuilder formattedTip = new StringBuilder();
|
StringBuilder formattedTip = new StringBuilder();
|
||||||
int lineLength = 0;
|
int lineLength = 0;
|
||||||
@ -53,9 +61,10 @@ public class RandomTip {
|
|||||||
charLength = 2; // One Chinese character is considered as two characters
|
charLength = 2; // One Chinese character is considered as two characters
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lineLength + charLength > 50) {
|
// avoid leaving a single punctuation on the new line
|
||||||
// 49 characters per line
|
if (lineLength + charLength > 51 &&
|
||||||
formattedTip.append("\n");
|
!(Character.toString(c).matches("\\p{P}") && lineLength + charLength == 52)) {
|
||||||
|
formattedTip.append('\n');
|
||||||
lineLength = 0;
|
lineLength = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user