152 lines
5.0 KiB
Java
152 lines
5.0 KiB
Java
package org.to.telegramfinalproject.UI;
|
|
|
|
import javafx.event.ActionEvent;
|
|
import javafx.fxml.FXML;
|
|
import javafx.fxml.FXMLLoader;
|
|
import javafx.scene.control.Button;
|
|
import javafx.scene.control.Label;
|
|
import javafx.scene.image.Image;
|
|
import javafx.scene.image.ImageView;
|
|
import javafx.scene.layout.HBox;
|
|
import javafx.scene.layout.StackPane;
|
|
import javafx.scene.shape.Circle;
|
|
import javafx.scene.paint.Color;
|
|
import javafx.scene.Node;
|
|
import javafx.scene.Scene;
|
|
import javafx.stage.Stage;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class IntroController {
|
|
@FXML private StackPane imagePane;
|
|
@FXML private Label caption;
|
|
@FXML private HBox dotContainer;
|
|
@FXML private Button startButton;
|
|
|
|
private List<Image> images = new ArrayList<>();
|
|
private List<String> captions = new ArrayList<>();
|
|
private int currentIndex = 0;
|
|
|
|
private final int width = 200;
|
|
private final int height = 200;
|
|
|
|
@FXML
|
|
public void initialize() {
|
|
loadSlides();
|
|
setupDots();
|
|
showSlide(currentIndex);
|
|
|
|
startAutoSlide();
|
|
}
|
|
|
|
private void loadSlides() {
|
|
images.add(new Image(getClass().getResource("/org/to/telegramfinalproject/Images/telegram_icon.png").toExternalForm()));
|
|
captions.add("🚀 The world's fastest messaging app.\nIt is free and secure.");
|
|
|
|
images.add(new Image(getClass().getResource("/org/to/telegramfinalproject/Images/fast.png").toExternalForm()));
|
|
captions.add("🚀 Telegram delivers messages \nfastest than any other application.");
|
|
|
|
images.add(new Image(getClass().getResource("/org/to/telegramfinalproject/Images/free.png").toExternalForm()));
|
|
captions.add("🎁 Telegram is free forever. No ads.\nNo subscription fees.");
|
|
|
|
images.add(new Image(getClass().getResource("/org/to/telegramfinalproject/Images/secure.png").toExternalForm()));
|
|
captions.add("🔒 Telegram keeps your messages \nsafe from hacker attacks.");
|
|
}
|
|
|
|
private void setupDots() {
|
|
dotContainer.getChildren().clear();
|
|
for (int i = 0; i < images.size(); i++) {
|
|
Circle dot = new Circle(5, Color.LIGHTGRAY);
|
|
dotContainer.getChildren().add(dot);
|
|
}
|
|
}
|
|
|
|
private void updateDots() {
|
|
for (int i = 0; i < dotContainer.getChildren().size(); i++) {
|
|
Circle dot = (Circle) dotContainer.getChildren().get(i);
|
|
if (i == currentIndex) {
|
|
dot.setFill(getSlideColor(i));
|
|
} else {
|
|
dot.setFill(Color.LIGHTGRAY);
|
|
}
|
|
}
|
|
}
|
|
|
|
private Color getSlideColor(int index) {
|
|
return switch (index) {
|
|
case 0 -> Color.DODGERBLUE; // Blue for Telegram logo
|
|
case 1 -> Color.FIREBRICK; // Red slide
|
|
case 2 -> Color.GOLDENROD; // Yellow slide
|
|
case 3 -> Color.SEAGREEN; // Green slide
|
|
default -> Color.GRAY;
|
|
};
|
|
}
|
|
|
|
private void showSlide(int index) {
|
|
imagePane.getChildren().clear();
|
|
|
|
ImageView imageView = new ImageView(images.get(index));
|
|
imageView.setFitWidth(180);
|
|
imageView.setFitHeight(180);
|
|
imageView.setPreserveRatio(true);
|
|
|
|
// Clip the image into a circle
|
|
Circle clip = new Circle(90, 90, 80); // centerX, centerY, radius
|
|
imageView.setClip(clip);
|
|
|
|
imagePane.getChildren().add(imageView);
|
|
caption.setText(captions.get(index));
|
|
updateDots();
|
|
}
|
|
|
|
|
|
private void startAutoSlide() {
|
|
Thread slider = new Thread(() -> {
|
|
while (true) {
|
|
try {
|
|
Thread.sleep(3000);
|
|
} catch (InterruptedException ignored) {}
|
|
|
|
javafx.application.Platform.runLater(() -> {
|
|
currentIndex = (currentIndex + 1) % images.size();
|
|
showSlide(currentIndex);
|
|
});
|
|
}
|
|
});
|
|
slider.setDaemon(true);
|
|
slider.start();
|
|
}
|
|
//
|
|
// @FXML
|
|
// private void handleStartMessaging(ActionEvent event) {
|
|
// try {
|
|
// FXMLLoader loader = new FXMLLoader(getClass().getResource("/org/to/telegramfinalproject/Fxml/login_view.fxml"));
|
|
// Scene loginScene = new Scene(loader.load());
|
|
//
|
|
// // Get the current stage and its dimensions
|
|
// Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
|
|
// double currentWidth = stage.getWidth();
|
|
// double currentHeight = stage.getHeight();
|
|
//
|
|
// // Set the new scene and apply the previous size
|
|
// stage.setScene(loginScene);
|
|
// stage.setWidth(currentWidth);
|
|
// stage.setHeight(currentHeight);
|
|
// stage.show();
|
|
// } catch (IOException e) {
|
|
// e.printStackTrace();
|
|
// }
|
|
// }
|
|
|
|
@FXML
|
|
private void handleStartMessaging(ActionEvent event) {
|
|
AppRouter.showLogin(); // همون Scene میمونه، فقط Root عوض میشه
|
|
}
|
|
|
|
@FXML private void goRegister() { AppRouter.showRegister(); }
|
|
|
|
|
|
}
|