From 884b5295059e0467e6c3360e466eef04380be4b0 Mon Sep 17 00:00:00 2001 From: dognutss Date: Fri, 6 Feb 2026 13:37:26 -0800 Subject: [PATCH 1/2] Updated spendingTracker --- spending.db | Bin 12288 -> 12288 bytes .../java/edu/ucsd/spendingtracker/App.java | 3 ++- .../edu/ucsd/spendingtracker/App.class | Bin 2297 -> 2295 bytes 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/spending.db b/spending.db index f67a8ced0d1f415217db7a538d601b7f45961d9a..b8fb04b4e2cc379270d82ad6570a782f7f2cbf9a 100644 GIT binary patch delta 93 zcmZojXh@hK%_uQZ#+gxKW5N=CE=K-$4E*o-pYfmG%qOsy-&BN?m4RQK(b&~5#5E|y t(bLZt$dY4VV36nM<_1cMGA0S|0BLzf!;m0Hzu*A>pb)N23jg^Tc>rHe6_o%0 delta 93 zcmZojXh@hK&B!}Z#+i|KW5N=CE(QSx2L34^xS3C2FTZJsr;lfdr)x07;pYqt3|gY1 rjCrZ$MsEK8E~!Ail&CrrkZGkYZ#5ND8PkYrF{ okYdnfkYTW5kY#XZkY@;BP+*8*P@L?*F^yG)frUYJ@@) Date: Fri, 6 Feb 2026 14:48:29 -0800 Subject: [PATCH 2/2] Added spending charts in summary view --- spending.db | Bin 12288 -> 12288 bytes .../java/edu/ucsd/spendingtracker/App.java | 18 ++++--- .../presenter/SummaryPresenter.java | 42 ++++++++++++++- .../spendingtracker/view/SummaryView.java | 49 +++++++++++++++++- .../view/charts/BarChartProvider.java | 41 +++++++++++++++ .../view/charts/IChartProvider.java | 11 ++++ .../view/charts/PieChartProvider.java | 40 ++++++++++++++ src/main/java/module-info.java | 1 + .../edu/ucsd/spendingtracker/App.class | Bin 2295 -> 2747 bytes .../presenter/SummaryPresenter.class | Bin 2355 -> 5097 bytes .../spendingtracker/view/SummaryView$1.class | Bin 0 -> 1547 bytes .../spendingtracker/view/SummaryView.class | Bin 2151 -> 3734 bytes .../view/charts/BarChartProvider.class | Bin 0 -> 4063 bytes .../view/charts/IChartProvider.class | Bin 0 -> 375 bytes .../view/charts/PieChartProvider.class | Bin 0 -> 3757 bytes target/classes/module-info.class | Bin 306 -> 329 bytes .../compile/default-compile/createdFiles.lst | 4 ++ .../compile/default-compile/inputFiles.lst | 3 ++ 18 files changed, 200 insertions(+), 9 deletions(-) create mode 100644 src/main/java/edu/ucsd/spendingtracker/view/charts/BarChartProvider.java create mode 100644 src/main/java/edu/ucsd/spendingtracker/view/charts/IChartProvider.java create mode 100644 src/main/java/edu/ucsd/spendingtracker/view/charts/PieChartProvider.java create mode 100644 target/classes/edu/ucsd/spendingtracker/view/SummaryView$1.class create mode 100644 target/classes/edu/ucsd/spendingtracker/view/charts/BarChartProvider.class create mode 100644 target/classes/edu/ucsd/spendingtracker/view/charts/IChartProvider.class create mode 100644 target/classes/edu/ucsd/spendingtracker/view/charts/PieChartProvider.class diff --git a/spending.db b/spending.db index b8fb04b4e2cc379270d82ad6570a782f7f2cbf9a..938a42de32506308bb94bd622a2f32fbfd2ae00e 100644 GIT binary patch delta 75 zcmZojXh@hK%_ucd#+gxSW5N=CE@u8S4E*o-AM&5s%qOsqUrCscl|fjZDJ?%gG{n=# fGsM$1m{EtDmz9BEl+nn|-`_=J^E-J#0Y*Lm8E6v$ delta 75 zcmZojXh@hK%_uQZ#+gxKW5N=CE=K-$4E*o-pYfmG%qOsqUx|~IfnS}`*wrt@H7LZ< d)6W;kl4D?Ckmu*-21 chartProviders = new ArrayList<>(); + chartProviders.add(new BarChartProvider()); + chartProviders.add(new PieChartProvider()); + SpendingPresenter listPresenter = new SpendingPresenter(sharedModel, spendingView); - SummaryPresenter summaryPresenter = new SummaryPresenter(sharedModel, summaryView); + SummaryPresenter summaryPresenter = new SummaryPresenter(sharedModel, summaryView, chartProviders); PresenterManager manager = new PresenterManager(); manager.defineInteractions(primaryStage, "Spending Tracker", listPresenter, summaryPresenter); diff --git a/src/main/java/edu/ucsd/spendingtracker/presenter/SummaryPresenter.java b/src/main/java/edu/ucsd/spendingtracker/presenter/SummaryPresenter.java index ff4f4d9..2811753 100644 --- a/src/main/java/edu/ucsd/spendingtracker/presenter/SummaryPresenter.java +++ b/src/main/java/edu/ucsd/spendingtracker/presenter/SummaryPresenter.java @@ -1,18 +1,37 @@ package edu.ucsd.spendingtracker.presenter; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import edu.ucsd.spendingtracker.model.Expense; import edu.ucsd.spendingtracker.model.Model; import edu.ucsd.spendingtracker.view.SummaryView; +import edu.ucsd.spendingtracker.model.Category; +import edu.ucsd.spendingtracker.view.charts.IChartProvider; + +import javafx.scene.Node; + public class SummaryPresenter extends AbstractPresenter { private Runnable onBack; + private final List chartProviders; - public SummaryPresenter(Model model, SummaryView view) { + public SummaryPresenter(Model model, SummaryView view, List chartProviders) { super(model, view); + this.chartProviders = chartProviders; + this.view.getChartSelector().getItems().addAll(this.chartProviders); + + if(!this.chartProviders.isEmpty()) { + this.view.getChartSelector().setValue(this.chartProviders.get(0)); + } this.view.getBackButton().setOnAction(e -> { if (onBack != null) onBack.run(); }); + + this.view.getChartSelector().setOnAction(e -> updateView()); } public void setOnBack(Runnable action) { @@ -21,7 +40,28 @@ public void setOnBack(Runnable action) { @Override public void updateView() { + List expenses = model.getExpenses(); + Map totals = new TreeMap<>(); + + for (Category cat : Category.values()) { + totals.put(cat, 0.0); + } + + for (Expense expense : expenses) { + Category category = expense.getCategory(); + double amount = expense.getAmount(); + + totals.put(category, totals.get(category) + amount); + } + view.setTotal(model.getTotalSpending()); + + IChartProvider selectedProvider = view.getChartSelector().getValue(); + + if (selectedProvider != null) { + Node chartNode = selectedProvider.createChart(totals); + view.setChartDisplay(chartNode); + } } @Override diff --git a/src/main/java/edu/ucsd/spendingtracker/view/SummaryView.java b/src/main/java/edu/ucsd/spendingtracker/view/SummaryView.java index 1bf0e9c..f4b0f60 100644 --- a/src/main/java/edu/ucsd/spendingtracker/view/SummaryView.java +++ b/src/main/java/edu/ucsd/spendingtracker/view/SummaryView.java @@ -1,23 +1,57 @@ package edu.ucsd.spendingtracker.view; +import edu.ucsd.spendingtracker.view.charts.IChartProvider; import javafx.geometry.*; import javafx.scene.control.*; import javafx.scene.layout.*; +import javafx.util.StringConverter; +import javafx.scene.Node; public class SummaryView extends VBox { private Label totalLabel = new Label(); private Button backButton = new Button("Back to Expenses"); + private final ComboBox chartSelector = new ComboBox<>(); + + private final StackPane chartContainer = new StackPane(); + public SummaryView() { this.setAlignment(Pos.CENTER); this.setSpacing(20); + this.setPadding(new Insets(30)); this.setStyle("-fx-background-color: #FFFFFF;"); - Label title = new Label("Total Spending"); + Label title = new Label("Spending Analysis"); title.setStyle("-fx-font-size: 20px; -fx-font-weight: bold;"); totalLabel.setStyle("-fx-font-size: 32px; -fx-text-fill: #2E7D32;"); - this.getChildren().addAll(title, totalLabel, backButton); + chartSelector.setPromptText("Select Visualization Type"); + chartSelector.setPrefWidth(200); + + chartSelector.setConverter(new StringConverter() { + @Override + public String toString(IChartProvider provider) { + return (provider == null) ? "" : provider.getDisplayName(); + } + + @Override + public IChartProvider fromString(String string) { + return null; + } + }); + + chartContainer.setPrefSize(400, 300); + chartContainer.setStyle("-fx-border-color: #EEEEEE; -fx-border-width: 1; -fx-border-radius: 5;"); + + backButton.setStyle("-fx-background-color: #757575; -fx-text-fill: white;"); + + this.getChildren().addAll( + title, + totalLabel, + new Label("View Mode: "), + chartSelector, + chartContainer, + backButton); } public void setTotal(double total) { @@ -27,4 +61,15 @@ public void setTotal(double total) { public Button getBackButton() { return backButton; } + + public void setChartDisplay(Node chartNode) { + chartContainer.getChildren().clear(); + if(chartNode != null) { + chartContainer.getChildren().add(chartNode); + } + } + + public ComboBox getChartSelector() { + return chartSelector; + } } \ No newline at end of file diff --git a/src/main/java/edu/ucsd/spendingtracker/view/charts/BarChartProvider.java b/src/main/java/edu/ucsd/spendingtracker/view/charts/BarChartProvider.java new file mode 100644 index 0000000..da9084d --- /dev/null +++ b/src/main/java/edu/ucsd/spendingtracker/view/charts/BarChartProvider.java @@ -0,0 +1,41 @@ +package edu.ucsd.spendingtracker.view.charts; + +import edu.ucsd.spendingtracker.model.Category; +import javafx.scene.Node; +import javafx.scene.chart.*; + +import java.util.Map; + + +public class BarChartProvider implements IChartProvider { + @Override + public Node createChart(Map data) { + CategoryAxis xAxis = new CategoryAxis(); + NumberAxis yAxis = new NumberAxis(); + BarChart chart = new BarChart<>(xAxis, yAxis); + + XYChart.Series series = new XYChart.Series<>(); + + data.forEach((cat, sum) -> { + series.getData().add(new XYChart.Data<>(cat.name(), sum)); + }); + + chart.getData().add(series); + for (XYChart.Data entry : series.getData()) { + String color = Category.valueOf(entry.getXValue()).color; + Node bar = entry.getNode(); + if (bar != null) { + bar.setStyle("-fx-bar-fill: " + color + ";"); + } + } + + chart.setLegendVisible(false); + + return chart; + } + + @Override + public String getDisplayName() { + return "Bar Chart"; + } +} diff --git a/src/main/java/edu/ucsd/spendingtracker/view/charts/IChartProvider.java b/src/main/java/edu/ucsd/spendingtracker/view/charts/IChartProvider.java new file mode 100644 index 0000000..fe96f84 --- /dev/null +++ b/src/main/java/edu/ucsd/spendingtracker/view/charts/IChartProvider.java @@ -0,0 +1,11 @@ +package edu.ucsd.spendingtracker.view.charts; + +import edu.ucsd.spendingtracker.model.Category; +import javafx.scene.Node; +import java.util.Map; + +public interface IChartProvider { + Node createChart(Map data); + + String getDisplayName(); +} diff --git a/src/main/java/edu/ucsd/spendingtracker/view/charts/PieChartProvider.java b/src/main/java/edu/ucsd/spendingtracker/view/charts/PieChartProvider.java new file mode 100644 index 0000000..74456e7 --- /dev/null +++ b/src/main/java/edu/ucsd/spendingtracker/view/charts/PieChartProvider.java @@ -0,0 +1,40 @@ +package edu.ucsd.spendingtracker.view.charts; + +import edu.ucsd.spendingtracker.model.Category; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.chart.PieChart; +import javafx.scene.Node; +import java.util.Map; + +public class PieChartProvider implements IChartProvider { + @Override + public Node createChart(Map data) { + ObservableList chartData = FXCollections.observableArrayList(); + + data.forEach((cat, sum) -> { + chartData.add(new PieChart.Data(cat.name(), sum)); + }); + + PieChart chart = new PieChart(chartData); + + for (PieChart.Data entry : chartData) { + String color = Category.valueOf(entry.getName()).color; + System.out.println(entry.getName()); + Node slice = entry.getNode(); + if (slice != null) { + slice.setStyle("-fx-pie-color: " + color + ";"); + } + } + + chart.setLegendVisible(false); + + return chart; + } + + @Override + public String getDisplayName() { + return "Pie Chart"; + } + +} diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index e85b8df..fa08e51 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -2,6 +2,7 @@ requires javafx.controls; requires javafx.fxml; requires java.sql; + requires javafx.base; opens edu.ucsd.spendingtracker to javafx.fxml; exports edu.ucsd.spendingtracker; diff --git a/target/classes/edu/ucsd/spendingtracker/App.class b/target/classes/edu/ucsd/spendingtracker/App.class index 188e39285530e8760999fda52b5190bc2c36d5b6..7645885c5ecb2fabcb69aabc85bf4a74d2b0f359 100644 GIT binary patch delta 928 zcmZ8g%Tg0j5IuJ$lbK8cWkA4zL|y_3uMr1O6F?p!qEVv6Ac*MXQ5uXAhd>n@S?Lel zz2z5ZQC1l>Rek^)UAS@QC%AKG*)xNMu<6@<`*xqxXL^1Is}1V@pU+*ltpZd)*y}L|fy8e* zP-XszCh-YgFHf$HL!i$Ih+s6am+Uk}I-QJ8skZ{QM~;9QvUVCciOXaI?gPx?3Pl8u zt7NH|rKyph?q2bC^3ZMtp_r`6RfLx-X#IpX0ZVq+O<}|htB5XZ9!;vCFQ!y6Xa` zbi$29SIsbh%MZ}O#*Ad6D%MJ5B1657H->{ zgJmpIcP~LDaR+J0gwus3+@&5RG*W(j1wI0;!9A=(#eHIHE9VxhQGpK+=x=gmH|TU_ b|A?_e*;VHo^$~Xe5$PWink{{XtbpuaP>QwQ delta 587 zcmYL`NlzO=5QV??%y`D*Nn|5H3}*4hW-wqNEJMfwWFaBJh)qc35G5u;kr3j7IC19O z|04n+VH8XG0Xawc8M)>br93vWTJyTAr|Q*v)wPblN%!Z!?>~U&Y+k#+l$z0-j<2uG z)I*nUdOa-q6g$H@V|42)W32t8a{T$|_{;85~V$mplcJQO5M1`7J)qgw3Q!i7B11{-{zY z#*fC;+RaeZQo3ya)|bxG!8j4I0tQMHL1)1djy0Mgp_U zNu-!(K~Rd7B}A^=ebCuh>B2XCt4dE`*XZAuAX+68I5qP7RR)8Y9~*5O@@?O_Wu(=p z5E8WG&`FXmQZm@QV3A$|`glc}G8qoYhGGsI4Vz-5wPY=d9EXb?9C1IX?Mek W4ha3AX!Bc>ddK^4QX7I1%KriW;ZPO; diff --git a/target/classes/edu/ucsd/spendingtracker/presenter/SummaryPresenter.class b/target/classes/edu/ucsd/spendingtracker/presenter/SummaryPresenter.class index 0e808ca0c8112a44f629dd2196d266d4fc7d5ab6..9143c5159c96d40ecb18b28de64dcfb9bab12ee1 100644 GIT binary patch literal 5097 zcmcIo33n6M75<*Jj4cg#AqGq!1mb|@1tmZzSU~HA1X^Jd?20CYwqt3q1=5TvjSO^4 z)6#uk(l$xA&=$HkX@kL}CD1msP1Akfm;8yIo}AL}y%|a4V%eOY(_^2R_ujmB-@V`c z?tS;^*?(WS2w(uuN6>(PhM7!;bUMQL+({k7v z7%#~|=kCggKzMuB$~rp*c6BA|O32$8GZ)`0pNZrVW6C&uJYGthmKo0(C+xBl-)~N2 zZ7UH=HK7qr8X`KP&;>Tt6-AN7f)tO zPC{<8SVuEj1cFmp^O(TO`4rR8CJ?KujFb@f^hmKCK`U<1(T=6ud%|>vq&}l&&P+RY zQD9A1Z1!ep+j5F_Ex&#(WsWs3Av}|ctzTlh?2z0r#yLI%Smwg%_(B8Gj1%|Y+CaCifs-MuX zVLl=#?3Key@jVLYisL1Sx9PYY8;MZKbW%pHY|33+{r!8yQqpCcb=-k10*k24Ah|zS zb{yLhSY5-^Wo^X+?u0}e18S>|ZRjUVlZKVaahv_~#6x}ZCaTOZrx2p3p)eK{b4B=%|;(XkJA3v|{EEMMXfh|(>)jx#xx zOcK4#b4rb1WXgVl)*9=^il({OC`51%#$=Xzxgs82eE_e}aIcR0a8O|V0=o|xjyYi$ z$=dLgWDxi6?TQ^-$kNI(dhHNiso_;RUJZl!Ku6J<%;4EN2d#Z>^Mc7Q-5Zioo7HgybaZ2uY2HvtYUwO|nO)R4 zb;-lhVCyKz7;mfTQkg<~CXLdFdEAk6i#kf6dO?c=WKu<{Kl(IGkva>w!Sj3sWgORW z0YhoTpdQJGAil<|5UZ@?P`nnZ`qMkwBFqhs=y+5HQlwnSPyu<`Me#{|O2emhd`5n8DWUvZ z$rS{)SY{$^8qH2vhEpz*^mqAA5qTzUukXD2DL%0?A&{9T)A|xfVu1~O=eJv=_%cf@ zMaK*gMM9U%TINVOKW-MsWFDl!Njq)iQbsW=``%#Cnana%+);nic@6=Rx&AtZhF@7a zZ?*;}3KcCDjXF%=WQ3>HqyKlP{#Q3jgqzfnyL43S4MA|i_WmP9bOJIp2bG52f@y6{uvE)J6k)h87axxSF-xvc@fURMDikA}DEv z(yv#25?EWSL$cPCebkI66|~&VILr`J6;Cwp?>*;_NpF#>oLixmI+M12v|RAgr(%TX zIUh%6EgWO6@=w41kM5T9uk|0*p5!4Tmm6i3Be}H4vdrR8&M2{<)bLkcp02@UF7q_} zodxy$QyK9t7Fa_kH1LAZz&}>iY_-X|Eer0))aWUM*$&~e{Qfzxi2#E9Vt4oSo`dM_ zI}5G*Ni4dA)@dx6#xi!a8LVo+0k?IFz#~{yn<7U8Gl(_d68feQuYTFoeE}~5rje)) zE#c6B92$IrTL$rYKG#xV@a`JMQYyNP{SIuv3hc%z9AwYJEjY~?-L9HAgDR1 z>d#g)zNn10m8k)IiKEhF`7Mf5H1W%9w?kZ|*r0|+4M`2H8cR`lxO|1vzlyK%NmQ^? z;Rl4fd(L7=D%+rxl|Nzt>xkcarPNZ@4_B26t9?@5lO zxXW4cCCI*xb2zU^aLL2Fk^LFv=oZSjfT!q<)1=O~@NK$Wl0f>$opq7kaA!TuF-eCQ zLRa~FM_AFJQ$t$AB|*;o6RTg4qxpYf;05$+EQ1BUgYUZTR6WV8K-c9D80J||Ov)3}O79F^ zfi7P&_=F&KGMZ&jE#@2i(M7{*T79!mbZb>~t1DVz5#Sbt_AxGMzz^}PdjAN|@hvs_ c4aNN!KgBP+)-T!mGrvWs$zSj{`~w~T0Xwp?y#N3J delta 880 zcmZ8eOHWfl6#k~S+}lp4?Y#woq6NePeSn~1@dbhu--y~;pJ1=F!A4$U8{>+-J2DG5 zCjJEtS|f?Zm5IiUTmOM8|AFz$?F|w$$$T?s=KIcf&iU2972)6hY<~hU344?Olo8hF z4KXC;V}DdmaFcTcVG3A?$Q~`Dw+QS(tDM)0fp$a(2r>j3Wj{1dbvji@unT=mmy+!p%G? zGyYfdB_9g#+FHr3mJ5~gQ~5%SuwnUKOvQq^s=e@N#$LAc`* zJood>F-zuy5815z7>spY<5cu@fh?v?Oow&c;3(jxfm;H%ac9d2H8bxVL$CZ1YLmsV zA?HGdZs0ycryGiHFnCngXb4T9eqogMV{|J*qXl%N(gW|oQg2~=MzD@>Y8%Z!9c^#u z)q~@-hn$}rIs~FHae`vq4K_~V6x~Qi4TQASDS$CzGK}N&27yX9P5}?0o=U$%?4LAu zqRnKi#gT1o{MwP#F+r&qtx05DtqDr45=C6o1pDjgtt0)vZaX$Ca;*G{2E`R-ID;uy zZjeyPX_2AV1dWn)CluR7)f!aOqvqjK3xujFi!8*xKq&ZtLk!A@rg~R#n-_#ZCllda wRa!e$S~!byq;=k*F%w=~aI9R!B?m8KhEUazC*3Q!iX84zgj3`m=4qPIzv8}oEdT%j diff --git a/target/classes/edu/ucsd/spendingtracker/view/SummaryView$1.class b/target/classes/edu/ucsd/spendingtracker/view/SummaryView$1.class new file mode 100644 index 0000000000000000000000000000000000000000..18dc59dba4dfa5495b00c79d843d7dbd4eb06891 GIT binary patch literal 1547 zcmbW1-%k@k5XZmUmR?&9I1xcbMX^GE2nV7j20}tAM3RD-lD;qPQV!d@W^Y^N&Hu(% zeZlC1@y*0P$~b$icqz3In)K#&Zuc|a*_qv6zrTG4uz{y3L=ZI)GcklX!}Kw4^TYRc zOF4DBq@?543ZB~*QVGcrUvpeXtusV3*>VC21`H#GVFRX#5sWgdh-%AjRs5>$H-%fJ zQH)(PC^XZne+5)aWJp1^gz?3i7DJITAbTwOMh!wml?crF_am8+{aUkSAKd6&uyy#VUz09Sf$6aSk9XUS3 z!sUacmshD3^s@94mErOWX_>Vn)R9-+A^&r*)~=NH zI%!Fjyq2tpEk~Ev3N^x_7EV2|=~n8VPsgyc?*`~7WCyoqh(g8L6~21q`HI2Zc3mM0 zb?*DZ$9+1C5xPP^_lEx8qS0-7djS^shjL%QK9eJYX?n)V4b0#UJtsR8a2NMzq!-T+ zj^TlRr)eK78qkTNrzXB3t0P(YpGb@wACb&|MUvqY`Jy5CYzS_h!7a?d*YGGNvQF|ssYOI#wWCB}34Q;hX;I$4_(NAE)? z>%X~LAkY+YUC>Gwl+5LSAa#lxgILLPEZWL^ki=sw1a=WN*%%3o;z{6H!V1|GiLuDi F?+;cgdl3Kt literal 0 HcmV?d00001 diff --git a/target/classes/edu/ucsd/spendingtracker/view/SummaryView.class b/target/classes/edu/ucsd/spendingtracker/view/SummaryView.class index c8a5ba901d3e14432d8c7406bc1adf70556960dd..82c2c04ebd588c492601af68b3727f0298d34667 100644 GIT binary patch literal 3734 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 I4I2pk1*G75E&u=k diff --git a/target/classes/edu/ucsd/spendingtracker/view/charts/BarChartProvider.class b/target/classes/edu/ucsd/spendingtracker/view/charts/BarChartProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..264ef817bda6fdc01bad6c37760789cba89b4d89 GIT binary patch literal 4063 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 literal 0 HcmV?d00001 diff --git a/target/classes/module-info.class b/target/classes/module-info.class index f7e553dc6ba48b332c9dbd459411ba21c4991f93..56c5db1b5c1bb575398f8d6700affd483042660c 100644 GIT binary patch delta 104 zcmdnQbdrhd)W2Q(7#J8F8N?@Y?GO=W5MgBC&PpsxOsmjKN-RzlVGx^m)Xdg~feomL pgMpQSvw?wun}G+&<740llY&5!n?V@NW@Hcr(hLj`nh~sm0RV!W4vPQ) delta 81 zcmX@fw26u9)W2Q(7#J8F8AK;??O+yR5Se(*%-oED4JgLJz{0@Uz`(%Gzysv*G4O*) UK_JP^z{nsBq#2+zBUp|B0E6EN*#H0l diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index a8ce4f0..e903b9d 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -2,7 +2,11 @@ edu/ucsd/spendingtracker/view/SummaryView.class edu/ucsd/spendingtracker/presenter/SpendingPresenter.class edu/ucsd/spendingtracker/model/Model.class edu/ucsd/spendingtracker/presenter/SummaryPresenter.class +edu/ucsd/spendingtracker/view/charts/PieChartProvider.class edu/ucsd/spendingtracker/App.class +edu/ucsd/spendingtracker/view/charts/IChartProvider.class +edu/ucsd/spendingtracker/view/charts/BarChartProvider.class +edu/ucsd/spendingtracker/view/SummaryView$1.class module-info.class edu/ucsd/spendingtracker/repository/ExpenseRepository.class edu/ucsd/spendingtracker/datasource/IDataSource.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 3b467f5..2524f5e 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -13,4 +13,7 @@ /Users/rickyzam/Documents/UCSD/CSE110/CSE110-Lab4/src/main/java/edu/ucsd/spendingtracker/repository/ExpenseRepository.java /Users/rickyzam/Documents/UCSD/CSE110/CSE110-Lab4/src/main/java/edu/ucsd/spendingtracker/view/SpendingView.java /Users/rickyzam/Documents/UCSD/CSE110/CSE110-Lab4/src/main/java/edu/ucsd/spendingtracker/view/SummaryView.java +/Users/rickyzam/Documents/UCSD/CSE110/CSE110-Lab4/src/main/java/edu/ucsd/spendingtracker/view/charts/BarChartProvider.java +/Users/rickyzam/Documents/UCSD/CSE110/CSE110-Lab4/src/main/java/edu/ucsd/spendingtracker/view/charts/IChartProvider.java +/Users/rickyzam/Documents/UCSD/CSE110/CSE110-Lab4/src/main/java/edu/ucsd/spendingtracker/view/charts/PieChartProvider.java /Users/rickyzam/Documents/UCSD/CSE110/CSE110-Lab4/src/main/java/module-info.java