From 054f3db155f15b92a7f6299a74ad51c7c1389994 Mon Sep 17 00:00:00 2001 From: Asal Lotfi Date: Tue, 12 Aug 2025 22:45:46 +0330 Subject: [PATCH] Sidebar UI implemented. --- .../UI/SidebarMenuController.java | 158 +++++++++++++++++- .../UI/TelegramApplication.java | 3 +- .../telegramfinalproject/CSS/dark_theme.css | 52 ++++++ .../telegramfinalproject/CSS/light_theme.css | 52 ++++++ .../Icons/contacts_dark.png | Bin 0 -> 471 bytes .../Icons/contacts_light.png | Bin 0 -> 475 bytes .../Icons/my_profile_dark.png | Bin 0 -> 706 bytes .../Icons/my_profile_light.png | Bin 0 -> 495 bytes .../Icons/new_channel_dark.png | Bin 0 -> 895 bytes .../Icons/new_channel_light.png | Bin 0 -> 935 bytes .../Icons/new_group_dark.png | Bin 0 -> 691 bytes .../Icons/new_group_light.png | Bin 0 -> 719 bytes .../Icons/night_mode_dark.png | Bin 0 -> 781 bytes .../Icons/night_mode_light.png | Bin 0 -> 834 bytes .../Icons/saved_messages_dark.png | Bin 0 -> 806 bytes .../Icons/saved_messages_light.png | Bin 0 -> 830 bytes .../Icons/settings_dark.png | Bin 0 -> 510 bytes .../Icons/settings_light.png | Bin 0 -> 493 bytes .../Icons/telegram_features_dark.png | Bin 0 -> 825 bytes .../Icons/telegram_features_light.png | Bin 0 -> 886 bytes .../Icons/telegram_qna_dark.png | Bin 0 -> 1142 bytes .../Icons/telegram_qna_light.png | Bin 0 -> 1174 bytes .../to/telegramfinalproject/sidebar_menu.fxml | 43 +++-- 23 files changed, 284 insertions(+), 24 deletions(-) create mode 100644 src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css create mode 100644 src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/contacts_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/contacts_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/my_profile_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/my_profile_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/new_channel_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/new_channel_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/new_group_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/new_group_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/night_mode_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/night_mode_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/saved_messages_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/saved_messages_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/settings_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/settings_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/telegram_features_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/telegram_features_light.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/telegram_qna_dark.png create mode 100644 src/main/resources/org/to/telegramfinalproject/Icons/telegram_qna_light.png diff --git a/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java b/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java index 9a6915d..ffc2942 100644 --- a/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java +++ b/src/main/java/org/to/telegramfinalproject/UI/SidebarMenuController.java @@ -1,11 +1,26 @@ package org.to.telegramfinalproject.UI; +import javafx.animation.TranslateTransition; +import javafx.application.Platform; import javafx.fxml.FXML; -import javafx.scene.control.*; +import javafx.scene.Scene; +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.Region; +import javafx.scene.layout.VBox; +import javafx.util.Duration; -public class SidebarMenuController { +import java.net.URL; + +public class SidebarMenuController { + + private static final String CSS_PATH = "/org/to/telegramfinalproject/CSS/"; + private static final String ICON_PATH = "/org/to/telegramfinalproject/Icons/"; + + @FXML private VBox sidebarRoot; // fx:id must match FXML @FXML private ImageView profileImage; @FXML private Label usernameLabel; @@ -18,14 +33,143 @@ public class SidebarMenuController { @FXML private Button telegramFeaturesButton; @FXML private Button telegramQnAButton; - @FXML private ToggleButton nightModeToggle; + // Custom Telegram-style toggle + @FXML private HBox nightModeToggle; + @FXML private Region toggleThumb; + @FXML private ImageView nightModeIcon; + + private boolean nightModeOn = false; // start light by default @FXML public void initialize() { - Image image = new Image(getClass().getResource("/org/to/telegramfinalproject/Images/profile.png").toExternalForm()); - profileImage.setImage(image); + // Load default profile picture (if present) + Image profile = loadImage("/org/to/telegramfinalproject/Images/profile.png"); + if (profile != null) profileImage.setImage(profile); - // Called automatically after FXML is loaded - usernameLabel.setText("Asal"); + // Set up handlers and defer theme application until the scene is available + setupButtonActions(); + setupToggleAction(); + + // When the scene is set, apply the initial theme (light) and initialize icons/positions + sidebarRoot.sceneProperty().addListener((obs, oldScene, newScene) -> { + if (newScene != null) { + // Apply light theme at startup + updateTheme(false); + + // Position the thumb after layout pass (to use actual widths) + Platform.runLater(() -> { + double initialX = nightModeOn + ? nightModeToggle.getWidth() - toggleThumb.getWidth() - 4 + : 2; + toggleThumb.setTranslateX(initialX); + }); + } + }); } + + private void setupButtonActions() { + myProfileButton.setOnAction(e -> openMyProfile()); + newGroupButton.setOnAction(e -> createNewGroup()); + newChannelButton.setOnAction(e -> createNewChannel()); + contactsButton.setOnAction(e -> openContacts()); + savedMessagesButton.setOnAction(e -> openSavedMessages()); + settingsButton.setOnAction(e -> openSettings()); + telegramFeaturesButton.setOnAction(e -> openTelegramFeatures()); + telegramQnAButton.setOnAction(e -> openTelegramQnA()); + } + + private void setupToggleAction() { + nightModeToggle.setOnMouseClicked(e -> { + nightModeOn = !nightModeOn; + updateTheme(nightModeOn); + + // animate thumb + double targetX = nightModeOn + ? nightModeToggle.getWidth() - toggleThumb.getWidth() - 4 + : 2; + TranslateTransition tt = new TranslateTransition(Duration.millis(200), toggleThumb); + tt.setToX(targetX); + tt.play(); + }); + } + + /** + * Apply theme and swap icons. darkMode == true => apply dark theme (dark background), + * and use light (white) icons. darkMode == false => apply light theme and use dark icons. + */ + private void updateTheme(boolean darkMode) { + Scene scene = sidebarRoot.getScene(); + if (scene == null) return; // safety + + // clear & apply the correct stylesheet + scene.getStylesheets().clear(); + String cssFile = darkMode ? "dark_theme.css" : "light_theme.css"; + URL cssUrl = getClass().getResource(CSS_PATH + cssFile); + if (cssUrl != null) { + scene.getStylesheets().add(cssUrl.toExternalForm()); + } else { + System.err.println("CSS not found: " + CSS_PATH + cssFile); + } + + // Keep toggle's "on" class in sync + if (darkMode) { + if (!nightModeToggle.getStyleClass().contains("on")) + nightModeToggle.getStyleClass().add("on"); + } else { + nightModeToggle.getStyleClass().remove("on"); + } + + // Icon file suffix mapping: + // - For darkMode == true (dark background) we want white icons => use "_light.png" + // - For darkMode == false (light background) we want dark icons => use "_dark.png" + String iconSuffix = darkMode ? "_light.png" : "_dark.png"; + + setIcons(iconSuffix); + + // night mode icon itself (moon) + Image moon = loadImage(ICON_PATH + "night_mode" + iconSuffix); + if (moon != null) nightModeIcon.setImage(moon); + } + + private void setIcons(String suffix) { + myProfileButton.setGraphic(makeIcon(ICON_PATH + "my_profile" + suffix)); + newGroupButton.setGraphic(makeIcon(ICON_PATH + "new_group" + suffix)); + newChannelButton.setGraphic(makeIcon(ICON_PATH + "new_channel" + suffix)); + contactsButton.setGraphic(makeIcon(ICON_PATH + "contacts" + suffix)); + savedMessagesButton.setGraphic(makeIcon(ICON_PATH + "saved_messages" + suffix)); + settingsButton.setGraphic(makeIcon(ICON_PATH + "settings" + suffix)); + telegramFeaturesButton.setGraphic(makeIcon(ICON_PATH + "telegram_features" + suffix)); + telegramQnAButton.setGraphic(makeIcon(ICON_PATH + "telegram_qna" + suffix)); // prefer safe filename + } + + private Image loadImage(String path) { + URL res = getClass().getResource(path); + if (res == null) { + System.err.println("Resource not found: " + path); + return null; + } + return new Image(res.toExternalForm()); + } + + private ImageView makeIcon(String path) { + ImageView iv = new ImageView(); + Image img = loadImage(path); + if (img != null) { + iv.setImage(img); + iv.setFitWidth(22); + iv.setFitHeight(22); + iv.setPreserveRatio(true); + } + return iv; + } + + // Example button actions + private void openMyProfile() { System.out.println("Opening My Profile..."); } + private void createNewGroup() { System.out.println("Creating New Group..."); } + private void createNewChannel() { System.out.println("Creating New Channel..."); } + private void openContacts() { System.out.println("Opening Contacts..."); } + private void openSavedMessages() { System.out.println("Opening Saved Messages..."); } + private void openSettings() { System.out.println("Opening Settings..."); } + private void openTelegramFeatures() { System.out.println("Opening Telegram Features..."); } + private void openTelegramQnA() { System.out.println("Opening Telegram Q&A..."); } } diff --git a/src/main/java/org/to/telegramfinalproject/UI/TelegramApplication.java b/src/main/java/org/to/telegramfinalproject/UI/TelegramApplication.java index 596c359..1adeb51 100644 --- a/src/main/java/org/to/telegramfinalproject/UI/TelegramApplication.java +++ b/src/main/java/org/to/telegramfinalproject/UI/TelegramApplication.java @@ -5,7 +5,6 @@ import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; -import org.to.telegramfinalproject.HelloApplication; import java.io.IOException; @@ -15,7 +14,7 @@ public class TelegramApplication extends Application { FXMLLoader fxmlLoader = new FXMLLoader(TelegramApplication.class.getResource("/org/to/telegramfinalproject/sidebar_menu.fxml")); Scene scene = new Scene(fxmlLoader.load(), 1480, 820); - scene.getStylesheets().add(getClass().getResource("/org/to/telegramfinalproject/CSS/sidebar_menu.css").toExternalForm()); + scene.getStylesheets().add(getClass().getResource("/org/to/telegramfinalproject/CSS/light_theme.css").toExternalForm()); stage.setTitle("Telegram"); stage.setScene(scene); diff --git a/src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css b/src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css new file mode 100644 index 0000000..0b92773 --- /dev/null +++ b/src/main/resources/org/to/telegramfinalproject/CSS/dark_theme.css @@ -0,0 +1,52 @@ +/* Sidebar buttons */ +.sidebar-btn { + -fx-background-color: transparent; + -fx-text-fill: white; + -fx-font-size: 14px; + -fx-pref-width: 230; + -fx-alignment: CENTER_LEFT; + -fx-padding: 8 0 8 16; +} +.sidebar-btn:hover { + -fx-background-color: #2f3e50; + -fx-cursor: hand; +} + +/* Telegram-style toggle switch */ +.telegram-toggle { + -fx-background-color: #555; + -fx-background-radius: 15; + -fx-padding: 2; + -fx-pref-width: 40; + -fx-pref-height: 20; + -fx-alignment: center-left; + -fx-cursor: hand; +} +.telegram-toggle.on { + -fx-background-color: #4fa8f0; +} +.toggle-thumb { + -fx-background-color: white; + -fx-background-radius: 50%; + -fx-pref-width: 16; + -fx-pref-height: 16; + -fx-effect: dropshadow(gaussian, rgba(0,0,0,0.2), 3, 0, 0, 1); +} + +/* Separator */ +.thin-separator { + -fx-background-color: transparent; + -fx-padding: 0; +} +.thin-separator .line { + -fx-border-color: #2e3948; /* Telegram's subtle dark line */ + -fx-border-width: 0.5px; +} + +/* Theme background & text */ +#sidebarRoot { + -fx-background-color: #1b2735; /* dark theme */ +} +.button, .label { + -fx-text-fill: white; +} diff --git a/src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css b/src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css new file mode 100644 index 0000000..7ef5c23 --- /dev/null +++ b/src/main/resources/org/to/telegramfinalproject/CSS/light_theme.css @@ -0,0 +1,52 @@ +/* Sidebar buttons */ +.sidebar-btn { + -fx-background-color: transparent; + -fx-text-fill: black; + -fx-font-size: 14px; + -fx-pref-width: 230; + -fx-alignment: CENTER_LEFT; + -fx-padding: 8 0 8 16; +} +.sidebar-btn:hover { + -fx-background-color: #e6e6e6; + -fx-cursor: hand; +} + +/* Telegram-style toggle switch */ +.telegram-toggle { + -fx-background-color: #aaa; + -fx-background-radius: 15; + -fx-padding: 2; + -fx-pref-width: 40; + -fx-pref-height: 20; + -fx-alignment: center-left; + -fx-cursor: hand; +} +.telegram-toggle.on { + -fx-background-color: #4fa8f0; +} +.toggle-thumb { + -fx-background-color: white; + -fx-background-radius: 50%; + -fx-pref-width: 16; + -fx-pref-height: 16; + -fx-effect: dropshadow(gaussian, rgba(0,0,0,0.2), 3, 0, 0, 1); +} + +/* Separator */ +.thin-separator { + -fx-background-color: transparent; + -fx-padding: 0; +} +.thin-separator .line { + -fx-border-color: #ccc; + -fx-border-width: 0.5px; +} + +/* Theme background & text */ +#sidebarRoot { + -fx-background-color: white; +} +.button, .label { + -fx-text-fill: black; +} diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/contacts_dark.png b/src/main/resources/org/to/telegramfinalproject/Icons/contacts_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2c8168104dbf761733dd1967f479b84a2a46986b GIT binary patch literal 471 zcmV;|0Vw{7P)%g8%2zw;P45$6+xG35Lcp!1OA2tMPgQ( zmBT`RLfonGGsI!5Nbm#V6h(*{m4X{6f=Qe1YEbA4Z_!ov-TS)wy=sUM;UA(G$O0F@ zi{c#E0D8hUp9hM-SB-cAX2Uf9l+htD3bZN4fFtddfn*rRUX;N~9p0)qk3hG}0?_CyfCQ;MvUWki(>au{0 zM9rvq;Y8fD%L4jv2b%p9uqc5mpWo8t zTuWoYPXPx?Ucx_8(%AQtoLBN-fC7fB(QFv6O709$K$kR(R)h$D6WPYxIBVhMbKkn5KrQgD87aSCB&RG zCzpf1gm^Q?#}K1eMS>3yw6Et>(ZBpUI+offxXGr)^P!ydT3;+Aa&cx)m-pSTY;16)Wn>VX>*_uOWHj6`!D zxM$*~Z3Y+t?j@XRz)Oo$GFR7H00Z-J0X}4q*R+RKG1txwXE786fP}tu^$4>X*n4qd~S5!Yb1Rr5s& zy#X_N76+=o9DUUpK44Zo1`B@8yIjYbtXZ4VO(>~Ofyo-qx_XO1r=I|;61evBE;Tzh z(pd2m;8@LTO*j8&B&BiWr@5%+@fHG1I9Jn8b4AVlEd&^lM#Zm28*PMw#y7hu>e7Oi Rs>T2S002ovPDHLkV1l8$#Yg}E literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/my_profile_dark.png b/src/main/resources/org/to/telegramfinalproject/Icons/my_profile_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6d232031552a1dd2803b617c333dac4c67b799ca GIT binary patch literal 706 zcmV;z0zLhSP)y{SvC)+abQ*+Th4tvk<1qNk#}q7P#%rX?L7hF$96 z)eP@}U%)u9Q#Kl%gXlm~s0vaX)~)!=G5QcV4IFZ=*e!C>&iPZo1IO8?z*gY8{#%L@ z(dAr5gHG@6B|Tb!*Ur7MtW^1zTM#26f79;`vg4*_<5m`OPQ4xF^b^pWfo}!7;P5j) zNKlTWv%jn&Izcjefv*m4T~9JM5@TM4+sLgEca^{|U=FH4hRryM zTUf+$o)@@@6M^|x@=3hLZJfqVbo1=OH16OPj;)1w6RzMH_P4-~;yEs((cQtm+^x-C{q!&SV{aO8 z_b^rGh_#z81a!v=j+Md>}G|phQF2Pi+*ow_LpTj+cfgayLzFSJnZ;8PD zxUi**wwM(M`5Yc&xS<`xiJ8rq1KH}qQosaW;%e$qw?y6((@h<^mP&A>U%*9t3wiEG z-V+m2{x#aw2HeRcQO#Hj{K5QhTxccNJ%LA49Uou@d$BFgKAg)oF7$0nLz2Oi@EGEJ lTp)bR=j-t&D-LwS*bhZXap(CnrVjuB002ovPDHLkV1mn# literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/new_channel_dark.png b/src/main/resources/org/to/telegramfinalproject/Icons/new_channel_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..156c170ea0b0c89ec2ce597b605c79634577d1ea GIT binary patch literal 895 zcmV-_1AzRAP)g-3U)NLviF1MgE{(m=|101dq$-02qjXSq8k5=U0Il6i98rs3bzQ^wOv>T{5W)5#I$l-K<|*IP_Mta%Qd; z+^b{yLcy%l z5@4R>RT!8aF?OPgG3pM}7Lx!Q4yG$10p^iSp6QiZ%xeO44f8>s?{a95!!oFb>=IEcpvM5sJ4 zbAUtIzFf6$z*z_RC>KOl80G(`fv+0C3xTTX-n?W1VFR;9lIExpw0mR=Q1gT6Aq}F% z;x{^sil_a+J;VRIwG&9M2hjtT5K%B;`z%Fe*2SP|seqf1D*<)lmqiPWJQLTv+=cA4 z+mpV?gNDTc3mgj^BWx}-j1W~$ZS$-rzM8ORC z2AOA3OPPV41Z}Qn-aw+O;) z32YenE&pGSf-wOB+JPb9PO8BNrqi(ewE-Q#+c=mc5K0iQWz4m#Kqdm;-7U??ZR<5k$GEesI}u0DE0P6eM6DVs2nA zKUJWXHdWJMtNhBohNUmIs;YovARg-w+C6I+U>0ytJC`ec0nS#Nk1B$&g^~Gx3izx6 zJQt|+&gK|En7{xlRnn9yKwq@G)Da*x0Id-{pg}Zy2@1fd^|TMTADI6a{0?N+jp$wz zhzJ;8A5~FlyBSn1X+Dq1D}i>)@6HS4nJA_IE(F+aa{f+$(DO`~V&8>05wOj+jtYTj z4p}n=)0a9<1k6{CfS`Y-8K01*K*kTpnCQY{s-up^;EcC&0i zBBsSM?Oum%0U5A2=CW!|RKWR&^kN@sS-K}`VH?=%&l;vlGP2qLe5rE#yea@~gA9!8 z(`{rT31AbjF{tX)lk$9A>SIdFAC*7{CBiWYLd0ZSiCc1FV;OFTK2r@#mCv zs#^$b(7Gaj-#69^Ob_9D08IDlMZiqygbd2Mc%hy|T|sym=?|*-v`vr0kO~+Z!L{z z`~f1ie*6yY{b(`qs|3_UZEQd-h|y>RBG7Qnm_u^dU6(n#ckW)3d6G#sJA2-9W_D)Y z%|av+iA35!FK`QZ1N@Tq8km*7PSf4RDDVYn{-b>cM(7;fUDSc)oFqGK3FxDG-4wG* zY!#RS4oaJndprFzRIi)jtrEJD?&hlMcWbw5-4wr-&|tco1FCUC4B8xpNiy>9NS zo({Bxrdz0+;$~vAU6xa!FJrUa=m6c!<8CR?F&aWQ6K5u$a*`}349C}9t-7V?k=MQ` zn`%w2XQZ#FyY_hMwuQF2Ybe_0u0EUt7Jw~}867X-uHzp1TT;uUrTC_y^_Otheq*ll zJ_A@Ziq;Cat2>z-HDj)Mp8@D)GeGt3I-ue>nI3`P_8yE)809_PkpJ)t= zW?gbLB&R-5Hk9Y=Nkani*7977etq-;Pxr{>Jm#WR*p2o@&RTY}@}LIdmpZUQfXRlSyg8#2~wy4wJb0H0{jM_?rC5#4P7bzqt9ya)D1CF{1J zud>MxU=lc}*Q7pcG98ty+XC>)2whGXzhcIhqLOu60Dc>x{R!g-%=oXUWZf1d*dx); zsAS!4uX-xb5}L|OH!0DK5t5B{Nlpd5;+ySy*}CnHJ2}ci9HY7Gwo5hweCUv5*&2?k zyZY*80@$su{e^5Qz2tsc#?rbgj=F_Vn7f9eFn4tUI14-nHXLSjJgvI|;|}^8TFV)q z;(h2#>#jhbXRdQD4ag?)p_am3SM^!VGuNU^19sW;_ke5no49qCfWNpV3GJ@<)Rdut zVD5@%1K-W>4|^uc-Cfx-$0pxg0v?%wcfhD;!ra^y7zW;&dS+dMPRM34L2^F}G=QVJ zRCWP_z$svdPf@X4J5^&)HS3zAp*ih=vext*7vY8mbYd=#zdqRd_nmUF(;trX(FJY_fT*yOH$ZKH8A!Z18 zW8xkZQ*ClF$78N7oBAGb9vIN?{hHp(v-`1)zwYd=0h_q!;Mz$@jGw!PLe1`(NAXWH zxoaqZlfYeI0r;%5yr%c^?2dda1}mVVq9Xd|_ybr-7mJ-0-0lDX002ovPDHLkV1mxv BPpkj{ literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/night_mode_dark.png b/src/main/resources/org/to/telegramfinalproject/Icons/night_mode_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebf9f67b168b5447a3603d811eeed1ed8b75203 GIT binary patch literal 781 zcmV+o1M>WdP)>V zkxSAjQA)`*ip+z{ywP}3Jb5tl;Ke;f?lj0`$R+pd(bj+0*Xhihee8XlHQB#f4}0(L zTkF5pUbpXqn3$NDGz;diqN#F}Gh&I4b;1uvn!fhFW!?Xjcfgfpvd!-hK z=>eQKV!r`3z)L+p2TE|1Zoo|={;KBsMDuPlj#4bazR)8;M}4c&yRSeQj&jn7Kd5!! z^H}dM;wV){{Mi)orRLiK9Ha~IN&*`t*fPp=U}qA_ zbtHi!6lF0rrW)JHIKluUYC#6u_U4XMk3*4FQe}Ps`@z{Sw<`r@9MCM^@4#N5YZm@Rz*gWs zu!|5(FzaAhmcCwU<%aS944eQKD~c;fu`dT^0mp%N#_vtob-@ z5U@>yGZvU(@=SF^#B4J{mw-;>h6+t7|19YlW#varC+hxUJ!GOgaL2TWdx7RtqbyJ6z zXI;lX!VB)#q>Nlr2iJCB3eeXq_7ZJ}3xUJHixj`xz1 literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/night_mode_light.png b/src/main/resources/org/to/telegramfinalproject/Icons/night_mode_light.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9515a7036d11dbc3c50cfefdaff79009164980 GIT binary patch literal 834 zcmV-I1HJr-P)w@G;Sb%} zm}&(xu_cK89na#c^87hYOf`b(cqfS8na4UV4e!>Z8o>!gaEA>zwzTCxkogTWQjOrH zAbx$G2chlL^8SrfBUlo|zt#{xHMFfuwSnXDbrJYk7Tjn*KP0d+)dubf0&nWlepzT= zl4=4Iv8OY>^2s=oXCV!1DMk5(7;u}_KH*kI4g*{c?{d5!x?F7s_16bVQ~-k z*ZpJ7qVZ8V3OFSQTG6A=)?)t+&P+!VObCVy~fbmYx`ve}qQ+OI{^T)x3xHi<8HVq^`bb3ShLfbKE zD1o~tmxq)xyiQKT0?&mcHuXCndWe4#-V1#!O+)Tr5?&7-Y|C|`A;q4Hk3;OW!-(6h zqp9U;+2NBxPM;30a;xz}h`D~ast@h-IK0wWIX36&L?1Eo>GekJ3Ndn>^{&GzzERx0 zqw(dGjq4#?i8DHrJ=aR}a)?{-48Caiy^D*-MSLTX(@Kf4vu^jxe%zZkym1%b=Fs4Lk}D7$Vx%-vePZcc1f*-PeEb7yX8X=!Qs8~c)#T#{v%ivR!s M07*qoM6N<$f}mxZW&i*H literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/saved_messages_dark.png b/src/main/resources/org/to/telegramfinalproject/Icons/saved_messages_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3abefc98f5fbe430f07925e00d76914d6b2539 GIT binary patch literal 806 zcmV+>1KIqEP)V=Bx8tJ$5{B%4Qz|o|*)C;7!6M zZ}|Is2>5Ff)Op~qGyIY(aoA7n3xUrZnSdfNr2JCXq<~w>f3sEvafL0#~?x}!Y58M-g+s;=$oph3VpiS$fu`y;xmV7mV7PC>>9sdz9h8n>lU^&nT z{4^rA15=Vna1rVUDv<1jpyzKDw6uHTT9w{t`D&>X5E?jW9Ru*Wp%ZWcwX)`BZ z;;P}=Um*UXiIwHGD%|Kf!_`?J_S9%r9$y0P8?IIQOeXXaV5$?_Wn#}(i-0eNs|i@E zz9-NPY_f@6ZDME^|B7%*inEj$#Gm)Fy=EHqhU)98N6Iwp$IJ)D;o1&^b}L zr5{)}Li+)Y`(6nF9nMKg$`#;}^GvMq-WVenBskBCCa;h1H-qY7LbU5!wJ~xF(Nt*x zau|Q>{O<*@G@|`nb2Sr|ufV3X1pG7PG8qp#&xUpK<_cKjBTl{~S^qU0X zWD84PZ`F#097f)cFxj8@5U?dCnT+MxW$;aNtg`)*>+ytkGv+@7yMeI@+{!)Homsrj k22#MJG?HYP)VGU4B0UQQq#Bu&Z zh`z@RegW_~BCzcdw$r7x&V|>&v|gtnrOW3ox^I&I+Qtz#0DAaIu9j2lSRAxEg^siq_2sU+YDun)`uJI;!~fkvR&vAqEqU=qjy=jDRWc%*m* zmVpk3Hv}AbxPfALQ3E`Rv;kZIcR;elf<}NB;0oB1uf?eKkuxHgLn8F8U(&rxmSdn# z-|F?Wpn1hu@+BBk03+-I)v|X3A08>p)+J5@aOp@o9<^oD_EW^PY&p%dK&wX9S%{%m z^8%2f42rubZv9#FHiy$L+mjlyEl%sc#Y_3FY8exgjnt!Sgy%^U4 z1v)T0ICPN3UAd#+9CEdj^b44!#5K)3_qbk9yOKw`qBagahndh7w-^gih4vtV70tCA zteB#ZR54nM*p%-rP!;7c9Z~-KYI;R<0xQ~0m^(okoB?~llw@;*G^yczJGN~#Mq9)w z6`)0}Ignh#dbbunKulQkNMW{L{bkO_nc(l@2M1NCo3;>akN^Mx07*qoM6N<$g3Zs` AxBvhE literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/settings_light.png b/src/main/resources/org/to/telegramfinalproject/Icons/settings_light.png new file mode 100644 index 0000000000000000000000000000000000000000..5668acb81874c344e24bf522ab86f39a9dca3252 GIT binary patch literal 493 zcmV{DIYPY0&!tH8*Nv z&8lg$92A(5h4sajr5>;6`apvg9JuVe_TK00z0W$4$bSH^0X)*d1F$~H1XuK;G^yYP z;0tH~Gg=MV3Zn*_RypQ@3~=P^_}by!ICkTtfdwm@#Rv;N3*5=cc39Q-Gq44u9BxXs zia1sI7;Y_=FTu7Gu&(c8AkpW<32_Xc@-^%PiF3dQ@S_sNflVMfL|LQa#^w91SaU9E zS(#sfTu7tOfj5=o49I(UImIw61$S|&A1~H4=iegm?io|FWgT8dzJ`mQ(*rT!Nrd+J z0sFG;s<|nB8}!4k`C;)IS_${H_P0wVf_+h#!4_`iPBo5m1sbd zvp~($bflslDiw~{ zl|5otQF2%8(z5x)uIv>%IZgqql4}ccI6$tgqz8^%uUU*iW&OJcCk#NzGp3VyGL^uN jZV!D6_hy?|f^qN*`=q$gGRCt{2nZ0WiK^Vq=m*`2wRw==oK`@z65 zH~T#E?(91|GYd5m(*?X>3Q$m)^b~4=R2fqykVn8ns)RP+E)WIujDS19i7Z8L>+yIM zD40lI1$lcBE)`4*&<=D0y}(bEUe&d$O%`5d;TrS+Ip;t7-3q*SlDkx~w!4ey^n@7w zNJe&d>r~eSJaIbs8Mpv!1)70bD$T01|GqfwyMZOrs#Ab3L*-+97dHWe>X3DAKTx0G zdTVn4=+m_W(qhyI1;LDesUsb_>uH${+>(ZA#lZxl$r*{W72ZXAoX$BT(?lS0PEK?< zxl##r&d79!dc0bloG9mU8t*adm-a3^lXIq6OYE#UDD8K6rp1|Jlgv(Osdr|w)p+EX zOwN1sxF`=>-+7}`CfhuEY?sG9j~;xG$x@FV&CU|0>{;Veku{O+Ct`+G*N8tFL-ymE)?b@n7&4tuZre`8JYZ00000NkvXXu0mjf Ddy0JS literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/telegram_features_light.png b/src/main/resources/org/to/telegramfinalproject/Icons/telegram_features_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2d15e68513cf56c163ed4393df66c4b67589824c GIT binary patch literal 886 zcmV-+1Bv{JP)wp2=64fAS?W zch2|!pL3t*o-wA3XaKGQcg%DL0yEt~Igo_me+ncG+%QQ1unV{dq)Mon0?q?FLy}&Q z88Qsi2P4j{S1(!?y`g)@5sv^3IqWKc<-h^p8ZZWYk!Mue_5;iEXf=q2>$sFgFFAps zECFl*9upnbcC&pqgX@9UVLGEPy)^{%du>g?fal;d-~_M{Xa;KKv7g)IH*4e24=nKb zZUgsojk;D~Yk@c7&^WLIsEY7jrHsZ?dG|fgS{kqacBU2hDvq23W*5O>N2*siEZ2G+ zZ*x1)B)w>HBy*m}bJ_%=M7%!uX_lU49`ONzVp1Hsy;W{1G%jgT=RzQ&dKw>XWU)#HN;*p-@U@8jcVI)wN~XYNk2q^D0f)t=Cj#FovF(ab#J&_F21k4d z=*!nTKqK+dSYQ_P+3U3_HR48Lk_yU!Bn)^C+U!`quE=LM9RgV`UsvX{OC*3-F=p0F zlT-l5Vgz#3Bo)9+31%Ws02A_mi0%zA6o6_uNXO-|pR0ojlwp#M9~~vSH^O{3+yDRo M07*qoM6N<$g1bzLX#fBK literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/Icons/telegram_qna_dark.png b/src/main/resources/org/to/telegramfinalproject/Icons/telegram_qna_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..671d745809ab8feb9c16a88332b9606dff5cc9d6 GIT binary patch literal 1142 zcmV-+1d02JP)p{0O3VL_DCDF1-EF-TDmaD~=| z2?i38A4NqM3W=Mh!iI!|#Ke^wHiRIA014O#Mt)eq1yCvr0_Z|gqLD&_=8+S>mzbwE8F;375 zyaOBp{sk&IpMQXZKsV6R2nU`3HUhu7LEQ$90H0}Q=IM<;uBT1^v$D^DqiU11zXtT^ z<Heg~%HwBMz+S0BX9x?P3{SrfxR(Mf`c8V(lPXm8CM?NlKt5Y^i7q}1CRcPEMHkuuit>|}=^Gt{A z{86oNRD~0Xk1w1PMqOqXwAbQvg1R~KlG1wO$eR&twq!X{Mrc|1{NkMWDw5rftk5cB zvHRVAIO4gcGi$N$Q=utqG9ntQVtPL@tD5e0$d~=8O z7&VE7evNf;8W~GSqbY#n7442RKABeOpgc7hbG%};#%Po(6>qDOX|XZzy3QZH5+919 z2^i2A?KqIR(OgxNbJN1B1NvSktzwFnT2)@y?D zcyXjhb_VlY3UxWz#>BBu%mrT26QX4$m=D|vRd;r{H&6z(&m*J{X)N1A474g7DiV?# zA!1JfPG}4#irh2K5HU-x73}YNZhXhxbzI>KpE+)72Mfk}o;5L~J}*W%h~2|17iJ^U zUeg4)B4}22y5+(tRG`RQGf4udNKlS-``VnEN~sTr^nv^RGal#0kl>c zL4X$EJ>W~=A;skZ@CEQL&^!_ji~+U)e>tP>0$&3=H8V49#DVAZwCXo&+XbA|H$kof z-8MLn%Zb;4i_U=4z#8EB2&{>~THuVsy8tX5?l3y)6#fJ(N{GJ%_{HHLNj^KkG#PGk z8`uamB~>z{rwP~u47k~znhN}7O*dL~W+ws8*Et6`C!PIfLs`Hn4)7Gvmdx7Px?6$o zq}y_GTA7>(;q(JAF1fX}Z5Rjq=)$ac&bY+3aGEqMmeyy-WET}jVwTvD*iktFjMYli z32X;e1Fw|GnE~0fq{wC$_KA&=E6)z#-zvNLx4_&8+%A{=wL=Wp>h_63ODym#@F}&$ zMt4C3_OJTBtDXc8w4?B5rx5aDlx2hX*dgGSYx^4*Ul4z(zP*ym%|zY?SBS`*FoqlC zKt`V#z)jbuqo9saZY5on*U?z4$(jg9UULRsvQVhfZ=dV;Nrawt`u0TLdE$W>X$%2; zRh0Z{)@-QnSu1KLwn46s=ClcbW%v*lL zhPW%C!VjDyA0@=yleZxTigGgX$bF?}LqgnM*}A+M84ILwVx>WaA#xi?BqXmPdPO%3Eow{XtYeJSLs6;`&HQ$qQ4V48M=x3lQ1Jteud`5WK&(tV-y zg^w=$Fp(We;K=c&ZDt0Tq-p3vdaR*lw5DeX#|KS~(LI08~&;a{HEv{#Fx*VNBjMV7$ZqfHyx@{V* z$KGcHZ>dkOs}ls;(K%B8fG}>h%1(ce6d3B2`zj2!kB9?VVg+S8=-8)tKSNbs#@|M8ZU6uP07*qoM6N<$g2!4dWdHyG literal 0 HcmV?d00001 diff --git a/src/main/resources/org/to/telegramfinalproject/sidebar_menu.fxml b/src/main/resources/org/to/telegramfinalproject/sidebar_menu.fxml index 2065f58..41153a8 100644 --- a/src/main/resources/org/to/telegramfinalproject/sidebar_menu.fxml +++ b/src/main/resources/org/to/telegramfinalproject/sidebar_menu.fxml @@ -6,9 +6,8 @@ - @@ -17,32 +16,46 @@ + - - - -