filters added
This commit is contained in:
parent
93f57b634d
commit
4d9008fde2
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ public enum Rank {
|
||||||
/**
|
/**
|
||||||
* First Level
|
* First Level
|
||||||
*/
|
*/
|
||||||
|
NONE,
|
||||||
|
|
||||||
BRONZE,
|
BRONZE,
|
||||||
/**
|
/**
|
||||||
* Second Level
|
* Second Level
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue