From b3aaed4e21681e926f30d42b8f5fa3553c7a9ff1 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 9 Apr 2017 14:18:04 +0200 Subject: [PATCH] Fixed #65 - add filter options for payments --- .../budgetmaster/logic/FilterSettings.java | 72 +++++++++++++-- .../budgetmaster/logic/NormalPayment.java | 2 +- .../budgetmaster/logic/PaymentHandler.java | 42 +++++++-- .../budgetmaster/ui/CategoryController.java | 2 +- .../budgetmaster/ui/Controller.java | 35 +++++--- .../budgetmaster/ui/FilterController.java | 89 +++++++++++++++---- .../budgetmaster/ui/FilterGUI.fxml | 19 +++- .../budgetmaster/ui/HomeController.java | 2 +- .../ui/NewCategoryController.java | 2 +- .../budgetmaster/ui/NewPaymentController.java | 2 +- .../budgetmaster/ui/PaymentController.java | 52 ++++++++++- .../budgetmaster/ui/PaymentTab.fxml | 15 ++++ .../budgetmaster/ui/SettingsController.java | 2 +- 13 files changed, 286 insertions(+), 50 deletions(-) diff --git a/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java b/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java index 8264edb06..7a72815d0 100644 --- a/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java +++ b/src/de/deadlocker8/budgetmaster/logic/FilterSettings.java @@ -4,14 +4,14 @@ import java.util.ArrayList; public class FilterSettings { - private boolean isIncomeAllowed; - private boolean isPaymentAllowed; + private boolean isIncomeAllowed; + private boolean isPaymentAllowed; private boolean isNoRepeatingAllowed; private boolean isMonthlyRepeatingAllowed; private boolean isRepeatingEveryXDaysAllowed; private ArrayList<Integer> allowedCategoryIDs; private String name; - + public FilterSettings(boolean isIncomeAllowed, boolean isPaymentAllowed, boolean isNoRepeatingAllowed, boolean isMonthlyRepeatingAllowed, boolean isRepeatingEveryXDaysAllowed, ArrayList<Integer> allowedCategoryIDs, String name) { this.isIncomeAllowed = isIncomeAllowed; @@ -22,7 +22,7 @@ public class FilterSettings this.allowedCategoryIDs = allowedCategoryIDs; this.name = name; } - + public FilterSettings() { this.isIncomeAllowed = true; @@ -103,10 +103,72 @@ public class FilterSettings { this.name = name; } - + public String toString() { return "FilterSettings [isIncomeAllowed=" + isIncomeAllowed + ", isPaymentAllowed=" + isPaymentAllowed + ", isNoRepeatingAllowed=" + isNoRepeatingAllowed + ", isMonthlyRepeatingAllowed=" + isMonthlyRepeatingAllowed + ", isRepeatingEveryXDaysAllowed=" + isRepeatingEveryXDaysAllowed + ", allowedCategoryIDs=" + allowedCategoryIDs + ", name=" + name + "]"; } + + public boolean equals(Object other) + { + if(other == null) return false; + if(other == this) return true; + if(!(other instanceof FilterSettings)) return false; + FilterSettings otherSettings = (FilterSettings)other; + if(isIncomeAllowed == otherSettings.isIncomeAllowed() && + isPaymentAllowed == otherSettings.isPaymentAllowed && + isNoRepeatingAllowed == otherSettings.isNoRepeatingAllowed && + isMonthlyRepeatingAllowed == otherSettings.isMonthlyRepeatingAllowed && + isRepeatingEveryXDaysAllowed == otherSettings.isRepeatingEveryXDaysAllowed) + { + if(name == null) + { + if(otherSettings.getName() != null) + { + return false; + } + } + else + { + if(otherSettings.getName() == null) + { + return false; + } + else + { + if(!name.equals(otherSettings.getName())) return false; + } + } + + + if(allowedCategoryIDs == null) + { + if(otherSettings.getAllowedCategoryIDs() != null) + { + return false; + } + else + { + return true; + } + } + else + { + if(otherSettings.getAllowedCategoryIDs() == null) + { + return false; + } + else + { + if(allowedCategoryIDs.equals(otherSettings.getAllowedCategoryIDs())) + { + return true; + } + } + } + } + + return false; + } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java b/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java index 1f4bf8cff..f06a91e6e 100644 --- a/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java +++ b/src/de/deadlocker8/budgetmaster/logic/NormalPayment.java @@ -10,6 +10,6 @@ public class NormalPayment extends Payment @Override public String toString() { - return "Payment [ID=" + super.getID() + ", amount=" + super.getAmount() + ", date=" + super.getDate() + ", categoryID=" + super.getCategoryID() + ", name=" + super.getName() + ", description=" + super.getDescription() + "]"; + return "NormalPayment [ID=" + super.getID() + ", amount=" + super.getAmount() + ", date=" + super.getDate() + ", categoryID=" + super.getCategoryID() + ", name=" + super.getName() + ", description=" + super.getDescription() + "]"; } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java b/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java index 39f711290..ecb61a71c 100644 --- a/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java +++ b/src/de/deadlocker8/budgetmaster/logic/PaymentHandler.java @@ -36,23 +36,50 @@ public class PaymentHandler } private ArrayList<Payment> filterByRepeating(FilterSettings filterSettings, ArrayList<Payment> paymentsList) - { + { if(filterSettings.isNoRepeatingAllowed() && filterSettings.isMonthlyRepeatingAllowed() && filterSettings.isRepeatingEveryXDaysAllowed()) { - return payments; + return paymentsList; } ArrayList<Payment> filteredPayments = new ArrayList<>(); for(Payment currentPayment : paymentsList) - { - //TODO + { + //NormalPayment or rest + if(currentPayment instanceof NormalPayment || currentPayment.getID() == -1) + { + if(filterSettings.isNoRepeatingAllowed()) + { + filteredPayments.add(currentPayment); + } + } + //RepeatingPayment + else + { + RepeatingPaymentEntry repeatingPayment = (RepeatingPaymentEntry)currentPayment; + if((repeatingPayment.getRepeatInterval() != 0 && filterSettings.isRepeatingEveryXDaysAllowed()) || + (repeatingPayment.getRepeatMonthDay() != 0 && filterSettings.isMonthlyRepeatingAllowed())) + { + filteredPayments.add(currentPayment); + } + } } - return new ArrayList<>(); + return filteredPayments; } private ArrayList<Payment> filterByCategory(FilterSettings filterSettings, ArrayList<Payment> paymentsList) - { + { + if(filterSettings.getAllowedCategoryIDs() == null) + { + return paymentsList; + } + + if(filterSettings.getAllowedCategoryIDs().size() == 0) + { + return new ArrayList<>(); + } + ArrayList<Payment> filteredPayments = new ArrayList<>(); for(Payment currentPayment : paymentsList) { @@ -75,7 +102,7 @@ public class PaymentHandler ArrayList<Payment> filteredPayments = new ArrayList<>(); for(Payment currentPayment : paymentsList) { - if(currentPayment.getName().contains(filterSettings.getName())) + if(currentPayment.getName().toLowerCase().contains(filterSettings.getName().toLowerCase())) { filteredPayments.add(currentPayment); } @@ -111,6 +138,7 @@ public class PaymentHandler { ArrayList<Payment> filteredPayments = filterByType(filterSettings, payments); filteredPayments = filterByType(filterSettings, filteredPayments); + filteredPayments = filterByRepeating(filterSettings, filteredPayments); filteredPayments = filterByCategory(filterSettings, filteredPayments); filteredPayments = filterByName(filterSettings, filteredPayments); diff --git a/src/de/deadlocker8/budgetmaster/ui/CategoryController.java b/src/de/deadlocker8/budgetmaster/ui/CategoryController.java index 132ff978a..0cdb686ec 100644 --- a/src/de/deadlocker8/budgetmaster/ui/CategoryController.java +++ b/src/de/deadlocker8/budgetmaster/ui/CategoryController.java @@ -157,7 +157,7 @@ public class CategoryController implements Refreshable { ServerConnection connection = new ServerConnection(controller.getSettings()); connection.deleteCategory(ID); - controller.refresh(); + controller.refresh(controller.getFilterSettings()); } catch(Exception e) { diff --git a/src/de/deadlocker8/budgetmaster/ui/Controller.java b/src/de/deadlocker8/budgetmaster/ui/Controller.java index 330ab88bd..0c7c7cbf7 100644 --- a/src/de/deadlocker8/budgetmaster/ui/Controller.java +++ b/src/de/deadlocker8/budgetmaster/ui/Controller.java @@ -9,6 +9,7 @@ import org.joda.time.DateTime; import de.deadlocker8.budgetmaster.logic.CategoryBudget; import de.deadlocker8.budgetmaster.logic.CategoryHandler; +import de.deadlocker8.budgetmaster.logic.FilterSettings; import de.deadlocker8.budgetmaster.logic.NormalPayment; import de.deadlocker8.budgetmaster.logic.PaymentHandler; import de.deadlocker8.budgetmaster.logic.ServerConnection; @@ -35,7 +36,7 @@ import javafx.util.Duration; import logger.Logger; import tools.AlertGenerator; -public class Controller implements Refreshable +public class Controller { @FXML private AnchorPane anchorPaneMain; @FXML private Label labelMonth; @@ -64,6 +65,7 @@ public class Controller implements Refreshable private ArrayList<CategoryBudget> categoryBudgets; private PaymentHandler paymentHandler; private CategoryHandler categoryHandler; + private FilterSettings filterSettings; private boolean alertIsShowing = false; @@ -72,6 +74,9 @@ public class Controller implements Refreshable this.stage = stage; currentDate = DateTime.now(); labelMonth.setText(currentDate.toString("MMMM yyyy")); + + filterSettings = new FilterSettings(); + paymentHandler = new PaymentHandler(); settings = Utils.loadSettings(); @@ -144,7 +149,7 @@ public class Controller implements Refreshable } else { - refresh(); + refresh(filterSettings); } } @@ -199,7 +204,7 @@ public class Controller implements Refreshable currentDate = currentDate.minusMonths(1); labelMonth.setText(currentDate.toString("MMMM yyyy")); - refresh(); + refresh(filterSettings); } public void nextMonth() @@ -207,7 +212,7 @@ public class Controller implements Refreshable currentDate = currentDate.plusMonths(1); labelMonth.setText(currentDate.toString("MMMM yyyy")); - refresh(); + refresh(filterSettings); } public void today() @@ -215,7 +220,7 @@ public class Controller implements Refreshable currentDate = DateTime.now(); labelMonth.setText(currentDate.toString("MMMM yyyy")); - refresh(); + refresh(filterSettings); } public DateTime getCurrentDate() @@ -244,7 +249,7 @@ public class Controller implements Refreshable } } - private void refreshAllTabs() + public void refreshAllTabs() { homeController.refresh(); paymentController.refresh(); @@ -267,13 +272,22 @@ public class Controller implements Refreshable return categoryHandler; } + public FilterSettings getFilterSettings() + { + return filterSettings; + } + + public void setFilterSettings(FilterSettings filterSettings) + { + this.filterSettings = filterSettings; + } + public void about() { AlertGenerator.showAboutAlert(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"), bundle.getString("author"), icon, stage, null, false); - } + } - @Override - public void refresh() + public void refresh(FilterSettings newFilterSettings) { try { @@ -292,7 +306,8 @@ public class Controller implements Refreshable categoryHandler = new CategoryHandler(connection.getCategories()); - categoryBudgets = connection.getCategoryBudgets(currentDate.getYear(), currentDate.getMonthOfYear()); + categoryBudgets = connection.getCategoryBudgets(currentDate.getYear(), currentDate.getMonthOfYear()); + paymentHandler.filter(newFilterSettings); } catch(Exception e) { diff --git a/src/de/deadlocker8/budgetmaster/ui/FilterController.java b/src/de/deadlocker8/budgetmaster/ui/FilterController.java index df84d9409..9110406a5 100644 --- a/src/de/deadlocker8/budgetmaster/ui/FilterController.java +++ b/src/de/deadlocker8/budgetmaster/ui/FilterController.java @@ -2,6 +2,7 @@ package de.deadlocker8.budgetmaster.ui; import java.util.ArrayList; +import de.deadlocker8.budgetmaster.logic.Category; import de.deadlocker8.budgetmaster.logic.FilterSettings; import fontAwesome.FontIcon; import fontAwesome.FontIconType; @@ -23,29 +24,70 @@ public class FilterController @FXML private VBox vboxCategories; @FXML private TextField textFieldSearch; @FXML private Button buttonCancel; + @FXML private Button buttonReset; @FXML private Button buttonFilter; private Stage stage; private Controller controller; private PaymentController paymentController; + private FilterSettings filterSetttings; - public void init(Stage stage, Controller controller, PaymentController paymentController) + public void init(Stage stage, Controller controller, PaymentController paymentController, FilterSettings filterSettings) { this.stage = stage; this.controller = controller; this.paymentController = paymentController; + this.filterSetttings = filterSettings; FontIcon iconCancel = new FontIcon(FontIconType.TIMES); iconCancel.setSize(17); iconCancel.setStyle("-fx-text-fill: white"); buttonCancel.setGraphic(iconCancel); + FontIcon iconReset = new FontIcon(FontIconType.UNDO); + iconReset.setSize(17); + iconReset.setStyle("-fx-text-fill: white"); + buttonReset.setGraphic(iconReset); FontIcon iconSave = new FontIcon(FontIconType.SAVE); iconSave.setSize(17); iconSave.setStyle("-fx-text-fill: white"); buttonFilter.setGraphic(iconSave); buttonCancel.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;"); - buttonFilter.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;"); + buttonReset.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;"); + buttonFilter.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 15;"); + + for(Category currentCategory : controller.getCategoryHandler().getCategories()) + { + CheckBox newCheckBox = new CheckBox(); + newCheckBox.setText(currentCategory.getName()); + newCheckBox.setUserData(currentCategory.getID()); + newCheckBox.setStyle("-fx-font-size: 14;"); + vboxCategories.getChildren().add(newCheckBox); + } + + preselect(); + } + + private void preselect() + { + checkBoxIncome.setSelected(filterSetttings.isIncomeAllowed()); + checkBoxPayment.setSelected(filterSetttings.isPaymentAllowed()); + checkBoxNoRepeating.setSelected(filterSetttings.isNoRepeatingAllowed()); + checkBoxMonthlyRepeating.setSelected(filterSetttings.isMonthlyRepeatingAllowed()); + checkBoxRepeatEveryXDays.setSelected(filterSetttings.isRepeatingEveryXDaysAllowed()); + + ArrayList<Integer> allowedCategoryIDs = filterSetttings.getAllowedCategoryIDs(); + + for(Node node : vboxCategories.getChildren()) + { + CheckBox currentCheckBox = (CheckBox)node; + if(allowedCategoryIDs == null || allowedCategoryIDs.contains(currentCheckBox.getUserData())) + { + currentCheckBox.setSelected(true); + } + } + + textFieldSearch.setText(filterSetttings.getName()); } public void filter() @@ -54,8 +96,8 @@ public class FilterController boolean isPaymentAllowed = checkBoxPayment.isSelected(); boolean isNoRepeatingAllowed = checkBoxNoRepeating.isSelected(); - boolean isMonthlyRepeatingAllowed = checkBoxNoRepeating.isSelected(); - boolean isRepeatingEveryXDaysAllowed = checkBoxNoRepeating.isSelected(); + boolean isMonthlyRepeatingAllowed = checkBoxMonthlyRepeating.isSelected(); + boolean isRepeatingEveryXDaysAllowed = checkBoxRepeatEveryXDays.isSelected(); ArrayList<Integer> allowedCategoryIDs = new ArrayList<>(); for(Node node : vboxCategories.getChildren()) @@ -67,26 +109,41 @@ public class FilterController } } + if(allowedCategoryIDs.size() == controller.getCategoryHandler().getCategories().size()) + { + allowedCategoryIDs = null; + } + String name = textFieldSearch.getText(); if(name.equals("")) { name = null; } - //TODO get new list from server first - controller.getPaymentHandler().filter(new FilterSettings(isIncomeAllowed, - isPaymentAllowed, - isNoRepeatingAllowed, - isMonthlyRepeatingAllowed, - isRepeatingEveryXDaysAllowed, - allowedCategoryIDs, - name)); + //get new unfiltered list from server + controller.refresh(new FilterSettings()); - stage.close(); - paymentController.getController().refresh(); + FilterSettings newFilterSettings = new FilterSettings(isIncomeAllowed, + isPaymentAllowed, + isNoRepeatingAllowed, + isMonthlyRepeatingAllowed, + isRepeatingEveryXDaysAllowed, + allowedCategoryIDs, + name); + + controller.setFilterSettings(newFilterSettings); + controller.getPaymentHandler().filter(newFilterSettings); - //TODO button reset - //TODO set userData for category checkboxes + stage.close(); + paymentController.getController().refreshAllTabs(); + } + + public void reset() + { + filterSetttings = new FilterSettings(); + preselect(); + controller.setFilterSettings(filterSetttings); + controller.refresh(filterSetttings); } public void cancel() diff --git a/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml b/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml index 5c3bdeaf5..2c8c8a596 100644 --- a/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml +++ b/src/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml @@ -4,13 +4,14 @@ <?import javafx.scene.control.Button?> <?import javafx.scene.control.CheckBox?> <?import javafx.scene.control.Label?> +<?import javafx.scene.control.ScrollPane?> <?import javafx.scene.control.TextField?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.VBox?> <?import javafx.scene.text.Font?> -<AnchorPane prefHeight="600.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.budgetmaster.ui.NewPaymentController"> +<AnchorPane prefHeight="600.0" prefWidth="450.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.budgetmaster.ui.FilterController"> <children> <VBox prefHeight="273.0" prefWidth="465.0" spacing="25.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="14.0"> <children> @@ -66,14 +67,18 @@ </CheckBox> </children> </VBox> - <VBox prefHeight="33.0" prefWidth="422.0" spacing="10.0"> + <VBox prefHeight="150.0" prefWidth="422.0" spacing="10.0"> <children> <Label text="Kategorien"> <font> <Font name="System Bold" size="16.0" /> </font> </Label> - <VBox fx:id="vboxCategories" prefHeight="200.0" prefWidth="100.0" /> + <ScrollPane prefHeight="93.0" prefWidth="422.0" VBox.vgrow="ALWAYS"> + <content> + <VBox fx:id="vboxCategories" spacing="5.0" /> + </content> + </ScrollPane> </children> </VBox> <VBox prefHeight="33.0" prefWidth="422.0" VBox.vgrow="ALWAYS"> @@ -93,6 +98,14 @@ <Font name="System Bold" size="14.0" /> </font> </Button> + <Button fx:id="buttonReset" mnemonicParsing="false" onAction="#reset" text="Zurücksetzen"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + <HBox.margin> + <Insets left="25.0" /> + </HBox.margin> + </Button> <Button fx:id="buttonFilter" mnemonicParsing="false" onAction="#filter" text="Filtern"> <font> <Font name="System Bold" size="14.0" /> diff --git a/src/de/deadlocker8/budgetmaster/ui/HomeController.java b/src/de/deadlocker8/budgetmaster/ui/HomeController.java index 2257b415a..ab2bb3520 100644 --- a/src/de/deadlocker8/budgetmaster/ui/HomeController.java +++ b/src/de/deadlocker8/budgetmaster/ui/HomeController.java @@ -84,7 +84,7 @@ public class HomeController implements Refreshable } else { - labelBudget.setStyle("-fx-text-fill: #000000"); + labelBudget.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); } labelStartBudget.setText("von " + String.valueOf(Helpers.NUMBER_FORMAT.format(budget.getIncomeSum()).replace(".", ",")) + " " + controller.getSettings().getCurrency() + " verbleibend"); diff --git a/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java b/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java index 5f34e6cd4..4a94063bf 100644 --- a/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java +++ b/src/de/deadlocker8/budgetmaster/ui/NewCategoryController.java @@ -166,7 +166,7 @@ public class NewCategoryController } stage.close(); - categoryController.getController().refresh(); + categoryController.getController().refresh(controller.getFilterSettings()); } public void cancel() diff --git a/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java index 06c3c5ff4..51355b5c2 100644 --- a/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java +++ b/src/de/deadlocker8/budgetmaster/ui/NewPaymentController.java @@ -368,7 +368,7 @@ public class NewPaymentController } stage.close(); - paymentController.getController().refresh(); + paymentController.getController().refresh(controller.getFilterSettings()); } public void cancel() diff --git a/src/de/deadlocker8/budgetmaster/ui/PaymentController.java b/src/de/deadlocker8/budgetmaster/ui/PaymentController.java index fd83ab92b..db5adcc84 100644 --- a/src/de/deadlocker8/budgetmaster/ui/PaymentController.java +++ b/src/de/deadlocker8/budgetmaster/ui/PaymentController.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.util.ArrayList; import de.deadlocker8.budgetmaster.logic.Budget; +import de.deadlocker8.budgetmaster.logic.FilterSettings; import de.deadlocker8.budgetmaster.logic.Helpers; import de.deadlocker8.budgetmaster.logic.NormalPayment; import de.deadlocker8.budgetmaster.logic.Payment; @@ -39,8 +40,10 @@ public class PaymentController implements Refreshable @FXML private Label labelIncomes; @FXML private Label labelPayment; @FXML private Label labelPayments; + @FXML private Label labelFilterActive; @FXML private ListView<Payment> listView; @FXML private Button buttonNewIncome; + @FXML private Button buttonFilter; @FXML private Button buttonNewPayment; private Controller controller; @@ -94,10 +97,19 @@ public class PaymentController implements Refreshable iconIncome.setSize(18); iconIncome.setStyle("-fx-text-fill: white"); buttonNewIncome.setGraphic(iconIncome); + FontIcon iconFilter = new FontIcon(FontIconType.FILTER); + iconFilter.setSize(18); + iconFilter.setStyle("-fx-text-fill: white"); + buttonFilter.setGraphic(iconFilter); FontIcon iconPayment = new FontIcon(FontIconType.UPLOAD); iconPayment.setSize(18); iconPayment.setStyle("-fx-text-fill: white"); buttonNewPayment.setGraphic(iconPayment); + + FontIcon iconWarning = new FontIcon(FontIconType.WARNING); + iconWarning.setSize(13); + iconWarning.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); + labelFilterActive.setGraphic(iconWarning); // apply theme anchorPaneMain.setStyle("-fx-background-color: #F4F4F4;"); @@ -105,7 +117,9 @@ public class PaymentController implements Refreshable labelIncomes.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); labelPayment.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); labelPayments.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); + labelFilterActive.setStyle("-fx-text-fill: " + controller.getBundle().getString("color.text")); buttonNewIncome.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;"); + buttonFilter.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;"); buttonNewPayment.setStyle("-fx-background-color: #2E79B9; -fx-text-fill: white; -fx-font-weight: bold; -fx-font-size: 16;"); refresh(); @@ -185,7 +199,7 @@ public class PaymentController implements Refreshable { ServerConnection connection = new ServerConnection(controller.getSettings()); connection.deleteNormalPayment(payment); - controller.refresh(); + controller.refresh(controller.getFilterSettings()); } catch(Exception e) { @@ -200,7 +214,7 @@ public class PaymentController implements Refreshable { ServerConnection connection = new ServerConnection(controller.getSettings()); connection.deleteRepeatingPayment(payment); - controller.refresh(); + controller.refresh(controller.getFilterSettings()); } catch(Exception e) { @@ -219,7 +233,7 @@ public class PaymentController implements Refreshable connection.deleteRepeatingPayment(payment); connection.addRepeatingPayment(newRepeatingPayment); - controller.refresh(); + controller.refresh(controller.getFilterSettings()); } catch(Exception e) { @@ -227,6 +241,29 @@ public class PaymentController implements Refreshable controller.showConnectionErrorAlert(); } } + + public void filter() + { + try + { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/de/deadlocker8/budgetmaster/ui/FilterGUI.fxml")); + Parent root = (Parent)fxmlLoader.load(); + Stage newStage = new Stage(); + newStage.initOwner(controller.getStage()); + newStage.initModality(Modality.APPLICATION_MODAL); + newStage.setTitle("Filter"); + newStage.setScene(new Scene(root)); + newStage.getIcons().add(controller.getIcon()); + newStage.setResizable(false); + FilterController newController = fxmlLoader.getController(); + newController.init(newStage, controller, this, controller.getFilterSettings()); + newStage.show(); + } + catch(IOException e) + { + Logger.error(e); + } + } public Controller getController() { @@ -238,6 +275,15 @@ public class PaymentController implements Refreshable { refreshListView(); refreshCounter(); + + if(controller.getFilterSettings().equals(new FilterSettings())) + { + labelFilterActive.setVisible(false); + } + else + { + labelFilterActive.setVisible(true); + } Label labelPlaceholder = new Label("Keine Daten verfügbar"); labelPlaceholder.setStyle("-fx-font-size: 16"); diff --git a/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml b/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml index c4e1cfb32..6222f5e8f 100644 --- a/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml +++ b/src/de/deadlocker8/budgetmaster/ui/PaymentTab.fxml @@ -22,6 +22,21 @@ </font> </Button> <Region HBox.hgrow="ALWAYS" /> + <VBox alignment="CENTER" spacing="10.0"> + <children> + <Button fx:id="buttonFilter" mnemonicParsing="false" onAction="#filter" text="Filter"> + <font> + <Font name="System Bold" size="14.0" /> + </font> + </Button> + <Label fx:id="labelFilterActive" text="Filter aktiv"> + <font> + <Font name="System Bold" size="13.0" /> + </font> + </Label> + </children> + </VBox> + <Region HBox.hgrow="ALWAYS" /> <Button fx:id="buttonNewPayment" mnemonicParsing="false" onAction="#newPayment" text=" Neue Ausgabe"> <font> <Font name="System Bold" size="14.0" /> diff --git a/src/de/deadlocker8/budgetmaster/ui/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/SettingsController.java index d82df810d..471619dc9 100644 --- a/src/de/deadlocker8/budgetmaster/ui/SettingsController.java +++ b/src/de/deadlocker8/budgetmaster/ui/SettingsController.java @@ -98,7 +98,7 @@ public class SettingsController Logger.error(e); AlertGenerator.showAlert(AlertType.ERROR, "Fehler", "", "Beim Speichern der Einstellungen ist ein Fehler aufgetreten", controller.getIcon(), controller.getStage(), null, false); } - controller.refresh(); + controller.refresh(controller.getFilterSettings()); controller.showNotification("Erfolgreich gespeichert"); } else -- GitLab