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 @@
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
+
diff --git a/src/main/resources/fxml/notification.fxml b/src/main/resources/fxml/notification.fxml
new file mode 100644
index 000000000..b728b2b93
--- /dev/null
+++ b/src/main/resources/fxml/notification.fxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+