package com.r0r5chach.controllers; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.ResourceBundle; import com.r0r5chach.CompetitorRow; import com.r0r5chach.Manager; import com.r0r5chach.competitor.Competitor; import com.r0r5chach.competitor.Rank; import com.r0r5chach.competitor.r6.R6Player; import com.r0r5chach.competitor.valorant.ValorantPlayer; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.Parent; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Popup; public class ViewController extends Controller { @FXML private TableView competitorTable; @FXML Button filterButton; private TableColumn playerNumCol; private TableColumn playerNameCol; private TableColumn playerLevelCol; private TableColumn scoresCol; private TableColumn favoriteCharsCol; private TableColumn favoriteAgentCol; private TableColumn favoriteAttackerCol; private TableColumn favoriteDefenderCol; private Popup filters; @Override public void initialize(URL ul, ResourceBundle rb) { Platform.runLater(() -> { loadCompetitors(); loadView(); }); } public void generateTable() { initColumns(); setColumnCellValues(); addColumns(); } public ObservableList loadTable(ArrayList list) { ArrayList outputList = new ArrayList<>(); for(Competitor player: list) { if (player instanceof ValorantPlayer) { outputList.add(new CompetitorRow(player.getPlayerNumber(), player.getPlayerName(), player.getPlayerLevel(), player.getScores(), ((ValorantPlayer) player).getFavoriteAgent())); } if (player instanceof R6Player) { outputList.add(new CompetitorRow(player.getPlayerNumber(), player.getPlayerName(), player.getPlayerLevel(), player.getScores(), ((R6Player) player).getFavoriteAttacker(), ((R6Player) player).getFavoriteDefender())); } } return FXCollections.observableArrayList(outputList); } private void loadView() { generateTable(); competitorTable.setItems(loadTable(competitors.getCompetitors())); } private void initColumns() { playerNumCol = new TableColumn("Player Number"); playerNameCol = new TableColumn("Player Name"); playerLevelCol = new TableColumn("Player Level"); scoresCol = new TableColumn("Player Scores"); favoriteCharsCol = new TableColumn("Favorite Characters"); favoriteAgentCol = new TableColumn("Agent"); favoriteAttackerCol = new TableColumn("Attacker"); favoriteDefenderCol = new TableColumn("Defender"); } private void setColumnCellValues() { playerNumCol.setCellValueFactory(new PropertyValueFactory("playerNumber")); playerNameCol.setCellValueFactory(new PropertyValueFactory("playerName")); playerLevelCol.setCellValueFactory(new PropertyValueFactory("playerLevel")); scoresCol.setCellValueFactory(new PropertyValueFactory("scores")); favoriteAgentCol.setCellValueFactory(new PropertyValueFactory("favoriteAgent")); favoriteAttackerCol.setCellValueFactory(new PropertyValueFactory("favoriteAttacker")); favoriteDefenderCol.setCellValueFactory(new PropertyValueFactory("favoriteDefender")); } private void addColumns() { competitorTable.getColumns().add(playerNumCol); competitorTable.getColumns().add(playerNameCol); competitorTable.getColumns().add(playerLevelCol); competitorTable.getColumns().add(scoresCol); favoriteCharsCol.getColumns().add(favoriteAgentCol); favoriteCharsCol.getColumns().add(favoriteAttackerCol); favoriteCharsCol.getColumns().add(favoriteDefenderCol); competitorTable.getColumns().add(favoriteCharsCol); } @FXML private void filterPress() throws IOException { switch(filterButton.getText().toLowerCase()) { case "filters" -> filterDialog(); case "save" -> saveFilters(); } } private void filterDialog() throws IOException { filters = new Popup(); Parent root = Manager.loadFXML("pages/filters"); filters.getContent().add(root); filters.show(Manager.stage); filterButton.setText("Save"); } private void saveFilters() { filters.hide(); filterButton.setText("Filters"); //TODO: filter implementation } }