Skip to content
Snippets Groups Projects
Commit 48b4571c authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#155:

-modal while server connection
-error handling
-moved description under name in SearchCell
-only query server if query string is different from last query string
-focus search textfield after search
-enable search on enter
parent ddfe8dd5
No related branches found
No related tags found
1 merge request!213merge v1_6_0 into master
......@@ -43,6 +43,7 @@ public class Strings
public static final String LOAD_DATABASE_IMPORT = "load.database.import";
public static final String LOAD_DATABASE_DELETE = "load.database.delete";
public static final String LOAD_UPDATE = "load.update";
public static final String LOAD_SEARCH = "load.search";
//MISC
public static final String CATEGORY_NONE = "category.none";
......
......@@ -41,6 +41,7 @@ load.database.export=Die Datenbank wird exportiert, bitte warten...
load.database.import=Die Datenbank wird importiert, bitte warten...
load.database.delete=Die Datenbank wird gelöscht, bitte warten...
load.update=Update wird heruntergeladen, bitte warten...
load.search=Buchungen werden gesucht, bitte warten...
# MISC
category.none=Keine Kategorie
......
......@@ -41,6 +41,7 @@ load.database.export=Please wait while the database is being exported...
load.database.import=Please wait while the database is being imported...
load.database.delete=Please wait while the database is being deleted...
load.update=Please wait while the update is being downloaded...
load.search=Please wait while payments are being searched...
# MISC
category.none=No Category
......
......@@ -8,6 +8,7 @@ import java.util.Date;
import de.deadlocker8.budgetmaster.logic.category.Category;
import de.deadlocker8.budgetmaster.logic.payment.Payment;
import de.deadlocker8.budgetmaster.logic.payment.RepeatingPayment;
import de.deadlocker8.budgetmaster.logic.utils.Colors;
import de.deadlocker8.budgetmaster.logic.utils.Helpers;
import de.deadlocker8.budgetmaster.ui.controller.SearchController;
import fontAwesome.FontIconType;
......@@ -20,6 +21,7 @@ import javafx.scene.control.Tooltip;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import logger.Logger;
import tools.ConvertTo;
......@@ -94,22 +96,28 @@ public class SearchCell extends ListCell<Payment>
labelCircle.setTooltip(tooltip);
hbox.getChildren().add(labelCircle);
VBox vboxNameAndDescription = new VBox();
vboxNameAndDescription.setSpacing(2);
vboxNameAndDescription.setAlignment(Pos.CENTER_LEFT);
vboxNameAndDescription.setMinHeight(HEIGHT + 12);
Label labelName = new Label(item.getName());
labelName.setPrefHeight(HEIGHT);
labelName.setStyle("-fx-font-size: 15; -fx-text-fill: #212121");
labelName.setAlignment(Pos.CENTER);
labelName.setStyle("-fx-font-size: 15; -fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT));
labelName.setAlignment(Pos.CENTER_LEFT);
labelName.getStyleClass().add("greylabel");
labelName.setMinWidth(100);
hbox.getChildren().add(labelName);
HBox.setMargin(labelName, new Insets(0, 0, 0, 20));
vboxNameAndDescription.getChildren().add(labelName);
if(item.getDescription() != null && !item.getDescription().equals(""))
{
Label labelDescription = new Label(item.getDescription());
labelDescription.setPrefHeight(HEIGHT);
labelDescription.setStyle("-fx-font-size: 14; -fx-text-fill: #212121; -fx-font-style: italic");
labelDescription.setAlignment(Pos.CENTER);
labelDescription.setStyle("-fx-font-size: 14; -fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT) + "; -fx-font-style: italic");
labelDescription.setAlignment(Pos.CENTER_LEFT);
labelDescription.getStyleClass().add("greylabel");
hbox.getChildren().add(labelDescription);
HBox.setMargin(labelDescription, new Insets(0, 0, 0, 10));
vboxNameAndDescription.getChildren().add(labelDescription);
}
hbox.getChildren().add(vboxNameAndDescription);
HBox.setMargin(vboxNameAndDescription, new Insets(0, 0, 0, 20));
Region r = new Region();
hbox.getChildren().add(r);
......@@ -145,7 +153,8 @@ public class SearchCell extends ListCell<Payment>
hbox.getChildren().add(buttonGoto);
HBox.setMargin(buttonGoto, new Insets(0, 0, 0, 10));
hbox.setPadding(new Insets(10, 8, 10, 5));
hbox.setPadding(new Insets(8, 8, 8, 5));
hbox.setAlignment(Pos.CENTER_LEFT);
setStyle("-fx-background: transparent; -fx-border-color: #545454; -fx-border-width: 0 0 1 0");
setGraphic(hbox);
setAlignment(Pos.CENTER);
......
......@@ -3,6 +3,7 @@ package de.deadlocker8.budgetmaster.ui.controller;
import java.util.ArrayList;
import de.deadlocker8.budgetmaster.logic.payment.Payment;
import de.deadlocker8.budgetmaster.logic.serverconnection.ExceptionHandler;
import de.deadlocker8.budgetmaster.logic.serverconnection.ServerConnection;
import de.deadlocker8.budgetmaster.logic.utils.Colors;
import de.deadlocker8.budgetmaster.logic.utils.Helpers;
......@@ -19,6 +20,7 @@ import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.stage.Modality;
......@@ -27,6 +29,7 @@ import javafx.util.Callback;
import logger.Logger;
import tools.ConvertTo;
import tools.Localization;
import tools.Worker;
public class SearchController extends BaseController implements Styleable
{
......@@ -40,6 +43,7 @@ public class SearchController extends BaseController implements Styleable
private Stage parentStage;
private Controller controller;
private String lastQuery;
public SearchController(Stage parentStage, Controller controller)
{
......@@ -91,34 +95,68 @@ public class SearchController extends BaseController implements Styleable
checkBoxName.setSelected(true);
textFieldSearch.setOnKeyPressed((event)->{
if(event.getCode().equals(KeyCode.ENTER))
{
search();
}
});
applyStyle();
}
public void search()
{
String query = textFieldSearch.getText().trim();
try
// only perform search if query differs from last query (reduce server connections)
if(lastQuery != null && lastQuery.equalsIgnoreCase(query))
{
ServerConnection connection = new ServerConnection(controller.getSettings());
textFieldSearch.requestFocus();
textFieldSearch.positionCaret(textFieldSearch.getText().length());
return;
}
listView.getItems().clear();
lastQuery = query;
Stage modalStage = Helpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_SEARCH), getStage(), controller.getIcon());
Worker.runLater(() -> {
try
{
ServerConnection connection = new ServerConnection(controller.getSettings());
ArrayList<Payment> payments = connection.getPaymentForSearch(query,
checkBoxName.isSelected(),
checkBoxDescription.isSelected(),
checkBoxCategoryName.isSelected());
Platform.runLater(() -> {
listView.getItems().clear();
if(payments != null)
{
listView.getItems().setAll(payments);
}
if(modalStage != null)
{
modalStage.close();
}
});
}
catch(Exception e)
{
//ERRORHANDLING
Logger.error(e);
Platform.runLater(() -> {
if(modalStage != null)
{
modalStage.close();
}
controller.showConnectionErrorAlert(ExceptionHandler.getMessageForException(e));
});
}
});
textFieldSearch.requestFocus();
textFieldSearch.positionCaret(textFieldSearch.getText().length());
}
public void cancel()
......@@ -131,11 +169,6 @@ public class SearchController extends BaseController implements Styleable
return controller;
}
//TODO description under name
//TODO modal while server connection
//TODO focus search textfield after search
//TODO search on enter
@Override
public void applyStyle()
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment