Icon chooser fixes

This commit is contained in:
crschnick
2024-09-15 00:31:24 +00:00
parent ec3ca06057
commit d0001d01eb
15 changed files with 59 additions and 13 deletions
@@ -60,12 +60,16 @@ public abstract class DialogComp extends Comp<CompStructure<Region>> {
.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() {
@@ -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<SystemIcon> selected;
private final ObjectProperty<SystemIcon> selected = new SimpleObjectProperty<>();
private final DataStoreEntry entry;
private final Stage dialogStage;
public StoreIconChoiceDialogComp(Property<SystemIcon> 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);
@@ -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";
@@ -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
@@ -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
+3 -1
View File
@@ -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
chooseCustomIcon=Choose custom icon
#context: verb, to delete
clear=Clear
@@ -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
@@ -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
@@ -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
@@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=本当に高度なデータ保管庫の暗号化を
confirmVaultUnencryptContent=これにより、保存データの暗号化が解除され、既存のデータが上書きされる。
enableHttpApi=HTTP APIを有効にする
enableHttpApiDescription=APIを有効にし、外部プログラムからXPipeデーモンを呼び出して、管理されている接続に対してアクションを実行できるようにする。
chooseCustomIcon=カスタムアイコンを選ぶ
clear=消去する
@@ -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
@@ -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
@@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=Ты действительно хочешь отк
confirmVaultUnencryptContent=Это уберет дополнительное шифрование для сохраненных данных и перезапишет существующие.
enableHttpApi=Включить HTTP API
enableHttpApiDescription=Включает API, позволяя внешним программам вызывать демона XPipe для выполнения действий с твоими управляемыми соединениями.
chooseCustomIcon=Выберите пользовательскую иконку
clear=Очистить
@@ -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
@@ -492,3 +492,5 @@ confirmVaultUnencryptHeader=您真的想禁用高级保险库加密吗?
confirmVaultUnencryptContent=这将取消对存储数据的额外加密,并覆盖现有数据。
enableHttpApi=启用 HTTP API
enableHttpApiDescription=启用 API,允许外部程序调用 XPipe 守护进程,对管理连接执行操作。
chooseCustomIcon=选择自定义图标
clear=清除