mirror of
https://github.com/cryptomator/cryptomator.git
synced 2026-05-21 12:11:28 +00:00
improved supporter cert ui with cert stemp, donate/sponsors link buttons and remove button with dialog
This commit is contained in:
@@ -17,6 +17,7 @@ public enum FontAwesome5Icon {
|
||||
COGS("\uF085"), //
|
||||
COPY("\uF0C5"), //
|
||||
CROWN("\uF521"), //
|
||||
DONATE("\uF4B9"), //
|
||||
EDIT("\uF044"), //
|
||||
EXCHANGE_ALT("\uF362"), //
|
||||
EXCLAMATION("\uF12A"), //
|
||||
@@ -49,6 +50,7 @@ public enum FontAwesome5Icon {
|
||||
SEARCH("\uF002"), //
|
||||
SHARE("\uF064"), //
|
||||
SPINNER("\uF110"), //
|
||||
SPONSORS("\uF2B5"), //
|
||||
STETHOSCOPE("\uF0f1"), //
|
||||
SYNC("\uF021"), //
|
||||
TIMES("\uF00D"), //
|
||||
|
||||
@@ -31,7 +31,7 @@ public interface PreferencesComponent {
|
||||
Stage stage = window();
|
||||
stage.setScene(scene().get());
|
||||
stage.setMinWidth(420);
|
||||
stage.setMinHeight(300);
|
||||
stage.setMinHeight(400);
|
||||
stage.show();
|
||||
stage.requestFocus();
|
||||
return stage;
|
||||
|
||||
@@ -10,24 +10,36 @@ import javax.inject.Inject;
|
||||
import javafx.application.Application;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.ButtonType;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.scene.control.TextFormatter;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
@PreferencesScoped
|
||||
public class SupporterCertificateController implements FxController {
|
||||
|
||||
private static final String DONATE_URI = "https://cryptomator.org/donate";
|
||||
private static final String SPONSORS_URI = "https://cryptomator.org/sponsors";
|
||||
private static final String SUPPORTER_URI = "https://store.cryptomator.org/desktop";
|
||||
|
||||
private final Application application;
|
||||
private final LicenseHolder licenseHolder;
|
||||
private final Settings settings;
|
||||
public TextArea supporterCertificateField;
|
||||
private final ResourceBundle resourceBundle;
|
||||
|
||||
@FXML
|
||||
private TextArea supporterCertificateField;
|
||||
@FXML
|
||||
private Button trashButton;
|
||||
|
||||
@Inject
|
||||
SupporterCertificateController(Application application, LicenseHolder licenseHolder, Settings settings) {
|
||||
SupporterCertificateController(Application application, LicenseHolder licenseHolder, Settings settings, ResourceBundle resourceBundle) {
|
||||
this.application = application;
|
||||
this.licenseHolder = licenseHolder;
|
||||
this.settings = settings;
|
||||
this.resourceBundle = resourceBundle;
|
||||
}
|
||||
|
||||
@FXML
|
||||
@@ -35,6 +47,20 @@ public class SupporterCertificateController implements FxController {
|
||||
supporterCertificateField.setText(licenseHolder.getLicenseKey().orElse(null));
|
||||
supporterCertificateField.textProperty().addListener(this::registrationKeyChanged);
|
||||
supporterCertificateField.setTextFormatter(new TextFormatter<>(this::removeWhitespaces));
|
||||
|
||||
trashButton.setOnAction(_ -> {
|
||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||
alert.setTitle(resourceBundle.getString("removeLicenseKeyDialog.title"));
|
||||
alert.setHeaderText(resourceBundle.getString("removeLicenseKeyDialog.header"));
|
||||
alert.setContentText(resourceBundle.getString("removeLicenseKeyDialog.content"));
|
||||
|
||||
alert.showAndWait().ifPresent(response -> {
|
||||
if (response == ButtonType.OK) {
|
||||
supporterCertificateField.setText(null);
|
||||
settings.licenseKey.set(null);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private TextFormatter.Change removeWhitespaces(TextFormatter.Change change) {
|
||||
@@ -57,6 +83,16 @@ public class SupporterCertificateController implements FxController {
|
||||
application.getHostServices().showDocument(SUPPORTER_URI);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void showDonate() {
|
||||
application.getHostServices().showDocument(DONATE_URI);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void showSponsors() {
|
||||
application.getHostServices().showDocument(SPONSORS_URI);
|
||||
}
|
||||
|
||||
public LicenseHolder getLicenseHolder() {
|
||||
return licenseHolder;
|
||||
}
|
||||
|
||||
@@ -266,6 +266,26 @@
|
||||
-fx-background-insets: 0, 0 1 0 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Alert-Dialogs *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.dialog-pane {
|
||||
-fx-padding: 12px;
|
||||
}
|
||||
|
||||
.dialog-pane .header-panel {
|
||||
-fx-font-family: 'Open Sans SemiBold';
|
||||
-fx-font-size: 1.2em;
|
||||
}
|
||||
|
||||
.dialog-pane .content {
|
||||
-fx-font-family: 'Open Sans';
|
||||
-fx-padding: 12 0 12 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Vault List *
|
||||
|
||||
@@ -265,6 +265,26 @@
|
||||
-fx-background-insets: 0, 0 1 0 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Alert-Dialogs *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
.dialog-pane {
|
||||
-fx-padding: 12px;
|
||||
}
|
||||
|
||||
.dialog-pane .header-panel {
|
||||
-fx-font-family: 'Open Sans SemiBold';
|
||||
-fx-font-size: 1.2em;
|
||||
}
|
||||
|
||||
.dialog-pane .content {
|
||||
-fx-font-family: 'Open Sans';
|
||||
-fx-padding: 12 0 12 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* *
|
||||
* Vault List *
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.shape.Circle?>
|
||||
<?import javafx.scene.image.ImageView?>
|
||||
<?import javafx.scene.image.Image?>
|
||||
<?import javafx.scene.text.Text?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.layout.Region?>
|
||||
<VBox xmlns:fx="http://javafx.com/fxml"
|
||||
xmlns="http://javafx.com/javafx"
|
||||
fx:controller="org.cryptomator.ui.preferences.SupporterCertificateController"
|
||||
@@ -18,31 +23,49 @@
|
||||
<Insets topRightBottomLeft="24"/>
|
||||
</padding>
|
||||
<children>
|
||||
<StackPane VBox.vgrow="NEVER" prefHeight="60">
|
||||
<HBox spacing="12" alignment="CENTER_LEFT" visible="${controller.licenseHolder.validLicense}">
|
||||
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
|
||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="CROWN" glyphSize="24"/>
|
||||
</StackPane>
|
||||
<StackPane VBox.vgrow="NEVER" prefHeight="60" alignment="TOP_CENTER">
|
||||
<VBox alignment="TOP_CENTER" visible="${controller.licenseHolder.validLicense}">
|
||||
<Text styleClass="label-extra-large" text="Thank you for supporting Cryptomator’s open-source development!" wrappingWidth="400" textAlignment="CENTER"/>
|
||||
<ImageView fitHeight="180">
|
||||
<Image url="@../img/supporter_cert_stemp.png"/>
|
||||
</ImageView>
|
||||
<FormattedLabel format="%preferences.contribute.registeredFor" arg1="${controller.licenseHolder.licenseSubject}" wrapText="true"/>
|
||||
</HBox>
|
||||
|
||||
<HBox spacing="12" alignment="CENTER_LEFT" visible="${!controller.licenseHolder.validLicense}">
|
||||
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
|
||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="HAND_HOLDING_HEART" glyphSize="24"/>
|
||||
</StackPane>
|
||||
<VBox HBox.hgrow="ALWAYS" spacing="6">
|
||||
<Label text="%preferences.contribute.noCertificate" wrapText="true" VBox.vgrow="ALWAYS"/>
|
||||
<Hyperlink text="%preferences.contribute.getCertificate" onAction="#getSupporterCertificate" contentDisplay="LEFT">
|
||||
<Region minHeight="12"/>
|
||||
<HBox alignment="BOTTOM_CENTER" spacing="6">
|
||||
<Button fx:id="trashButton">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK"/>
|
||||
<FontAwesome5IconView glyph="TRASH"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
</VBox>
|
||||
</HBox>
|
||||
</Button>
|
||||
<Button text="Donate" minWidth="100" onAction="#showDonate">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="DONATE"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
<Button text="Sponsors" minWidth="100" onAction="#showSponsors">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="SPONSORS"/>
|
||||
</graphic>
|
||||
</Button>
|
||||
</HBox>
|
||||
</VBox>
|
||||
<VBox spacing="12" visible="${!controller.licenseHolder.validLicense}">
|
||||
<HBox spacing="12" alignment="CENTER_LEFT" >
|
||||
<StackPane alignment="CENTER" HBox.hgrow="NEVER">
|
||||
<Circle styleClass="glyph-icon-primary" radius="24"/>
|
||||
<FontAwesome5IconView styleClass="glyph-icon-white" glyph="HAND_HOLDING_HEART" glyphSize="24"/>
|
||||
</StackPane>
|
||||
<VBox HBox.hgrow="ALWAYS" spacing="6">
|
||||
<Label text="%preferences.contribute.noCertificate" wrapText="true" VBox.vgrow="ALWAYS"/>
|
||||
<Hyperlink text="%preferences.contribute.getCertificate" onAction="#getSupporterCertificate" contentDisplay="LEFT">
|
||||
<graphic>
|
||||
<FontAwesome5IconView glyph="LINK"/>
|
||||
</graphic>
|
||||
</Hyperlink>
|
||||
</VBox>
|
||||
</HBox>
|
||||
<TextArea fx:id="supporterCertificateField" promptText="%preferences.contribute.promptText" wrapText="true" VBox.vgrow="ALWAYS" prefRowCount="6"/>
|
||||
</VBox>
|
||||
</StackPane>
|
||||
|
||||
<TextArea fx:id="supporterCertificateField" promptText="%preferences.contribute.promptText" wrapText="true" VBox.vgrow="ALWAYS" prefRowCount="6"/>
|
||||
</children>
|
||||
</VBox>
|
||||
|
||||
@@ -336,6 +336,11 @@ preferences.contribute.registeredFor=Supporter certificate registered for %s
|
||||
preferences.contribute.noCertificate=Support Cryptomator and receive a supporter certificate. It's like a license key but for awesome people using free software. ;-)
|
||||
preferences.contribute.getCertificate=Don't have one already? Learn how you can obtain it.
|
||||
preferences.contribute.promptText=Paste supporter certificate code here
|
||||
|
||||
### Remove License Key Dialog
|
||||
removeLicenseKeyDialog.title=Confirm Removal
|
||||
removeLicenseKeyDialog.header=Remove Certificate
|
||||
removeLicenseKeyDialog.content=Are you sure you want to remove the certificate?
|
||||
#<-- Add entries for donations and code/translation/documentation contribution -->
|
||||
|
||||
## About
|
||||
|
||||
BIN
src/main/resources/img/supporter_cert_stemp.png
Normal file
BIN
src/main/resources/img/supporter_cert_stemp.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
BIN
src/main/resources/img/supporter_cert_stemp@2x.png
Normal file
BIN
src/main/resources/img/supporter_cert_stemp@2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
Reference in New Issue
Block a user