Skip to content

Commit ce6d2b0

Browse files
committed
Merge branch 'develop' into feature/select_first_on_enter_in_edit_work_project_dropdown
2 parents cbbf03c + 4367658 commit ce6d2b0

21 files changed

+426
-231
lines changed

pom.xml

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@
3131
<relativePath /> <!-- lookup parent from repository -->
3232
</parent>
3333

34+
<repositories>
35+
<!-- Including for fontawesome -->
36+
<repository>
37+
<id>fontawesomefx-repo</id>
38+
<name>FontAwesome Repository</name>
39+
<url>https://bintray.com/jerady/maven/FontAwesomeFX</url>
40+
</repository>
41+
</repositories>
42+
3443
<properties>
3544
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3645
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -93,13 +102,13 @@
93102
<version>3.1.1</version>
94103
<type>maven-plugin</type>
95104
</dependency>
96-
105+
97106
<dependency>
98107
<groupId>de.jensd</groupId>
99108
<artifactId>fontawesomefx-commons</artifactId>
100109
<version>8.15</version>
101110
</dependency>
102-
111+
103112
<dependency>
104113
<groupId>de.jensd</groupId>
105114
<artifactId>fontawesomefx-fontawesome</artifactId>
@@ -144,7 +153,7 @@
144153
<failOnError>${maven-dependency-check.failOnError}</failOnError>
145154
<failBuildOnCVSS>${maven-dependency-check.failBuildOnCVSS}</failBuildOnCVSS>
146155
<outputDirectory>target/site</outputDirectory>
147-
<!--suppressionFile>${project.basedir}/dependency-check-report_suppressions.xml</suppressionFile-->
156+
<!--suppressionFile>${project.basedir}/dependency-check-report_suppressions.xml</suppressionFile -->
148157
</configuration>
149158
<executions>
150159
<execution>
@@ -184,7 +193,7 @@
184193
<failOnError>${maven-dependency-check.failOnError}</failOnError>
185194
<failBuildOnCVSS>${maven-dependency-check.failBuildOnCVSS}</failBuildOnCVSS>
186195
<outputDirectory>target/site</outputDirectory>
187-
<!--suppressionFile>${project.basedir}/dependency-check-report_suppressions.xml</suppressionFile-->
196+
<!--suppressionFile>${project.basedir}/dependency-check-report_suppressions.xml</suppressionFile -->
188197
</configuration>
189198
</plugin>
190199
</plugins>

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import de.doubleslash.keeptime.common.FontProvider;
3434
import de.doubleslash.keeptime.common.Resources;
3535
import de.doubleslash.keeptime.common.Resources.RESOURCE;
36-
import de.doubleslash.keeptime.controller.Controller;
3736
import de.doubleslash.keeptime.model.Model;
3837
import de.doubleslash.keeptime.model.Project;
3938
import de.doubleslash.keeptime.model.Settings;
@@ -74,7 +73,6 @@ public class Main extends Application {
7473
private Stage popupViewStage;
7574

7675
private Model model;
77-
private Controller controller;
7876

7977
private ViewController viewController;
8078

@@ -89,7 +87,7 @@ public void init() throws Exception {
8987
springContext = SpringApplication.run(Main.class);
9088
// TODO test if everywhere is used the same model
9189
model = springContext.getBean(Model.class);
92-
controller = springContext.getBean(Controller.class);
90+
model.setSpringContext(springContext);
9391
}
9492

9593
@Override
@@ -201,6 +199,7 @@ private void readSettings() {
201199
model.useHotkey.set(settings.isUseHotkey());
202200
model.displayProjectsRight.set(settings.isDisplayProjectsRight());
203201
model.hideProjectsOnMouseExit.set(settings.isHideProjectsOnMouseExit());
202+
model.remindIfNotesAreEmpty.set(settings.isRemindIfNotesAreEmpty());
204203
}
205204

206205
private void initialisePopupUI(final Stage primaryStage) throws IOException {
@@ -216,6 +215,7 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
216215
// Load root layout from fxml file.
217216
final FXMLLoader loader = new FXMLLoader();
218217
loader.setLocation(Resources.getResource(RESOURCE.FXML_VIEW_POPUP_LAYOUT));
218+
loader.setControllerFactory(springContext::getBean);
219219
final Parent popupLayout = loader.load();
220220
popupViewStage.initStyle(StageStyle.TRANSPARENT);
221221
// Show the scene containing the root layout.
@@ -227,8 +227,6 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
227227
popupViewStage.setAlwaysOnTop(true);
228228
final ViewControllerPopup viewControllerPopupController = loader.getController();
229229
viewControllerPopupController.setStage(popupViewStage);
230-
viewControllerPopupController.setControllerAndModel(controller, model);
231-
viewControllerPopupController.secondInitialize();
232230

233231
globalScreenListener.setViewController(viewControllerPopupController);
234232
}
@@ -264,8 +262,6 @@ public void handle(final WindowEvent event) {
264262
viewController = loader.getController();
265263
// Give the controller access to the main app.
266264
viewController.setStage(primaryStage);
267-
viewController.setController(controller, model);
268-
viewController.secondInitialize();
269265

270266
}
271267

src/main/java/de/doubleslash/keeptime/controller/Controller.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ public void addNewProject(final Project project) {
104104

105105
public void updateSettings(final Color hoverBackgroundColor, final Color hoverFontColor,
106106
final Color defaultBackgroundColor, final Color defaultFontColor, final Color taskBarColor,
107-
final boolean useHotkey, final boolean displayProjectsRight, final boolean hideProjectsOnMouseExit) {
107+
final boolean useHotkey, final boolean displayProjectsRight, final boolean hideProjectsOnMouseExit,
108+
final boolean emptyNoteReminder) {
108109
// TODO create holder for all the properties (or reuse Settings.class?)
109110
final Settings settings = model.getSettingsRepository().findAll().get(0);
110111
settings.setTaskBarColor(taskBarColor);
@@ -117,6 +118,7 @@ public void updateSettings(final Color hoverBackgroundColor, final Color hoverFo
117118
settings.setUseHotkey(useHotkey);
118119
settings.setDisplayProjectsRight(displayProjectsRight);
119120
settings.setHideProjectsOnMouseExit(hideProjectsOnMouseExit);
121+
settings.setRemindIfNotesAreEmpty(emptyNoteReminder);
120122

121123
model.getSettingsRepository().save(settings);
122124

@@ -128,6 +130,7 @@ public void updateSettings(final Color hoverBackgroundColor, final Color hoverFo
128130
model.useHotkey.set(settings.isUseHotkey());
129131
model.displayProjectsRight.set(settings.isDisplayProjectsRight());
130132
model.hideProjectsOnMouseExit.set(settings.isHideProjectsOnMouseExit());
133+
model.remindIfNotesAreEmpty.set(settings.isRemindIfNotesAreEmpty());
131134
}
132135

133136
@PreDestroy

src/main/java/de/doubleslash/keeptime/model/Model.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ public Model(final ProjectRepository projectRepository, final WorkRepository wor
7979
public final ObjectProperty<Boolean> useHotkey = new SimpleObjectProperty<>(false);
8080
public final ObjectProperty<Boolean> displayProjectsRight = new SimpleObjectProperty<>(false);
8181
public final ObjectProperty<Boolean> hideProjectsOnMouseExit = new SimpleObjectProperty<>(true);
82-
public final ObjectProperty<Boolean> emptyNoteReminder = new SimpleObjectProperty<>(false);
82+
83+
public final ObjectProperty<Boolean> remindIfNotesAreEmpty = new SimpleObjectProperty<>(false);
8384

8485
private ConfigurableApplicationContext springContext;
8586

@@ -146,4 +147,5 @@ public ConfigurableApplicationContext getSpringContext() {
146147
public SortedList<Work> getSortedPastWorkItems() {
147148
return sortedPastWorkItems;
148149
}
150+
149151
}

src/main/java/de/doubleslash/keeptime/model/Settings.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public class Settings {
5959

6060
private boolean hideProjectsOnMouseExit;
6161

62+
private boolean remindIfNotesAreEmpty;
63+
6264
public long getId() {
6365
return id;
6466
}
@@ -127,4 +129,12 @@ public void setHideProjectsOnMouseExit(final boolean hideProjectsOnMouseExit) {
127129
this.hideProjectsOnMouseExit = hideProjectsOnMouseExit;
128130
}
129131

132+
public boolean isRemindIfNotesAreEmpty() {
133+
return remindIfNotesAreEmpty;
134+
}
135+
136+
public void setRemindIfNotesAreEmpty(final boolean emptyNoteReminder) {
137+
this.remindIfNotesAreEmpty = emptyNoteReminder;
138+
}
139+
130140
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.slf4j.Logger;
2222
import org.slf4j.LoggerFactory;
23+
import org.springframework.stereotype.Component;
2324

2425
import de.doubleslash.keeptime.Main;
2526
import de.doubleslash.keeptime.common.BrowserHelper;
@@ -42,6 +43,7 @@
4243
import javafx.scene.layout.Region;
4344
import javafx.scene.paint.Color;
4445

46+
@Component
4547
public class AboutController {
4648

4749
private static final String GITHUB_PAGE = "https://www.github.com/doubleSlashde/KeepTime";

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import org.slf4j.Logger;
2020
import org.slf4j.LoggerFactory;
21+
import org.springframework.beans.factory.annotation.Autowired;
22+
import org.springframework.stereotype.Component;
2123

2224
import de.doubleslash.keeptime.model.Model;
2325
import de.doubleslash.keeptime.model.Project;
@@ -30,11 +32,12 @@
3032
import javafx.scene.control.TextField;
3133
import javafx.scene.layout.GridPane;
3234

35+
@Component
3336
public class ManageProjectController {
3437

3538
private static final Logger LOG = LoggerFactory.getLogger(ManageProjectController.class);
3639

37-
private Model model;
40+
private final Model model;
3841

3942
@FXML
4043
private GridPane grid;
@@ -54,17 +57,17 @@ public class ManageProjectController {
5457
@FXML
5558
private Spinner<Integer> sortIndexSpinner;
5659

57-
public void setModel(final Model model) {
60+
@Autowired
61+
public ManageProjectController(final Model model) {
5862
this.model = model;
5963
}
6064

61-
public void secondInitialize() {
62-
if (model != null) {
63-
final int availableProjectAmount = model.getAllProjects().size();
64-
sortIndexSpinner
65-
.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount, availableProjectAmount));
66-
sortIndexSpinner.getValueFactory().setValue(model.getAvailableProjects().size());
67-
}
65+
@FXML
66+
private void initialize() {
67+
final int availableProjectAmount = model.getAllProjects().size();
68+
sortIndexSpinner
69+
.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount, availableProjectAmount));
70+
sortIndexSpinner.getValueFactory().setValue(model.getAvailableProjects().size());
6871
}
6972

7073
public void initializeWith(final Project project) {

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

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import de.doubleslash.keeptime.exceptions.FXMLLoaderException;
3535
import de.doubleslash.keeptime.model.Model;
3636
import de.doubleslash.keeptime.model.Project;
37+
import de.doubleslash.keeptime.model.Work;
3738
import javafx.collections.transformation.FilteredList;
3839
import javafx.fxml.FXMLLoader;
3940
import javafx.scene.Node;
@@ -49,6 +50,7 @@
4950
import javafx.scene.control.MultipleSelectionModel;
5051
import javafx.scene.control.SelectionMode;
5152
import javafx.scene.control.TextField;
53+
import javafx.scene.control.TextInputDialog;
5254
import javafx.scene.control.Tooltip;
5355
import javafx.scene.effect.Bloom;
5456
import javafx.scene.input.MouseButton;
@@ -165,7 +167,27 @@ private void changeProject(final Project newProject, final long minusSeconds) {
165167
if (hideable) {
166168
mainStage.hide();
167169
}
170+
if (model.remindIfNotesAreEmpty.get()) {
171+
final Work currentWork = model.activeWorkItem.get();
172+
if (currentWork != null && currentWork.getNotes().isEmpty()) {
173+
final TextInputDialog noteDialog = new TextInputDialog();
174+
noteDialog.setTitle("Empty Notes");
175+
noteDialog.setHeaderText("Switch projects without notes?");
176+
noteDialog.setContentText(
177+
"What did you do for project '" + model.activeWorkItem.get().getProject().getName() + "' ?");
178+
noteDialog.initOwner(mainStage);
179+
180+
final Optional<String> result = noteDialog.showAndWait();
181+
if (result.isPresent()) {
182+
currentWork.setNotes(result.get());
183+
} else {
184+
// cancel pressed
185+
return;
186+
}
187+
}
188+
}
168189
controller.changeProject(newProject, minusSeconds);
190+
169191
}
170192

171193
private void addProjectToProjectSelectionNodeMap(final Project project) {
@@ -187,6 +209,7 @@ private Node createListEntryForProject(final Project p) {
187209

188210
final FXMLLoader loader = new FXMLLoader();
189211
loader.setLocation(Resources.getResource(RESOURCE.FXML_PROJECT_LAYOUT));
212+
loader.setControllerFactory(model.getSpringContext()::getBean);
190213
Pane projectElement;
191214
try {
192215
projectElement = loader.load();
@@ -332,14 +355,13 @@ private Dialog<Project> setupEditProjectDialog(final String title, final String
332355
private GridPane setUpEditProjectGridPane(final Project p, final Dialog<Project> dialog) {
333356
GridPane grid;
334357
final FXMLLoader loader = new FXMLLoader(Resources.getResource(RESOURCE.FXML_MANAGE_PROJECT));
358+
loader.setControllerFactory(model.getSpringContext()::getBean);
335359
try {
336360
grid = loader.load();
337361
} catch (final IOException e) {
338362
throw new FXMLLoaderException("Error while loading '" + Resources.RESOURCE.FXML_MANAGE_PROJECT + "'.", e);
339363
}
340364
final ManageProjectController manageProjectController = loader.getController();
341-
manageProjectController.setModel(model);
342-
manageProjectController.secondInitialize();
343365
manageProjectController.initializeWith(p);
344366

345367
dialog.setResultConverter(dialogButton -> {

0 commit comments

Comments
 (0)