diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java b/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java index d53fa9cea838916d762e41f7418a443076e2b889..81da39453c883d315ec8d04c095094739c083245 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/ReportController.java @@ -111,55 +111,95 @@ public class ReportController implements Refreshable checkBoxIncludeBudget.setStyle("-fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT) + "; -fx-font-size: 14;"); checkBoxSplitTable.setStyle("-fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT) + "; -fx-font-size: 14;"); checkBoxIncludeCategoryBudgets.setStyle("-fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT) + "; -fx-font-size: 14;"); - - - refresh(); - prefill(); + + applyReportPreferences(); } - private void initColumn(ColumnType columnType, boolean activated) + private void initColumn(ColumnType columnType, boolean activated, SortType sortType) { switch(columnType) { case AMOUNT: initColumnAmount(activated); toggleColumn(columnAmount, activated); + if(sortType != null) + { + columnAmount.setSortType(sortType); + tableView.getSortOrder().add(columnAmount); + } break; case CATEGORY: initColumnCategory(activated); toggleColumn(columnCategory, activated); + if(sortType != null) + { + columnCategory.setSortType(sortType); + tableView.getSortOrder().add(columnCategory); + } break; case DATE: initColumnDate(activated); toggleColumn(columnDate, activated); + if(sortType != null) + { + columnDate.setSortType(sortType); + tableView.getSortOrder().add(columnDate); + } break; case DESCRIPTION: initColumnDescription(activated); toggleColumn(columnDescription, activated); + if(sortType != null) + { + columnDescription.setSortType(sortType); + tableView.getSortOrder().add(columnDescription); + } break; case NAME: initColumnName(activated); toggleColumn(columnName, activated); + if(sortType != null) + { + columnName.setSortType(sortType); + tableView.getSortOrder().add(columnName); + } break; case POSITION: initColumnPosition(activated); toggleColumn(columnPosition, activated); + if(sortType != null) + { + columnPosition.setSortType(sortType); + tableView.getSortOrder().add(columnPosition); + } break; case RATING: initColumnRating(activated); toggleColumn(columnRating, activated); + if(sortType != null) + { + columnRating.setSortType(sortType); + tableView.getSortOrder().add(columnRating); + } break; case REPEATING: initColumnIsRepeating(activated); toggleColumn(columnIsRepeating, activated); + if(sortType != null) + { + columnIsRepeating.setSortType(sortType); + tableView.getSortOrder().add(columnIsRepeating); + } break; default: break; } } - private void prefill() + private void applyReportPreferences() { + tableView.getColumns().clear(); + Object loadedObject = FileHelper.loadObjectFromJSON("reportPreferences", new ReportPreferences()); if(loadedObject != null) { @@ -168,31 +208,34 @@ public class ReportController implements Refreshable checkBoxSplitTable.setSelected(reportPreferences.isSplitTable()); checkBoxIncludeCategoryBudgets.setSelected(reportPreferences.isIncludeCategoryBudgets()); + ReportSorting reportSorting = reportPreferences.getReportSorting(); + ArrayList<ColumnType> allColumns = new ArrayList<>(Arrays.asList(ColumnType.values())); - + for(ColumnType currentType : reportPreferences.getColumnOrder().getColumns()) { - initColumn(currentType, true); + if(currentType == reportSorting.getColumnType()) + { + initColumn(currentType, true, reportSorting.getSortType()); + } + else + { + initColumn(currentType, true, null); + } allColumns.remove(currentType); } for(ColumnType currentColumn : allColumns) { - initColumn(currentColumn, false); + initColumn(currentColumn, false, null); } - - //TODO prefill sorting } else { - initColumnPosition(true); - initColumnDate(true); - initColumnIsRepeating(true); - initColumnCategory(true); - initColumnName(true); - initColumnDescription(true); - initColumnRating(true); - initColumnAmount(true); + for(ColumnType currentType : ColumnType.values()) + { + initColumn(currentType, true, null); + } } } @@ -470,14 +513,14 @@ public class ReportController implements Refreshable } private void toggleColumn(TableColumn<ReportItem, ?> column, boolean activated) - { + { String style = activated ? "" : "-fx-background-color: " + ConvertTo.toRGBHexWithoutOpacity(Colors.BACKGROUND_REPORT_TABLE_HEADER_DISABLED); Node graphic = column.getGraphic(); if(graphic != null) { graphic.setStyle(style); } - columnFilter.toggleColumn((ColumnType)column.getUserData(), activated); + columnFilter.toggleColumn((ColumnType)column.getUserData(), activated); } private void initColumnAmount(boolean activated) @@ -527,11 +570,7 @@ public class ReportController implements Refreshable labelPlaceholder.setStyle("-fx-font-size: 16"); tableView.setPlaceholder(labelPlaceholder); - tableView.setFixedCellSize(26); - - tableView.setOnSort((event)->{ - System.out.println("sort"); - }); + tableView.setFixedCellSize(26); } public void filter() @@ -591,12 +630,11 @@ public class ReportController implements Refreshable tableView.setItems(objectsForTable); } } - - @SuppressWarnings("rawtypes") - public void generate() + + private ReportPreferences getReportPreferences() { ColumnOrder columnOrder = new ColumnOrder(); - for(TableColumn currentColumn : tableView.getColumns()) + for(TableColumn<ReportItem, ?> currentColumn : tableView.getColumns()) { ColumnType currentType = (ColumnType)currentColumn.getUserData(); if(columnFilter.containsColumn(currentType)) @@ -618,21 +656,29 @@ public class ReportController implements Refreshable reportSorting.setSortType(SortType.DESCENDING); } - ReportPreferences reportPreferences = new ReportPreferences(columnOrder, - checkBoxIncludeBudget.isSelected(), - checkBoxSplitTable.isSelected(), - checkBoxIncludeCategoryBudgets.isSelected(), - reportSorting); - - //save report preferences + return new ReportPreferences(columnOrder, + checkBoxIncludeBudget.isSelected(), + checkBoxSplitTable.isSelected(), + checkBoxIncludeCategoryBudgets.isSelected(), + reportSorting); + } + + private void saveReportPreferences(ReportPreferences reportPreferences) + { try { - FileHelper.saveObjectToJSON("reportPreferences", reportPreferences); + FileHelper.saveObjectToJSON("reportPreferences", reportPreferences); } - catch(IOException e2) + catch(IOException e) { - Logger.error(e2); - } + Logger.error(e); + } + } + + public void generate() + { + ReportPreferences reportPreferences = getReportPreferences(); + saveReportPreferences(reportPreferences); FileChooser fileChooser = new FileChooser(); fileChooser.setTitle(Localization.getString(Strings.TITLE_REPORT_SAVE)); @@ -763,7 +809,10 @@ public class ReportController implements Refreshable labelFilterActive.setVisible(true); } + saveReportPreferences(getReportPreferences()); refreshTableView(); + applyReportPreferences(); + tableView.refresh(); DateTime currentDate = controller.getCurrentDate(); String currentMonth = currentDate.toString("MM");