diff --git a/modules/decima-ext-shader-viewer/src/main/java/com/shade/decima/ui/data/viewer/shader/settings/ShaderViewerSettingsPage.java b/modules/decima-ext-shader-viewer/src/main/java/com/shade/decima/ui/data/viewer/shader/settings/ShaderViewerSettingsPage.java index 3ced52151..6c313724c 100644 --- a/modules/decima-ext-shader-viewer/src/main/java/com/shade/decima/ui/data/viewer/shader/settings/ShaderViewerSettingsPage.java +++ b/modules/decima-ext-shader-viewer/src/main/java/com/shade/decima/ui/data/viewer/shader/settings/ShaderViewerSettingsPage.java @@ -43,13 +43,19 @@ public JComponent createComponent(@NotNull PropertyChangeListener listener) { final JPanel tools = new JPanel(); tools.setBorder(new LabeledBorder("Disassemble")); - tools.setLayout(new MigLayout("ins panel", "[fill][grow,fill,400lp]", "")); + tools.setLayout(new MigLayout("ins panel,wrap", "[fill][grow,fill,400lp]", "")); tools.add(new JLabel("Direct3D compiler library:")); - tools.add(d3dCompilerPath, "wrap"); + tools.add(d3dCompilerPath); tools.add(new JLabel("DirectX compiler library:")); - tools.add(dxCompilerPath, "wrap"); + tools.add(dxCompilerPath); + + tools.add(new JLabel( + "These files are shipped with the game itself and located within the game directory.", + UIManager.getIcon("Action.informationIcon"), + SwingConstants.LEADING + ), "span"); return tools; } diff --git a/modules/decima-ui/src/main/java/com/shade/decima/ui/data/viewer/audio/settings/AudioPlayerSettingsPage.java b/modules/decima-ui/src/main/java/com/shade/decima/ui/data/viewer/audio/settings/AudioPlayerSettingsPage.java index 804b4d0d6..2b51929ab 100644 --- a/modules/decima-ui/src/main/java/com/shade/decima/ui/data/viewer/audio/settings/AudioPlayerSettingsPage.java +++ b/modules/decima-ui/src/main/java/com/shade/decima/ui/data/viewer/audio/settings/AudioPlayerSettingsPage.java @@ -11,6 +11,8 @@ import net.miginfocom.swing.MigLayout; import javax.swing.*; +import javax.swing.event.HyperlinkEvent; +import java.awt.*; import java.beans.PropertyChangeListener; import java.util.Objects; @@ -58,20 +60,40 @@ public JComponent createComponent(@NotNull PropertyChangeListener listener) { final JPanel tools = new JPanel(); tools.setBorder(new LabeledBorder("Playback")); - tools.setLayout(new MigLayout("ins panel", "[fill][grow,fill,400lp]", "")); + tools.setLayout(new MigLayout("ins panel,wrap", "[fill][grow,fill,400lp]", "")); tools.add(new JLabel("ww2ogg executable:")); - tools.add(ww2oggPath, "wrap"); + tools.add(ww2oggPath); tools.add(new JLabel("ww2ogg codebooks:")); - tools.add(ww2oggCodebooksPath, "wrap"); + tools.add(ww2oggCodebooksPath); tools.add(new JLabel("revorb executable:")); - tools.add(revorbPath, "wrap"); + tools.add(revorbPath); tools.add(new JLabel("ffmpeg executable:")); tools.add(ffmpegPath); + final JEditorPane pane = new JEditorPane(); + pane.setEditable(false); + pane.setContentType("text/html"); + pane.setText("You can download individual entries from the following links: ww2ogg, revorb, and ffmpeg."); + pane.addHyperlinkListener(e -> { + if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { + IOUtils.unchecked(() -> { + Desktop.getDesktop().browse(e.getURL().toURI()); + return null; + }); + } + }); + + final JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); + panel.add(new JLabel(UIManager.getIcon("Action.informationIcon"))); + panel.add(pane); + + tools.add(panel, "span"); + return tools; }