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 images = new ArrayList<>(); private List 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(); } }