Skip to content

Commit

Permalink
Feat: Added amount text field for buying/selling
Browse files Browse the repository at this point in the history
  • Loading branch information
tommyah committed May 13, 2026
1 parent 2da1162 commit 4a716a7
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 21 deletions.
2 changes: 0 additions & 2 deletions src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,9 @@
import edu.ntnu.idi.idatt2003.g40.mappe.view.playgame.PlayGameView;
import edu.ntnu.idi.idatt2003.g40.mappe.view.settings.SettingsController;
import edu.ntnu.idi.idatt2003.g40.mappe.view.settings.SettingsView;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;

import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.financialsummary.SummaryController;
import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.financialsummary.SummaryView;
import edu.ntnu.idi.idatt2003.g40.mappe.view.widgets.stats.StatsController;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ public Transaction buy(final String symbol,
TransactionCalculator calculator = new PurchaseCalculator(share);
Purchase purchase = new Purchase(share, week.get(), calculator);
player.handleTransaction(purchase);
purchase.commit(player);
return purchase;
}

Expand All @@ -197,7 +196,6 @@ public Transaction sell(final Share share, final Player player)
TransactionCalculator calculator = new SaleCalculator(share);
Sale sale = new Sale(share, week.get(), calculator);
player.handleTransaction(sale);
sale.commit(player);
return sale;
}

Expand Down
19 changes: 11 additions & 8 deletions src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/model/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,14 +172,17 @@ public PlayerStatus getStatus() {
* @param transaction the transaction to handle.
* */
public void handleTransaction(final Transaction transaction) {
transactionArchive.add(transaction);
if (transaction instanceof Purchase purchase) {
withdrawMoney(purchase.getCalculator().calculateTotal());
portfolio.addShare(purchase.getShare());
} else if (transaction instanceof Sale sale) {
addMoney(sale.getCalculator().calculateTotal());
portfolio.removeShare(sale.getShare());
if (money.floatValue() > transaction.getCalculator().calculateTotal().floatValue()) {
transactionArchive.add(transaction);
if (transaction instanceof Purchase purchase) {
withdrawMoney(purchase.getCalculator().calculateTotal());
portfolio.addShare(purchase.getShare());
} else if (transaction instanceof Sale sale) {
addMoney(sale.getCalculator().calculateTotal());
portfolio.removeShare(sale.getShare());
}
networthAsFloatProp.setValue(getNetWorth().floatValue());
transaction.commit(this);
}
networthAsFloatProp.setValue(getNetWorth().floatValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;

import java.math.BigDecimal;
import java.util.List;

public class SummaryView extends ViewElement<HBox, SummaryActions> {
Expand Down Expand Up @@ -55,11 +53,13 @@ protected void initLayout() {
xAxis.setMinorTickVisible(false);
xAxis.setTickMarkVisible(true);
xAxis.setTickLabelsVisible(true);
xAxis.setAutoRanging(false);

yAxis = new NumberAxis();
yAxis.setTickLabelsVisible(false);
yAxis.setTickMarkVisible(false);
yAxis.setMinorTickVisible(false);
yAxis.setAutoRanging(false);

chart = new LineChart<>(xAxis, yAxis);
chart.setCreateSymbols(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@

import edu.ntnu.idi.idatt2003.g40.mappe.engine.Exchange;
import edu.ntnu.idi.idatt2003.g40.mappe.model.Player;
import edu.ntnu.idi.idatt2003.g40.mappe.model.Share;
import edu.ntnu.idi.idatt2003.g40.mappe.model.Stock;
import edu.ntnu.idi.idatt2003.g40.mappe.service.SaleCalculator;
import edu.ntnu.idi.idatt2003.g40.mappe.service.TransactionFactory;
import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager;
import edu.ntnu.idi.idatt2003.g40.mappe.utils.Validator;
import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewController;
import javafx.scene.control.Button;
import javafx.scene.control.TextFormatter;

import java.math.BigDecimal;
import java.util.List;
Expand Down Expand Up @@ -54,16 +59,25 @@ protected void initInteractions() {
getViewElement().setCurrentStock(stockList.getFirst());
getViewElement().updateGraph();
getViewElement().setOnAction(StatsActions.BUY_SHARES, () -> {
BigDecimal amountToBuy = new BigDecimal("1.0");
exchange.buy(
getViewElement().getCurrentStock().getSymbol(),
amountToBuy,
player
);
if (Validator.NOT_EMPTY.isValid(getViewElement().getQuantityInputField().getText())) {
BigDecimal amountToBuy = new BigDecimal(getViewElement().getQuantityInputField().getText());
exchange.buy(
getViewElement().getCurrentStock().getSymbol(),
amountToBuy,
player
);
}
});

exchange.weekProperty().addListener((observable,o,n) -> {
getViewElement().updateGraph();
});

getViewElement().getQuantityInputField().setTextFormatter(new TextFormatter<>(change -> {
if (change.getControlNewText().matches("([0-9]*(\\.[0-9]*)?)?")) {
return change;
}
return null;
}));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
Expand All @@ -32,6 +33,7 @@ public class StatsView extends ViewElement<HBox, StatsActions> {
private NumberAxis xAxis;
private NumberAxis yAxis;
private Label selectedStockPriceLabel;
private TextField shareQuantityInputField;

public StatsView() {
stockButtons = new ArrayList<>();
Expand Down Expand Up @@ -114,9 +116,14 @@ protected void initLayout() {
sellBtn.getStyleClass().add("sell-button");
registerButton(StatsActions.SELL_SHARES, sellBtn);

shareQuantityInputField = new TextField("1.0");

shareQuantityInputField.setPromptText("Quantity amount");


Region spacer = new Region();
HBox.setHgrow(spacer, Priority.ALWAYS);
tradeActions.getChildren().addAll(buyBtn, spacer, sellBtn);
tradeActions.getChildren().addAll(buyBtn, spacer, shareQuantityInputField, sellBtn);

VBox.setVgrow(chart, Priority.ALWAYS);

Expand Down Expand Up @@ -196,4 +203,8 @@ public void setOnStockAction(final Button button,
{
button.setOnAction(e -> logic.accept(stock));
}

public TextField getQuantityInputField() {
return shareQuantityInputField;
}
}

0 comments on commit 4a716a7

Please sign in to comment.