Explorar o código

displayable event view window

Armin Schrenk hai 2 meses
pai
achega
44fe4a6f8a

+ 1 - 0
src/main/java/org/cryptomator/ui/common/FxmlFile.java

@@ -13,6 +13,7 @@ public enum FxmlFile {
 	CONVERTVAULT_HUBTOPASSWORD_CONVERT("/fxml/convertvault_hubtopassword_convert.fxml"), //
 	CONVERTVAULT_HUBTOPASSWORD_SUCCESS("/fxml/convertvault_hubtopassword_success.fxml"), //
 	ERROR("/fxml/error.fxml"), //
+	EVENT_VIEWER("/fxml/eventviewer.fxml"), //
 	FORGET_PASSWORD("/fxml/forget_password.fxml"), //
 	HEALTH_START("/fxml/health_start.fxml"), //
 	HEALTH_CHECK_LIST("/fxml/health_check_list.fxml"), //

+ 1 - 0
src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java

@@ -7,6 +7,7 @@ public enum FontAwesome5Icon {
 	ANCHOR("\uF13D"), //
 	ARROW_UP("\uF062"), //
 	BAN("\uF05E"), //
+	BELL("\uF0F3"), //
 	BUG("\uF188"), //
 	CARET_DOWN("\uF0D7"), //
 	CARET_RIGHT("\uF0Da"), //

+ 14 - 0
src/main/java/org/cryptomator/ui/eventviewer/EventViewController.java

@@ -0,0 +1,14 @@
+package org.cryptomator.ui.eventviewer;
+
+import org.cryptomator.ui.common.FxController;
+
+import javax.inject.Inject;
+
+@EventViewerScoped
+public class EventViewController implements FxController {
+
+	@Inject
+	public EventViewController() {
+
+	}
+}

+ 33 - 1
src/main/java/org/cryptomator/ui/eventviewer/EventViewerComponent.java

@@ -1,3 +1,35 @@
 package org.cryptomator.ui.eventviewer;
 
-public interface EventViewerComponent {}
+import dagger.BindsInstance;
+import dagger.Lazy;
+import dagger.Subcomponent;
+import org.cryptomator.ui.common.FxmlFile;
+import org.cryptomator.ui.common.FxmlScene;
+
+import javax.inject.Named;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+@EventViewerScoped
+@Subcomponent(modules = {EventViewerModule.class})
+public interface EventViewerComponent {
+
+	@EventViewerWindow
+	Stage window();
+
+	@FxmlScene(FxmlFile.EVENT_VIEWER)
+	Lazy<Scene> scene();
+
+	default void showEventViewerWindow() {
+		Stage stage = window();
+		stage.setScene(scene().get());
+		stage.sizeToScene();
+		stage.show();
+	}
+
+	@Subcomponent.Factory
+	interface Factory {
+
+		EventViewerComponent create(@BindsInstance @Named("owner") Stage owner);
+	}
+}

+ 57 - 0
src/main/java/org/cryptomator/ui/eventviewer/EventViewerModule.java

@@ -0,0 +1,57 @@
+package org.cryptomator.ui.eventviewer;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import dagger.multibindings.IntoMap;
+import org.cryptomator.ui.common.DefaultSceneFactory;
+import org.cryptomator.ui.common.FxController;
+import org.cryptomator.ui.common.FxControllerKey;
+import org.cryptomator.ui.common.FxmlFile;
+import org.cryptomator.ui.common.FxmlLoaderFactory;
+import org.cryptomator.ui.common.FxmlScene;
+import org.cryptomator.ui.common.StageFactory;
+
+import javax.inject.Named;
+import javax.inject.Provider;
+import javafx.scene.Scene;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+import java.util.Map;
+import java.util.ResourceBundle;
+
+@Module
+abstract class EventViewerModule {
+
+	@Provides
+	@EventViewerScoped
+	@EventViewerWindow
+	static Stage provideStage(StageFactory factory, ResourceBundle resourceBundle, @Named("owner") Stage owner) {
+		Stage stage = factory.create();
+		stage.setTitle("TODO EVENTVIEWER");
+		stage.setResizable(true);
+		stage.initModality(Modality.WINDOW_MODAL); //TODO: or not modal at all?
+		stage.initOwner(owner);
+		return stage;
+	}
+
+	@Provides
+	@EventViewerScoped
+	@EventViewerWindow
+	static FxmlLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
+		return new FxmlLoaderFactory(factories, sceneFactory, resourceBundle);
+	}
+
+	@Binds
+	@IntoMap
+	@FxControllerKey(EventViewController.class)
+	abstract FxController bindEventViewController(EventViewController controller);
+
+	@Provides
+	@FxmlScene(FxmlFile.EVENT_VIEWER)
+	@EventViewerScoped
+	static Scene provideEventViewerScene(@EventViewerWindow FxmlLoaderFactory fxmlLoaders) {
+		return fxmlLoaders.createScene(FxmlFile.EVENT_VIEWER);
+	}
+
+}

+ 13 - 0
src/main/java/org/cryptomator/ui/eventviewer/EventViewerScoped.java

@@ -0,0 +1,13 @@
+package org.cryptomator.ui.eventviewer;
+
+import javax.inject.Scope;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Scope
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@interface EventViewerScoped {
+
+}

+ 14 - 0
src/main/java/org/cryptomator/ui/eventviewer/EventViewerWindow.java

@@ -0,0 +1,14 @@
+package org.cryptomator.ui.eventviewer;
+
+import javax.inject.Qualifier;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+@interface EventViewerWindow {
+
+}

+ 3 - 1
src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java

@@ -8,6 +8,7 @@ package org.cryptomator.ui.fxapp;
 import dagger.Module;
 import dagger.Provides;
 import org.cryptomator.ui.error.ErrorComponent;
+import org.cryptomator.ui.eventviewer.EventViewerComponent;
 import org.cryptomator.ui.health.HealthCheckComponent;
 import org.cryptomator.ui.lock.LockComponent;
 import org.cryptomator.ui.mainwindow.MainWindowComponent;
@@ -33,7 +34,8 @@ import java.io.InputStream;
 		ErrorComponent.class, //
 		HealthCheckComponent.class, //
 		UpdateReminderComponent.class, //
-		ShareVaultComponent.class})
+		ShareVaultComponent.class, //
+		EventViewerComponent.class})
 abstract class FxApplicationModule {
 
 	private static Image createImageFromResource(String resourceName) throws IOException {

+ 10 - 0
src/main/java/org/cryptomator/ui/fxapp/FxApplicationWindows.java

@@ -7,6 +7,7 @@ import org.cryptomator.common.vaults.VaultState;
 import org.cryptomator.integrations.tray.TrayIntegrationProvider;
 import org.cryptomator.ui.dialogs.Dialogs;
 import org.cryptomator.ui.error.ErrorComponent;
+import org.cryptomator.ui.eventviewer.EventViewerComponent;
 import org.cryptomator.ui.lock.LockComponent;
 import org.cryptomator.ui.mainwindow.MainWindowComponent;
 import org.cryptomator.ui.preferences.PreferencesComponent;
@@ -51,6 +52,7 @@ public class FxApplicationWindows {
 	private final UpdateReminderComponent.Factory updateReminderWindowFactory;
 	private final LockComponent.Factory lockWorkflowFactory;
 	private final ErrorComponent.Factory errorWindowFactory;
+	private final EventViewerComponent.Factory eventViewWindow;
 	private final ExecutorService executor;
 	private final VaultOptionsComponent.Factory vaultOptionsWindow;
 	private final ShareVaultComponent.Factory shareVaultWindow;
@@ -69,6 +71,7 @@ public class FxApplicationWindows {
 								ErrorComponent.Factory errorWindowFactory, //
 								VaultOptionsComponent.Factory vaultOptionsWindow, //
 								ShareVaultComponent.Factory shareVaultWindow, //
+								EventViewerComponent.Factory eventViewWindow, //
 								ExecutorService executor, //
 								Dialogs dialogs) {
 		this.primaryStage = primaryStage;
@@ -80,6 +83,7 @@ public class FxApplicationWindows {
 		this.updateReminderWindowFactory = updateReminderWindowFactory;
 		this.lockWorkflowFactory = lockWorkflowFactory;
 		this.errorWindowFactory = errorWindowFactory;
+		this.eventViewWindow = eventViewWindow;
 		this.executor = executor;
 		this.vaultOptionsWindow = vaultOptionsWindow;
 		this.shareVaultWindow = shareVaultWindow;
@@ -200,4 +204,10 @@ public class FxApplicationWindows {
 		}
 	}
 
+	public CompletionStage<Void> showEventViewer(@Nullable Stage owner) {
+		return CompletableFuture.supplyAsync(() -> {
+			eventViewWindow.create(owner).showEventViewerWindow();
+			return null;
+		}, Platform::runLater);
+	}
 }

+ 4 - 0
src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java

@@ -264,6 +264,10 @@ public class VaultListController implements FxController {
 		appWindows.showPreferencesWindow(SelectedPreferencesTab.ANY);
 	}
 
+	@FXML
+	public void showEventViewer() {
+		appWindows.showEventViewer(mainWindow);
+	}
 	// Getter and Setter
 
 	public BooleanBinding emptyVaultListProperty() {

+ 32 - 0
src/main/resources/fxml/eventviewer.fxml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.Group?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.StackPane?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.shape.Circle?>
+<HBox xmlns:fx="http://javafx.com/fxml"
+	  xmlns="http://javafx.com/javafx"
+	  fx:controller="org.cryptomator.ui.eventviewer.EventViewController"
+	  minWidth="450"
+	  minHeight="450"
+	  prefWidth="450"
+	  prefHeight="450"
+	  spacing="12">
+	<padding>
+		<Insets topRightBottomLeft="24"/>
+	</padding>
+	<Group>
+		<StackPane>
+			<padding>
+				<Insets topRightBottomLeft="6"/>
+			</padding>
+			<Circle styleClass="glyph-icon-primary" radius="24"/>
+			<FontAwesome5IconView styleClass="glyph-icon-white" glyph="BELL" glyphSize="24"/>
+		</StackPane>
+	</Group>
+	<VBox HBox.hgrow="ALWAYS">
+	</VBox>
+</HBox>

+ 5 - 0
src/main/resources/fxml/vault_list.fxml

@@ -42,6 +42,11 @@
 				</graphic>
 			</Button>
 			<Region HBox.hgrow="ALWAYS"/>
+			<Button onMouseClicked="#showEventViewer" styleClass="button-right" alignment="CENTER" minWidth="20" contentDisplay="GRAPHIC_ONLY">
+				<graphic>
+					<FontAwesome5IconView glyph="BELL" glyphSize="16"/>
+				</graphic>
+			</Button>
 			<Button onMouseClicked="#showPreferences" styleClass="button-right" alignment="CENTER" minWidth="20" contentDisplay="GRAPHIC_ONLY">
 				<graphic>
 					<FontAwesome5IconView glyph="COG" glyphSize="16"/>