Skip to content

Commit 6313a59

Browse files
committed
persisting position now only when shutting down. renamed screenSettings
1 parent 8b9e6c6 commit 6313a59

File tree

4 files changed

+63
-68
lines changed

4 files changed

+63
-68
lines changed

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

Lines changed: 40 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import javafx.application.Application;
4646
import javafx.beans.value.ChangeListener;
4747
import javafx.beans.value.ObservableValue;
48-
import javafx.event.EventHandler;
4948
import javafx.fxml.FXMLLoader;
5049
import javafx.scene.Parent;
5150
import javafx.scene.Scene;
@@ -63,7 +62,6 @@
6362
import javafx.scene.paint.Color;
6463
import javafx.stage.Stage;
6564
import javafx.stage.StageStyle;
66-
import javafx.stage.WindowEvent;
6765

6866
@SpringBootApplication
6967
public class Main extends Application {
@@ -206,8 +204,8 @@ private void readSettings() {
206204
model.useHotkey.set(settings.isUseHotkey());
207205
model.displayProjectsRight.set(settings.isDisplayProjectsRight());
208206
model.hideProjectsOnMouseExit.set(settings.isHideProjectsOnMouseExit());
209-
model.screenSettings.xProportion.set(settings.getWindowXProportion());
210-
model.screenSettings.yProportion.set(settings.getWindowYProportion());
207+
model.screenSettings.proportionalX.set(settings.getWindowXProportion());
208+
model.screenSettings.proportionalY.set(settings.getWindowYProportion());
211209
model.screenSettings.screenHash.set(settings.getScreenHash());
212210
model.screenSettings.saveWindowPosition.set(settings.isSaveWindowPosition());
213211
model.remindIfNotesAreEmpty.set(settings.isRemindIfNotesAreEmpty());
@@ -246,57 +244,13 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
246244
private void initialiseUI(final Stage primaryStage) throws IOException {
247245
LOG.debug("Initialising main UI.");
248246

249-
final ScreenPosHelper poshelper = new ScreenPosHelper(model.screenSettings.screenHash.get(),
250-
model.screenSettings.xProportion.get(), model.screenSettings.yProportion.get());
251-
poshelper.resetPositionIfInvalid();
252-
253-
// set stage to saved Position
254-
if (model.screenSettings.saveWindowPosition.get()) {
255-
primaryStage.setX(poshelper.getAbsoluteX());
256-
primaryStage.setY(poshelper.getAbsoluteY());
257-
}
258-
259-
// add listeners to record Windowpositionchange
260-
261-
final ChangeListener<Number> posChange = new ChangeListener<Number>() {
262-
263-
@Override
264-
public void changed(final ObservableValue<? extends Number> observable, final Number oldValue,
265-
final Number newValue) {
266-
267-
// dont save if option disabled
268-
if (!model.screenSettings.saveWindowPosition.get()) {
269-
return;
270-
}
271-
272-
if (observable.equals(primaryStage.xProperty())) {
273-
poshelper.setAbsoluteX(newValue.doubleValue());
274-
} else {
275-
poshelper.setAbsoluteY(newValue.doubleValue());
276-
}
277-
278-
final Settings newSettings = new Settings(model.hoverBackgroundColor.get(), model.hoverFontColor.get(),
279-
model.defaultBackgroundColor.get(), model.defaultFontColor.get(), model.taskBarColor.get(),
280-
model.useHotkey.get(), model.displayProjectsRight.get(), model.hideProjectsOnMouseExit.get(),
281-
poshelper.getProportionalX(), poshelper.getProportionalY(), poshelper.getScreenHash(),
282-
model.screenSettings.saveWindowPosition.get(), model.remindIfNotesAreEmpty.get());
283-
284-
controller.updateSettings(newSettings);
285-
286-
}
287-
288-
};
289-
290-
primaryStage.xProperty().addListener(posChange);
291-
primaryStage.yProperty().addListener(posChange);
292-
293-
Pane mainPane;
247+
setupStagePositioning(primaryStage);
294248

295249
// Load root layout from fxml file.
296250
final FXMLLoader loader = new FXMLLoader();
297251
loader.setLocation(Resources.getResource(RESOURCE.FXML_VIEW_LAYOUT));
298252
loader.setControllerFactory(springContext::getBean);
299-
mainPane = loader.load();
253+
final Pane mainPane = loader.load();
300254
primaryStage.initStyle(StageStyle.TRANSPARENT);
301255
// Show the scene containing the root layout.
302256
final Scene mainScene = new Scene(mainPane, Color.TRANSPARENT);
@@ -309,19 +263,49 @@ public void changed(final ObservableValue<? extends Number> observable, final Nu
309263
primaryStage.setAlwaysOnTop(true);
310264
primaryStage.setResizable(false);
311265

312-
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
313-
@Override
314-
public void handle(final WindowEvent event) {
315-
LOG.info("On close request");
316-
}
317-
});
266+
primaryStage.setOnCloseRequest(windowEvent -> LOG.info("On close request"));
267+
318268
primaryStage.show();
319269
viewController = loader.getController();
320270
// Give the controller access to the main app.
321271
viewController.setStage(primaryStage);
322272

323273
}
324274

275+
private void setupStagePositioning(final Stage stage) {
276+
final ScreenPosHelper positionHelper = new ScreenPosHelper(model.screenSettings.screenHash.get(),
277+
model.screenSettings.proportionalX.get(), model.screenSettings.proportionalY.get());
278+
positionHelper.resetPositionIfInvalid();
279+
280+
// set stage to saved Position
281+
if (model.screenSettings.saveWindowPosition.get()) {
282+
stage.setX(positionHelper.getAbsoluteX());
283+
stage.setY(positionHelper.getAbsoluteY());
284+
}
285+
286+
// add listeners to record Windowpositionchange
287+
final ChangeListener<Number> positionChangeListener = (final ObservableValue<? extends Number> observable,
288+
final Number oldValue, final Number newValue) -> {
289+
// don't save if option disabled
290+
if (!model.screenSettings.saveWindowPosition.get()) {
291+
return;
292+
}
293+
294+
if (observable.equals(stage.xProperty())) {
295+
positionHelper.setAbsoluteX(newValue.doubleValue());
296+
} else {
297+
positionHelper.setAbsoluteY(newValue.doubleValue());
298+
}
299+
300+
model.screenSettings.screenHash.set(positionHelper.getScreenHash());
301+
model.screenSettings.proportionalX.set(positionHelper.getProportionalX());
302+
model.screenSettings.proportionalY.set(positionHelper.getProportionalY());
303+
};
304+
305+
stage.xProperty().addListener(positionChangeListener);
306+
stage.yProperty().addListener(positionChangeListener);
307+
}
308+
325309
private void registerMinimizeEventlistener(final Scene mainScene, final Stage primaryStage) {
326310
final KeyCombination keyComb = new KeyCodeCombination(KeyCode.DOWN, KeyCombination.META_DOWN);
327311
mainScene.addEventFilter(KeyEvent.KEY_RELEASED, keyEvent -> {

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

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,16 +129,27 @@ public void updateSettings(final Settings newValuedSettings) {
129129
model.displayProjectsRight.set(settings.isDisplayProjectsRight());
130130
model.hideProjectsOnMouseExit.set(settings.isHideProjectsOnMouseExit());
131131
model.screenSettings.saveWindowPosition.set(settings.isSaveWindowPosition());
132-
model.screenSettings.xProportion.set(settings.getWindowXProportion());
133-
model.screenSettings.yProportion.set(settings.getWindowYProportion());
132+
model.screenSettings.proportionalX.set(settings.getWindowXProportion());
133+
model.screenSettings.proportionalY.set(settings.getWindowYProportion());
134134
model.screenSettings.screenHash.set(settings.getScreenHash());
135135
model.remindIfNotesAreEmpty.set(settings.isRemindIfNotesAreEmpty());
136136
}
137137

138138
@PreDestroy
139139
public void shutdown() {
140140
LOG.info("Controller shutdown");
141+
142+
LOG.info("Changing project to persist current work on shutdown.");
141143
changeProject(model.getIdleProject(), 0);
144+
145+
LOG.info("Updating settings to persist local changes on shutdown.");
146+
final Settings newSettings = new Settings(model.hoverBackgroundColor.get(), model.hoverFontColor.get(),
147+
model.defaultBackgroundColor.get(), model.defaultFontColor.get(), model.taskBarColor.get(),
148+
model.useHotkey.get(), model.displayProjectsRight.get(), model.hideProjectsOnMouseExit.get(),
149+
model.screenSettings.proportionalX.get(), model.screenSettings.proportionalY.get(),
150+
model.screenSettings.screenHash.get(), model.screenSettings.saveWindowPosition.get(),
151+
model.remindIfNotesAreEmpty.get());
152+
updateSettings(newSettings);
142153
}
143154

144155
public void deleteProject(final Project p) {
@@ -221,13 +232,13 @@ public void deleteWork(final Work workToBeDeleted) {
221232
* Changes the indexes of the originalList parameter to have a consistent order.
222233
*
223234
* @param originalList
224-
* list of all projects to adapt the indexes for
235+
* list of all projects to adapt the indexes for
225236
* @param changedProject
226-
* the project which has changed which already has the new index
237+
* the project which has changed which already has the new index
227238
* @param oldIndex
228-
* the old index of the changed project
239+
* the old index of the changed project
229240
* @param newIndex
230-
* the new index of the changed project (which the projects also already has)
241+
* the new index of the changed project (which the projects also already has)
231242
* @return all projects whose index has been adapted
232243
*/
233244
List<Project> resortProjectIndexes(final List<Project> originalList, final Project changedProject,
@@ -264,9 +275,9 @@ List<Project> resortProjectIndexes(final List<Project> originalList, final Proje
264275
* Decreases all indexes by one, after the removed index
265276
*
266277
* @param originalList
267-
* list of all projects to adapt the indexes for
278+
* list of all projects to adapt the indexes for
268279
* @param removedIndex
269-
* the index which has been removed
280+
* the index which has been removed
270281
* @return all projects whose index has been adapted
271282
*/
272283
List<Project> adaptProjectIndexesAfterRemoving(final List<Project> originalList, final int removedIndex) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
public class ScreenSettings {
77
public final ObjectProperty<Boolean> saveWindowPosition = new SimpleObjectProperty<>(false);
8-
public final ObjectProperty<Double> xProportion = new SimpleObjectProperty<>(0.5);
9-
public final ObjectProperty<Double> yProportion = new SimpleObjectProperty<>(0.5);
8+
public final ObjectProperty<Double> proportionalX = new SimpleObjectProperty<>(0.5);
9+
public final ObjectProperty<Double> proportionalY = new SimpleObjectProperty<>(0.5);
1010
public final ObjectProperty<Integer> screenHash = new SimpleObjectProperty<>(0);
1111
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,8 @@ private void initialize() {
179179
controller.updateSettings(new Settings(hoverBackgroundColor.getValue(), hoverFontColor.getValue(),
180180
defaultBackgroundColor.getValue(), defaultFontColor.getValue(), taskBarColor.getValue(),
181181
useHotkeyCheckBox.isSelected(), displayProjectsRightCheckBox.isSelected(),
182-
hideProjectsOnMouseExitCheckBox.isSelected(), model.screenSettings.xProportion.get(),
183-
model.screenSettings.yProportion.get(), model.screenSettings.screenHash.get(),
182+
hideProjectsOnMouseExitCheckBox.isSelected(), model.screenSettings.proportionalX.get(),
183+
model.screenSettings.proportionalY.get(), model.screenSettings.screenHash.get(),
184184
saveWindowPositionCheckBox.isSelected(), emptyNoteReminderCheckBox.isSelected()));
185185
thisStage.close();
186186

0 commit comments

Comments
 (0)