瀏覽代碼

First Dummy window to show statistics

Martin Beyer 5 年之前
父節點
當前提交
f61e955945

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

@@ -28,6 +28,7 @@ public enum FxmlFile {
 	UNLOCK_INVALID_MOUNT_POINT("/fxml/unlock_invalid_mount_point.fxml"), //
 	UNLOCK_SUCCESS("/fxml/unlock_success.fxml"), //
 	VAULT_OPTIONS("/fxml/vault_options.fxml"), //
+	VAULT_STATISTICS("/fxml/vault_statistics.fxml"), //
 	WRONGFILEALERT("/fxml/wrongfilealert.fxml");
 
 	private final String ressourcePathString;

+ 2 - 5
main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java

@@ -7,7 +7,6 @@ import dagger.multibindings.IntoMap;
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.SimpleObjectProperty;
 import javafx.scene.Scene;
-import javafx.scene.image.Image;
 import javafx.stage.Stage;
 import javafx.stage.StageStyle;
 import org.cryptomator.common.vaults.Vault;
@@ -18,19 +17,17 @@ import org.cryptomator.ui.common.FxControllerKey;
 import org.cryptomator.ui.common.FxmlFile;
 import org.cryptomator.ui.common.FxmlScene;
 import org.cryptomator.ui.common.StageFactory;
-import org.cryptomator.ui.fxapp.FxApplicationScoped;
 import org.cryptomator.ui.migration.MigrationComponent;
 import org.cryptomator.ui.removevault.RemoveVaultComponent;
 import org.cryptomator.ui.vaultoptions.VaultOptionsComponent;
+import org.cryptomator.ui.vaultstatistics.VaultStatisticsComponent;
 import org.cryptomator.ui.wrongfilealert.WrongFileAlertComponent;
 
-import javax.inject.Named;
 import javax.inject.Provider;
-import java.util.List;
 import java.util.Map;
 import java.util.ResourceBundle;
 
-@Module(subcomponents = {AddVaultWizardComponent.class, MigrationComponent.class, RemoveVaultComponent.class, VaultOptionsComponent.class, WrongFileAlertComponent.class})
+@Module(subcomponents = {AddVaultWizardComponent.class, MigrationComponent.class, RemoveVaultComponent.class, VaultOptionsComponent.class, VaultStatisticsComponent.class, WrongFileAlertComponent.class})
 abstract class MainWindowModule {
 
 	@Provides

+ 9 - 1
main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailUnlockedController.java

@@ -6,6 +6,7 @@ import javafx.fxml.FXML;
 import org.cryptomator.common.vaults.Vault;
 import org.cryptomator.ui.common.FxController;
 import org.cryptomator.ui.common.VaultService;
+import org.cryptomator.ui.vaultstatistics.VaultStatisticsComponent;
 
 import javax.inject.Inject;
 
@@ -14,11 +15,13 @@ public class VaultDetailUnlockedController implements FxController {
 
 	private final ReadOnlyObjectProperty<Vault> vault;
 	private final VaultService vaultService;
+	private final VaultStatisticsComponent.Builder vaultStatisticsWindow;
 
 	@Inject
-	public VaultDetailUnlockedController(ObjectProperty<Vault> vault, VaultService vaultService) {
+	public VaultDetailUnlockedController(ObjectProperty<Vault> vault, VaultService vaultService, VaultStatisticsComponent.Builder vaultStatisticsWindow) {
 		this.vault = vault;
 		this.vaultService = vaultService;
+		this.vaultStatisticsWindow = vaultStatisticsWindow;
 	}
 
 	@FXML
@@ -32,6 +35,11 @@ public class VaultDetailUnlockedController implements FxController {
 		// TODO count lock attempts, and allow forced lock
 	}
 
+	@FXML
+	public void showVaultStatistics() {
+		vaultStatisticsWindow.vault(vault.get()).build().showVaultStatisticsWindow();
+	}
+
 	/* Getter/Setter */
 
 	public ReadOnlyObjectProperty<Vault> vaultProperty() {

+ 38 - 0
main/ui/src/main/java/org/cryptomator/ui/vaultstatistics/VaultStatisticsComponent.java

@@ -0,0 +1,38 @@
+package org.cryptomator.ui.vaultstatistics;
+
+import dagger.BindsInstance;
+import dagger.Lazy;
+import dagger.Subcomponent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+import org.cryptomator.common.vaults.Vault;
+import org.cryptomator.ui.common.FxmlFile;
+import org.cryptomator.ui.common.FxmlScene;
+
+@VaultStatisticsScoped
+@Subcomponent(modules = {VaultStatisticsModule.class})
+public interface VaultStatisticsComponent {
+
+	@VaultStatisticsWindow
+	Stage window();
+
+	@FxmlScene(FxmlFile.VAULT_STATISTICS)
+	Lazy<Scene> scene();
+
+	default void showVaultStatisticsWindow() {
+		Stage stage = window();
+		stage.setScene(scene().get());
+		stage.sizeToScene();
+		stage.show();
+	}
+
+	@Subcomponent.Builder
+	interface Builder {
+
+		@BindsInstance
+		Builder vault(@VaultStatisticsWindow Vault vault);
+
+		VaultStatisticsComponent build();
+	}
+
+}

+ 20 - 0
main/ui/src/main/java/org/cryptomator/ui/vaultstatistics/VaultStatisticsController.java

@@ -0,0 +1,20 @@
+package org.cryptomator.ui.vaultstatistics;
+
+import javafx.stage.Stage;
+import org.cryptomator.common.vaults.Vault;
+import org.cryptomator.ui.common.FxController;
+
+import javax.inject.Inject;
+
+@VaultStatisticsScoped
+public class VaultStatisticsController implements FxController {
+
+	private final Stage window;
+	private final Vault vault;
+
+	@Inject
+	public VaultStatisticsController(@VaultStatisticsWindow Stage window, @VaultStatisticsWindow Vault vault) {
+		this.window = window;
+		this.vault = vault;
+	}
+}

+ 58 - 0
main/ui/src/main/java/org/cryptomator/ui/vaultstatistics/VaultStatisticsModule.java

@@ -0,0 +1,58 @@
+package org.cryptomator.ui.vaultstatistics;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import dagger.multibindings.IntoMap;
+import javafx.scene.Scene;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+import org.cryptomator.ui.common.DefaultSceneFactory;
+import org.cryptomator.ui.common.FXMLLoaderFactory;
+import org.cryptomator.ui.common.FxController;
+import org.cryptomator.ui.common.FxControllerKey;
+import org.cryptomator.ui.common.FxmlFile;
+import org.cryptomator.ui.common.FxmlScene;
+import org.cryptomator.ui.common.StageFactory;
+import org.cryptomator.ui.mainwindow.MainWindow;
+
+import javax.inject.Provider;
+import java.util.Map;
+import java.util.ResourceBundle;
+
+@Module
+abstract class VaultStatisticsModule {
+
+	@Provides
+	@VaultStatisticsWindow
+	@VaultStatisticsScoped
+	static FXMLLoaderFactory provideFxmlLoaderFactory(Map<Class<? extends FxController>, Provider<FxController>> factories, DefaultSceneFactory sceneFactory, ResourceBundle resourceBundle) {
+		return new FXMLLoaderFactory(factories, sceneFactory, resourceBundle);
+	}
+
+	@Provides
+	@VaultStatisticsWindow
+	@VaultStatisticsScoped
+	static Stage provideStage(StageFactory factory, @MainWindow Stage owner, ResourceBundle resourceBundle) {
+		Stage stage = factory.create();
+		stage.setTitle(resourceBundle.getString("removeVault.title"));
+		stage.setResizable(false);
+		stage.initModality(Modality.APPLICATION_MODAL);
+		stage.initOwner(owner);
+		return stage;
+	}
+
+	@Provides
+	@FxmlScene(FxmlFile.VAULT_STATISTICS)
+	@VaultStatisticsScoped
+	static Scene provideVaultStatisticsScene(@VaultStatisticsWindow FXMLLoaderFactory fxmlLoaders) {
+		return fxmlLoaders.createScene("/fxml/vault_statistics.fxml");
+	}
+
+	// ------------------
+
+	@Binds
+	@IntoMap
+	@FxControllerKey(VaultStatisticsController.class)
+	abstract FxController bindVaultStatisticsController(VaultStatisticsController controller);
+}

+ 13 - 0
main/ui/src/main/java/org/cryptomator/ui/vaultstatistics/VaultStatisticsScoped.java

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

+ 14 - 0
main/ui/src/main/java/org/cryptomator/ui/vaultstatistics/VaultStatisticsWindow.java

@@ -0,0 +1,14 @@
+package org.cryptomator.ui.vaultstatistics;
+
+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 VaultStatisticsWindow {
+
+}

+ 1 - 0
main/ui/src/main/resources/fxml/vault_detail_unlocked.fxml

@@ -45,4 +45,5 @@
 		<ThrougputLabel styleClass="label-small,label-muted" alignment="CENTER_RIGHT" minWidth="60" idleFormat="%main.vaultDetail.throughput.idle" kibsFormat="%main.vaultDetail.throughput.kbps"
 						mibsFormat="%main.vaultDetail.throughput.mbps" bytesPerSecond="${controller.vault.stats.bytesPerSecondWritten}"/>
 	</HBox>
+	<Button styleClass="button-large" text="View statistics string" minWidth="120" onAction="#showVaultStatistics"/>
 </VBox>

+ 23 - 0
main/ui/src/main/resources/fxml/vault_statistics.fxml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+<?import org.cryptomator.ui.controls.ThrougputLabel?>
+<VBox xmlns="http://javafx.com/javafx"
+	  xmlns:fx="http://javafx.com/fxml"
+	  fx:controller="org.cryptomator.ui.vaultstatistics.VaultStatisticsController"
+	  prefHeight="400.0" prefWidth="600.0">
+
+
+	<HBox alignment="CENTER_RIGHT" spacing="6">
+		<Label styleClass="label-small,label-muted" text="%main.vaultDetail.bytesPerSecondRead"/>
+		<ThrougputLabel styleClass="label-small,label-muted" alignment="CENTER_RIGHT" minWidth="60" idleFormat="%main.vaultDetail.throughput.idle" kibsFormat="%main.vaultDetail.throughput.kbps"
+						mibsFormat="%main.vaultDetail.throughput.mbps" bytesPerSecond="${controller.vault.stats.bytesPerSecondRead}"/>
+	</HBox>
+	<HBox alignment="CENTER_RIGHT" spacing="6">
+		<Label styleClass="label-small,label-muted" text="%main.vaultDetail.bytesPerSecondWritten"/>
+		<ThrougputLabel styleClass="label-small,label-muted" alignment="CENTER_RIGHT" minWidth="60" idleFormat="%main.vaultDetail.throughput.idle" kibsFormat="%main.vaultDetail.throughput.kbps"
+						mibsFormat="%main.vaultDetail.throughput.mbps" bytesPerSecond="${controller.vault.stats.bytesPerSecondWritten}"/>
+	</HBox>
+</VBox>