Skip to content

Commit 7b4add5

Browse files
author
Jan Schraff
committed
fixed problem with only accidental save because of 1px moving bug, now saved explicitly on enabeling of position save
1 parent 63edbd4 commit 7b4add5

File tree

4 files changed

+62
-43
lines changed

4 files changed

+62
-43
lines changed

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

Lines changed: 0 additions & 42 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.common.ScreenPosHelper;
3736
import de.doubleslash.keeptime.controller.Controller;
3837
import de.doubleslash.keeptime.model.Model;
3938
import de.doubleslash.keeptime.model.Project;
@@ -43,8 +42,6 @@
4342
import de.doubleslash.keeptime.viewpopup.GlobalScreenListener;
4443
import de.doubleslash.keeptime.viewpopup.ViewControllerPopup;
4544
import javafx.application.Application;
46-
import javafx.beans.value.ChangeListener;
47-
import javafx.beans.value.ObservableValue;
4845
import javafx.fxml.FXMLLoader;
4946
import javafx.scene.Parent;
5047
import javafx.scene.Scene;
@@ -244,8 +241,6 @@ private void initialisePopupUI(final Stage primaryStage) throws IOException {
244241
private void initialiseUI(final Stage primaryStage) throws IOException {
245242
LOG.debug("Initialising main UI.");
246243

247-
setupStagePositioning(primaryStage);
248-
249244
// Load root layout from fxml file.
250245
final FXMLLoader loader = new FXMLLoader();
251246
loader.setLocation(Resources.getResource(RESOURCE.FXML_VIEW_LAYOUT));
@@ -272,43 +267,6 @@ private void initialiseUI(final Stage primaryStage) throws IOException {
272267

273268
}
274269

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-
// TODO when activating autoSave while app is running, the current position is only updated by accident -
287-
// as when clicking x the stage moves by 1px on x and the listener is triggered. not working when rightclick->exit
288-
289-
// add listeners to record Windowpositionchange
290-
final ChangeListener<Number> positionChangeListener = (final ObservableValue<? extends Number> observable,
291-
final Number oldValue, final Number newValue) -> {
292-
// don't save if option disabled
293-
if (!model.screenSettings.saveWindowPosition.get()) {
294-
return;
295-
}
296-
297-
LOG.debug("Stage position changed '{}'/'{}'.", stage.xProperty().doubleValue(),
298-
stage.yProperty().doubleValue());
299-
300-
positionHelper.setAbsoluteX(stage.xProperty().doubleValue());
301-
positionHelper.setAbsoluteY(stage.yProperty().doubleValue());
302-
303-
model.screenSettings.screenHash.set(positionHelper.getScreenHash());
304-
model.screenSettings.proportionalX.set(positionHelper.getProportionalX());
305-
model.screenSettings.proportionalY.set(positionHelper.getProportionalY());
306-
};
307-
308-
stage.xProperty().addListener(positionChangeListener);
309-
stage.yProperty().addListener(positionChangeListener);
310-
}
311-
312270
private void registerMinimizeEventlistener(final Scene mainScene, final Stage primaryStage) {
313271
final KeyCombination keyComb = new KeyCodeCombination(KeyCode.DOWN, KeyCombination.META_DOWN);
314272
mainScene.addEventFilter(KeyEvent.KEY_RELEASED, keyEvent -> {

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ public ScreenPosHelper(final int screenhash, final double proportionalX, final d
3131
calcAbsolutePosition();
3232
}
3333

34+
public ScreenPosHelper(final double absoluteX, final double absoluteY) {
35+
this.absoluteX = absoluteX;
36+
this.absoluteY = absoluteY;
37+
calcProportionalPosition();
38+
}
39+
3440
public double getAbsoluteX() {
3541
return absoluteX;
3642
}

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ public class SettingsController {
111111

112112
private Stage aboutStage;
113113

114+
@Autowired
115+
ViewController mainscreen;
116+
114117
@Autowired
115118
public SettingsController(final Model model, final Controller controller) {
116119
this.model = model;
@@ -176,6 +179,11 @@ private void initialize() {
176179
}
177180
}
178181

182+
if (saveWindowPositionCheckBox.isSelected()) {
183+
// UPDATE POSITION
184+
mainscreen.savePosition();
185+
}
186+
179187
controller.updateSettings(new Settings(hoverBackgroundColor.getValue(), hoverFontColor.getValue(),
180188
defaultBackgroundColor.getValue(), defaultFontColor.getValue(), taskBarColor.getValue(),
181189
useHotkeyCheckBox.isSelected(), displayProjectsRightCheckBox.isSelected(),
@@ -187,7 +195,9 @@ private void initialize() {
187195
});
188196

189197
LOG.debug("cancelButton.setOnAction");
190-
cancelButton.setOnAction(ae -> {
198+
cancelButton.setOnAction(ae ->
199+
200+
{
191201
LOG.info("Cancel clicked");
192202
thisStage.close();
193203
});

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import de.doubleslash.keeptime.common.DateFormatter;
3232
import de.doubleslash.keeptime.common.Resources;
3333
import de.doubleslash.keeptime.common.Resources.RESOURCE;
34+
import de.doubleslash.keeptime.common.ScreenPosHelper;
3435
import de.doubleslash.keeptime.common.StyleUtils;
3536
import de.doubleslash.keeptime.controller.Controller;
3637
import de.doubleslash.keeptime.exceptions.FXMLLoaderException;
@@ -46,6 +47,8 @@
4647
import javafx.beans.property.SimpleBooleanProperty;
4748
import javafx.beans.property.SimpleLongProperty;
4849
import javafx.beans.property.SimpleObjectProperty;
50+
import javafx.beans.value.ChangeListener;
51+
import javafx.beans.value.ObservableValue;
4952
import javafx.collections.ObservableList;
5053
import javafx.embed.swing.SwingFXUtils;
5154
import javafx.event.ActionEvent;
@@ -512,6 +515,7 @@ public void setStage(final Stage primaryStage) {
512515
this.mainStage = primaryStage;
513516
this.projectsListViewController = new ProjectsListViewController(model, controller, mainStage,
514517
availableProjectsListView, searchTextField, false);
518+
setupStagePositioning();
515519
}
516520

517521
@FXML
@@ -527,4 +531,45 @@ public void addNewProject(final ActionEvent ae) {
527531
result.ifPresent(project -> controller.addNewProject(project));
528532
}
529533

534+
private void setupStagePositioning() {
535+
final ScreenPosHelper positionHelper = new ScreenPosHelper(model.screenSettings.screenHash.get(),
536+
model.screenSettings.proportionalX.get(), model.screenSettings.proportionalY.get());
537+
positionHelper.resetPositionIfInvalid();
538+
539+
// set stage to saved Position
540+
if (model.screenSettings.saveWindowPosition.get()) {
541+
mainStage.setX(positionHelper.getAbsoluteX());
542+
mainStage.setY(positionHelper.getAbsoluteY());
543+
}
544+
545+
// TODO when activating autoSave while app is running, the current position is only updated by accident -
546+
// as when clicking x the stage moves by 1px on x and the listener is triggered. not working when rightclick->exit
547+
548+
// add listeners to record Windowpositionchange
549+
final ChangeListener<Number> positionChangeListener = (final ObservableValue<? extends Number> observable,
550+
final Number oldValue, final Number newValue) -> {
551+
savePosition();
552+
};
553+
554+
mainStage.xProperty().addListener(positionChangeListener);
555+
mainStage.yProperty().addListener(positionChangeListener);
556+
}
557+
558+
public void savePosition() {
559+
// don't save if option disabled
560+
if (!model.screenSettings.saveWindowPosition.get()) {
561+
return;
562+
}
563+
564+
LOG.debug("Stage position changed '{}'/'{}'.", mainStage.xProperty().doubleValue(),
565+
mainStage.yProperty().doubleValue());
566+
567+
final ScreenPosHelper positionHelper = new ScreenPosHelper(mainStage.xProperty().doubleValue(),
568+
mainStage.yProperty().doubleValue());
569+
model.screenSettings.screenHash.set(positionHelper.getScreenHash());
570+
model.screenSettings.proportionalX.set(positionHelper.getProportionalX());
571+
model.screenSettings.proportionalY.set(positionHelper.getProportionalY());
572+
573+
}
574+
530575
}

0 commit comments

Comments
 (0)