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 SILVER -> freqs[1] += 1;
case GOLD -> freqs[2] += 1; case GOLD -> freqs[2] += 1;
case PLATINUM -> freqs[3] += 1; case PLATINUM -> freqs[3] += 1;
default -> throw new IllegalArgumentException("Unexpected value: " + player.getPlayerLevel());
} }
} }
return freqs; return freqs;

View File

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

View File

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

View File

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

View File

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

View File

@ -1,14 +1,24 @@
package com.r0r5chach.controllers; 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.Rank;
import com.r0r5chach.competitor.r6.R6Attacker;
import com.r0r5chach.competitor.r6.R6Defender;
import com.r0r5chach.competitor.valorant.ValorantAgent; import com.r0r5chach.competitor.valorant.ValorantAgent;
import javafx.collections.FXCollections;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ChoiceBox; import javafx.scene.control.ChoiceBox;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToggleGroup;
import javafx.scene.control.RadioButton;
public class FiltersController { public class FiltersController implements Initializable {
@FXML @FXML
private TextField numberFilter; private TextField numberFilter;
@ -16,14 +26,74 @@ public class FiltersController {
private TextField nameFilter; private TextField nameFilter;
@FXML @FXML
ChoiceBox<Rank> levelFilter; private ChoiceBox<Rank> levelFilter;
@FXML
private TextField scoreFilter;
@FXML @FXML
private ToggleGroup typeFilter; private ToggleGroup typeFilter;
@FXML @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.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.function.Predicate;
import static com.r0r5chach.controllers.FiltersController.getFilters;
import com.r0r5chach.CompetitorRow; import com.r0r5chach.CompetitorRow;
import com.r0r5chach.Manager; import com.r0r5chach.Manager;
import com.r0r5chach.competitor.Competitor; import com.r0r5chach.competitor.Competitor;
@ -15,11 +17,14 @@ import com.r0r5chach.competitor.valorant.ValorantPlayer;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.collections.transformation.SortedList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Popup; import javafx.stage.Popup;
@ -27,8 +32,6 @@ public class ViewController extends Controller {
@FXML @FXML
private TableView<CompetitorRow> competitorTable; private TableView<CompetitorRow> competitorTable;
@FXML Button filterButton;
private TableColumn<CompetitorRow,Integer> playerNumCol; private TableColumn<CompetitorRow,Integer> playerNumCol;
private TableColumn<CompetitorRow,String> playerNameCol; private TableColumn<CompetitorRow,String> playerNameCol;
private TableColumn<CompetitorRow,Rank> playerLevelCol; private TableColumn<CompetitorRow,Rank> playerLevelCol;
@ -38,23 +41,75 @@ public class ViewController extends Controller {
private TableColumn<CompetitorRow,String> favoriteAttackerCol; private TableColumn<CompetitorRow,String> favoriteAttackerCol;
private TableColumn<CompetitorRow,String> favoriteDefenderCol; private TableColumn<CompetitorRow,String> favoriteDefenderCol;
private Popup filters; @FXML
private Button filterButton;
private Popup filterPopup;
private String[] filters;
@FXML
private TextArea filterBox;
@Override @Override
public void initialize(URL ul, ResourceBundle rb) { public void initialize(URL ul, ResourceBundle rb) {
Platform.runLater(() -> { Platform.runLater(() -> {
filters = new String[]{"", "", "", "", "", "", ""};
filterPopup = new Popup();
filter();
loadCompetitors(); loadCompetitors();
loadView(); loadView();
}); });
} }
public void generateTable() { private void generateTable() {
initColumns(); initColumns();
setColumnCellValues(); setColumnCellValues();
addColumns(); 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<>(); ArrayList<CompetitorRow> outputList = new ArrayList<>();
for(Competitor player: list) { for(Competitor player: list) {
if (player instanceof ValorantPlayer) { if (player instanceof ValorantPlayer) {
@ -68,8 +123,17 @@ public class ViewController extends Controller {
} }
private void loadView() { private void loadView() {
ObservableList<CompetitorRow> table = loadTable(competitors.getCompetitors());
generateTable(); 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() { private void initColumns() {
@ -114,16 +178,26 @@ public class ViewController extends Controller {
} }
private void filterDialog() throws IOException { private void filterDialog() throws IOException {
filters = new Popup(); filterPopup = new Popup();
Parent root = Manager.loadFXML("pages/filters"); Parent root = Manager.loadFXML("pages/filters");
filters.getContent().add(root); filterPopup.getContent().add(root);
filters.show(Manager.stage); filterPopup.show(Manager.stage);
filterButton.setText("Save"); filterButton.setText("Save");
} }
private void saveFilters() { private void saveFilters() {
filters.hide(); filterPopup.hide();
filterButton.setText("Filters"); 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.geometry.Insets?>
<?import javafx.scene.control.ChoiceBox?> <?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.RadioButton?> <?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?> <?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?> <?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.ColumnConstraints?>
@ -69,35 +70,41 @@
<Insets right="15.0" /> <Insets right="15.0" />
</GridPane.margin> </GridPane.margin>
</Text> </Text>
<TextField fx:id="numberFilter" GridPane.columnIndex="1"> <TextField fx:id="numberFilter" onKeyReleased="#setFilters" GridPane.columnIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets right="150.0" /> <Insets right="150.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </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> <GridPane.margin>
<Insets right="150.0" /> <Insets right="150.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </TextField>
<ChoiceBox fx:id="levelFilter" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="2" /> <ChoiceBox fx:id="levelFilter" onMouseExited="#setFilters" 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="agentFilter" onMouseExited="#setFilters" 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="attackerFilter" onMouseExited="#setFilters" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="6" />
<ChoiceBox fx:id="defenderFilter" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="7" /> <ChoiceBox fx:id="defenderFilter" onMouseExited="#setFilters" prefWidth="150.0" GridPane.columnIndex="1" GridPane.rowIndex="7" />
<TextField fx:id="scoreFilter" GridPane.columnIndex="1" GridPane.rowIndex="3"> <TextField fx:id="scoreFilter" onKeyReleased="#setFilters" onMouseExited="#setFilters" GridPane.columnIndex="1" GridPane.rowIndex="3">
<GridPane.margin> <GridPane.margin>
<Insets right="150.0" /> <Insets right="150.0" />
</GridPane.margin> </GridPane.margin>
</TextField> </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>
<ToggleGroup fx:id="typeFilter" /> <ToggleGroup fx:id="typeFilter" />
</toggleGroup> </toggleGroup>
</RadioButton> </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> <GridPane.margin>
<Insets left="50.0" /> <Insets left="50.0" />
</GridPane.margin> </GridPane.margin>
</RadioButton> </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> </children>
</GridPane> </GridPane>
</children> </children>