diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties index 0a16dc0489b4bb8d7d1f4db417a9b850e0695c64..79621f247fa770a2d6dcdae88b077d9fdf51bb1b 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 86cb23c1f4f1362e39a0d79c5b87ea3147c51acd..4bd1254fc09e075952d7c577831c15a24d046fe2 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 bb004a440ff00caa12fc400a3ab4fb9f44cdb2eb..55faa68979db2e06bc6785f179baf2e25b2cdc4d 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 baca001b6e97120e49f96f5bde06800138aded15..85cbfc728b19d6443165680d0be11caa0c08f28f 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 cf8388f1f83557cf8c9ab87b7a84c2faca1de8ee..2a30f26096cc1903350e41949affaf715100c79c 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 e83f9a002ea0c3e33e757e3d006526d0b062a5b4..b70770965d34c42106290a5b5a3c8196fc6e0b7e 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 0000000000000000000000000000000000000000..125317608174802768a73a3565090b5027fffc16 --- /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 0000000000000000000000000000000000000000..7805f9ffc202c94465606069b8aed99580ecc556 --- /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 0d280a36ffd3d4af4f52975cd8cf2f4c1c577c85..15ee28d8a532a3cea64778328c4f595f316c82b3 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 a0982852b0e2c4766dc3c5a1782ef0e8451744c8..d00c9d6280301a9b8a24bafc90967d7ca236ffed 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 0000000000000000000000000000000000000000..023fbdac355ee3569521fbe7a87c347466935f1d --- /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 38c20064b015bdcc7e1438c8f705dcbf6cbf117d..c4f7f393ed6df87c33df3f4d2ef516734359e0c6 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; + } }