From 06c135ba4c0afb49f1c9070c76f4a990ab1f1845 Mon Sep 17 00:00:00 2001 From: MatheaGjerde Date: Sun, 15 Mar 2026 14:54:13 +0100 Subject: [PATCH] feat: made UserPageView and added connection to controllers and testdata in MainView --- .../group5/app/control/HeaderController.java | 5 ++ .../group5/app/control/MainController.java | 4 + src/main/java/edu/group5/app/view/Header.java | 2 +- .../java/edu/group5/app/view/MainView.java | 13 +++ .../app/view/userpage/UserPageView.java | 75 ++++++++++++++++++ .../resources/userpage/account_circle.png | Bin 0 -> 8885 bytes src/main/resources/userpage/userpage.css | 19 +++++ 7 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/main/java/edu/group5/app/view/userpage/UserPageView.java create mode 100644 src/main/resources/userpage/account_circle.png create mode 100644 src/main/resources/userpage/userpage.css diff --git a/src/main/java/edu/group5/app/control/HeaderController.java b/src/main/java/edu/group5/app/control/HeaderController.java index a02e945..5e432ac 100644 --- a/src/main/java/edu/group5/app/control/HeaderController.java +++ b/src/main/java/edu/group5/app/control/HeaderController.java @@ -19,4 +19,9 @@ public void handleCausesBtn() { public void handleAboutBtn() { System.out.println("About button pressed"); } + + public void handleProfileBtn() { + System.out.println("profileSection"); + controller.showUserPage(); + } } diff --git a/src/main/java/edu/group5/app/control/MainController.java b/src/main/java/edu/group5/app/control/MainController.java index 9aa4bc5..06bc732 100644 --- a/src/main/java/edu/group5/app/control/MainController.java +++ b/src/main/java/edu/group5/app/control/MainController.java @@ -27,4 +27,8 @@ public void showBrowsePage() { } public void showAboutUsPage() {} + + public void showUserPage() { + view.showUserPage(); + } } diff --git a/src/main/java/edu/group5/app/view/Header.java b/src/main/java/edu/group5/app/view/Header.java index 1191d2f..1edc5e4 100644 --- a/src/main/java/edu/group5/app/view/Header.java +++ b/src/main/java/edu/group5/app/view/Header.java @@ -63,7 +63,7 @@ private StackPane getProfileSection() { StackPane profileSection = new StackPane(); profileSection.setId("profile-section"); profileSection.setAlignment(Pos.CENTER); - profileSection.setOnMouseClicked(e -> System.out.println("profileSection")); + profileSection.setOnMouseClicked(e -> controller.handleProfileBtn()); profileSection.setStyle("-fx-cursor: hand;"); ImageView avatar = new ImageView( diff --git a/src/main/java/edu/group5/app/view/MainView.java b/src/main/java/edu/group5/app/view/MainView.java index 3796f89..dc0dec1 100644 --- a/src/main/java/edu/group5/app/view/MainView.java +++ b/src/main/java/edu/group5/app/view/MainView.java @@ -3,11 +3,13 @@ import edu.group5.app.control.*; import edu.group5.app.control.donationpage.DonationPageController; import edu.group5.app.control.donationpage.PaymentCompleteController; +import edu.group5.app.model.user.Customer; import edu.group5.app.view.donationpage.DonationPageView; import edu.group5.app.view.donationpage.PaymentCompletePageView; import edu.group5.app.view.homepage.HomePageView; import edu.group5.app.view.loginpage.LoginPageView; import edu.group5.app.view.loginpage.SignInPageView; +import edu.group5.app.view.userpage.UserPageView; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; @@ -52,4 +54,15 @@ public void showPaymentCompletePage() { } public void showAboutUsPage() {} + + public void showUserPage() { + Customer testCustomer = new Customer( + 1, + "Jinwoo", + "Son", + "aurafarmer@gmail.com", + "hashedpassword" + ); + root.setCenter(new UserPageView(headerController, testCustomer)); + } } diff --git a/src/main/java/edu/group5/app/view/userpage/UserPageView.java b/src/main/java/edu/group5/app/view/userpage/UserPageView.java new file mode 100644 index 0000000..547b812 --- /dev/null +++ b/src/main/java/edu/group5/app/view/userpage/UserPageView.java @@ -0,0 +1,75 @@ +package edu.group5.app.view.userpage; + +import edu.group5.app.control.HeaderController; +import edu.group5.app.model.user.Customer; +import edu.group5.app.view.Header; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Label; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Pane; +import javafx.scene.layout.VBox; +import javafx.scene.text.Text; + + +public class UserPageView extends BorderPane { + private final Customer customer; + + public UserPageView(HeaderController headerController, Customer customer) { + this.customer = customer; + getStylesheets().add(getClass().getResource("/userpage/userpage.css").toExternalForm()); + + Header headerView = new Header(headerController); + setTop(headerView); + + VBox content = new VBox(30); + content.setPadding(new Insets(40)); + content.getChildren().addAll(createProfileSection(), createCausesSection(), createDonationsSection()); + setCenter(content); + } + private HBox createProfileSection() { + ImageView avatar = new ImageView(new Image(getClass().getResourceAsStream("/userpage/account_circle.png"))); + avatar.setFitWidth(150); + avatar.setFitHeight(150); + avatar.setPreserveRatio(true); + avatar.setId("avatar"); + + Text name = new Text(customer.getFirstName() + " " + customer.getLastName()); + name.setId("profile-name"); + + Label email = new Label(customer.getEmail()); + email.getStyleClass().add("profile-info"); + + Label location = new Label("Trondheim, Norway"); + location.getStyleClass().add("profile-info"); + + VBox info = new VBox(10, name, email, location); + info.setAlignment(Pos.CENTER_LEFT); + + HBox profile = new HBox(40, avatar, info); + profile.setAlignment(Pos.CENTER_LEFT); + return profile; + } + private VBox createCausesSection() { + Text title = new Text("YOUR SUPPORTED CAUSES"); + title.getStyleClass().add("section-title"); + + Pane causesPlaceholder = new Pane(); + causesPlaceholder.getStyleClass().add("section-box"); + + return new VBox(10, title, causesPlaceholder); + } + private VBox createDonationsSection() { + Text title = new Text("PREVIOUS DONATIONS"); + title.getStyleClass().add("section-title"); + + Pane donationsPlaceholder = new Pane(); + donationsPlaceholder.getStyleClass().add("section-box"); + + return new VBox(10, title, donationsPlaceholder); + } + +} diff --git a/src/main/resources/userpage/account_circle.png b/src/main/resources/userpage/account_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..f53f82534667c0cdefa276d001711b6544d6e8ab GIT binary patch literal 8885 zcmb_ig;Nwxyg&MAq*EHCLy-naK|qm|I#48}C69)qq(LMUq(nsGP9%=F1C9rha)!l% z*l!zhA3ZBS0DzL=ze)i3RKR-6B=9qNtO6JlFC8gKz)XGGISE1n;8 zg5O0ksqb!-`)E@ZX!)J+0lU4aK)%~<{67{tN8ls9z|c^zG%HnNnh9V2!*(}Q$6q(B zT3weI5B%!E!j0P%2Dy57B~$Qz2xgj!>B`ak@6w#T$UH2yTJFnFL*1hGV7oPrA$~%- zD0JLMHnJ)i?+vlidY7#sA-z3B=!qK8><+(HqpMcvC|>@$kdEo`W8})@s`nYtL6;68 z%|z+mDneF`+kTG|^X!rnOm8+`^eeG_;T{=aetwsbt(*i!>C&71Z+RW0Yt%mikJPt> z*?q5aWa(Ab)>l(dnAI909HBr_7Wu2V+A-xdi~1CzYZ_%o7M=xN;+)cW;-6_8bS5%S zfnMut8bE&z%`Z6;7$kv%P6+pm6pqwYMS!1W}KDBpMao~P!Fn<<>XvNG)8XxvwWPKDUJBh83^o=-gE0)j(9DM0fAKxT;i zBhDt6dVXu%&Xl{($|dTnL{TvX4J|~TXTDW%x>YX6f*i6uOPBAe6-$ER0MOVv{tMSs z=JkhCzr5=pGZF~|rStlHF>g{kAUcW0$DvQ@2wALw4$pYOs*sMj^hbbDQq(R1v83TW zbtO>@A_S50MJ!wEK(z5k<7f5>Tr^#i4{07`j22ZjR;xH4K&a48ovi4PO@|n?ZN;uI z%S9)r(n?cr-H67b%?ZP8^JG{$)@3X0x#$p`v&W1IKHdx+|4Q)10Enfr&HB-b)f2#i z22O(&V)@8s-4_j|i=s1B@7Fj8{5QL>$=S%+@s|EWZ`Z??BYygkn6lUvIF5HpLH57#$R80F7fGUepTo_@PEa>5J#R=sf4 zs`0!oF0}qkwDfcA6Oi1}@mJr=oyD`Og0FvOU$>F3DW#Yu<>8d7Z>|>X@6s7kLxP@s zit!9tn!ATlt_ywrrq84&`}y73zKL>A?c>*3zmTtT=7*dMSL()>q_`b+UMkTcOgp50 zb^pS<8Ag@jgN>WHn$=FTe)?xiSky_CkuSei z{S!#cyf8wG3Z;pTmmKvxiWX5s{jqCpMXrc0b1=@J^ngppx8~#1*uopSku^=z1sa-4 z>U#Q?JFZNKTAa@z4XT?C!9d||`|HSK&y*Ni9oMi~HC)3lBzWU_iXF-a7YfCoKR@DX z$=z(kbF-{=$SDvSe>5hX$yjKux0m1#Q>RAZ$X~`v5>Aux5=(am$pRNm&$(OXyX1oC znj#KWqwcg7#iQ}Sb}g1BY*b4ZZ?)I#3G_thEpan4_phwx1-WO9io%4sKw2No1eMU#o z4bK9(B`*F@M5mqq!5Q7NO2z99RK&pdvhkWb>XnBhbvr^r%;*RE!6UY(xEQiY%+^+g zZQ8}mcr4#!JQVk?yiI+>nsQQBlSM7A=uU*i{4>Abo(l5QxLV|%;*;kVh~dvx0bldq zJG)ABC|-<(ybJD?A55B#lT^17IGl-P2x+?sq(aZJ$i;xTth=k83fu6#L5NO;qgiyz$9X(-&IMww*yNmJz@ znM?!!ym04aBfN4rUd(XcxEMmcxY7B@1pBCmvE@`W;CCzRa2WF-EYQP{pjtj`Xt$L% zck<~gTkQ-~=s(W*4~&U|{&UQ(MovpdNbnS z(0PNLY0oWGgJ7Zw&AjqK%a}R$=Dx_|TFdd&<$f@D=6y%sFu!fM?mhjE!1 z*xo3@qd@{|H0{%*wcGz{---*H!)ttDOI}S?xN@Nh4t2->vc|=p=*>+BN<-er-J8Ex z+i)8Ult?O7ecp|>>4`i=!SBvLq4a)1b@{dyFykIbh6lU$Cqd(03HsWw0WTvO2cMynTT{q3*Hg1U-)6?d@zaScRv(deRcqa4w zlC$s&2QI9*z4r*hnAaUvk1fR3klNjE4fE3uko%KfbV-|;%W%}N?rEbxgpbwubrxcO z*fNIHajUdr`1eCq6YGD~K;Ce)K4)wjX+D&KIdI4T+n(!#8^QPtfKz9{P~wLWuXBdG|UG8b=jQj1JQQZFjnR5mfsN|Y~9)xzey z=zzXOVJx;fXO8dk#m}uaT?!cwf)T%l(4KvLvh-6Y0bR->?SDgRoSEhfTqJ>|4bz_@yfWY=jrR8QU=>xk z*22OR)KhPCBE;%6gax5gxgfn6kbkIR_pLRqxYUh*EJtfOf{y$1aqZ5jC^*}LdL#x} zX0l9h6b(FkggI--$P&j?f?yC!Eji|+tvv6bFTu`&|L)xXn-k-04wFX>O+&JLhHIF9&LxH`z@`%{V$e>Z%aRq7^c)`RUqAb6$QVF(*8hTP zE2mlg3_>TXl)ztc=~JH^Y^aVT3bveh_njS$CJo+GdUoA_cAU!ccF@^-ac>)1oAgn? z@eaCCL3K4I#h<3r=9`hoyWg+1OCEy1KJM3q27U}R#pOJ*9$O+>o;E(4w1;o%iy)a` zTR^L=NiU-xK{PcN#>$Z97JP)K=YMrcb%=)6<7E%sssyg;+*K{jqSG;JL7teImJ` zk~oOY=JKOxpOrH!nKkdsSgiD5kF8oPnW|O&%mhQ{ncjLF&XXede}@izDUrD6Y@oOK z^kD!hzs8%^E?=X9;$10xNS06n;w2|N&#{3Z&frCkp+&CdQ?rcg#)De(HX4=Gk+ zXNe{YGliAthF6}XHdn`(WE(~T#}#lUu3Hr=q7yZ`D_ElQ&~t*i5@P8#p-q+ShRJgX zdJ-)DRZmai=b=B5NU0E5P~NEfN5w zdYJVspeHGS{M7_?yxB=`PYiq;^Tflkp{J_vltK*PpYn}E{JF;G`=X7s$z&K5s-WMZ zt?8i=g8%qOmoOtEuVal~)ibRkOO2|MLA{RWao3WrFLfHnlkUs*q{pklzz0u;r^3&a zMy{b6JyjWrvS3_z$#gNqM*V>}RR1Ihdz89wQM+Oo8;j*T8_`it4&{F(X(@J+xRWCRE+6Z zMX{YZPM6b^UI5YLY_jv|tG!5wtNgw9rfXEsvEC}3S=61Vx$r8~ld!CYOslb|tQQ>N zyvCXRuYyFIV~oVXbBXaIJ&26MoW$U_&vTntLO2q~%7%AGrSP=mcPK&M6XTm$WZ7TE z>>iNSdaWsrAcelWaVIQu{5}3Y`JDnc z>CdoxuS%D>>N#Sqa8%Pzk>84;7TF$HzC}F?Fu$(yV42v2`3u-7azBUi65^l}mQnFjxj4^ES{v zA(rY~Cr0!;*Mw`1k(;%CqX(xBdaTitgRqAdJmB%6tGwLwoT zGZRV85Z`_@w&+WnRs=p1_Tw(@*Og=nf(8)f3qPGSRB(U>S)_b5x^uVh!QFjAq$l-v)&c6!2Uxw~$zPyFsNy(qv-%}_FbYdfr3D_VA{BBfMtOqob zV;$#ETV4(1mOKKp#pAxk+EDFHGcvwcg7FsKl`^be+RPy;=ad{_c9k(4VUH&9iLvNP zSuTjzKlH$4eupw#B3T?BPgxB8Ck|KYP+;rcn+zHX^{U;YK`EBND7l3h5xTEqiAH)! z`pO%axwA*#wL5R^hVTm#$SP0w^MO@St+RA(S*tMfItDuQ>X=*9GtKj-q$QMDng^ZQ zbZy_XwmPkNz%O3`m$G>Mm#betG)8x@d-I0fplLLxT`UBW%bp5r9fVYqe>w`8&ld+j zh1>R?Krn`eD9X0E@FqkL2k|Q^d#%7x{9jn3a0@|!mG~;-$8_v>eHDA&aJM?# z_YJr5Z)g6(=?b%h(n-3Ea*Pcr2tQluC81*7^4VK_^&*b)PRr#toYufs8kIDX$bb9T zsw!TK_A8ei%$EjfcY4@!N2j#Xf-ib{TwqQHHQPS?kG3C;$nC|6=~Nl{es4u?n)F6Z z`D#j#*4qp>ImSOS-~HqryEWElX{#jbn{IF)uCm|^lw0e8{Xov~djT4n513$on)7Ac zwcIDoJ9aO{9F%=ABhMtvZCpj(C6;sDV?^+|td3qY{xzv(tJGJn<1QFc#Pwu4+p9fRs3)?Eu zkK|&RptH_dN-U&q?oaJ?#DxoD%->g|z-l5tD4E7!SmoQtZE^YiMq)ax7Ri4cmY9;&a9sGgec~kKg#*!8Kf7|=)bEd} zW!CAhT;yIPre85{$^l$IyhA)(Z){2?f$dJ{i~E)l11?#Q1p}V$+xj#oS)vi7AH5|3 zVV^pNSEsI@Xs$t~Su>O5Tal^3Ab<||!!JQitSX4VE*O$X;>}lYjW1F!SpXCd++ss_ zCwuyPCIRgqlg3F@KSzg8WeEXtu|n($F%q$*fCWO9-)SGa#|tK4%y7e-XD7;ozY1{_c#{LV1vOzh1Bs+U?1;T>Q~C+& z3NV2`og(LB-_qzrQg4G5O6j#2_^sYS98kdTe#-gF^COg4qrK7q5YWw9X>kj(f0lS( zuAqkCE$;#FA8>5|PoID$3?(Xj%T#84myKuJ2qt*_U|MOw@BtOgn47EjmkhQ&1;o6K zAb^f1z&UAQ!e_ZAzDKUD*0^#LQY#A}=pCbe@1T!pAMz)L$tVsyY9%Ok9Dew6Q16jd zqSJ8bEuy#EZwL_Ykw$rOah_Nx;P0#nXDY+p)leblq- z`8U$sDyKb|ppx|@9Z;T9E4w{nxa`u94tNqq(ey6>_#0f%0&WoO`j_R7u&)`#83IfmI zQeQt6XTQDNih*lKraEW6taB!ROp9&Sl$7B5PvdasiuE}rT7j;+800eMhOvmirim>4 z^+3uz#=L3C-Rus2Kf)X9x7xPkx9_;s0C8{zKOfG!Y>?OCjgKT=I2{T+|SvSVjb zmhHh>`^|psw`cMjY7)8JANxM{Xlc^SJY-Ib=1V`}%GD>%RL!Q`D(qRGEhNkF6L@9r zG4p~)%ifUv8a`%{RAu=IeOAQvUVpRV3cX}@y1b(;>3=bnbBL0FD}JDr!fx%hDhKe$ z2N4S?cAo!RW1if>RDF6AFB1SGT@EC&C;wUf=G2tKi>Zl1#(>^>C1c&~Jzw`^tw9#D zvh?%Me|yM~tJL#EOKXX0Rr>%Gj%dL6ucnz*ymN6^rISC13K+I0NP;#098 zD5~2zD~n0e)|ciL{8uh~+B({AZ$H_-EG^2P+xlT-L_Ij`!*h1T+(-9r@2rfOD$rfr za{JP+x^S#QIOiD!PCqYmw^V41MBOk+1`Acf9EU%=9c5;$UVx~(V7>6 zW(^Zl7F`=}Jb3?s`Z!zI5`XmkhaF`Zv*>`m_<(7z4EO%W#;1H9I@%1KzbBzn4~b0W zC#7=)CUY88YtaEUG}lN!ieF8sXy#t8Rya$nC)Q+IEGXG1aMC=+6PQb@`H#F+{maa5 zuDO{S&sVe2^Zp1!@^3rqBtP*($jLHA!u$Nj389_Ya?doa^0J_T`oXQno;`EEw57Jj z=b+Ox8}bBbc1Ce_F}u{Ohy0eRmzRsj!}8uC&%*9Lzf})b2Z)rntYjB%JGGf3R}W!l zKekgkY*t0j*T3`_9lbl4mwW><<1lUitQV3w{C25ZXL3oqHyU?Y*KA{iVV?AKu$7we zu$UY-<({R3>h$-RJn?-v?|w!jQmzJ`tHjz1?55##y)rcSmiZBr!P#_8D8KBr@{Jya z3pe=nhY%ec$A@d`6M?p@)bDeFFN!=r&2aQiMN?*uvvzpi>7aBIAs<)K3@oUO8B?tNRIqvj1?A5JrUCc3C}(!Df5pB46uYgMO?#B#EpR!)=Usem1U zL1B$-IWND^x>3)NzZr7MoXKGKfn%OYRI-md->#jJM%aJv;n)Ib);&D`>%L&qLs@E! zYuJm+YOy4DENI?Wb$w|zfvw~=c`{04S)$_f=zcehjW}K7-~%#+}{yw zP#y+H^YKS*i_D%TLdp$Mza%d#_GDqApz^Zxt}GJxnx3h$`^M_m#P6X@ga;yHfV9>Z))ipajVl&C<^+bm?41wxLW$`lRGBbj8Wq zLTYm(MBTUH$z}(w7oPN$1m>OAmZqi2qE+wcVsMpx#D<)qj5K$Z-GstC>84Bb8EOdDP=Cr0PC zv~Wow8q}T3AQIx{qNBZPlrS4=M^Ep{Vngx zO<{6vPb-^~xBw$v%x&}RVHO&s-V?s}UBp7wuql61yQ*u0xEJb zYPM9)HV1DYFmT^|UvB;umeAEHc|(pp!BrF#A0ZX>^l>@jaz{B5cBEMKe=N26=~NMa zD>Ej{Oy|O9BdrZmf+%tKqJL`EEk>D%l`C8vCt}#t#^=Z`!Y#+-Yl6|)KH9ypX!h9x&BAhyQ=R4`&k2Yzk8kZqXiGwsh%q8`Z2*^qG5iB!jPNa2C}Hd~ z6(oodXdm@VYwIbEDK$g?bnat(M33crk2`>?=!P>9%^=?j@aWd;>xgo7O=ffZqj8R?pl5vCtyxHKj$! z8Uom@aAocGb~;;uL`>d&%u|Ihc1O&YOA@Ys{i@0GcJ2him;m6d1e`A@WnFwpLeglP z9ZFI%r)q|P7~>&SC%#`xR+t_@BWhQvm100piVARc#~RVE7hawhfaoeBh$UM+w?oTL zPaRp_&?E_}%GeHX;>%%4h0;0DSdWQuBf=JM$Dqwqh-Mm=gE!}>3G+DNOkOJjGDtea z-Sf-EGepCw5epkZ80TeE;iH2PV!Zu1kQnN6E7b&OQAY2I5X1WDI>t58AvCwyT{tk8 zZDRF{@O?-IuMbf)ni^Qn)A?H5)51(m2OUp@;wTRC>o}3Py_f#vci$%8@ac+0Q`=6E z2|=Uo6LPO3P{77%DJD_jUZLfB0umhL|zlYx~Z8b_R>p- zikx^RbGOIaoGAn@qj{h!-ilOJVLh?<1Sn^MuvO7k|E+5bQ&K3FsHb0vL&vcv94tEx zRvTH2rR9|eW!F&7sm4l36H66T6jGPJj!U_C|3f;+qWShgt733mH!6z_}d2=fRfiqiD( ze>bSX_uV_A`7Nq1O>e{;ZR&Y($_dpC^$GXAUb5f*9WY&e1g*#wnu>eNFlfv5?Z{l# z5@u%k!%O3>nf0Yy$xn1t0Od=5v!BvpKoDJ*MDk6T?i*NX31wRer3y>8{@{(c{x6oR zFSv#i{Ea!+tT1t-NE&|lT}=HoTny)Jli)6Qy?Nyr?eO2