filters added
This commit is contained in:
parent
93f57b634d
commit
4d9008fde2
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ public enum Rank {
|
|||
/**
|
||||
* First Level
|
||||
*/
|
||||
NONE,
|
||||
|
||||
BRONZE,
|
||||
/**
|
||||
* Second Level
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.r0r5chach.competitor.r6;
|
|||
import java.util.Locale;
|
||||
|
||||
public enum R6Attacker {
|
||||
NONE,
|
||||
GRIM,
|
||||
SENS,
|
||||
OSA,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.r0r5chach.competitor.r6;
|
|||
import java.util.Locale;
|
||||
|
||||
public enum R6Defender {
|
||||
NONE,
|
||||
SOLIS,
|
||||
AZAMI,
|
||||
THORN,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import java.util.Locale;
|
|||
* @author r0r5chach
|
||||
*/
|
||||
public enum ValorantAgent {
|
||||
NONE,
|
||||
BRIMSTONE,
|
||||
VIPER,
|
||||
OMEN,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue