diff --git a/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/src/main/java/org/cryptomator/ui/common/FxmlFile.java index 1a2374f85..063f6609f 100644 --- a/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -36,6 +36,7 @@ public enum FxmlFile { MIGRATION_RUN("/fxml/migration_run.fxml"), // MIGRATION_START("/fxml/migration_start.fxml"), // MIGRATION_SUCCESS("/fxml/migration_success.fxml"), // + NOTIFICATION("/fxml/notification.fxml"), PREFERENCES("/fxml/preferences.fxml"), // QUIT("/fxml/quit.fxml"), // QUIT_FORCED("/fxml/quit_forced.fxml"), // diff --git a/src/main/java/org/cryptomator/ui/controls/NotificationBar.java b/src/main/java/org/cryptomator/ui/controls/NotificationBar.java new file mode 100644 index 000000000..15641b2fc --- /dev/null +++ b/src/main/java/org/cryptomator/ui/controls/NotificationBar.java @@ -0,0 +1,96 @@ +package org.cryptomator.ui.controls; + +import org.cryptomator.ui.common.FxmlFile; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import java.io.IOException; + +public class NotificationBar extends HBox { + + @FXML + private Label notificationLabel; + + @FXML + private Button closeButton; + + private final StringProperty textProperty = new SimpleStringProperty(); + private final BooleanProperty dismissable = new SimpleBooleanProperty(); + private final BooleanProperty notify = new SimpleBooleanProperty(); + + + public NotificationBar() { + loadFXML(); + closeButton.visibleProperty().bind(dismissable); + notificationLabel.textProperty().bind(textProperty); + + visibleProperty().bind(notifyProperty()); + managedProperty().bind(notifyProperty()); + + closeButton.setOnAction(_ -> { + visibleProperty().unbind(); + managedProperty().unbind(); + visibleProperty().set(false); + managedProperty().set(false); + }); + } + + private void loadFXML() { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(FxmlFile.NOTIFICATION.getRessourcePathString())); + fxmlLoader.setController(this); + try { + HBox content = fxmlLoader.load(); + this.getChildren().addAll(content.getChildren()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public String getText() { + return textProperty.get(); + } + + public void setText(String text) { + textProperty.set(text); + } + + public StringProperty textProperty() { + return textProperty; + } + + public void setStyleClass(String styleClass) { + getStyleClass().add(styleClass); + } + + public boolean isDismissable() { + return dismissable.get(); + } + + public void setDismissable(boolean value) { + dismissable.set(value); + } + + public BooleanProperty dismissableProperty() { + return dismissable; + } + + public boolean getNotify() { + return notify.get(); + } + + public void setNotify(boolean value) { + notify.set(value); + } + + public BooleanProperty notifyProperty() { + return notify; + } + +} diff --git a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java index 6ca29b73b..ae9d796ad 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowController.java @@ -1,5 +1,13 @@ package org.cryptomator.ui.mainwindow; +import javafx.beans.Observable; +import javafx.beans.binding.BooleanBinding; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.ReadOnlyBooleanProperty; +import javafx.beans.property.ReadOnlyObjectProperty; +import javafx.fxml.FXML; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.LicenseHolder; import org.cryptomator.common.settings.Settings; @@ -13,17 +21,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; -import javafx.beans.Observable; -import javafx.beans.binding.Bindings; -import javafx.beans.binding.BooleanBinding; -import javafx.beans.property.BooleanProperty; -import javafx.beans.property.ObjectProperty; -import javafx.beans.property.ReadOnlyBooleanProperty; -import javafx.beans.property.ReadOnlyObjectProperty; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.fxml.FXML; -import javafx.scene.layout.StackPane; -import javafx.stage.Stage; @MainWindowScoped public class MainWindowController implements FxController { @@ -37,12 +34,9 @@ public class MainWindowController implements FxController { private final UpdateChecker updateChecker; private final BooleanBinding updateAvailable; private final LicenseHolder licenseHolder; - private final BooleanProperty hideSupportNotificationClicked = new SimpleBooleanProperty(false); - private final BooleanProperty supportNotificationHidden = new SimpleBooleanProperty(); - private final BooleanProperty hideUpdateNotificationClicked = new SimpleBooleanProperty(false); - private final BooleanProperty updateNotificationHidden = new SimpleBooleanProperty(); - public StackPane root; + @FXML + private StackPane root; @Inject public MainWindowController(@MainWindow Stage window, // @@ -80,16 +74,12 @@ public class MainWindowController implements FxController { window.heightProperty().addListener((_, _, _) -> savePositionalSettings()); window.xProperty().addListener((_, _, _) -> savePositionalSettings()); window.yProperty().addListener((_, _, _) -> savePositionalSettings()); - - supportNotificationHidden.bind(Bindings.createBooleanBinding(() -> !licenseHolder.isValidLicense() && !hideSupportNotificationClicked.get(), hideSupportNotificationClicked, licenseHolder.validLicenseProperty())); - updateNotificationHidden.bind(Bindings.createBooleanBinding(() -> updateAvailable.get() && !hideUpdateNotificationClicked.get(), hideUpdateNotificationClicked, updateAvailable)); } private boolean neverTouched() { return (settings.windowHeight.get() == 0) && (settings.windowWidth.get() == 0) && (settings.windowXPosition.get() == 0) && (settings.windowYPosition.get() == 0); } - @FXML public void savePositionalSettings() { settings.windowWidth.setValue(window.getWidth()); settings.windowHeight.setValue(window.getHeight()); @@ -119,25 +109,11 @@ public class MainWindowController implements FxController { appWindows.showPreferencesWindow(SelectedPreferencesTab.UPDATES); } - @FXML - public void hideSupportNotification() { - this.hideSupportNotificationClicked.setValue(true); - } - - @FXML - public void hideUpdateNotification() { - this.hideUpdateNotificationClicked.setValue(true); - } - - public LicenseHolder getLicenseHolder() { - return licenseHolder; - } - public ReadOnlyBooleanProperty debugModeEnabledProperty() { return settings.debugMode; } - public boolean isDebugModeEnabled() { + public boolean getDebugModeEnabled() { return debugModeEnabledProperty().get(); } @@ -145,40 +121,16 @@ public class MainWindowController implements FxController { return updateAvailable; } - public boolean isUpdateAvailable() { + public boolean getUpdateAvailable() { return updateAvailable.get(); } - public BooleanProperty hideSupportNotificationClickedProperty() { - return hideSupportNotificationClicked; + public BooleanBinding licenseValidProperty(){ + return licenseHolder.validLicenseProperty(); } - public boolean isHideSupportNotificationClicked() { - return hideSupportNotificationClicked.get(); - } - - public BooleanProperty supportNotificationHiddenProperty() { - return supportNotificationHidden; - } - - public boolean isSupportNotificationHidden() { - return supportNotificationHidden.get(); - } - - public BooleanProperty hideUpdateNotificationClickedProperty() { - return hideUpdateNotificationClicked; - } - - public boolean isHideUpdateNotificationClicked() { - return hideUpdateNotificationClicked.get(); - } - - public BooleanProperty updateNotificationHiddenProperty() { - return updateNotificationHidden; - } - - public boolean isUpdateNotificationHidden() { - return updateNotificationHidden.get(); + public boolean getLicenseValid() { + return licenseHolder.isValidLicense(); } } diff --git a/src/main/resources/fxml/main_window.fxml b/src/main/resources/fxml/main_window.fxml index 29e9ea36a..7190b5f5c 100644 --- a/src/main/resources/fxml/main_window.fxml +++ b/src/main/resources/fxml/main_window.fxml @@ -3,36 +3,31 @@ - - - - + + - - - -