From b4333e8e10dde49d3d6ec00d5e0924ed65c7ad56 Mon Sep 17 00:00:00 2001 From: Arthur Poiret Date: Mon, 15 Jun 2026 22:17:46 +0200 Subject: [PATCH 1/3] chore: refactor plugin and project info view --- .../controllers/ComponentInfoController.java | 11 +- .../controllers/PluginInfoController.java | 1 - .../fxml/plugins/ComponentInfoView.fxml | 113 ++++++++------- .../fxml/plugins/PluginInfoView.fxml | 132 ++++++++++-------- .../fxml/projects/ProjectInfoView.fxml | 109 ++++++++------- owlplug-client/src/main/resources/owlplug.css | 20 +++ 6 files changed, 217 insertions(+), 169 deletions(-) diff --git a/owlplug-client/src/main/java/com/owlplug/plugin/controllers/ComponentInfoController.java b/owlplug-client/src/main/java/com/owlplug/plugin/controllers/ComponentInfoController.java index 244768ac..4d778f94 100644 --- a/owlplug-client/src/main/java/com/owlplug/plugin/controllers/ComponentInfoController.java +++ b/owlplug-client/src/main/java/com/owlplug/plugin/controllers/ComponentInfoController.java @@ -23,6 +23,7 @@ import com.owlplug.plugin.model.Plugin; import com.owlplug.plugin.model.PluginComponent; import com.owlplug.plugin.services.PluginService; +import com.owlplug.plugin.ui.PluginFormatBadgeView; import com.owlplug.plugin.ui.PluginStateView; import java.util.ArrayList; import java.util.Optional; @@ -32,12 +33,12 @@ import javafx.scene.control.Label; import javafx.scene.effect.ColorAdjust; import javafx.scene.image.Image; -import javafx.scene.image.ImageView; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundImage; import javafx.scene.layout.BackgroundPosition; import javafx.scene.layout.BackgroundRepeat; import javafx.scene.layout.BackgroundSize; +import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -53,9 +54,7 @@ public class ComponentInfoController extends BaseController { @FXML private Pane pluginScreenshotPane; @FXML - private ImageView pluginFormatIcon; - @FXML - private Label pluginFormatLabel; + private HBox pluginFormatBadgeContainer; @FXML private Label pluginTitleLabel; @FXML @@ -88,8 +87,8 @@ public void initialize() { public void refresh() { PluginComponent component = componentProperty.get(); - pluginFormatIcon.setImage(this.getApplicationDefaults().getPluginFormatIcon(component.getPlugin().getFormat())); - pluginFormatLabel.setText(component.getPlugin().getFormat().getText() + " Plugin Component"); + pluginFormatBadgeContainer.getChildren().setAll( + new PluginFormatBadgeView(component.getPlugin().getFormat(), this.getApplicationDefaults())); pluginTitleLabel.setText(component.getName()); pluginNameLabel.setText(Optional.ofNullable(component.getDescriptiveName()).orElse(component.getName())); pluginVersionLabel.setText(Optional.ofNullable(component.getVersion()).orElse("Unknown")); diff --git a/owlplug-client/src/main/java/com/owlplug/plugin/controllers/PluginInfoController.java b/owlplug-client/src/main/java/com/owlplug/plugin/controllers/PluginInfoController.java index 5189ae10..b6563e66 100644 --- a/owlplug-client/src/main/java/com/owlplug/plugin/controllers/PluginInfoController.java +++ b/owlplug-client/src/main/java/com/owlplug/plugin/controllers/PluginInfoController.java @@ -129,7 +129,6 @@ public void initialize() { pluginProperty.addListener(e -> refresh()); pluginScreenshotPane.setEffect(new ColorAdjust(0, 0, -0.6, 0)); - openDirectoryButton.setGraphic(new ImageView(this.getApplicationDefaults().directoryImage)); openDirectoryButton.setText(""); openDirectoryButton.setOnAction(e -> { File pluginFile = new File(pluginPathLabel.getText()); diff --git a/owlplug-client/src/main/resources/fxml/plugins/ComponentInfoView.fxml b/owlplug-client/src/main/resources/fxml/plugins/ComponentInfoView.fxml index 2c050178..1bd67c69 100644 --- a/owlplug-client/src/main/resources/fxml/plugins/ComponentInfoView.fxml +++ b/owlplug-client/src/main/resources/fxml/plugins/ComponentInfoView.fxml @@ -3,20 +3,15 @@ - - - - - + + @@ -35,68 +32,68 @@ + + - + + + - - + + - - - - - - - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/owlplug-client/src/main/resources/fxml/plugins/PluginInfoView.fxml b/owlplug-client/src/main/resources/fxml/plugins/PluginInfoView.fxml index 7d23aae8..1d845b63 100644 --- a/owlplug-client/src/main/resources/fxml/plugins/PluginInfoView.fxml +++ b/owlplug-client/src/main/resources/fxml/plugins/PluginInfoView.fxml @@ -2,18 +2,16 @@ - + - - @@ -26,6 +24,8 @@ + + @@ -39,17 +39,19 @@ + + - + + + - - + + - - - - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + minWidth="-Infinity" prefHeight="100.0" prefWidth="440.0" VBox.vgrow="SOMETIMES" + styleClass="dense"> + + + + - + - + \ No newline at end of file diff --git a/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml b/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml index f7ad0b92..1155fb4e 100644 --- a/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml +++ b/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml @@ -5,7 +5,6 @@ - + + @@ -33,6 +34,8 @@ + + - + + + - - + + - - - - - - - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -109,4 +120,4 @@ - + \ No newline at end of file diff --git a/owlplug-client/src/main/resources/owlplug.css b/owlplug-client/src/main/resources/owlplug.css index 7d6e13bd..0e407f49 100644 --- a/owlplug-client/src/main/resources/owlplug.css +++ b/owlplug-client/src/main/resources/owlplug.css @@ -406,6 +406,26 @@ ProgressIndicator { -fx-text-fill: disabled-color; } +/* Plugin info view */ + +.info-field-label { + -fx-font-size: 10px; + -fx-font-weight: bold; + -fx-text-fill: disabled-color; +} + +.info-field-value { + -fx-font-size: 13px; + -fx-text-fill: text-emphase-color; +} + +.plugin-action-bar { + -fx-background-color: -color-bg-subtle; + -fx-border-width: 0 0 1 0; + -fx-border-color: -color-border-default; + -fx-padding: 8 16 8 16; +} + .package-bloc-title { -fx-background-color: rgba(0, 0, 0, 0.85); -fx-padding: 10, 10, 10, 10; From 30cd2681c26d47bc283aaa89fdbb9e4980ce464a Mon Sep 17 00:00:00 2001 From: Arthur Poiret Date: Fri, 19 Jun 2026 23:07:18 +0200 Subject: [PATCH 2/3] chore: update project info view display and table --- .../core/components/ApplicationDefaults.java | 18 +++++- .../controllers/ProjectInfoController.java | 57 ++++++++++++++---- .../src/main/resources/fxml/MainView.fxml | 2 +- .../fxml/projects/ProjectInfoView.fxml | 17 +++--- .../src/main/resources/icons/link-grey-16.png | Bin 521 -> 0 bytes .../resources/media/ableton-placeholder.png | Bin 0 -> 19301 bytes .../resources/media/reaper-placeholder.png | Bin 0 -> 68010 bytes .../resources/media/studioone-placeholder.png | Bin 0 -> 113597 bytes owlplug-client/src/main/resources/owlplug.css | 20 +++--- 9 files changed, 78 insertions(+), 36 deletions(-) delete mode 100644 owlplug-client/src/main/resources/icons/link-grey-16.png create mode 100644 owlplug-client/src/main/resources/media/ableton-placeholder.png create mode 100644 owlplug-client/src/main/resources/media/reaper-placeholder.png create mode 100644 owlplug-client/src/main/resources/media/studioone-placeholder.png diff --git a/owlplug-client/src/main/java/com/owlplug/core/components/ApplicationDefaults.java b/owlplug-client/src/main/java/com/owlplug/core/components/ApplicationDefaults.java index 4047aa7f..aa05ad07 100644 --- a/owlplug-client/src/main/java/com/owlplug/core/components/ApplicationDefaults.java +++ b/owlplug-client/src/main/java/com/owlplug/core/components/ApplicationDefaults.java @@ -78,16 +78,20 @@ public class ApplicationDefaults { public final Image openAudioLogoSmall = new Image(ApplicationDefaults.class.getResourceAsStream("/media/open-audio-16.png")); public final Image abletonLogoImage = new Image(getClass().getResourceAsStream("/icons/ableton-white-16.png")); public final Image reaperLogoImage = new Image(getClass().getResourceAsStream("/icons/reaper-white-16.png")); - public final Image studioOneLogoImage = new Image(getClass().getResourceAsStream("/icons/studioone-white-16.png")); public final Image errorIconImage = new Image( getClass().getResourceAsStream("/icons/error-red-16.png")); - public final Image linkIconImage = new Image( - getClass().getResourceAsStream("/icons/link-grey-16.png")); public final Image pluginPlaceholderImage = new Image( getClass().getResourceAsStream("/media/plugin-placeholder.png")); + public final Image abletonPlaceholderImage = new Image( + getClass().getResourceAsStream("/media/ableton-placeholder.png")); + public final Image reaperPlaceholderImage = new Image( + getClass().getResourceAsStream("/media/reaper-placeholder.png")); + public final Image studioOnePlaceholderImage = new Image( + getClass().getResourceAsStream("/media/studioone-placeholder.png")); + // CHECKSTYLE:ON public static final String VST_DIRECTORY_KEY = "VST_DIRECTORY"; @@ -201,6 +205,14 @@ public String getDefaultPluginPath(PluginFormat format) { return "/path/to/audio/plugins"; } + public Image getDawApplicationImage(DawApplication application) { + return switch (application) { + case ABLETON -> abletonPlaceholderImage; + case REAPER -> reaperPlaceholderImage; + case STUDIO_ONE -> studioOnePlaceholderImage; + }; + } + public String getVersion() { return env.getProperty("owlplug.version"); diff --git a/owlplug-client/src/main/java/com/owlplug/project/controllers/ProjectInfoController.java b/owlplug-client/src/main/java/com/owlplug/project/controllers/ProjectInfoController.java index afc02099..8d56349a 100644 --- a/owlplug-client/src/main/java/com/owlplug/project/controllers/ProjectInfoController.java +++ b/owlplug-client/src/main/java/com/owlplug/project/controllers/ProjectInfoController.java @@ -41,9 +41,17 @@ import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.effect.ColorAdjust; import javafx.scene.image.ImageView; +import javafx.scene.layout.Background; +import javafx.scene.layout.BackgroundImage; +import javafx.scene.layout.BackgroundPosition; +import javafx.scene.layout.BackgroundRepeat; +import javafx.scene.layout.BackgroundSize; import javafx.scene.layout.HBox; +import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; +import org.kordamp.ikonli.javafx.FontIcon; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Controller; @@ -60,6 +68,8 @@ public class ProjectInfoController extends BaseController { @FXML private VBox projectInfoPane; @FXML + private Pane projectScreenshotPane; + @FXML private Label projectNameLabel; @FXML private ImageView projectAppImageView; @@ -97,6 +107,8 @@ public class ProjectInfoController extends BaseController { @FXML public void initialize() { + + projectScreenshotPane.setEffect(new ColorAdjust(0, 0, -0.8, 0)); projectProperty.addListener(e -> refresh()); openDirectoryButton.setOnAction(e -> { File projectFile = new File(projectPathLabel.getText()); @@ -114,6 +126,7 @@ public void initialize() { // Set invisible by default if no project is selected. projectInfoPane.setVisible(false); + pluginTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_FLEX_LAST_COLUMN); pluginTableNameColumn.setCellValueFactory(cellData -> { return new SimpleStringProperty(cellData.getValue().getName()); @@ -133,20 +146,33 @@ public void initialize() { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); - this.getStyleClass().remove("cell-unknown-link"); - this.getStyleClass().remove("cell-missing-link"); - this.getStyleClass().remove("cell-found-link"); + setText(null); if (item == null || empty) { - setText(null); + setGraphic(null); } else { - setText(item); - if (item.equals(LookupResult.MISSING.getValue())) { - this.getStyleClass().add("cell-missing-link"); - } else if (item.equals(LookupResult.FOUND.getValue())) { - this.getStyleClass().add("cell-found-link"); + String iconLiteral; + String iconStyleClass; + String labelStyleClass; + if (item.equals(LookupResult.FOUND.getValue())) { + iconLiteral = "mdi2c-check"; + iconStyleClass = "status-icon-found"; + labelStyleClass = "label-success"; + } else if (item.equals(LookupResult.MISSING.getValue())) { + iconLiteral = "mdi2a-alert-circle-outline"; + iconStyleClass = "status-icon-missing"; + labelStyleClass = "label-danger"; } else { - this.getStyleClass().add("cell-unknown-link"); + iconLiteral = "mdi2h-help-circle-outline"; + iconStyleClass = "status-icon-unknown"; + labelStyleClass = "label-disabled"; } + FontIcon icon = new FontIcon(iconLiteral); + icon.getStyleClass().add(iconStyleClass); + Label label = new Label(item); + label.getStyleClass().add(labelStyleClass); + HBox badge = new HBox(5, icon, label); + badge.getStyleClass().add("lookup-status-badge"); + setGraphic(badge); } } }); @@ -167,8 +193,8 @@ public void updateItem(Plugin item, boolean empty) { setGraphic(null); } else { Hyperlink link = new Hyperlink(); - link.setGraphic(new ImageView(getApplicationDefaults().linkIconImage)); - link.setOnAction(e -> { + link.setGraphic(new FontIcon("mdi2p-power-plug-outline")); + link.setOnAction(ev -> { pluginsController.selectPluginById(item.getId()); mainController.navigateToMainTab(MainController.PLUGINS_TAB_INDEX); }); @@ -187,7 +213,7 @@ public void updateItem(PluginFormat item, boolean empty) { } else { setText(null); setGraphic(new HBox(new PluginFormatBadgeView( - item, getApplicationDefaults(), PluginFormatBadgeView.DisplayMode.ICON_ONLY))); + item, getApplicationDefaults(), PluginFormatBadgeView.DisplayMode.DEFAULT))); } } }); @@ -210,6 +236,11 @@ public void refresh() { pluginTable.setItems(FXCollections.observableList(project.getPlugins().stream().toList())); + BackgroundImage bgImg = new BackgroundImage(this.getApplicationDefaults().getDawApplicationImage(project.getApplication()), + BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, + new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO, false, false, true, true)); + projectScreenshotPane.setBackground(new Background(bgImg)); + } public ObjectProperty projectProperty() { diff --git a/owlplug-client/src/main/resources/fxml/MainView.fxml b/owlplug-client/src/main/resources/fxml/MainView.fxml index 49db49c0..5ae46a7a 100644 --- a/owlplug-client/src/main/resources/fxml/MainView.fxml +++ b/owlplug-client/src/main/resources/fxml/MainView.fxml @@ -39,7 +39,7 @@ - + diff --git a/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml b/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml index 1155fb4e..8e92af1d 100644 --- a/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml +++ b/owlplug-client/src/main/resources/fxml/projects/ProjectInfoView.fxml @@ -18,6 +18,7 @@ + @@ -91,7 +92,7 @@