diff --git a/app/src/main/java/io/xpipe/app/browser/BookmarkList.java b/app/src/main/java/io/xpipe/app/browser/BookmarkList.java index 480aa1475..063867482 100644 --- a/app/src/main/java/io/xpipe/app/browser/BookmarkList.java +++ b/app/src/main/java/io/xpipe/app/browser/BookmarkList.java @@ -33,10 +33,15 @@ final class BookmarkList extends SimpleComp { @Override protected Region createSimple() { - var observableList = BindingsHelper.filteredContentBinding(StoreEntryFlatMiniSectionComp.ALL, e -> e.getEntry().getStore() instanceof ShellStore); + var observableList = BindingsHelper.filteredContentBinding(StoreEntryFlatMiniSectionComp.ALL, e -> e.getEntry().getState().isUsable()); var list = new ListBoxViewComp<>(observableList, observableList, e -> { return Comp.of(() -> { var button = new Button(null, e.createRegion()); + + if (!(e.getEntry().getStore() instanceof ShellStore)) { + button.setDisable(true); + } + button.setOnAction(event -> { var fileSystem = ((ShellStore) e.getEntry().getStore()); model.openFileSystem(fileSystem); diff --git a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java index 0fdc5a8cd..19dc8353a 100644 --- a/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/storage/store/StoreEntryComp.java @@ -1,7 +1,6 @@ package io.xpipe.app.comp.storage.store; import com.jfoenix.controls.JFXButton; -import io.xpipe.app.comp.base.LazyTextFieldComp; import io.xpipe.app.comp.base.LoadingOverlayComp; import io.xpipe.app.core.AppFont; import io.xpipe.app.core.AppI18n; @@ -11,10 +10,7 @@ import io.xpipe.app.fxcomps.SimpleComp; import io.xpipe.app.fxcomps.SimpleCompStructure; import io.xpipe.app.fxcomps.augment.GrowAugment; import io.xpipe.app.fxcomps.augment.PopupMenuAugment; -import io.xpipe.app.fxcomps.impl.FancyTooltipAugment; -import io.xpipe.app.fxcomps.impl.HorizontalComp; -import io.xpipe.app.fxcomps.impl.IconButtonComp; -import io.xpipe.app.fxcomps.impl.PrettyImageComp; +import io.xpipe.app.fxcomps.impl.*; import io.xpipe.app.fxcomps.util.PlatformThread; import io.xpipe.app.fxcomps.util.SimpleChangeListener; import io.xpipe.app.prefs.AppPrefs; @@ -26,12 +22,10 @@ import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleStringProperty; import javafx.css.PseudoClass; import javafx.geometry.HPos; +import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; -import javafx.scene.control.ContextMenu; -import javafx.scene.control.Label; -import javafx.scene.control.MenuItem; -import javafx.scene.control.SeparatorMenuItem; +import javafx.scene.control.*; import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; import javafx.scene.layout.Region; @@ -89,9 +83,10 @@ public class StoreEntryComp extends SimpleComp { }); } - private LazyTextFieldComp createName() { - var name = new LazyTextFieldComp(entry.nameProperty()); - name.apply(struc -> struc.getTextField().editableProperty().bind(entry.getRenamable())); + private Comp createName() { + var name = new LabelComp(entry.nameProperty()) + .apply(struc -> struc.get().setTextOverrun(OverrunStyle.CENTER_ELLIPSIS)) + .apply(struc -> struc.get().setPadding(new Insets(5, 5, 5, 0))); name.apply(s -> AppFont.header(s.get())); return name; } diff --git a/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java b/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java index 3c7ed8248..6e869813c 100644 --- a/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java +++ b/app/src/main/java/io/xpipe/app/fxcomps/impl/DataStoreChoiceComp.java @@ -99,15 +99,14 @@ public class DataStoreChoiceComp extends SimpleComp { } var s = e.getEntry().getStore(); - if (!storeClass.isAssignableFrom(s.getClass()) || !applicableCheck.test((T) s)) { - continue; - } - if (!(mode == Mode.ENVIRONMENT) && s instanceof LeafShellStore) { continue; } - comboBox.add((T) e.getEntry().getStore()); + var node = comboBox.add((T) e.getEntry().getStore()); + if (!storeClass.isAssignableFrom(s.getClass()) || !applicableCheck.test((T) s)) { + comboBox.disable(node); + } } ComboBox cb = comboBox.build(); diff --git a/app/src/main/java/io/xpipe/app/util/CustomComboBoxBuilder.java b/app/src/main/java/io/xpipe/app/util/CustomComboBoxBuilder.java index 7cad911fc..e0acc4041 100644 --- a/app/src/main/java/io/xpipe/app/util/CustomComboBoxBuilder.java +++ b/app/src/main/java/io/xpipe/app/util/CustomComboBoxBuilder.java @@ -56,6 +56,10 @@ public class CustomComboBoxBuilder { actionsMap.put(node, run); } + public void disable(Node node) { + disabledNodes.add(node); + } + public void setUnknownNode(Function node) { unknownNode = node; } diff --git a/app/src/main/resources/io/xpipe/app/resources/style/browser.css b/app/src/main/resources/io/xpipe/app/resources/style/browser.css index a5808189a..7d82d99e2 100644 --- a/app/src/main/resources/io/xpipe/app/resources/style/browser.css +++ b/app/src/main/resources/io/xpipe/app/resources/style/browser.css @@ -40,6 +40,14 @@ -fx-background-color: -color-success-muted; } +.bookmark-list .button:disabled { + -fx-opacity: 1.0; +} + +.bookmark-list .button:disabled * { + -fx-opacity: 0.9; +} + .browser .bookmark-list { -fx-border-width: 0 0 1 1; } diff --git a/dist/changelogs/0.5.40.md b/dist/changelogs/0.5.40.md index 5bd1ccbcd..8419771cd 100644 --- a/dist/changelogs/0.5.40.md +++ b/dist/changelogs/0.5.40.md @@ -1,4 +1,5 @@ ## Changes in 0.5.40 - Add status bar to file browser that shows selected entries and clipboard +- Add copy and paste context menu entries to file browser - Add native ARM builds for macOS - Improve Kubernetes support and configuration options \ No newline at end of file diff --git a/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties b/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties index b53947cfa..cb7b647f8 100644 --- a/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties +++ b/ext/base/src/main/resources/io/xpipe/ext/base/resources/lang/translations_en.properties @@ -19,10 +19,6 @@ commandLineWrite=Write wslHost=WSL Host timeout=Timeout additionalOptions=Additional Options -wsl.displayName=Windows Subsystem for Linux -wsl.displayDescription=Connect to a WSL machine running on Windows -docker.displayName=Docker Container -docker.displayDescription=Connect to a docker container rawFileOutput=Raw File Output dataSourceOutput=Data Source Output type=Type