filters added

This commit is contained in:
Joshua Perry 2023-02-03 18:01:58 +00:00
parent 93f57b634d
commit 4d9008fde2
8 changed files with 183 additions and 26 deletions

View File

@ -110,6 +110,7 @@ public class CompetitorList {
case SILVER -> freqs[1] += 1;
case GOLD -> freqs[2] += 1;
case PLATINUM -> freqs[3] += 1;
default -> throw new IllegalArgumentException("Unexpected value: " + player.getPlayerLevel());
}
}
return freqs;

View File

@ -10,6 +10,8 @@ public enum Rank {
/**
* First Level
*/
NONE,
BRONZE,
/**
* Second Level

View File

@ -3,6 +3,7 @@ package com.r0r5chach.competitor.r6;
import java.util.Locale;
public enum R6Attacker {
NONE,
GRIM,
SENS,
OSA,

View File

@ -3,6 +3,7 @@ package com.r0r5chach.competitor.r6;
import java.util.Locale;
public enum R6Defender {
NONE,
SOLIS,
AZAMI,
THORN,

View File

@ -7,6 +7,7 @@ import java.util.Locale;
* @author r0r5chach
*/
public enum ValorantAgent {
NONE,
BRIMSTONE,
VIPER,
OMEN,

View File

@ -1,14 +1,24 @@
package com.r0r5chach.controllers;
import java.net.URL;
import java.util.Arrays;
import java.util.ResourceBundle;
import com.r0r5chach.competitor.Rank;
import com.r0r5chach.competitor.r6.R6Attacker;
import com.r0r5chach.competitor.r6.R6Defender;
import com.r0r5chach.competitor.valorant.ValorantAgent;
import javafx.collections.FXCollections;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.control.RadioButton;
public class FiltersController {
public class FiltersController implements Initializable {
@FXML
private TextField numberFilter;
@ -16,14 +26,74 @@ public class FiltersController {
private TextField nameFilter;
@FXML
ChoiceBox<Rank> levelFilter;
@FXML
private TextField scoreFilter;
private ChoiceBox<Rank> levelFilter;
@FXML
private ToggleGroup typeFilter;
@FXML
ChoiceBox<ValorantAgent> agentFilter;
private ChoiceBox<ValorantAgent> agentFilter;
@FXML
private ChoiceBox<R6Attacker> attackerFilter;
@FXML
private ChoiceBox<R6Defender> defenderFilter;
@FXML
private TextArea filterBox;
private static String[] filters;
@Override
public void initialize(URL url, ResourceBundle rb) {
attackerFilter.setItems(FXCollections.observableList(Arrays.asList(R6Attacker.values())));
attackerFilter.setValue(R6Attacker.NONE);
defenderFilter.setItems(FXCollections.observableList(Arrays.asList(R6Defender.values())));
defenderFilter.setValue(R6Defender.NONE);
agentFilter.setItems(FXCollections.observableList(Arrays.asList(ValorantAgent.values())));
agentFilter.setValue(ValorantAgent.NONE);
levelFilter.setItems(FXCollections.observableList(Arrays.asList(Rank.values())));
levelFilter.setValue(Rank.NONE);
}
@FXML
private void setFilters() {
String[] output = new String[7];
for(int i= 0;i < output.length;i++ ) {
String filter = null;
switch(i) {
case 0 -> filter = numberFilter.getText();
case 1 -> filter = nameFilter.getText();
case 2 -> filter = levelFilter.getSelectionModel().getSelectedItem().toString();
case 3 -> filter = ((RadioButton)typeFilter.getSelectedToggle()).getText();
case 4 -> filter = agentFilter.getSelectionModel().getSelectedItem().toString();
case 5 -> filter = attackerFilter.getSelectionModel().getSelectedItem().toString();
case 6 -> filter = defenderFilter.getSelectionModel().getSelectedItem().toString();
default -> filter = "";
}
if (isNull(filter) || filter.equals("NONE")) {
output[i] = "";
}
else {
output[i] = filter;
}
}
filters = output;
}
public static String[] getFilters() {
return filters;
}
private boolean isNull(String string) {
if (string == null) {
return true;
}
else {
return false;
}
}
}

View File

@ -4,7 +4,9 @@ import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.function.Predicate;
import static com.r0r5chach.controllers.FiltersController.getFilters;
import com.r0r5chach.CompetitorRow;
import com.r0r5chach.Manager;
import com.r0r5chach.competitor.Competitor;
@ -15,11 +17,14 @@ import com.r0r5chach.competitor.valorant.ValorantPlayer;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.collections.transformation.SortedList;
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.TextArea;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Popup;
@ -27,8 +32,6 @@ public class ViewController extends Controller {
@FXML
private TableView<CompetitorRow> competitorTable;
@FXML Button filterButton;
private TableColumn<CompetitorRow,Integer> playerNumCol;
private TableColumn<CompetitorRow,String> playerNameCol;
private TableColumn<CompetitorRow,Rank> playerLevelCol;
@ -38,23 +41,75 @@ public class ViewController extends Controller {
private TableColumn<CompetitorRow,String> favoriteAttackerCol;
private TableColumn<CompetitorRow,String> favoriteDefenderCol;
private Popup filters;
@FXML
private Button filterButton;
private Popup filterPopup;
private String[] filters;
@FXML
private TextArea filterBox;
@Override
public void initialize(URL ul, ResourceBundle rb) {
Platform.runLater(() -> {
filters = new String[]{"", "", "", "", "", "", ""};
filterPopup = new Popup();
filter();
loadCompetitors();
loadView();
});
}
public void generateTable() {
private void generateTable() {
initColumns();
setColumnCellValues();
addColumns();
}
public ObservableList<CompetitorRow> loadTable(ArrayList<Competitor> list) {
private Predicate<CompetitorRow> filter() {
Predicate<CompetitorRow> test = competitor -> {
boolean flag = true;
if (!Integer.toString(competitor.getPlayerNumber()).toLowerCase().contains(filters[0].toLowerCase())) {
flag = false;
}
if (!competitor.getPlayerName().toLowerCase().contains(filters[1].toLowerCase())) {
flag = false;
}
if (!competitor.getPlayerLevel().toString().toLowerCase().contains(filters[2].toLowerCase())) {
flag = false;
}
if (filters[3].equals("R6") && !competitor.getFavoriteAttacker().toString().toLowerCase().equals("N/A")) {
flag = false;
}
if (filters[3].equals("Valorant") && !competitor.getFavoriteAgent().toString().toLowerCase().equals("N/A")) {
flag = false;
}
if (!competitor.getFavoriteAgent().toString().toLowerCase().contains(filters[4])) {
flag = false;
}
if (!competitor.getFavoriteAttacker().toString().toLowerCase().contains(filters[5])) {
flag = false;
}
if (!competitor.getFavoriteDefender().toString().toLowerCase().contains(filters[6])) {
flag = false;
}
return flag;
};
return test;
}
private ObservableList<CompetitorRow> loadTable(ArrayList<Competitor> list) {
ArrayList<CompetitorRow> outputList = new ArrayList<>();
for(Competitor player: list) {
if (player instanceof ValorantPlayer) {
@ -68,8 +123,17 @@ public class ViewController extends Controller {
}
private void loadView() {
ObservableList<CompetitorRow> table = loadTable(competitors.getCompetitors());
generateTable();
competitorTable.setItems(loadTable(competitors.getCompetitors()));
if (filterCheck()) {
FilteredList<CompetitorRow> data = new FilteredList<>(table, filter());
SortedList<CompetitorRow> sortedData = new SortedList<>(data);
sortedData.comparatorProperty().bind(competitorTable.comparatorProperty());
competitorTable.setItems(sortedData);
}
else {
competitorTable.setItems(table);
}
}
private void initColumns() {
@ -114,16 +178,26 @@ public class ViewController extends Controller {
}
private void filterDialog() throws IOException {
filters = new Popup();
filterPopup = new Popup();
Parent root = Manager.loadFXML("pages/filters");
filters.getContent().add(root);
filters.show(Manager.stage);
filterPopup.getContent().add(root);
filterPopup.show(Manager.stage);
filterButton.setText("Save");
}
private void saveFilters() {
filters.hide();
filterPopup.hide();
filterButton.setText("Filters");
//TODO: filter implementation
filters = getFilters();
loadView();
}
private boolean filterCheck() {
for(String filter: filters) {
if (!filter.equals("")) {
return true;
}
}
return false;
}
}

View File

@ -3,6 +3,7 @@
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.ColumnConstraints?>
@ -69,35 +70,41 @@
<Insets right="15.0" />
</GridPane.margin>
</Text>
<TextField fx:id="numberFilter" GridPane.columnIndex="1">
<TextField fx:id="numberFilter" onKeyReleased="#setFilters" GridPane.columnIndex="1">
<GridPane.margin>
<Insets right="150.0" />
</GridPane.margin>
</TextField>
<TextField fx:id="nameFilter" GridPane.columnIndex="1" GridPane.rowIndex="1">
<TextField fx:id="nameFilter" onKeyReleased="#setFilters" onMouseExited="#setFilters" GridPane.columnIndex="1" GridPane.rowIndex="1">
<GridPane.margin>
<Insets right="150.0" />
</GridPane.margin>
</TextField>
<ChoiceBox fx:id="levelFilter" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<ChoiceBox fx:id="agentFilter" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="5" />
<ChoiceBox fx:id="attackerFilter" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="6" />
<ChoiceBox fx:id="defenderFilter" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="7" />
<TextField fx:id="scoreFilter" GridPane.columnIndex="1" GridPane.rowIndex="3">
<ChoiceBox fx:id="levelFilter" onMouseExited="#setFilters" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<ChoiceBox fx:id="agentFilter" onMouseExited="#setFilters" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="5" />
<ChoiceBox fx:id="attackerFilter" onMouseExited="#setFilters" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="6" />
<ChoiceBox fx:id="defenderFilter" onMouseExited="#setFilters" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="7" />
<TextField fx:id="scoreFilter" onKeyReleased="#setFilters" onMouseExited="#setFilters" GridPane.columnIndex="1" GridPane.rowIndex="3">
<GridPane.margin>
<Insets right="150.0" />
</GridPane.margin>
</TextField>
<RadioButton mnemonicParsing="false" text="R6" GridPane.columnIndex="1" GridPane.rowIndex="4">
<RadioButton mnemonicParsing="false" onMouseExited="#setFilters" text="R6" GridPane.columnIndex="1" GridPane.rowIndex="4">
<toggleGroup>
<ToggleGroup fx:id="typeFilter" />
</toggleGroup>
</RadioButton>
<RadioButton mnemonicParsing="false" text="Valorant" toggleGroup="$typeFilter" GridPane.columnIndex="1" GridPane.rowIndex="4">
<RadioButton mnemonicParsing="false" onMouseExited="#setFilters" text="Valorant" toggleGroup="$typeFilter" GridPane.columnIndex="1" GridPane.rowIndex="4">
<GridPane.margin>
<Insets left="50.0" />
</GridPane.margin>
</RadioButton>
<TextArea fx:id="filterBox" cacheShape="false" centerShape="false" disable="true" editable="false" focusTraversable="false" prefHeight="200.0" prefWidth="200.0" scaleShape="false" visible="false" GridPane.rowIndex="5" />
<RadioButton cacheShape="false" centerShape="false" focusTraversable="false" mnemonicParsing="false" scaleShape="false" selected="true" text="NONE" toggleGroup="$typeFilter" visible="false" GridPane.columnIndex="1" GridPane.rowIndex="4">
<GridPane.margin>
<Insets left="150.0" />
</GridPane.margin>
</RadioButton>
</children>
</GridPane>
</children>