From e507f64aba87e4f200c6ccf9d9ef591db44d11a8 Mon Sep 17 00:00:00 2001 From: Asal Lotfi Date: Fri, 29 Aug 2025 17:41:54 +0330 Subject: [PATCH] Default user profile & saved messages & archived chat profile fixed. --- .../UI/ChatItemController.java | 76 ++++++++++++++++-- .../UI/MainController.java | 2 +- .../UI/SidebarMenuController.java | 2 +- .../{profile.png => default_profile.png} | Bin .../telegramfinalproject/CSS/dark_theme.css | 6 -- .../telegramfinalproject/CSS/light_theme.css | 6 -- .../telegramfinalproject/Fxml/chat_item.fxml | 34 ++++++-- 7 files changed, 100 insertions(+), 26 deletions(-) rename src/main/resources/org/to/telegramfinalproject/Avatars/{profile.png => default_profile.png} (100%) diff --git a/src/main/java/org/to/telegramfinalproject/UI/ChatItemController.java b/src/main/java/org/to/telegramfinalproject/UI/ChatItemController.java index e1e4d84..5fd3f33 100644 --- a/src/main/java/org/to/telegramfinalproject/UI/ChatItemController.java +++ b/src/main/java/org/to/telegramfinalproject/UI/ChatItemController.java @@ -1,12 +1,13 @@ package org.to.telegramfinalproject.UI; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.Node; import javafx.scene.control.Label; +import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.layout.StackPane; +import javafx.scene.shape.Circle; -import java.io.IOException; +import java.util.Objects; public class ChatItemController { @@ -15,12 +16,73 @@ public class ChatItemController { @FXML private Label lastMessage; @FXML private Label chatTime; @FXML private Label unreadCount; + @FXML private StackPane systemAvatar; + @FXML private ImageView profileImageUser; + @FXML private ImageView profileImageSystem; + @FXML private Circle systemCircle; - public void setChatData(String name, String lastMsg, String time, int unread) { + // Default avatar resource path + private static final String DEFAULT_AVATAR = + "/org/to/telegramfinalproject/Avatars/default_avatar.png"; + + /** + * Set chat item data, including a profile image (or default). + * + * @param name Chat name + * @param lastMsg Last message text + * @param time Last message time + * @param unread Unread message count + * @param imageUrl Path/URL of profile image (can be null/empty) + */ + public void setChatData(String name, String lastMsg, String time, int unread, String imageUrl) { chatName.setText(name); lastMessage.setText(lastMsg); chatTime.setText(time); - unreadCount.setVisible(unread > 0); - unreadCount.setText(String.valueOf(unread)); + + // Unread count + if (unread > 0) { + unreadCount.setVisible(true); + unreadCount.setText(String.valueOf(unread)); + } else { + unreadCount.setVisible(false); + } + + // Reset all avatar states + profileImageUser.setVisible(false); + profileImageUser.setManaged(false); + systemAvatar.setVisible(false); + systemAvatar.setManaged(false); + + if ("Saved Messages".equals(name)) { + systemCircle.setFill(javafx.scene.paint.Color.web("#2ca4ff")); // Telegram blue + profileImageSystem.setImage(new Image( + Objects.requireNonNull(getClass().getResourceAsStream( + "/org/to/telegramfinalproject/Icons/saved_messages_light.png")) + )); + systemAvatar.setVisible(true); + systemAvatar.setManaged(true); + + } else if ("Archived Chats".equals(name)) { + systemCircle.setFill(javafx.scene.paint.Color.web("#808080")); // gray + profileImageSystem.setImage(new Image( + Objects.requireNonNull(getClass().getResourceAsStream( + "/org/to/telegramfinalproject/Icons/archived_chats_light.png")) + )); + systemAvatar.setVisible(true); + systemAvatar.setManaged(true); + + } else if (imageUrl != null && !imageUrl.isEmpty()) { + profileImageUser.setImage(new Image(imageUrl, true)); + profileImageUser.setVisible(true); + profileImageUser.setManaged(true); + + } else { + profileImageUser.setImage(new Image( + Objects.requireNonNull(getClass().getResourceAsStream( + "/org/to/telegramfinalproject/Icons/default_profile.png")) + )); + profileImageUser.setVisible(true); + profileImageUser.setManaged(true); + } } -} \ No newline at end of file +} diff --git a/src/main/java/org/to/telegramfinalproject/UI/MainController.java b/src/main/java/org/to/telegramfinalproject/UI/MainController.java index 12bfc5d..535712c 100644 --- a/src/main/java/org/to/telegramfinalproject/UI/MainController.java +++ b/src/main/java/org/to/telegramfinalproject/UI/MainController.java @@ -164,7 +164,7 @@ public class MainController { FXMLLoader loader = new FXMLLoader(getClass().getResource("/org/to/telegramfinalproject/Fxml/chat_item.fxml")); Node chatItem = loader.load(); ChatItemController controller = loader.getController(); - controller.setChatData(name, lastMsg, time, unread); + controller.setChatData(name, lastMsg, time, unread, "/org/to/telegramfinalproject/Avatars/default_profile.png"); chatItem.setOnMouseClicked(e -> openChat(name)); chatListContainer.getChildren().add(chatItem); diff --git a/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java b/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java index 2d08572..0a492f0 100644 --- a/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java +++ b/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java @@ -42,7 +42,7 @@ public class SidebarMenuController { @FXML public void initialize() { // Load default profile image - Image profile = loadImage("/org/to/telegramfinalproject/Avatars/profile.png"); + Image profile = loadImage("/org/to/telegramfinalproject/Avatars/default_profile.png"); if (profile != null) profileImage.setImage(profile); setupButtonActions(); diff --git a/src/main/resources/org/to/telegramfinalproject/Avatars/profile.png b/src/main/resources/org/to/telegramfinalproject/Avatars/default_profile.png similarity index 100% rename from src/main/resources/org/to/telegramfinalproject/Avatars/profile.png rename to src/main/resources/org/to/telegramfinalproject/Avatars/default_profile.png diff --git a/src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css b/src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css index 91ecc12..8360317 100644 --- a/src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css +++ b/src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css @@ -267,12 +267,6 @@ -fx-cursor: hand; } -/* Avatar */ -.chat-avatar { - -fx-background-radius: 50; - -fx-border-radius: 50; -} - /* Chat details */ .chat-name { -fx-font-size: 14; diff --git a/src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css b/src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css index edeb0ee..f2b261d 100644 --- a/src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css +++ b/src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css @@ -266,12 +266,6 @@ -fx-cursor: hand; } -/* Avatar */ -.chat-avatar { - -fx-background-radius: 50; - -fx-border-radius: 50; -} - /* Chat details */ .chat-name { -fx-font-size: 14; diff --git a/src/main/resources/org/to/telegramfinalproject/Fxml/chat_item.fxml b/src/main/resources/org/to/telegramfinalproject/Fxml/chat_item.fxml index 821b74e..6846611 100644 --- a/src/main/resources/org/to/telegramfinalproject/Fxml/chat_item.fxml +++ b/src/main/resources/org/to/telegramfinalproject/Fxml/chat_item.fxml @@ -5,16 +5,40 @@ + - - + + + + + + + + + + + + + +