From 3927e3183f93b4e0b8c1a6b305e58f1ce473bebe Mon Sep 17 00:00:00 2001 From: tobias <tobias.ullerich@icloud.com> Date: Tue, 4 Oct 2016 15:38:54 +0200 Subject: [PATCH] Add AudioCapability Feature --- .../tobias/playpad/assets/lang/_de.properties | 6 ++- .../assets/view/option/profile/audioTab.fxml | 10 +++-- .../audio/ClipAudioHandlerConnect.java | 10 ++++- .../playpad/audio/JavaFXHandlerConnect.java | 9 ++++ .../audio/TinyAudioHandlerConnect.java | 9 ++++ .../profile/AudioTabViewController.java | 43 +++++++++++++++---- .../tobias/playpad/audio/AudioCapability.java | 27 ++++++++++++ .../de/tobias/playpad/audio/AudioFeature.java | 11 +++++ .../playpad/audio/AudioHandlerConnect.java | 13 +++++- .../de/tobias/playpad/audio/Equalizable.java | 2 +- .../tobias/playpad/audio/Soundcardable.java | 14 ++++++ .../audio/NativeAudioWinHandlerConnect.java | 10 +++++ 12 files changed, 147 insertions(+), 17 deletions(-) create mode 100644 PlayWallCore/src/de/tobias/playpad/audio/AudioCapability.java create mode 100644 PlayWallCore/src/de/tobias/playpad/audio/AudioFeature.java create mode 100644 PlayWallCore/src/de/tobias/playpad/audio/Soundcardable.java diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties index 0a16dc04..79621f24 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties +++ b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties @@ -289,4 +289,8 @@ Tooltip.Page.LeftMove=Nach links verschieben Tooltip.Page.RightMove=Nach rechts verschieben Tooltip.Page.Rename=Umbenennen Tooltip.Page.Clone=Duplizieren -Tooltip.Page.Delete=L�schen \ No newline at end of file +Tooltip.Page.Delete=L�schen + +# Audio Features +EQUALIZER=Equalizer: +SOUNDCARD=Soundkarte: \ No newline at end of file diff --git a/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/audioTab.fxml b/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/audioTab.fxml index 86cb23c1..4bd1254f 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/audioTab.fxml +++ b/PlayWall/assets/de/tobias/playpad/assets/view/option/profile/audioTab.fxml @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> +<?import javafx.geometry.*?> <?import java.lang.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> -<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> +<VBox spacing="14.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <children> <HBox layoutX="14.0" layoutY="14.0" spacing="14.0"> <children> @@ -12,6 +13,9 @@ <ComboBox fx:id="audioTypeComboBox" layoutX="156.0" layoutY="14.0" prefHeight="26.0" prefWidth="226.0" /> </children> </HBox> - <AnchorPane fx:id="audioUserInfoSettings" layoutX="14.0" layoutY="53.0" prefHeight="312.0" prefWidth="617.0" AnchorPane.bottomAnchor="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" AnchorPane.topAnchor="53.0" /> + <VBox fx:id="options" prefHeight="200.0" prefWidth="100.0" spacing="14.0" /> </children> -</AnchorPane> + <padding> + <Insets bottom="14.0" left="14.0" right="14.0" top="14.0" /> + </padding> +</VBox> diff --git a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java index bb004a44..55faa689 100644 --- a/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java +++ b/PlayWall/src/de/tobias/playpad/audio/ClipAudioHandlerConnect.java @@ -23,7 +23,15 @@ public class ClipAudioHandlerConnect extends AudioHandlerConnect implements Auto @Override public void close() throws Exception { - TinyAudioHandler.shutdown(); + ClipAudioHandler.shutdown(); } + @Override + public boolean isFeatureAvaiable(AudioCapability audioCapability) { + for (Class<?> clazz : ClipAudioHandler.class.getInterfaces()) { + if (clazz.equals(audioCapability.getAudioFeature())) + return true; + } + return false; + } } diff --git a/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java index baca001b..85cbfc72 100644 --- a/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java +++ b/PlayWall/src/de/tobias/playpad/audio/JavaFXHandlerConnect.java @@ -19,4 +19,13 @@ public class JavaFXHandlerConnect extends AudioHandlerConnect { public String getType() { return JavaFXAudioHandler.TYPE; } + + @Override + public boolean isFeatureAvaiable(AudioCapability audioCapability) { + for (Class<?> clazz : JavaFXAudioHandler.class.getInterfaces()) { + if (clazz.equals(audioCapability.getAudioFeature())) + return true; + } + return false; + } } diff --git a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java index cf8388f1..2a30f260 100644 --- a/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java +++ b/PlayWall/src/de/tobias/playpad/audio/TinyAudioHandlerConnect.java @@ -25,4 +25,13 @@ public class TinyAudioHandlerConnect extends AudioHandlerConnect implements Auto public void close() throws Exception { TinyAudioHandler.shutdown(); } + + @Override + public boolean isFeatureAvaiable(AudioCapability audioCapability) { + for (Class<?> clazz : TinyAudioHandler.class.getInterfaces()) { + if (clazz.equals(audioCapability.getAudioFeature())) + return true; + } + return false; + } } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java index e83f9a00..b7077096 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/profile/AudioTabViewController.java @@ -3,6 +3,8 @@ package de.tobias.playpad.viewcontroller.option.profile; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.Strings; +import de.tobias.playpad.audio.AudioCapability; +import de.tobias.playpad.audio.AudioHandlerConnect; import de.tobias.playpad.audio.AudioRegistry; import de.tobias.playpad.project.Project; import de.tobias.playpad.registry.NoSuchComponentException; @@ -12,17 +14,24 @@ import de.tobias.playpad.viewcontroller.AudioHandlerViewController; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.playpad.viewcontroller.option.IProfileReloadTask; import de.tobias.playpad.viewcontroller.option.ProfileSettingsTabViewController; +import de.tobias.utils.ui.icon.FontAwesomeType; +import de.tobias.utils.ui.icon.FontIcon; import de.tobias.utils.util.Localization; import javafx.concurrent.Task; import javafx.fxml.FXML; +import javafx.geometry.Pos; +import javafx.scene.Parent; import javafx.scene.control.ComboBox; -import javafx.scene.layout.AnchorPane; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; public class AudioTabViewController extends ProfileSettingsTabViewController implements IProfileReloadTask { // Audio @FXML private ComboBox<String> audioTypeComboBox; - @FXML private AnchorPane audioUserInfoSettings; + @FXML private VBox options; + private AudioHandlerViewController audioViewController; private boolean changeAudioSettings; @@ -31,7 +40,7 @@ public class AudioTabViewController extends ProfileSettingsTabViewController imp if (playerActive) { audioTypeComboBox.setDisable(true); - audioUserInfoSettings.setDisable(true); + options.setDisable(true); } } @@ -60,21 +69,37 @@ public class AudioTabViewController extends ProfileSettingsTabViewController imp } } - audioUserInfoSettings.getChildren().clear(); + options.getChildren().clear(); + AudioRegistry audioHandlerRegistry = PlayPadPlugin.getRegistryCollection().getAudioHandlers(); try { - AudioRegistry audioHandlerRegistry = PlayPadPlugin.getRegistryCollection().getAudioHandlers(); - audioViewController = audioHandlerRegistry.getComponent(classID).getAudioHandlerSettingsViewController(); + AudioHandlerConnect audio = audioHandlerRegistry.getComponent(classID); - if (audioViewController != null) { - audioUserInfoSettings.getChildren().add(audioViewController.getParent()); + for (AudioCapability audioCapability : AudioCapability.getFeatures()) { + options.getChildren().add(createCapabilityView(audio, audioCapability)); } } catch (NoSuchComponentException e) { e.printStackTrace(); - // TODO Errorhandling } } + private Parent createCapabilityView(AudioHandlerConnect audio, AudioCapability audioCapability) { + HBox hbox = new HBox(14); + Label nameLabel = new Label(Localization.getString(audioCapability.getName())); + nameLabel.setAlignment(Pos.CENTER_RIGHT); + nameLabel.setMinWidth(150); + + Label availableLabel; + if (audio.isFeatureAvaiable(audioCapability)) { + availableLabel = new FontIcon(FontAwesomeType.CHECK); + } else { + availableLabel = new FontIcon(FontAwesomeType.TIMES); + } + + hbox.getChildren().addAll(nameLabel, availableLabel); + return hbox; + } + @Override public void loadSettings(Profile profile) { ProfileSettings profileSettings = profile.getProfileSettings(); diff --git a/PlayWallCore/src/de/tobias/playpad/audio/AudioCapability.java b/PlayWallCore/src/de/tobias/playpad/audio/AudioCapability.java new file mode 100644 index 00000000..12531760 --- /dev/null +++ b/PlayWallCore/src/de/tobias/playpad/audio/AudioCapability.java @@ -0,0 +1,27 @@ +package de.tobias.playpad.audio; + +public class AudioCapability { + + public static final AudioCapability EQUALIZER = new AudioCapability("EQUALIZER", Equalizable.class); + public static final AudioCapability SOUNDCARD = new AudioCapability("SOUNDCARD", Soundcardable.class); + + private String name; + private Class<? extends AudioFeature> clazz; + + private AudioCapability(String name, Class<? extends AudioFeature> clazz) { + this.name = name; + this.clazz = clazz; + } + + public String getName() { + return name; + } + + public Class<? extends AudioFeature> getAudioFeature() { + return clazz; + } + + public static AudioCapability[] getFeatures() { + return new AudioCapability[] { EQUALIZER, SOUNDCARD }; + } +} diff --git a/PlayWallCore/src/de/tobias/playpad/audio/AudioFeature.java b/PlayWallCore/src/de/tobias/playpad/audio/AudioFeature.java new file mode 100644 index 00000000..7805f9ff --- /dev/null +++ b/PlayWallCore/src/de/tobias/playpad/audio/AudioFeature.java @@ -0,0 +1,11 @@ +package de.tobias.playpad.audio; + +/** + * Flag für Audiofeature + * + * @author tobias + * + */ +public interface AudioFeature { + +} diff --git a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java index 0d280a36..15ee28d8 100644 --- a/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java +++ b/PlayWallCore/src/de/tobias/playpad/audio/AudioHandlerConnect.java @@ -4,8 +4,8 @@ import de.tobias.playpad.pad.conntent.PadContent; import de.tobias.playpad.viewcontroller.AudioHandlerViewController; /** - * Audio Handler Interface zur Verwaltung einer AudioHandler Implementierung. Für Aktionen beim schließen des - * Programmes, muss der AudioHandler AutoClosable implementieren. + * Audio Handler Interface zur Verwaltung einer AudioHandler Implementierung. Für Aktionen beim schließen des Programmes, muss der AudioHandler + * AutoClosable implementieren. * * @author tobias * @@ -35,4 +35,13 @@ public abstract class AudioHandlerConnect { * @return Type */ public abstract String getType(); + + /** + * Prüft ob ein Feature verfügbar ist. + * + * @param audioCapability + * Feature + * @return <code>true</code> Verfügbar + */ + public abstract boolean isFeatureAvaiable(AudioCapability audioCapability); } diff --git a/PlayWallCore/src/de/tobias/playpad/audio/Equalizable.java b/PlayWallCore/src/de/tobias/playpad/audio/Equalizable.java index a0982852..d00c9d62 100644 --- a/PlayWallCore/src/de/tobias/playpad/audio/Equalizable.java +++ b/PlayWallCore/src/de/tobias/playpad/audio/Equalizable.java @@ -2,7 +2,7 @@ package de.tobias.playpad.audio; import javafx.scene.media.AudioEqualizer; -public interface Equalizable { +public interface Equalizable extends AudioFeature { public AudioEqualizer getAudioEqualizer(); } diff --git a/PlayWallCore/src/de/tobias/playpad/audio/Soundcardable.java b/PlayWallCore/src/de/tobias/playpad/audio/Soundcardable.java new file mode 100644 index 00000000..023fbdac --- /dev/null +++ b/PlayWallCore/src/de/tobias/playpad/audio/Soundcardable.java @@ -0,0 +1,14 @@ +package de.tobias.playpad.audio; + +/** + * Setzt die Soundcard für die Audioimplementierung. + * + * @author tobias + * + * @since 6.0.0 + * + */ +public interface Soundcardable extends AudioFeature { + + public void setOutputDevice(String name); +} diff --git a/PlayWallNativeWin/src/de/tobias/playpad/nawin/audio/NativeAudioWinHandlerConnect.java b/PlayWallNativeWin/src/de/tobias/playpad/nawin/audio/NativeAudioWinHandlerConnect.java index 38c20064..c4f7f393 100644 --- a/PlayWallNativeWin/src/de/tobias/playpad/nawin/audio/NativeAudioWinHandlerConnect.java +++ b/PlayWallNativeWin/src/de/tobias/playpad/nawin/audio/NativeAudioWinHandlerConnect.java @@ -1,5 +1,6 @@ package de.tobias.playpad.nawin.audio; +import de.tobias.playpad.audio.AudioCapability; import de.tobias.playpad.audio.AudioHandler; import de.tobias.playpad.audio.AudioHandlerConnect; import de.tobias.playpad.nawin.NativeAudioWinHandler; @@ -22,5 +23,14 @@ public class NativeAudioWinHandlerConnect extends AudioHandlerConnect { public String getType() { return "NativeWin"; } + + @Override + public boolean isFeatureAvaiable(AudioCapability audioCapability) { + for (Class<?> clazz : NativeAudioWinHandler.class.getInterfaces()) { + if (clazz.equals(audioCapability.getAudioFeature())) + return true; + } + return false; + } } -- GitLab