From d0001d01eb4bce61c28a16e138015edda0c75796 Mon Sep 17 00:00:00 2001 From: crschnick Date: Sun, 15 Sep 2024 00:31:24 +0000 Subject: [PATCH] Icon chooser fixes --- .../io/xpipe/app/comp/base/DialogComp.java | 10 ++++-- .../comp/store/StoreIconChoiceDialogComp.java | 35 ++++++++++++++----- .../java/io/xpipe/app/util/Hyperlinks.java | 1 + lang/app/strings/translations_da.properties | 2 ++ lang/app/strings/translations_de.properties | 2 ++ lang/app/strings/translations_en.properties | 4 ++- lang/app/strings/translations_es.properties | 2 ++ lang/app/strings/translations_fr.properties | 2 ++ lang/app/strings/translations_it.properties | 2 ++ lang/app/strings/translations_ja.properties | 2 ++ lang/app/strings/translations_nl.properties | 2 ++ lang/app/strings/translations_pt.properties | 2 ++ lang/app/strings/translations_ru.properties | 2 ++ lang/app/strings/translations_tr.properties | 2 ++ lang/app/strings/translations_zh.properties | 2 ++ 15 files changed, 59 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/comp/base/DialogComp.java b/app/src/main/java/io/xpipe/app/comp/base/DialogComp.java index a5963378f..962355810 100644 --- a/app/src/main/java/io/xpipe/app/comp/base/DialogComp.java +++ b/app/src/main/java/io/xpipe/app/comp/base/DialogComp.java @@ -60,12 +60,16 @@ public abstract class DialogComp extends Comp> { .addAll(customButtons().stream() .map(buttonComp -> buttonComp.createRegion()) .toList()); - var nextButton = new ButtonComp(AppI18n.observable(finishKey()), null, this::finish) + var nextButton = finishButton(); + buttons.getChildren().add(nextButton.createRegion()); + return buttons; + } + + protected Comp finishButton() { + return new ButtonComp(AppI18n.observable(finishKey()), null, this::finish) .apply(struc -> struc.get().setDefaultButton(true)) .styleClass(Styles.ACCENT) .styleClass("next"); - buttons.getChildren().add(nextButton.createRegion()); - return buttons; } protected String finishKey() { diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialogComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialogComp.java index 02b4466f1..b571397c1 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialogComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreIconChoiceDialogComp.java @@ -1,35 +1,41 @@ package io.xpipe.app.comp.store; +import io.xpipe.app.comp.base.ButtonComp; import io.xpipe.app.comp.base.DialogComp; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.window.AppWindowHelper; import io.xpipe.app.fxcomps.Comp; import io.xpipe.app.fxcomps.SimpleComp; import io.xpipe.app.fxcomps.impl.FilterComp; +import io.xpipe.app.fxcomps.impl.HorizontalComp; import io.xpipe.app.resources.SystemIcon; import io.xpipe.app.resources.SystemIcons; import io.xpipe.app.storage.DataStoreEntry; -import javafx.beans.property.Property; +import io.xpipe.app.util.Hyperlinks; +import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.scene.layout.Region; +import javafx.stage.Modality; import javafx.stage.Stage; +import org.kordamp.ikonli.javafx.FontIcon; + +import java.util.List; public class StoreIconChoiceDialogComp extends SimpleComp { public static void show(DataStoreEntry entry) { SystemIcons.load(); - var icon = new SimpleObjectProperty<>(SystemIcons.getForId(entry.getIcon()).orElse(null)); - var window = AppWindowHelper.sideWindow(AppI18n.get("chooseCustomIcon"), stage -> new StoreIconChoiceDialogComp(icon, entry,stage),true,null); + var window = AppWindowHelper.sideWindow(AppI18n.get("chooseCustomIcon"), stage -> new StoreIconChoiceDialogComp(entry,stage),true,null); + window.initModality(Modality.APPLICATION_MODAL); window.show(); } - private final Property selected; + private final ObjectProperty selected = new SimpleObjectProperty<>(); private final DataStoreEntry entry; private final Stage dialogStage; - public StoreIconChoiceDialogComp(Property selected, DataStoreEntry entry, Stage dialogStage) { - this.selected = selected; + public StoreIconChoiceDialogComp(DataStoreEntry entry, Stage dialogStage) { this.entry = entry; this.dialogStage = dialogStage; } @@ -43,11 +49,13 @@ public class StoreIconChoiceDialogComp extends SimpleComp { event.consume(); }); }); + var github = new ButtonComp(null, new FontIcon("mdi2g-github"), () -> { + Hyperlinks.open(Hyperlinks.SELFHST_ICONS); + }).grow(false, true); var dialog = new DialogComp() { @Override protected void finish() { - var icon = selected.getValue().getIconName(); - entry.setIcon(icon); + entry.setIcon(selected.get() != null ? selected.getValue().getIconName() : null); dialogStage.close(); } @@ -60,7 +68,16 @@ public class StoreIconChoiceDialogComp extends SimpleComp { @Override public Comp bottom() { - return filter; + var clear = new ButtonComp(AppI18n.observable("clear"),() -> { + selected.setValue(null); + finish(); + }).grow(false, true); + return new HorizontalComp(List.of(github, filter.hgrow(), clear)).spacing(10); + } + + @Override + protected Comp finishButton() { + return super.finishButton().disable(selected.isNull()); } }; dialog.prefWidth(600); diff --git a/app/src/main/java/io/xpipe/app/util/Hyperlinks.java b/app/src/main/java/io/xpipe/app/util/Hyperlinks.java index d444b1e6c..b99c05844 100644 --- a/app/src/main/java/io/xpipe/app/util/Hyperlinks.java +++ b/app/src/main/java/io/xpipe/app/util/Hyperlinks.java @@ -12,6 +12,7 @@ public class Hyperlinks { public static final String SECURITY = "https://docs.xpipe.io/security"; public static final String TRANSLATE = "https://github.com/xpipe-io/xpipe/tree/master/lang"; public static final String DISCORD = "https://discord.gg/8y89vS8cRb"; + public static final String SELFHST_ICONS = "https://github.com/selfhst/icons"; public static final String SLACK = "https://join.slack.com/t/XPipe/shared_invite/zt-1awjq0t5j-5i4UjNJfNe1VN4b_auu6Cg"; diff --git a/lang/app/strings/translations_da.properties b/lang/app/strings/translations_da.properties index a6450c18a..53506b2e1 100644 --- a/lang/app/strings/translations_da.properties +++ b/lang/app/strings/translations_da.properties @@ -511,3 +511,5 @@ confirmVaultUnencryptHeader=Vil du virkelig deaktivere avanceret vault-krypterin confirmVaultUnencryptContent=Dette fjerner den ekstra kryptering for lagrede data og overskriver eksisterende data. enableHttpApi=Aktiver HTTP API enableHttpApiDescription=Aktiverer API'en, så eksterne programmer kan kalde XPipe-dæmonen for at udføre handlinger med dine administrerede forbindelser. +chooseCustomIcon=Vælg et brugerdefineret ikon +clear=Rydde diff --git a/lang/app/strings/translations_de.properties b/lang/app/strings/translations_de.properties index 060bed085..a95290523 100644 --- a/lang/app/strings/translations_de.properties +++ b/lang/app/strings/translations_de.properties @@ -505,3 +505,5 @@ confirmVaultUnencryptHeader=Willst du die erweiterte Tresorverschlüsselung wirk confirmVaultUnencryptContent=Dadurch wird die zusätzliche Verschlüsselung für gespeicherte Daten entfernt und die vorhandenen Daten werden überschrieben. enableHttpApi=HTTP-API aktivieren enableHttpApiDescription=Aktiviert die API, damit externe Programme den XPipe-Daemon aufrufen können, um Aktionen mit deinen verwalteten Verbindungen durchzuführen. +chooseCustomIcon=Benutzerdefiniertes Symbol auswählen +clear=Löschen diff --git a/lang/app/strings/translations_en.properties b/lang/app/strings/translations_en.properties index ff3eb876f..103410dbf 100644 --- a/lang/app/strings/translations_en.properties +++ b/lang/app/strings/translations_en.properties @@ -509,4 +509,6 @@ confirmVaultUnencryptHeader=Do you really want to disable advanced vault encrypt confirmVaultUnencryptContent=This will remove the additional encryption for stored data and will overwrite existing data. enableHttpApi=Enable HTTP API enableHttpApiDescription=Enables the API, allowing external programs to call the XPipe daemon to perform actions with your managed connections. -chooseCustomIcon=Choose custom icon \ No newline at end of file +chooseCustomIcon=Choose custom icon +#context: verb, to delete +clear=Clear \ No newline at end of file diff --git a/lang/app/strings/translations_es.properties b/lang/app/strings/translations_es.properties index ac80899e1..b9f72f17b 100644 --- a/lang/app/strings/translations_es.properties +++ b/lang/app/strings/translations_es.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=¿Realmente quieres desactivar la encriptación avan confirmVaultUnencryptContent=Esto eliminará la encriptación adicional para los datos almacenados y sobrescribirá los datos existentes. enableHttpApi=Activar la API HTTP enableHttpApiDescription=Habilita la API, permitiendo que programas externos llamen al demonio XPipe para realizar acciones con tus conexiones gestionadas. +chooseCustomIcon=Elegir icono personalizado +clear=Borrar diff --git a/lang/app/strings/translations_fr.properties b/lang/app/strings/translations_fr.properties index 4dd941be7..00ef740c4 100644 --- a/lang/app/strings/translations_fr.properties +++ b/lang/app/strings/translations_fr.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=Veux-tu vraiment désactiver le cryptage avancé de confirmVaultUnencryptContent=Cela supprimera le cryptage supplémentaire pour les données stockées et écrasera les données existantes. enableHttpApi=Activer l'API HTTP enableHttpApiDescription=Active l'API, ce qui permet aux programmes externes d'appeler le démon XPipe pour effectuer des actions avec tes connexions gérées. +chooseCustomIcon=Choisis une icône personnalisée +clear=Effacer diff --git a/lang/app/strings/translations_it.properties b/lang/app/strings/translations_it.properties index 75f65b3a7..326a75c72 100644 --- a/lang/app/strings/translations_it.properties +++ b/lang/app/strings/translations_it.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=Vuoi davvero disabilitare la crittografia avanzata d confirmVaultUnencryptContent=Questo rimuoverà la crittografia aggiuntiva per i dati memorizzati e sovrascriverà i dati esistenti. enableHttpApi=Abilita l'API HTTP enableHttpApiDescription=Abilita l'API, consentendo ai programmi esterni di chiamare il demone XPipe per eseguire azioni con le connessioni gestite. +chooseCustomIcon=Scegli un'icona personalizzata +clear=Cancellare diff --git a/lang/app/strings/translations_ja.properties b/lang/app/strings/translations_ja.properties index 1abbfdb1b..60d7b7bcb 100644 --- a/lang/app/strings/translations_ja.properties +++ b/lang/app/strings/translations_ja.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=本当に高度なデータ保管庫の暗号化を confirmVaultUnencryptContent=これにより、保存データの暗号化が解除され、既存のデータが上書きされる。 enableHttpApi=HTTP APIを有効にする enableHttpApiDescription=APIを有効にし、外部プログラムからXPipeデーモンを呼び出して、管理されている接続に対してアクションを実行できるようにする。 +chooseCustomIcon=カスタムアイコンを選ぶ +clear=消去する diff --git a/lang/app/strings/translations_nl.properties b/lang/app/strings/translations_nl.properties index 8b621fb06..38a9b189b 100644 --- a/lang/app/strings/translations_nl.properties +++ b/lang/app/strings/translations_nl.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=Wil je echt geavanceerde kluisversleuteling uitschak confirmVaultUnencryptContent=Hierdoor wordt de extra codering voor opgeslagen gegevens verwijderd en worden bestaande gegevens overschreven. enableHttpApi=HTTP API inschakelen enableHttpApiDescription=Schakelt de API in, waardoor externe programma's de XPipe daemon kunnen aanroepen om acties uit te voeren met je beheerde verbindingen. +chooseCustomIcon=Aangepast pictogram kiezen +clear=Wis diff --git a/lang/app/strings/translations_pt.properties b/lang/app/strings/translations_pt.properties index eb66613d4..b3c87b392 100644 --- a/lang/app/strings/translations_pt.properties +++ b/lang/app/strings/translations_pt.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=Queres mesmo desativar a encriptação avançada da confirmVaultUnencryptContent=Isto irá remover a encriptação adicional dos dados armazenados e irá substituir os dados existentes. enableHttpApi=Ativar a API HTTP enableHttpApiDescription=Habilita a API, permitindo que programas externos chamem o daemon XPipe para executar ações com suas conexões gerenciadas. +chooseCustomIcon=Escolhe um ícone personalizado +clear=Limpar diff --git a/lang/app/strings/translations_ru.properties b/lang/app/strings/translations_ru.properties index 7fa5f5e0d..a25b2e413 100644 --- a/lang/app/strings/translations_ru.properties +++ b/lang/app/strings/translations_ru.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=Ты действительно хочешь отк confirmVaultUnencryptContent=Это уберет дополнительное шифрование для сохраненных данных и перезапишет существующие. enableHttpApi=Включить HTTP API enableHttpApiDescription=Включает API, позволяя внешним программам вызывать демона XPipe для выполнения действий с твоими управляемыми соединениями. +chooseCustomIcon=Выберите пользовательскую иконку +clear=Очистить diff --git a/lang/app/strings/translations_tr.properties b/lang/app/strings/translations_tr.properties index 7650098c9..bf4b63a1d 100644 --- a/lang/app/strings/translations_tr.properties +++ b/lang/app/strings/translations_tr.properties @@ -493,3 +493,5 @@ confirmVaultUnencryptHeader=Gelişmiş kasa şifrelemesini gerçekten devre dı confirmVaultUnencryptContent=Bu, depolanan veriler için ek şifrelemeyi kaldıracak ve mevcut verilerin üzerine yazacaktır. enableHttpApi=HTTP API'yi Etkinleştir enableHttpApiDescription=API'yi etkinleştirerek harici programların yönetilen bağlantılarınızla eylemler gerçekleştirmek için XPipe arka plan programını çağırmasına izin verir. +chooseCustomIcon=Özel simge seçin +clear=Temiz diff --git a/lang/app/strings/translations_zh.properties b/lang/app/strings/translations_zh.properties index e29e91c6d..114ba704d 100644 --- a/lang/app/strings/translations_zh.properties +++ b/lang/app/strings/translations_zh.properties @@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=您真的想禁用高级保险库加密吗? confirmVaultUnencryptContent=这将取消对存储数据的额外加密,并覆盖现有数据。 enableHttpApi=启用 HTTP API enableHttpApiDescription=启用 API,允许外部程序调用 XPipe 守护进程,对管理连接执行操作。 +chooseCustomIcon=选择自定义图标 +clear=清除