Skip to content

Commit

Permalink
Fixes #180 Fix rounding of times when editing availability
Browse files Browse the repository at this point in the history
  • Loading branch information
dlemmermann committed Sep 20, 2022
1 parent fa92fdb commit d9b72a3
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.VBox;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.temporal.TemporalAdjusters;

public class HelloResourcesView extends CalendarFXDateControlSample {

Expand Down Expand Up @@ -127,7 +129,7 @@ private Resource<String> create(String name, Style style) {
}

private void fillAvailabilities(Calendar calendar) {
LocalDate date = LocalDate.now();
LocalDate date = LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
for (int i = 0; i < 14; i++) {
// fourteen days is enough for this demo
Entry morning = new Entry("Morning");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,11 @@ public ResourcesView() {
// calling "editEntry" with "false" flag because we do not want to change the start date of the view
addEventHandler(REQUEST_ENTRY, evt -> maybeRunAndConsume(evt, e -> editEntry(evt.getEntry(), false)));

setVirtualGrid(new VirtualGrid("Editing Grid", "Editing Grid", ChronoUnit.MINUTES, 20));
setGridLines(new VirtualGrid("Visible Grid", "Visible Grid", ChronoUnit.MINUTES, 20));
VirtualGrid grid = new VirtualGrid("Editing Grid", "Editing Grid", ChronoUnit.MINUTES, 20);

setVirtualGrid(grid);
setAvailabilityGrid(grid);
setGridLines(grid);
}

private void maybeRunAndConsume(RequestEvent evt, Consumer<RequestEvent> consumer) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,14 +172,14 @@ private void mouseMoved(MouseEvent evt) {
private void mousePressed(MouseEvent evt) {
showEntryDetails = false;

if (evt.isConsumed() || evt.getClickCount() > 1) {
if (evt.isConsumed() || !evt.getButton().equals(MouseButton.PRIMARY) || evt.getClickCount() > 1) {
return;
}

if (!dayViewBase.isScrollingEnabled()) {
VirtualGrid availabilityGrid = dayViewBase.getAvailabilityGrid();
setLassoStart(grid(dayViewBase.getInstantAt(evt), availabilityGrid));
setLassoEnd(grid(dayViewBase.getInstantAt(evt), availabilityGrid).plus(availabilityGrid.getAmount(), availabilityGrid.getUnit()));
setLassoStart(snapToGrid(dayViewBase.getInstantAt(evt), availabilityGrid, false));
setLassoEnd(snapToGrid(dayViewBase.getInstantAt(evt), availabilityGrid, false).plus(availabilityGrid.getAmount(), availabilityGrid.getUnit()));
}

if (dayViewBase.isEditAvailability()) {
Expand All @@ -189,10 +189,6 @@ private void mousePressed(MouseEvent evt) {
dragMode = null;
handle = null;

if (!evt.getButton().equals(MouseButton.PRIMARY)) {
return;
}

LOGGER.finer("mouse event source: " + evt.getSource());
LOGGER.finer("mouse event target: " + evt.getTarget());
LOGGER.finer("mouse event y-coordinate:" + evt.getY());
Expand All @@ -201,10 +197,20 @@ private void mousePressed(MouseEvent evt) {
if (!dayViewBase.isScrollingEnabled() && evt.getTarget() instanceof DayView) {
Optional<Calendar> calendar = dayViewBase.getCalendarAt(evt.getX(), evt.getY());
Instant instantAt = dayViewBase.getInstantAt(evt);
ZonedDateTime time = ZonedDateTime.ofInstant(instantAt, dayViewBase.getZoneId());

VirtualGrid virtualGrid = dayViewBase.getVirtualGrid();
if (virtualGrid != null) {
instantAt = snapToGrid(instantAt, virtualGrid, false);
}

ZonedDateTime time = ZonedDateTime.ofInstant(instantAt, dayViewBase.getZoneId());
entry = dayViewBase.createEntryAt(time, calendar.orElse(null));
entry.setInterval(entry.getInterval().withEndTime(entry.getInterval().getStartTime().plus(dayViewBase.getVirtualGrid().getAmount(), dayViewBase.getVirtualGrid().getUnit())));

if (virtualGrid != null) {
entry.setInterval(entry.getInterval().withEndTime(entry.getInterval().getStartTime().plus(virtualGrid.getAmount(), virtualGrid.getUnit())));
} else {
entry.setInterval(entry.getInterval().withEndTime(entry.getInterval().getStartTime().plus(entry.getMinimumDuration())));
}

DayView dayView = null;

Expand Down Expand Up @@ -327,7 +333,7 @@ private void mouseReleased(MouseEvent evt) {

private void mouseDragged(MouseEvent evt) {
if (!dayViewBase.isScrollingEnabled()) {
setLassoEnd(grid(dayViewBase.getInstantAt(evt), dayViewBase.getAvailabilityGrid()));
setLassoEnd(snapToGrid(dayViewBase.getInstantAt(evt), dayViewBase.getAvailabilityGrid(), true));
}

if (dayViewBase.isEditAvailability() || !evt.getButton().equals(MouseButton.PRIMARY) || dragMode == null || !dragging) {
Expand Down Expand Up @@ -369,7 +375,7 @@ private void mouseDragged(MouseEvent evt) {
private void changeStartTime(MouseEvent evt) {
DraggedEntry draggedEntry = dayViewBase.getDraggedEntry();

Instant gridTime = fixTimeIfOutsideView(evt, grid(dayViewBase.getInstantAt(evt)));
Instant gridTime = fixTimeIfOutsideView(evt, snapToGrid(dayViewBase.getInstantAt(evt), dayViewBase.getVirtualGrid(), true));

LOGGER.finer("changing start time, time = " + gridTime);

Expand Down Expand Up @@ -416,7 +422,7 @@ private Instant fixTimeIfOutsideView(MouseEvent evt, Instant gridTime) {
private void changeEndTime(MouseEvent evt) {
DraggedEntry draggedEntry = dayViewBase.getDraggedEntry();

Instant gridTime = fixTimeIfOutsideView(evt, grid(dayViewBase.getInstantAt(evt)));
Instant gridTime = fixTimeIfOutsideView(evt, snapToGrid(dayViewBase.getInstantAt(evt), dayViewBase.getVirtualGrid(), true));

LOGGER.finer("changing end time, time = " + gridTime);

Expand Down Expand Up @@ -462,7 +468,7 @@ private void changeStartAndEndTime(MouseEvent evt) {
Instant newStartTime = locationTime.minus(offsetDuration);
LOGGER.fine("new start time = " + newStartTime);

newStartTime = grid(newStartTime);
newStartTime = snapToGrid(newStartTime, dayViewBase.getVirtualGrid(), true);
Instant newEndTime = newStartTime.plus(entryDuration);

LOGGER.fine("new start time (grid) = " + newStartTime);
Expand Down Expand Up @@ -491,30 +497,19 @@ private boolean isMinimumDuration(Entry<?> entry, Instant timeA, Instant timeB)
return true;
}

// private void requestLayout() {
// dayViewBase.requestLayout();
// if (dayEntryView != null) {
// Parent parent = dayEntryView.getParent();
// if (parent != null) {
// parent.requestLayout();
// }
// }
//
// if (dayViewBase instanceof WeekView) {
// ((WeekView) dayViewBase).getWeekDayViews().forEach(Parent::requestLayout);
// }
// }

private Instant grid(Instant time) {
return grid(time, dayViewBase.getVirtualGrid());
}
private Instant snapToGrid(Instant time, VirtualGrid grid, boolean checkCloser) {
if (grid == null) {
return time;
}

private Instant grid(Instant time, VirtualGrid grid) {
DayOfWeek firstDayOfWeek = dayViewBase.getFirstDayOfWeek();
Instant lowerTime = grid.adjustTime(time, dayViewBase.getZoneId(), false, firstDayOfWeek);
Instant upperTime = grid.adjustTime(time, dayViewBase.getZoneId(), true, firstDayOfWeek);
if (Duration.between(time, upperTime).abs().minus(Duration.between(time, lowerTime).abs()).isNegative()) {
return upperTime;

if (checkCloser) {
Instant upperTime = grid.adjustTime(time, dayViewBase.getZoneId(), true, firstDayOfWeek);
if (Duration.between(time, upperTime).abs().minus(Duration.between(time, lowerTime).abs()).isNegative()) {
return upperTime;
}
}

return lowerTime;
Expand Down

0 comments on commit d9b72a3

Please sign in to comment.