diff --git a/CalendarFXSampler/src/main/java/com/calendarfx/demo/views/HelloCalendarView.java b/CalendarFXSampler/src/main/java/com/calendarfx/demo/views/HelloCalendarView.java index 9e2e09f1..121ff18d 100644 --- a/CalendarFXSampler/src/main/java/com/calendarfx/demo/views/HelloCalendarView.java +++ b/CalendarFXSampler/src/main/java/com/calendarfx/demo/views/HelloCalendarView.java @@ -45,7 +45,6 @@ protected DateControl createControl() { calendarView = new CalendarView(); calendarView.getCalendarSources().add(calendarSource); - calendarView.setTransitionsEnabled(false); return calendarView; } diff --git a/CalendarFXSampler/src/main/java/com/calendarfx/demo/views/HelloCalendarViewAnimated.java b/CalendarFXSampler/src/main/java/com/calendarfx/demo/views/HelloCalendarViewAnimated.java deleted file mode 100644 index 61103b1e..00000000 --- a/CalendarFXSampler/src/main/java/com/calendarfx/demo/views/HelloCalendarViewAnimated.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2017 Dirk Lemmermann Software & Consulting (dlsc.com) - * Copyright (C) 2006 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.calendarfx.demo.views; - -import com.calendarfx.demo.CalendarFXDateControlSample; -import com.calendarfx.model.Calendar; -import com.calendarfx.model.CalendarSource; -import com.calendarfx.model.Entry; -import com.calendarfx.view.CalendarView; -import com.calendarfx.view.DateControl; - -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.Month; -import java.time.YearMonth; - -public class HelloCalendarViewAnimated extends CalendarFXDateControlSample { - - private CalendarView calendarView; - - @Override - public String getSampleName() { - return "Calendar View (Animated)"; - } - - @Override - protected DateControl createControl() { - CalendarSource calendarSource = new CalendarSource("My Calendars"); - calendarSource.getCalendars().add(new HelloCalendar()); - - calendarView = new CalendarView(); - calendarView.getCalendarSources().add(calendarSource); - calendarView.setTransitionsEnabled(true); - - return calendarView; - } - - @Override - public String getSampleDescription() { - return "The calendar view displays a single day, a week, a month, and a year."; - } - - @Override - protected Class getJavaDocClass() { - return CalendarView.class; - } - - class HelloCalendar extends Calendar { - - public HelloCalendar() { - for (Month month : Month.values()) { - - YearMonth yearMonth = YearMonth.of(LocalDate.now().getYear(), month); - - for (int i = 1; i < 28; i++) { - - LocalDate date = yearMonth.atDay(i); - - for (int j = 0; j < (int) (Math.random() * 7); j++) { - Entry entry = new Entry<>(); - entry.changeStartDate(date); - entry.changeEndDate(date); - - entry.setTitle("Entry " + (j + 1)); - - int hour = (int) (Math.random() * 23); - int durationInHours = Math.min(24 - hour, - (int) (Math.random() * 4)); - - LocalTime startTime = LocalTime.of(hour, 0); - LocalTime endTime = startTime - .plusHours(durationInHours); - - entry.changeStartTime(startTime); - entry.changeEndTime(endTime); - - if (Math.random() < .3) { - entry.setFullDay(true); - } - - entry.setCalendar(this); - } - } - } - } - } - - public static void main(String[] args) { - launch(args); - } -} diff --git a/CalendarFXView/src/main/java/com/calendarfx/view/CalendarView.java b/CalendarFXView/src/main/java/com/calendarfx/view/CalendarView.java index 7fcf1791..1c811c4f 100644 --- a/CalendarFXView/src/main/java/com/calendarfx/view/CalendarView.java +++ b/CalendarFXView/src/main/java/com/calendarfx/view/CalendarView.java @@ -23,15 +23,17 @@ import com.calendarfx.view.page.YearPage; import com.calendarfx.view.print.PrintView; import impl.com.calendarfx.view.CalendarViewSkin; -import javafx.beans.InvalidationListener; import javafx.beans.binding.Bindings; import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ListProperty; import javafx.beans.property.ObjectProperty; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleListProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; import javafx.collections.MapChangeListener.Change; import javafx.collections.ObservableList; import javafx.scene.Node; @@ -45,8 +47,13 @@ import java.time.LocalDateTime; import java.time.Year; import java.time.YearMonth; +import java.util.Objects; import java.util.Optional; +import static com.calendarfx.view.CalendarView.Page.DAY; +import static com.calendarfx.view.CalendarView.Page.MONTH; +import static com.calendarfx.view.CalendarView.Page.WEEK; +import static com.calendarfx.view.CalendarView.Page.YEAR; import static java.util.Objects.requireNonNull; /** @@ -70,13 +77,13 @@ public class CalendarView extends DateControl { private final YearMonthView yearMonthView; - private final DayPage dayPage; + private DayPage dayPage; - private final WeekPage weekPage; + private WeekPage weekPage; - private final MonthPage monthPage; + private MonthPage monthPage; - private final YearPage yearPage; + private YearPage yearPage; private DeveloperConsole developerConsole; @@ -84,16 +91,23 @@ public class CalendarView extends DateControl { private PrintView printView; + public CalendarView() { + this(DAY, WEEK, MONTH); + } + /** * Constructs a new calendar view. */ - public CalendarView() { + public CalendarView(Page... availablePages) { + Objects.requireNonNull(availablePages, "available pages can not be null"); + + if (availablePages.length == 0) { + throw new IllegalArgumentException("no available page passed to constructor"); + } + getStyleClass().add(DEFAULT_STYLE_CLASS); - this.dayPage = new DayPage(); - this.weekPage = new WeekPage(); - this.monthPage = new MonthPage(); - this.yearPage = new YearPage(); + getAvailablePages().setAll(availablePages); this.searchField = (CustomTextField) TextFields.createClearableTextField(); this.sourceView = new SourceView(); @@ -105,7 +119,7 @@ public CalendarView() { this.developerConsole.setDateControl(this); } - selectedPage.set(dayPage); + selectedPage.set(availablePages[0]); Bindings.bindBidirectional(searchField.visibleProperty(), showSearchFieldProperty()); @@ -122,36 +136,56 @@ public CalendarView() { getProperties().addListener((Change change) -> { if (change.getKey().equals(SELECTED_PAGE)) { if (change.getValueAdded() != null) { - PageBase page = (PageBase) change.getValueAdded(); + Page page = (Page) change.getValueAdded(); selectedPage.set(page); getProperties().remove(SELECTED_PAGE); } } }); + } + + public PageBase getPageView(Page page) { + switch (page) { + case DAY: + return getDayPage(); + case WEEK: + return getWeekPage(); + case MONTH: + return getMonthPage(); + case YEAR: + return getYearPage(); + default: + throw new IllegalArgumentException("unknown page: " + page); + } + } + + /** + * An enumerator listing the available pages that can be shown + * by the calendar view. By default, the CalendarView contains + * all possible pages. Use {@link #getAvailablePages()} to change + * this. + * + * @see #getAvailablePages() + */ + public enum Page { + DAY, + WEEK, + MONTH, + YEAR + } - InvalidationListener fixSelectedPageListener = it -> fixSelectedPage(); + private final ListProperty availablePages = new SimpleListProperty<>(this, "availablePages", FXCollections.observableArrayList()); - dayPage.hiddenProperty().addListener(fixSelectedPageListener); - weekPage.hiddenProperty().addListener(fixSelectedPageListener); - monthPage.hiddenProperty().addListener(fixSelectedPageListener); - yearPage.hiddenProperty().addListener(fixSelectedPageListener); + public ObservableList getAvailablePages() { + return availablePages.get(); + } - fixSelectedPage(); + public ListProperty availablePagesProperty() { + return availablePages; } - private void fixSelectedPage() { - PageBase page = getSelectedPage(); - if (page == null || page.isHidden()) { - if (page == dayPage) { - selectedPage.set(weekPage); - } else if (page == weekPage) { - selectedPage.set(monthPage); - } else if (page == monthPage) { - selectedPage.set(yearPage); - } else if (page == yearPage) { - selectedPage.set(dayPage); - } - } + public void setAvailablePages(ObservableList availablePages) { + this.availablePages.set(availablePages); } @Override @@ -160,8 +194,8 @@ protected Skin createDefaultSkin() { } /** - * Returns the developer console that can be made visible via a META-D key - * stroke when the system property "calendarfx.developer" is set to true. + * Returns the developer console that can be made visible via a META-D keystroke + * when the system property "calendarfx.developer" is set to true. * * @return the developer console or null if the system property * "calendarfx.developer" is not set to true @@ -176,6 +210,10 @@ public final DeveloperConsole getDeveloperConsole() { * @return the day page */ public final DayPage getDayPage() { + if (dayPage == null) { + dayPage = new DayPage(); + bind(dayPage, true); + } return dayPage; } @@ -185,6 +223,10 @@ public final DayPage getDayPage() { * @return the week page */ public final WeekPage getWeekPage() { + if (weekPage == null) { + weekPage = new WeekPage(); + bind(weekPage, true); + } return weekPage; } @@ -194,6 +236,10 @@ public final WeekPage getWeekPage() { * @return the month page */ public final MonthPage getMonthPage() { + if (monthPage == null) { + monthPage = new MonthPage(); + bind(monthPage, true); + } return monthPage; } @@ -203,6 +249,10 @@ public final MonthPage getMonthPage() { * @return the year page */ public final YearPage getYearPage() { + if (yearPage == null) { + yearPage = new YearPage(); + bind(yearPage, true); + } return yearPage; } @@ -346,14 +396,14 @@ public final boolean isShowSearchResultsTray() { return showSearchResultsTray.get(); } - private final ReadOnlyObjectWrapper selectedPage = new ReadOnlyObjectWrapper<>(this, "selectedPage"); + private final ReadOnlyObjectWrapper selectedPage = new ReadOnlyObjectWrapper<>(this, "selectedPage"); /** * A read-only property used for storing the currently selected page. * * @return the selected page view */ - public final ReadOnlyObjectProperty selectedPageProperty() { + public final ReadOnlyObjectProperty selectedPageProperty() { return selectedPage.getReadOnlyProperty(); } @@ -362,10 +412,20 @@ public final ReadOnlyObjectProperty selectedPageProperty() { * * @return the selected page view */ - public final PageBase getSelectedPage() { + public final Page getSelectedPage() { return selectedPageProperty().get(); } + /** + * Returns the view for the currently selected {@link Page}. + * + * @see #selectedPageProperty() + * @return the selected page view + */ + public final PageBase getSelectedPageView() { + return getPageView(getSelectedPage()); + } + private final ObjectProperty header = new SimpleObjectProperty<>(this, "header", null); /** @@ -428,37 +488,6 @@ public final void setFooter(Node node) { footerProperty().set(node); } - private final BooleanProperty transitionsEnabled = new SimpleBooleanProperty(this, "transitionsEnabled", true); - - /** - * A property used to control whether switching from one page to another - * will be done with a graphics transition. - * - * @return true if transitions (eye candy) are enabled - */ - public final BooleanProperty transitionsEnabledProperty() { - return this.transitionsEnabled; - } - - /** - * Returns the value of {@link #transitionsEnabledProperty()}. - * - * @return true if transitions are enabled - */ - public final boolean isTransitionsEnabled() { - return transitionsEnabledProperty().get(); - } - - /** - * Sets the value of {@link #transitionsEnabledProperty()}. - * - * @param transitions if true transitions will be used to go from one page to - * another - */ - public final void setTransitionsEnabled(boolean transitions) { - transitionsEnabledProperty().set(transitions); - } - // tray animation support private final BooleanProperty traysAnimated = new SimpleBooleanProperty(this, "traysAnimated", true); @@ -715,28 +744,28 @@ public final void setShowToolBar(boolean show) { * Switches the view to the {@link DayPage}. */ public final void showDayPage() { - selectedPage.set(getDayPage()); + selectedPage.set(DAY); } /** * Switches the view to the {@link WeekPage}. */ public final void showWeekPage() { - selectedPage.set(getWeekPage()); + selectedPage.set(WEEK); } /** * Switches the view to the {@link MonthPage}. */ public final void showMonthPage() { - selectedPage.set(getMonthPage()); + selectedPage.set(MONTH); } /** * Switches the view to the {@link YearPage}. */ public final void showYearPage() { - selectedPage.set(getYearPage()); + selectedPage.set(YEAR); } /** @@ -748,14 +777,14 @@ public final void showYearPage() { */ public final void showDate(LocalDate date) { requireNonNull(date); - if (!dayPage.isHidden()) { - selectedPage.set(getDayPage()); - } else if (!weekPage.isHidden()) { - selectedPage.set(getWeekPage()); - } else if (!monthPage.isHidden()) { - selectedPage.set(getMonthPage()); - } else if (!yearPage.isHidden()) { - selectedPage.set(getYearPage()); + if (getAvailablePages().contains(DAY)) { + selectedPage.set(DAY); + } else if (getAvailablePages().contains(WEEK)) { + selectedPage.set(WEEK); + } else if (getAvailablePages().contains(MONTH)) { + selectedPage.set(MONTH); + } else if (getAvailablePages().contains(YEAR)) { + selectedPage.set(YEAR); } setDate(date); @@ -774,12 +803,12 @@ public final void showWeek(Year year, int weekOfYear) { if (weekOfYear < 1) { throw new IllegalArgumentException("illegal value for week of year: " + weekOfYear); } - if (!weekPage.isHidden()) { - selectedPage.set(getWeekPage()); - } else if (!monthPage.isHidden()) { - selectedPage.set(getMonthPage()); - } else if (!yearPage.isHidden()) { - selectedPage.set(getYearPage()); + if (getAvailablePages().contains(WEEK)) { + selectedPage.set(WEEK); + } else if (getAvailablePages().contains(MONTH)) { + selectedPage.set(MONTH); + } else if (getAvailablePages().contains(YEAR)) { + selectedPage.set(YEAR); } setDate(LocalDate.of(year.getValue(), 1, 1).plusWeeks(weekOfYear)); @@ -796,14 +825,14 @@ public final void showWeek(Year year, int weekOfYear) { public final void showDateTime(LocalDateTime dateTime) { requireNonNull(dateTime); - if (!dayPage.isHidden()) { - selectedPage.set(getDayPage()); - } else if (!weekPage.isHidden()) { - selectedPage.set(getWeekPage()); - } else if (!monthPage.isHidden()) { - selectedPage.set(getMonthPage()); - } else if (!yearPage.isHidden()) { - selectedPage.set(getYearPage()); + if (getAvailablePages().contains(DAY)) { + selectedPage.set(DAY); + } else if (getAvailablePages().contains(WEEK)) { + selectedPage.set(WEEK); + } else if (getAvailablePages().contains(MONTH)) { + selectedPage.set(MONTH); + } else if (getAvailablePages().contains(YEAR)) { + selectedPage.set(YEAR); } setDate(dateTime.toLocalDate()); @@ -820,10 +849,10 @@ public final void showDateTime(LocalDateTime dateTime) { public final void showYearMonth(YearMonth yearMonth) { requireNonNull(yearMonth); - if (!monthPage.isHidden()) { - selectedPage.set(getMonthPage()); - } else if (!yearPage.isHidden()) { - selectedPage.set(getYearPage()); + if (getAvailablePages().contains(MONTH)) { + selectedPage.set(MONTH); + } else if (getAvailablePages().contains(YEAR)) { + selectedPage.set(YEAR); } setDate(yearMonth.atDay(1)); @@ -838,8 +867,8 @@ public final void showYearMonth(YearMonth yearMonth) { */ public final void showYear(Year year) { requireNonNull(year); - if (!yearPage.isHidden()) { - selectedPage.set(getYearPage()); + if (getAvailablePages().contains(YEAR)) { + selectedPage.set(YEAR); setDate(year.atDay(1)); } } @@ -926,44 +955,6 @@ public String getCategory() { } }); - items.add(new Item() { - - @Override - public Optional> getObservableValue() { - return Optional.of(transitionsEnabledProperty()); - } - - @Override - public void setValue(Object value) { - setTransitionsEnabled((boolean) value); - } - - @Override - public Object getValue() { - return isTransitionsEnabled(); - } - - @Override - public Class getType() { - return Boolean.class; - } - - @Override - public String getName() { - return "Transitions"; - } - - @Override - public String getDescription() { - return "Use transitions when changing pages."; - } - - @Override - public String getCategory() { - return CALENDAR_VIEW_CATEGORY; - } - }); - items.add(new Item() { @Override diff --git a/CalendarFXView/src/main/java/com/calendarfx/view/page/PageBase.java b/CalendarFXView/src/main/java/com/calendarfx/view/page/PageBase.java index c2470083..31835fa0 100644 --- a/CalendarFXView/src/main/java/com/calendarfx/view/page/PageBase.java +++ b/CalendarFXView/src/main/java/com/calendarfx/view/page/PageBase.java @@ -54,37 +54,6 @@ protected PageBase() { getStyleClass().add("calendar-page"); } - private final BooleanProperty hidden = new SimpleBooleanProperty(this, "hidden", false); - - /** - * A property used to indicate whether the page should be shown to the user or not. Not - * every application requires all available pages (day, week, month, year) to be accessible - * to the user. - * - * @return true if the page should not be shown to the user - */ - public final BooleanProperty hiddenProperty() { - return hidden; - } - - /** - * Sets the value of {@link #hiddenProperty()}. - * - * @param hidden true if the page should be hidden - */ - public final void setHidden(boolean hidden) { - hiddenProperty().set(hidden); - } - - /** - * Returns the value of {@link #hiddenProperty()}. - * - * @return true if the page will be hidden - */ - public final boolean isHidden() { - return hiddenProperty().get(); - } - /** * Returns one or more controls that can be added to the toolbar by the * surrounding container, e.g. the {@link CalendarView}. @@ -95,8 +64,7 @@ public Node getToolBarControls() { return null; } - private final ObjectProperty dateTimeFormatter = new SimpleObjectProperty<>( - this, "datePattern", DateTimeFormatter.ofLocalizedDate(MEDIUM)); + private final ObjectProperty dateTimeFormatter = new SimpleObjectProperty<>(this, "datePattern", DateTimeFormatter.ofLocalizedDate(MEDIUM)); /** * A formatter for the date shown in the upper right corner. Each page has @@ -319,44 +287,6 @@ public String getCategory() { } }); - items.add(new Item() { - - @Override - public Optional> getObservableValue() { - return Optional.of(hiddenProperty()); - } - - @Override - public void setValue(Object value) { - setHidden((boolean) value); - } - - @Override - public Object getValue() { - return isHidden(); - } - - @Override - public Class getType() { - return Boolean.class; - } - - @Override - public String getName() { - return "Hidden"; - } - - @Override - public String getDescription() { - return "Hides the page from the user."; - } - - @Override - public String getCategory() { - return PAGE_BASE_CATEGORY; - } - }); - return items; } diff --git a/CalendarFXView/src/main/java/impl/com/calendarfx/view/CalendarViewSkin.java b/CalendarFXView/src/main/java/impl/com/calendarfx/view/CalendarViewSkin.java index 12dff264..d529630c 100644 --- a/CalendarFXView/src/main/java/impl/com/calendarfx/view/CalendarViewSkin.java +++ b/CalendarFXView/src/main/java/impl/com/calendarfx/view/CalendarViewSkin.java @@ -20,36 +20,27 @@ import com.calendarfx.model.Entry; import com.calendarfx.view.CalendarFXControl; import com.calendarfx.view.CalendarView; +import com.calendarfx.view.CalendarView.Page; import com.calendarfx.view.DeveloperConsole; import com.calendarfx.view.Messages; import com.calendarfx.view.SearchResultView; import com.calendarfx.view.SourceView; import com.calendarfx.view.YearMonthView; -import com.calendarfx.view.page.DayPage; -import com.calendarfx.view.page.MonthPage; import com.calendarfx.view.page.PageBase; -import com.calendarfx.view.page.WeekPage; -import com.calendarfx.view.page.YearPage; import com.calendarfx.view.popover.ZoneIdComparator; import com.calendarfx.view.print.PrintView; import com.calendarfx.view.print.PrintablePage; import com.calendarfx.view.print.ViewType; -import javafx.animation.Animation.Status; -import javafx.animation.KeyFrame; -import javafx.animation.KeyValue; -import javafx.animation.Timeline; import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.binding.Bindings; -import javafx.collections.ObservableList; import javafx.collections.transformation.SortedList; import javafx.geometry.HPos; import javafx.geometry.Orientation; import javafx.geometry.Pos; import javafx.geometry.Side; import javafx.geometry.VPos; -import javafx.scene.CacheHint; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ChoiceBox; @@ -67,7 +58,6 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; -import javafx.util.Duration; import org.controlsfx.control.MasterDetailPane; import org.controlsfx.control.SegmentedButton; import org.controlsfx.control.textfield.CustomTextField; @@ -75,9 +65,11 @@ import org.kordamp.ikonli.javafx.FontIcon; import java.time.ZoneId; -import java.util.ArrayList; -import java.util.List; +import static com.calendarfx.view.CalendarView.Page.DAY; +import static com.calendarfx.view.CalendarView.Page.MONTH; +import static com.calendarfx.view.CalendarView.Page.WEEK; +import static com.calendarfx.view.CalendarView.Page.YEAR; import static com.calendarfx.view.RequestEvent.REQUEST_DATE; import static com.calendarfx.view.RequestEvent.REQUEST_DATE_TIME; import static com.calendarfx.view.RequestEvent.REQUEST_ENTRY; @@ -97,12 +89,6 @@ public class CalendarViewSkin extends SkinBase { private final SearchResultView searchResultView; private final StackPane stackPane; - private final DayPage dayPage; - private final WeekPage weekPage; - private final MonthPage monthPage; - private final YearPage yearPage; - - private final List pageList = new ArrayList<>(); private final ToggleButton showYear; private final ToggleButton showMonth; private final ToggleButton showWeek; @@ -111,6 +97,7 @@ public class CalendarViewSkin extends SkinBase { private final SegmentedButton switcher; private SourceView sourceView; + private final InvalidationListener entriesVisibilityListener = obs -> updateCalendarVisibility(); private final InvalidationListener printEntriesVisibilityListener = obs -> updatePrintVisibility(); @@ -131,28 +118,9 @@ public CalendarViewSkin(CalendarView view) { view.addEventHandler(REQUEST_WEEK, evt -> view.showWeek(evt.getYear(), evt.getWeekOfYear())); view.addEventHandler(REQUEST_YEAR_MONTH, evt -> view.showYearMonth(evt.getYearMonth())); view.addEventHandler(REQUEST_YEAR, evt -> view.showYear(evt.getYear())); - view.addEventHandler(REQUEST_ENTRY, evt -> view.getSelectedPage().editEntry(evt.getEntry())); - - this.dayPage = view.getDayPage(); - this.weekPage = view.getWeekPage(); - this.monthPage = view.getMonthPage(); - this.yearPage = view.getYearPage(); - - this.pageList.add(dayPage); - this.pageList.add(weekPage); - this.pageList.add(monthPage); - this.pageList.add(yearPage); + view.addEventHandler(REQUEST_ENTRY, evt -> view.getSelectedPageView().editEntry(evt.getEntry())); - view.bind(dayPage, true); - view.bind(weekPage, true); - view.bind(monthPage, true); - view.bind(yearPage, true); - - InvalidationListener updateSwitcherListener = it -> buildSwitcher(); - dayPage.hiddenProperty().addListener(updateSwitcherListener); - weekPage.hiddenProperty().addListener(updateSwitcherListener); - monthPage.hiddenProperty().addListener(updateSwitcherListener); - yearPage.hiddenProperty().addListener(updateSwitcherListener); + view.getAvailablePages().addListener((Observable it) -> buildSwitcher()); TrayPane trayPane = new TrayPane(); this.trayButton = new ToggleButton(Messages.getString("CalendarViewSkin.TOGGLE_SOURCE_TRAY")); @@ -364,12 +332,9 @@ public CalendarViewSkin(CalendarView view) { getChildren().add(borderPane); } - stackPane.getChildren().setAll(dayPage); - - final PageBase selectedPage = view.getSelectedPage(); + final PageBase selectedPage = view.getSelectedPageView(); selectedPage.toFront(); - hideNonSelectedPages(); updateToggleButtons(); } @@ -390,9 +355,9 @@ private void closeTray() { private void updateCalendarVisibility() { CalendarView view = getSkinnable(); - if (view.getSelectedPage() == view.getDayPage()) { + if (view.getSelectedPage().equals(DAY)) { view.getDayPage().refreshData(); - } else if (view.getSelectedPage() == view.getWeekPage()) { + } else if (view.getSelectedPage().equals(WEEK)) { view.getWeekPage().refreshData(); } } @@ -412,17 +377,18 @@ private void updatePrintVisibility() { } private void buildSwitcher() { + CalendarView view = getSkinnable(); switcher.getButtons().clear(); - if (!dayPage.isHidden()) { + if (view.getAvailablePages().contains(DAY)) { switcher.getButtons().add(showDay); } - if (!weekPage.isHidden()) { + if (view.getAvailablePages().contains(WEEK)) { switcher.getButtons().add(showWeek); } - if (!monthPage.isHidden()) { + if (view.getAvailablePages().contains(MONTH)) { switcher.getButtons().add(showMonth); } - if (!yearPage.isHidden()) { + if (view.getAvailablePages().contains(YEAR)) { switcher.getButtons().add(showYear); } @@ -452,8 +418,8 @@ private void buildLeftToolBarBox() { } if (getSkinnable().isShowPageToolBarControls()) { - PageBase page = getSkinnable().getSelectedPage(); - Node toolBarControls = page.getToolBarControls(); + Page page = getSkinnable().getSelectedPage(); + Node toolBarControls = getSkinnable().getPageView(page).getToolBarControls(); if (toolBarControls != null && !((toolBarControls instanceof Pane) && ((Pane) toolBarControls).getChildrenUnmodifiable().isEmpty())) { if (!leftToolBarBox.getChildren().isEmpty()) { @@ -464,138 +430,27 @@ private void buildLeftToolBarBox() { } } - private Timeline timeline; - private void changePage() { CalendarView view = getSkinnable(); - - if (view.isTransitionsEnabled()) { - animateChangePage(); - } else { - updateToggleButtons(); - - PageBase selectedPage = view.getSelectedPage(); - - selectedPage.setManaged(true); - selectedPage.setVisible(true); - - /* - * These values might have been changed if transitions were used - * before. - */ - selectedPage.setScaleX(1); - selectedPage.setScaleY(1); - selectedPage.setOpacity(1); - selectedPage.toFront(); - - hideNonSelectedPages(); - } + updateToggleButtons(); + stackPane.getChildren().setAll(view.getSelectedPageView()); } - private void hideNonSelectedPages() { - PageBase selectedPage = getSkinnable().getSelectedPage(); - - pageList.forEach(page -> { - if (page != selectedPage) { - page.setVisible(false); - page.setManaged(false); - } - }); - } private void updateToggleButtons() { CalendarView view = getSkinnable(); - PageBase page = view.getSelectedPage(); - if (page == view.getDayPage()) { + Page page = view.getSelectedPage(); + if (page.equals(DAY)) { showDay.setSelected(true); - } else if (page == view.getWeekPage()) { + } else if (page.equals(WEEK)) { showWeek.setSelected(true); - } else if (page == view.getMonthPage()) { + } else if (page.equals(MONTH)) { showMonth.setSelected(true); - } else if (page == view.getYearPage()) { + } else if (page.equals(YEAR)) { showYear.setSelected(true); } - if (!stackPane.getChildren().contains(page)) { - stackPane.getChildren().add(page); - } - } - - private void animateChangePage() { - if (timeline != null && timeline.getStatus().equals(Status.RUNNING)) { - return; - } - - PageBase oldPage = null; - - final ObservableList children = stackPane.getChildren(); - if (!children.isEmpty()) { - oldPage = (PageBase) children.get(children.size() - 1); - } - - final Node fOldPage = oldPage; - - boolean zoomIn = false; - - PageBase newPage = getSkinnable().getSelectedPage(); - - timeline = new Timeline(); - - double small = .6; - double large = 1.4; - Duration duration = Duration.seconds(.2); - - if (oldPage != null) { - oldPage.setCache(true); - oldPage.setCacheHint(CacheHint.SCALE); - - zoomIn = pageList.indexOf(newPage) < pageList.indexOf(oldPage); - - KeyValue oldOpacity = new KeyValue(oldPage.opacityProperty(), 0); - KeyValue oldScaleX = new KeyValue(oldPage.scaleXProperty(), zoomIn ? large : small); - KeyValue oldScaleY = new KeyValue(oldPage.scaleYProperty(), zoomIn ? large : small); - KeyFrame frame1 = new KeyFrame(duration, oldOpacity, oldScaleX, oldScaleY); - timeline.getKeyFrames().add(frame1); - - oldPage.setCache(true); - oldPage.setCacheHint(CacheHint.SCALE); - - timeline.setOnFinished(evt -> { - fOldPage.setVisible(false); - fOldPage.setManaged(false); - fOldPage.setCache(false); - newPage.setCache(false); - updateToggleButtons(); - }); - } else { - timeline.setOnFinished(evt -> updateToggleButtons()); - } - - newPage.setOpacity(0); - newPage.setScaleX(zoomIn ? small : large); - newPage.setScaleY(zoomIn ? small : large); - newPage.setCache(true); - newPage.setCacheHint(CacheHint.SCALE); - newPage.toFront(); - - pageList.forEach(page -> { - if (!(page == newPage || page == fOldPage)) { - page.setVisible(false); - page.setManaged(false); - } else { - page.setVisible(true); - page.setManaged(true); - } - }); - - KeyValue newOpacity = new KeyValue(newPage.opacityProperty(), 1); - KeyValue newScaleX = new KeyValue(newPage.scaleXProperty(), 1); - KeyValue newScaleY = new KeyValue(newPage.scaleYProperty(), 1); - - KeyFrame frame2 = new KeyFrame(duration, newOpacity, newScaleX, newScaleY); - timeline.getKeyFrames().add(frame2); - - timeline.play(); + stackPane.getChildren().setAll(view.getSelectedPageView()); } private void showSelectedSearchResult() { @@ -659,8 +514,8 @@ private void print() { printView.setWeekFields(getSkinnable().getWeekFields()); printView.getCalendarSources().setAll(getSkinnable().getCalendarSources()); - printView.setLayout(getSkinnable().getSelectedPage().getLayout()); - printView.setViewType(getSkinnable().getSelectedPage().getPrintViewType()); + printView.setLayout(getSkinnable().getSelectedPageView().getLayout()); + printView.setViewType(getSkinnable().getSelectedPageView().getPrintViewType()); printView.loadDropDownValues(getSkinnable().getDate()); printView.show(getSkinnable().getScene().getWindow()); @@ -677,21 +532,21 @@ private void print() { }); } - @Override - protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) { - double dayHeight = dayPage.prefHeight(-1); - double weekHeight = weekPage.prefHeight(-1); - double monthHeight = monthPage.prefHeight(-1); - double yearHeight = yearPage.prefHeight(-1); - return Math.max(dayHeight, Math.max(weekHeight, Math.max(monthHeight, yearHeight))); - } - - @Override - protected double computePrefWidth(double width, double topInset, double rightInset, double bottomInset, double leftInset) { - double dayWidth = dayPage.prefWidth(-1); - double weekWidth = weekPage.prefWidth(-1); - double monthWidth = monthPage.prefWidth(-1); - double yearWidth = yearPage.prefWidth(-1); - return Math.max(dayWidth, Math.max(weekWidth, Math.max(monthWidth, yearWidth))); - } +// @Override +// protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) { +// double dayHeight = dayPage.prefHeight(-1); +// double weekHeight = weekPage.prefHeight(-1); +// double monthHeight = monthPage.prefHeight(-1); +// double yearHeight = yearPage.prefHeight(-1); +// return Math.max(dayHeight, Math.max(weekHeight, Math.max(monthHeight, yearHeight))); +// } +// +// @Override +// protected double computePrefWidth(double width, double topInset, double rightInset, double bottomInset, double leftInset) { +// double dayWidth = dayPage.prefWidth(-1); +// double weekWidth = weekPage.prefWidth(-1); +// double monthWidth = monthPage.prefWidth(-1); +// double yearWidth = yearPage.prefWidth(-1); +// return Math.max(dayWidth, Math.max(weekWidth, Math.max(monthWidth, yearWidth))); +// } }