Skip to content

Commit 58d150b

Browse files
authored
Merge pull request #107 from DavidDamke/feature/logo
Feature/logo
2 parents e18d5b1 + 8c5714e commit 58d150b

File tree

7 files changed

+56
-51
lines changed

7 files changed

+56
-51
lines changed

src/main/java/de/doubleslash/keeptime/App.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import javafx.scene.control.Alert.AlertType;
5151
import javafx.scene.control.Label;
5252
import javafx.scene.control.TextArea;
53+
import javafx.scene.image.Image;
5354
import javafx.scene.input.KeyCode;
5455
import javafx.scene.input.KeyCodeCombination;
5556
import javafx.scene.input.KeyCombination;
@@ -255,6 +256,7 @@ private void initialiseUI(final Stage primaryStage) throws IOException {
255256
loader.setControllerFactory(springContext::getBean);
256257
final Pane mainPane = loader.load();
257258
primaryStage.initStyle(StageStyle.TRANSPARENT);
259+
primaryStage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
258260
// Show the scene containing the root layout.
259261
final Scene mainScene = new Scene(mainPane, Color.TRANSPARENT);
260262

src/main/java/de/doubleslash/keeptime/common/Resources.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public enum RESOURCE {
3737
FXML_SETTINGS("/layouts/settings.fxml"),
3838
FXML_VIEW_POPUP_LAYOUT("/layouts/ViewLayoutPopup.fxml"),
3939
FXML_REPORT("/layouts/report.fxml"),
40-
FXML_ABOUT("/layouts/about.fxml"),
40+
4141
FXML_MANAGE_PROJECT("/layouts/manage-project.fxml"),
4242
FXML_MANAGE_WORK("/layouts/manage-work.fxml"),
4343

@@ -65,7 +65,9 @@ public enum RESOURCE {
6565

6666
SVG_IMPORT_EXPORT_ICON("/svgs/sort.svg"),
6767

68-
SVG_LICENSES_ICON("/svgs/closed-captioning.svg")
68+
SVG_LICENSES_ICON("/svgs/closed-captioning.svg"),
69+
70+
ICON_MAIN("/icons/icon.png")
6971

7072
;
7173

src/main/java/de/doubleslash/keeptime/view/ChangeWithTimeDialog.java

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package de.doubleslash.keeptime.view;
1818

19-
import java.util.Optional;
20-
2119
import org.slf4j.Logger;
2220
import org.slf4j.LoggerFactory;
2321

@@ -37,7 +35,7 @@
3735
import javafx.scene.layout.GridPane;
3836
import javafx.scene.layout.VBox;
3937

40-
public class ChangeWithTimeDialog {
38+
public class ChangeWithTimeDialog extends Dialog<Integer> {
4139

4240
private static final Logger LOG = LoggerFactory.getLogger(ChangeWithTimeDialog.class);
4341
private static final String TIME_ZERO = "00:00:00";
@@ -47,7 +45,6 @@ public class ChangeWithTimeDialog {
4745
private final LongProperty activeWorkSecondsProperty;
4846
private final Project projectToChangeTo;
4947

50-
private Dialog<Integer> dialog;
5148
private boolean ctrlIsPressed = false;
5249

5350
public ChangeWithTimeDialog(final Model model, final LongProperty activeWorkSecondsProperty,
@@ -60,13 +57,12 @@ public ChangeWithTimeDialog(final Model model, final LongProperty activeWorkSeco
6057
}
6158

6259
private void setUpDialog() {
63-
dialog = new Dialog<>();
64-
dialog.setTitle("Change project with time transfer");
65-
dialog.setHeaderText("Choose the time to transfer");
66-
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
67-
final Button okButton = (Button) dialog.getDialogPane().lookupButton(ButtonType.OK);
60+
setTitle("Change project with time transfer");
61+
setHeaderText("Choose the time to transfer");
62+
getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
63+
final Button okButton = (Button) getDialogPane().lookupButton(ButtonType.OK);
6864
okButton.setDefaultButton(true);
69-
final Button cancelButton = (Button) dialog.getDialogPane().lookupButton(ButtonType.CANCEL);
65+
final Button cancelButton = (Button) getDialogPane().lookupButton(ButtonType.CANCEL);
7066
cancelButton.setDefaultButton(false);
7167

7268
final VBox vBox = new VBox();
@@ -120,15 +116,15 @@ private void setUpDialog() {
120116
slider.valueProperty().addListener((obs, oldValue, newValue) -> updateLabelsRunnable.run());
121117
vBox.getChildren().add(grid);
122118

123-
dialog.setOnShown(de -> {
119+
setOnShown(de -> {
124120
// workaround to set focus to slider when showing the dialog
125121
// onShown is actually called before the dialog is shown
126122
Platform.runLater(slider::requestFocus);
127123
});
128124

129-
dialog.getDialogPane().setContent(vBox);
125+
getDialogPane().setContent(vBox);
130126

131-
dialog.setResultConverter(dialogButton -> {
127+
setResultConverter(dialogButton -> {
132128
if (dialogButton == ButtonType.OK) {
133129
return slider.valueProperty().intValue() * 60;
134130
}
@@ -137,16 +133,6 @@ private void setUpDialog() {
137133

138134
}
139135

140-
/**
141-
* Shows the dialog to the user.
142-
*
143-
* @return optional with the amount of seconds to transfer to the new project or null if the user does not confirm
144-
*/
145-
public Optional<Integer> showAndWait() {
146-
LOG.info("Showing dialog");
147-
return dialog.showAndWait();
148-
}
149-
150136
private Slider setupSlider() {
151137
final Slider slider = new Slider();
152138

src/main/java/de/doubleslash/keeptime/view/ProjectsListViewController.java

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,10 @@
3838
import javafx.collections.transformation.FilteredList;
3939
import javafx.fxml.FXMLLoader;
4040
import javafx.scene.Node;
41-
import javafx.scene.control.Alert;
41+
import javafx.scene.control.*;
4242
import javafx.scene.control.Alert.AlertType;
43-
import javafx.scene.control.ButtonType;
44-
import javafx.scene.control.ContextMenu;
45-
import javafx.scene.control.Dialog;
46-
import javafx.scene.control.Label;
47-
import javafx.scene.control.ListCell;
48-
import javafx.scene.control.ListView;
49-
import javafx.scene.control.MenuItem;
50-
import javafx.scene.control.MultipleSelectionModel;
51-
import javafx.scene.control.SelectionMode;
52-
import javafx.scene.control.TextField;
53-
import javafx.scene.control.TextInputDialog;
54-
import javafx.scene.control.Tooltip;
5543
import javafx.scene.effect.Bloom;
44+
import javafx.scene.image.Image;
5645
import javafx.scene.input.MouseButton;
5746
import javafx.scene.layout.GridPane;
5847
import javafx.scene.layout.Pane;
@@ -141,12 +130,8 @@ static boolean doesProjectMatchSearchFilter(final String searchText, final Proje
141130

142131
final String lowerCaseFilter = searchText.toLowerCase();
143132

144-
if (project.getName().toLowerCase().contains(lowerCaseFilter)
145-
|| project.getDescription().toLowerCase().contains(lowerCaseFilter)) {
146-
return true;
147-
}
148-
149-
return false;
133+
return project.getName().toLowerCase().contains(lowerCaseFilter)
134+
|| project.getDescription().toLowerCase().contains(lowerCaseFilter);
150135
}
151136

152137
/**
@@ -157,8 +142,12 @@ public void tick() {
157142
final Project p = entry.getKey();
158143
final Label label = entry.getValue();
159144

160-
final long seconds = model.getPastWorkItems().stream().filter(work -> work.getProject().getId() == p.getId())
161-
.mapToLong(work -> Duration.between(work.getStartTime(), work.getEndTime()).getSeconds()).sum();
145+
final long seconds = model.getPastWorkItems()
146+
.stream()
147+
.filter(work -> work.getProject().getId() == p.getId())
148+
.mapToLong(
149+
work -> Duration.between(work.getStartTime(), work.getEndTime()).getSeconds())
150+
.sum();
162151
label.setText(DateFormatter.secondsToHHMMSS(seconds));
163152
}
164153
}
@@ -188,7 +177,8 @@ private Optional<String> showDialogNoNoteSelected(Work currentWork) {
188177
noteDialog.setTitle("Empty Notes");
189178
noteDialog.setHeaderText("Switch projects without notes?");
190179
noteDialog.setContentText("What did you do for project '" + currentWork.getProject().getName() + "' ?");
191-
noteDialog.initOwner(mainStage);
180+
Stage importConfirmationStage = (Stage) noteDialog.getDialogPane().getScene().getWindow();
181+
importConfirmationStage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
192182

193183
final Optional<String> result = noteDialog.showAndWait();
194184
return result;
@@ -264,10 +254,13 @@ private Node createListEntryForProject(final Project p) {
264254
changeWithTimeMenuItem.setOnAction(e -> {
265255
final ChangeWithTimeDialog changeWithTimeDialog = new ChangeWithTimeDialog(model,
266256
ViewController.activeWorkSecondsProperty, p);
267-
mainStage.setAlwaysOnTop(false);
257+
258+
Stage stage = (Stage) changeWithTimeDialog.getDialogPane().getScene().getWindow();
259+
stage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
260+
stage.setAlwaysOnTop(true);
261+
268262
final Optional<Integer> result = changeWithTimeDialog.showAndWait();
269263
result.ifPresent(minusSeconds -> changeProject(p, minusSeconds));
270-
mainStage.setAlwaysOnTop(true);
271264
});
272265
final MenuItem deleteMenuItem = new MenuItem("Delete");
273266
deleteMenuItem.setDisable(p.isDefault());
@@ -279,6 +272,8 @@ private Node createListEntryForProject(final Project p) {
279272
alert.setHeaderText("Delete project '" + p.getName() + "'.");
280273
alert.setContentText(
281274
"The project will just be hidden from display, as there may be work references to this project.");
275+
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
276+
stage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
282277

283278
mainStage.setAlwaysOnTop(false);
284279
final Optional<ButtonType> result = alert.showAndWait();
@@ -298,6 +293,9 @@ private Node createListEntryForProject(final Project p) {
298293
LOG.info("Edit project");
299294
final Dialog<Project> dialog = setupEditProjectDialog("Edit project", "Edit project '" + p.getName() + "'", p);
300295

296+
Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
297+
stage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
298+
301299
mainStage.setAlwaysOnTop(false);
302300
final Optional<Project> result = dialog.showAndWait();
303301
mainStage.setAlwaysOnTop(true);

src/main/java/de/doubleslash/keeptime/view/SettingsController.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import javafx.scene.control.TableView;
5959
import javafx.scene.control.cell.PropertyValueFactory;
6060
import javafx.scene.input.MouseButton;
61+
import javafx.scene.image.Image;
6162
import javafx.scene.layout.AnchorPane;
6263
import javafx.scene.layout.Region;
6364
import javafx.scene.paint.Color;
@@ -372,14 +373,17 @@ private void initImportButton() {
372373

373374
try {
374375
Alert confirmationAlert = new Alert(AlertType.CONFIRMATION, "", ButtonType.YES, ButtonType.NO);
376+
Stage importConfirmationStage = (Stage) confirmationAlert.getDialogPane().getScene().getWindow();
377+
importConfirmationStage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
378+
375379
confirmationAlert.setTitle("Import");
376380
confirmationAlert.setHeaderText("Do you want to Override current Data ?");
377381
confirmationAlert.setContentText(
378382
"Import previously exported .sql file. This will overwrite the currently used database contents - all current data will be lost!\n"
379383
+ "\n"
380384
+ "If you do not have a .sql file yet you need to open the previous version of KeepTime and in the settings dialog press \"Export\".\n"
381385
+ "\n"
382-
+ "You will need to restart the application after this action. If you proceed you need to select the previouls exported .sql file.");
386+
+ "You will need to restart the application after this action. If you proceed you need to select the previous exported .sql file.");
383387
confirmationAlert.showAndWait();
384388

385389
if (confirmationAlert.getResult() == ButtonType.NO) {
@@ -405,6 +409,10 @@ private void initImportButton() {
405409
"-options", "FROM_1X");
406410

407411
Alert informationDialog = new Alert(AlertType.INFORMATION);
412+
413+
Stage informationStage = (Stage) informationDialog.getDialogPane().getScene().getWindow();
414+
informationStage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
415+
408416
informationDialog.setTitle("Import done");
409417
informationDialog.setHeaderText("The data was imported.");
410418
informationDialog.setContentText(

src/main/java/de/doubleslash/keeptime/view/ViewController.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,10 @@ private void openConfirmationWindow() {
336336
alert.setTitle("Confirm exit");
337337
alert.setHeaderText("Are you sure you want to close KeepTime?");
338338

339-
alert.initOwner(mainStage);
339+
Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
340+
stage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
341+
342+
stage.setAlwaysOnTop(true);
340343
alert.showAndWait();
341344

342345
if (alert.getResult() == ButtonType.YES) {
@@ -427,6 +430,8 @@ private void loadSubStages() {
427430
reportStage = new Stage();
428431
reportStage.initModality(Modality.APPLICATION_MODAL);
429432
reportController.setStage(reportStage);
433+
reportStage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
434+
430435
final Scene reportScene = new Scene(root);
431436
reportScene.setOnKeyPressed(ke -> {
432437
if (ke.getCode() == KeyCode.ESCAPE) {
@@ -453,6 +458,7 @@ private void loadSubStages() {
453458
settingsStage.initModality(Modality.APPLICATION_MODAL);
454459
settingsStage.setTitle("Settings");
455460
settingsStage.setResizable(false);
461+
settingsStage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
456462

457463
final Scene settingsScene = new Scene(settingsRoot);
458464
settingsScene.setOnKeyPressed(ke -> {
@@ -555,6 +561,9 @@ public void addNewProject(final ActionEvent ae) {
555561
// TODO somewhat duplicate dialog of create and edit
556562
final Dialog<Project> dialog = setUpDialogProject("Create new project", "Create a new project");
557563

564+
Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
565+
stage.getIcons().add(new Image(Resources.getResource(RESOURCE.ICON_MAIN).toString()));
566+
558567
mainStage.setAlwaysOnTop(false);
559568
final Optional<Project> result = dialog.showAndWait();
560569
mainStage.setAlwaysOnTop(true);

src/main/resources/icons/icon.png

16.6 KB
Loading

0 commit comments

Comments
 (0)